2011-11-10 14 views
6

Ti consiglia di leggere il codice PTX del tuo kernel per scoprire come ottimizzare ulteriormente i tuoi kernel?Dovrei cercare in PTX per ottimizzare il mio kernel? Se é cosi, come?

Un esempio: ho letto, che si può scoprire dal codice PTX se lo svolgimento automatico del ciclo ha funzionato. Se questo non è il caso, uno dovrebbe srotolare manualmente i loop nel codice del kernel.

  • Esistono altri casi d'uso per il codice PTX?
  • Cerchi il tuo codice PTX?
  • Dove posso trovare come essere in grado di leggere il codice PTX che CUDA genera per i miei kernel?
+2

È possibile disassemblare il codice binario. IMO dovresti guardare, per evitare di cadere in "Pensavo che ottimizzasse quel tipo di trappole e di essere in grado di vedere cosa stai facendo realmente quando stai ottimizzando un kernel. – harold

risposta

13

Il primo punto rende PTX è che è solo un intermedio rappresentazione del codice eseguito sulla GPU - un linguaggio assembly macchina virtuale. PTX viene assemblato per il codice della macchina di destinazione tramite ptxas in fase di compilazione o dal driver in fase di esecuzione. Quindi, quando stai guardando PTX, stai guardando ciò che il compilatore ha emesso, ma non su ciò che la GPU effettivamente eseguirà. È anche possibile scrivere il proprio codice PTX, sia da zero (questo è l'unico modello di compilazione JIT supportato in CUDA), sia come parte delle sezioni inline-assembler nel codice CUDA C (quest'ultimo ufficialmente supportato da CUDA 4.0, ma " ufficiosamente "supportato per molto più tempo di quello). CUDA ha sempre fornito una guida completa al linguaggio PTX con il toolkit ed è completamente documentato. Lo ocelot project ha utilizzato questa documentazione per implementare il proprio compilatore incrociato PTX, che consente di eseguire il codice CUDA in modo nativo su altro hardware, inizialmente processori x86, ma più recentemente le GPU AMD .

Se volete vedere ciò che la GPU è actualy esecuzione (al contrario di ciò che il compilatore emette), NVIDIA ora forniscono uno strumento disassemblatore binario chiamato cudaobjdump che può mostrare i segmenti di codice macchina reale in codice compilato per le GPU Fermi. C'era uno strumento vecchio e non ufficiale chiamato decuda che funzionava per le GPU G80 e G90.

Detto questo, c'è molto da imparare dall'output PTX, in particolare su come il compilatore sta applicando le ottimizzazioni e quali istruzioni sta emettendo per implementare certi contromisure C. Ogni versione del toolkit NVIDIA CUDA viene fornita con a guide to nvcc e documentation for the PTX language. Vi è abbondanza di informazioni contenute in entrambi i documenti per imparare come compilare un codice del kernel CUDA C/C++ su PTX e per capire che cosa faranno le istruzioni PTX.

Problemi correlati