Resumen: Quiero aprovechar las optimizaciones del compilador y los conjuntos de instrucciones del procesador, pero todavía tengo una aplicación portátil (que se ejecuta en diferentes procesadores). Normalmente podría compilar 5 veces y dejar que el usuario elija el correcto para ejecutar.Compilar y optimizar para diferentes arquitecturas de destino
Mi pregunta es: ¿cómo puedo automatizar esto, para que el procesador se detecte en tiempo de ejecución y se ejecute el ejecutable correcto sin que el usuario tenga que elegirlo?
Tengo una aplicación con muchos cálculos matemáticos de bajo nivel. Estos cálculos generalmente se ejecutarán durante un tiempo prolongado.
Me gustaría aprovechar la mayor optimización posible, preferiblemente también de conjuntos de instrucciones (no siempre compatibles). Por otro lado, me gustaría que mi aplicación sea portátil y fácil de usar (por lo que no me gustaría compilar 5 versiones diferentes y dejar que el usuario elija).
¿Existe la posibilidad de compilar 5 versiones diferentes de mi código y ejecutar dinámicamente la versión más optimizada que sea posible en el momento de la ejecución? Me refiero a 5 versiones diferentes con diferentes conjuntos de instrucciones y diferentes optimizaciones para procesadores.
No me importa el tamaño de la aplicación.
En este momento estoy usando gcc en Linux (mi código está en C++), pero también estoy interesado en esto para el compilador de Intel y para el compilador MinGW para la compilación a Windows.
El ejecutable no tiene que poder ejecutarse en diferentes OS'es, pero lo ideal sería que haya algo posible con la selección automática de 32 bits y 64 bits también.
Editar: Proporcione indicadores claros sobre cómo hacerlo, preferiblemente con ejemplos de código pequeño o enlaces a explicaciones. Desde mi punto de vista, necesito una solución súper genérica, aplicable en cualquier proyecto aleatorio de C++ que tenga más adelante.
Editar Asigné la recompensa a ShuggyCoUk, tenía una gran cantidad de consejos para tener en cuenta. Me hubiera gustado dividirlo entre varias respuestas, pero eso no es posible. No estoy implementando esto todavía, ¡entonces la pregunta todavía está 'abierta'! Por favor, aún agregue y/o mejore las respuestas, aunque ya no se otorgue ninguna recompensa.
¡Gracias a todos!
¿No es esto lo que Apple hace con sus binarios "universales" (PPC - x86)? – Edmundo
Me aseguré de haber hecho +1 en todas las respuestas que creía que eran buenas, y que todas obtuvieron un poco de mí :). Saludos por la aceptación. – ShuggyCoUk
Ah, y si encuentra más información a medida que avanza, edite mi respuesta y conviértala en CW ... – ShuggyCoUk