Para deshabilitar denormals a nivel mundial que utilizan estos 2 macros:
//warning these macros has to be used in the same scope
#define MXCSR_SET_DAZ_AND_FTZ \
int oldMXCSR__ = _mm_getcsr(); /*read the old MXCSR setting */ \
int newMXCSR__ = oldMXCSR__ | 0x8040; /* set DAZ and FZ bits */ \
_mm_setcsr(newMXCSR__); /*write the new MXCSR setting to the MXCSR */
#define MXCSR_RESET_DAZ_AND_FTZ \
/*restore old MXCSR settings to turn denormals back on if they were on*/ \
_mm_setcsr(oldMXCSR__);
que llamo el primero al inicio del proceso y el segundo al final. Desafortunadamente esto parece no funcionar bien en Windows.
para limpiar denormals localmente utilizo este
const Float32 k_DENORMAL_DC = 1e-25f;
inline void FlushDenormalToZero(Float32& ioFloat)
{
ioFloat += k_DENORMAL_DC;
ioFloat -= k_DENORMAL_DC;
}
increíble - Gracias por señalarme en la dirección correcta! – Adam
También necesita establecer indicadores de compilador de Visual Studio para usar sse: "/ arch: sse2" – yairchu