optimization - instalar - Deshabilitar completamente las optimizaciones en NVCC
nvidia cuda (5)
Estoy intentando medir los fracasos de precisión simple pico en mi GPU, para eso estoy modificando un archivo PTX para realizar sucesivas instrucciones MAD en los registros. Lamentablemente, el compilador está eliminando todo el código porque, en realidad, no sirve de nada, ya que no realizo ninguna carga / almacenamiento de datos. ¿Hay un indicador de compilación o pragma que agregar al código para que el compilador no lo toque?
Gracias.
(Todavía estoy en CUDA 4.0, puede haber cambiado con la nueva versión)
Para deshabilitar las optimizaciones de ptxas
(la herramienta que convierte ptx en cubin), debe pasar una opción --opt-level 0
(por defecto es --opt-level 3
). Si desea pasar esta opción a través de nvcc
, tendrá que nvcc
un prefijo --ptxas-options
.
Sin embargo, tenga en cuenta que ptxas
ofrece muchas optimizaciones útiles que, cuando están deshabilitadas, ¡pueden hacer que su código sea incluso más lento si no es incorrecto en absoluto! Por ejemplo, registra la asignación e intenta predecir dónde se comparte y dónde está la memoria global.
No creo que haya ninguna forma de desactivar dicha optimización en el compilador. Puede solucionar esto agregando código para almacenar sus valores y envolviendo ese código en una declaración condicional que siempre es falsa. Para hacer una condición que el compilador no pueda determinar que sea siempre falsa, use al menos una variable (no solo constantes).
Para deshabilitar completamente las optimizaciones con nvcc, puede usar lo siguiente:
nvcc -O0 -Xopencc -O0 -Xptxas -O0 // sm_1x targets using Open64 frontend
nvcc -O0 -Xcicc -O0 -Xptxas -O0 // sm_2x and sm_3x targets using NVVM frontend
Tenga en cuenta que el código resultante puede ser extremadamente lento. El distintivo -O0 se pasa al compilador de host para deshabilitar la optimización del código de host. Los indicadores -Xopencc -O0 y -Xcicc -O0 controlan la interfaz del compilador (la parte que produce PTX) y desactivan las optimizaciones allí. El indicador -Xptxas -O0 controla el backend del compilador (la parte que convierte el PTX en código de máquina) y desactiva las optimizaciones en esa parte. Tenga en cuenta que los distintivos -Xopencc, -Xcicc y -Xptxas son indicadores de nivel de componente y, a menos que estén documentados en el manual nvcc, se deben considerar no admitidos.
Por lo que sé, no hay indicador de compilador o pragma para eso. pero puedes calcular más y almacenar menos
Esto funcionó para mí:
-g -G -Xcompiler -O0 -Xptxas -O0 -lineinfo -O0