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