Compilar en modo 'turbo'

Como todos sabemos, Xailer realiza el proceso de compilación y enlazado del programa en un segundo hilo de ejecución, para no bloquear al hilo principal y que pueda responder inmediatamente a cualquier mensaje.

Por otro lado, llevamos algún tiempo en el que casi todos los ordenadores nuevos tienen microprocesadores de dos o cuatro núcleos, es decir, el equivalente a dos o cuatro microprocesadores funcionando en paralelo.

Si unimos estos dos hechos, es fácil llegar a pensar que podríamos intentar utilizar esos núcleos adicionales del procesador para compilar varios módulos simultáneamente, y ganar así en velocidad. Pues esto es lo que hemos hecho, y francamente, nosotros mismos estamos sorprendidos de los excelentes resultados.

Se ha añadido, para la versión 2.0 alpha, una opción en la configuración para indicar cuántos procesos simultáneos queremos utilizar para compilar, entre 1 y 8. Lo lógico es que cuantos más núcleos tenga el procesador más ganaremos en velocidad, y es completamente cierto. Pero es que incluso la anterior generación de procesadores, los que tienen tecnología ‘Hyper Threading‘ también se ven beneficiados muy notablemente.

Para que veáis la magnitud de la mejora, hemos hecho pruebas con un par de proyectos reales. Aquí están las gráficas de los resultados:

grafico1.png

Esta gráfica no pretende comparar los procesadores entre sí, sino cuanta mejora se obtiene al aumentar el número de procesos simultáneos de compilación para cada tipo de procesador.

En resumen, para procesadores antiguos de un solo núcleo y sin tecnología HT, la mejora es insignificante. Pero con procesadores con tecnología HT, la mejora es muy notable, reduciéndose el tiempo de compilación hasta un poco más de la mitad. Y por último, los procesadores multinúcleo son los grandes beneficiados, donde el tiempo de compilación se ha reducido a menos de la cuarta parte, o dicho de otra forma, la velocidad de compilación se ha disparado a más de 4x.

Aquí está el resultado con otro proyecto:

grafico2.png

Como se puede apreciar, los resultados son muy parecidos en cuanto a la mejora obtenida, aún cuando el proyecto en sí tiene casi el doble de módulos y tarda lógicamente casi el doble de tiempo en compilar.

Todas estas pruebas las hemos hecho sobre procesadores Intel, porque son los que teníamos a mano, pero cabe esperar que el resultado con procesadores AMD sea también similar.

Y por último, hemos aplicado esta misma técnica en XEdit, que es el que habitualmente utilizamos para compilar las librerías de Xailer y el propio IDE. Sirva como ejemplo el caso de xailer.lib, en un Core 2 Quad 2.66 GHz, que se ha pasado de 4 minutos y 40 segundos a tan sólo 59 segundos, es decir, tan sólo un 21% del tiempo anterior.