Почему gcc -o0 будет быстрее, чем icc -o0? - PullRequest
1 голос
/ 25 февраля 2011

Для краткого отчета, который я должен сделать, наш класс запустил код на кластере, используя и gcc -O0, и icc -O0. Мы обнаружили, что GCC был примерно в 2,5 раза быстрее, чем ICC без каких-либо оптимизаций? Почему это? Gcc -O0 на самом деле выполняет небольшую оптимизацию или просто лучше работает для этой системы?

Код представлял собой реализацию алгоритма поиска наивной строки, найденного здесь , написанного на языке c.

Спасибо

Ответы [ 2 ]

6 голосов
/ 25 февраля 2011

Производительность при -O0 не интересна и не свидетельствует о чем-либо. В нем явно сказано: «Мне плевать на производительность», и компилятор поднимет вас; он просто делает то, что оказывается самым простым. По счастливой случайности, то, что проще всего для GCC, быстрее, чем то, что проще всего для ICC для одного очень специфического микробенчмарка в вашей конкретной конфигурации оборудования. Если бы вы запустили 100 других микробенчмарков, вы, вероятно, также нашли бы такие, где ICC быстрее. Даже если бы ты этого не сделал, это все равно ничего бы не значило. Если вы собираетесь сравнивать производительность между компиляторами, включите оптимизацию, потому что это то, что вы делаете, если заботитесь о производительности.

Если вы хотите понять, почему один из них быстрее, профилируйте выполнение. Где время исполнения тратится? Где там киоски? Почему эти киоски происходят?

3 голосов
/ 25 февраля 2011

Несколько вещей, которые следует учитывать:

  • Набор команд, используемый каждым компилятором по умолчанию.Например, если ваша сборка GCC генерирует код i686 по умолчанию, а ICC ограничивается кодами операций i586, вы, вероятно, увидите существенную разницу в производительности.

  • Фактические процессоры в вашем кластере.Если вы используете процессоры AMD вместо процессоров Intel, то ICC находится в невыгодном положении, поскольку, конечно, он предназначен специально для процессоров Intel.

  • Вы упомянули использование кластера.Существует ли такая разница в скорости на одном процессоре?Если вы использовали какие-либо средства распараллеливания, предоставляемые вашим компилятором, там могут быть существенные различия.

  • Упрощенно, когда оптимизации отключены, компилятор использует готовые «шаблоны» для каждой конструкции кода,Поскольку эти шаблоны предназначены для последующей оптимизации, они построены таким образом, чтобы этапы оптимизации позволили получить более качественный код.Тот факт, что они могут быть медленнее или быстрее с -O0, на самом деле ничего не значит - например, более явный исходный код может быть легче оптимизировать, но гораздо медленнее выполнить.

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

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