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


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變得很簡單,就是賦值計算,取回。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM