Projektas, skirtas papildyti kompiliavimo proceso lygiagretinimą su GCC

Kaip tyrimo projekto dalis Lygiagretus GCC Pradėtas darbas siekiant pridėti prie GCC funkciją, leidžiančią kompiliavimo procesą suskirstyti į keletą lygiagrečių gijų. Šiuo metu, siekdama pagerinti kelių branduolių sistemų kūrimo greitį, „make“ programa naudoja atskirų kompiliatoriaus procesų paleidimą, kurių kiekvienas sukuria atskirą kodo failą. Naujasis projektas eksperimentuoja su lygiagrečiavimu kompiliatoriaus lygiu, kuris galbūt pagerins kelių branduolių sistemų našumą.

Testavimui paruoštas atskira lygiagrečianti GCC šaka, kuri siūlo naują parametrą „—param=num-threads=N“, kad būtų galima nustatyti gijų skaičių. Pradiniame etape įgyvendinome tarpprocedūrinių optimizacijų perkėlimą į atskiras gijas, kurios kiekvienai funkcijai vadinamos cikliškai ir gali būti lengvai lygiagrečios. GIMPLE operacijos, atsakingos už nuo aparatinės įrangos nepriklausomą optimizavimą, įvertinančią funkcijų tarpusavio sąveiką, yra dedamos į atskiras gijas.

Kitame etape taip pat planuojama perkelti tarpprocedūrinius RTL optimizavimus į atskiras gijas, atsižvelgiant į techninės platformos ypatybes. Po to, neatsižvelgiant į iškvietimo specifiką, planuojame įdiegti intraprocedūrinių optimizacijų (IPA) paralelizavimą, taikomą kodui funkcijos viduje. Kol kas ribojanti grandis yra šiukšlių rinktuvas, kuris pridėjo visuotinį užraktą, kuris išjungia šiukšlių išvežimo operacijas veikiant kelių gijų režimu (ateityje šiukšlių rinktuvas bus pritaikytas kelių gijų GCC vykdymui).

Veiklos pokyčiams įvertinti buvo parengtas testų rinkinys, surenkantis gimple-match.c failą, kuriame yra daugiau nei 100 tūkstančių kodo eilučių ir 1700 funkcijų. Sistemos su „Intel Core i5-8250U“ procesoriumi su 4 fiziniais branduoliais ir 8 virtualiais („Hyperthreading“) bandymai parodė, kad „Intra Procedural GIMPLE“ optimizacijų vykdymo laikas sumažėjo nuo 7 iki 4 sekundžių, kai vykdoma 2 gijos, ir iki 3 sekundžių, kai vykdoma 4 gijos. siūlai, t.y. Nagrinėjamo surinkimo etapo greitis buvo padidintas atitinkamai 1.72 ir 2.52 karto. Bandymai taip pat parodė, kad naudojant virtualius branduolius su Hyperthreading našumas nepadidėja.

Projektas, skirtas papildyti kompiliavimo proceso lygiagretinimą su GCC

Bendras kūrimo laikas sutrumpėjo maždaug 10%, tačiau, remiantis prognozėmis, lygiagretus RTL optimizavimas leis pasiekti apčiuopiamesnių rezultatų, nes šis etapas kompiliavimo metu užima žymiai daugiau laiko. Maždaug po RTL lygiagretinimo bendras surinkimo laikas sumažės 1.61 karto. Po to bus galima sutrumpinti kūrimo laiką dar 5-10%, lygiagrečiai suderinus IPA optimizavimą.

Projektas, skirtas papildyti kompiliavimo proceso lygiagretinimą su GCC

Šaltinis: opennet.ru

Добавить комментарий