孟小華,覃大勝,鄭冬琴,周玉宇
(暨南大學(xué) a.計(jì)算機(jī)科學(xué)系;b.物理系,廣州510632)
自從文獻(xiàn)[1]首次應(yīng)用分子動(dòng)力學(xué)研究硬球系統(tǒng)以來(lái),分子動(dòng)力學(xué)廣泛應(yīng)用于晶體生長(zhǎng)、壓痕試驗(yàn)、摩擦學(xué)以及低壓金剛石合成等領(lǐng)域。在新興的納米工程領(lǐng)域,建立在連續(xù)介質(zhì)基礎(chǔ)上的宏觀機(jī)理很難解釋納米工程中出現(xiàn)的一些特殊現(xiàn)象,因而分子動(dòng)力學(xué)方法成為重要的研究手段之一[2]。文獻(xiàn)[3]通過(guò)分子動(dòng)力學(xué)模擬了Ni針尖在Au(001)表面的納米壓痕過(guò)程,其模擬結(jié)果發(fā)表在《科學(xué)》上,成為該領(lǐng)域的標(biāo)志性成果。文獻(xiàn)[4]通過(guò)分子動(dòng)力學(xué)仿真算法,研究了不同晶粒尺寸的多晶銅塑性變形過(guò)程,從而發(fā)現(xiàn)晶粒尺寸與強(qiáng)度不完全滿足Hall-Petch關(guān)系。
分子動(dòng)力學(xué)仿真算法,有著理論分析方法和實(shí)驗(yàn)方法無(wú)法比擬的優(yōu)點(diǎn),但是其計(jì)算要求極高,往往受限于計(jì)算機(jī)的計(jì)算能力。為了提高仿真算法規(guī)模,國(guó)內(nèi)外許多專家學(xué)者做了大量研究[5-7]。仿真算法已由最初提高單機(jī)規(guī)模的串行算法[8],發(fā)展到如今通過(guò)將計(jì)算任務(wù)分配給多個(gè)CPUs,從而提高模擬規(guī)模的并行算法[9],規(guī)模也由最初的幾千個(gè)原子提高到上百萬(wàn)、上千萬(wàn)甚至到上億個(gè)原子。由于碳納米管[10]系統(tǒng)中含有大量粒子,結(jié)構(gòu)和受力復(fù)雜[11],其分子動(dòng)力學(xué)模擬需要極強(qiáng)的計(jì)算能力,對(duì)CPU處理能力也有較高的要求。而利用CPU實(shí)現(xiàn)仿真串行算法,計(jì)算量極大,運(yùn)算時(shí)間長(zhǎng),并且模擬粒子數(shù)也受到很大的限制。
本文基于CUDA平臺(tái),通過(guò)調(diào)度GPU多個(gè)流處理單元[12-13],利用GPU強(qiáng)大的并行計(jì)算能力和高效的數(shù)據(jù)傳輸能力,對(duì)碳納米管分子動(dòng)力學(xué)的并行仿真算法進(jìn)行研究和實(shí)現(xiàn),通過(guò)把碳納米管系統(tǒng)分成多層可并行處理的單元進(jìn)行并行計(jì)算。
分子動(dòng)力學(xué)是一套分子模擬方法,是一種重要且有效的原子尺度計(jì)算機(jī)模擬手段。該方法主要依靠牛頓力學(xué)來(lái)模擬分子體系的運(yùn)動(dòng),以在由分子體系的不同狀態(tài)構(gòu)成的系統(tǒng)中抽取樣本,從而計(jì)算體系的構(gòu)型積分,并以構(gòu)型積分的結(jié)果為基礎(chǔ)進(jìn)一步計(jì)算體系的熱力學(xué)量和其他宏觀性質(zhì)。因而,用分子動(dòng)力學(xué)是碳納米管仿真的重要途徑。
在分子動(dòng)力學(xué)Verlet仿真算法中,粒子位置的泰勒展開式如下:
(1)將x(t+Δt)和x(t-Δt)進(jìn)行泰勒展開如下式所示:
其中,x(t-Δt)表示為前一時(shí)刻的位置;x(t+Δt)表示為后一時(shí)刻的位置。
(2)將式(1)和式(2)相加,得到位置表達(dá)式如下:
(3)將式(1)和式(2)相減,再兩邊同時(shí)除以2Δt,獲得速度的表達(dá)式如下:
(4)由式(1)~式(4),在已知粒子 t-2Δt時(shí)刻的位置 x(t-2Δt)、t-Δt時(shí)刻的位置 x(t-Δt)和t-Δt時(shí)刻的加速度a(t-Δt)的情況下,啟動(dòng)Verlet算法進(jìn)行積分:根據(jù) x(t-2Δt),x(t-Δt)和 a(t-Δt),將 t=t-Δt代入式(3),獲得 x(t);根據(jù) x(t),基于一定的勢(shì)函數(shù)更新a(t);同時(shí),根據(jù)x(t)和x(t-2Δt),將t=t-Δt代入式(4),更新v(t-Δt);即得到粒子x(t),v(t-Δt)和a(t),重復(fù)執(zhí)行該步驟。
由上,可利用Verlet列表法設(shè)計(jì)串行仿真算法的實(shí)現(xiàn)步驟如下:
(1)先構(gòu)造如圖1所示的碳納米管結(jié)構(gòu)模型,并設(shè)置各種參值。
(2)設(shè)計(jì)前端熱浴和后端熱浴。
(3)構(gòu)造并調(diào)用計(jì)算碳納米管結(jié)構(gòu)內(nèi)部的力的結(jié)構(gòu)函數(shù)及計(jì)算碳納米球C60與碳納米管間范德華力的函數(shù)等。
(4)計(jì)算所有的力,解牛頓運(yùn)動(dòng)方程,分層計(jì)算并積分(算法的核心)。
(5)模擬出碳納米球C60隨著熱浴時(shí)間的運(yùn)行軌跡,根據(jù)運(yùn)算結(jié)果,可畫出和碳納米管內(nèi)隨著能量傳送的溫度變化曲線圖。
在數(shù)據(jù)庫(kù)文件中讀取碳納米管系統(tǒng)的參數(shù)條件,如初始溫度、粒子數(shù)、密度時(shí)間等,構(gòu)造碳納米管系統(tǒng)模型MOD1及參數(shù)模型MOD2,模型MOD2可以設(shè)置各種參數(shù)在模型MOD1上使用,模型MOD1如圖1~圖3所示,由碳納米管和設(shè)置在碳納米管內(nèi)部的一個(gè)足球狀C60分子(由60個(gè)碳原子構(gòu)成的分子,形似足球,又名足球烯)組成,所述碳納米管為層狀中空結(jié)構(gòu),管身是準(zhǔn)圓管結(jié)構(gòu),由多個(gè)六邊形碳環(huán)結(jié)構(gòu)單元組成,其直徑一般在一到幾十個(gè)納米之間,長(zhǎng)度則遠(yuǎn)遠(yuǎn)大于其直徑,對(duì)該模型進(jìn)行初始化,讀取模型中所有粒子的速度和位置坐標(biāo)。
圖1 碳納米管
圖2 C60分子
圖3 碳納米管系統(tǒng)模型
在碳納米管中,除管口層粒子外,其余粒子相互組成正六邊形。如圖4所示,非管口粒子都有3個(gè)近鄰粒子(ip,jp,kp均為idx粒子的近鄰粒子)。
圖4 碳納米結(jié)構(gòu)
在碳納米管系統(tǒng)中,因?yàn)镃60分子受到碳納米管管壁上碳粒子產(chǎn)生的力,在平衡位置上來(lái)回振動(dòng),當(dāng)C60分子處于平衡狀態(tài)時(shí),采用Gaussian熱浴法(約束溫度調(diào)節(jié)方法),在碳納米管兩端同時(shí)分別設(shè)置不同溫度的熱浴條件,并設(shè)定熱浴時(shí)間,使碳納米管管壁上碳粒子和C60分子因平衡狀態(tài)被打破而發(fā)生位置和速度的變化。而這些變化是相互影響的,具有傳遞性,伴隨著這些粒子位置和速度的變化,能量在長(zhǎng)管狀的碳納米管系統(tǒng)內(nèi)發(fā)生傳遞。由于C60分子位于碳納米管內(nèi),其受力會(huì)隨著碳納米管組成粒子的位置改變而改變,因此伴隨著能量傳遞的過(guò)程,C60分子的運(yùn)動(dòng)狀態(tài)和能量也會(huì)發(fā)生改變;采用Gaussian熱浴法的基本原理是在運(yùn)動(dòng)方程中加入摩擦力fi,并將其與粒子速度vi聯(lián)系起來(lái),其受力公式為:
當(dāng)平衡態(tài)時(shí),系統(tǒng)溫度不變,因此有dEk/dt=0。即有:,由此可得
在CUDA平臺(tái)上對(duì)碳納米管進(jìn)行分割,分割成多層大小適宜、相互獨(dú)立的計(jì)算單元,分割原則是在避免過(guò)多重復(fù)計(jì)算的前提上提高并行度,即分割的計(jì)算單元必須合理粗細(xì)化。因?yàn)橛?jì)算單元過(guò)大,則并行不明顯,計(jì)算單元過(guò)小,會(huì)導(dǎo)致太多不必要的重復(fù)計(jì)算。由于粒子間的作用力間距影響較大,必須設(shè)定一個(gè)距離臨界值,以判斷其位置關(guān)系,當(dāng)粒子間的間距小于距離臨界值,為近鄰粒子;當(dāng)粒子間的間距大于距離臨界值,為次鄰粒子,則認(rèn)為其相互間的分子作用力可以忽略不計(jì)。
可以預(yù)料到的是每個(gè)中心粒子最多只會(huì)對(duì)其3個(gè)近鄰及3個(gè)近鄰的各2個(gè)近鄰,即6個(gè)次鄰施力??梢赃@樣來(lái)考慮,以中心粒子以及3個(gè)近鄰6個(gè)次鄰劃分到一組計(jì)算。分批次并行計(jì)算。在某一批次計(jì)算中,未當(dāng)成中心粒子計(jì)算的一個(gè)粒子加入可并行計(jì)算隊(duì)列中,由于競(jìng)爭(zhēng)關(guān)系,其3個(gè)近鄰6個(gè)次鄰在本批次中將不能加入隊(duì)列,同樣的,對(duì)這3個(gè)近鄰6個(gè)次鄰施力的其他所有未計(jì)算粒子也不能加入隊(duì)列中。這樣,同一批次的粒子將可以并行計(jì)算而不產(chǎn)生競(jìng)爭(zhēng)關(guān)系。
設(shè)計(jì)分裂算法,采用CPU遍歷計(jì)算單元得到n個(gè)可并行運(yùn)算隊(duì)列:
(1)若所有粒子均已作為中心計(jì)算粒子,跳到步驟(8)。
(2)按次序找到第一個(gè)非競(jìng)爭(zhēng)粒子并沒有按中心計(jì)算的粒子,加入可并行運(yùn)算隊(duì)列。
(3)標(biāo)記該粒子的所有近鄰為本并行隊(duì)列一度不可并行粒子,若近鄰已經(jīng)是二度不可并行粒子,則提升為一度不可計(jì)算。
(4)標(biāo)記該粒子所有次鄰為本并行隊(duì)列二度不可并行粒子,若次鄰為一度不可并行粒子,則不修改其度數(shù)。
(5)標(biāo)記本粒子為已按中心計(jì)算粒子。
(6)判斷是否已遍歷到粒子隊(duì)尾。若是繼續(xù)執(zhí)行,若否跳到步驟(1)。
(7)下一個(gè)可并行隊(duì)列開始,返回步驟(2)。
(8)結(jié)束。
分裂算法在CPU預(yù)處理階段完成,只計(jì)算一次得出的可并行隊(duì)列可以在后面的循環(huán)計(jì)算中一直使用。當(dāng)循環(huán)次數(shù)較多時(shí),分裂算法所使用的時(shí)間占總時(shí)間比例將大大減少,對(duì)程序總體性能影響也降到比較低的程度。但是由于算法核心是批次計(jì)算,因此計(jì)算力時(shí)將多次啟動(dòng)內(nèi)核計(jì)算函數(shù),一定程度上加大了運(yùn)行開銷。
如圖5和圖6所示,調(diào)度GPU的流處理單元,采用Verlet算法進(jìn)行并行運(yùn)算和處理:
(1)按碳納米管系統(tǒng)模型所有粒子的位置,計(jì)算近鄰粒子以及次鄰粒子間的鍵關(guān)系和角度關(guān)系。
(2)調(diào)度GPU的流處理單元,并行計(jì)算被分割在不同計(jì)算單元里的粒子,并積累計(jì)算碳納米管管壁上每個(gè)粒子與其近鄰粒子的相互作用力。
(3)根據(jù)C60分子所在區(qū)域,計(jì)算C60分子內(nèi)每個(gè)粒子與其所在碳納米管區(qū)域中的每個(gè)粒子的相互作用力(范德華力)。
(4)根據(jù)粒子所受到的力及其速度,更新粒子位置,再執(zhí)行步驟(2)和步驟(3)。
(5)根據(jù)粒子所受到的力,計(jì)算粒子本次速度及碳納米管前、后兩端熱浴的熱流值。
(6)若達(dá)到循環(huán)頻數(shù),則計(jì)算結(jié)束;否則,在CPU端間隔保存粒子的數(shù)據(jù),返回步驟(4)。
圖5 碳納米管分子動(dòng)力學(xué)并行仿真中的調(diào)度模式
圖6 碳納米管分子動(dòng)力學(xué)并行仿真算法的流程
Verlet仿真程序是一個(gè)計(jì)算力→計(jì)算位置→計(jì)算速度→計(jì)算力……的不斷循環(huán)過(guò)程,每個(gè)粒子獨(dú)立運(yùn)行一個(gè)線程,然后循環(huán)成千上萬(wàn)次甚至更多,因此小部分的程序優(yōu)化也會(huì)給整個(gè)程序帶來(lái)極大的性能提升。對(duì)于CUDA的程序而言,優(yōu)化主要集中在指令優(yōu)化、存儲(chǔ)器訪問(wèn)優(yōu)化、網(wǎng)格優(yōu)化以及資源均衡等。
目前,GPU單精度計(jì)算性能要遠(yuǎn)遠(yuǎn)超過(guò)雙精度計(jì)算性能,因此,程序中對(duì)精度要求不高的部分可使用單精度運(yùn)算代替雙精度運(yùn)算。在GPU中整數(shù)乘法、除法、求模運(yùn)算的指令吞吐量較為有限,而控制流指令由于會(huì)影響指令發(fā)射器的并行發(fā)射,打斷指令流開銷巨大。此時(shí),在可知整數(shù)范圍中以經(jīng)優(yōu)化的庫(kù)24位整數(shù)運(yùn)算__mul24,__umul24代替32位整數(shù)運(yùn)算,以__sinf(x),__fdivide(x,y)等代替相應(yīng)的運(yùn)算。盡量避免整數(shù)除和模運(yùn)算,或以(i&(n-1))代替(i%n),除數(shù)是2的冪次方時(shí)以移位運(yùn)算代替除法。
合理使用share memory資源,減少不必要的臨時(shí)變量,使用精簡(jiǎn)函數(shù)以減少register使用。同時(shí),將程序中的常量以及計(jì)算中可合并常量保存于constant memory常量存儲(chǔ)器中。Global memory是顯存中容量最大的存儲(chǔ)器,可被任意GPU線程讀寫存儲(chǔ)器任意位置,但由于全局存儲(chǔ)器沒有緩存,具有較高的訪存延遲。因此,程序中在減少不必要全局存儲(chǔ)讀寫的同時(shí),增加處理器占用率,即當(dāng)一個(gè)block訪存時(shí),另一個(gè)block可切入運(yùn)算隱藏延遲。此外,改變顯存的存儲(chǔ)結(jié)構(gòu),盡量滿足合并訪問(wèn)存儲(chǔ)器。
考慮到GPU并行處理要發(fā)揮其強(qiáng)大的并行計(jì)算能力,要有足夠多的線程并行運(yùn)算。因此,把部分較小計(jì)算量的計(jì)算交給CPU執(zhí)行。如計(jì)算C60與炭納米管間范德華力函數(shù),由于C60只有60個(gè)粒子,相對(duì)來(lái)說(shuō)并行度小,將其計(jì)算放到CPU里。由于內(nèi)核的啟動(dòng)是異步的,因此把CPU函數(shù)放到內(nèi)核啟動(dòng)函數(shù)下面,CPU啟動(dòng)內(nèi)核執(zhí)行GPU運(yùn)算時(shí)可立即返回執(zhí)行CPU程序,實(shí)現(xiàn)CPU與GPU的并行處理。
本文測(cè)試在 Widows 7平臺(tái)下進(jìn)行,GPU1和GPU2是2個(gè)不同型號(hào)的顯卡,每次實(shí)驗(yàn)只選取其中一塊顯卡。為準(zhǔn)備記錄運(yùn)行時(shí)間并方便CPU與GPU并行運(yùn)行,測(cè)試時(shí)間以CPU時(shí)間為記錄。部分硬件參數(shù)如表1所示。
表1 測(cè)試平臺(tái)部分硬件參數(shù)
分別使用CPU串行、GeForce GT 430顯卡和Quadro 2000顯卡按不同粒子數(shù)計(jì)算,測(cè)試三者耗時(shí),如表2所示。
表2 串行并行程序運(yùn)行于不同硬件平臺(tái)時(shí)的數(shù)據(jù)
為使數(shù)據(jù)形象化,將GPU1與GPU2數(shù)據(jù)繪制成條狀圖。由圖7可得,前期粒子數(shù)較少時(shí),2種顯卡耗時(shí)相差不大,但隨著粒子數(shù)的增加,GeForce GT 430顯卡耗時(shí)增長(zhǎng)速度逐漸快于Quadro 2 000顯卡。而當(dāng)粒子數(shù)量增加到120 000個(gè)時(shí),前者耗時(shí)幾乎是后者的2倍。
圖7 2種并行顯卡運(yùn)行程序耗時(shí)對(duì)比
由表1可知,Quadro 2 000有著2倍于GeForce GT 430的 CUDA Cores(即流處理器 stream processor)。結(jié)合GPU的線程運(yùn)行方式,當(dāng)GPU的處理單元增多,同時(shí)處于運(yùn)行狀態(tài)的線程也會(huì)相應(yīng)增加。因此,當(dāng)無(wú)其他硬件限制時(shí),GPU并行計(jì)算的性能幾乎隨著GPU處理器的增加而線性增加,使用擁有更多處理器的GPU能給Verlet帶來(lái)更多的性能提升。
對(duì)比CPU串行程序與GPU并行程序的性能,計(jì)算不同粒子數(shù)下耗時(shí),GPU使用Quadro 2000。
表格數(shù)據(jù)繪制成串并行程序執(zhí)行時(shí)間對(duì)比如圖8所示??梢悦黠@看出,當(dāng)要計(jì)算的粒子數(shù)不斷增加時(shí),并行程序相比于串行程序的加速比有一定程度的增加。粒子數(shù)量在1 000~4 000時(shí),由于線程數(shù)據(jù)不足,不能很好地隱藏GPU程序加載時(shí)間、數(shù)據(jù)傳輸時(shí)間以及訪存時(shí)間。當(dāng)粒子數(shù)量不斷增加時(shí),加速效果越來(lái)越好。
圖8 串并行程序執(zhí)行時(shí)間對(duì)比
為分析并行算法的加速比,將表2中串并行程序運(yùn)算時(shí)間按公式:
計(jì)算,GPU使用Quadro 2000,并將結(jié)果繪制成GPU并行計(jì)算加速比,如圖9所示。
圖9 GPU并行計(jì)算加速比
可以看出,隨著粒子數(shù)的增加,GPU并行算法相比于串行算法的加速比也隨之增大。當(dāng)粒子數(shù)到達(dá)120 000個(gè)時(shí),加速比達(dá)到1 400%,即14倍的加速效果。
為分析影響GPU并行程序性能因素,使用性能評(píng)估工具NVIDIA Visual Profiler對(duì)程序進(jìn)行分析。目標(biāo)程序計(jì)算600層12 000個(gè)粒子,每個(gè)block中有128個(gè)線程。首先分析各函數(shù)運(yùn)行時(shí)間占總運(yùn)算時(shí)間的比例。通過(guò)多次運(yùn)算求平均值,如圖10所示。
圖10 各個(gè)函數(shù)的比重
在對(duì)碳納米管分子動(dòng)力學(xué)進(jìn)行仿真時(shí),原來(lái)的分子動(dòng)力學(xué)仿真算法有良好的效果,但因碳納米管系統(tǒng)粒子數(shù)的規(guī)模太大、計(jì)算量多、運(yùn)行時(shí)間長(zhǎng),缺乏實(shí)用性。而由用Verlet算法實(shí)現(xiàn)的分子動(dòng)力學(xué)仿真算法具有易并行性,可以在具有強(qiáng)大圖像處理和浮點(diǎn)計(jì)算能力的GPU上并行處理,從而大大提高了碳納米管分子動(dòng)力學(xué)仿真算法的效率。
實(shí)驗(yàn)結(jié)果表明,對(duì)小規(guī)模僅有120 000個(gè)粒子組成的碳納米管系統(tǒng),在擁有192個(gè)流處理器的NVIDIA Quadro 2000顯卡上實(shí)現(xiàn)的GPU并行仿真算法,與在擁有4核8線程的Intel Xeon W3550上實(shí)現(xiàn)的基于CPU的串行仿真算法相比,其加速比即可達(dá)到十多倍,從而有效地解決了算法速度上的缺陷。
然而由于本次實(shí)驗(yàn)的硬件條件有限,所能計(jì)算的碳納米管系統(tǒng)規(guī)模有限,因此無(wú)法深度發(fā)掘CUDA的能力。而由實(shí)驗(yàn)結(jié)果所示,碳納米管系統(tǒng)的粒子數(shù)規(guī)模越大,GPU并行算法對(duì)于串行算法的加速比就越明顯。在實(shí)際運(yùn)用中,碳納米管系統(tǒng)的粒子數(shù)的規(guī)模都很大,超過(guò)千萬(wàn)乃至十億,可以預(yù)估該基于GPU的分子動(dòng)力學(xué)并行仿真算法,對(duì)碳納米管的研究會(huì)發(fā)揮至關(guān)重要的作用。
[1] Alder B J,Wainwright T E.Phase Transition for a Hard Sphere System[J].The Journal of Chemical Physics,1957,27(5):1208-1209.
[2] 唐玉蘭,胡 適,王東旭,等.納米工程中大規(guī)模分子動(dòng)力學(xué)仿真算法的研究進(jìn)展[J].機(jī)械工程學(xué)報(bào),2008,44(2):8-15.
[3] Landman U,Luedtke W D,Burnham N,et al.Atomistic Mechanisms and Dynamics of Adhesion,Nanoindentation,and Fracture[J].Science,1990,248(4954):454-461.
[4] Schi?tz J,Jacobsen K W.A Maximum in the Strength of Nanocrystalline Copper[J].Science,2003,301(5638):1357-1359.
[5] 徐 偉,王 麗.MD算法在集群系統(tǒng)中的并行實(shí)現(xiàn)研究[J].計(jì)算機(jī)工程,2002,28(3):103-105.
[6] Proctor A J,Lipscomb T J,Zou Anqi,et al.Performance Analyses of a Parallel Verlet Neighbor List Algorithm for GPU-optimized MD Simulations[C]//Proceedings of International Conference on Biomedical Computing.Washington D.C.,USA:IEEE Press,2012:14-19.
[7] Anderson J A,Lorenz C D,TravessetA.General Purpose Molecular Dynamics Simulations Fully Implemented on Graphics Processing Units[J].Journal of Computational Physics,2008,227(10):5342-5359.
[8] Verlet L.Computer Experiments on Classical Fluids.I.Thermodynamical Properties of Lennard-Jones Molecules[J].Physical review,1967,159(1):98-103.
[9] Tamayo P,MesirovJP,BoghosianB M.Parallel Approaches to ShortRange Molecular Dynamics Simulations[C]//Proceedings of Conference on Supercomputing.New York,USA:ACM Press,1991:462-470.
[10] 曹 偉,宋雪梅,王 波,等.碳納米管的研究進(jìn)展[J].材料導(dǎo)報(bào),2007,21(5):77-82.
[11] 劉文志,李曉霞,余 翔,等.分子動(dòng)力學(xué)模擬中基于GPU的范德華非鍵作用計(jì)算[J].計(jì)算機(jī)與應(yīng)用化學(xué),2010,27(12):1607-1612.
[12] 孟小華,劉堅(jiān)強(qiáng),區(qū)業(yè)祥,等.基于CUDA的拉普拉斯邊緣檢測(cè)算法[J].計(jì)算機(jī)工程,2012,38(18):190-193.
[13] 孟小華,黃叢珊,朱麗莎.基于CUDA的熱傳導(dǎo)GPU并行算法研究[J].計(jì)算機(jī)工程,2014,40(5):41-44,48.