我正在嘗試CUDA編程的「hello world」程序:將兩個向量加在一起。以下是我已經嘗試過的節目:編譯時無法獲得簡單的CUDA程序
#include <cuda.h>
#include <stdio.h>
#define SIZE 10
__global__ void vecAdd(float* A, float* B, float* C)
{
int i = threadIdx.x;
C[i] = A[i] + B[i];
}
int main()
{
float A[SIZE], B[SIZE], C[SIZE];
float *devPtrA, *devPtrB, *devPtrC;
size_t memsize= SIZE * sizeof(float);
for (int i=0; i< SIZE; i++) {
A[i] = i;
B[i] = i;
}
cudaMalloc(&devPtrA, memsize);
cudaMalloc(&devPtrB, memsize);
cudaMalloc(&devPtrC, memsize);
cudaMemcpy(devPtrA, A, memsize, cudaMemcpyHostToDevice);
cudaMemcpy(devPtrB, B, memsize, cudaMemcpyHostToDevice);
vecAdd<<<1, SIZE>>>(devPtrA, devPtrB, devPtrC);
cudaMemcpy(C, devPtrC, memsize, cudaMemcpyDeviceToHost);
for (int i=0; i<SIZE; i++)
printf("C[%d]: %f + %f => %f\n",i,A[i],B[i],C[i]);
cudaFree(devPtrA);
cudaFree(devPtrB);
cudaFree(devPtrC);
}
:
nvcc cuda.cu
輸出是這樣的:
C[0]: 0.000000 + 0.000000 => 0.000000
C[1]: 1.000000 + 1.000000 => 0.000000
C[2]: 2.000000 + 2.000000 => 0.000000
C[3]: 3.000000 + 3.000000 => 0.000000
C[4]: 4.000000 + 4.000000 => 0.000000
C[5]: 5.000000 + 5.000000 => 0.000000
C[6]: 6.000000 + 6.000000 => 0.000000
C[7]: 7.000000 + 7.000000 => 0.000000
C[8]: 8.000000 + 8.000000 => 366987238703104.000000
C[9]: 9.000000 + 9.000000 => 0.000000
我每次運行它,我得到了C [8不同的答案],但所有其他元素的結果始終爲0.000000。
Ubuntu 11.04系統是一款運行最新NVIDIA驅動程序的4核64位Xeon服務器(2012年10月4日下載)。該卡是EVGA GeForce GT 430,具有96個內核和1GB的RAM。
我該怎麼做才能弄清楚發生了什麼事?
你從[這裏]安裝CUDA軟件開發包(http://developer.nvidia.com/cuda/cuda-downloads)? (不是工具箱) – none
我的猜測是CUDA無法初始化。我建議爲每個CUDA API調用添加錯誤檢查。 – njuffa
@gokcehan我從該網站下載了驅動程序,工具包和SDK。不過,我不確定如何處理SDK。它似乎主要包含文檔和示例代碼。 –