matlab吃cpu还是显卡_在GPU上运行MATLAB程序

要加快MATLAB代码的运行速度,除了对代码进行优化、向量化编程等手段外,也可以使用GPU来加速计算。

首先,你需要一个支持的GPU,目前仅支持Nvidia的GPU,不同版本的MATLAB对不同架构的GPU支持情况如下,带星号的需要重新编译CUDA。

b0fef2a829801fc30d0e69ffc2e05665.png

可以用gpuDevice命令查看是否有支持的gpu,亮机卡GT 1030 也能支持。

c8dd0d3938e1ab39542371ddebcf1692.png

GPU运算可以用两种方式实现,

  1. 用gpuArray和gather命令;
  2. 用GPU CUDA和MEX编程深度加速。

一、gpuArray与gather命令实现GPU Computing

gpuArray能够将内存中已有的数组传递到GPU的显存中,如下

A 

A_gpu现在是一个MATLAB gpuArray对象,代表着储存在GPU内存的一个1e8*1的single数组。上述代码等价于:

A_gpu 

除了randn之外,randi/rand/zeros/ones/inf/nan/eye/false/true等内置的能够生成矩阵的函数均可以通过添加参数‘gpuArray’,直接在显存中生成GPU Array.

gether命令能够将GPU显存中的数组提取到内存中。

A 

下面对MATLAB代码在CPU和GPU中的执行效率做一个简单的对比,测试环境CPU型号为Intel i7 8700 ,6核12线程,超频至4.3GHz。相比之下,GPU为NVIDIA GT 1030,垃圾亮机卡,性能也就集显水平。

用filterDesign设计一个101阶FIR滤波器,导出其滤波器系数为num,num为1个101*1的double数组。注意,不要导出为filter object,filter函数用于gpuArray时,不支持filter object,只能用滤波器系数。

%% 用CPU进行计算

从运行结果来看,用101阶FIR滤波器对长度为1亿的数组进行滤波,CPU运行时间约0.5秒,而GPU仅需0.2秒。可以看出,即使是渣显卡1030,计算能力也是秒了超频后的8700。

注意:

  • gpuArray和gather命令能够将数据在内存和显存中传递,这一过程本身也是有开销的,如果计算量较小,数据传递的开销可能比计算的时间还大,导致GPU计算不如直接用CPU.
  • GPU的显存一般比内存要小,对于大量的数据,可能计算效率比较低,甚至无法计算.

二、GPU CUDA and MEX programming

%% TODO
易夕:MATLAB Tricks 专栏目录​zhuanlan.zhihu.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值