Разные версии компиляторов (например, G CC) генерируют разную производительность? - PullRequest
1 голос
/ 05 января 2020

У меня есть вопрос в течение долгого времени, т.е. генерирует ли новая версия компилятора C / C ++ лучший код с лучшей производительностью (например, G ++ 7.3 против G ++ 4.8)?

Если они это делают, источник ускорения? Если нет, рекомендуется ли обновлять компиляторы?

Ответы [ 2 ]

6 голосов
/ 05 января 2020

Вот краткий ответ относительно G CC - на их домашнем веб-сайте имеется обширный список различных результатов тестов.

Например, глядя на конкретный c прогон теста OOPACK с помощью Charles Leggett :

Ядра OOPACK состоят из 4 программ для измерения относительная производительность компиляторов C ++ против C компиляторов для абстрактных типов данных. Ядра построены таким образом, что они могут быть закодированы в C или C ++. Программы C компилируются компилятором C ++.

Ядра состоят из:

  • Макс измеряет, насколько хорошо компилятор вставляет простое условное выражение.
  • Матрица измеряет, насколько хорошо компилятор распространяет константы и поднимает простые инварианты.
  • Итератор измеряет, насколько хорошо компилятор включает недолговечные небольшие объекты.
  • Комплекс измеряет, насколько хорошо компилятор устраняет временные потери.

Один из выводов гласит:

г cc Оптимизировано C несколько улучшилось между 2,91,66 и 3x

Как и ожидалось, быстрый взгляд на некоторые другие критерии также, кажется, поддерживает повествование о том, что «чем новее, тем лучше».

Принимая во внимание категории из "Целей проектирования и разработки", перечисленных в G CC Заявлении о целях развития , причины улучшений можно отнести к одной из трех:

  • Новые оптимизации
  • Улучшенные библиотеки времени выполнения
  • Различные другие улучшения инфраструктуры

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

Более того, читая о критериях выпуска - я бы предостерег от возможного введения в заблуждение, говоря о «лучшей производительности» в целом, поскольку конструкции компиляторов идут со многими компромиссами:

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

Таким образом, особенно в нишевых и критичных к производительности приложениях, вы можете захотеть сравните спецификации c версии компилятора


В качестве примечания вам может быть интересно прочитать больше об их плане разработки , который включает в себя объяснение нумерации версий et c.

4 голосов
/ 05 января 2020

Да, более новые версии G CC генерируют лучший код и имеют лучшую производительность.

Ускорение происходит благодаря улучшенным алгоритмам генерации кода, записанным в G CC.

Я бы рекомендуем обновить G CC, если нет проблем с совместимостью. Более новые версии G CC содержат меньше ошибок и генерируют лучший код.

Возможно, вам придется обновить и Binutils, если вы обновите G CC.


Просто пояснение, это, вероятно, не относится ни к каким продуктам Microsoft (см. комментарии). Поскольку у меня нет никакого опыта с ними, я не знаю. В целом, однако, в G CC меньше ошибок и лучше код с каждым выпуском, поэтому я написал то, что сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...