Подбери себе компилер Крис Касперски ака мыщъх Хакер, номер #075, стр. 075-102-5 Данные, полученные Тони Бруком (Tony Bourke) c www.OSnews.com, это полностью подтверждают (www.osnews.com/story.php?news_id=5830&page=1). GCC 2.95.3 генерирует чуть-чуть более быстрый код, чем GCC 3.3.2, а 64-битная версия GCC 3.3.2 находится далеко позади и конкретно тормозит. Сановский компилятор рулит в обоих случаях, но 64-разрядный код все равно много медленнее. Только не надо говорить, что мы выбрали неудачный пример для сравнения! GZIP - типичное системное приложение, и на большинстве остальных результат будет таким же. Мультимедийные и математические приложения при переходе на GCC 3.x могут ускорить свою работу в несколько раз, и упускать такой выигрыш нельзя. Жаба задушит. Но какую версию выбрать? Новое еще не означает лучшее, а неприятную тенденцию понижения качества кодогенерации у GCC мы уже отмечали. Тестирование показывает, что пальма первенства принадлежит GCC 3.2.3, а GCC 3.3 и GCC 3.2.0 на несколько процентов отстают по скорости. Вроде бы мелочь, а как досадно! Если GCC 3.2.3 отсутствует в портах твоего дистрибутива - не расстраивайся! Ты немного потерял! Ставь любую стабильную версию семейства 3.х и наслаждайся жизнью. Специально вытягивать из Сети GCC 3.2.3 никакого смысла нет. Если тебе действительно нужна производительность - переходи на ICC. Практически все, кто перекомпилировал мультимедийные приложения, подтвердили 20-30% ускорение по сравнению с GCC 3.х. Целочисленные приложения в обоих случаях работают с той же скоростью или даже чуть медленнее, особенно если программа была специально заточена под GCC). На процессорах фирмы AMD ситуация выглядит иначе, и GCC 3.3 с ключиком mcpu=cpu-type athlon генерирует на 30-50% более быстрый код, чем ICC 8.1. Речь, разумеется, идет только о векторных операциях, а на целочисленных ICC по-прежнему впереди. Приплюснутые программы главным образом выигрывают оттого, что у ICC более мощная STL, оптимизированная под Hyper Threading, однако на классический Си эта льгота не распространяется, и такие приложения лучше всего компилировать старым добрым GCC 2.95. Исключение, пожалуй, составляют программы, интенсивно взаимодействующие с памятью. Оптимизатор ICC содержит специальный алгоритм, позволяющий ему выхватить несколько дополнительных процентов производительности за счет механизма предварительной выборки и учета политики кэш-контроллера первого и второго уровней (подробности можно найти в моей книге «Техника оптимизации - эффективное использование памяти»). Заключение И GCC, и ICC - великолепные компиляторы, вобравшие в себя все достижения прогресса. Тем не менее, далеко не все приобретения пошли им на пользу, и программисты в своей массе остаются верны древнему GCC 2.95. Такого же мнения придерживаются составители дистрибутивов и опытные администраторы. Пользователи, правда, не разделяют сгустившегося духа консерватизма и вовсю юзают GCC 3.2/3.4 и особенно GCC 3.3, вынуждая разработчиков поддерживать новые версии независимо от того, хотят они этого или нет. Пропаганда ICC пока только начинается, но, учитывая влияние фирмы Intel, а также высокое качество компилятора, можно не сомневаться, что в некоторых сферах рынка его ожидает успех. Что же касается наукоемких приложений и вычислительных центров, скорее всего, они сохранят свою верность процессорам AMD (Пневые кластеры стоят намного дороже) и компилятору GCC. |