Как современные оптимизирующие компиляторы определяют, когда оптимизировать?

Да я использовал и Хвост для Win32 и хвост на Cygwin. Я нашел, что оба превосходны, хотя я предпочитаю Cygwin немного, поскольку я в состоянии выследить файлы по Интернету эффективно без катастрофических отказов (Хвост для Win32 отказал на мне в некоторых случаях).

Так в основном, я использовал бы хвост на Cygwin и перенаправил бы вывод в файл на моей локальной машине. У меня тогда был бы этот файл открытым в Vim и перезагрузке (: e) это при необходимости.

7
задан mk12 23 August 2012 в 21:10
поделиться

4 ответа

Обычно из-за такой наивности и надежды на улучшение.

Вот почему своевременная компиляция является такой выигрышной стратегией. Соберите статистику, а затем оптимизируйте ее для общего случая.

Ссылки:

4
ответ дан 7 December 2019 в 14:34
поделиться

Для краткости: лучше, чем мы!

Вы можете взглянуть на это: http://www.linux-kongress.org/2009/slides/compiler_survey_felix_von_leitner.pdf

Дидье

0
ответ дан 7 December 2019 в 14:34
поделиться

Вы можете посмотреть проект Spiral .

Вдобавок ко всему, оптимизация - это сложная задача в целом. Отчасти это почему у компилятора gcc так много опций. Если вы знаете что-то о кэше и страницах, вы можете делать некоторые вещи вручную и запрашивать выполнение других через компилятор, но нет двух одинаковых машин, поэтому подход должен быть специальным.

0
ответ дан 7 December 2019 в 14:34
поделиться

Хороший вопрос. Вы спрашиваете о так называемых спекулятивных оптимизациях.

Динамические компиляторы используют как статическую эвристику, так и информацию профиля. Статические компиляторы используют эвристику и (автономную) профильную информацию. Последний часто упоминается как PGO (Profile Guided Optimizations).

Существует множество статей о встраиваемых политиках. Наиболее исчерпывающим из них является

Эмпирическое исследование встраивания методов для своевременного компилятора Java

. Он также содержит ссылки на связанные работы и резкую критику некоторых из рассмотренных статей (оправданно).

В общем, современные компиляторы пытаются использовать анализ воздействия для оценки потенциального эффекта спекулятивных оптимизаций перед их применением.

PS Развертывание цикла - это старая классическая штука, которая помогает только для некоторых жестких циклов, которые выполняют только операции по обработке чисел (без вызовов и т. Д.). Встраивание методов - гораздо более важная оптимизация в современных компиляторах.

0
ответ дан 7 December 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: