Size: a a a

Compiler Development

2020 February 27

AZ

Alexander Zaitsev in Compiler Development
Примерно похожая вещь в clang-tidy. Там просят показать, какие проекты срабатывают на новой проверке
источник

E

EgorBo in Compiler Development
суть в том, что есть очень много известных проблем, на которые лучше потратить силы, чем на какие-то паттерны которые возможно никогда и не появятся в реальном коде.

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

E

EgorBo in Compiler Development
но если паттерн реализует сторонний контрибьютер - то можно принять в принципе
источник

AZ

Alexander Zaitsev in Compiler Development
EgorBo
суть в том, что есть очень много известных проблем, на которые лучше потратить силы, чем на какие-то паттерны которые возможно никогда и не появятся в реальном коде.

вот например хватает кейсов, в которых происходит боксинг, который можно было бы оптимизировать — это перф регресс просто несравнимых мастшабов чем в вышеописанном паттерне, где потеряется буквально пяток циклов процессора
Так если пр уже есть, то что?))
источник

E

EgorBo in Compiler Development
ну оптимизации - это
+ к размеру компилятора (мы его с собой таскаем в самом популярном сценарии)
+ к времени компиляции
+ к размеру кода (к сожалению, у нас пока нет DSL, но возможно появится, хотя в ЛЛВМ тоже его нет и всё в коде) == минус к читабельности, осложняет рефакторинг.
+ потенциальные баги (любой новый необязательный код - потенциальный исчточник багов)
+ трата времени на кодревью

и всё это за сомнительный бенефит в случае оптимизаий без срабатываний джит-диффа
источник

RB

Rustem B. in Compiler Development
Привет, тут есть кто может в Raku?
источник

M

MaxGraey in Compiler Development
С одной стороны это правильно сосредоточиваться сначала на sophisticated оптимизациях а потом уже допиливать пипхол. Но оногда на одном пипхоле можно очень многое сделать, например у нас нету трансформаций пока для стандарной библиотеки и когда напишешь например Mathf.cos(Mathf.PI) оно будет честно компилировать и оптимизировать весь код и только за счет пипхола соптимизирует это все до одной константы «-1». Да это затратно, но зато работает всегда уже сейчас, а потом уже можно будет и что нибудь вроде StdLibSimplifierPass сделать как в LLVM =)
источник

M

MaxGraey in Compiler Development
Но у нас AOT. Можем себе позволить. С JIT история совсем другая была бы конечно
источник

E

EgorBo in Compiler Development
Ну кстати фолдинг констант для math ф-ций небесполезно да 😊
источник

M

MaxGraey in Compiler Development
НУ это как минимум 3 трансформации - constant folding + inlining + DAE (dead argument ellimination)
источник

E

EgorBo in Compiler Development
на геймдвиглах, физических движках были срабатывания
источник

M

MaxGraey in Compiler Development
Кстати кроме DAE еще неплохо и DRE делать, то есть  дропать мертвый код с конца функции если она что то возвращает, но при вызове никто этот результат не использует во время фактического вызова
источник

СЛ

Сергей Лапынин in Compiler Development
MaxGraey
Кстати кроме DAE еще неплохо и DRE делать, то есть  дропать мертвый код с конца функции если она что то возвращает, но при вызове никто этот результат не использует во время фактического вызова
Что бы потом на собеседовании можно было задавать вопросы про undefined behavior:
Как отработает этот код?

{
if ( a == NULL ) return;
f(a[0]);
...
}
источник

M

MaxGraey in Compiler Development
Сергей Лапынин
Что бы потом на собеседовании можно было задавать вопросы про undefined behavior:
Как отработает этот код?

{
if ( a == NULL ) return;
f(a[0]);
...
}
Вообще в идеале ни одна оптимизация никак не должна влиять на поведение программы. За этим тщательно следят, используют fuzzing тестирование, формальные/автоматические верификации через alive2 и т д

Конечно это не касается таких небезопасных наборов как ffast-math к примеру
источник

KR

K R in Compiler Development
Вопрос по оптимизации плавающей точки - какие преобразования вообще там не меняют результат, а только увеличивают скорость?

Они вообще есть, кроме убирания тривиальных * 0.0 и аналогичного?
источник

FO

FORTRAN ONE LOVE in Compiler Development
K R
Вопрос по оптимизации плавающей точки - какие преобразования вообще там не меняют результат, а только увеличивают скорость?

Они вообще есть, кроме убирания тривиальных * 0.0 и аналогичного?
источник

FO

FORTRAN ONE LOVE in Compiler Development
K R
Вопрос по оптимизации плавающей точки - какие преобразования вообще там не меняют результат, а только увеличивают скорость?

Они вообще есть, кроме убирания тривиальных * 0.0 и аналогичного?
источник

KR

K R in Compiler Development
Спасибо, занятная штука.
источник

FO

FORTRAN ONE LOVE in Compiler Development
K R
Вопрос по оптимизации плавающей точки - какие преобразования вообще там не меняют результат, а только увеличивают скорость?

Они вообще есть, кроме убирания тривиальных * 0.0 и аналогичного?
> не меняют результат
> увеличивают точность

🤣🤣🤣🤣
источник

KR

K R in Compiler Development
Всё таки, это линтер.
источник