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