利用cuda加速MATLAB程序

本文详细介绍了如何在MATLAB中利用CUDA进行并行计算,包括MATLAB R2014a及其后续版本的配置方法,以及MATLAB 2016a后引入的mexcuda函数的使用。针对不同CUDA和MATLAB版本的兼容性问题,文章提供了具体的解决方案,并引用了两位博主的详细教程链接。
摘要由CSDN通过智能技术生成

利用cuda加速MATLAB程序

  最近因为要做张量的模态积,所以要考虑使用cuda来进行并行的编程,但是c++实在太麻烦,尤其是在有MATLAB的时候,写c++简直就是一种“浪费时间”的行为。如果能用MATLAB调用cuda的程序那该是一件多么美好的事情呀。
  确实,这件事情非常美好,但是配置开发环境的过程却是非常痛苦,我花了将近一个星期的时间才把这个问题解决,希望读者能在看完本文后节约宝贵的时间。
  如果你用的是版本比较老的VS(比如2005)和matlab,那么这个问题其实很好办,只要调用nvmex函数就好了,但是据stackoverflow的网友说,自MATLAB2010a开始,nvmex就不被支持了,因此网上有很多答案讨论如何改nvmex函数使得能在更高版本的MATLAB运行,但我试了很多源码都不成功,于是乎放弃。好在MATLAB出了个比较新的MATLABR2015b的版本,这个版本有个mexcuda函数, 用起来相当舒心,只要一两句代码就能调用.cu程序,唯一的不足就在于传入的数组必须是GPUARRay的形式,而且重新下载MATLAB再安装也是挺不舒服的。另外一个要注意的就是在mathworks的releasenote里有说哪个版本的MATLAB支持哪个版本的cuda。所以重装什么的绝对不是一个最好的办法呀。下面就给出两个解决办法:
  

1、参考木子超的办法

  这个办法写得很完整也很细致,我所遇到的问题和他遇到的问题几乎是一样的,读者只要对照着去做就好,我亲自测试过,测试环境是MATLAB_R2014a+VS2010+cuda7.5。还有一点值得注意的是,木子超所给出的代码有的地方是有点瑕疵的,需要读者自己完善,这里我就不说了。以下给出链接:
  http://blog.csdn.net/endlch/article/details/44561535

2、参考Tomheaven的方法

  这个方法我也亲自测试过,测试环境同上,作者写得非常好,就是有个小细节要注意
  

COMPFLAGS="-gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_50,code=\"sm_50,compute_50\" --compiler-options=/c,/GR,/W3,/EHs,/nologo,/MD"

  在上面这个地方,如果你是cuda7.5的版本一定要把第一行第一个出现的arch和code后面的那个数字都改成20了(我记得cuda5.5这俩数字都是13),不然会出现nvcc报错,也就是我第一段说的MATLAB找不到它支持的编译器的架构的问题。以下是链接:
  http://blog.csdn.net/hanlin_tan/article/details/48790273
  
  
%%%%%%%%%%%% 2018年更新 %%%%%%%%%%%%%%
上面讲述了如何在MATLAB2014下进行配置,时间来到了2018年,可能Mathwork公司已经意识到深度学习的火热和大家配置Cuda+MATLAB开发环境的痛苦,所以最新版本的MATLAB(据我所知是MATLAB2016a之后的版本)定义了一个新的语句:”mexcuda”。这个语句使用起来相当方便,比如你有一个向量相加的程序(VectorAdd.cu),你只需要按照编译C++ mex 文件的方法去编译就行了,直接敲击mexcuda VectorAdd.cu, 等待一会,就可

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值