Projekti, jolla lisätään tuki käännösprosessin rinnakkaisuudelle GCC:hen

Osana tutkimusprojektia Rinnakkais GCC GCC:hen on alettu lisätä ominaisuus, jonka avulla käännösprosessi voidaan jakaa useisiin rinnakkaisiin säikeisiin. Tällä hetkellä rakennusnopeuden lisäämiseksi moniytimisissä järjestelmissä make-apuohjelma käynnistää erilliset kääntäjäprosessit, joista jokainen rakentaa erillisen kooditiedoston. Uudessa projektissa kokeillaan rinnakkaisuuden tarjoamista kääntäjätasolla, mikä mahdollisesti parantaa suorituskykyä moniytimisissä järjestelmissä.

Kokeiluun valmistetut GCC:n erillinen rinnakkaishaara, joka tarjoaa uuden parametrin "—param=num-threads=N" säikeiden määrän asettamiseksi. Alkuvaiheessa toteutimme proseduurienvälisten optimointien siirtämisen erillisiin säikeisiin, joita kutsutaan syklisesti kullekin funktiolle ja jotka ovat helposti rinnastettavissa. Laitteistoriippumattomista optimoinneista vastaavat GIMPLE-toiminnot, jotka arvioivat funktioiden keskinäistä vuorovaikutusta, on sijoitettu erillisiin säikeisiin.

Seuraavassa vaiheessa suunnitellaan myös prosessienvälisten RTL-optimointien siirtämistä erillisiin säikeisiin laitteistoalustan ominaisuudet huomioon ottaen. Tämän jälkeen aiomme toteuttaa funktion sisällä olevaan koodiin sovellettavien intraprocedural-optimointien (IPA) rinnakkaistamisen kutsun erityispiirteistä riippumatta. Rajoittava linkki on toistaiseksi roskakeräin, joka on lisännyt maailmanlaajuisen lukon, joka estää roskien keräystoiminnot ajettaessa monisäikeisessä tilassa (tulevaisuudessa roskakeräin mukautetaan GCC:n monisäikeiseen suorittamiseen).

Suorituskyvyn muutosten arvioimiseksi on valmisteltu testipaketti, joka kokoaa gimple-match.c-tiedoston, joka sisältää yli 100 tuhatta koodiriviä ja 1700 funktiota. Testit järjestelmällä, jossa oli Intel Core i5-8250U -suoritin, jossa on 4 fyysistä ydintä ja 8 virtuaalista (hyperthreading), osoittivat prosessinsisäisten GIMPLE-optimointien suoritusajan lyhenevän 7 sekunnista 4 sekuntiin, kun suoritettiin 2 säiettä ja 3 sekuntiin, kun suoritettiin 4 langat, ts. Tarkasteltavana olevan kokoonpanovaiheen nopeuden lisäys saavutettiin 1.72-kertaiseksi ja 2.52-kertaiseksi. Testit osoittivat myös, että virtuaalisten ytimien käyttö Hyperthreadingin kanssa ei paranna suorituskykyä.

Projekti, jolla lisätään tuki käännösprosessin rinnakkaisuudelle GCC:hen

Kokonaisrakennusaikaa lyhennettiin noin 10 %, mutta ennusteiden mukaan RTL-optimointien rinnastaminen mahdollistaa konkreettisempien tulosten saavuttamisen, koska tämä vaihe vie huomattavasti enemmän aikaa kääntämisen aikana. Suunnilleen RTL-rinnakkaistamisen jälkeen kokonaiskokoonpanoaika lyhenee 1.61 kertaa. Tämän jälkeen on mahdollista lyhentää rakennusaikaa vielä 5-10 % rinnakkain IPA-optimointeja.

Projekti, jolla lisätään tuki käännösprosessin rinnakkaisuudelle GCC:hen

Lähde: opennet.ru

Lisää kommentti