Другие ссылки на то, как сталинский компилятор зверски оптимизирует? - PullRequest
22 голосов
/ 14 января 2012

J.M. В исследовании Сискинда говорится:

Сталин - оптимизирующий компилятор для Scheme, который выполняет статический анализ всей программы и использует результаты этого анализа для генерации чрезвычайно эффективного кода. Сталин использует большой набор методов статического анализа. Он выполняет новую форму поливариантного анализа потока, в котором используется итеративный моновариантный анализ потока для выполнения потокового разделения: клонирование специализированных копий процедур и назначение целевых клонов сайтов для каждого вызова. Он использует результаты анализа потока для выполнения анализа в течение всей жизни, анализа побега, анализа точек-точек и анализа обязательных псевдонимов. Эти анализы поддерживают новую форму упрощенного преобразования замыканий, которая устраняет большинство интервалов замыканий, используя такие методы, как глобализация и локализация переменных, сжимает статическую обратную цепочку и обычно устраняет большинство замыканий из программ. Он также использует приведенный выше анализ для поддержки управления хранилищем на основе областей, ориентированного на потоки, где сборка мусора во время выполнения заменяется статическим распределением и освобождением на основе значений для абстрактных значений и на уровне программ. Он также выполняет легковесное преобразование CPS, ориентированное на поток, используя расширения методов, впервые примененных в Screamer, для поддержки чрезвычайно эффективных первоклассных продолжений. Наконец, он поддерживает потоковое встраивание и выбор низкоуровневого представления для выбора реализации (или нереализации) тегов, проверки тегов и диспетчеризации тегов для каждого абстрактного значения и для каждой программной точки. Это устраняет большинство тегов времени выполнения, проверку тегов, тегирование, удаление тегов, диспетчеризацию тегов, упаковку и распаковку из программ. Эти анализы и оптимизации позволяют Сталину генерировать чрезвычайно эффективный код, который превосходит все остальные компиляторы Scheme по коэффициентам от двух до ста, особенно для числового кода. Сталин часто генерирует код, превосходящий рукописный код c и фортран.

Мне удалось найти следующую очень интересную статью о реализации замыканий / вызовов функций: Преобразование облегченного замыкания в направлении потока . Я также отправил автору электронное письмо, чтобы спросить о работах по другим темам, которые упоминаются как написанные в конверсионной статье:

Siskind, J.M. 2000a. Облегченное конверсионное преобразование CPS. В процессе подготовки.

Сискинд, Дж. М. 2000b. Поточно-направленная поливариантность. В процессе подготовки.

Siskind, J.M. 2000c. Потоково-ориентированный выбор представления. В процессе подготовки.

Siskind, J.M. 2000d. Потоковое управление хранением. В процессе подготовки

К сожалению, он так и не удосужился написать эти бумаги. Мой вопрос к вам: есть ли альтернативные или связанные документы, которые охватывают эти темы? Мне очень интересно узнать, как Сталин (или другие компиляторы) может компилировать такой язык высокого уровня, как Scheme, который собирает мусор, динамически типизирует, поддерживает функции первого класса и даже продолжения первого класса, может быть статически скомпилирован для такого эффективного кода. .

1 Ответ

4 голосов
/ 15 января 2012

R.Список публикаций Кента Дибвига .

Редактировать : Хорошим введением в схему Chez является его презентация ICFP и статья , которая сопровождала это .Некоторые из документов относятся именно к Схеме (макросы, множественные значения, продолжения), а некоторые более широко применяются ( Распределение регистров с помощью Lazy Saves, Eager Restores и Greedy Shuing ).

...