2011-11-10 15 views
6

¿Le recomendamos leer el código PTX de su kernel para saber más sobre cómo optimizar sus kernels?¿Debería consultar PTX para optimizar mi kernel? ¿Si es así, cómo?

Un ejemplo: he leído que se puede averiguar por el código PTX si funcionó el bucle automático. Si este no es el caso, uno tendría que desenrollar los bucles manualmente en el código del kernel.

  • ¿Hay otros casos de uso para el código PTX?
  • ¿Miras tu código PTX?
  • ¿Dónde puedo encontrar información sobre cómo leer el código PTX que genera CUDA para mis kernels?
+2

Puede desmontar el código binario. Debería mirar la IMO, para evitar caer en el tipo de trampas "creo que optimizaría" y poder ver lo que realmente está haciendo cuando está optimizando un kernel. – harold

Respuesta

13

El primer punto a hacer sobre PTX es que es sólo un intermedio representación del código ejecutarse en la GPU - un lenguaje de montaje de la máquina virtual. PTX se ensambla al código de máquina de destino ya sea por ptxas en tiempo de compilación o por el controlador en tiempo de ejecución. Entonces, cuando mira PTX, está viendo lo que emitió el compilador, pero no lo que realmente ejecutará la GPU. También es posible escribir su propio código PTX, ya sea desde cero (este es el único modelo de compilación JIT admitido en CUDA), o como parte de secciones de ensamblador en línea en código CUDA C (este último oficialmente soportado desde CUDA 4.0, pero " extraoficialmente "apoyado por mucho más tiempo que eso". CUDA siempre ha enviado una guía completa del lenguaje PTX con el kit de herramientas, y está completamente documentado. El ocelot project ha utilizado esta documentación para implementar su propio compilador cruzado PTX, que permite que el código CUDA se ejecute de forma nativa en otro hardware, inicialmente procesadores x86, pero más recientemente GPU AMD.

Si quiere ver qué es la GPU actualmente en ejecución (opuesta a lo que está emitiendo el compilador), NVIDIA ahora proporciona una herramienta de desensamblador binario llamada cudaobjdump que puede mostrar los segmentos reales de código de máquina compilados para las GPU de Fermi. Había una herramienta más antigua y no oficial llamada decuda que funcionaba para las GPU G80 y G90.

Habiendo dicho eso, hay mucho que aprender de la salida de PTX, particularmente sobre cómo el compilador está aplicando optimizaciones y qué instrucciones está emitiendo para implementar ciertas contrucciones de C. Cada versión del juego de herramientas NVIDIA CUDA viene con a guide to nvcc y documentation for the PTX language. Hay una gran cantidad de información contenida en ambos documentos para aprender cómo compilar un código del kernel CUDA C/C++ para PTX, y para entender qué harán las instrucciones PTX.

Cuestiones relacionadas