Size: a a a

Compiler Development

2020 April 04

AZ

Alexander Zaitsev in Compiler Development
> Или это тупиковый путь, и больше, чем просто определение типа процессора, и выбор скомпилированного под него кода

Этот вопрос уже поднимался неоднократно в теме AOT с PGO vs JIT. Можете поискать по истории чата :)
источник

p

polunin.ai in Compiler Development
K R
Есть ли какие-нибудь JIT системы для статически типизированных компилируемых языков типа C++/Fortrana, позволяющие значительно повысить производительность по сравнению с просто компилятором?
Или это тупиковый путь, и больше, чем просто определение типа процессора, и выбор скомпилированного под него кода (AVX vs SSE) не сделать?
Эм а чем джит поможет ускорить сишный код, я чёт не понимаю
источник

AZ

Alexander Zaitsev in Compiler Development
polunin.ai
Эм а чем джит поможет ускорить сишный код, я чёт не понимаю
Там, где для сишного кода выигрывает PGO, только представь, что профиль нагрузки меняется в динамике
источник

PS

Peter Sovietov in Compiler Development
K R
Есть ли какие-нибудь JIT системы для статически типизированных компилируемых языков типа C++/Fortrana, позволяющие значительно повысить производительность по сравнению с просто компилятором?
Или это тупиковый путь, и больше, чем просто определение типа процессора, и выбор скомпилированного под него кода (AVX vs SSE) не сделать?
Я бы иначе сформулировал вопрос. Есть ли задачи, которые требуют JIT-компиляции для языка уровня Си? А для уровня языка ассемблера?
источник

KR

K R in Compiler Development
Peter Sovietov
Я бы иначе сформулировал вопрос. Есть ли задачи, которые требуют JIT-компиляции для языка уровня Си? А для уровня языка ассемблера?
Хорошо. Ассемблер лучше. Вы отлично обострили техническое противоречие.
источник

AZ

Alexander Zaitsev in Compiler Development
Peter Sovietov
Я бы иначе сформулировал вопрос. Есть ли задачи, которые требуют JIT-компиляции для языка уровня Си? А для уровня языка ассемблера?
ой ну что вы начинаете сразу :) надо будет - всё на Си напишут. лишь бы возможность была. а было это хорошим выбором или нет - уже совсем другой вопрос :)
источник

IB

Ivan Balanar in Compiler Development
K R
Есть ли какие-нибудь JIT системы для статически типизированных компилируемых языков типа C++/Fortrana, позволяющие значительно повысить производительность по сравнению с просто компилятором?
Или это тупиковый путь, и больше, чем просто определение типа процессора, и выбор скомпилированного под него кода (AVX vs SSE) не сделать?
а какой смысл в JIT компиляции для языков без IL представления?
источник

IB

Ivan Balanar in Compiler Development
для IL языков это очевидная кроссплатформенность
источник

KR

K R in Compiler Development
Ivan Balanar
а какой смысл в JIT компиляции для языков без IL представления?
Можно скомпилировать ассемблер в ассемблер.
источник

IB

Ivan Balanar in Compiler Development
K R
Можно скомпилировать ассемблер в ассемблер.
можно хранить программу в аст представлении, это будет нечто вроде ИЛа, но какой в этом смысл, если нет инфраструктуры для такого представления?
источник

IB

Ivan Balanar in Compiler Development
по сути, сама программа и есть свое представление
источник

KR

K R in Compiler Development
Вообще-то есть llvm jit для С++ на базе шланга.
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Я бы иначе сформулировал вопрос. Есть ли задачи, которые требуют JIT-компиляции для языка уровня Си? А для уровня языка ассемблера?
Был в своё время такой проектик tick-C https://web.stanford.edu/~engler/tickc.pdf - это не совсем JIT, но убедительное доказательство того, что специализация кода в runtime может давать значительный выигрыш в производительности.

Динамическая специализация на LCC (простеньком компиляторе) уделывала статический код, скомпилированный IntelCC. С тех пор много воды утекло, конечно, на сама идея может продолжать работать: подстановка констант в код может существенно его упрощать и снижать давление на регистры.
источник

PS

Peter Sovietov in Compiler Development
Alexander Zaitsev
ой ну что вы начинаете сразу :) надо будет - всё на Си напишут. лишь бы возможность была. а было это хорошим выбором или нет - уже совсем другой вопрос :)
Я просто намекаю на историю вопроса. Полиморфные вирусы или движки регулярных выражений — это все примеры JIT-компиляторов, которые вполне можно использовать и на уровне языка ассемблера :)
источник

KR

K R in Compiler Development
Peter Sovietov
Я просто намекаю на историю вопроса. Полиморфные вирусы или движки регулярных выражений — это все примеры JIT-компиляторов, которые вполне можно использовать и на уровне языка ассемблера :)
Спасибо. То есть, регулярные выражения - это где можно и нужно.
источник

KR

K R in Compiler Development
Ragel на goto, скомпилированный gcc, сильно бьёт табличный вариант.
источник

PS

Peter Sovietov in Compiler Development
K R
Спасибо. То есть, регулярные выражения - это где можно и нужно.
Можно придумать и другие задачи. Язык-то может быть совсем-совсем статическим, но если нужно, допустим, прочесть из файла арифметическое выражение и его на ходу упростить/выполнить — есть, возможно, смысл использовать динамическую компиляцию.
источник

AK

Andrei Kurosh in Compiler Development
K R
Спасибо. То есть, регулярные выражения - это где можно и нужно.
В дотнете, например, есть Reflection.Emit - способ генерации и компиляции IL-кода в исполняемый вариант. Используется очень много где - регулярки (как уже сказали), DI-контейнеры, сериализаторы, мапперы, ORM...
источник

DP

Dmitry Ponyatov in Compiler Development
K R
Ragel на goto, скомпилированный gcc, сильно бьёт табличный вариант.
8-0 а как же кеши? разве таблица в dcache не быстрее чем короткие reljmpы по .text сегменту?
источник

KR

K R in Compiler Development
Dmitry Ponyatov
8-0 а как же кеши? разве таблица в dcache не быстрее чем короткие reljmpы по .text сегменту?
Всё сильно зависит от конкретного автомата, насколько я понимаю. На моих примерах (очень простые автоматы - уровня "wc -l") получалось, что goto значительно быстрее. Насколько я понимаю, если бы это было всегда так, авторы ragel оставили бы только goto.

Машина - серверный Xeon из относительно свежих.
источник