Как запустить ядро ​​кооперативного шаблона cuda

Я безуспешно пытаюсь запустить ядро ​​шаблона как совместное ядро ​​в CUDA C++, что я делаю не так

ошибка

      
Error       cannot determine which instance of function template "boolPrepareKernel" is intended    
 

Я пытаюсь вызвать ядро, как показано ниже.

       ForBoolKernelArgs<int> fbArgs = ...;

    int device = 0;
    cudaDeviceProp deviceProp;
    cudaGetDeviceProperties(&deviceProp, device);
   cudaLaunchCooperativeKernel((void*)boolPrepareKernel, deviceProp.multiProcessorCount, fFArgs.threads, fbArgs) ;

ядро определяется как

      template <typename TYO>
__global__ void boolPrepareKernel(ForBoolKernelArgs<TYO> fbArgs) {
...
}

Я попытался параметризовать запуск (в этом примере с помощью int), например

          cudaLaunchCooperativeKernel((void*)(<int>boolPrepareKernel), deviceProp.multiProcessorCount, fFArgs.threads, fbArgs) ;

но я получаю ошибку

      no instance of overloaded function matches the argument list            argument types are: (<error-type>, int, dim3, ForBoolKernelArgs<int>)

Для предложенного случая

      cudaLaunchCooperativeKernel((void*)(boolPrepareKernel<int>), deviceProp.multiProcessorCount, fFArgs.threads, fbArgs)

Моя ошибка

       no instance of overloaded function matches the argument list            argument types are: (void *, int, dim3, ForBoolKernelArgs<int>)

Это, наверное, просто, но я застрял - спасибо за помощь!

Для эталонного запуска ядра, например

      boolPrepareKernel << <fFArgs.blocks, fFArgs.threads >> > (fbArgs);

работает, но, конечно, синхронизация сетки недоступна.

1 ответ

Вот минимальный пример, который будет компилироваться:

      $ cat t1954.cu
template <typename TYO>
struct ForBoolKernelArgs
{
    TYO val;
};

template <typename TYO>
__global__ void boolPrepareKernel(ForBoolKernelArgs<TYO> fbArgs) {
}


int main(){
  ForBoolKernelArgs<int> fbArgs;
  void *kernel_args[] = {&fbArgs};
  cudaLaunchCooperativeKernel((void*)(boolPrepareKernel<int>), 1, 1, kernel_args) ;
}
$ nvcc -o t1954 t1954.cu
$

Вероятно, основная оставшаяся проблема заключается в том, что вы не следуете надлежащим инструкциям по передаче аргументов ядра.

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