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.
È 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