基于GPU的AES算法實(shí)現(xiàn)
GPU和內(nèi)存的數(shù)據(jù)交換是一筆很大的開銷,因此從整體上減小這部分的開銷是優(yōu)化的關(guān)鍵。從GPU執(zhí)行的特點(diǎn)來看,每個(gè)線程都獨(dú)自從內(nèi)存中讀取一個(gè)分組長度的數(shù)據(jù)塊,加密完成后寫回到內(nèi)存中。這樣,每加密一個(gè)分組長度都要讀寫一次內(nèi)存,整體IO效率低。根據(jù)程序的局部性原理,如果一次讀入相鄰的多個(gè)分組,IO效率會(huì)大大提高。在前面的GPU程序中,我們是在一個(gè)線程里加密一個(gè)分組?,F(xiàn)在我們一次讀取多個(gè)分組進(jìn)行加密。這樣從整體上提高了IO效率。鑒于線程處理器還可以進(jìn)行并行操作,我們還可以使用流數(shù)據(jù)類型,進(jìn)一步提高并行度。
改進(jìn)的算法如下:
brook::Streamint>*datastream;
datastream.read(Block[m][n]);
AESEncrypt_CPU_Simple(dtatastream);
Datastream.write(Block[m][n]);
改進(jìn)后,每個(gè)線程一次讀取n個(gè)相鄰的分組進(jìn)行加密。
4 實(shí)驗(yàn)設(shè)計(jì)
實(shí)驗(yàn)采用的CPU是GeForce 9800 GTX+,軟件使用GUDA2.1,是在WmdowsXP操作系統(tǒng)下運(yùn)行的。
CPU對AES算法的加速結(jié)果如圖1所示。從圖中可以看出,當(dāng)數(shù)據(jù)量較小時(shí)(小于100kB),GPU上的運(yùn)行性能要低于CPU,這是因?yàn)镚PU的特點(diǎn)是適合用作高密度數(shù)據(jù)的并行計(jì)算,而當(dāng)數(shù)據(jù)量較小時(shí)并無法充分利用到GPU的計(jì)算資源,而且從主機(jī)向設(shè)備傳輸輸入數(shù)據(jù)和由設(shè)備向主機(jī)返回?cái)?shù)據(jù)又會(huì)占用一定的開銷,因此對于小數(shù)據(jù)量的處理并不適合使用GPU。隨著數(shù)據(jù)量的增加,GPU運(yùn)算的性能就會(huì)明顯高于CPU。當(dāng)數(shù)據(jù)量大于1MB時(shí),GPU具有將近兩倍的加速倍數(shù),之后加速倍數(shù)就基本穩(wěn)定下來,達(dá)到飽和,這是因?yàn)楫?dāng)數(shù)據(jù)量已經(jīng)足夠多,充分利用了GPU的計(jì)算資源。由于GPU的計(jì)算能力遠(yuǎn)遠(yuǎn)高于它訪問設(shè)備內(nèi)存的帶寬以及主機(jī)與設(shè)備之間的數(shù)據(jù)傳輸帶寬,在應(yīng)用中這些數(shù)據(jù)傳輸?shù)拈_銷會(huì)成為限制GPU運(yùn)算整體性能的瓶頸,需要對GPU進(jìn)行優(yōu)化,才能充分開發(fā)出GPU的計(jì)算優(yōu)勢。
圖1 GPU對AES算法的加速效果本文引用地址:http://m.butianyuan.cn/article/156187.htm
對實(shí)驗(yàn)結(jié)果進(jìn)行優(yōu)化。通過優(yōu)化,可以提高超過兩倍的加速效果,在數(shù)據(jù)量大時(shí),優(yōu)化結(jié)果更為明顯,如圖2所示。
5 結(jié)論
本文介紹了在GPU上實(shí)現(xiàn)AES加密算法的方法。首先介紹了AES算法,然后對CUDA中的GPU結(jié)構(gòu)和CUDA編程模型進(jìn)行了深入的研究。最后在GPU和CPU平臺(tái)上對設(shè)計(jì)進(jìn)行了實(shí)驗(yàn)對比,取得了理想的加速效果。其實(shí)在大多數(shù)應(yīng)用情況下,目前計(jì)算機(jī)顯卡配置的GPU運(yùn)算潛能并沒有完全釋放出來,本文介紹的加密方法是GPU通用計(jì)算具體應(yīng)用的一個(gè)體現(xiàn)。雖然目前以CUDA為代表的GPU仍然存在精度不高,程序編寫限制較多的缺點(diǎn),但隨著并行流處理概念的進(jìn)一步發(fā)展,GPU通用計(jì)算技術(shù)將在各個(gè)領(lǐng)域發(fā)揮更大的作用。
評(píng)論