Andrei Vukolov
январь 2016.
1389

Правда ли, что GCC генерирует самый медленный и неоптимальный машинный код из всех доступных компиляторов для C/C++?

Ответить
Ответить
Комментировать
0
Подписаться
0
2 ответа
Поделиться
АВТОР ВОПРОСА ОДОБРИЛ ЭТОТ ОТВЕТ

Приятно видеть вопрос по теме. Это далеко от правды так же, как я от Луны. GNU GCC ведет себя платформозависимо и генерирует ассемблер, сильно различающийся в разных ситуациях и на разных настройках, т.к. именно компилятор воплощает (implements) все поддерживаемые конструкции языка. И он воплощает их не так, как любой другой компилятор.

Он используется для сборки большей части программ на Linux (и самого Linux), плюс этот компилятор гораздо популярнее того же MSVC. Существуют серьезные различия между последними, но в плане скорости код GNU GCC чаще всего быстрее на 5-20%, при условии продуманного алгоритма и воплощения на C/C++. У GCC существуют настройки диалекта, задающие параметры генерации кода. В разных ситуациях их можно использовать как во благо, так во вред программе.

Если вы хотите провести собственное исследование на эту тему, вам придется вооружиться компиляторами для сравнения и написать код, (например) массивно использующий контейнеры STL C++, скомпилировать под разные платформы разными компиляторами, и замерить, но на одном и том же процессоре. Результат получите, но он не даст вам права ответить на ваш вопрос, т.к. для этого необходимо участие экспертов и публичность, а так же установление причин путем анализа вывода компилятора. Подобные исследования переодически проводятся, хоть и найти результаты очень сложно. Более того, с появлениями технологий, зависящих от процессора, например SSE, сравнение компиляторов стало еще более относительным.

Я бы, наверное, показал различия в машинном коде с комментариями, если бы на TheQuestion приветствовался и имел смысл код.

Другой вопрос это уже сравнение скорости работы компилятора. Здесь сказать сложно, т.к. я еще не переносил один и тот же большой проект с одного на другой, компилятор, как правило, используется один, для упрощения процессов тестирования и релиза. В отличие от коммерческих компиляторов типа Apple LLVM, Microsoft Visual C++, GNU GCC - это в целом научный проект свободной реализации C/C++, его изучают, что бы работать в профессиональной сфере на этом уровне. В данный момент это лучший выбор. Но считается, что (например) на Windows, MSVC работает заметно быстрее, чем GCC(mingw).

Дмитрий Игоревичотвечает на ваши вопросы в своейПрямой линии
4
0

По скорости компиляции понятно, много раз слышал сетования на медленность реализации GCC под WinNT. Но правильно ли я понимаю, что снижение скорости происходит из-за многочисленных этапов анализа кода, выполняемых GCC, большей "научности" заложенных в него моделей генерации?

0
Ответить

Существуют шаги (passes) сборки кода, компилятор и линковщик (компоновщик) например.

О шагах компилятора GCC: gnu.org Их больше чем могло казаться. И я не могу ответить на ваш вопрос, но на ум приходит просто банальное несовершенство в плане скорости работы и все. Чем подозрения на более детальный "анализ" кода, возможно такое и есть.

0
Ответить
Прокомментировать

Я бы хотел добавить к сказанному выше, что gcc и его специфические порты имеют сотни вариантов кодогенератора под разные платформы (более 60 только в базовом коде), поэтому на вопрос в целом сложно ответить. Даже номинально архитектурно-независимые оптимизации, проводимые со внутренним представлением кода, могут иметь различную степень эффективности на разных вычислительных системах. Судя по тому, что gcc является одним из штатных компиляторов на многих суперкомпьютерных платформах, где машинное время стоит очень дорого, то, в целом, по крайней мере на некоторых архитектурах, он даёт неплохие результаты. Значительный вклад в gcc вносит, в частности, компания IBM (можно посмотреть обзор ресурсов на русском языке здесь ibm.com ) , но их, конечно, в основном интересуют архитектуры POWER и z.

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

1
0
Прокомментировать
Ответить
Читайте также на Яндекс.Кью
Читайте также на Яндекс.Кью