A la hora de compilar, podemos utilizar un conjunto de opciones para optimizar el código que se genera. Estas optimizaciones pueden influir en factores como la velocidad de ejecución o en el tamaño del programa, así como en el uso de instrucciones específicas de un tipo concreto de procesador. Se pueden clasificar en dos grupos: optimizaciones genéricas, que se pueden aplicar a cualquier procesador, y optimizaciones específicas para un tipo de arquitectura.
Optimizaciones Generales
Estas optimizaciones intentan generar código que se ejecutará más rápido y no son específicos a ninguna arquitectura o modelo de procesador concreto. La mayoría de los compiladores las soportan y son las siguientes:
Optimizaciones específicas para una arquitectura
Cada generación de procesadores, además de cambios en su microarquitectura, pueden aportar nuevas características, como por ejemplo nuevas instrucciones disponibles. Las instrucciones vectoriales MMX, SSE y AVX permiten acelerar la ejecución de los programas realizando a la vez la misma operación aritmética sobre múltiples operandos, lo que se conoce como SIMD Single Instruction Multiple Data. Para aprovechar esta ventaja es necesario indicarle al compilador que haga uso de esas instrucciones al generar el programa, pero teniendo en cuenta que dicho programa solo podrá ser ejecutado en un procesador que las soporte.
En la siguiente tabla se recogen las diferentes familias de procesadores que conforman PROTEUS, el tipo de instrucciones vectoriales que soporta y sus principales características: