Почему возврат 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

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