cuMemAlloc
из API драйвера CUDA.
Если вы изучите какие-либо подходящие программы API драйверов, вы обнаружите, что первое, что вам нужно сделать, это выдать:
cuInit();
чтобы начать использовать CUDA. Возможно, вы этого не сделали (вы должны предоставить MCVE). Это вероятная причина этой конкретной ошибки.
Вы столкнетесь с другими разъединениями между API драйвера CUDA и API времени выполнения CUDA, если смешаете их. Это не должно быть необходимо для большинства кодов, и я не рекомендую его для начинающих.
Изучите примеры кодов, чтобы узнать, как использовать один или другой. Например, изучите пример кода vectorAdd , чтобы изучить основы программы CUDA runtime API . Изучите соответствующую vectorAddDrv , чтобы изучить основы программы API-интерфейса CUDA .
Самым простым решением здесь, вероятно, является просто замена вызовов на cuMemAlloc
на cudaMalloc
:
cufftComplex *d_in, *d_out;
int ds = sizeof(cufftComplex) * width * height;
cudaError_t test_din = cudaMalloc((void**)&d_in, ds);
cudaError_t test_dout = cudaMalloc((void**)&d_out, ds);
printf("test_din: %s\n", cudaGetErrorString(test_din));
printf("test_dout: %s\n", cudaGetErrorString(test_dout));