日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB GPU加速

發布時間:2025/3/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB GPU加速 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前使用matlab

的時候,很多人都用過里面的并行工具箱,用的最多的應該就是parfor。實際上,matlab里面已經有不少工具箱里面都有了支持GPU加速的函數。使用matlab+GPU加速的前提是,機器必須安裝了支持CUDA的顯卡,而且CUDA驅動的版本在1.3以上。一些比較常用的函數

例如fft,ifft,三角函數,相關函數xcorr以及常用的運算符等等都可以進行加速。方法也很簡單,主要使用到gpuArray和gather這兩個函數。

以xcorr為例,假設我們要求向量A和B的互相關,一般是使用代碼

M = xcorr(A,B)

以下是使用gpu加速的版本

Ag = gpuArray(A);

Bg = gpuArray(B);

Mg = xcorr(Ag,Bg);

M = gather(Mg);

一般的小矩陣可能感覺不出來,不過如果矩陣規模很大,而且在多次循環內部,這個區別就很明顯了。mathwork的網站上有對xcorr的gpu加速效率的詳細分析報告,基本上,隨著矩陣規模擴大,gpu加速的倍數是直線上升。

除了相關函數,還有很多支持gpuArray數據類型的函數,具體可以用下面的指令查看

methods('gpuArray')

其中某個函數的說明可以用help查看

help gpuArray/functionname

上面的例子中,gpuArray是把數據轉換為GPU處理的類型,存儲到GPU的顯存里。gather是將數據轉移回來。除了將現有的矩陣轉移到GPU中,gpuArray自帶的方法還可以直接在GPU中創建數據:

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

這些方法的具體用法可以使用類似下面的命令尋求幫助

help gpuArray/eye

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

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

size(II)

1024 1024

還可以用下面的命令生成隨機數

parallel.gpu.rng

parallel.gpu.RandStream

對于CPU和GPU產生隨機數方法的比較,有興趣的可以看這里。

最后,一些處理普通數據的函數也可以用來檢測GPU數據的屬性

Function

Description

classUnderlying

Class of the underlying data in the array

existsOnGPU

Indication if array exists on the GPU and is accessible

isreal

Indication if array data is real

length

Length of vector or largest array dimension

ndims

Number of dimensions in the array

size

Size of array dimensions

值得注意的是,GPU的數據是要存到顯存里面的,顯存可沒有內存那么大,雖然maltab和CUDA為我們做了很多顯存管理的工作,但是我們還是要保證處理的矩陣不會把顯存撐爆。

matlab的工具箱支持GPU的情況

可以在下面的網頁上查詢

http://www.mathworks.cn/products/parallel-computing/builtin-parallel-support.html

其中對于圖像處理來說有一個很有用的。我曾經的一篇博文

介紹過使用 blockproc 函數加速滑動窗。其實,這個函數還可以進一步被GPU加速,方法就是設置其中的 'UseParallel’ 變量。例子

下面是用gpu解波動方程的例子,cpu和gpu版本程序

進行對比,改動其實不太大,細節見參考中第四個網頁

編譯.CU文件

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

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

總結

以上是生活随笔為你收集整理的MATLAB GPU加速的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。