printf mit -arch = sm_20 zeigt nichts in der Kerneldatei an

Ich habe einige printf-Anweisungen in mein cuda-Programm aufgenommen

__device__ __global__ void Kernel(float *, float * ,int );
void DeviceFunc(float *temp_h , int numvar , float *temp1_h)
{ .....
    //Kernel call
    printf("calling kernel\n");
    Kernel<<<dimGrid , dimBlock>>>(a_d , b_d , numvar);
    printf("kernel called\n");
  ....
}

int main(int argc , char **argv)
{   ....
    printf("beforeDeviceFunc\n\n");
    DeviceFunc(a_h , numvar , b_h); //Showing the data
    printf("after DeviceFunc\n\n");
    ....
}

Auch in der Kernel.cu schrieb ich:

#include<cuda.h>
#include <stdio.h>
__device__ __global__ void Kernel(float *a_d , float *b_d ,int size)
{
    int idx = threadIdx.x ;
    int idy = threadIdx.y ;
    //Allocating memory in the share memory of the device
    __shared__ float temp[16][16];

    //Copying the data to the shared memory
    temp[idy][idx] = a_d[(idy * (size+1)) + idx] ;
    printf("idx=%d, idy=%d, size=%d", idx, idy, size);
    ....
}

Dann kompiliere ich mit-arch=sm_20 so was:

nvcc -c -arch sm_20 main.cu
nvcc -c -arch sm_20 Kernel.cu
nvcc -arch sm_20 main.o Kernel.o -o main

Wenn ich jetzt das Programm starte, sehe ich:

beforeDeviceFunc

calling kernel
kernel called
after DeviceFunc

Das printf im Kernel wird also nicht gedruckt. Wie kann ich das beheben?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage