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/