У рамках дослідницького проекту
Для тестування
На наступному етапі окремі потоки також планується винести міжпроцедурні 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 не призводить до зростання продуктивності.
Загальний час зборки скоротився приблизно на 10%, але за прогнозами розпаралелювання RTL-оптимізацій дозволить досягти більш відчутних результатів, оскільки дана стадія займає при компіляції значно більше часу. Орієнтовно після розпаралелювання RTL загальний час збирання скоротиться в 1.61 рази. Після цього ще на 5-10% можна буде скоротити час зборки за рахунок розпаралелювання оптимізації IPA.
Джерело: opennet.ru