ЖЖ от 2005-09-17 17:22:00

О пользе ключей оптимизации. Скомпилировал пример из треда в ЖЖ dz. Машина — Pentium IV Xeon 2.4GHz (gcc версии 3.2.2 20030222):

  • без ключей — 45 секунд
  • -O3 — 45 секунд
  • -O3 и ключи для MMX/SSE2 — 14 секунд

    понятно, что пример насквозь синтетический, но сам факт!
  • Комментарии 6

    zg № 1
    а что за ключ такой хакирский — -O7? а то в gcc-ных мануалах — -O3 максимум.
    bolk автор № 3
    Ага, я тоже в мануал смотрел :) Тем не менее, gcc его хавает. Я его в каком-то тексте на opennet видел.
    zg № 5
    не тот мануал смотрел. правильный тут (http://savannah.gnu.org/cgi-bin/viewcvs/gc … cvs-markup), функция decode_options. из чего видно, что -Ox с x большим трем полностью эквивалентен -O3. а пишут больше трёх, чтобы если вдруг в новой версии появится -O4, то собиралось именно им. так что фраза в посте про -O7 — вредная, порождает мифы.
    enternet № 2
    К сожалению, это именно синтетический пример. В реальности сам знаешь — правила оптимизации сильно различаются для разных процессоров. Поэтому явовский подход c Just-In-Time теоретически гораздо выгодней — можно компилировать прямо под физически имеющийся процессор. Как ни странно, именно из-за отсутствия оптимизации под современные процессоры многие старые программы обгоняли по производительности новый софт оптимизированный под «не тот» процессор.

    Но есть и ещё более смешной факт. Дело в том, что шумиха вокруг MMX/SSE1 (насчет SSE2 не скажу) является не более чем рекламным шумом. Эти наборы команд сильно ущербные и, по некоторым оценкам, не могут ускорить работу с данными даже в идеальном случае более чем на 30%!!! Откуда же берется разница в разы? Да оттуда, что до появления шумихи с ММХ никто просто не оптимизировал узкие места. Несинтетический пример для подтверждения этого тезиса — Фотошоп. Производительность некоторых операций в нем была в 3(!) раза медленнее в версиях не знавших что такое MMX\SSE.
    bolk автор № 4
    Именно поэтому я всегда компилировал программы под Linux и не пользовался RPM :)

    про MMX я знаю — я ещё программировал на ассемблере, когда он вышел :) Но есть операции, которые MMX реально ускорял и упрощал, одна неприятность — можно было пользоваться чем-то одним — либо сопроцессором, либо MMX :) Кстати, сейчас SSE3 уже вышел, возможно, через три версии там действительно что-то дельное появилось…