OSDev http://osdev.su/ |
|
Сравнение режимов оптимизации GCC http://osdev.su/viewtopic.php?f=6&t=41 |
Страница 1 из 1 |
Автор: | grindars [ 23 май 2007, 10:23 ] |
Заголовок сообщения: | Сравнение режимов оптимизации GCC |
Тестирование проводилось на GCC 4.1.2 при помощи этой программы: Код: #include <stdio.h>#define USE_CACHE#define NUM_TO_CALC 40 #ifdef USE_CACHE unsigned long cache[NUM_TO_CALC];#endif unsigned long CalcFibon(int index) { unsigned long NewFibon; switch(index) { case 0: return 0; case 1: return 1; default:#ifdef USE_CACHE if(cache[index] != 0) return cache[index];#endif NewFibon = CalcFibon(index - 1) + CalcFibon(index - 2);#ifdef USE_CACHE cache[index] = NewFibon; #endif return NewFibon; } } int main(){ int i; for(i = 0; i < NUM_TO_CALC; i++) printf("%3u: %un", i, CalcFibon(i)); return 0; } В каждом режиме программа запускалась 4 раза. Результаты: С включенным кешем при любой оптимизации : 0.006 сек. С выключенным кешем: O3: 2.428 сек. O2: 2.498 сек. O1: 3.746 сек. Os: 5.069 сек. O0: 6.053 сек. |
Автор: | Гость [ 23 май 2007, 12:38 ] |
Заголовок сообщения: | Re: Сравнение режимов оптимизации GCC |
Так я не понял, что требуется доказать? -O3 - конечно быстрее всех. но не всегда и не во всем. Зато в попугаях (всмысле в байтах) он значительно длиннее. Ну начнем с того, что программа явно не оптимальна :) Понятно, что кеш ускоряет, поэтому кеш мы вырубаем сразу. я пишу на C++, и у меня осталось примерно следущее: Код: #include <stdio.h> unsigned long CalcFibon (unsigned int index) { if (index < 2) return index; return CalcFibon (index - 1) + CalcFibon (index - 2); } int main() { const int NUM_TO_CALC = 40; for (int i = 0; i < NUM_TO_CALC; i++) printf ("%3u: %un", i, CalcFibon(i)); return 0; } кароче. gcc -O3 -fomit-frame-pointer: 1.433s 4024b gcc -O3: 1.563s gcc -O2 -fomit-frame-pointer: 2.133s 3388b gcc -Os -fomit-frame-pointer: 2.200s 3356b gcc -O2: 2.233s gcc -Os: 2.403s gcc -O0: 3.826s gcc -O1: 3.906s На данном синтетическом примере видно, что -Os практически идентично -O2, а -O3 сильно раздувает код, и не известно в какую сторону на производительности это скажется. :) Есть такой проект - acovea долго тока работает сцуко, но там есть всякие интеесные разнообразные тесты. |
Автор: | dinamyte [ 23 май 2007, 13:20 ] |
Заголовок сообщения: | Re: Сравнение режимов оптимизации GCC |
Если кому интересно, Dron, думаю, говорит об этом: Acovea |
Автор: | maximych [ 25 май 2007, 18:44 ] |
Заголовок сообщения: | Re: Сравнение режимов оптимизации GCC |
.Просмотрев разную документацию по этому делу - моё мнение, что всё таки O3 лучше. |
Автор: | sadko [ 26 май 2007, 00:33 ] |
Заголовок сообщения: | Re: Сравнение режимов оптимизации GCC |
А я пользуюсь: Код: wpp386 -otexanf ) |
Автор: | Гость [ 15 июн 2007, 09:57 ] |
Заголовок сообщения: | Re: Сравнение режимов оптимизации GCC |
maximYCH, На данном примере проигрыш в объеме составил 18%... в реальной жизни (всмысле на нормальных приложениях) это будет гораздо ощутимее. На реальных приложениях даже Os против O2 дает значительное сокращение объема... (до 20%) Против O3 это будут разы... Лично я предпочитаю экономию памяти. все преимущества O3 могут быть съедены более интенсивной подкачкой. Ну это естественно в том случае, если говорить о глобальной, общесистемной оптимизации. Для одного, критичного к скорости приложения, O3 может быть вполне оправданно. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |