irr*_*rom 1 cuda compiler-errors compilation
我正在关注使用V100张量核心的CUDA 教程.我的MWE代码:
$ cat src/wmma.cu
#include <cuda_runtime_api.h>
#include <mma.h>
using namespace nvcuda;
int main(void){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用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".
Run Code Online (Sandbox Code Playgroud)
如果我添加选项--gpu-architecture=compute_62,我仍然会得到相同的错误. CPATH设置为/opt/cuda/9.0/include:,所以我相信我没有找到头文件的困难.
当我注释掉using namespace nvcuda它时,它会按预期编译并执行.
题:
为什么我对这个琐碎代码的编译失败了?
因为您必须指定支持这些功能的编译体系结构,否则它们是未定义的:
$ 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".
Run Code Online (Sandbox Code Playgroud)
默认编译架构sm_30在我正在使用的编译器上(CUDA 9.2).指定正确的体系结构会使错误消失:
$ nvcc -arch=sm_70 nvnvnv.cu
$
Run Code Online (Sandbox Code Playgroud)
引用你的(非常有用的)CUDA 标签wiki:
如果您在编译设备代码时发现CUDA关键字出现语法错误,请确保使用nvcc进行编译,并确保源文件具有预期的.cu扩展名.如果您发现未找到CUDA设备函数或功能命名空间(原子函数,warp投票函数,半精度算术,协作组等),请确保显式传递编译参数,以启用体系结构设置支持这些功能.