2013-10-10 14 views
7

Sto eseguendo la programmazione del parallelismo dinamico utilizzando CUDA 5.5 e una NVDIA GeForce GTX 780 con capacità di calcolo pari a 3,5. Sto chiamando una funzione del kernel all'interno di una funzione del kernel, ma mi sta dando un errore:Impossibile compilare il codice che contiene il parallelismo dinamico

error : calling a __global__ function("kernel_6") from a __global__ function("kernel_5") is only allowed on the compute_35 architecture or above

Che cosa sto facendo di sbagliato?

risposta

3

È necessario consentire a nvcc di generare codice CC 3.5 per il dispositivo. Questo può essere fatto aggiungendo questa opzione alla linea di comando nvcc.

-gencode arch=compute_35,code=sm_35 

È possibile trovare i campioni CUDA sul parallelismo dinamico per ulteriori dettagli. Contengono sia le opzioni della riga di comando che le impostazioni del progetto per tutti i sistemi operativi supportati.

http://docs.nvidia.com/cuda/cuda-samples/index.html#simple-quicksort--cuda-dynamic-parallelism-

+5

Per utilizzare il parallelismo dinamico '-device-codice --relocatable = true' o corto' -rdc' è anche necessario. Inoltre, per evitare ulteriori errori, non dimenticare di collegarti alla libreria cudadevrt. –

11

si può fare qualcosa di simile

nvcc -arch=sm_35 -rdc=true simple1.cu -o simple1 -lcudadevrt 

o

Se si dispone di 2 file simple1.cu e test.c allora si può fare qualcosa, come di seguito. Questa è chiamata compilazione separata.

nvcc -arch=sm_35 -dc simple1.cu 
nvcc -arch=sm_35 -dlink simple1.o -o link.o -lcudadevrt 
g++ -c test.c 
g++ link.o simple1.o test.o -o simple -L/usr/local/cuda/lib64/ -lcudart 

Lo stesso è spiegato nel cuda programming guide

+0

Ciao grazie per la risposta Lo sto facendo ma ricevendo questo errore errore fatale: nvcc supporta '--relocatable-device-code = true (-rdc = true)', '--device-c (-dc)', e '--device-link (-dlink)' solo quando il targeting sm_20 o superiore – user2865500

+0

Puoi allegare cosa stai facendo esattamente? programma semplice e il comando che stai eseguendo? Perché ho appena provato il comando sopra per un semplice programma [qui] (http://pastebin.com/3Z2aGa4F) –

+0

E non aggiungere i tuoi commenti come risposta per favore .. –

5

Da Visual Studio 2010:

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 
+0

Sono molto grato per il tuo aiuto .. Ho fatto questo ora sto ricevendo questo errore. Per favore non essere irrecuperabile ... nvcc: errore fatale: nvcc supporta '--relocatable-device-code = true (-rdc = true) ',' --device-c (-dc) 'e' --device-link (-dlink) 'solo quando il targeting sm_20 o superiore – user2865500

+0

Assicurati di aver completato correttamente il passaggio 3. Sei in grado di compilare correttamente l'esempio CUDA di cdpLUDecomposition? Usa il parallelismo dinamico per calcolare la decomposizione LU. – JackOLantern

+0

Sì signore. costruisco l'esempio CUDA di cdpLUDeomposition. Non dà alcun errore. Ma mi dà questo Native 'è uscito con il codice 0 (0x0). Ho eseguito tutti i passaggi correttamente. – user2865500

Problemi correlati