2012-12-15 19 views
5

Używam Tesli K20 z funkcją obliczeniowej 35 na Linuksie z CUDA 5.With proste jądro potomne nazwać daje błąd kompilacji: Unresolved extern function cudaLaunchDevicecuda 5.0 błąd równoległości dynamicznej: ptxas fatal. nierozwiązane funkcja extern „cudaLaunchDevice

Mój wiersz polecenia wygląda tak:

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

Widzę cudadevrt.a w lib64 .. Czy musimy go dodać lub co należy zrobić, aby go rozwiązać? Bez wywołania jądra potomnego wszystko działa poprawnie.

Odpowiedz

11

Należy jawnie skompilować z włączonym relokowalnym kodem urządzenia i połączyć bibliotekę środowiska wykonawczego urządzenia, aby użyć dynamicznego paralelizmu. Tak więc komenda kompilacji musi zawierać --relocatable-device-code true i komendę 2 (która nie została nam pokazana) powinna zawierać -lcudadevrt.

Ta procedura jest opisana szczegółowo w części "WSPARCIE NARZĘDZI DLA DYNAMICZNEGO PARALLELIZMU" w przewodniku programowania dynamicznego paralelizmu pdf, dostępnym pod adresem here.

+0

Już dodałem bibliotekę w bibliotekach eclipse cuda nvcc linker, ale wciąż daje błąd. – Zahid

+0

Teraz linia poleceń wygląda nvcc --compile -G -O0 -g -gencode arch = compute_35, code = sm_35 -x cu -o "fill.o" ../fill.cu -lcudadevrt Próbowałem zarówno ścieżki biblioteki, jak i kopiowania cudadevrt lib do pliku projektu. nadal występuje błąd. – Zahid

+0

@Zahid: Polecenie, które piszesz, kompiluje kod urządzenia tylko do pliku obiektowego. Musisz dodać -lcudadevrt do polecenia, które łączy aplikację. Czy przeczytałeś plik pdf, do którego się przyłączyłem? – talonmies

5

Być może jestem nieco nie na temat, ale chciałbym wspomnieć, że miałem ten sam problem w systemie Windows/Visual Studio 2010 i rozwiązałem problem, używając ostatniego komentarza autorstwa talonmies w kilku krokach.

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 

Mam nadzieję, że te informacje są przydatne.