Почему возврат cudaLaunchCooperativeKernel() не разрешен?
Поэтому я использую GTX 1050 с вычислительной мощностью 6.1 с CUDA 11.0. Мне нужно использовать синхронизацию сетки в моей программе, поэтому
cudaLaunchCooperativeKernel()
нужно. Я проверил свой запрос устройства, поэтому GPU поддерживает совместные группы. Я не могу выполнить следующую функцию
extern "C" __global__ void test(int x) {
if (x) {
printf("%d", x);
if (threadIdx.x == 0)
test<<<1, 1>>>(--x);
}
}
После звонка,
cudaLaunchCooperativeKernel((void *)test, 1, 1, (void **) (&x));
получение ошибки «операция не разрешена» (код 800). Теперь это возвращается, когда устройство не поддерживает кооперативные группы (не в этом случае). Итак, что может вызвать эту проблему?
1 ответ
Ваше ядро использует динамический параллелизм. Однако динамический параллелизм не допускается в ядрах, запускаемых через
cudaLaunchCooperativeKernel
Это упоминается в документации по API среды выполнения. https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__EXECUTION.html