我正在学习cuda并尝试编写一个函数,以与主机上类似的方式在设备上分配内存。例如:
//host
float* allocate1D_float(int size)
{
float* array = (float*)malloc(size* sizeof(float));
if (array==NULL)
{
printf("\n Error allocating memory 1\n");
free(array);
exit(EXIT_FAILURE);
}
return array;
}
float *h_A = allocate1D_float(numElements);
//device
float* alloc_cuda1D_float(int numElements)
{
float *d_array = NULL;
size_t size = numElements * sizeof(float);
cudaError_t err = cudaSuccess;
err = cudaMalloc((void **)&d_array, size);
if (err != cudaSuccess)
{
fprintf(stderr, "Failed to allocate device vector (error code %s)!\n", cudaGetErrorString(err));
exit(EXIT_FAILURE);
}
return d_array;
}
float *d_A = alloc_cuda1D_float(int numElements);
然而,nvcc一直在说 错误:不允许输入类型名称 错误:预期a")" 用于主机功能正常时的设备功能。希望你能帮我解决问题。
感谢。
答案 0 :(得分:0)
关于“不允许输入类型名称”:
你做得正确:
float *h_A = allocate1D_float(numElements);
但这是错误的:
float *d_A = alloc_cuda1D_float(int numElements);
^^^
This int shouldn't be here
请移除int
numElements
权限
这当然与CUDA无关。如果您试图将int
放在不属于该调用的位置,则您的主机函数调用会产生类似的错误。