爲了測試設備上的printf()調用,我編寫了一個簡單的程序,它將中等大小的數組複製到設備並將設備數組的值打印到屏幕上。雖然該陣列已正確複製到設備,但printf()函數無法正常工作,從而失去了前幾百個數字。代碼中的數組大小是4096.這是一個錯誤還是我沒有正確使用這個函數?非常感謝。在設備上調用printf()的不完全輸出
編輯:我的GPU是的GeForce GTX 550I,具有計算能力2.1
我的代碼:從所述設備
#include<stdio.h>
#include<stdlib.h>
#define N 4096
__global__ void Printcell(float *d_Array , int n){
int k = 0;
printf("\n=========== data of d_Array on device==============\n");
for(k = 0; k < n; k++){
printf("%f ", d_Array[k]);
if((k+1)%6 == 0) printf("\n");
}
printf("\n\nTotally %d elements has been printed", k);
}
int main(){
int i =0;
float Array[N] = {0}, rArray[N] = {0};
float *d_Array;
for(i=0;i<N;i++)
Array[i] = i;
cudaMalloc((void**)&d_Array, N*sizeof(float));
cudaMemcpy(d_Array, Array, N*sizeof(float), cudaMemcpyHostToDevice);
cudaDeviceSynchronize();
Printcell<<<1,1>>>(d_Array, N); //Print the device array by a kernel
cudaDeviceSynchronize();
/* Copy the device array back to host to see if it was correctly copied */
cudaMemcpy(rArray, d_Array, N*sizeof(float), cudaMemcpyDeviceToHost);
printf("\n\n");
for(i=0;i<N;i++){
printf("%f ", rArray[i]);
if((i+1)%6 == 0) printf("\n");
}
}
你可以更具體地瞭解'printf'失敗了嗎?它打印了空白還是隻打印了3996個數字?您是指主打印底部還是'PrintCell'打印? – evanmcdonnal 2013-03-14 22:49:36
對不起,我指的是Printcell中的printf。謝謝。 – Stone 2013-03-15 09:45:05