2012-03-17 12 views
8

Chociaż mam kartę Fermi (GTX 560) otrzymuję ten błąd na VS2010:CUDA 4.1 printf() Błąd

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

Kod:

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

#include <stdio.h> 

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

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

Am I brakuje czegoś tutaj?

Odpowiedz

13

Musisz się upewnić, że kompilujesz dla poprawnej architektury. Tylko karty Fermi i Kepler (w tym możliwości obliczeniowe 2.0, 2.1, 3.0 i 3.5) obsługują printf w jądrach. Jeśli skompilujesz swój kod w ten sposób:

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

kod powinien być poprawnie zbudowany. Domyślna architektura to Compute 1.0, dlatego pojawia się błąd. Jeśli używasz Visual Studio, powinieneś wybrać opcję projektu, aby wybrać docelową architekturę, chociaż nie mogę ci powiedzieć, gdzie dokładnie to znaleźć, ponieważ nie używam go z CUDA.

+2

Wielkie dzięki! W VS2010 zmieniłem projekt -> {Nazwa projektu} Właściwości-> CUDA C/C++ -> Urządzenie -> [Generowanie kodu]: compute_10, sm_10 do compute_20, sm_20 i zadziałało. – dvgvrco

+0

Dla twojej karty powinieneś prawdopodobnie używać sm_21, ale nie wiem, czy ma to wpływ na kod emitowany przez kompilator. – talonmies