Size: a a a

Compiler Development

2020 April 28

MO

Mar Ort in Compiler Development
TGG
А на русском нет? Я знаю иностранные языки просто для сверки, вдруг что упущу.
Официальной, насколько мне известно, нет.
источник

MO

Mar Ort in Compiler Development
Rifat S
Для VLIW архитектуры нужен хороший компилятор, который может распараллеливать код, который написал программист, на параллельные команды. Такой компилятор написать гораздо сложнее, чем компилятор для обычного x86. Плюс код становится непереносимым, если у одного VLIW 4 команды одновременно могут выполняться, а у другого 19, то код будет несовместим. Возможно, поэтому эта архитектура не очень распространена.
В реальности современный суперскаляр есть рисковый влив, поверх которого построен хардварный оптимизирующий компилятор
источник

T

TGG in Compiler Development
Mar Ort
Официальной, насколько мне известно, нет.
Я не приверженец всего лицензионного. Можно и просто гайд как например по C++
источник

MO

Mar Ort in Compiler Development
Rifat S
А есть здесь компиляторщики, которые сами разрабатывают оптимизирующие компиляторы без LLVM?
Как показывает опыт, если стоит цель выжать максимум из архитектуры, то приходится писать компилятор без ллвм
источник

K

Kitsu in Compiler Development
Rifat S
Для VLIW архитектуры нужен хороший компилятор, который может распараллеливать код, который написал программист, на параллельные команды. Такой компилятор написать гораздо сложнее, чем компилятор для обычного x86. Плюс код становится непереносимым, если у одного VLIW 4 команды одновременно могут выполняться, а у другого 19, то код будет несовместим. Возможно, поэтому эта архитектура не очень распространена.
Есть подозрение, что типичный десктопный/сервеный код плохо паралелится на уровне инчтрукций, особоенно если у вас цепочка load-store (что крайне часто по моему не особо большому опыту)
источник

MO

Mar Ort in Compiler Development
Kitsu
Есть подозрение, что типичный десктопный/сервеный код плохо паралелится на уровне инчтрукций, особоенно если у вас цепочка load-store (что крайне часто по моему не особо большому опыту)
Хорошо написанный оптимизирующийся компилятор умеет разрывать такие цепочки
источник

MO

Mar Ort in Compiler Development
Если же они не разрываются, то тут уже не важно, влив или не влив это, помогает только многоуровневый кэш
источник

AN

Alexander Nasonov in Compiler Development
Mar Ort
Как показывает опыт, если стоит цель выжать максимум из архитектуры, то приходится писать компилятор без ллвм
А контрибутить в ллвм не вариант?
источник

IJ

Igor 🐱 Jirkov in Compiler Development
TGG
В этом и суть)
Я думаю, котлин слишком сильно сложнее брейнфака, чтобы писать для него компилятор или даже интерпретатор следующим проектом. Тем более в одиночку
источник

MO

Mar Ort in Compiler Development
Alexander Nasonov
А контрибутить в ллвм не вариант?
А зачем? Для кого-то может и вариант
источник

T

TGG in Compiler Development
Igor 🐱 Jirkov
Я думаю, котлин слишком сильно сложнее брейнфака, чтобы писать для него компилятор или даже интерпретатор следующим проектом. Тем более в одиночку
Я для себя. К тому же я делаю для интереса, а не для решения задачи.
источник

SS

Sergey Sverdlov in Compiler Development
TGG
А на русском нет? Я знаю иностранные языки просто для сверки, вдруг что упущу.
источник

T

TGG in Compiler Development
Спасибо)
источник

МБ

Михаил Бахтерев in Compiler Development
polunin.ai
Она распространена на суперкомпьютерах, персональным и серверным же хватает и х86
x86 эффективнее VLIW-ов, поэтому на суперкомпьютерах тоже распространена x86, ну, или POWER, которая такая же, как x86 - суперскалярный out-of-order.

У VLIW-ов проблема: промахи по кэшам первого уровня очень сильно тормозят обработку. А в самих кэшах очень много места тратится под nop-ы в длинных словах. Не все алгоритмы можно так хорошо вектоирзовывать/конвейеризировать. Есть ещё всякие мелочи с задержками делений и умножений.

Когда память быстрая и локальная VLIW - очень хорошо себя проявляет. Но в реальности нельзя за приемлемые деньги и энергетические бюджеты сделать гигабайт быстрой локальной памяти.

Самое узкое место - память, поэтому нужно, чтобы процессор умел переживать задержки доступа к ней. Поэтому рулит out-of-order исполнение, несмотря на кучу технических недостатков.

Как-то так.
источник

MO

Mar Ort in Compiler Development
Михаил Бахтерев
x86 эффективнее VLIW-ов, поэтому на суперкомпьютерах тоже распространена x86, ну, или POWER, которая такая же, как x86 - суперскалярный out-of-order.

У VLIW-ов проблема: промахи по кэшам первого уровня очень сильно тормозят обработку. А в самих кэшах очень много места тратится под nop-ы в длинных словах. Не все алгоритмы можно так хорошо вектоирзовывать/конвейеризировать. Есть ещё всякие мелочи с задержками делений и умножений.

Когда память быстрая и локальная VLIW - очень хорошо себя проявляет. Но в реальности нельзя за приемлемые деньги и энергетические бюджеты сделать гигабайт быстрой локальной памяти.

Самое узкое место - память, поэтому нужно, чтобы процессор умел переживать задержки доступа к ней. Поэтому рулит out-of-order исполнение, несмотря на кучу технических недостатков.

Как-то так.
>А в самих кэшах очень много место тратится под nop-ы в длинных словах.
что вы хотите сказать?
источник

МБ

Михаил Бахтерев in Compiler Development
Mar Ort
>А в самих кэшах очень много место тратится под nop-ы в длинных словах.
что вы хотите сказать?
На реальных задачах получается код, в котором очень много nop-ов в длинных словах (ну, пропусков операций). Я не знаю, как это на Эльбрусе называется, использую Itanium-терминологию.
источник

MO

Mar Ort in Compiler Development
Михаил Бахтерев
На реальных задачах получается код, в котором очень много nop-ов в длинных словах (ну, пропусков операций). Я не знаю, как это на Эльбрусе называется, использую Itanium-терминологию.
В эльбрусе эту проблему как-то решили.
источник

МБ

Михаил Бахтерев in Compiler Development
Mar Ort
В эльбрусе эту проблему как-то решили.
Интересно. А как?
источник

MO

Mar Ort in Compiler Development
Михаил Бахтерев
Интересно. А как?
Нопы часть широкой команды. За счет этого экономится место. Ну и компилятор у них крутой, поэтому на реальном коде получается эффективно разнести инструкции
источник

МБ

Михаил Бахтерев in Compiler Development
Mar Ort
Нопы часть широкой команды. За счет этого экономится место. Ну и компилятор у них крутой, поэтому на реальном коде получается эффективно разнести инструкции
Но в широкой команде всё-равно же стоит код этого nop-а, который занимает свой слот.

Про компилятор не знаю. Но когда смотрел на выставке примеры, nop-ов было много. И в исходниках очень много ручной оптимизации через intrinsic-и.
источник