




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、MATLAB與GPU編程結(jié)合應(yīng)用多核服務(wù)器以及多線程技術(shù)使科學(xué)家,工程師以及財(cái)務(wù)分析師能夠加快處理 多個(gè)學(xué)科內(nèi)的計(jì)算密集型應(yīng)用?,F(xiàn)在,另一種硬件承諾提供更高的計(jì)算性能,那 就是GPU。GPU最初用于加速圖形渲染,現(xiàn)在越來(lái)越多地應(yīng)用于科學(xué)計(jì)算。和傳統(tǒng)的 CPU只包括少數(shù)的幾個(gè)核不同,GPU由整型和浮點(diǎn)處理器組成的大規(guī)模并行矩 陣以及專(zhuān)用的高速內(nèi)存構(gòu)成。如圖1所示,一個(gè)典型的GPU包含數(shù)百個(gè)小型處 理器。GPU (Hundredt ofCPU MulKpk圖1. CPU和GPU的核心數(shù)對(duì)比上述配置極大地增加了 GPU的吞吐量,但同時(shí)也要付出代價(jià)。首先,內(nèi)存 訪問(wèn)很有可能會(huì)出現(xiàn)瓶頸。進(jìn)行計(jì)算前數(shù)據(jù)必
2、須從CPU發(fā)送到GPU,計(jì)算完成 后,數(shù)據(jù)必須從GPU發(fā)送到CPU。因?yàn)镚PU通過(guò)PCI-E總線與主機(jī)的CPU連 接,但是內(nèi)存訪問(wèn)要比傳統(tǒng)的CPU慢很多。這意味著整體的計(jì)算加速受限于算 法中用到的數(shù)據(jù)轉(zhuǎn)換器數(shù)目。其次,采用C或Fortran進(jìn)行GPU編程需要不同 的心智模型和技能,這很困難而且需要很長(zhǎng)的時(shí)間才能達(dá)到。此外,針對(duì)特定的 GPU你必須花費(fèi)時(shí)間調(diào)整代碼以?xún)?yōu)化應(yīng)用性能。本文演示了并行計(jì)算工具箱的功能特性,只需要對(duì)MATLAB代碼進(jìn)行簡(jiǎn)單 的修改就能夠在GPU上運(yùn)行。我們通過(guò)使用波譜法解二階波動(dòng)方程對(duì)該方法進(jìn) 行了舉例說(shuō)明。為什么要并行化波動(dòng)方程求解程序?波動(dòng)方程廣泛用于工程專(zhuān)業(yè)包括地震
3、學(xué),流體動(dòng)力學(xué),聲學(xué),以及電磁學(xué), 用于描述聲,光和流體波。使用波譜法解波動(dòng)方程的算法能夠?qū)崿F(xiàn)并行是因?yàn)樗鼭M(mǎn)足使用GPU進(jìn)行加 速的兩個(gè)標(biāo)準(zhǔn):大規(guī)模并行。并行快速傅里葉變化(FFT)算法的目的在于“分而治之”,這樣 一個(gè)相似的任務(wù)能夠采用不同的數(shù)據(jù)反復(fù)執(zhí)行。此外,該算法要求在處理線程和 大量的內(nèi)存帶寬之間進(jìn)行大量的通信。反向快速傅里葉變換(IFFT)同樣能夠并 行運(yùn)行。計(jì)算密集型。算法執(zhí)行大量的FFT以及IFFT,準(zhǔn)確的數(shù)字取決于網(wǎng)格的規(guī)模和 仿真中時(shí)間步長(zhǎng)的數(shù)量。每個(gè)時(shí)間步長(zhǎng)需要兩個(gè)FFT,四個(gè)IFFT,而單個(gè)計(jì)算可 能包含成千上萬(wàn)的時(shí)間步長(zhǎng)。SoUtian of SBOCnd Order
4、Wave Eq uMon圖2. 32x32網(wǎng)格矩陣波動(dòng)方程解決方案在GPU上執(zhí)行能夠加快我的應(yīng)用程序嗎?GPU能夠?qū)Ψ弦韵聵?biāo)準(zhǔn)的應(yīng)用程序進(jìn)行加速:大規(guī)模并行一計(jì)算能夠被分割成上百個(gè)或上千個(gè)獨(dú)立的工作單元。計(jì)算密集型一計(jì)算消耗的時(shí)間顯著超過(guò)了花費(fèi)轉(zhuǎn)移數(shù)據(jù)到GPU內(nèi)存以及從 GPU內(nèi)存轉(zhuǎn)移出數(shù)據(jù)的時(shí)間。不滿(mǎn)足上述標(biāo)準(zhǔn)的應(yīng)用程序在GPU上運(yùn)行時(shí)可能會(huì)比CPU要慢。使用MATLAB進(jìn)行GPU編程FFT,IFFT以及線性代數(shù)運(yùn)算超過(guò)了 100個(gè)內(nèi)置的MATLAB函數(shù),通過(guò)提 供一個(gè)類(lèi)型為GPUArray(由并行計(jì)算工具箱提供的特殊數(shù)組類(lèi)型)的輸入?yún)?shù), 這些函數(shù)就能夠直接在GPU上運(yùn)行。這些啟用GPU
5、的函數(shù)都是重載的,換句 話說(shuō),這些函數(shù)根據(jù)傳遞的參數(shù)類(lèi)型的不同而執(zhí)行不同的操作。例如,以下代碼使用FFT算法查找CPU上偽隨機(jī)數(shù)向量的離散傅里葉變換:A = rand(2人16,1);B = fft (A);為在GPU上執(zhí)行相同的操作,我們首先使用gpuArray命令將數(shù)據(jù)從MATLAB 工作空間轉(zhuǎn)移至GPU設(shè)備內(nèi)存。然后我們能夠運(yùn)行重載函數(shù)fft :A = gpuArray(rand(2人16,1);B = fft (A);fft操作在GPU上而不是在CPU上執(zhí)行,因?yàn)檩斎雲(yún)?shù)(GPUArray )位于 GPU的內(nèi)存中。結(jié)果B存儲(chǔ)在GPU當(dāng)中。然而,B在MATLAB工作空間中依舊可見(jiàn)。通過(guò)運(yùn)
6、行class(B),我們看到B是一個(gè)GPUArray。class(B)ans =parallel.gpu.GPUArray我們能夠使用啟用GPU的函數(shù)繼續(xù)對(duì)B進(jìn)行操作。例如,為可視化操作結(jié) 果,plot命令自動(dòng)處理GPUArrays。plot(B);為將數(shù)據(jù)返回至本地的MATLAB 工作集,你可以使用gather命令。例如C = gather(B);C現(xiàn)在是MATLAB中的double,能夠被處理double變量的所有MATLAB 函數(shù)操作。在這個(gè)簡(jiǎn)單的例子當(dāng)中,執(zhí)行單個(gè)FFT函數(shù)節(jié)省的時(shí)間通常少于將向量從 MATLAB工作集移動(dòng)到設(shè)備內(nèi)存的時(shí)間。一般來(lái)說(shuō)是這樣的但是也取決于硬件 和陣列規(guī)模。
7、數(shù)據(jù)傳輸開(kāi)銷(xiāo)可能變得異常顯著以至于降低了應(yīng)用的總體性能,尤 其是當(dāng)你重復(fù)地在CPU和GPU之間交換數(shù)據(jù),執(zhí)行相對(duì)來(lái)說(shuō)很少的計(jì)算密集 型操作時(shí)。更有效率的方式是當(dāng)數(shù)據(jù)處于GPU當(dāng)中時(shí)對(duì)數(shù)據(jù)進(jìn)行一些操作,只 在必要的情況下才將數(shù)據(jù)返回至CPU。需要指出的是,和CPU類(lèi)似,GPU的內(nèi)存也是有限的。然而,與CPU不 同,GPU不能在內(nèi)存和硬盤(pán)之間交換數(shù)據(jù)。因此,你必須核實(shí)你希望保留在GPU 當(dāng)中的數(shù)據(jù)不會(huì)超出內(nèi)存的限制,尤其是當(dāng)用到大規(guī)模矩陣時(shí)。通過(guò)運(yùn)行 gpuDevice命令,可以查詢(xún)GPU卡,獲取信息比如名稱(chēng),總內(nèi)存以及可用內(nèi)存。采用MATLAB解波動(dòng)方程為將上述例子應(yīng)用到具體的環(huán)境中,我們?cè)谝粋€(gè)
8、實(shí)際的問(wèn)題中實(shí)現(xiàn)GPU的 功能。計(jì)算目標(biāo)是解二階波動(dòng)方程。I臚U 知丑Bt2 + dy2當(dāng)u=0時(shí)到達(dá)臨界值。我們使用基于波譜法的算法解空間方程,使用基于 二階中心有限差分法的算法解時(shí)間方程。波譜法通常用于解決偏微分方程。采用波譜法的解決方案接近連續(xù)基函數(shù)比 如正弦和余弦的線性組合。在這個(gè)例子中,我們應(yīng)用了切比雪夫波譜法,使用切 比雪夫多項(xiàng)式作為基函數(shù)。我們?cè)诿恳粋€(gè)時(shí)間步長(zhǎng)使用切比雪夫波普法計(jì)算當(dāng)前解決方案的在x象限和 y象限的二次導(dǎo)數(shù)。我們同時(shí)使用這些中間數(shù)值與舊的解決方案和新的解決方 案,應(yīng)用二階中心有限差分法(也稱(chēng)為蛙跳法)計(jì)算新的解決方案。我們選擇了 保持蛙跳法穩(wěn)定性的時(shí)間步長(zhǎng)。MAT
9、LAB算法是計(jì)算密集型的,當(dāng)網(wǎng)格中元素的數(shù)目超過(guò)了計(jì)算解決方案的 增長(zhǎng),算法的執(zhí)行時(shí)間將顯著增加。當(dāng)在單個(gè)CPU上使用2048x2048的網(wǎng)格 執(zhí)行時(shí),完成50個(gè)時(shí)間步長(zhǎng)需要一分多鐘。需要指出的是我們計(jì)算的時(shí)間已經(jīng) 包括了 MATLAB內(nèi)在的多線程性能優(yōu)勢(shì)。自從R2007a起,MATLAb的一些函 數(shù)就支持多線程計(jì)算。這些函數(shù)自動(dòng)在多線程上執(zhí)行,并不需要在代碼中顯示指 定命令去創(chuàng)建線程。當(dāng)考慮如何使用并行計(jì)算工具箱加速計(jì)算時(shí),我們將關(guān)注每個(gè)時(shí)間步長(zhǎng)所執(zhí) 行的計(jì)算指令代碼。圖3距離說(shuō)明了為獲取在GPU上運(yùn)行的算法需要做出的改 變。需要指出的是涉及MATLAB操作的計(jì)算指令、啟用GPU的重載函數(shù)可
10、以從并行計(jì)算工具箱獲取。這些操作包括FFT, IFFT,矩陣乘法,以及各種元素明 智(element-wise)操作。因此,我們不必改變算法就能夠在GPU執(zhí)行。只需 要在進(jìn)入每個(gè)時(shí)間步長(zhǎng)計(jì)算結(jié)果的循環(huán)前使用gpuArray將數(shù)據(jù)轉(zhuǎn)移到GPU當(dāng) 中。二:司 TT 5-:F _日_:2 二潭盤(pán)圖3.代碼對(duì)比工具顯示了 CPU版本和GPU版本的差異CPU和GPU版本共享的代碼超過(guò)了 84% (在111行當(dāng)中有94行)。計(jì)算指令在GPU上執(zhí)行后,我們將計(jì)算結(jié)果從GPU轉(zhuǎn)移至CPU。被啟用 GPU的函數(shù)所弓I用的每個(gè)變量必須在GPU上創(chuàng)建或者在使用前轉(zhuǎn)移到GPU上。 為將用于光譜分化的一個(gè)權(quán)重轉(zhuǎn)變?yōu)镚P
11、UArray變量,我們使用W1T = gpuArray(WlT);某些類(lèi)型的數(shù)組能夠直接在GPU上構(gòu)造,不用從MATLAB工作集轉(zhuǎn)移。 例如,為直接在GPU上創(chuàng)建全零矩陣,我們使用uxx = parallel.gpu.GPUArray.zeros(N + 1,N + 1);我們使用gather函數(shù)將數(shù)據(jù)從GPU中轉(zhuǎn)移回MATLAB工作集;例如:vvg = gather(vv);需要指出的是這只是將一個(gè)數(shù)據(jù)轉(zhuǎn)移至GPU然后從GPU轉(zhuǎn)移回MATLAB 工作集。每個(gè)時(shí)間步長(zhǎng)的所有計(jì)算指令都是在GPU上執(zhí)行的。ZbCPU 和 GPU 的m行速度為評(píng)估使用GPU借二階波動(dòng)方程的優(yōu)勢(shì),我們進(jìn)行了基準(zhǔn)研究,
12、分別采用 Intel Xeon X5650處理器和NVIDIA Tesla C2050 GPU,選取不同的網(wǎng)格大小 ( 64,128,521,1024和2048),測(cè)量了算法執(zhí)行50個(gè)時(shí)間步長(zhǎng)所花費(fèi)的時(shí)間。當(dāng)網(wǎng)格大小為2048時(shí),算法表明GPU的計(jì)算時(shí)間少于10秒,而CPU的 計(jì)算時(shí)間超過(guò)了 1分鐘(圖4)。圖4中的對(duì)數(shù)標(biāo)尺表明當(dāng)網(wǎng)格大小很小時(shí)CPU 實(shí)際上比GPU要快。隨著技術(shù)的演進(jìn)和逐漸成熟,GPU解決方案處理小規(guī)模問(wèn) 題的能力在不斷增強(qiáng),我們希望這一趨勢(shì)能夠延續(xù)下去。粕犯2010圖4.同一個(gè)基準(zhǔn)測(cè)試結(jié)果的線性標(biāo)尺(左)和對(duì)數(shù)標(biāo)尺(右)表明在不同的網(wǎng)格 規(guī)模下完成50個(gè)時(shí)間步長(zhǎng)所需的時(shí)間。
13、使用MATLAB進(jìn)行GPU高級(jí)編程通過(guò)在GPU上執(zhí)行MATLAB代碼,并行計(jì)算工具箱提供了簡(jiǎn)明的方式對(duì) MATLAB代碼進(jìn)行加速。你只需要改變函數(shù)輸入的數(shù)據(jù)類(lèi)型就能夠利用眾多的、 已經(jīng)針對(duì)GPUArray進(jìn)行了重載的MATLAB命令(并行計(jì)算工具箱文檔提供了 支持GPUArray的內(nèi)置MATLAB函數(shù)的完整列表)。為在GPU上使用多個(gè)簡(jiǎn)單的操作加速算法,你可以使用arrayfun函數(shù)。因 為arrayfun是一個(gè)基于GPU的函數(shù)所以只會(huì)在單個(gè)調(diào)用中而不會(huì)在每個(gè)單獨(dú) 的操作中引起內(nèi)存轉(zhuǎn)移開(kāi)銷(xiāo)。最后,自己寫(xiě)CUDA代碼的有經(jīng)驗(yàn)的程序員能夠使用并行計(jì)算工具箱中的 CUDAKernel接口將代碼與MA
14、TLAB進(jìn)行集成。CUDAKernel接口使更加細(xì)粒 度控制、加速存在性能瓶頸的代碼成為了可能,它創(chuàng)建了一個(gè)MATLAB對(duì)象, 該對(duì)象能夠訪問(wèn)編譯為PTX代碼的核心程序(PTX是一個(gè)低級(jí)別并行線程執(zhí)行 指令集)。你甚至可以使用MATLAB陣列作為輸入和輸出,調(diào)用feval命令評(píng) 估GPU上的核心程序??偨Y(jié)工程師和科學(xué)家正在成功地使用GPU技術(shù)加速與他們的學(xué)科相關(guān)的計(jì)算。 不需要具備廣泛的GPU知識(shí)付出很少的努力你就能夠使用MATLAB獲取GPU所承諾的強(qiáng)大的計(jì)算能力。不必采用低級(jí)別的CUDA編程,GPUArrays以及啟 用GPU的MATLAB函數(shù)幫助你加快了 MATLAB操作。如果你熟悉GPU編程, 那么不需要進(jìn)行任何的C語(yǔ)言編程,MATLAB就能夠?qū)F(xiàn)有的CUDA核心程序 集成進(jìn)MATLAB中。為使用GPU實(shí)現(xiàn)加速,你的應(yīng)用必須滿(mǎn)足一些標(biāo)準(zhǔn),其中在CPU和GPU 之間發(fā)送數(shù)據(jù)的時(shí)間必須要少于程序在GPU上運(yùn)行所節(jié)省的時(shí)間。如果你的程 序符合這些要求,那么就是MATLAB所提供的GPU功能范圍內(nèi)的一個(gè)很不錯(cuò) 的候選者。GPU術(shù)語(yǔ)CPU.計(jì)算機(jī)中的中央單元,負(fù)責(zé)計(jì)算,控制以及監(jiān)管計(jì)算機(jī)的其他部件。CPU處理數(shù)據(jù)位于計(jì)算機(jī)內(nèi)存當(dāng)中的邏輯和浮點(diǎn)操作。GPU.原本用于圖形渲染的可編程芯片。對(duì)于需要并行處理大規(guī)模數(shù)據(jù)的算 法而言,GPU的高度并行架構(gòu)使它們比通用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 運(yùn)動(dòng)與健康促進(jìn)工作計(jì)劃
- 管理者的影響力與說(shuō)服力計(jì)劃
- 2025年雙氰胺合作協(xié)議書(shū)
- 評(píng)優(yōu)評(píng)先活動(dòng)與實(shí)施方案計(jì)劃
- 包裝行業(yè)設(shè)計(jì)創(chuàng)新包裝材料計(jì)劃
- 2025年微循環(huán)測(cè)試系統(tǒng)項(xiàng)目建議書(shū)
- 2025年激光轉(zhuǎn)速測(cè)量?jī)x合作協(xié)議書(shū)
- 2025年中國(guó)消毒柜行業(yè)發(fā)展環(huán)境、供需態(tài)勢(shì)及投資前景分析報(bào)告(智研咨詢(xún)發(fā)布)
- 七年級(jí)下冊(cè)《平行線》課件與練習(xí)
- 電子政務(wù)系統(tǒng)權(quán)限設(shè)置指南
- 初中八年級(jí)音樂(lè)-勞動(dòng)號(hào)子《軍民大生產(chǎn)》
- 寒假社會(huì)實(shí)踐大學(xué)生返鄉(xiāng)
- 站樁的知識(shí)講座
- 【物業(yè)】《維修資金管理與使用》培訓(xùn)課件
- 革命文物主題陳列展覽導(dǎo)則(試行)
- 鋁合金時(shí)效爐安全操作規(guī)程模版
- DB2201T 59-2023 冬季供暖運(yùn)行參數(shù)氣象指標(biāo)及分級(jí)
- 醫(yī)學(xué)遺傳學(xué)第三版課件
- 四川家庭農(nóng)場(chǎng)補(bǔ)貼標(biāo)準(zhǔn)2023年
- 五年級(jí)下冊(cè)字帖
- 設(shè)備采購(gòu)供貨安裝實(shí)施方案
評(píng)論
0/150
提交評(píng)論