2012-12-15 8 views
5

I tesla k20 mit CUDA 5.With mit Rechenkapazität 35 auf Linux verwenden ein einfaches Kind Kernel nennt es gibt einen Compiler-Fehler: Unresolved extern function cudaLaunchDevicecuda 5.0 dynamische Parallelität Fehler: ptxas fatal. ungelöst extern Funktion ‚cudaLaunchDevice

Meine Befehlszeilen wie folgt aussehen:

nvcc --compile -G -O0 -g -gencode arch=compute_35 , code=sm_35 -x cu -o fill.cu fill.o 

Ich sehe cudadevrt.a in lib64 .. Müssen wir es hinzufügen oder was getan werden, um es zu lösen? Ohne Kindkern-Aufruf funktioniert alles einwandfrei.

Antwort

11

Sie müssen explizit mit aktivierbarem Gerätecode kompilieren und die Gerätelaufzeitbibliothek verknüpfen, um dynamische Parallelität zu verwenden. Daher muss Ihr Kompilierbefehl --relocatable-device-code true enthalten und der Link Befehl (den Sie uns nicht gezeigt haben) sollte -lcudadevrt enthalten.

Dieser Vorgang wird ausführlich im Abschnitt "TOOLKIT-UNTERSTÜTZUNG FÜR DYNAMISCHEN PARALLELISMUS" des Programmierhandbuchs für die dynamische Parallelität pdf, verfügbar unter here, beschrieben.

+0

Ich habe bereits die Bibliothek in eclipse cuda nvcc Linker-Bibliotheken hinzugefügt, aber es gibt immer noch Fehler. – Zahid

+0

Nun sieht die Befehlszeile nvcc --compile -G-O0 -g -gencode arch = compute_35, code = sm_35 -x cu -o "fill.o" ../fill.cu -lcudadevrt Ich habe versucht sowohl Bibliothek Pfad und Kopieren cudadevrt lib zur Projektdatei. Standfehler vorhanden. – Zahid

+0

@Zahid: Der Befehl, den Sie schreiben, kompiliert nur Gerätecode zu einer Objektdatei. Sie müssen den Befehl -lcudadevrt zu dem Befehl hinzufügen, der die Anwendung verbindet. Hast du das PDF gelesen, mit dem ich verlinkt bin? – talonmies

5

Vielleicht bin ich etwas abseits vom Thema, aber ich möchte erwähnen, dass ich das gleiche Problem unter Windows/Visual Studio 2010 hatte und das Problem mit dem letzten Kommentar von Talonmies in wenigen Schritten gelöst habe.

1) View -> Property Pages 
2) Configuration Properties -> CUDA C/C++ -> Common -> Generate Relocatable Device Code -> Yes (-rdc=true) 
3) Configuration Properties -> CUDA C/C++ -> Device -> Code Generation -> compute_35,sm_35 
4) Configuration Properties -> Linker -> Input -> Additional Dependencies -> cudadevrt.lib 

Ich hoffe, dass diese Informationen nützlich sind.

Verwandte Themen