Выделение памяти не разрешено при запуске ядра с cudaLaunchCooperativeKernel и -rdc=true.

При выполнении следующего кода генерируется ошибка «операция не разрешена». Есть ли что-то, что мне не хватает? Я запускаю его с вычислительными возможностями 7.5 и командойnvcc test.cu -rdc=true. Работает без RDC.

      #include <cooperative_groups.h>
#include <iostream>

__global__ void kernel() {
  void* x;
  cudaMalloc(&x, sizeof(int));
}

int main() {
  int dev = 0;
  int supportsCoopLaunch = 0;
  cudaDeviceGetAttribute(&supportsCoopLaunch, cudaDevAttrCooperativeLaunch, dev);
  if(supportsCoopLaunch == 0) {
    std::cout << "Device does not support cooperative launch, required to synchronize globally on the grid." << std::endl;
    return 0;
  }

  void* args[] = {};
  dim3 dimBlock(1, 1, 1);
  dim3 dimGrid(2, 1, 1);
  cudaError_t e = cudaLaunchCooperativeKernel((void*)kernel, dimGrid, dimBlock, args);
  if (e != cudaSuccess) {
    printf("CUDA runtime error %s\n", cudaGetErrorString(e));
  }
  cudaDeviceSynchronize();
  return 0;
}
``

1 ответ

ИспользоватьmallocвместоcudaMalloc. Вероятно, это связано с ошибкой (см. комментарии Роберта Кровеллы выше).

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