Projekts, lai pievienotu atbalstu kompilācijas procesa paralēlināšanai GCC

Kā daļa no pētniecības projekta Paralēlā GCC Ir sākts darbs, lai GCC pievienotu funkciju, kas ļauj kompilācijas procesu sadalīt vairākos paralēlos pavedienos. Pašlaik, lai palielinātu veidošanas ātrumu daudzkodolu sistēmās, utilīta make izmanto atsevišķu kompilatoru procesu palaišanu, no kuriem katrs veido atsevišķu koda failu. Jaunais projekts eksperimentē ar paralēlizācijas nodrošināšanu kompilatora līmenī, kas, iespējams, uzlabos veiktspēju daudzkodolu sistēmās.

Pārbaudei sagatavots atsevišķs GCC paralelizācijas atzars, kas piedāvā jaunu parametru “—param=num-threads=N”, lai iestatītu pavedienu skaitu. Sākotnējā posmā mēs ieviesām starpprocedūru optimizāciju pārnešanu atsevišķos pavedienos, kurus katrai funkcijai sauc cikliski un var viegli paralēli. GIMPLE darbības, kas ir atbildīgas par aparatūras neatkarīgu optimizāciju, kas novērtē funkciju savstarpējo mijiedarbību, ir ievietotas atsevišķos pavedienos.

Nākamajā posmā plānots arī starpprocedurālās RTL optimizācijas pārvietot atsevišķos pavedienos, ņemot vērā aparatūras platformas īpatnības. Pēc tam mēs plānojam ieviest intraprocedurālās optimizācijas (IPA) paralēlizāciju, kas tiek piemērota kodam funkcijas iekšienē, neatkarīgi no izsaukuma specifikas. Pagaidām ierobežojošā saite ir atkritumu savācējs, kas ir pievienojis globālu bloķēšanu, kas atspējo atkritumu savākšanas darbības, darbojoties vairāku pavedienu režīmā (nākotnē atkritumu savācējs tiks pielāgots GCC daudzpavedienu izpildei).

Lai novērtētu veiktspējas izmaiņas, ir sagatavots testu komplekts, kurā tiek apkopots fails gimple-match.c, kas ietver vairāk nekā 100 tūkstošus koda rindu un 1700 funkcijas. Testi sistēmai ar Intel Core i5-8250U centrālo procesoru ar 4 fiziskiem kodoliem un 8 virtuāliem (Hyperthreading) parādīja iekšējās procedūras GIMPLE optimizācijas izpildes laika samazināšanos no 7 līdz 4 sekundēm, palaižot 2 pavedienus un līdz 3 sekundēm, ja palaižot 4. pavedieni, t.i. Aplūkojamā montāžas posma ātruma palielinājums tika sasniegts attiecīgi 1.72 un 2.52 reizes. Pārbaudes arī parādīja, ka virtuālo kodolu izmantošana ar Hyperthreading nepalielina veiktspēju.

Projekts, lai pievienotu atbalstu kompilācijas procesa paralēlināšanai GCC

Kopējais būvēšanas laiks tika samazināts par aptuveni 10%, taču saskaņā ar prognozēm RTL optimizāciju paralēla veikšana ļaus sasniegt taustāmākus rezultātus, jo šis posms kompilācijas laikā aizņem ievērojami vairāk laika. Aptuveni pēc RTL paralēlizācijas kopējais montāžas laiks tiks samazināts par 1.61 reizi. Pēc tam būs iespējams samazināt izveides laiku vēl par 5-10%, paralēli veicot IPA optimizāciju.

Projekts, lai pievienotu atbalstu kompilācijas procesa paralēlināšanai GCC

Avots: opennet.ru

Pievieno komentāru