1. 程式人生 > >MATLAB上的GPU加速計算

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,侵刪