Почему оптимизация компоновщика так плоха?

Хотя я не являюсь слепым, я услышал хорошие вещи [приблизительно 110] Emacspeak. У них был режим Python начиная с их 8,0 выпусков в 1998 (они, кажется, произошли до выпуска 28.0!). Определенно стоящий проверки.

16
задан 13 revs, 2 users 88% 7 November 2018 в 19:06
поделиться

2 ответа

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

Кстати, мне очень жаль, что я отвлек ваш исходный вопрос на обсуждение ltcg. Теперь я понимаю, что ваш вопрос был немного другим, больше касался времени компоновки по сравнению с возможной / доступной статической оптимизацией времени компиляции.

3
ответ дан 30 November 2019 в 17:28
поделиться

Срок действия вашего коллеги устарел. Технология здесь с 2003 года (на компиляторе MS C ++): / LTCG . Генерация кода времени компоновки решает именно эту проблему. Насколько мне известно, GCC имеет эту функцию на радаре для компилятора следующего поколения.

LTCG не только оптимизирует код, например, встраивание функций между модулями, но и фактически изменяет код для оптимизации локализации кэша и ветвления. для конкретной нагрузки см. Профильная оптимизация . Эти параметры обычно зарезервированы только для сборок Release, так как сборка может занять несколько часов: свяжет инструментированный исполняемый файл, запустит загрузку профилирования, а затем снова свяжется с результатами профилирования. существует функция A, которая часто вызывает функцию B, а функция B относительно небольшой, то с направляющими по профилю оптимизации будут встроены в функцию B в функции A.

Спекуляция виртуального вызова - Если виртуальный звонок или другой звонок через указатель на функцию, часто нацелен на определенная функция, профильная оптимизация может вставить условно выполненный прямой вызов часто используемая функция, и прямой вызов может быть встроен.

Размещение регистров - Оптимизация с данные профиля приводят к лучшему распределение регистров.

Оптимизация базового блока - Базовый блок оптимизация позволяет часто исполнять базовые блоки, которые временно исполняются в заданном кадре для размещения в тот же набор страниц (населенный пункт). Эта минимизирует количество используемых страниц, таким образом минимизируя накладные расходы на память.

Оптимизация размера / скорости - Функции где программа проводит много времени можно оптимизировать по скорости.

Схема функций - На основе вызова график и профилированный вызывающий / вызываемый поведение, функции, которые, как правило, по тому же пути выполнения размещены в том же разделе.

Оптимизация условных переходов - С датчики значений, направляемые по профилю оптимизации могут найти, если данный значение в операторе переключения используется чаще, чем другие значения. Эта значение может быть извлечено из оператор переключения. То же самое можно сделать с инструкциями if / else, где оптимизатор может заказать if / else так что либо блок if, либо else размещается первым в зависимости от того, какой блок чаще верно.

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

Разделение кода EH - Код EH, выполняются в исключительных случаях, может часто переносить в отдельный раздел когда профильная оптимизация может определить, что происходят исключения только в исключительных случаях.

Внутренняя память - Расширение внутренности можно решить лучше, если они можно определить, если внутренняя звонили часто. Внутренняя может также быть оптимизированным на основе блока размер перемещений или копий.

27
ответ дан 30 November 2019 в 17:28
поделиться
Другие вопросы по тегам:

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