Ca parte a unui proiect de cercetare
Pentru testare
Î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.
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.
Sursa: opennet.ru