GCCге компиляция процессин параллелизациялоо үчүн колдоону кошуу долбоору

Изилдөө долбоорунун алкагында Параллель GCC GCCге компиляция процессин бир нече параллелдүү жиптерге бөлүүгө мүмкүндүк берген функцияны кошуу боюнча иштер башталды. Учурда көп ядролуу системаларда куруу ылдамдыгын жогорулатуу үчүн make утилитасы өзүнчө компилятор процесстерин ишке киргизет, алардын ар бири өзүнчө код файлын курат. Жаңы долбоор компилятордун деңгээлинде параллелизацияны камсыз кылуу менен эксперимент жүргүзүп жатат, бул көп ядролуу системалардын иштешин жакшыртат.

Сыноо үчүн даярдалган жиптердин санын коюу үчүн "—param=num-threads=N" жаңы параметрин сунуш кылган GCCдин өзүнчө параллелдүү бутагы. Алгачкы этапта биз процедуралар аралык оптималдаштырууну өзүнчө жиптерге которууну ишке ашырдык, алар ар бир функция үчүн циклдик деп аталат жана оңой параллелдештирүүгө болот. Функциялардын бири-бири менен өз ара аракеттенүүсүн баалаган аппараттык камсыздоодон көз карандысыз оптималдаштыруу үчүн жооптуу GIMPLE операциялары өзүнчө жиптерге жайгаштырылат.

Кийинки этапта, ошондой эле аппараттык платформанын өзгөчөлүктөрүн эске алуу менен процедуралар аралык RTL оптималдаштырууну өзүнчө жиптерге жылдыруу пландаштырылууда. Андан кийин биз чакыруунун өзгөчөлүгүнө карабастан функциянын ичиндеги кодго колдонулган процедура ичиндеги оптималдаштырууну (IPA) параллелизациялоону ишке ашырууну пландаштырып жатабыз. Азырынча чектөөчү шилтеме таштанды жыйноочу болуп саналат, ал көп жиптүү режимде иштеп жатканда таштанды чогултуу операцияларын өчүрүүчү глобалдык кулпуну кошту (келечекте таштанды жыйноочу GCCдин көп жиптүү аткарылышына ылайыкталат).

Өндүрүштөгү өзгөрүүлөрдү баалоо үчүн gimple-match.c файлын чогулткан тест топтому даярдалды, ал 100 миңден ашык код саптарын жана 1700 функцияны камтыйт. 5 физикалык өзөктүү жана 8250 виртуалдык (Hyperthreading) менен Intel Core i4-8U CPU менен системадагы тесттер 7 жипти иштеткенде GIMPLE ички оптималдаштырууларынын аткарылуу убактысынын 4 жипти иштеткенде 2ден 3 секундага чейин жана 4 иштеткенде 1.72 секундага чейин кыскарганын көрсөттү. жиптер, б.а. Каралып жаткан монтаждоо стадиясынын ылдамдыгын 2.52 жана XNUMX эсеге жогорулатууга жетишилди. Тесттер ошондой эле Hyperthreading менен виртуалдык өзөктөрдү колдонуу өндүрүмдүүлүктү жогорулатууга алып келбей турганын көрсөттү.

GCCге компиляция процессин параллелизациялоо үчүн колдоону кошуу долбоору

Жалпы куруу убактысы болжол менен 10% га кыскарды, бирок болжолдоолор боюнча RTL оптималдаштырууну параллелизациялоо кыйла олуттуу натыйжаларга жетишүүгө мүмкүндүк берет, анткени бул этап компиляция учурунда кыйла көбүрөөк убакытты талап кылат. Болжол менен RTL параллелдештирүүдөн кийин жалпы чогултуу убактысы 1.61 эсеге кыскарат. Андан кийин, IPA оптималдаштырууну параллелизациялоо аркылуу куруу убактысын дагы 5-10% кыскартууга болот.

GCCге компиляция процессин параллелизациялоо үчүн колдоону кошуу долбоору

Source: opennet.ru

Комментарий кошуу