2012-03-17 1 views
8

Anche se ho una scheda Fermi (GTX 560) ottengo questo errore su VS2010:CUDA 4.1 printf() Errore

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

Codice:

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

#include <stdio.h> 

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

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

mi manca qualcosa qui?

risposta

13

È necessario assicurarsi che si stia compilando per l'architettura corretta. Solo le schede Fermi e Kepler (quindi i dispositivi di capacità 2.0, 2.1, 3.0 e 3.5) supportano printf nei kernel. Se si compila il codice in questo modo:

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

il codice deve essere compilato correttamente. L'architettura predefinita è calcolata 1.0, motivo per cui si sta verificando l'errore. Se usi Visual Studio, dovrebbe esserci un'opzione di progetto per selezionare l'architettura di destinazione, anche se non posso dirti esattamente dove trovarlo, poiché non lo uso con CUDA.

+2

Grazie mille! In VS2010 ho cambiato Project -> {Project Name} Properties-> CUDA C/C++ -> Device -> [Code Generation]: compute_10, sm_10 per compute_20, sm_20 e ha funzionato. – dvgvrco

+0

Per la tua scheda, dovresti probabilmente usare sm_21, ma non so se faccia molta differenza al codice emesso dal compilatore. – talonmies