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