eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programminggaszcz if-ow kontra wywolanie przez wskaznik/wirtualne › Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!lub
    lin.pl!uw.edu.pl!newsgate.cistron.nl!newsgate.news.xs4all.nl!194.109.133.84.MIS
    MATCH!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!feeder.news-service.co
    m!postnews.google.com!g19g2000yqe.googlegroups.com!not-for-mail
    From: Mariusz Marszałkowski <m...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: gaszcz if-ow kontra wywolanie przez wskaznik/wirtualne
    Date: Sun, 21 Feb 2010 08:33:16 -0800 (PST)
    Organization: http://groups.google.com
    Lines: 79
    Message-ID: <c...@g...googlegroups.com>
    References: <3...@k...googlegroups.com>
    <2...@1...googlegroups.com>
    <2...@e...googlegroups.com>
    <a...@y...googlegroups.com>
    <a...@o...googlegroups.com>
    <c...@v...googlegroups.com>
    <7...@q...googlegroups.com>
    NNTP-Posting-Host: 89.229.16.190
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    X-Trace: posting.google.com 1266769996 28416 127.0.0.1 (21 Feb 2010 16:33:16 GMT)
    X-Complaints-To: g...@g...com
    NNTP-Posting-Date: Sun, 21 Feb 2010 16:33:16 +0000 (UTC)
    Complaints-To: g...@g...com
    Injection-Info: g19g2000yqe.googlegroups.com; posting-host=89.229.16.190;
    posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
    User-Agent: G2/1.0
    X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.2; pl; rv:1.9.2)
    Gecko/20100115 Firefox/3.6,gzip(gfe),gzip(gfe)
    Xref: news-archive.icm.edu.pl pl.comp.programming:185007
    [ ukryj nagłówki ]

    On 21 Lut, 03:10, bartekltg <b...@g...com> wrote:
    > On 21 Lut, 01:48, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > On 20 Lut, 23:51, bartekltg <b...@g...com> wrote:
    >
    > > > On 20 Lut, 21:42, bartekltg <b...@g...com> wrote:
    >
    > > > Wyniki najlepisze:
    > > > wsk    333   100%
    > > > case   339  101.8%
    > > > if        348   104.5%
    >
    > > Kurka wodna... inny kompilator, inna maszyna no i inne wyniki. No ale
    > > tak to już jest z językami wysokiego poziomu. Może ja walczę z
    > > wiatrakami
    > > próbując optymalizować kod w jezyku wysokiego poziomu.
    >
    > Jakbys pisal w asm zaleznosc od sprzetu byla by podobna.
    >
    > > U mnie machanie myszka zaburzalo wyniki co najwyzej o 0.1%
    > >=dwa rdzenie?
    >
    > > > Kompilator - tradycyjnie VC.
    >
    > > A moze vc jest na tyle sprytny, ze zobaczyl tablice const i
    > > rozwinal inline?
    >
    > Nie. W asm dla wskaznikow jest call na wyliczona funkcje z tabelki.
    >
    > A dalej sie robi ciekawie.
    > Wersja z if nie przeszukuje tego 'binarnie' ale liniowo,
    > sprawdza, czy r==0, jak tak, to wykonuje kod i skacze na koniec,
    > jak nie, przeskakuje do porownanie r==1 i robi to samo.
    > Czyli dla r=7 wykona 8 porownan.
    >
    > Wersja z case jest sprytniejsza. Dla r>6 (default, 7 i wiecej)
    > robi skok, w przeciwnym wypadku robi
    >         jmp     DWORD PTR $LN36@proc3[eax*4]

    GCC robi podobny kod. Ale... zupelnie zapomnialem, bo
    my tu mamy takie wartosci ze mozna adresy skokow warunkowych
    wsadzic do liniowej tablicy. Jakby bylo
    swicht
    case -100:
    case 1000:
    case 666:
    case 50:
    to kompilator by musial zbudowac sterte a nie tablice liniowa i
    zrobic wyszukiwanie binarne.

    > to tablice etykiet w rozpisanym kodzie. Czyli dokaldnie to, co
    > podejrzewam, chciales uzyskac tablicami.
    >
    > Zrobilem jeszcze wersje z recznym wyszukiwaniem binarnym,
    > zawsze mamy 3 porownania.
    > Widac jednak duzo skakania, bo mimo tego, ze 3<8/2, to ta
    > wersja dziala minimalnie dluzej niz liniowe if.
    Gcc tez robi dla if-ow wyszukiwanie liniowe, widocznie wyszukiwanie
    binarne nie oplaca sie dla tak malej ilosci.

    > > > To jest naprawde dziwne:)
    > >Nie az tak dziwne. Nie wiem jak to jest naprawde, ale wyobrazam sobie,
    >
    > Tu zupelnie nie o to chodzi. Nie siedze az tak gleboko, ale
    > czy case nie mozna traktowac jako lukier syntaktyczny na taka
    > drabinke if? W ten sposob moze byc realizowana. Czemu kompilator
    > mialby ja realizowac gorzej, zwlaszcza, ze to najprostrzy sposob.
    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.

    > Przedzej podejrzewam, ze gcc chcialo zbyt dobrze i za bardzo
    > 'zoptymalizowalo', tworzac, jak ja  w tym watku, wyszukiwanie binarne.
    Wyglada na to ze w tym przykladzie gcc robi dokladnie to samo co VC .
    Pozostaje jeszce kwestia procesora.

    Pozdrawiam

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: