1. 程式人生 > >Matlab高級教程_第二篇:Matlab相見恨晚的模塊_02_並行運算-利用GPU並行執行MATLAB程序

Matlab高級教程_第二篇:Matlab相見恨晚的模塊_02_並行運算-利用GPU並行執行MATLAB程序

設備編號 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程序