デバイスで printf() 呼び出しをテストする目的で、適度なサイズの配列をデバイスにコピーし、デバイス配列の値を画面に出力する簡単なプログラムを作成しました。配列はデバイスに正しくコピーされますが、printf() 関数が正しく機能せず、最初の数百の数値が失われます。コードの配列サイズは 4096 です。これはバグですか、それともこの関数を正しく使用していませんか? 事前に感謝します。
編集: 私の 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");
}
}