ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎ добавлСнию Π² 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