2011-06-08 26 views
16

Tengo un programa C++ que está haciendo un montón de matemáticas (principalmente llamadas a sin(), sqrt() y operaciones tan regulares). Sé que, en teoría, la habilitación de -msse, -msse2 y -mfpmath = sse debería exponer más registros para GCC/G ++ a fin de utilizarlos para hacer que mi programa funcione más rápido, en la práctica ¿siempre lo hará? En el peor de los casos, ¿podría hacer que mi código corra más lento?¿Permitir -msse, -msse2 y -mfpmath = sse siempre hace que mi programa se ejecute más rápido?

+1

Sólo una nota, si realmente necesita matemáticas rápido, usted debe considerar el uso de funciones optimizadas que coinciden exactamente con sus requisitos de precisión , o incluso una tabla de valores precalculada. Esto puede traer aceleraciones en órdenes de magnitud. –

Respuesta

16

Cuando le preocupa el rendimiento, siempre debe crear un perfil.

Las instrucciones de SSE usan diferentes recursos de CPU, por lo que podrían causar una disminución en el rendimiento (por ejemplo, porque esos recursos no están disponibles para Hyperthreading), pero en la vida real esto debería ser muy raro.

12

No, no siempre hará que el programa sea más rápido.

Aunque podría, realmente no esperaría mucha ralentización en casos patéticos; sin embargo, como lo menciona Ben, perfil, perfil perfil.

Tu suerte puede variar. Además, usar -march=native generalmente es mejor si está compilando en el mismo tipo de CPU que ejecutará el código.

En particular con las instrucciones SIMD, ver la alineación y la afinidad del procesador (es decir, los efectos en la localidad de caché)

+0

Es "No". una respuesta a "¿siempre hará que mi programa se ejecute más rápido?" o "¿podría hacer que mi código corra más lento?" El OP pregunta a los dos ... –

+0

Aclaración [...] – sehe

Cuestiones relacionadas