Проект додавання до 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

Додати коментар або відгук