Выделение памяти не разрешено при запуске ядра с 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
. Вероятно, это связано с ошибкой (см. комментарии Роберта Кровеллы выше).