CUDA 4.1 printf () Ошибка - PullRequest
       6

CUDA 4.1 printf () Ошибка

8 голосов
/ 17 марта 2012

Даже при том, что у меня есть карта ферми (GTX 560), я получаю эту ошибку на VS2010:

error : calling a host function("printf") from a __device__/__global__ function("kernel") is not allowed

Код:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>

__global__ void kernel()
{
  printf("hello");
}

int main()
{
  kernel<<<1, 1>>>();
  return 0;
}

Я что-то здесь упускаю?

1 Ответ

13 голосов
/ 17 марта 2012

Вы должны убедиться, что вы компилируете для правильной архитектуры.Только карты Fermi и Kepler (так что вычислительные возможности устройств 2.0, 2.1, 3.0 и 3.5) поддерживают printf в ядрах.Если вы скомпилируете свой код так:

nvcc -arch=sm_21 [other options] .....

, код должен скомпилироваться правильно.Архитектура по умолчанию - compute 1.0, поэтому вы получаете ошибку.Если вы используете Visual studio, должна быть опция проекта для выбора целевой архитектуры, хотя я не могу точно сказать вам, где ее найти, поскольку не использую ее с CUDA.

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