Re[12]: Суперкомпиляторы
От: thesz Россия http://thesz.livejournal.com
Дата: 20.05.09 14:51
Оценка:
К>>>Откуда он узнает, что я ему буду скармливать только степени двойки?
S>>Из процесса суперкомпиляции, который состоит в исполнении программы. И из этого процесса видно, какие ветки кода вызываются, а какие нет. Если интересно — почитай введение в суперкомпиляцию, ссылку здесь давали, там всё написано очень подробно.
CC>Хм. Что то мне это напоминает такой байан как
CC>

CC>Profile-guided Optimization (PGO)


Nope. Суперкомпилятор может вообще убрать обработку определённых вариантов входных данных процесса, а PGO может только уменьшить их влияние на производительность.

Суперкомпиляция не отменяет последующего PGO, да и сама может использовать результаты прогонов.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[13]: Суперкомпиляторы
От: FR  
Дата: 20.05.09 15:40
Оценка: +1
Здравствуйте, thesz, Вы писали:

T>Nope. Суперкомпилятор может вообще убрать обработку определённых вариантов входных данных процесса, а PGO может только уменьшить их влияние на производительность.


T>Суперкомпиляция не отменяет последующего PGO, да и сама может использовать результаты прогонов.


Ну PGO в нектором смысле тоже разновидность суперкомпиляции.
Re[14]: Суперкомпиляторы
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.05.09 09:00
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну PGO в нектором смысле тоже разновидность суперкомпиляции.

Совершенно верно — они все близкие родственники: PGO, supercompilation, hotspotting.
Основное отличие SC от HS и PGO, как я понял — в том, что она пытается доказать несколько более широкий класс утверждений. То есть PGO и HS занимаются [iспекулятивной[/i] оптимизацией, основываясь на наблюдаемой статистике. А SC пытается устранить гарантированно недостижимые ветки кода с учетом глобальной информации.
Рассмотрим вот такой пример кода:

private Test()
{
  ITest test = new SpecificTest();
  Console.WriteLn(test.Check(8));
}
public class SpecificTest: ITest
{
  public int Check(int a)
  {
    if (a%2 == 0)
      return a+1
    else
      return a/2;
  }
}

Безо всякой помощи профайлера, достойный компилятор может вывести точный тип переменной test, устранить виртуальность, выполнить инлайнинг, провести constant propagation, выбросить unreachable code и свести программу к Console.WriteLn(4). В управляемом случае действия, кроме первых двух, переносятся на JIT.
Возьмем более интересный случай:
private Test(Type t)
{
  ITest test = (ITest)Activator.CreateInstance(t);
  Console.WriteLn(test.Check(8));
}

Здесь классическому компилятору делать нечего. Hotspotting или PGO могут обнаружить, что как правило в test попадает SpecificTest, и впендюрить спекулятивный инлайнинг с guard-ом. Типа вот такого:
private Test(Type t)
{
  if(t.GetType() == typeof(SpecificTest)
    Console.WriteLn(4);
  else
  {
    ITest test = (ITest)Activator.CreateInstance(t);
    Console.WriteLn(test.Check(8));
  }
}

Для того, чтобы PGO помогло совсем устранить else-ветку, этот код должен быть заинлайнен туда, откуда вызывается метод Test(), и там уже надо выполнять локальную оптимизацию с учетом constant propagation и прочими чудесами науки и техники. SC, по идее, имеет больше возможностей на эту тему, т.к. старается собирать глобальную статистику (а не просто локальные счётчики посещаемости строчек). В остальном она до боли похожа на PGO — опять исполнение программы под супервизором, наблюдение за поведением и сбор данных.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Суперкомпиляторы
От: Sergei Romanenko Россия http://pat.keldysh.ru/~roman/
Дата: 08.06.09 09:45
Оценка:
Здравствуйте, Красин, Вы писали:

К>Здравствуйте, DSblizzard, Вы писали:


DS>>Для Явы делают суперкомпилятор. Пишут, что увеличивает скорость до 50 раз.


К>Ссылочку можно? Я пока нашел эту, с указанием "The Java Supercompiler Version 1 is scheduled for completion in late 2003." без какой-либо ссылки на скачку и эту, где предлагается скачать альфа-версию, датированную 2008 годом (причем, судя по CHANGELOG, за последние 5 лет там поменялось всего несколько строк).


Можно почитать вот этот тред по поводу состояния дел с Java-суперкомпилятором: Java-суперкомпилятор
Re: Веб-ресурсы, связанные с суперкомпиляцией
От: Sergei Romanenko Россия http://pat.keldysh.ru/~roman/
Дата: 08.06.09 10:26
Оценка: 92 (9)
Здравствуйте, DSblizzard, Вы писали:

DS>1) Сколько времени и памяти занимает суперкомпиляция по сравнению с обычной компиляцией? Насколько больше по размеру программа после суперкомпиляции?

DS>2) Говорят, частичные вычисления не дружат с побочными эффектами. Насчет суперкомпиляции это тоже верно?
DS>3) Как вы думаете, почему суперкомпиляторы не входили в мэйнстрим и до сих пор бы не вошли, если бы этим не занялся сам Турчин? Только из-за сложности реализации?

На такие вопросы в двух словах ответить невозможно... Поэтому, я решил создать блог


и в нём попытаться написать о состоянии дел с суперкомпиляции. (Включая и такие подробности, о которых обычно умалчивают в "научных" статьях.) Пока что, в этот блог послания отправлял только я, но у блога несколько "авторов", и желающие в нём что-то выставить — приглашаются.

Есть возможность записываться и в "друзья" блога (по-английски это называется followers). Для этого вверху надо кликнуть по надписи "follow blog". После этого можно будет отслеживать, что происходит в блоге через Google Reader.

Также существует и группы


Сообщений в этих группах не так уж и много, но зато почти все их члены — люди, как-то связанные с суперкомпиляцией и специализацией программ.

Другой вопрос: а есть ли возможность "пощупать" суперкомпиляторы "вживую"? Чтобы у "простого народа" была возможность "потыкать ломиком" в суперкомпиляторы, мы (я + Илья Ключников), выставили через веб-интерфейс на растерзание публике два суперкомпилятора


Первый из них (SPSC) обрабатывает программы на функциональном языке первого порядка (не ленивом), а второй (HOSC) — на ленивом функциональном языке с функциями высших порядков. Веб-приложения, через которые доступны эти суперкомпиляторы, находятся здесь:


Можно посмотреть заранее заготовленные задания на суперкомпиляцию, а можно добавить и свои задания. Для этого требуется иметь Гугл-аккаунт и сделать Sign in в веб-приложения.

В Гугл-коде также выставлены и исходные тексты специализатора (частичного вычислителя) Unmix:


Версия работает, если её запускать через Guile (одна из реализаций Scheme). Но сайт проекта должным образом пока не оформлен (в вики ещё нет ни одной страницы). Но среди исходных текстов есть текстовые файлы, которые содержат кое-какую документацию.
Re[2]: Веб-ресурсы, связанные с суперкомпиляцией
От: Sergei Romanenko Россия http://pat.keldysh.ru/~roman/
Дата: 11.09.09 09:44
Оценка: 17 (3)
Здравствуйте, Sergei Romanenko, Вы писали:

SR>Другой вопрос: а есть ли возможность "пощупать" суперкомпиляторы "вживую"? Чтобы у "простого народа" была возможность "потыкать ломиком" в суперкомпиляторы, мы (я + Илья Ключников), выставили через веб-интерфейс на растерзание публике два суперкомпилятора



Кстати, для желающих поковыряться в исходных текстах.

SPSC = "a Simple Supercompiler", минималистский суперкомпилятор.

SPSC Lite — это минималистская версия минималистского суперкомпилятора SPSC. Может
быть полезна для изучения основных алгоритмов суперкомпиляции и как
исходная точка для экспериментирования с суперкомпиляцией.

В настоящий момент имеются 4 версии SPSC Lite на следующих языках:

суперкомпилятор суперкомпиляция scala haskell python ruby
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.