這是我的第一個(剽竊)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