出于加速计算的目的项目里需要用CUDA实现matlab部分计算然后使用matlab调用
由于计算部分需要的参数太多,往CUDA里一一传送太麻烦,所以先利用Matlab将这些参数存入到mat文件中,在CUDA c++代码中读取mat文件。
最终实现效果是在Matlab 代码中像调用函数一样调用mexw64文件(本质上是dll,linux平台拓展名是mexa64)来使用。
由于使用了CUDA无法直接用mex编译成mexw64,所以首先要使用nvcc将cu文件编译成obj文件以供mex链接。
项目总体结构
Ø matlabfunction.m——调用CUDA的matlab主程序
Ø mexmain.cpp——定义mexFunction的C++文件,并在内部读取mat文件,将参数传入CUDA以计算
Ø kernel.cu——CUDA文件,有kernel函数的定义以及一个C++函数接收参数并调用kernel函数进行计算得到计算结果
代码结构
matlab.m
%matlab进行一些数据的处理
%.........
%调用编译出的mexw64/mexa64文件,将参数传入,得到计算结果
[result1,result2]=MexMain(arg1,arg2)
%计算结果的处理
%............
mexmain.cpp
#include "mat.h"
#include "mex.h"
extern int CUDAFunction(double* arg1,double*arg2);//kernel.cu文件中实现,主要功能是将参数传入CUDA kernel函数中利用GPU进行计算
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{//...
}