Почему 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.