¿Cómo puedo hacer que gfortran o ifort me digan cuando implícitamente promueve un REAL(4) a un REAL(8)?
compiler-warnings fortran90 (1)
Tengo la tarea de cambiar la precisión de las partes de una aplicación HPC, teniendo en cuenta que depende mucho de la auto-vectorización. Por lo tanto, es útil que el compilador me informe cuándo se producen conversiones de cualquier tipo de conversión de punto flotante (ya que esto podría tener un grave impacto en el rendimiento).
El indicador de -Wconversion
suena como debería adaptarse a mis necesidades:
-Wconversion
Advertir sobre conversiones implícitas entre diferentes tipos.
https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gfortran/Warning-Options.html
Sin embargo, en la práctica, gfortran 5.2.0 solo parece informar degradaciones de coma flotante, por ej. REAL(8)
a REAL(4)
.
GCC tiene la -Wdouble-promotion
: exactamente lo que necesito, pero no está disponible para gfortran. ( https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html )
Estoy desarrollando con gfortran, pero ifort está disponible para mí. Sin embargo, no puedo encontrar argumentos similares para -warn
( https://software.intel.com/en-us/node/525184 ).
¿Cómo puedo hacer que alguno de estos compiladores emita una advertencia cuando promociono implícitamente un REAL?
Usted se refiere a usar gfortran 5.2.0, así que veamos la documentación para esa versión en lugar de 4.1.0. Esto tiene dos banderas relevantes para lo que usted considera:
-Wconversion
Advierta sobre las conversiones implícitas que probablemente cambien el valor de la expresión después de la conversión. Implicado por -Wall.
-Wconversion-extra
Advierta sobre conversiones implícitas entre diferentes tipos y tipos. Esta opción no implica -Wconversion.
Si utilizo este último indicador con el siguiente programa
use, intrinsic :: iso_fortran_env, only : real32, real64
real(real64) x
x = 1._real32
end
Obtengo exactamente (aunque usando gfortran 4.8.1) un mensaje de advertencia solicitado en el título de la pregunta
Advertencia: Conversión de REAL (4) a REAL (8) en (1)
mientras que con solo -Wconversion
no consigo nada. Sin embargo, si cambio ligeramente el programa para que se produzca el cambio de valores representables, recibo (diferentes) advertencias con cada uno.