Eu recebo um erro quando tento usar printf () em um kernel

Estou usando o Visual Studio 2010 e um GTX480 com capacidade de computação 2.0.

Eu tentei configurar sm para 2.0, mas quando eu tento usar printf () em um kernel, recebo:

erro: chamar uma função de host ("printf") de uma função __device __ / __ global__ ("test") não é permitido

Este é o meu código:

#include "util\cuPrintf.cu"
#include <cuda.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <cuda_runtime.h>

__global__ void test (void)
{
  printf("Hello, world from the device!\n");
}

void main(void)
{
    test<<<1,1>>>();
    getch();
}

Eu acho um exemplo aqui: "CUDA_C_Programming_Guide" 'página _106' "B.16.4 Exemplos", finalmente, é trabalho para mim: D obrigado.

#include "stdio.h"
#include <conio.h>

// printf() is only supported
// for devices of compute capability 2.0 and higher

  #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 200)
      #define printf(f, ...) ((void)(f, __VA_ARGS__),0)
  #endif


__global__ void helloCUDA(float f)
{
    printf("Hello thread %d, f=%f\n", threadIdx.x, f);
}

int main()
{
    helloCUDA<<<1, 5>>>(1.2345f);
    cudaDeviceSynchronize();
    getch();
    return 0;
}

questionAnswers(3)

yourAnswerToTheQuestion