如何从单独的函数调用cudaMalloc?

时间:2015-10-07 17:24:39

标签: cuda

我正在学习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")" 用于主机功能正常时的设备功能。希望你能帮我解决问题。

感谢。

1 个答案:

答案 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放在不属于该调用的位置,则您的主机函数调用会产生类似的错误。