Ошибка новичка в CUDA - PullRequest
       5

Ошибка новичка в CUDA

1 голос
/ 26 декабря 2010

Я пишу небольшую программу на 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 - это строка, где я вызываю printf в функции kernel_contraste.

Для информации, эта программа принимает изображение в качестве входного (растровый файл солнца) и мощность, а затем вычисляет контраст этого изображения.

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 27 декабря 2010

посмотрите Здесь для обучения по cuprintf(). Я думаю, это то, что вы хотите.

2 голосов
/ 26 декабря 2010

Как говорится в сообщении об ошибке, вы не можете вызвать функцию хоста (в данном случае printf) из функции ядра, которая выполняется на графическом процессоре.

2 голосов
/ 26 декабря 2010

вы пытаетесь позвонить printf с устройства GPU.Для этого нужна карта Ферми ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...