2011-07-30 7 views
5

¿Cuáles son las mejores configuraciones para cosas como MXCSR? ¿Qué modo de redondeo es el más rápido? ¿En qué procesadores? ¿Es más rápido habilitar los NaN de señalización para que me informe cuando un cálculo da como resultado un nan, o esto causa ralentizaciones en los cálculos que no son de NaN?¿Cómo se obtiene la máxima velocidad de SSE?

En resumen, ¿cómo se obtiene la máxima velocidad de los bucles SSE internos?

Cualquier consejo relacionado de velocidad de coma flotante x87 también es bienvenido.

Respuesta

6

Utilice los modos de enrasamiento a cero y desordenados son cero: están destinados a la velocidad con un costo de precisión que probablemente no notará.

Dudo que los diferentes modos de redondeo tengan costos diferentes. Redondear a lo más cercano es lo más difícil en teoría, pero en una implementación de hardware, supongo que los transistores adicionales para hacerlo en el mismo número de ciclos probablemente estén allí de todos modos, y simplemente no se utilizan para el redondeo dirigido.

Los NaN de señalización no ralentizan los cálculos que no son de NaN.

Establezca la palabra de banderas de control solo una vez antes de su cálculo: cambiarla durante el cálculo reducirá el ahorro que logre.

+0

Gracias por el asesoramiento. FTZ hizo una buena diferencia en la velocidad. – FeepingCreature

+1

Los denormales también son una punta dorada (aún más importante, en mi opinión). Los denormales pueden ser hasta 20-50 veces más lentos si tiene mala suerte. – Damon

+3

@Damon "Flush-to-zero" y "denormals-are-zero" son ambos modos de cálculo relacionados con el tratamiento de los denormales (flush-to-zero transforma un denormal que es el ** resultado ** de una operación en cero , mientras que denormals-are-zero convierte denormales que son ** argumentos ** de una operación en cero antes de aplicar la operación). Usar solo uno de estos indicadores es generalmente suficiente para evitar la ruta lenta de los denormales, sugerí que ambos no conocieran los detalles del algoritmo del OP. –

3

Si es probable que el cálculo encuentre valores débiles, y la precisión de los valores muy pequeños no es importante para su cálculo, entonces active FZ y DAZ (una vez, al comienzo de su cálculo, no toque el MXCSR más de lo necesario). No harán ninguna diferencia si su cálculo no involucra valores denormales, pero si lo hace, la diferencia puede ser bastante significativa.

Ninguno de los otros bits MXCSR tiene ningún efecto en el rendimiento en absoluto.

El único consejo de rendimiento relacionado con x87 es: no utilice la unidad x87. Haga sus cálculos en SSE siempre que sea posible.

Cuestiones relacionadas