我正在使用C ++ / Cuda并在“ MortalityTable.obj”中遇到编译错误“未解决的外部符号threadIdx”。
我创建了一个新的C ++ Cuda Runtime项目,然后编译并运行良好。
然后添加一个类MortalityTable.cu
和.h
,而没有任何Cuda代码,只是常规C ++。编译并运行良好。
当我尝试添加Cuda内核时,错误开始(如果我注释掉,一切都很好)。我在MortalityTable.cu中有这些标题:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
这是我在同一文件中的内核
__global__
void DevPLE(double* devple, double* devQxt, int maxAge, int years) {
int i = threadIdx.x;
double surv = 0, ple = 0;
for (int age = 0; age < maxAge; age++) {
surv = surv * (1.0f - devQxt[age * years + i]);
ple += surv;
}
devple[i] = ple + 0.5;
}
有什么想法可以让我编译并运行它吗?
当您创建新的Cuda Runtime Project时,kernel.cu
中仍然有示例代码,它具有相同的标题并且可以正常工作。因此看来项目设置还可以,但是由于某种原因不适用于MortalityTable.cu ...
答案 0 :(得分:1)
.cu文件用nvcc编译,.c .cpp用cl编译。
在cuda项目中,添加一个c ++文件(cpp),然后以.cu扩展名重命名,VS也不会更改编译器。
如果您编辑项目文件project.vcxproj,则可能需要检查.cu文件是否包含在CudaCompile标记中:
<ItemGroup>
<CudaCompile Include="cudacode.cu" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="code.cpp" />
</ItemGroup>