printf() и работа kernel'a

Господа, никто не сталкивался с такими граблями:

На хосте идёт цикл, на каждой итерации на gpu запускается процесс, читается результат его работы и выводится функцией printf() на экран. Так вот, высь вывод на экране появляется только после завершения этого цикла. Может кто знает в чём тут может быть дело?

Forums: 

Приведи пример кода. По

Приведи пример кода. По твоему описанию непонятно что именно ты делаешь и как.
Первая мысль: использовать flush для гаррантия сброса буфера STDOUT.

Вот код. Код ядра не привожу

Вот код. Код ядра не привожу ввиду его монструозности

  1. do
  2. {
  3.         epoch++;
  4.         // работа на видеокарте
  5.         getGradient_singleBlock<<<blocks, threadsByNeuron>>>(devArgs);
  6.         optimize_singleBlock<<<blocks, threadsByNeuron>>>(devArgs);
  7.         calcError_singleBlock<<<blocks, threadsByNeuron>>>(devArgs);
  8.  
  9.         // проверка результатов
  10.         cudaMemcpy(&args, devArgs, sizeof(CudaCGF_Args), cudaMemcpyDeviceToHost);
  11.         if (args.error < cgf->target)
  12.                 break;
  13.  
  14.         // вывод на экран
  15.         if (cgf->trace && ((epoch % cgf->traceFrequency == 0) || epoch == 1))
  16.                 printf("Epoch %i. Error = %f \n", epoch, args.error);
  17. }
  18. while (epoch < cgf->epochLimit);

Вывод инфы идёт каждую эпоху, но на экране оно появляется только после завершения цикла

Вот сразу после

Вот сразу после
printf("Epoch %i. Error = %f \n", epoch, args.error);
воткни
flush();

хмм... прописал

хмм... прописал fflush(stdout), не помогло.
Это может быть как-то связано с запуском вычислений на видяхе?
Аналогичная функция, но считающая задачу на CPU, выводит на экран инфу нормально.