Matlab+CUDA混合编程(一)

来源:互联网 发布:www.226bbb.com新域名 编辑:程序博客网 时间:2024/05/29 16:48

我的网站

Matlab+CUDA混合编程

一.说明

以前曾尝试Matlab的混合编程,但是由于当初Matlab水平太菜,几经尝试仍未成

功,于是放弃了那个念头。在最近研究CUDA的过程中发现了《AcceleratingMATLAB with GPU Computing》这本书,于是又想再次尝试混合编程,没想到居然成功了,也许是最近一年经常使用Matlab的缘故。

    由于在按照那本书尝试的过程中也出现了一些小插曲,幸好被试了出来,要不然又是半途而废。所以我决定将其记录下来,以便别人不要像曾经的我一样次次半途而废。

    为了方便起见,我还是采用《AcceleratingMATLAB with GPU Computing》这本书的方法和流程,但愿作者不要与我计较,就当我替你们做宣传吧。

二.实践

1.      基础

   确定有支持CUDANvidia显卡,并且已经正确安装好驱动和SDK等,这个应该不难,网上有许多CUDA安装与配置环境的教程。我使用的是Win764+ Visual Studio 2012 + CUDA5.5 + Matlab2013b

    我是先安装的VisualStudio 2012,然后安装的CUDA5.5CUDA就直接把环境都配置完成,可以直接编程。所以为了省事可以考虑这样安装。


2.      Matlab里编译器的选择

matlabCommandWindow里输入mex–setup,出现下图所示:

Matlab+CUDA混合编程(一)

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

Matlab+CUDA混合编程(一)

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

Matlab+CUDA混合编程(一)

         确认选择,输入y

Matlab+CUDA混合编程(一)

         完成,可以开始。


3.      初步测试

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

#include "mex.h"

 

// nlhs:输出变量的个数

//plhs:输出的mxArray矩阵的头指针

// nrhs:输入变量个数

//prhs:输入的mxArray矩阵的头指针

voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[])

{ 

   mexPrintf("Hello, matlab withcuda!\n");

}

 然后在MatlabCommandWindow里输入mexhelloMex.cpp(此时Matlab

工作路径必须是helloMex.cpp所在文件夹)。

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

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

Matlab+CUDA混合编程(一)


 4.   补充

     mexFunction()是Matlab混合编程必须的函数,作为借口函数,进行参数的

  传递,参数的含义在上面也简单的介绍了,下一节会详细的介绍。

0 0
原创粉丝点击