一.说明

《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里编译器的选择

mex –setup,出现下图所示:

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


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


确认选择,输入y。


完成,可以开始。

 

三. 初步测试

helloMex.cpp文件,内容为:

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

void mexFunction(int nlhs, mxArray*plhs[], int nrhs, constmxArray*prhs[])
mexPrintf("Hello, matlab with cuda!n");

mex helloMex.cpp。(此时Matlab的工作路径必须是helloMex.cpp所在文件夹)。

如果成功的话,将产生helloMex.mexw64(或 helloMex.mexw32),括号里是32位时产生的。

然后输入HelloMex即可看到结果。如下图所示。

四. 补充

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