999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于CUDA架構矩陣乘法的研究

2011-07-28 01:32:38馬夢琦曾勝田
網絡安全與數據管理 2011年24期
關鍵詞:計算能力

馬夢琦,劉 羽,曾勝田

(桂林理工大學 信息科學與工程學院,廣西 桂林541004)

隨著多核CPU和眾核GPU的快速發展,計算行業正在從只使用CPU的“中央處理”向CPU與GPU并用的“協同處理”發展,并行系統已成為主流處理器芯片。傳統的GPU架構受其硬件架構的影響不能有效利用其資源進行通用計算,NVIDIA(英偉達)公司推出的統一計算設備架構 CUDA(Compute Unified Device Architecturem),使得GPU具備更強的可編程性,更精確和更高的性能,應用領域也更加廣泛。

矩陣乘法是一種大計算量的算法,也是很耗時的運算。CPU提高單個核心性能的主要手段比如提高處理器工作頻率及增加指令級并行都遇到了瓶頸,當遇到運算量大的計算,CPU進行大矩陣的乘法就變得相當耗時,運算效率很低下。因此,GPU憑借其超強計算能力應運而生,讓個人PC擁有了大型計算機才具備的運算能力。本文運用GPU的超強計算能力在CUDA架構上實現了大矩陣乘法。

1 CUDA架構

NVIDIA及時推出CUDA這一編程模型,在應用程序中充分結合利用CPU和GPU各自的優點,特別是GPU強大的浮點計算能力。CPU主要專注于數據高速緩存(cache)和流處理(flow control),而 GPU更多地專注于計算密集型和高度并行的計算。盡管GPU的運行頻率低于CPU,但GPU憑著更多的執行單元數量使其在浮點計算能力上獲得較大優勢[1]。當前的NVIDIA GPU中包含完整前端的流多處理器(SM),每個SM可以看成一個包含8個1D流處理器(SP)的SIMD處理器。主流GPU的性能可以達到同期主流CPU性能的10倍左右。圖1所示為GPU與CPU峰值浮點計算能力的比較。

CUDA的編程模型是CPU與GPU協同工作,CPU作為主機 (Host)主要負責邏輯性強的事務處理及串行計算,GPU作為協處理器或者設備(Device)負責密集型的大規模數據并行計算。一個完整的CUDA程序=CPU串行處理+GPU Kernel函數并行處理。

一個CUDA架構下的程序分為兩個部分,即上述的Host端和Device端。通常情況下程序的執行順序如下:Host端程序先在CPU上準備數據,然后把數據復制到顯存中,再由GPU執行Device端程序來處理這些數據,最后Host端程序再把結束運算后的數據從顯存中取回。

圖2為CUDA編程模型,從中可以看出,Thread是GPU執行運算時的最小單位。也就是說,一個Kernel以線程網格Grid的形式組織,每個Grid由若干個線程塊Block組成,而每個線程塊又由若干個線程Thread組成。一個Kernel函數中會存在兩個層次的并行,Grid中Block之間的并行和Block中Thread之間的并行,這樣的設計克服了傳統GPGPU不能實現線程間通信的缺點[2]。

同一個Block下的Thread共用相同的共享存儲器,通過共享存儲器交換數據,并通過柵欄同步保證線程間能夠正確地共享數據。因此,一個Block下的Thread雖然是并行的,但在同一時刻執行的指令并不一定都相同,實現了不同Thread間的協同合作。這一特性可以顯著提高程序的執行效率,并大大拓展GPU的適用范圍。

2 基于CUDA架構矩陣乘法的實現

2.1 一維帶狀劃分

給定一個M×K的矩陣A和一個 K×N的矩陣 B,將矩陣B乘以矩陣A的結果存儲在一個M×N的矩陣C中。此種矩陣乘法使用了一維帶狀劃分,每個線程將負責讀取矩陣A中的一行和B中的一列,矩陣進行乘法運算并將計算結果存儲在全局存儲器。

全局存儲器會對矩陣A進行N次讀取,對矩陣B進行M次讀取。假設數組在每個維度上的尺寸都是BLOCK_SIZE的整數倍。若矩陣大小為32×32,則可表示為(2×16)×(2×16)。下面的內核定義中,結果矩陣 C中的每個元素由一個線程負責,for()循環完成A中第X行與B中第X列對應元素的乘加運算,并將結果累加到Cvalue。

在矩陣相乘實現中,這個內核運算的速度不盡人意,主要瓶頸在于對內存的重復讀取,計算量是 2×M×N×K flop,而全局內存的訪問量為2×M×N×K B[3]。 若矩陣維數為 1 024×1 024,則此次矩陣相乘的計算量就有2 G flop,當矩陣維數更大時,這個運算量就相當大,在內存的讀取上會浪費大量的時間。

2.2 二維棋盤劃分

因為矩陣A的行和矩陣B的列多次被讀取,為了避免重復加載,選擇把矩陣進行分塊運算,使用shared memory來實現矩陣乘法。運用shared memory的好處在于其延遲小于global memory,并且還能使線程間進行通信。矩陣A只被讀了N/BLOCK_SIZE次,矩陣B僅被讀了M/BLOCK_SIZE次,節省了大量的global memory帶寬。

首先把劃分的小矩陣塊加載到share memory,則小矩陣本身的乘法就不用去存取外部的任何內存了,因此在二維棋盤劃分中,矩陣乘法的計算量仍然是2×M×N×K flop,b是矩陣B劃分的小矩陣塊的大小,則全局內存訪問量是 2×M×N×K/b B。

棋盤劃分運算可以表示為:C矩陣的(0,0)~(15,15)=A(0~15,0~15)×B(0~15,0~15)+A(0~15,16~31)×B(16~31,0~15)+A(0~15,32~47)×B(32~47,0~15)+…+A(0~15,(16×(n-1)-1)~(16×(n-1))×B((16×(n-1)-1)~(16×(n-1)),0~15)。

根據 NVIDIA CUDA Programming Guide,一個 Block里至少要有64個 Thread,最多有512個Thread。官方建議256個Thread是最合適的,因為此時有足夠多的active warp有效地隱藏延遲,使得SM能夠盡量滿負荷工作[4]。為便于理解,假設矩陣為 n×n,此時 BLOCK_SIZE設置為 16,使用 dim3來設計,每個 Block包含 16×16個Thread,一個 Grid 共有(n/16)×(n/16)個 Block。

BLOCK_SIZE是不是越大越好呢?這樣一個SM里的Thread就更多,雖然 Thread越多越能隱藏 latency,但G80/G92架構每個 SM上 shared memory僅有 16 KB,這會讓每個Thread能使用的資源更少,效率反而會下降。

2.3 根據CUDA架構對矩陣乘法進行優化

因為棋盤劃分中涉及到的是二維數組,cudaMalloc2D()能確保分配二維數組并且能分配適當的填充以滿足對齊要求,還能確保在訪問行地址或者二維數組與其他設備內存之間的數據復制能達到最佳性能。

二維棋盤劃分方法僅限于數組大小必須是BLOCK_SIZE的整數倍,若矩陣維數并不是16的整數倍,則會造成運算效率的下降,此時可以利用CUDA架構特點和CUDA提供的cudaMallocPitch()函數來解決此問題。cudaMallocPitch()可以自動地以最佳倍數來分配內存。

呼叫Kernel部分需要修改成:

在數值分析,Kahan求和算法(也稱作補償總和)能顯著減少浮點數運算的誤差,在CUDA矩陣乘法中可以通過使用Kahan求和算法來提高計算精準度[5]。算法如下:

3 測試環境及實驗結果

測試的硬件環境:CPU使用的是AMD Athlon II X2 245處理器,核心數為 2,該處理器主頻為2.9 GHz,峰值運算能力約為17.4 GFLOPS;GPU使用的是NVIDIA GeForce 9800M GTS,有8個 SM即有 64個SP單元,顯存帶寬為51.2 GB/s,GPU核心頻率為0.625 GHz,單精度浮點計算能力為240 GFLOPS,屬于NVIDIA中端顯卡。測試的軟件環境:Windows XP系統,CUDA toolkit 3.0,Visual Studio 2008,CUDA計算能力為 1.1。

在程序運行的測試中,對矩陣規模由256×256~2 048×2 048逐漸增大,實驗數據均是三次測試取得的平均值,這樣實驗的結果更準確。加速比是指程序在CPU上運行的時間與程序在GPU上運行所需的時間之比。峰值比是指運算速度與GPU單精度浮點運算能力之比。最后求得在各種矩陣規模運行下的加速比及峰值比。實驗結果如表1所示。

表1 不同矩陣規模的加速比及GPU峰值比

實驗結果表明:當矩陣維數小于 320×320時,帶狀劃分加速比小于1,說明CPU運算時間要小于一維帶狀劃分時GPU的運算時間,這說明GPU計算時,從內存復制矩陣到顯存和把結果矩陣從顯存拷貝回內存過程中消耗了一些時間[6]。隨著矩陣維數的增大,CPU的運算時間呈現級數增長,而GPU運算時間只是小幅度增長。此時GPU強大的浮點運算能力凸顯出來,加速比在矩陣維數為2 048時最大為 1 079.64,CPU上Intel MKL矩陣乘法比文中所用的CPU矩陣乘法快了200多倍,但是依靠GPU流多處理的并行執行能力,GPU上的實現方法還是比Intel MKL快了5倍左右。運用CUDA的軟硬件架構使得GPU合理組織數據,使得內存的讀取節省了大量時間。峰值比也有很大的提高,峰值比說明了算法對GPU強大浮點運算能力的利用,對GPU相應算法的對比具有很高的參考價值。

通過矩陣乘法在CPU與GPU上不同的性能表現可以發現,NVIDIA公司推出的CUDA使某些大運算量的計算可以從大型計算機或者超級計算機轉移到個人PC,這一新技術不僅使科研縮減了成本,同時也為科學領域進行大規模運算提供了新方法[7]。對于它的未來值得期待,畢竟CUDA已經在影視制作、計算金融、流體力學、醫學成像、石油天然氣數據收集、地質勘探及超級計算機的建立等領域取得了成功。

[1]NVIDIA Corporation.NVIDIA CUDA Programming Guide Version3.0[EB/OL].(2010-02-10)[2011-08-20].http://cuda.csdn.net/.

[2]張舒,褚艷利,趙開勇,等.GPU高性能并行運算之CUDA[M].北京:中國水利水電出版社,2009.

[3]Ye Zhenyu.GPU assignment 5KK70[DB/OL].(2009-11-05)[2011-09-01].http://wenku.baidu.com/view/9cd2e372027-68e9951e738e5.html.

[4]NVIDIA Corporation.NVIDIA CUDA CUBLAS library PG-00000-002_V3.0[EB/OL].(2010-02-10)[2011-09-10].http://cuda.csdn.net/.

[5]Hotball.深入淺出談 CUDA技術[DB/OL].(2008-11-21)[2011-09-15].http://www.pcinlife.com/article/graphics/2008-06-04/1212575164d532_3.html.

[6]劉進鋒,郭雷.CPU與GPU上幾種矩陣乘法的比較與分析[J].計算機工程與應用,2011,47(19):9-23.

[7]肖江,胡柯良,鄧元勇.基于 CUDA的矩陣乘法和 FFT性能測試[J].計算機工程,2009.35(10):7-10.

猜你喜歡
計算能力
淺談如何提高小學生的計算能力
厘清算理,提高學生計算能力
小學生計算能力的提高策略
甘肅教育(2021年10期)2021-11-02 06:14:02
小學低年級學生計算能力的培養策略
甘肅教育(2020年18期)2020-10-28 09:07:06
小學生計算能力的培養
甘肅教育(2020年21期)2020-04-13 08:08:42
提升學生計算能力的研究
中學生化學計算能力的進階式培養策略
小學數學思維能力與計算能力關系的培養
數學大世界(2018年1期)2018-04-12 05:39:13
淺談小學生計算能力的培養
數學大世界(2018年1期)2018-04-12 05:39:02
彰顯內涵,算出趣味——小學生計算能力培養途徑探討
學周刊(2016年26期)2016-09-08 09:03:14
主站蜘蛛池模板: 午夜日b视频| 超清无码一区二区三区| 日韩精品亚洲精品第一页| 97国产精品视频自在拍| 露脸一二三区国语对白| 国产又爽又黄无遮挡免费观看| 中国毛片网| 国产又爽又黄无遮挡免费观看| 欧美成一级| 青青青视频蜜桃一区二区| 色综合久久88| 久久香蕉欧美精品| 欧美午夜精品| 日本五区在线不卡精品| 免费va国产在线观看| 色欲不卡无码一区二区| 人妻丰满熟妇AV无码区| 欧美人与动牲交a欧美精品| 日本三级黄在线观看| 一级不卡毛片| 全部毛片免费看| 国产午夜无码专区喷水| 国产一级做美女做受视频| 国产黄色片在线看| 中文字幕首页系列人妻| 伊人久久综在合线亚洲2019| 国产精品短篇二区| 国产成人高清精品免费| 国产成年女人特黄特色大片免费| 97se亚洲综合不卡| 亚洲欧洲日产国产无码AV| 88国产经典欧美一区二区三区| 亚洲午夜国产片在线观看| 韩日午夜在线资源一区二区| 夜夜高潮夜夜爽国产伦精品| 97se亚洲| 在线综合亚洲欧美网站| 免费A∨中文乱码专区| 91蝌蚪视频在线观看| 中文字幕在线观看日本| 国产屁屁影院| 国产乱人激情H在线观看| 日韩在线影院| 欧美成在线视频| 99福利视频导航| 亚洲欧美综合精品久久成人网| 99精品国产自在现线观看| 亚洲欧美色中文字幕| 天堂成人av| 国产对白刺激真实精品91| 国产免费精彩视频| 日韩精品成人网页视频在线| 国产一二三区在线| 国产精品一区二区不卡的视频| 亚洲另类第一页| 无码精品国产dvd在线观看9久| 亚洲黄色高清| 国产一级片网址| 国产亚洲成AⅤ人片在线观看| 国产高清国内精品福利| 国内精品伊人久久久久7777人| 狠狠五月天中文字幕| 亚洲无码精品在线播放| 国产精品免费p区| 国产伦精品一区二区三区视频优播 | 一个色综合久久| 国产色网站| 国产欧美日韩资源在线观看| 国产玖玖玖精品视频| 亚洲一区二区精品无码久久久| 色135综合网| 国产免费久久精品99re不卡| 国产簧片免费在线播放| 国产h视频免费观看| 色噜噜久久| 欧美a在线看| 日日碰狠狠添天天爽| 青青久视频| 人妻精品久久无码区| 亚洲第一天堂无码专区| 国产精品lululu在线观看| 久久久久久国产精品mv|