Size: a a a

Compiler Development

2020 May 10

M

MaxGraey in Compiler Development
FORTRAN ONE LOVE
У нас оптимизация времени выполнения программы, поэтому все-таки можно... Только компиляторы пытаются находить эквивалентные записи выражений, которые выполняются меньше.
Не всегда. inlining, loop unrolling, loop tiiling, LICM, могут наоборот раздувать представление, но тем не менее это все оптимизации по скорости
источник

PS

Peter Sovietov in Compiler Development
Alex
Потому что на практике не запариваются с формализацией преобразования, а узлы графа ворочают? )
В большинстве компиляторов не гарантируется нахождение оптимального решения. Традиционные ухищрения, правила-эвристики сложно даже представить в виде приличной целевой функции. Корректнее говорить об улучшающих преобразованиях, но ведь иногда они вдруг становятся "ухудшающими" :)
источник

A

Alex in Compiler Development
Peter Sovietov
В большинстве компиляторов не гарантируется нахождение оптимального решения. Традиционные ухищрения, правила-эвристики сложно даже представить в виде приличной целевой функции. Корректнее говорить об улучшающих преобразованиях, но ведь иногда они вдруг становятся "ухудшающими" :)
Я бы даже сказал что не так часто встретишь оптимизацию, которая какой-нибудь тест не ухудшит :) Да, в этом плане от математики тут далеко
источник

KR

K R in Compiler Development
Alex
Я бы даже сказал что не так часто встретишь оптимизацию, которая какой-нибудь тест не ухудшит :) Да, в этом плане от математики тут далеко
1. Не гарантируется даже совпадение видимых результатов "оптимизированной" программы и "неоптимизированной". То есть, может быть даже ухудшена функциональность.

2. Есть оптимизации по размеру программы.
источник

AT

Alexander Tchitchigi... in Compiler Development
Peter Sovietov
В большинстве компиляторов не гарантируется нахождение оптимального решения. Традиционные ухищрения, правила-эвристики сложно даже представить в виде приличной целевой функции. Корректнее говорить об улучшающих преобразованиях, но ведь иногда они вдруг становятся "ухудшающими" :)
Большинство методов оптимизации — тоже не гарантируют. Во всяком случае, не глобальный максимум. Потому что выпуклые функции же оптимизировать не интересно и не спортивно. 😊
источник

A

Alex in Compiler Development
K R
1. Не гарантируется даже совпадение видимых результатов "оптимизированной" программы и "неоптимизированной". То есть, может быть даже ухудшена функциональность.

2. Есть оптимизации по размеру программы.
А можно пример п.1, а то я не очень понял про что конкретно речь
источник

KR

K R in Compiler Development
Alex
А можно пример п.1, а то я не очень понял про что конкретно речь
Да любое вычисление на плавающей точке - после оптимизации под архитектуру будет давать слегка другие значения. Как правило, это некритично. Но мы же за строгость.
источник

A

Alex in Compiler Development
А, в этом плане - да, согласен
источник

PS

Peter Sovietov in Compiler Development
Alex
Я бы даже сказал что не так часто встретишь оптимизацию, которая какой-нибудь тест не ухудшит :) Да, в этом плане от математики тут далеко
Но это не значит, что настоящая оптимизация в компиляторах невозможна. Я много встречаю работ по реализации генераторов кода. Вот там есть линейное целочисленное программирование и прочие серьезные штуки, которые, кстати говоря, и логично отнести к области "формальной компиляции".
источник

M

MaxGraey in Compiler Development
K R
Да любое вычисление на плавающей точке - после оптимизации под архитектуру будет давать слегка другие значения. Как правило, это некритично. Но мы же за строгость.
Вообще то нет. Если только это не ffast-math
источник

KR

K R in Compiler Development
MaxGraey
Вообще то нет. Если только это не ffast-math
FP87 vs SSE?
источник

M

MaxGraey in Compiler Development
Для LLVM есть даже верификатор для корректности и эквивалентности опримизаций Alive называется
источник

M

MaxGraey in Compiler Development
Ну и есть два класса оптимизаций machine-dependent и machine-independent. Так вот последние всегда должны быть строго эквивалентны своему неоптимизированному варианту
источник

FO

FORTRAN ONE LOVE in Compiler Development
Alex
А можно пример п.1, а то я не очень понял про что конкретно речь
Только что GCC 10 сломал билд моей программы: не получаю корректного результата интегрирования.
источник

A

Alex in Compiler Development
FORTRAN ONE LOVE
Только что GCC 10 сломал билд моей программы: не получаю корректного результата интегрирования.
Причины могут быть разные. В большинстве случаев слом после оптимизации означает некорректную программу
источник

M

MaxGraey in Compiler Development
FORTRAN ONE LOVE
Только что GCC 10 сломал билд моей программы: не получаю корректного результата интегрирования.
Ну так это IB. и ошибка в коде компилятора. Это потому что у них Alive нету)
источник

KR

K R in Compiler Development
MaxGraey
Ну и есть два класса оптимизаций machine-dependent и machine-independent. Так вот последние всегда должны быть строго эквивалентны своему неоптимизированному варианту
Там размер scratch pad разный.
источник

AY

Anton Yudintsev in Compiler Development
MaxGraey
Вообще то нет. Если только это не ffast-math
Fastmath в клэнге - группа оптимизаций, каждая из которых может менять результат (и терять точность), даже по отдельности
источник

AY

Anton Yudintsev in Compiler Development
Все вместе включённые (даже по отдельности), они автоматически включают ещё оптимизации в ллвм, недоступные к включению/выключению с фронта отдельно, которые тоже меняют результат
источник
2020 May 11

IK

Ivan Kochurkin in Compiler Development
Алексей Запольский
Приветствую.
Кто знаком с antlr3 подскажите как ускорить компиляцию грамматики https://sourceforge.net/p/harbour-language-analyzer/git/ci/master/tree/Antlr.v3.HarbourGrammar/Simple/Harbour.g , плиз. Может какие предикаты?
Если не секрет, а зачем вы используете устаревшую 3 версию, а не 4?
источник