實戰技巧,Mali GPU編程特性及二維浮點矩陣運算并行優化詳解
筆者將clEnqueueNDRangeKernel函數中工作組大小參數設置為NULL,由Mali GPU硬件自動確定最佳的工作組大小。由于內核中每次會連續讀取4個浮點數值湊成float4類型的數據,所以對于矩陣的寬度不是4的倍數的情況需要進行特殊處理,可在主機端首先將輸入矩陣A修改為N行N/4+4列,將矩陣B修改為N/4+4行N列,多出的矩陣部分均以0補齊,這樣既不影響計算結果,也不會影響線程的分配方案,實現并行方案的內核函數如下所示:
本文引用地址:http://www.104case.com/article/278831.htm

本文采用Arndale Board開發板作為測試平臺,軟件平臺采用Linaro機構為Arndale Board定制的基于Ubuntu的嵌入式Linux操作系統,其內核版本為3.10.37,實驗時使用arm-linux-gnueabihf工具鏈對程序進行編譯。不同規模的二維浮點矩陣乘法運算在ARM Cortex-A15 CPU上的串行方案和Mali-T604 GPU上的并行方案的測試結果如面的表1所示,為不失一般性,測試時輸入矩陣內容為隨機值,每種不同矩陣大小的測試項進行10次測試,將測試值的平均值作為測試結果。

上表僅列出了輸入量較大時的測試結果,筆者實際測試時,發現輸入數據量較小的時候,并行方案沒有串行方案的效率高,因為計算過程大部分都消耗在數據的傳輸上,由于計算量小,GPU端的計算瞬間完成,沒有辦法將Mali GPU訪存的延遲掩蓋,所以此時訪存速度較快的CPU端的串行方案反而效率更高。
當計算量逐步增加的時候,Mali GPU的并行能力逐漸體現出其優勢,加速比有顯著提升,當計算量大到一定程度的時候,加速比趨于穩定,因為這時Mali GPU上有大量的線程切換,不僅隱蔽了訪存的延遲,也使得Mali GPU上的計算單元滿載,其計算效率已達到硬件能夠承受的極限,此時Mali GPU可以提接近40倍的供驚人的加速比。
實際測試時,筆者使用top指令觀察矩陣進程的CPU占用量,串行方案的CPU占用量在98%左右,而基于Mali GPU的并行方案對CPU幾乎沒有占用量,說明并行方案不僅可以提升計算效率,還降低了CPU的負擔,大大提升了系統實時性。實驗的實際測試結果和GPU異構運算特點吻合。
4.結語
本文針對Mali-T604 GPU論述了基于OpenCL的Linux平臺上進行通用計算并行優化的方法,論述了Mali-T604 GPU的硬件特點,并基于OpenCL設計了二維矩陣乘法的并行方案,在Mali-T604上獲得了驚人的加速比,結果表明Mali GPU對于龐大輸入量的計算密集型高度可數據并行化通用計算問題有顯著的加速能力,且并行優化結果正確可靠。
c語言相關文章:c語言教程
存儲器相關文章:存儲器原理
塵埃粒子計數器相關文章:塵埃粒子計數器原理
評論