Сталінський компілятор жорстоко оптимізує, але як?


14

У дослідницькій заяві Дж. М. Сіскіндза зазначено:

Сталін - це оптимізуючий компілятор для Схеми, який виконує статичний аналіз загальнопрограми та використовує результати цього аналізу для створення надзвичайно ефективного коду. Сталін використовує велику колекцію методик статичного аналізу. Він виконує нову форму поліваріантного аналізу потоку, яка використовує ітераційний аналіз моноваріантного потоку для здійснення орієнтованого на розбиття потоку: клонування спеціалізованих копій процедур та призначення цілей таким клонам на виклик на місці. Він використовує результати аналізу потоку для проведення аналізу життєвого часу, аналізу втечі, аналізу вказує на точку та обов'язкового аналізу. Ці аналізи підтримують нову форму конвертації легкого закриття, яка виключає більшість слотів закриття, використовуючи такі методи, як змінна глобалізація та локалізація, стискає статичний ланцюжок і, як правило, усуває більшість закриттів від програм. Він також використовує вищезгадані аналізи для підтримки управління сховищами, орієнтованими на потоки, де збирання сміття під час роботи замінюється статичним розподілом та розподілом на основі принципу "абстрактне значення" та "за програмою". Він також здійснює керовану перетворення CPS, орієнтовану на потоки, використовуючи розширення методів, створених Screamer, для підтримки надзвичайно ефективного продовження першого класу. Нарешті, він підтримує вибір потоку та вибір низького рівня представлення, щоб вибрати реалізацію (або нереалізацію) тегів, перевірку тегів та відправлення тегів за принципом "абстрактне значення" та "за програмою". Це виключає більшість тегів під час роботи, перевірку тегів, тегів, зачистку тегів, розсилку тегів, бокс та розпакування з програм. де збирання сміття під час роботи замінюється статичним розподілом та розподілом за принципом "абстрактне значення" та "за програмою". Він також здійснює керовану перетворення CPS, орієнтовану на потоки, використовуючи розширення методів, створених Screamer, для підтримки надзвичайно ефективного продовження першого класу. Нарешті, він підтримує вибір потоку та вибір низького рівня представлення, щоб вибрати реалізацію (або нереалізацію) тегів, перевірку тегів та відправлення тегів за принципом "абстрактне значення" та "за програмою". Це виключає більшість тегів під час роботи, перевірку тегів, тегів, зачистку тегів, розсилку тегів, бокс та розпакування з програм. де збирання сміття під час роботи замінюється статичним розподілом та розподілом за принципом "абстрактне значення" та "за програмою". Він також здійснює керовану перетворення CPS, орієнтовану на потоки, використовуючи розширення методів, створених Screamer, для підтримки надзвичайно ефективного продовження першого класу. Нарешті, він підтримує вибір потоку та вибір низького рівня представлення, щоб вибрати реалізацію (або нереалізацію) тегів, перевірку тегів та відправлення тегів за принципом "абстрактне значення" та "за програмою". Це виключає більшість тегів під час роботи, перевірку тегів, тегів, зачистку тегів, розсилку тегів, бокс та розпакування з програм. використовуючи розширення методів, створених Screamer, для підтримки надзвичайно ефективного продовження першого класу. Нарешті, він підтримує вибір потоку та вибір низького рівня представлення, щоб вибрати реалізацію (або нереалізацію) тегів, перевірку тегів та відправлення тегів за принципом "абстрактне значення" та "за програмою". Це виключає більшість тегів під час роботи, перевірку тегів, тегів, зачистку тегів, розсилку тегів, бокс та розпакування з програм. використовуючи розширення методів, створених Screamer, для підтримки надзвичайно ефективного продовження першого класу. Нарешті, він підтримує вибір потоку та вибір низького рівня представлення, щоб вибрати реалізацію (або нереалізацію) тегів, перевірку тегів та відправлення тегів за принципом "абстрактне значення" та "за програмою". Це виключає більшість тегів під час роботи, перевірку тегів, тегів, зачистку тегів, розсилку тегів, бокс та розпакування з програм.Ці аналізи та оптимізації дозволяють Сталіну генерувати надзвичайно ефективний код, що перевершує всі інші компілятори Схеми за коефіцієнтами від двох до ста, особливо для чисельно інтенсивного коду. Сталін часто генерує код, який перевершує рукописний c і код Fortran.

Мені вдалося знайти такий дуже цікавий документ про реалізацію закриття / функціонування викликів: Конвертація легкого закриття закритого типу . Я також надіслав електронною поштою автору запитання про статті про інші теми, про які йдеться в документах про конверсію про закриття:

Siskind, JM 2000a. Легкий перехід CPS, орієнтований на потік. У підготовці.

Siskind, JM 2000b. Поліваріантність, спрямована на потік. У підготовці.

Siskind, JM 2000c. Вибір представленого подання з потоком. У підготовці.

Siskind, JM 2000d. Управління зберіганням, орієнтоване на потоки. У підготовці

На жаль, він ніколи не збирався писати ці документи. Моє запитання до вас: чи існують альтернативні або споріднені документи, які висвітлюють ці теми? Мені дуже цікаво дізнатись, як Сталін (або інші компілятори) можуть складати таку мову високого рівня, як Схема, яка збирає сміття, динамічно набирається, підтримує функції першого класу і навіть продовження першого класу, можуть статично складатись до такого ефективного коду . Незважаючи на те, що роботи з аналізу потоків є досить великими, документи про використання результатів такого аналізу для оптимізації, зазначених вище, не є.

Відповіді:


11

Ключовим, мабуть, є те, що він використовує аналіз програм та оптимізацію цілої програми. Чим більше ви знаєте про те, як поводиться програма, тим більше ви можете спеціалізуватися, вбудовувати та робити виконавців.

Компілятор MLton для Standard ML робить подібну дію ( http://mlton.org/ ). Є одна презентація (принаймні) про це: http://mlton.org/pages/References/attachments/060916-mlton.pdf .

Ранішу роботу провели Крейг Чемберс та його група з Вашингтонського університету (наприклад: http://www.cs.washington.edu/research/projects/cecil/www/pubs/jdean-thesis.html ). Це було зроблено в контексті Я та пізніше Сесіль / Вихровий.

Напевно, більше спільної роботи в спільноті Scheme / Lisp. Ви, мабуть, хочете розглянути в Google "оптимізацію всієї програми".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.