-
21. Data: 2010-02-21 20:01:22
Temat: Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
Od: Michoo <m...@v...pl>
Mariusz Marszałkowski pisze:
> Jeśli mamy wartosci case 0,1,2...N to faktycznie switch - case
> powinno byc najwydajniejsze. Teraz to totalnie nie wiem czemu
> kilka lat temu spotkalo mnie troche przykrosci za to ze zaproponowalem
> swich-case zamiast gaszczu if-ow. Tam tez mielismy case od 0 do N.
> Na malym programie bylo szybciej, a na duzym wolniej.
>
Ze 3 lata temu trafiłem na dość ciekawy przypadek - 2 laptopy na
Core2Duo, tylko jeden miał więcej cache a drugi mniej. Po oznaczeniu
funkcji jako inline na pierwszym wydajność wzrosła 10 razy, a na drugim
spadła 10. Kod był mocno "rozgałęziony i na pierwszym się mieścił w
całości w cache, na drugim - nie.
--
Pozdrawiam
Michoo
-
22. Data: 2010-02-21 20:06:44
Temat: Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
Od: "Wiktor S." <wswiktor&poczta,fm@no.spam>
> Moze procesor ma jakis zasob pamieci na statystyki do
> predykcji i na duzym programie ona sie wyczerpuja?
No, nieskończonego przecież mieć nie może.
--
Azarien
-
23. Data: 2010-02-21 20:26:44
Temat: Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
Od: bartekltg <b...@g...com>
On 21 Lut, 20:33, Mariusz Marszałkowski <m...@g...com> wrote:
> On 21 Lut, 19:42, bartekltg <b...@g...com> wrote:> On 21 Lut, 17:35, Mariusz
Marszałkowski <m...@g...com> wrote:
>
> > > Skad wiedziec (bez zmudnych testow i pomiaru czasu) jakie wybrac
> > > elementy skladniowe?
>
> > Ogolnie nie da sie;)
>
> > 1. Miec troche doswiadczenia i szczescia, jak widac na zalaczonym
> > obrazku, u mnie wsk dziala szybciej, u Ciebie if[*]
>
> Niestety to świeta racja w językach wysokiego poziomu
To chyba zalezy od kompilatora.
Puscilem program w g++(qtcreator) i okazal sie znacznie szybszy.
Za bardzo, mimo gorszego (na niewprawne oko) kodu asm.
Sledzctwo ruszylo.. Wnioski: okolo polowy mocy zzera nam funkcja
rand:)
Tu wyniki gdzie r bylo odczytywane z tabelki wczesniej wypelnionej
liczbami losowymi, dla 100000000 powtorzen (tebelki byly znacznie
mniejsze, prosta sztuczka, nieistotne chwilowo).
G++ if= 3187 wsk= 3343 cas= 3109 ifm= 3625
VC++ if= 2984 wsk= 2610 cas= 2796 ifm= 3359
procentowo w ramach konkretnego kmpilatora
102.5 107.5 100.0 116.6
114.3 100.0 107.1 128.7
Rzeczywiscie, gcc znacznie gorzej radzi sobie
w przypadku wskaznikowym.
A co tak naprawde chcailem powiedziec..
okazalo sie, ze i tak najstotniejszy wklad w czas wykonania
mial random. Blisko 40% w g++, ponad polowa w VC,
i to tam mozna duzo zaoszczedzic.
> > 3. Olac takie dylematy gdy wazy sie 0.3% czasu, moze lepiej
> > posiedziec nad lepszym algorytmem. Bawisz sie w jakiegos rodzaju
> > datamining, tam sie duzo da pokombinowac zjanac dane (a nie znajac
> > ich nic nie wyjdzie, ciezko tam wymyslyc metody ogolne).
>
> To mniej/więcej wygląda tak. Jest program ktory rozwiazuje
> kombinatoryczne
> problem o wykladniczej zlozonosci.
[cut]
Tym bardziej spodziewalbym sie koncentrowania sil na pomyslach,
dobrych heurystykach i kombinowaniu, co jest istotne i najczesciej
dziala (czyli to co przed chwila opisales) a nie silowanie sie
z hakerstwem:)
Jak widac z pomiarow, jakbys nie napisal zmianiajac kompilator
dostajesz lepszy wynik:/
> > [*] a w te 20% na rzecz if wzdledem wskaznikow jakos uwierzyc nie
> > moge:)
> proc1 = -1466166003
> czas = 7516
> proc2 = -1466166003
> czas = 9140
5% u mnie, pewnie firmowy komp ma lepsze 'przewidywanie' niz
moj domowy. Jesli roznica potwierdzona pisz ifami, a dodatkowo
opisz problem ludziom z g++, moze wymysla co poprawic.
pozdrawiam
bartekltg
-
24. Data: 2010-02-21 23:53:24
Temat: Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
Od: Mariusz Marszałkowski <m...@g...com>
On 21 Lut, 21:26, bartekltg <b...@g...com> wrote:
> On 21 Lut, 20:33, Mariusz Marszałkowski <m...@g...com> wrote:
>
> > On 21 Lut, 19:42, bartekltg <b...@g...com> wrote:> On 21 Lut, 17:35,
Mariusz Marszałkowski <m...@g...com> wrote:
>
> > > > Skad wiedziec (bez zmudnych testow i pomiaru czasu) jakie wybrac
> > > > elementy skladniowe?
>
> > > Ogolnie nie da sie;)
>
> > > 1. Miec troche doswiadczenia i szczescia, jak widac na zalaczonym
> > > obrazku, u mnie wsk dziala szybciej, u Ciebie if[*]
>
> > Niestety to świeta racja w językach wysokiego poziomu
>
> To chyba zalezy od kompilatora.
> Puscilem program w g++(qtcreator) i okazal sie znacznie szybszy.
> Za bardzo, mimo gorszego (na niewprawne oko) kodu asm.
>
> Sledzctwo ruszylo.. Wnioski: okolo polowy mocy zzera nam funkcja
> rand:)
Skad pobrac darmowego vc? Nie chce piratowac, a sprawdziłbym u siebie
visuala.
Kiedyś robilem dużo testów porównując vc z gcc. Raz był lepszy VC, raz
gcc. GCC
częściej wygrywały Wydaje się, że na prostym i małym kodzie, typu jak
ta procedura
testowa, kompilator microsoftu wygrywał częściej.
Ostatnio mój duży program skompilowali visualem i donieśli że działa o
50% wolniej :)
Nie sprawdzałem dokładnie, ale czesto wydawało mi się, jakby visual
nie przeprowadzał
dobrej optymalizacji dużych procedur po wcieleniu wielu funkcji
inline. GCC zdawał się
szczególnie wygrywać gdy było dużo metod inline.
Pozdrawiam
-
25. Data: 2010-02-22 00:35:11
Temat: Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
Od: "Wiktor S." <wswiktor&poczta,fm@no.spam>
> Skad pobrac darmowego vc? Nie chce piratowac, a sprawdziłbym u siebie
> visuala.
http://www.microsoft.com/express
--
Azarien
-
26. Data: 2010-02-22 00:38:55
Temat: Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
Od: bartekltg <b...@g...com>
On 22 Lut, 00:53, Mariusz Marszałkowski <m...@g...com> wrote:
> Skad pobrac darmowego vc? Nie chce piratowac, a sprawdziłbym u siebie
> visuala.
Ze strony MS? http://www.microsoft.com/express/Downloads/#2008-Vis
ual-CPP
Jedna operacja guglania i jeden klik..
[jak chesz openMP trzeba popracowac, ale w necie sa opisy jak to
zrobic]
> Kiedyś robilem dużo testów porównując vc z gcc. Raz był lepszy VC, raz
> gcc. GCC
> częściej wygrywały Wydaje się, że na prostym i małym kodzie, typu jak
> ta procedura
> testowa, kompilator microsoftu wygrywał częściej.
> Ostatnio mój duży program skompilowali visualem i donieśli że działa o
> 50% wolniej :)
'Doniesli' :) tradycyjnie, watpie w _az_tak_duze_ roznice(*).
Kiedys widzialem fajny ranking kompilatorow (roznych jezykow)
gdzie byly porownywane predkosci. Roznice dla c++ byly,
ale nie tak znaczne.
*) z drugiej strony sam przed chwila podawalem, ze rand
w Twojej petli spowalnial visuala znacznie bardziej niz g++,
jakby tamten rand byl dwa razy wolniejszy.
> Nie sprawdzałem dokładnie, ale czesto wydawało mi się, jakby visual
> nie przeprowadzał
> dobrej optymalizacji dużych procedur po wcieleniu wielu funkcji
> inline. GCC zdawał się
> szczególnie wygrywać gdy było dużo metod inline.
<flejm> na razie mamy 2:0 dla M$ (macierze i ten program)<\flejm>
;-)
pozdr
bartekltg
-
27. Data: 2010-02-22 04:15:52
Temat: Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
Od: Mariusz Marszałkowski <m...@g...com>
On 22 Lut, 01:38, bartekltg <b...@g...com> wrote:
> On 22 Lut, 00:53, Mariusz Marszałkowski <m...@g...com> wrote:
>
> > Skad pobrac darmowego vc? Nie chce piratowac, a sprawdziłbym u siebie
> > visuala.
>
> Ze strony MS?http://www.microsoft.com/express/Downloads/#2008-
Visual-CPP
> Jedna operacja guglania i jeden klik..
>
> [jak chesz openMP trzeba popracowac, ale w necie sa opisy jak to
> zrobic]
>
> > Kiedyś robilem dużo testów porównując vc z gcc. Raz był lepszy VC, raz
> > gcc. GCC
> > częściej wygrywały Wydaje się, że na prostym i małym kodzie, typu jak
> > ta procedura
> > testowa, kompilator microsoftu wygrywał częściej.
> > Ostatnio mój duży program skompilowali visualem i donieśli że działa o
> > 50% wolniej :)
>
> 'Doniesli' :) tradycyjnie, watpie w _az_tak_duze_ roznice(*).
> Kiedys widzialem fajny ranking kompilatorow (roznych jezykow)
> gdzie byly porownywane predkosci. Roznice dla c++ byly,
> ale nie tak znaczne.
Jak nie wrzuci duzej ilosci malych funkcji jako inline to wychodza
takie roznice. Visual niezbyt chetnie robi inline, a po zrobieniu
duzej ilosci inline chyba niezbyt chetnie przeprowadza optymalizacje.
W visualu trzeba stosowac jakies microsoftowe wynalazji typu
__forceinline,
dopiero wtedy zachowuje sie porownywalnie do gcc.
> <flejm> na razie mamy 2:0 dla M$ (macierze i ten program)<\flejm>
Na duzych projektach mam okolo (nie licze dokladnie) 8:2 dla gcc.
Pozdrawiam
-
28. Data: 2010-02-22 13:12:07
Temat: Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
Od: bartekltg <b...@g...com>
On 22 Lut, 05:15, Mariusz Marszałkowski <m...@g...com> wrote:
Uaktualniona tabelka, zamiana w case z 'default:' na '7:'
Lekko przyszpieszylo.
if=32 t= 3015 wsk=32 t= 2625 cas=32 t= 2656 ifm=32 t= 3360
if=32 t= 2969 wsk=32 t= 2594 cas=32 t= 2656 ifm=32 t= 3422
if=32 t= 2969 wsk=32 t= 2609 cas=32 t= 2641 ifm=32 t= 3359
if=32 t= 2985 wsk=32 t= 2625 cas=32 t= 2640 ifm=32 t= 3360
if=32 t= 3000 wsk=32 t= 2609 cas=32 t= 2656 ifm=32 t= 3391
I tabelka ja kompie znajomego, duze nowoczesne bydle,
takze VC
if=32 t= 2313 wsk=32 t= 2078 cas=32 t= 2000 ifm=32 t= 2515
if=32 t= 2313 wsk=32 t= 2094 cas=32 t= 2015 ifm=32 t= 2531
if=32 t= 2328 wsk=32 t= 2109 cas=32 t= 2016 ifm=32 t= 2516
if=32 t= 2328 wsk=32 t= 2094 cas=32 t= 2015 ifm=32 t= 2532
if=32 t= 2344 wsk=32 t= 2094 cas=32 t= 2015 ifm=32 t= 2531
Wiecej cache to i switch przegonil wskazniki.
> W visualu trzeba stosowac jakies microsoftowe wynalazji typu
> __forceinline,
Nawet przy \Ob2 ?
> > <flejm> na razie mamy 2:0 dla M$ (macierze i ten program)<\flejm>
>
> Na duzych projektach mam okolo (nie licze dokladnie) 8:2 dla gcc.
<flejm> a flagi \O2 \Ot \Ob2 byly? <flejm>
;-)
pozdrawiam
bartekltg