Tho*_*oth 2 cuda visual-studio-2010 armadillo
我.cu在 64x VS2010 项目中有一个文件。此项目配置为提取.mexw64文件。下面是我运行的示例。在 mex 函数中,我想使用 Armadillo 线性代数库的一些函数。所以当#include "armaMex.hpp"使用时,编译器会返回一些错误:
我无法弄清楚是什么导致了这些错误。你能解释一下吗?
#include "mex.h"
#include "armaMex.hpp"
void
mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mexPrintf("hello!\n");
}
Run Code Online (Sandbox Code Playgroud)
PS:CUDA SDK 5.5 64x,VS2010
这是 nvcc 的一个已知限制(我认为技术上是 cudafe++)。nvcc 使用文件扩展名来确定是否应该为设备代码处理给定的源文件,或者传递给 CUDA 预处理器,然后传递给设备编译器。看起来编译轨迹无法正确解析Armadillo包含的一些非常复杂的声明,编译失败。众所周知,Boost、Eigen 和 QT 会发生这种情况。我猜犰狳也在同一条船上。
解决方案是不在 .cu 文件中导入犰狳头文件。将您的主机提升代码放在 .cc 文件中,设备代码和内核在单独的 .cu 文件中启动,并制作一些薄包装器以访问 .cc 文件中的内核调用。您仍然可以将所有源代码传递给 nvcc 以编译为单个目标文件,但是将 Armadillo 导入与设备代码分开可以消除前端因 Armadillo 包含的复杂模板声明而窒息的问题。
| 归档时间: |
|
| 查看次数: |
2011 次 |
| 最近记录: |