Праект па даданні ў GCC падтрымкі распаралельвання працэсу кампіляцыі

У рамках даследчага праекта Parallel GCC пачалася праца па даданні ў GCC магчымасці, якая дазваляе падзяляць працэс кампіляцыі на некалькі раўналежна выкананых струменяў. У наш час для падвышэння хуткасці зборкі на шмат'ядравых сістэмах на ўзроўні ўтыліты make ужываецца запуск асобных працэсаў кампілятара, кожны з якіх выконвае зборку асобнага файла з кодам. Новы праект эксперыментуе з забеспячэннем распаралельвання на ўзроўні кампілятара, што патэнцыйна дазволіць павысіць эфектыўнасць працы на шмат'ядравых сістэмах.

Для тэсціравання падрыхтавана асобная распаралельваючая галінка GCC, для задання ліку струменяў у якой прапанаваны новы параметр "param=num-threads=N". На пачатковым этапе рэалізаваны вынас у асобныя патокі выканання міжпрацэдурных аптымізацый, якія цыклічна выклікаюцца для кожнай функцыі і добра паддаюцца распаралельвання. У асобныя патокі вынесены аперацыі GIMPLE, якія адказваюць за незалежныя ад абсталявання аптымізацыі, якія ацэньваюць узаемадзеянне функцый паміж сабой.

На наступным этапе ў асобныя патокі таксама плануецца вынесці міжпрацэдурныя RTL-аптымізацыі, якія ўлічваюць асаблівасці апаратнай платформы. Пасля гэтага плануецца рэалізаваць распаралельванне ўнутрыпрацэдурных аптымізацый (IPA), якія прымяняюцца да кода ўнутры функцыі, незалежна ад асаблівасцяў выкліку. Абмяжоўвалым звяном пакуль з'яўляецца зборшчык смецця, у які дададзена глабальная блакіроўка, якая адключае аперацыі зборкі смецця падчас працы ў шматструменным рэжыме (у будучыні зборшчык смецця будзе адаптаваны для шматструменнага выканання GCC).

Для ацэнкі змены прадукцыйнасці падрыхтаваны тэставы набор, які ажыццяўляе зборку файла gimple-match.c, які ўключае больш за 100 тысяч радкоў кода і 1700 функцый. Тэсты на сістэме з CPU Intel Core i5-8250U з 4 фізічнымі ядрамі і 8 віртуальнымі (Hyperthreading) паказалі зніжэнне часу выканання аптымізацый Intra Procedural GIMPLE з 7 да 4 секунд пры запуску 2 патокаў і да 3 секунд пры запуску 4 патокаў, г.зн. дасягнута павелічэнне хуткасці разгляданага этапа зборкі ў 1.72 і 2.52 разы адпаведна. Тэсты таксама паказалі, што выкарыстанне віртуальных ядраў пры Hyperthreading не прыводзіць да росту прадукцыйнасці.

Праект па даданні ў GCC падтрымкі распаралельвання працэсу кампіляцыі

Агульны час зборкі скарацілася прыблізна на 10%, але па прагнозах распаралельванне RTL-аптымізацый дазволіць дамагчыся больш адчувальных вынікаў, бо дадзеная стадыя займае пры кампіляцыі істотна больш часу. Арыентыровачна пасля распаралельвання RTL агульны час зборкі скароціцца ў 1.61 разу. Пасля гэтага яшчэ на 5-10% можна будзе скараціць час зборкі за кошт распаралельвання аптымізацый IPA.

Праект па даданні ў GCC падтрымкі распаралельвання працэсу кампіляцыі

Крыніца: opennet.ru

Дадаць каментар