2010-12-26 6 views
1

Je suis en train d'écrire un petit programme CUDA et j'ai les erreurs suivantes:erreur dans CUDA

contraste.cu(167): error: calling a host function from a __device__/__global__ function is not allowed 

Je ne comprends pas pourquoi. Pouvez-vous s'il vous plaît m'aider et me montrer mes erreurs. Il semble que mon programme est correct. Voici un le tas de code provoquant les problèmes:

__global__ void kernel_contraste(float power, 
    unsigned char tab_in[], 
    unsigned char tab_out[], 
    int nbl, int nbc) { 

int x = threadIdx.x; 
printf("I am the thread %d\n", x); 

} 

Une partie de mon programme principal:

unsigned char *dimg, *dimg_res; 
    ..... 

    cudaMalloc((void **)dimg, h * w * sizeof(char)); 
    cudaMemcpy(dimg, r.data, h*w*sizeof(char), cudaMemcpyHostToDevice); 

    cudaMalloc((void **)dimg_res, h*w*sizeof(char)); 
    dim3 nbThreadparBloc(256); 
    dim3 numblocs(1); 

    kernel_contraste<<<numblocs, nbThreadparBloc >>>(puissance, dimg, dimg_res, h, w); 
    cudaThreadSynchronize(); 
    ..... 


    cudaFree(dimg); 
    cudaFree(dimg_res); 

La ligne 167 est la ligne où j'appelle la fonction printf en kernel_contraste. Pour information, ce programme prend une image en entrée (un fichier Raster soleil) et une puissance puis il calcule le contraste de cette image.

Merci!

Répondre

2

Comme le message d'erreur indique que vous ne pouvez pas appeler une fonction hôte (printf dans ce cas) à partir d'une fonction du noyau qui s'exécute sur le GPU.

2

vous essayez d'appeler printf depuis le périphérique gpu. Vous devez avoir une carte Fermi pour cela ...

3

Regardez Here pour un tutoriel sur cuprintf(). Je pense que c'est ce que tu veux.