一、JACKET 函數(shù) JACKET與MATLAB整合 一旦JACKET安裝完,它集成了透明的MATLAB的用戶界面,用戶可以通過交互的MATLAB桌面和命令窗口以及寫M -函數(shù)使用MATLAB編輯器和調(diào)試器方式開始GPU工作。所有Jacket數(shù)據(jù)以及任何其他MATLAB的矩陣在MATLAB的工作空間都是可見的。 Jacket GPU提供了MATLAB的CPU數(shù)據(jù)類型,如實(shí)數(shù),復(fù)數(shù)的雙精度,單精度數(shù)據(jù), 無(wú)符號(hào)32位整數(shù),32位整數(shù), 邏輯數(shù)據(jù)類型等等。任何變量在主機(jī)(CPU)的內(nèi)存,可轉(zhuǎn)換為存儲(chǔ)在JACKET的GPU的數(shù)據(jù)類型。JACKET的內(nèi)存管理系統(tǒng)在GPU上的這些變量自動(dòng)分配和管理。而在幕后,基于GPU的數(shù)據(jù)調(diào)用的函數(shù)將自動(dòng)執(zhí)行,實(shí)現(xiàn)動(dòng)態(tài)編譯,在GPU上無(wú)須任何額外的編程。 任何函數(shù)調(diào)用在JACKET的GPU矩陣結(jié)果都會(huì)使計(jì)算加快,Jacket's 核心價(jià)值之一是為matlab用戶提供透明的操作,唯一你要知道的是將MATLAB的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為GPU的數(shù)據(jù)結(jié)構(gòu)。 1.1 基礎(chǔ)函數(shù)庫(kù) Jacket 函數(shù) 描述 例子 GSINGLE 施放一個(gè)MATLAB矩陣到GPU的單精度浮點(diǎn)矩陣 A = gsingle(B); GDOUBLE 施放一個(gè)MATLAB矩陣到GPU的雙精度浮點(diǎn)矩陣 A = gdouble(B); GLOGICAL 施放一個(gè)MATLAB矩陣到二進(jìn)制GPU的矩陣。所有非零值都設(shè)置為'1'。輸入矩陣可以是GPU或CPU的數(shù)據(jù)類型 A = glogical(B); A = glogical(0:4); GINT8, GUINT8, GINT32, GUINT32 施放一個(gè)MATLAB的矩陣符號(hào)和無(wú)符號(hào)8位或32位整數(shù)的到GPU矩陣 A = gint8(B); A = guint8(B); A = gint32(B); A = guint32(B); GZEROS 創(chuàng)建一個(gè)GPU的零矩陣函數(shù) A = gzeros(5); A = gzeros(2,6); GONES 創(chuàng)建一個(gè)類似ONES 的GPU矩陣函數(shù) A = gones(5); A = gones([3 9]); GEYE 創(chuàng)建一個(gè)類似EYE 的GPU矩陣函數(shù) A = geye(5); GRAND 創(chuàng)建一個(gè)類似RAND 的GPU矩陣函數(shù). A = grand(5); GRANDN 創(chuàng)建一個(gè)類似RANDN 的GPU矩陣函數(shù) A = grandn(5); 一旦GPU的數(shù)據(jù)結(jié)構(gòu)已經(jīng)建立,該GPU矩陣的任何操作都只能在GPU上進(jìn)行,而不能在CPU上,要返回CPU計(jì)算, 必須轉(zhuǎn)換回CPU類型。 A = gsingle( B ); %將CPU的B矩陣轉(zhuǎn)換為單精度GPU類型 B = double( A ); %將GPU的A矩陣轉(zhuǎn)換為雙精度CPU類型 附加的GPU類型 Jacket 函數(shù) 描述 舉例 GHELP 檢索的任何JACKET支持的MATLAB函數(shù)信息. ghelp sum; GACTIVATE 用于JACKET 手動(dòng)激活 gactivate; GVER 查詢MATLAB和工具箱版本,JACKET版本cuda信息 gver; GVERSION 輸出夾克版本和版本的修訂號(hào)。 gversion; GINFO 查看JACKET 的相關(guān)信息以及圖像顯卡驅(qū)動(dòng)情況 ginfo; GSELECT 選擇或查詢的圖形處理器中使用 gselect(0); GFOR 執(zhí)行在GPU上的并行循環(huán) gfor n = 1:10; % loop body gend; GCOMPILE 編譯的M -代碼直接到一個(gè)CUDA內(nèi)核。 my_fn=gcompile('filename.m'); [B C ...] = my_fn(A) GPROFILE 測(cè)試JACKET的代碼執(zhí)行效率情況 gprofile on; foo; gprofile off; gprofile report; GPROFVIEW 視覺表征的分析數(shù)據(jù)。 gprofview; GEVAL 返回值在GPU中 geval; GSYNC 阻止,直到所有排隊(duì)的GPU計(jì)算已完成。 gsync(A); GLAUNCH 原型,執(zhí)行和基準(zhǔn)的CUDA內(nèi)的M -文件的內(nèi)核 glaunch; GMEX 編譯GPU啟用mex的jacket SDK的文件 (在Windows中) gmex [options] source.cu; GCACHE 保存為特定的GPU編譯MATLAB的腳本代碼 gcache; GLOAD 直接從磁盤加載到GPU上。需要JACKET的SDK gload('filename'); GSAVE 直接從GPU上保存數(shù)據(jù)到磁盤作為文本文件。需要JACKET SDK. gsave('filename', A); GREAD 在選項(xiàng)指定字節(jié)范圍直接從磁盤加載到圖形處理器,要求JACKET SDK. gread('filename', OFFSET, BYTES); GWRITE 選擇指定字節(jié)范圍直接從GPU保存數(shù)據(jù)到磁盤,需要JACKET的SDK. gwrite('filename', OFFSET, DATA); Graphics Library 函數(shù)中包含的圖形庫(kù) gplot(A); 例子:gsync; % 確保GPU內(nèi)核同步開始 tic; for i = 1:n a = a .* a; % 計(jì)算 end geval(a); % 確保計(jì)算 gsync; % 等待GPU的完成執(zhí)行 toc; 不等式符號(hào) A < B lt(A, B) A > B gt(A, B) A <= B le(A, B) A >= B ge(A, B) A == B eq(A, B) A ~= B ne(A, B) A & B and(A, B) A | B or(A, B) ~A not(A) JACKET 計(jì)時(shí)函數(shù)tic/toc. JACKET包含兩個(gè)重要的功能是利用GPU的代碼計(jì)時(shí),用MATLAB的tic/toc. 由于JACKET的懶惰執(zhí)行,必須使用gsync和geval以確保Gpu在執(zhí)行toc之前運(yùn)行完。 [ 本帖最后由 藍(lán)云風(fēng)翼 于 2011-1-24 15:42 編輯 ] |
|