我正在使用CUDA tutorial来使用V100张量核。我的MWE代码:
$ cat src/wmma.cu
#include <cuda_runtime_api.h>
#include <mma.h>
using namespace nvcuda;
int main(void){
return 0;
}
使用CUDA 9.0进行编译,
$ nvcc src/wmma.cu
src/wmma.cu(10): error: name must be a namespace name
1 error detected in the compilation of "/gpfs0/scratch/1430008/tmpxft_0002054c_00000000-8_wmma.cpp1.ii".
如果我添加选项--gpu-architecture=compute_62
,我仍然会遇到相同的错误。 CPATH
设置为/opt/cuda/9.0/include:
,因此我认为查找头文件没有困难。
当我注释掉using namespace nvcuda
时,它会按预期进行编译和执行。
问题:
答案 0 :(得分:5)
为什么我对这个琐碎的代码的编译失败了?
因为必须指定支持这些功能的编译体系结构,否则它们是未定义的:
$ cat nvnvnv.cu
#include <cuda_runtime_api.h>
#include <mma.h>
using namespace nvcuda;
int main(void){
return 0;
}
$ nvcc nvnvnv.cu
nvnvnv.cu(3): error: name must be a namespace name
1 error detected in the compilation of "/tmp/tmpxft_00005444_00000000-8_nvnvnv.cpp1.ii".
我正在使用的编译器(CUDA 9.2)上的默认编译体系结构为sm_30
。指定正确的体系结构会使错误消失:
$ nvcc -arch=sm_70 nvnvnv.cu
$
推荐您(非常有用)CUDA tag wiki:
如果发现CUDA关键字出现语法错误 编译设备代码时,请确保使用nvcc和 您的源文件具有预期的.cu扩展名。如果你发现 找不到您希望使用的CUDA设备功能或功能名称空间(原子的) 函数,扭曲投票函数,半精度算术,协作组等), 确保您明确传递了编译参数 启用支持这些功能的体系结构设置。