Projecte per afegir suport per al procés de compilació paral·lel a GCC

Com a part d'un projecte de recerca GCC paral·lel S'ha començat a treballar per afegir una característica a GCC que permet dividir el procés de compilació en diversos fils paral·lels. Actualment, per millorar la velocitat de construcció en sistemes multinúclis, la utilitat make utilitza el llançament de processos compiladors separats, cadascun dels quals crea un fitxer de codi independent. El nou projecte està experimentant amb proporcionar paral·lelització a nivell de compilador, que potencialment millorarà el rendiment en sistemes multi-nucli.

Per a proves preparat una branca de paral·lelització independent de GCC, que ofereix un nou paràmetre "—param=num-threads=N" per establir el nombre de fils. En l'etapa inicial, vam implementar la transferència d'optimitzacions interprocediments en fils separats, que s'anomenen cíclicament per a cada funció i es poden paral·lelitzar fàcilment. Les operacions de GIMPLE responsables d'optimitzacions independents del maquinari que avaluen la interacció de les funcions entre si es col·loquen en fils separats.

En la següent etapa, també es preveu moure les optimitzacions RTL interprocedimentals a fils separats, tenint en compte les característiques de la plataforma de maquinari. Després d'això, tenim previst implementar la paral·lelització d'optimitzacions intraprocedimentals (IPA) aplicades al codi dins de la funció, independentment de les especificitats de la trucada. L'enllaç limitant ara per ara és el garbage collector, que ha afegit un bloqueig global que desactiva les operacions de recollida d'escombraries mentre s'executa en mode multiprocés (en el futur, el garbage collector s'adaptarà per a l'execució multifils de GCC).

Per avaluar els canvis en el rendiment, s'ha preparat una suite de proves que reuneix el fitxer gimple-match.c, que inclou més de 100 mil línies de codi i 1700 funcions. Les proves en un sistema amb una CPU Intel Core i5-8250U amb 4 nuclis físics i 8 virtuals (Hyperthreading) van mostrar una disminució del temps d'execució de les optimitzacions GIMPLE intraprocedurals de 7 a 4 segons quan s'executen 2 fils i a 3 segons quan s'executen 4. fils, és a dir. Es va aconseguir un augment de la velocitat de l'etapa de muntatge en qüestió en 1.72 i 2.52 vegades, respectivament. Les proves també van demostrar que l'ús de nuclis virtuals amb Hyperthreading no augmenta el rendiment.

Projecte per afegir suport per al procés de compilació paral·lel a GCC

El temps de construcció global es va reduir aproximadament un 10%, però segons les previsions, la paral·lelització de les optimitzacions RTL permetrà aconseguir resultats més tangibles, ja que aquesta etapa requereix molt més temps durant la compilació. Aproximadament després de la paral·lelització RTL, el temps total de muntatge es reduirà en 1.61 vegades. Després d'això, serà possible reduir el temps de construcció en un altre 5-10% paral·lelitzant les optimitzacions IPA.

Projecte per afegir suport per al procés de compilació paral·lel a GCC

Font: opennet.ru

Afegeix comentari