* [devel] perlbench: -Os vs -O2
@ 2006-05-22 17:57 Alexey Tourbin
2006-05-23 7:15 ` Anton Farygin
2006-05-23 8:57 ` Led
0 siblings, 2 replies; 7+ messages in thread
From: Alexey Tourbin @ 2006-05-22 17:57 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 5690 bytes --]
Пока окончательно не забыл.
В perl58.spec есть такой комментарий:
# Custom optimization. This will affect all perl binary modules. Why really?
# Because the whole perlapi(1) is heavily based on macros. Here is an example:
# $ echo "SvPV(x,y)" | gcc -include /usr/lib/perl5/i386-linux/CORE/perl.h -E - | tail -1
# (((x)->sv_flags & (0x00040000)) == 0x00040000 ? ((y = ((XPV*) (x)->sv_any)->xpv_cur), ((XPV*) (x)->sv_any)->xpv_pv) : Perl_sv_2pv_flags(my_perl, x,&y,2))
%define _optlevel s
%add_optflags -D_GNU_SOURCE -momit-leaf-frame-pointer
Теперь количественные характеристики эксперимента. За основу был взят
пакет perlbench http://search.cpan.org/dist/perlbench/ Этот пакет с
высокой точностью замеряет время выполнения некоторых примитивов в
libperl.
Собирался perl-5.8.7 на прошлогоднем сизифе. Замеры произведены на моем
моем новом компьютере, который мне подарил Дима Левин. Процессор AMD
Athlon(tm) 64 Processor 3200+, 2050.195 MHz, 512 KB cache size, 4108.95 bogomips.
Результаты для -O2:
arith/mixed 34
arith/trig 42
array/copy 113
array/foreach 39
array/index 55
array/pop 57
array/shift 58
array/sort-num 70
array/sort 36
call/0arg 64
call/1arg 62
call/2arg 56
call/9arg 91
call/empty 42
call/fib 72
call/method 65
call/wantarray 87
hash/copy 83
hash/each 81
hash/foreach-sort 43
hash/foreach 52
hash/get 35
hash/set 37
loop/for-c 38
loop/for-range-const 73
loop/for-range 48
loop/getline 63
loop/while-my 45
loop/while 43
re/const 40
re/w 41
startup/fewmod 8
startup/lotsofsub 20
startup/noprog 11
string/base64 110
string/htmlparser 90
string/index-const 76
string/index-var 68
string/ipol 47
string/tr 54
AVERAGE 56
Результаты для -Os:
arith/mixed 38
arith/trig 50
array/copy 115
array/foreach 46
array/index 60
array/pop 69
array/shift 69
array/sort-num 87
array/sort 48
call/0arg 71
call/1arg 69
call/2arg 65
call/9arg 103
call/empty 45
call/fib 74
call/method 70
call/wantarray 97
hash/copy 103
hash/each 91
hash/foreach-sort 51
hash/foreach 63
hash/get 42
hash/set 44
loop/for-c 41
loop/for-range-const 75
loop/for-range 50
loop/getline 76
loop/while-my 49
loop/while 45
re/const 60
re/w 49
startup/fewmod 10
startup/lotsofsub 25
startup/noprog 15
string/base64 135
string/htmlparser 108
string/index-const 99
string/index-var 85
string/ipol 54
string/tr 67
AVERAGE 65
Большее число avarage соответствует более быстрому перлу. При сборке
с -Os прирост производительности более 10%.
Далее, руководствуясь некоторыми соображениями, я собрал pp_hot.o с
оптимизацией -O2, а всё остальное с -Os (в файле pp_hot.o находятся
наиболее часто используемые внутренние функции). Вот результат:
arith/mixed 37
arith/trig 49
array/copy 119
array/foreach 43
array/index 64
array/pop 60
array/shift 62
array/sort-num 74
array/sort 41
call/0arg 68
call/1arg 66
call/2arg 62
call/9arg 98
call/empty 46
call/fib 73
call/method 67
call/wantarray 88
hash/copy 99
hash/each 85
hash/foreach-sort 47
hash/foreach 58
hash/get 39
hash/set 44
loop/for-c 41
loop/for-range-const 79
loop/for-range 51
loop/getline 76
loop/while-my 47
loop/while 46
re/const 52
re/w 52
startup/fewmod 10
startup/lotsofsub 24
startup/noprog 13
string/base64 129
string/htmlparser 105
string/index-const 89
string/index-var 80
string/ipol 51
string/tr 66
AVERAGE 63
Видно, что результат несколько ухудшился. Отсюда можно сделать вывод,
что практически без исключений весь перловый код выгоднее компилировать
с -Os, а не с -O2.
Своего рода объяснение полученным результатам можно прочитать здесь:
http://www.faqs.org/docs/artu/ch12s03.html "The most effective way to
optimize your code is to keep it small and simple." Это касается в том
числе и бинарного кода. (Далее приводится правдоподобное с технической
точки зрения объяснение: "Processor cycles are almost free", а любое
непопадание в кеш сводит на нет всё оптимизацию по переупорядочиванию
инструкций).
[-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel] perlbench: -Os vs -O2
2006-05-22 17:57 [devel] perlbench: -Os vs -O2 Alexey Tourbin
@ 2006-05-23 7:15 ` Anton Farygin
2006-05-23 7:48 ` Victor Forsyuk
2006-05-23 10:39 ` Igor Zubkov
2006-05-23 8:57 ` Led
1 sibling, 2 replies; 7+ messages in thread
From: Anton Farygin @ 2006-05-23 7:15 UTC (permalink / raw)
To: devel
Alexey Tourbin wrote:
>
> Своего рода объяснение полученным результатам можно прочитать здесь:
> http://www.faqs.org/docs/artu/ch12s03.html "The most effective way to
> optimize your code is to keep it small and simple." Это касается в том
> числе и бинарного кода. (Далее приводится правдоподобное с технической
> точки зрения объяснение: "Processor cycles are almost free", а любое
> непопадание в кеш сводит на нет всё оптимизацию по переупорядочиванию
> инструкций).
Кстати, может быть нам тоже стоит по умолчанию всё собирать с -Os ?
Rgds,
Rider
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel] perlbench: -Os vs -O2
2006-05-23 7:15 ` Anton Farygin
@ 2006-05-23 7:48 ` Victor Forsyuk
2006-05-23 10:39 ` Igor Zubkov
1 sibling, 0 replies; 7+ messages in thread
From: Victor Forsyuk @ 2006-05-23 7:48 UTC (permalink / raw)
To: ALT Devel discussion list
On Tue, May 23, 2006 at 11:15:47AM +0400, Anton Farygin wrote:
> Alexey Tourbin wrote:
> >
> > Своего рода объяснение полученным результатам можно прочитать здесь:
> > http://www.faqs.org/docs/artu/ch12s03.html "The most effective way to
> > optimize your code is to keep it small and simple." Это касается в том
> > числе и бинарного кода. (Далее приводится правдоподобное с технической
> > точки зрения объяснение: "Processor cycles are almost free", а любое
> > непопадание в кеш сводит на нет всё оптимизацию по переупорядочиванию
> > инструкций).
>
> Кстати, может быть нам тоже стоит по умолчанию всё собирать с -Os ?
+1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel] perlbench: -Os vs -O2
2006-05-22 17:57 [devel] perlbench: -Os vs -O2 Alexey Tourbin
2006-05-23 7:15 ` Anton Farygin
@ 2006-05-23 8:57 ` Led
2006-05-23 9:30 ` Alexey Tourbin
1 sibling, 1 reply; 7+ messages in thread
From: Led @ 2006-05-23 8:57 UTC (permalink / raw)
To: ALT Devel discussion list
В сообщении от 22 мая 2006 20:57 Alexey Tourbin написал(a):
> Своего рода объяснение полученным результатам можно прочитать здесь:
> http://www.faqs.org/docs/artu/ch12s03.html "The most effective way to
> optimize your code is to keep it small and simple." Это касается в том
> числе и бинарного кода. (Далее приводится правдоподобное с технической
> точки зрения объяснение: "Processor cycles are almost free", а любое
> непопадание в кеш сводит на нет всё оптимизацию по переупорядочиванию
> инструкций).
Надо бы проверить ещё на CPU с меньшим кешем (128k/256k), прежде чем делать
подобный вывод ИМХО.
--
Led.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel] perlbench: -Os vs -O2
2006-05-23 8:57 ` Led
@ 2006-05-23 9:30 ` Alexey Tourbin
0 siblings, 0 replies; 7+ messages in thread
From: Alexey Tourbin @ 2006-05-23 9:30 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 1248 bytes --]
On Tue, May 23, 2006 at 11:57:52AM +0300, Led wrote:
> В сообщении от 22 мая 2006 20:57 Alexey Tourbin написал(a):
> > Своего рода объяснение полученным результатам можно прочитать здесь:
> > http://www.faqs.org/docs/artu/ch12s03.html "The most effective way to
> > optimize your code is to keep it small and simple." Это касается в том
> > числе и бинарного кода. (Далее приводится правдоподобное с технической
> > точки зрения объяснение: "Processor cycles are almost free", а любое
> > непопадание в кеш сводит на нет всё оптимизацию по переупорядочиванию
> > инструкций).
>
> Надо бы проверить ещё на CPU с меньшим кешем (128k/256k), прежде чем делать
> подобный вывод ИМХО.
На celeron 333 несколько лет назад наблюдалась такая же картина.
Нет оснований полагать, что на CPU с меньшим кешем результат будет
отличаться в пользу -O2.
Напротив, с очень большим кешем (в котором свободно осядет часть ядра,
часть glibc и часть RSS всех выполняющихся процессов) возможны варианты.
(Я надеюсь, что понятно, что приведенные цифры справедливы только для
перла; в перле используется много макросов, которые каждый раз
разворачиваются в длинные портянки; для других приложений выигрыш от -Os
может быть менее выраженным.)
[-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel] perlbench: -Os vs -O2
2006-05-23 7:15 ` Anton Farygin
2006-05-23 7:48 ` Victor Forsyuk
@ 2006-05-23 10:39 ` Igor Zubkov
2006-05-23 10:54 ` Alexey Tourbin
1 sibling, 1 reply; 7+ messages in thread
From: Igor Zubkov @ 2006-05-23 10:39 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 711 bytes --]
В сообщении от 23 мая 2006 10:15 Anton Farygin написал(a):
> Alexey Tourbin wrote:
> > Своего рода объяснение полученным результатам можно прочитать здесь:
> > http://www.faqs.org/docs/artu/ch12s03.html "The most effective way to
> > optimize your code is to keep it small and simple." Это касается в том
> > числе и бинарного кода. (Далее приводится правдоподобное с технической
> > точки зрения объяснение: "Processor cycles are almost free", а любое
> > непопадание в кеш сводит на нет всё оптимизацию по переупорядочиванию
> > инструкций).
>
> Кстати, может быть нам тоже стоит по умолчанию всё собирать с -Os ?
А развне у нас перловые пакеты не с -Os собираются?
--
Marilyn Manson - Mister Superstar
[-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel] perlbench: -Os vs -O2
2006-05-23 10:39 ` Igor Zubkov
@ 2006-05-23 10:54 ` Alexey Tourbin
0 siblings, 0 replies; 7+ messages in thread
From: Alexey Tourbin @ 2006-05-23 10:54 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 895 bytes --]
On Tue, May 23, 2006 at 01:39:19PM +0300, Igor Zubkov wrote:
> В сообщении от 23 мая 2006 10:15 Anton Farygin написал(a):
> > Alexey Tourbin wrote:
> > > Своего рода объяснение полученным результатам можно прочитать здесь:
> > > http://www.faqs.org/docs/artu/ch12s03.html "The most effective way to
> > > optimize your code is to keep it small and simple." Это касается в том
> > > числе и бинарного кода. (Далее приводится правдоподобное с технической
> > > точки зрения объяснение: "Processor cycles are almost free", а любое
> > > непопадание в кеш сводит на нет всё оптимизацию по переупорядочиванию
> > > инструкций).
> >
> > Кстати, может быть нам тоже стоит по умолчанию всё собирать с -Os ?
> А развне у нас перловые пакеты не с -Os собираются?
Да, все перловые c -Os. На самом деле все перловые пакеты собираются
такой опитимизацией, с которой был собран сам перл.
[-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2006-05-23 10:54 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-05-22 17:57 [devel] perlbench: -Os vs -O2 Alexey Tourbin
2006-05-23 7:15 ` Anton Farygin
2006-05-23 7:48 ` Victor Forsyuk
2006-05-23 10:39 ` Igor Zubkov
2006-05-23 10:54 ` Alexey Tourbin
2006-05-23 8:57 ` Led
2006-05-23 9:30 ` Alexey Tourbin
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git