这是我的第一个(剽窃)CUDA程序;CUDA程序输出错误
__global__ void vecAdd(float* A, float* B, float* C)
{
int i = threadIdx.x;
A[i]=0;
B[i]=i;
C[i] = A[i] + B[i];
}
#include <stdio.h>
#define SIZE 10
int main()
{
int N=SIZE;
float A[SIZE], B[SIZE], C[SIZE];
float *devPtrA;
float *devPtrB;
float *devPtrC;
int memsize= SIZE * sizeof(float);
cudaMalloc((void**)&devPtrA, memsize);
cudaMalloc((void**)&devPtrB, memsize);
cudaMalloc((void**)&devPtrC, memsize);
cudaMemcpy(devPtrA, A, memsize, cudaMemcpyHostToDevice);
cudaMemcpy(devPtrB, B, memsize, cudaMemcpyHostToDevice);
vecAdd<<<1, N>>>(devPtrA, devPtrB, devPtrC);
cudaMemcpy(C, devPtrC, memsize, cudaMemcpyDeviceToHost);
for (int i=0; i<SIZE; i++)
printf("C[%d]=%f B[%d]=%f\n",i,C[i],i,B[i]);
cudaFree(devPtrA);
cudaFree(devPtrA);
cudaFree(devPtrA);
}
这里是输出:
埃林@ ubuntu的:〜$ NVCC -lcudart vecadd.cu
埃林@ ubuntu的:〜$ ./a.out
C [0 ] = 0.000000 B [0] = 0.000000
C [1] = 0.000000 B [1] = 0.000000
C [2] = - 0.344699 B [2] = 0.000000
C [3] = 0.000000 B [3] = 0.000000
C [4] = - 0.344700 B [4] = 0.000000
C [5] = 0.000000 B [5] = 0.000000
C [6] = 0.000000 B [6] = 0.000000
C [7] = 0.000000 B [7] = 0.000000
C [8] = 0.000000 B [8] = - 0.344690
C [9] = 0.000000 B [9] = 0.000000 erin @ ubuntu:〜$
这是在Pathetic Panda(?)12.04的Ubuntu 64位上。
感谢您的帮助!
真诚,
艾琳
预期的输出应打印的价值i
为B[i]
和C[i]
。
你的问题到底是什么? (提示“帮助我的程序无法正常工作”对于堆栈溢出并不是真正有效的问题)。 CUDA API具有非常全面的错误检查功能,您可以从检查所有API调用的返回值开始,查看是否有任何错误,然后将它们添加到您的问题中。您可以提供有关您的问题的更多信息,这里的某个人可能会帮助您。 – talonmies 2012-07-23 05:52:59
我正在看它,我没有看到问题,但是当我试图编译它时,我得到了同样的错误输出。 – CygnusX1 2012-07-23 08:51:23