Matlab之GPU加速方法


Matlab之GPU加速方法

 

 

一般代碼加速方法

Matlab目前只支持Nvidia的顯卡。

GPU設備確認

想知道自己的電腦有沒有這個能力,在Matlab中運行 gpuDevice。 
只要數據格式是gpuArray格式的,那么計算過程會自動的調用GPU進行計算。

GPU和CPU之間數據傳遞

  • gpuArray 
    I) 將CPU內存數據傳到GPU內存中
X=rand(10,'single'); %定義在CPU上的一個10x10的隨機初始化數組 GX=gpuArray(X); %在GPU開始數組GX,並且將X的值賦給GX GX2=GX.*GX; %GPU上執行數組對應位置的點乘

還有很多支持 gpuArray 數據類型的函數,具體可以用 methods(‘gpuArray’) 查看。下列某函數的說明可以用 help gpuArray/functionname 查看:

gpuArray.ones gpuArray.colon gpuArray.zeros gpuArray.rand gpuArray.inf gpuArray.randi gpuArray.nan gpuArray.randn gpuArray.true gpuArray.linspace gpuArray.false gpuArray.logspace gpuArray.eye

其實,這些函數的用法和對應的普通函數的用法都是類似的。

II = gpuArray.eye(1024,'int32'); size(II) ans=1024 1024

II)在GPU內存中隨機初始化一些內存數據。

GX=rand(10,'gpuArray'); %直接在GPU設備上隨機初始化一個10x10的數組 %%常用的隨機初始化函數有:eye, ones, zeros, rand, randi, randn.
  • gather 
    將GPU內存中的數據拷貝回CPU內存中。
X2=gather(GX2) %將GPU內存中的數組GX2賦值給CPU中的X2

TIPS 
有時候GPU受限於硬件架構,單精度的計算遠快於雙精度。這時候可以考慮在拷貝的時候順便轉換一下精度 A = gpuArray(single(B)) 。

復雜代碼加速方法

對於一些復雜的,無法用matlab內部函數進行GPU加速的代碼,matlab還提供了一個更強大的工具,就是調用.cu文件。

matlab+c混合編程把.c,.cc,.cpp等文件編譯為能夠使用的mex文件。對於CUDA程序.cu,matlab也提供了一套方法來調用,最終編譯成.ptx文件。

 


免責聲明!

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



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