Методы и шаблоны с поддержкой оптимизации времени соединения?

#c #optimization

#c #оптимизация

Вопрос:

Оптимизация времени соединения (LTO) (также известная как unity build) включена в GCC 4.5 или более поздней версии, и другие компиляторы имеют аналогичные этапы оптимизации. Разве это не делает определенные шаблоны кода намного более жизнеспособными, чем раньше?

Например, для достижения максимальной производительности «модулю» кода на языке Си часто необходимо обнажить свои внутренности. Делает ли LTO это устаревшим? Какие шаблоны кода сейчас жизнеспособны, чего раньше не было?

Ответ №1:

Я считаю, что LTO — это просто оптимизация, но не обязательно такая, которая устраняет необходимость в документации по реализации («раскрытию внутренностей») любого модуля. С этой целью были написаны целые языки; я не думаю, что C скоро избавится от этой необходимости или, возможно, когда-либо.

Из описания функции LTO в gcc:

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

Из объявления о включении LTO в gcc:

Результат, в принципе, должен выполняться быстрее, но наши модели затрат IPA все еще не доработаны для LTO. Мы видели как ускорения, так и замедления в тестах (см. Тестировщиков LTO наhttp://gcc.opensuse.org /).