CUDA中的初学者错误

时间:2010-12-26 19:42:18

标签: c cuda

我正在CUDA写一个小程序,我有以下错误:

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

我不明白为什么。你能帮帮我,告诉我我的错误。看来我的程序是正确的。以下是导致问题的一堆代码:

 __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);

}

我的主要计划的一部分:

 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);

第167行是我在函数kernel_contraste中调用printf的行。

有关信息,此程序将图像作为输入(太阳光栅文件)和电源,然后计算该图像的对比度。

谢谢!

3 个答案:

答案 0 :(得分:3)

查看Here了解cuprintf()上的教程。我想是你想要的。

答案 1 :(得分:2)

您正尝试从gpu设备调用printf。你必须有费米卡这样做......

答案 2 :(得分:2)

正如错误消息所示,您无法从GPU上运行的内核函数调用主机函数(在本例中为printf)。