Proiect pentru adăugarea suportului pentru paralelizarea procesului de compilare la GCC

Ca parte a unui proiect de cercetare GCC paralel Au început lucrările pentru adăugarea unei caracteristici la GCC care permite ca procesul de compilare să fie împărțit în mai multe fire paralele. În prezent, pentru a crește viteza de construire pe sistemele multi-core, utilitarul make folosește lansarea de procese de compilare separate, fiecare dintre acestea construind un fișier de cod separat. Noul proiect experimentează furnizarea de paralelizare la nivel de compilator, ceea ce va îmbunătăți potențial performanța pe sistemele multi-core.

Pentru testare pregătit o ramură de paralelizare separată a GCC, care oferă un nou parametru „—param=num-threads=N” pentru a seta numărul de fire. La etapa inițială, optimizările interprocedurale au fost mutate în fire separate, care erau numite ciclic pentru fiecare funcție și puteau fi ușor paralelizate. Operațiunile GIMPLE responsabile de optimizări independente de hardware care evaluează interacțiunea funcțiilor între ele sunt plasate în fire separate.

În următoarea etapă, este de asemenea planificată mutarea optimizărilor RTL interprocedurale în fire separate, ținând cont de caracteristicile platformei hardware. După aceea, intenționăm să implementăm paralelizarea optimizărilor intraprocedurale (IPA) aplicate codului din interiorul funcției, indiferent de specificul apelului. Legătura limitativă pentru moment este colectorul de gunoi, care a adăugat o blocare globală care dezactivează operațiunile de colectare a gunoiului în timp ce rulează în modul cu mai multe fire (în viitor, colectorul de gunoi va fi adaptat pentru execuția GCC cu mai multe fire).

Pentru a evalua schimbările de performanță, a fost pregătită o suită de teste care asambla fișierul gimple-match.c, care include peste 100 de mii de linii de cod și 1700 de funcții. Testele pe un sistem cu un procesor Intel Core i5-8250U cu 4 nuclee fizice și 8 virtuale (Hyperthreading) au arătat o scădere a timpului de execuție a optimizărilor GIMPLE Intra Procedural de la 7 la 4 secunde la rularea a 2 fire și la 3 secunde la rularea a 4 fire, adică O creștere a vitezei etapei de asamblare luate în considerare a fost realizată de 1.72 și, respectiv, de 2.52 ori. Testele au arătat, de asemenea, că utilizarea nucleelor ​​virtuale cu Hyperthreading nu duce la creșterea performanței.

Proiect pentru adăugarea suportului pentru paralelizarea procesului de compilare la GCC

Timpul total de construcție a fost redus cu aproximativ 10%, dar conform previziunilor, paralelizarea optimizărilor RTL va permite obținerea de rezultate mai tangibile, deoarece această etapă durează mult mai mult timp în timpul compilării. Aproximativ după paralelizarea RTL, timpul total de asamblare va fi redus de 1.61 ori. După aceasta, va fi posibil să se reducă timpul de construire cu încă 5-10% prin paralelizarea optimizărilor IPA.

Proiect pentru adăugarea suportului pentru paralelizarea procesului de compilare la GCC

Sursa: opennet.ru

Adauga un comentariu