0

考虑以下 CUDA 程序,在一个名为 的文件中foo.cu

#include <cooperative_groups.h>
#include <stdio.h>

__global__ void my_kernel() {
    auto g = cooperative_groups::this_grid();
    g.sync();
}

int main(int, char **) {
    cudaLaunchCooperativeKernel( (const void*) my_kernel, 2, 2, nullptr, 0, nullptr);
    cudaDeviceSynchronize();
}

这个程序做的不多——但它是一个有效的程序(如果你的计算能力足够高,可以支持整个网格作为一个合作组)。它应该编译链接并运行。但是,我明白了:

$ nvcc -o foo  -gencode arch=compute_61,code=sm_61 foo.cu 
ptxas fatal   : Unresolved extern function 'cudaCGGetIntrinsicHandle'

奇怪!如果我添加一些特定-l-L标志并没有帮助,例如:

$ nvcc -o foo  -gencode arch=compute_61,code=sm_61 foo.cu -L"/usr/lib/x86_64-linux-gnu/" \
-L"/usr/lib/x86_64-linux-gnu/stubs"  -lcudadevrt -lcudart_static -lrt -lpthread -ldl
ptxas fatal   : Unresolved extern function 'cudaCGGetIntrinsicHandle'

为什么会这样?我应该如何修改 nvcc 命令行以使其找到未解析的符号?

笔记:

  • 我正在使用 Devuan GNU/Linux 3.0。
  • CUDA 10.1 作为分发包安装,因此其库位于/usr/lib/x86_64-linux-gnu.
  • 带有 GeForce 1050 Ti 卡的 x86_64 机器。
4

0 回答 0