【时间】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,侵删