2012-03-17 7 views
8

pesar de que tengo una tarjeta de Fermi (GTX 560) me sale este error en VS2010:CUDA 4.1 printf() Error

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

Código:

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

#include <stdio.h> 

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

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

Me estoy perdiendo algo aquí?

Respuesta

13

Debe asegurarse de estar compilando para la arquitectura correcta. Solo las tarjetas Fermi y Kepler (por lo que los dispositivos con capacidades de cálculo 2.0, 2.1, 3.0 y 3.5) son compatibles con printf en kernels. Si compila su código de esta manera:

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

el código debería compilarse correctamente. La arquitectura predeterminada es computar 1.0, que es la razón por la que está obteniendo el error. Si usa Visual Studio, debe haber una opción de proyecto para seleccionar la arquitectura de destino, aunque no puedo decirle con precisión dónde encontrar eso ya que no lo uso con CUDA.

+2

¡Muchas gracias! En VS2010 cambié Project -> {Project Name} Properties -> CUDA C/C++ -> Device -> [Code Generation]: compute_10, sm_10 para compute_20, sm_20 y funcionó. – dvgvrco

+0

Para su tarjeta, probablemente debería usar sm_21, pero no sé si hace mucha diferencia para el código emitido por el compilador. – talonmies

Cuestiones relacionadas