2010-09-15 4 views
6

Ho un progetto CUDA. Consiste di diversi file .cpp che contengono la logica della mia applicazione e un file .cu che contiene più kernel e una funzione __host__ che li richiama.nvcc -Xptxas -v flag del compilatore non ha effetto

Ora vorrei determinare il numero di registri utilizzati dai miei kernel. La mia normale chiamata del compilatore si presenta così:

nvcc -arch compute_20 -link src/kernel.cu obj/..obj obj/..obj .. -o bin/..exe -l glew32 ...

L'aggiunta del flag del compilatore "-Xptxas -v" a questa chiamata purtroppo non ha alcun effetto. Il compilatore produce ancora lo stesso output testuale di prima. Anche l'exe compilato funziona allo stesso modo di prima con un'eccezione: il mio framerate salta a 1800fps, da 80fps in su.

risposta

-1

Non è esattamente quello che stavamo cercando, ma è possibile utilizzare il profiler visivo CUDA fornito con l'SDK di NVIDIA GPU Computing. Oltre a molte altre informazioni utili, mostra il numero di registri utilizzati da ciascun kernel nell'applicazione.

+0

questo non può essere corretto perché non risponde alla domanda .. Se si desidera solo un modo per contare i registri, quindi modificare la domanda. – jmilloy

+0

@jimilloy "Ora vorrei determinare il numero di registri usati dai miei kernel" –

2

quando si compila

nvcc --ptxas-options=-v

+0

non funziona neanche. Ho provato tutte le varie notazioni per quella bandiera che può essere trovata su Internet. –

+0

@Dav provare a rimuovere l'opzione di collegamento e compilare solo – Anycorn

+0

carpa In questo caso il compilatore si lamenta di simboli esterni indefiniti. –

8

Ho avuto lo stesso problema, qui è la mia soluzione:

  1. Compilare i file * CU nel dispositivo solo file * PTX, questo scarterà di codice host

    nvcc -ptx *.cu

  2. Compile * file ptx:

    ptxas -v *.ptx

Il secondo passaggio mostrerà il numero di registri utilizzati dal kernel e la quantità di memoria condivisa utilizzata.

+0

+1: eccellente - grazie - ha funzionato per me! –

1

Si potrebbe desiderare di ctrl i valori predefiniti di opzione dettagliata del compilatore.

Ad esempio VStudio goto: Strumenti-> Opzioni-> ProjectsAndSolutions-> BuildAndRun quindi impostare l'output di verbosità su Normale.

1

Quando si utilizza "-Xptxas -v", "-arch" insieme, non è possibile ottenere informazioni dettagliate (numero di registro, ecc.). Se vogliamo vedere il verbose senza perdere la possibilità di assegnare l'architettura GPU (-arch, -code), possiamo fare i seguenti passi: nvcc -arch compute_XX *.cu -keep quindi ptxas -v *.ptx. Ma otterremo molti file di elaborazione. Certamente, la risposta di kogut è al punto.

2

Convertire il compute_20 in sm_20 nella chiamata del compilatore. Questo dovrebbe risolverlo.

+0

Questa è la risposta giusta effettiva. Funziona. – markhor