LINUX.ORG.RU

GCC 3.4.1


0

0

Проверил степень оптимизации у двух компиляторов - GCC 3.3.2 и сабж. Оказалось, что с опцией -O2 первый ускоряет программу примерно в 12-15 раз, а второй - замедляет примерно в 3.5 раза. Какой более старый компилятор качнуть? Или можно как-нибудь по-особому откомпилить новый?

★★

> ускоряет программу примерно в 12-15 раз

хорошо хоть не в сто раз

> Какой более старый компилятор качнуть?

latest stable 3.3.x

Demetrio ★★★★★
()
Ответ на: комментарий от Demetrio

> хорошо хоть не в сто раз

Извини, ошибся - в 20 раз.
3.3.2:
$ gcc cpu.c -o cpu
$ time ./cpu
real 0m2.760s
user 0m2.760s
sys 0m0.000s
$ gcc cpu.c -o cpu -O2
$ time ./cpu
real 0m0.138s
user 0m0.120s
sys 0m0.010s
3.4.1:
$ /home/bin/gcc cpu.c -o cpu
$ time ./cpu
real 0m2.758s
user 0m2.760s
sys 0m0.000s
$ /home/bin/gcc cpu.c -o cpu -O2
$ time ./cpu
real 0m8.968s
user 0m8.970s
sys 0m0.000s

drish ★★
() автор топика
Ответ на: комментарий от drish

а подскажите плиз как правильно поставить 2 разных gcc в одной системе? ведь если просто компилить с ./configure --prefix=/my/path,
то там же потом будут ещё libs которые будут использоваться при компилировании.. так вот, как каждая версия компилера потом определит в каком месте искать libs эти и *.h файлы..

anonymous
()
Ответ на: комментарий от drish

drish * (*) (22.08.2004 19:34:16)
нет, я пока только учусь им быть ;(

anonymous
()
Ответ на: комментарий от Deleted

:D:D:D Не покажу. Просто пустой миллиардный цикл. ;) Кстати, ИМХО неплохой способ проверки оптимизации - "выгода" умножается на миллиард, чтобы заметнее было.

drish ★★
() автор топика

Пустые циклы - это не круто. Возьми знаешь что сделай?

time emerge -b kde :-))

Будем считать, что дисковые операции займут одинаковое время (ну давайте уж допустим, все равно погрешность небольшая).

А потом сравни. А то ты нашел что компилить:-)) Мне вот интересно, КАК компилятор будет ОПТИМИЗИРОВАТЬ пустой цикл?:-))

А может я и неправ.. Короче, все это ИМХО.

smiley_Dron
()
Ответ на: комментарий от smiley_Dron

Как выглядит пустой цикл? for(i=0;i<1000000000;i++); Он будет оптимизировать i++. А выигрыш от этой оптимизации будет умножаться на миллиард, то есть станет более заметным.

drish ★★
() автор топика
Ответ на: комментарий от drish

Хм.. Тогда через какое место 3.4.1 оптимизирует i++, если такая разница в результатах?

И все же я за компиляцию более-менее крупных прог. Ну хотя бы какой-нить xmms.

И вопрос по ходу.. При сборке компилятора, какие ключи лучше указать, чтобы он потом быстрее работал. Я его собирал с -march=athlon-tbird -O2 (-O3 он игрорит, -fomit-frame-pointer) -pipe.

Потом показалось, что скорость по сравнению с нативным в Gentoo 2004.2 заметно упала. В общем как ГРАМОТНО собирать GCC?

smiley_Dron
()
Ответ на: комментарий от drish

> Как выглядит пустой цикл? for(i=0;i<1000000000;i++); Он будет оптимизировать i++.

:)))) "Он" такой цикл просто выкинет. И будет прав.

anonymous
()
Ответ на: комментарий от anonymous

Да, а 3.4.1 прилепет какую-нибудь фигню, что прога будет выполняться в 3 раза медленнее. Я потому и решил проверить, что заметил, что скорость компиляции и выполнения откомпилированных программ у GCC 3.4.1 меньше, чем у GCC 3.3.2. Я скачал 3.3.4, с ним программа выполняется ещё быстрее.

drish ★★
() автор топика
Ответ на: комментарий от drish

А собирал ты его с какими ключами? Поделись!! (или все by default?)

smiley_Dron
()
Ответ на: комментарий от anonymous

gcc-3.3.4 -O0 -g test.c:

.............
080480d4 <main>:
int main(){
 80480d4:       55                      push   %ebp
 80480d5:       89 e5                   mov    %esp,%ebp
 80480d7:       83 ec 08                sub    $0x8,%esp
 80480da:       83 e4 f0                and    $0xfffffff0,%esp
 80480dd:       b8 00 00 00 00          mov    $0x0,%eax
 80480e2:       29 c4                   sub    %eax,%esp
        int i;
        for(i=0;i<1000000000;i++);
 80480e4:       c7 45 fc 00 00 00 00    movl   $0x0,0xfffffffc(%ebp)
 80480eb:       81 7d fc ff c9 9a 3b    cmpl   $0x3b9ac9ff,0xfffffffc(%ebp)
 80480f2:       7e 02                   jle    80480f6 <main+0x22>
 80480f4:       eb 07                   jmp    80480fd <main+0x29>
 80480f6:       8d 45 fc                lea    0xfffffffc(%ebp),%eax
 80480f9:       ff 00                   incl   (%eax)
 80480fb:       eb ee                   jmp    80480eb <main+0x17>
        return 0;
 80480fd:       b8 00 00 00 00          mov    $0x0,%eax
}
 8048102:       c9                      leave  
 8048103:       c3                      ret    
..................................


gcc-3.3.4 -O2 -g test.c:

..................
080480e0 <main>:
int main(){
 80480e0:       55                      push   %ebp
 80480e1:       89 e5                   mov    %esp,%ebp
 80480e3:       83 ec 08                sub    $0x8,%esp
 80480e6:       83 e4 f0                and    $0xfffffff0,%esp
        int i;
        for(i=0;i<1000000000;i++);
 80480e9:       b8 ff c9 9a 3b          mov    $0x3b9ac9ff,%eax
 80480ee:       89 f6                   mov    %esi,%esi
 80480f0:       48                      dec    %eax
 80480f1:       79 fd                   jns    80480f0 <main+0x10>
        return 0;
}
 80480f3:       31 c0                   xor    %eax,%eax
 80480f5:       c9                      leave  
 80480f6:       c3                      ret    
 80480f7:       90                      nop
.................

Deleted
()
Ответ на: комментарий от smiley_Dron

Жалко, я удалил. Что-то я S посмотреть не догадался. ;)

drish ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.