一.说明
《Accelerating MATLAB with GPU Computing》
这本书,于是又想再次尝试混合编程,没想到居然成功了,也许是最近一年经常使用Matlab的缘故。《Accelerating MATLAB with GPU Computing》
这本书的方法和流程,但愿作者不要与我计较,就当我替你们做宣传吧。
二.实践
- 基础
确定有支持CUDA的Nvidia显卡,并且已经正确安装好驱动和SDK等,这个应该不难,网上有许多CUDA安装与配置环境的教程。我使用的是Win7 64位 + Visual Studio 2012 + CUDA5.5 + Matlab 2013b。
我是先安装的Visual Studio 2012,然后安装的CUDA5.5,CUDA就直接把环境都配置完成,可以直接编程。所以为了省事可以考虑这样安装。 - 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混合编程必须的函数,作为借口函数,进行参数的传递,参数的含义在上面也简单的介绍了,下一节会详细的介绍。