如何将使用CUDA的C ++程序转换为MEX

时间:2010-06-15 18:02:54

标签: c++ matlab cuda

为了工作,我正在将CUDA SDK附带的Image Deoising程序转换为MATLAB程序。据我所知,我已经完成了MATLAB所需的所有必要更改,但是当我尝试在其上调用mex时,MATLAB会返回一堆链接错误,我不知道如何修复。如果有人对我可能做错了什么有任何建议,我将不胜感激。

我给MATLAB的命令是:

mex imageDenoisingGL.cpp -I..\..\common\inc -IC:\CUDA\include -L..\..\common\lib -lglut32

MATLAB的输出是一堆:

imageDenoisingGL.obj : error LNK2019: unresolved external symbol __imp__cutCheckCmdLineFlag@12 referenced in function "void __cdecl __cutilExit(int,char * *)" (?__cutilExit@@YAXHPAPAD@Z)

我正在跑步:
Windows XP x32
Visual Studio 2005
MATLAB 2007a

3 个答案:

答案 0 :(得分:1)

如果您要从CUDA转换为MATLAB,那么为什么还要调用CUDA函数?

  

未解决的外部符号   的 __ imp__cutCheckCmdLineFlag @ 12

答案 1 :(得分:1)

您需要将CUDA库链接到MEX文件。看起来您还在使用CUDA SDK中的一些"cutil.h"内容(例如cutCheckCmdLineFlag),因此您不仅需要链接cudart库,还需要链接cutil。即你可能需要添加像

这样的东西
-Lc:\CUDA\lib -lcudart -lcuda -L<path-to-cutil.lib> -lcutil

到您的MEX命令行。

答案 2 :(得分:0)

高性能Mark在他的评论中建议直接在Visual Studio下使用CUDA编译mexfiles。在页面

Compiling CUDA mex files with Visual Studio

描述了如何在Visual Studio下使用CUDA编译mexfiles。还有一个可下载的Visual Studio示例项目。

该程序已针对CUDA 5.0,Visual Studio 2010和Matlab 2010a / 2012b进行了测试,但也许对使用其他版本的上述产品的人也有兴趣。