OSDev

для всех
Текущее время: 26 апр 2024, 08:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Сравнение режимов оптимизации GCC
СообщениеДобавлено: 23 май 2007, 10:23 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
Тестирование проводилось на 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 
Так я не понял, что требуется доказать?
-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 долго тока работает сцуко, но там есть всякие интеесные разнообразные тесты.


Вернуться к началу
  
 
СообщениеДобавлено: 23 май 2007, 13:20 

Зарегистрирован: 26 апр 2007, 15:38
Сообщения: 129
Если кому интересно, Dron, думаю, говорит об этом: Acovea


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2007, 18:44 

Зарегистрирован: 20 май 2007, 15:50
Сообщения: 25
.Просмотрев разную документацию по этому делу - моё мнение, что всё таки O3 лучше.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 май 2007, 00:33 

Зарегистрирован: 02 май 2007, 14:25
Сообщения: 126
А я пользуюсь:
Код:
wpp386 -otexanf

)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2007, 09:57 
maximYCH, На данном примере проигрыш в объеме составил 18%... в реальной жизни (всмысле на нормальных приложениях) это будет гораздо ощутимее.

На реальных приложениях даже Os против O2 дает значительное сокращение объема... (до 20%)
Против O3 это будут разы...

Лично я предпочитаю экономию памяти. все преимущества O3 могут быть съедены более интенсивной подкачкой.
Ну это естественно в том случае, если говорить о глобальной, общесистемной оптимизации.

Для одного, критичного к скорости приложения, O3 может быть вполне оправданно.


Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB