如何转换 C++使用 CUDA 到 MEX 中的程序
为了工作,我将 CUDA SDK 附带的图像去噪程序转换为 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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要将 CUDA 库链接到您的 MEX 文件。看来您还使用了 CUDA SDK 中的一些
"cutil.h"
内容(例如cutCheckCmdLineFlag
),因此您需要链接到 not不仅有cudart图书馆,还有cutil图书馆。 添加类似的内容。也就是说,您可能需要在 MEX 命令行中
You need to link the CUDA libraries to your MEX file. It looks like you're also using some of the
"cutil.h"
stuff from the CUDA SDK (such ascutCheckCmdLineFlag
), so you'll need to link against not only the cudart library, but also cutil. I.e. you probably need to add something liketo your MEX command-line.
如果您要从 CUDA 转换为 MATLAB,那么为什么还要调用 CUDA 函数?
If you are converting from CUDA to MATLAB, then why are you still calling the CUDA functions?
High Performance Mark 在他的评论中建议直接在 Visual Studio 下使用 CUDA 编译 mexfiles。在
使用 Visual Studio 编译 CUDA mex 文件
页面描述了如何在 Visual 下使用 CUDA 编译 mexfiles工作室。还有一个可下载的 Visual Studio 示例项目。
该过程已经针对 CUDA 5.0、Visual Studio 2010 和 Matlab 2010a/2012b 进行了测试,但使用上述产品其他版本的人们也许也会对此感兴趣。
High Performance Mark is suggesting, in his comment, to compile mexfiles using CUDA directly under Visual Studio. At the page
Compiling CUDA mex files with Visual Studio
it is described how the compile mexfiles using CUDA under Visual Studio. There is also a downloadable Visual Studio sample project.
The procedure has been tested for CUDA 5.0, Visual Studio 2010 and Matlab 2010a/2012b, but perhaps it could be of interest also to people using other versions of the above products.