CUDA在编译期间无法识别nvcuda名称空间

时间:2018-12-05 14:14:14

标签: compiler-errors compilation cuda

我正在使用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时,它会按预期进行编译和执行。

问题:

  1. 为什么我对这个琐碎的代码的编译失败了?

1 个答案:

答案 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设备功能或功能名称空间(原子的)   函数,扭曲投票函数,半精度算术,协作组等),   确保您明确传递了编译参数   启用支持这些功能的体系结构设置。