eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
Ilość wypowiedzi w tym wątku: 28

  • 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

strony : 1 . 2 . [ 3 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: