如何在MATLAB上用GPU加速计算

(1)首先,GPU设备确认,Matlab目前只支持Nvidia的显卡。想知道自己的电脑有没有这个能力,在Matlab中运行 gpuDevice。
只要数据格式是gpuArray格式的,那么计算过程会自动的调用GPU进行计算。

(2)GPU和CPU之间数据传递
①将CPU内存数据传到GPU内存中:gpuArray
1)在使用GPU计算的时候,只需要将CPU的数据复制到GPU中即可,可以对数据的名称做了修改,也可以直接进行重新赋值。
例如:G = gpuArray(M);或,M = gpuArray(M);
注意:有时候GPU受限于硬件架构,单精度的计算远快于双精度。这时候可以考虑在拷贝的时候顺便转换一下精度,例如:A = gpuArray(single(B));
2)也可以直接在GPU上设置数据。
例如:A = zeros(10, ‘gpuArray’);
或像随机序列的产生:r = gpuArray.rand(1, 100) % 一行,一百列
运行class函数:class®;得到ans = gpuArray。可见这是一个在gpu上的数组。

在GPU可以正常运行基本的运算,与正常矩阵计算方法相同。具体的可以运行的运算可以使用命令。可以通过“methods(gpuArray)”进行查看,Matlab可以在GPU运行的具体运算可以查看附录,附录中是Matlab给出的结果。

②GPU数据回传
B = gather (A);
直接使用上边的命令就能够将GPU中的数据回传给CPU。

(3)使用技巧
如果没有并行计算不建议使用GPU。单个线程运行程序还是建议在CPU上运行,CPU的主频还是高一点,GPU主要是支持多个线程同时运行。
例如:index = 0;
index = gpuArray(index);
for i = 1 : 10000
tic
for j = 1 : 100000
index = index + 1;
end
toc
end
disp(index)
通过上边程序第二行程序就可以在GPU上运行,注释掉就会在CPU上运行。

参考借鉴的网上同人说明,感谢指教,无商用,若侵权可删。
参考链接:
https://blog.csdn.net/qq_35451572/article/details/79579831
https://blog.csdn.net/C_chuxin/article/details/83027485
https://www.cnblogs.com/yymn/p/8698287.html

猜你喜欢

转载自blog.csdn.net/yxnooo1/article/details/108400619