Почему nvcc отказывается связывать эту простую программу для кооперативных групп?

Рассмотрим следующую программу 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.
  • Машина x86_64 с картой GeForce 1050 Ti.

0 ответов

Другие вопросы по тегам