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?
Respuesta
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.
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é)
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 ... –
Aclaración [...] – sehe
- 1. ¿Cuál es la diferencia entre las opciones de cflgs sse de -msse, -msse2, -mssse3, -msse4 rtc ..? y cómo determinarlo?
- 2. ¿Puedo modificar un entorno Win7 para permitir que un programa .Net se ejecute siempre como administrador?
- 3. ¿Cómo se hace Python/PostgreSQL más rápido?
- 4. ¿Por qué este programa OCaml es más rápido que mi programa C?
- 5. SSE más lento que FPU?
- 6. ¿Por qué agregar un bloque try hace que el programa sea más rápido?
- 7. ¿Por qué mi programa se ejecuta mucho más rápido cuando habilito la creación de perfiles?
- 8. ¿Es O (log n) siempre más rápido que O (n)
- 9. ¿Cómo puedo hacer que mi servidor TCP se ejecute para siempre?
- 10. ¿Se puede requerir que Firebug ejecute mi sitio web?
- 11. ¿Es + = más rápido que - =?
- 12. ¿Cómo forzar a que mi programa C# Winforms se ejecute como administrador en cualquier computadora?
- 13. Java hace que javax.swing.Timer se ejecute en un nuevo hilo?
- 14. Más rápido que String.Replace()
- 15. Hacer mi List.filter más rápido en Scala?
- 16. ¿Cómo es "mi" más rápido que "local" en Perl?
- 17. ¿Cómo evitar que un programa Linux se ejecute más de una vez?
- 18. funcionalidad glibc y SSE
- 19. evitar que una aplicación C# ejecute más de una instancia
- 20. removeFromSuperview hace que mi aplicación se bloquee
- 21. ¿Qué hace que STL sea rápido?
- 22. Cómo hacer que mi aplicación copie el archivo más rápido
- 23. Algo más rápido que HttpHandlers?
- 24. ¿Por qué mi programa C++ Builder es mucho más pequeño que mi programa Delphi?
- 25. ¿Normalización de SSE más lenta que la aproximación simple?
- 26. OpenMP num_hilos (1) se ejecuta más rápido que ningún OpenMP
- 27. hace que la condición después de && siempre se evalúe
- 28. ¿Cómo hacer que mi archivo MAKE se compile y ejecute correctamente?
- 29. ¿Qué hace que VxWorks sea tan determinista y rápido?
- 30. El programa SSE tarda mucho más tiempo en AMD que en Intel
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. –