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

猜你喜欢

转载自blog.csdn.net/C_chuxin/article/details/83027485