Сравнение производительности компиляторов GCC, Clang и LLVM-GCC
21 апреля 2010 года
Экспериментаторы с ресурса Phoronix дополнили опубликованное в понедельник сравнение производительности компиляторов GCC ( 4.3, 4.4, 4.5) и опубликовали более полный отчет, в котором отражены результаты измерения производительности Clang и LLVM-GCC. Напомню, что в рамках проекта LLVM ведется разработка GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный байткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
Результаты тестирования:
- Тесты на время сборки: LLVM-GCC и Clang выполнили операцию сборки Apache на 20% быстрее GCC. Сборка PHP была выполнена LLVM-GCC на 25% быстрее, но при использовании Clang возникли проблемы со сборкой. При сборке ImageMagic проблемы с компиляцией возникли в LLVM-GCC, а Clang завершил процесс сборки на несколько процентов медленнее GCC.
- При измерении производительности Apache, собранного разными компиляторами, производительность LLVM-GCC оказалась примерно на уровне GCC, но clang-сборка продемонстрировала повышение производительности на 9%.
- При измерении скорости сжатия утилитой 7-zip, clang показал результаты на уровне GCC, а LLVM-GCC продемонстрировал десятикратный провал производительности. При кодировании MP3 паком LAME, Clang оказался медленнее GCC на 12%, а LLVM-GCC медленнее на 7%.
- Скорость прохождения тестов Gcrypt и C-Ray оказалась примерно одинаковой для GCC и LLVM-GCC. Clang не смог выполнить тест Gcrypt и оказался на 4% медленее в тесте C-Ray;
- В тесте BYTE Unix Benchmark (Dhrystone 2) возможности LLVM-GCC и Clang проявились в полной мере: LLVM-GCC обогнал GCC на 43%, а Clang на 28%.
- В тесте GraphicsMagick Clang отстал от GCC на 18%, а LLVM-GCC наоборот обогнал GCC на 8%;
- В тесте Himeno LLVM-GCC оказался на уровне GCC, а Clang отстал на 60%.
- В тесте John The Ripper LLVM-GCC отстал от GCC на 60%, а Clang вообще не смог выполнить тест;
- В тесте HMMer LLVM-GCC и Clang оказались на 23% медленнее GCC.
В целом LLVM / Clang не оправдали возложенные на них ожидания, но эти проекты находятся в активной стадии разработки и не исключено, что уже в ближайшем будущем ситуация может кардинально измениться. Постепенно открытые проекты начинают обращать внимание на Clang и тестировать свой код на совместимость, например большая работа в направлении улучшения поддержки и выявления ошибок ведется в настоящее время разработчиками FreeBSD, которым уже удалось добиться полной пересборки ядра, базовой системы и большого числа популярных портов.
Также отмечается, что в исследовании рассмотрен лишь вопрос производительности, без акцентирования внимания на такие преимущества LLVM, как возможность компиляции программы в переносимый между разными платформами универсальный байткод. С другой стороны, GCC имеет фронтэнды для большего числа языков программирования (например, Java и Fortran отсутствуют в LLVM), поддерживает значительно более широкий спектр аппаратных платформ и задействует больше механизмов оптимизаций, привязанных к этим платформам. Кроме того, поддержка C++ в GCC реализована более полно, по сравнению с CLang.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.