Фороникс провёл серию тестов на эффективность различных уровней оптимизации на GCC 4.7.1. Собственно, сами уровни:
- -O0 Сокращает время компиляции. Никаких оптимизаций не производится.
- -O1 Базовая оптимизация. Компиляция занимает больше времени, большие функции занимают намного больше памяти.
- -O2 Более глубокая оптимизация. Выпоняются почти все поддерживаемые оптимизации, за исключением особо «продвинутых». Увеличивается как время сборки, так и потребление памяти.
- -O3 Оптимизация на грани экстрима. Включает в себя все оптимизационные ключи уровня -O2, плюс следующие: -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize, -fvect-cost-model, -ftree-partial-pre and -fipa-cp-clone.
- -Os Оптимизация по размеру. Использует все ключи -O2, за исключением тех, что приводят к увеличению генерируемого кода: -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree-vect-loop-version.
- -Ofast Уровень наплевательства на стандарты :) Включает в себя всё из -O3, а также то, что порою не соответствует стандартам сборки/совместимости: -ffast-math и фортрано-специфические -fno-protect-parens and -fstack-arrays.
Тесты проводились на ubuntu 12.10 и AMD FX-8150 @ 3.6 ГГц
Больше - лучше
GraphicsMagick 1.3.12 Himeno 3.0 PostgreSQL
blur sharpen resizing HWB PPS TPC-B
-O0 64 41 67 81 240 1596
-O1 97 64 128 157 410 1920
-O2 97 65 124 158 589 2005
-O3 112 64 121 156 676 1989
-Os 82 68 101 122 540 1831
-Ofast 109 95 122 158 705
Меньше - лучше
PHP 5.2.9 CRay 1.1 Smallpt 1.0 Open FMM Nero 2D
time to compil total time rendering total time
-O0 14.22 76.23 116 4514
-O1 22.10 53.78 36 613
-O2 29.85 46.57 36 530
-O3 32.71 36.38 32 522
-Os 24.83 72.89 51 1066
-Ofast 32.91 35.84 30 510