Matlab高級教程_第二篇:Matlab相見恨晚的模塊_02_並行運算-利用GPU並行執行MATLAB程序
阿新 • • 發佈:2018-03-25
設備編號 randn sim 數據 src eth 使用 locks too
1 MATLAB原文:
如果所有你想使用的函數支持GPU,你能夠使用gpuArray把輸入的數據傳輸到GPU,也能夠喚起gather命令把傳輸值GPU的數據回收。
2 通過gpuDevice命令觀察當前電腦的GPU設備
>> gpuDevice ans = CUDADevice (具有屬性): Name: ‘GeForce GT 430‘ % GPU設備的型號 Index: 1 % 當前GPU設備的編號 ComputeCapability: ‘2.1‘ % 計算能力SupportsDouble: 1 %知否支持雙精度運算 DriverVersion: 8 % Cude驅動版本 ToolkitVersion: 7.5000 % 工具版本 MaxThreadsPerBlock: 1024 % 每個Block的最大線程數目 MaxShmemPerBlock: 49152 % 每個Block可用的最大shared內容 MaxThreadBlockSize: [1024 1024 64] %單個Block支持x,y,z三個方向的最大值 MaxGridSize: [65535 65535 65535] %最大的grid大小 SIMDWidth: 32 %Warp大小 TotalMemory: 1.0737e+09 %GPU設備全部內存大小 AvailableMemory: 799592448 %GPU設備可分配內存大小 MultiprocessorCount: 2 %GPU設備處理器個數(同CPU處理器個數相同,這是雙核GPU) ClockRateKHz: 1500000 % 時鐘頻率多少赫茲 ComputeMode:‘Default‘ %計算模式 GPUOverlapsTransfers: 1 KernelExecutionTimeout: 1 CanMapHostMemory: 1 DeviceSupported: 1 %本機MATLAB支持的GPU設備個數 DeviceSelected: 1 %當前選擇GPU設備編號。
3 通過gpuDevice(index)編號選擇第幾個GPU處理器進行數值運算。
4 創建GPU數值陣列(最簡單的一種復制和提取應用)
通過gpuArray函數完成,通過gather函數回收運算或復制的GPU數據:
x = rand(3,3); B = gpuArray(x); whos B % whos B % 返回GPU賦值後的對象 % Name Size Bytes Class Attributes % % B 3x3 4 gpuArray X1 = gather(B); % 把GPU中的值在收回來,賦值一個變量 x - X1; % x - X1 % 結果為0,表示過程正確 % ans = % 0 0 0 % 0 0 0 % 0 0 0
5 對應的創建GPU數值陣列有一些其他的GPU函數,與常用的MATLAB函數一樣,只不過加上gpuArray字符說明,就可以轉換成GPU數值陣列。常用的這些函數有兩種方式,而且可以函數名來作為定放的位置,分別如下:
eye(___,‘gpuArray‘) rand(___,‘gpuArray‘)
false(___,‘gpuArray‘) randi(___,‘gpuArray‘)
Inf(___,‘gpuArray‘) randn(___,‘gpuArray‘)
NaN(___,‘gpuArray‘) gpuArray.colon(值)
ones(___,‘gpuArray‘) gpuArray.freqspace(值)
true(___,‘gpuArray‘) gpuArray.linspace(值)
zeros(___,‘gpuArray‘) gpuArray.logspace(值)
gpuArray.speye(值)
6 其他的創建GPU數值陣列的函數可以用幫助的方式取查看
help gpuArray.methodname(methodname就是想要查看的函數)
7 還有操作GPU數據的函數常用的有:
classUnderlying(___,‘gpuArray‘) gupArray.classUnderlying(值) % gpu數值陣列數據元素類型
isreal(___,‘gpuArray‘) gupArray.isreal(值) % 判斷gpu數值陣列數據元素是否為實數
length(___,‘gpuArray‘) gupArray.length(值) %gpu數值陣列最後一維的數據長度
ndims(___,‘gpuArray‘) gupArray.ndims(值) %gpu數值陣列的尾數
size(___,‘gpuArray‘) gupArray.size(值) %gpu數值陣列各維大小
8 常用的還有這些
9 其實GPU變得很簡單,就是賦值計算,取回。
Matlab高級教程_第二篇:Matlab相見恨晚的模塊_02_並行運算-利用GPU並行執行MATLAB程序