Como parte de un proyecto de investigación
Para las pruebas
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.
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.
Fuente: opennet.ru