資源描述:
《406130914138_劉志偉_gpu上矩陣乘法的設(shè)計與實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、劉志偉:GPU上矩陣乘法的設(shè)計與實現(xiàn)GPU上矩陣乘法的設(shè)計與實現(xiàn)劉志偉(南昌大學(xué)信息與工程學(xué)院計算機科學(xué)與技術(shù)406130914138)1概述矩陣乘法是科學(xué)計算中的最基本的操作,在許多領(lǐng)域中有廣泛的應(yīng)用。對于矩陣乘法的研究有幾個方向。一個是研究矩陣乘法的計算復(fù)雜度,研究矩陣乘法的時間復(fù)雜度的下界,這方面的工作有strassen算法等。另外一個方向是根據(jù)不同的處理器體系結(jié)構(gòu),將經(jīng)典的矩陣乘法高效的實現(xiàn)出來,這方面的結(jié)果體現(xiàn)在許多高效的BLAS庫。許多高效的BLAS庫都根據(jù)體系結(jié)構(gòu)的特點高效的實現(xiàn)了矩陣乘法,比
2、如GotoBLAS,ATLAS等。眾所周知,矩陣乘法是一種大計算量的算法,也是很耗時的運算。CPU提高單個核心性能的主要手段比如提高處理器工作頻率及增加指令級并行都遇到了瓶頸,當(dāng)遇到運算量大的計算,CPU進行大矩陣的乘法就變得相當(dāng)耗時,運算效率很低下。隨著多核CPU和眾核GPU的快速發(fā)展,計算行業(yè)正在從只使用CPU的“中央處理”向CPU與GPU并用的“協(xié)同處理”發(fā)展,并行系統(tǒng)已成為主流處理器芯片。傳統(tǒng)的GPU架構(gòu)受其硬件架構(gòu)的影響不能有效利用其資源進行通用計算,NVIDIA(英偉達)公司推出的統(tǒng)一計算設(shè)備架
3、構(gòu)CUDA(ComputeUnifiedDeviceArchitectures),使得GPU具備更強的可編程性,更精確和更高的性能,應(yīng)用領(lǐng)域也更加廣泛。2CUDA簡介2.1CUDA編程模型NVIDIA的CUDA架構(gòu)通過對硬件的重新組織把GPU帶到了更加一般的應(yīng)用領(lǐng)域。它試圖通過提供一般的高層和低層的API來訪問GPU的并行元素以減輕問題映射到GPU上的不方便。現(xiàn)在的GPU特別適合計算密集型、高度并行化的計算。CUDA提供了對顯卡的抽象,把顯卡作為能夠同時執(zhí)行成千上萬輕量級線程的設(shè)備,如圖1所示。這些線程組織
4、成塊,塊中的每個線程能夠訪問它們自身的寄存器和塊的共享存儲器,每個線程也能夠和它相鄰的線程進行同步。一個內(nèi)核函數(shù)的代碼由一個或多個這樣的線程執(zhí)行。由于具有CUDA能力的設(shè)備允許DRAM的類屬存取(聚集和分散),所以每個線程都能訪問GPU板卡上的顯存和紋理存儲器。7劉志偉:GPU上矩陣乘法的設(shè)計與實現(xiàn)圖1CUDA編程模型在實際應(yīng)用中,首先對問題進行分析,哪些部分可以在GPU上并行實現(xiàn),哪些在CPU上執(zhí)行。一旦確定程序中的并行部分,就可以考慮把這部分的計算工作交給GPU。在GPU上運行的CUDA并行計算函數(shù)稱為
5、kernel(內(nèi)核函數(shù))。一個kernel函數(shù)并不是一個完整的程序,而是整個CUDA程序中的一個可以被并行執(zhí)行的步驟。如圖1所示,一個完整的CUDA程序是由GPU中一系列的kernel函數(shù)并行步驟和CPU端串行處理步驟共同組成的,這些處理步驟會按照程序中相應(yīng)語句的順序依次執(zhí)行,滿足順序一致性。2.2CUDA存儲器模型除了編程模型外,CUDA還規(guī)定了存儲器模型,如圖2所示。線程在執(zhí)行時將會訪問到處于不同存儲空間中的數(shù)據(jù)。7劉志偉:GPU上矩陣乘法的設(shè)計與實現(xiàn)圖2GPU的存儲器層次結(jié)構(gòu)每個線程都擁有自己私有的存
6、儲器、寄存器和局部存儲器;每個block擁有一塊共享存儲器(SharedMemory);grid中所有的線程都可以訪問同一塊全局存儲器(GlobalMemory)。除此之外,還有兩種可以被所有線程訪問的只讀存儲器:常數(shù)存儲器(ConstantMemory)和紋理存儲器(TextureMemory)。這幾種存儲器的訪問速度不同,大小不同,在程序中使用不同的存儲器對速度的影響較大。寄存器速度最快,但容量最小,較少使用到;共享存儲器容量較大,共享存儲器的特點是速度較快且對于同一個block中的所有線程能夠共享,這
7、對程序中數(shù)據(jù)的分配十分有利。常數(shù)存儲器和紋理存儲器分別用于存放常數(shù)和圖像。3矩陣乘法在GPU上的實現(xiàn)本文主要探討矩陣乘法如何在GPU上實現(xiàn),故設(shè)計如下3個矩陣,如表1所示。表1實驗所用示例矩陣矩陣數(shù)據(jù)類型維度matrixAfloatmatrixBfloatmatrixCfloat設(shè)有矩陣,,則矩陣乘法的計算式為:7劉志偉:GPU上矩陣乘法的設(shè)計與實現(xiàn)。圖3給出了此矩陣乘法在CPU上實現(xiàn)的代碼,從中可以看出:矩陣乘法的計算量復(fù)雜度為O(n3)。而矩陣乘法的訪存復(fù)雜度為O(n2),所以矩陣乘法的計算訪存比復(fù)雜度
8、為O(n),是一個典型的計算密集型應(yīng)用。fori=1toi=ndoforj=1toj=ndoC(i,j)=0fork=1tok=ndoC(i,j)=A(i,k)*B(k,j)+C(i,j)ENDdoENDdoENDdo圖3矩陣乘法在CPU上的實現(xiàn)方陣matrixA和matrixB相乘,并把相應(yīng)的結(jié)果傳給matrixC方陣。在CPU上實現(xiàn)的源碼如圖4所示,其中matrixA和matrixB方陣的元素均為隨機生成。v