Matlab+CUDA混合编程(一)

一.说明

以前曾尝试Matlab的混合编程,但是由于当初Matlab水平太菜,几经尝试仍未成功,于是放弃了那个念头。在最近研究CUDA的过程中发现了《Accelerating MATLAB with GPU Computing》这本书,于是又想再次尝试混合编程,没想到居然成功了,也许是最近一年经常使用Matlab的缘故。

由于在按照那本书尝试的过程中也出现了一些小插曲,幸好被试了出来,要不然又是半途而废。所以我决定将其记录下来,以便别人不要像曾经的我一样次次半途而废。为了方便起见,我还是采用《Accelerating MATLAB with GPU Computing》这本书的方法和流程,但愿作者不要与我计较,就当我替你们做宣传吧。

二.实践

  1. 基础
    确定有支持CUDA的Nvidia显卡,并且已经正确安装好驱动和SDK等,这个应该不难,网上有许多CUDA安装与配置环境的教程。我使用的是Win7 64位 + Visual Studio 2012 + CUDA5.5 + Matlab 2013b。
    我是先安装的Visual Studio 2012,然后安装的CUDA5.5,CUDA就直接把环境都配置完成,可以直接编程。所以为了省事可以考虑这样安装。

  2. Matlab里编译器的选择

在matlab的Command Window里输入mex –setup,出现下图所示:

输入:y,出现下图所示:

这是让选择编译器,由于我只安装了Visual Studio 2012,所以只有这一个,于是继续输入:1

确认选择,输入y。

完成,可以开始。

 

三. 初步测试

在Matlab中新建helloMex.cpp文件,内容为:

#include "mex.h"
// nlhs: 输出变量的个数
// plhs:输出的mxArray矩阵的头指针
// nrhs: 输入变量个数
// prhs:输入的mxArray矩阵的头指针

void mexFunction(int nlhsmxArray*plhs[], int nrhsconstmxArray*prhs[])
mexPrintf("Hello, matlab with cuda!n");

然后在Matlab的Command Window里输入mex helloMex.cpp。(此时Matlab的工作路径必须是helloMex.cpp所在文件夹)。
如果成功的话,将产生helloMex.mexw64(或 helloMex.mexw32),括号里是32位时产生的。
然后输入HelloMex即可看到结果。如下图所示。

四. 补充

mexFunction()是Matlab混合编程必须的函数,作为借口函数,进行参数的传递,参数的含义在上面也简单的介绍了,下一节会详细的介绍。

你可能感兴趣的:(cuda,matlab)