MATLAB上的GPU加速計算
【時間】2018.10.12
【題目】MATLAB上的GPU加速計算
概述
怎樣在MATLAB上做GPU計算呢?主要分為三個步驟:資料的初始化、對GPU資料進行操作、把GPU上的資料回傳給CPU
一、資料的初始化
首先要進行資料的初始化。有兩種方法可以進行初始化:一是先在CPU上設定好資料然後拷貝到GPU;二是直接在GPU上初始化資料。
1.1.先看看第一種方案:使用gpuArray函式。
N = 6;
M = magic(N);
G = gpuArray(M);
可見把資料從CPU拷貝到GPU上非常簡單,只要B = gpuArray (A)就可以了。實際上MATLAB並沒有規定一個矩陣定義之後不能改型別,所以以下也是可以的:
M = gpuArray(M);
補充說明: matlab是一種函式,用於產生魔方矩陣,它的每行、列以及對角線的數之和相等。該和的值為1+2+3+.....+n^2的和再除以n,n必須為大於或等於3的整數。例如:
有時候GPU受限於硬體架構,單精度的計算遠快於雙精度。這時候可以考慮在拷貝的時候順便轉換一下精度:
A = gpuArray(single(B));
1.2.第二種方法是直接在GPU上設定資料:
A = zeros(10, 'gpuArray');
也可以生成一個一維的隨機陣列:
r = gpuArray.rand(1, 100) % 一行,一百列
執行class函式:
class(r)
得到
ans = gpuArray。可見這是一個在gpu上的陣列。
二、對GPU資料進行操作
下面就是對GPU資料進行操作。首先,MATLAB定義了GPU上豐富的庫函式,比如快速傅立葉變換:
result = fft(r)
這樣result就是另一個GPU上的陣列,儲存了對r做fft的結果。
三、把GPU上的資料回傳給CPU--使用gather函式
最後是如何把GPU上的資料回傳給CPU:
B = gather (A);
其中A是GPU上的資料,B是CPU上的資料。B的內容在回傳之後等於A。
補充:如何檢視自己的電腦能否用MATLAB進行GPU加速計算
並不是所有的電腦都可以用MATLAB進行GPU加速計算。想知道自己的電腦有沒有這個能力,執行gpuDevice:
>> gpuDevice
MATLAB目前只支援Nvidia的顯示卡(即前面顯示 CUDADevice with properties)。如果你的顯示卡是AMD的或者是Intel的,就得考慮另尋它路了。
參考連結:http://blog.sina.com.cn/s/blog_6f062c360102v9ic.html,侵刪