对于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;
}
答案 0 :(得分:1)
您可以将分配逻辑更改为
cudaError_t rc = cudaMalloc((void **) &dev_a, N*sizeof(int));
if (rc != cudaSuccess)
printf("Could not allocate memory: %d", rc);
也许返回代码可以提供更多见解。