eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingdalsza optymalizacjaRe: dalsza optymalizacja
  • Data: 2012-04-01 16:05:54
    Temat: Re: dalsza optymalizacja
    Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2012-04-01 15:07, M.M. pisze:
    > bartekltg<b...@g...com> napisał(a):
    >
    >> W dniu 2012-04-01 13:58, M.M. pisze:
    >>
    >>>
    >>> Raczej tak:
    >>> double x[1000];
    >>> for( i=0 ; i<1000000 ; i++ )
    >>> x[rand()%size] ++;
    >>>
    >>> Na:
    >>
    >> tutaj jeszcze konwersja w drugą stronę.
    >>
    >>> int tmp[1000];
    >>> for( i=0 ; i<1000000 ; i++ )
    >>> tmp[rand()%size] ++;
    >>>
    >>> double x[1000];
    >>> for( i=0 ; i<1000 ; i++ )
    >>> x[i] = (double)tmp[i];
    >>>
    >>> Dłuższe obliczenia na intach i potem jedna konwersja na doubla.
    >>> Problem w tym że obliczenia na intach są trywialne, tylko inkrementacja.
    >>
    >> I co Cię powstrzymuje przed odpaleniem tego z pomiarem czasu;)
    >>
    >> BTW, http://www.youtube.com/watch?v=gENVB6tjq_M
    >>
    >> Chcesz rozdać milion kulek w tysiąc otworków.
    >> To tego wystarczy ~1000 losowań i tyle dodawań
    >> (+ coś tego rzędu obliczeń związanych z rozkładem
    >> Poissona), a pewnie da się i lepiej.
    >>
    >> Podpowiadać dalej?
    >
    > Chyba zakręciłem totalnie jaka jest istota problemu i nikt
    > nie zrozumiał, sorry :D
    >
    > Chyba mogłem zapytać prościej: czy inkrementacja intów jest
    > szybsza od inkrementacji doubli? Dane są wybierane w przybliżeniu
    > z losowych adresow w pamięci, czyli nie chodzi o inkrementację jednej
    > zmiennej ktora jest ciagle w rejestrze procesora. Tablice z danymi

    Ależ rozumiem. Za to nie zrozumiałeś odpowiedzi:(

    > mieszcza sie w L2, ale nie mieszcza sie w L1.


    @pytanie o szybkość: Mówiłem, sprawdź.

    int:1.682000 i2f:0.000000 double:1.766000 f2i:0.000000
    int:1.688000 i2f:0.000000 double:1.794000 f2i:0.000000
    int:1.696000 i2f:0.000000 double:1.773000 f2i:0.000000
    int:1.691000 i2f:0.000000 double:1.765000 f2i:0.000000

    W praktyce nie ma znaczenia. Przypadek sferyczniesymetryczny
    sugeruj, że mozesz tak zyskać kilka %, ale w prawdziwym
    programie niekoniecznie wyjdzie to na zdrowie.


    A co do meritum, chcesz rozdać milion "+1" dla 1000 obiektów.
    Dokładnie to robi Twój kod. Możesz to zrobić rząd lub dwa szybciej
    używając 'matematyki' zamiast brutalnie siły. Teraz jasne?

    pzdr
    bartekltg


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: