为什么cudaMalloc()不起作用?

时间:2014-02-10 15:33:42

标签: c++ cuda

对于CUDA,我是一个绝对的初学者。我尝试编写一个简单的向量求和程序,以示例程序为基础,它似乎不起作用,因为cudaMalloc不分配内存。 我正在使用CUDA 5.0,我在ubuntu 13.04上工作 对于编译,我只需输入

nvcc cuda1.cu -o cuda1

代码段如下

#include<stdio.h>
#include<cuda.h>
#include<cuda_runtime_api.h>
#define N  5

__global__ void add(int *a, int *b, int *c)
{
        int tid = blockIdx.x;
        if (tid<N)
                c[tid] = a[tid] + b[tid];
}

int main(void)
{
        int a[N],b[N],c[N];
        int *dev_a, *dev_b, *dev_c;
        if (cudaMalloc((void**)&dev_a, N * sizeof(int))!= cudaSuccess)
                printf("Could not allocate memory");
 cudaMalloc((void**)&dev_b, N * sizeof(int));
        cudaMalloc((void**)&dev_c, N * sizeof(int));
        for (int i = 0; i<N; i++)
        {
                a[i] = i;
                b[i] = i;
        }
        cudaMemcpy(dev_a, a, N * sizeof(int), cudaMemcpyHostToDevice);
        cudaMemcpy(dev_b, b, N * sizeof(int), cudaMemcpyHostToDevice);
        add<<<N,1>>>(dev_a, dev_b, dev_c);
        cudaMemcpy(c, dev_c, N * sizeof(int), cudaMemcpyDeviceToHost);
        for(int i =0; i<N; i++)
                printf("%d + %d = %d\n",a[i],b[i],c[i]);
        cudaFree(dev_a);
        cudaFree(dev_b);
        cudaFree(dev_c);
        return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:1)

您可以将分配逻辑更改为

cudaError_t rc = cudaMalloc((void **) &dev_a, N*sizeof(int));

if (rc != cudaSuccess)
    printf("Could not allocate memory: %d", rc);

也许返回代码可以提供更多见解。