Size: a a a

Compiler Development

2020 April 06

IJ

Igor 🐱 Jirkov in Compiler Development
S.Atan
Вообще то речь шла об оптимизаторах... Вынос за скобки может привести к такому результату, который не возник бы без оптимизации. Вот и всё.
Давайте просто, забыв на секунду о спекуляциях, скажем, что оптимизации "вынесение за скобки" не существует, а существует оптимизация "вынесение за скобки если <список условий> выполняется" :) Условия же должны быть достаточно строгими, чтобы учитывать настоящие, точные описания того, как арифметика работает на уровне языка, который мы оптимизируем.
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Victor Miasnikov
А интервальная арифметика не спасёт ли?
Я не очень понял ваш вопрос.  Вы имеете в виду "является ли интервальная арифметика адекватной моделью" какой арифметики?
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Alex Gryzlov
мне кажется Игорь говорил как раз противоположное - что нужно строить более сложную математическую модель компьютерной реализации
да, именно так. Если мы хотим корректности, то, конечно, думать о float'ах как  об обычных вещественных числах нельзя.
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Михаил Бахтерев
Модель - это то, что удовлетворяет исходной логической системе. Поэтому, нет, не модель. Компьютер выполняет набор преобразований со строгими математическими свойствами, и уже эти свойства можно учитывать в алгоритмах при доказательстве их математических свойств. В серьёзных пакетах всё так и делают: строят оценки достоверности.

Обычно, все на это забивают. Но, как один из специалистов по IEEE754 заметил, результаты 90% вычислений никому не нужны :)
Мне кажется, вы имеете в виду другую перегрузку слова "модель" :) В одном случае модель— приближенное описание чего-то, а вы, кажется, имеете в виду "модель" как в теории моделей — математическая структура, описываемая языком?
источник

S

S.Atan in Compiler Development
Igor 🐱 Jirkov
Давайте просто, забыв на секунду о спекуляциях, скажем, что оптимизации "вынесение за скобки" не существует, а существует оптимизация "вынесение за скобки если <список условий> выполняется" :) Условия же должны быть достаточно строгими, чтобы учитывать настоящие, точные описания того, как арифметика работает на уровне языка, который мы оптимизируем.
Решений много, простейшее - использование в парсере переменных с повышенной разрядностью... Но опять же это порой несет некоторые неудобства. Приходиться переходить на записи или работу в памяти.
источник

S

S.Atan in Compiler Development
polunin.ai
Только так манипулировать нужно очень осторожно, потому что можно получить переполнение или отрицательное число в беззнаковом числе, там где это не ожидалось😊
Конечно. Об этом же и речь😊
источник

VM

Victor Miasnikov in Compiler Development
Igor 🐱 Jirkov
Я не очень понял ваш вопрос.  Вы имеете в виду "является ли интервальная арифметика адекватной моделью" какой арифметики?
Просто "компьютерная интервальная арифметика" является ассциативной и т.п.

Т.е. более полно соответствует "теоретической арифметике"

И её "можно применять" при оптимизации кода в компиляторах.

(

Идея. Насколько она практична - надо изучать

)
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Victor Miasnikov
Просто "компьютерная интервальная арифметика" является ассциативной и т.п.

Т.е. более полно соответствует "теоретической арифметике"

И её "можно применять" при оптимизации кода в компиляторах.

(

Идея. Насколько она практична - надо изучать

)
Можно сотворить свою арифметику под задачу, доказать все необходимые свойства и пользоваться :)
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
На мой взгляд, интересны-то как раз методы (в компиляторном контексте: абстрактная интерпретация, SMT-решатели...).
Цель же можно поставить под сомнение. При разработке встраиваемых систем иной раз приходится использовать алгоритмы, которые явно эксплуатируют эффект целочисленного переполнения, арифметику с насыщением и проч.
Кажется, в таких случаях лучше, когда кольца вычетов явно указаны в коде, а компилятор оптимизирует в инструкции с переполнениями.
источник

A

Alex in Compiler Development
Victor Miasnikov
Просто "компьютерная интервальная арифметика" является ассциативной и т.п.

Т.е. более полно соответствует "теоретической арифметике"

И её "можно применять" при оптимизации кода в компиляторах.

(

Идея. Насколько она практична - надо изучать

)
Я, опять же, может не очень хорошо понимаю что в данном случае означает интервальная арифметика (и как она связана с плавающими числами, которые выше обсуждались), но сам по себе интервальный анализ довольно давно применяется в компиляторных оптимизациях.
источник

A

Alex in Compiler Development
Да, разобрались, это я про другое подумал
источник

AT

Alexey Tkachenko in Compiler Development
Igor 🐱 Jirkov
Можно сотворить свою арифметику под задачу, доказать все необходимые свойства и пользоваться :)
Так было с комплексными и гиперкомплексными числами :)
источник

AT

Alexander Tchitchigin in Compiler Development
Some more dataflow programming: https://alive.s-ol.nu/guide.html 😊
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Some more dataflow programming: https://alive.s-ol.nu/guide.html 😊
Забавно
источник

E

EgorBo in Compiler Development
источник

AZ

Alexander Zaitsev in Compiler Development
а есть число, сколько это - "a little more"?
источник

E

EgorBo in Compiler Development
откуда ж
источник

E

EgorBo in Compiler Development
но ребята из юнити используют активно в продакшне и очень активно юзают все эти векторизации дабы максимализировать кол-во объектов в своих демо
так что я думаю это продакшн мнение
источник

E

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

E

EgorBo in Compiler Development
LLVM is like Electron, but for compilers
источник