Proyecto para agregar soporte para paralelización del proceso de compilación a GCC

Como parte de un proyecto de investigación CCG paralelo Se ha comenzado a trabajar para agregar una característica a GCC que permita dividir el proceso de compilación en varios subprocesos paralelos. Actualmente, para mejorar la velocidad de compilación en sistemas de múltiples núcleos, la utilidad make utiliza el lanzamiento de procesos de compilación separados, cada uno de los cuales crea un archivo de código separado. El nuevo proyecto está experimentando con la paralelización a nivel del compilador, lo que potencialmente mejorará el rendimiento en sistemas multinúcleo.

Para las pruebas preparado una rama de paralelización separada de GCC, que ofrece un nuevo parámetro “—param=num-threads=N” para establecer el número de subprocesos. En la etapa inicial, implementamos la transferencia de optimizaciones entre procedimientos a subprocesos separados, que se llaman cíclicamente para cada función y se pueden paralelizar fácilmente. Las operaciones GIMPLE responsables de optimizaciones independientes del hardware que evalúan la interacción de funciones entre sí se colocan en subprocesos separados.

En la siguiente etapa, también está previsto trasladar las optimizaciones RTL entre procedimientos a subprocesos separados, teniendo en cuenta las características de la plataforma de hardware. Después de eso, planeamos implementar la paralelización de optimizaciones intraprocedimientos (IPA) aplicadas al código dentro de la función, independientemente de los detalles de la llamada. El enlace limitante por ahora es el recolector de basura, que ha agregado un bloqueo global que deshabilita las operaciones de recolección de basura mientras se ejecuta en modo multiproceso (en el futuro, el recolector de basura se adaptará para la ejecución multiproceso de GCC).

Para evaluar los cambios en el rendimiento, se ha preparado un conjunto de pruebas que ensambla el archivo gimple-match.c, que incluye más de 100 mil líneas de código y 1700 funciones. Las pruebas en un sistema con una CPU Intel Core i5-8250U con 4 núcleos físicos y 8 virtuales (Hyperthreading) mostraron una disminución en el tiempo de ejecución de las optimizaciones intraprocedurales GIMPLE de 7 a 4 segundos cuando se ejecutan 2 subprocesos y a 3 segundos cuando se ejecutan 4. hilos, es decir Se logró un aumento en la velocidad de la etapa de montaje considerada en 1.72 y 2.52 veces, respectivamente. Las pruebas también demostraron que el uso de núcleos virtuales con Hyperthreading no aumenta el rendimiento.

Proyecto para agregar soporte para paralelización del proceso de compilación a GCC

El tiempo total de construcción se redujo en aproximadamente un 10%, pero según las previsiones, la optimización paralela de RTL permitirá lograr resultados más tangibles, ya que esta etapa requiere mucho más tiempo durante la compilación. Aproximadamente después de la paralelización RTL, el tiempo total de ensamblaje se reducirá 1.61 veces. Después de esto, será posible reducir el tiempo de construcción entre un 5 y un 10 % más al paralelizar las optimizaciones IPA.

Proyecto para agregar soporte para paralelización del proceso de compilación a GCC

Fuente: opennet.ru

Añadir un comentario