eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingdalsza optymalizacja › Re: dalsza optymalizacja
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: " M.M." <m...@N...gazeta.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: dalsza optymalizacja
    Date: Sun, 1 Apr 2012 17:37:09 +0000 (UTC)
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 107
    Message-ID: <jla3o5$hv7$1@inews.gazeta.pl>
    References: <jl73ie$b6f$1@inews.gazeta.pl> <jl9aaf$326$1@inews.gazeta.pl>
    <jl9al3$ee7$1@inews.gazeta.pl> <jl9dfl$a80$1@inews.gazeta.pl>
    <jl9e7f$epj$1@node2.news.atman.pl> <jl9ftm$j00$1@inews.gazeta.pl>
    <jl9h5r$i0o$1@node2.news.atman.pl> <jl9ju9$o28$1@inews.gazeta.pl>
    <jl9nc4$oha$1@node2.news.atman.pl> <jl9pbd$s10$1@inews.gazeta.pl>
    <jl9pjl$qts$1@node2.news.atman.pl> <jl9udd$jka$1@inews.gazeta.pl>
    <jla0s1$37m$1@node2.news.atman.pl>
    NNTP-Posting-Host: localhost
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1333301829 18407 172.20.26.236 (1 Apr 2012 17:37:09 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sun, 1 Apr 2012 17:37:09 +0000 (UTC)
    X-User: mariotti
    X-Forwarded-For: 89.229.34.123
    X-Remote-IP: localhost
    Xref: news-archive.icm.edu.pl pl.comp.programming:196514
    [ ukryj nagłówki ]

    bartekltg <b...@g...com> napisał(a):

    > W dniu 2012-04-01 18:06, M.M. pisze:
    > > bartekltg<b...@g...com> napisał(a):
    > >
    > >> To nie dawaj złych przykładów ;)
    > > Oryginalny przykład jest zbyt zagmatwany, chciałem uprościć jakoś :)
    > >
    > >>> W meritum chodzilo o to czy proste operacje arytmetyczne (jak
    > >>> np. x = x + 1) na typie double sa istotnie wolniejsze niz na
    > >>> typie int, albo long.
    > >>
    > >> Wyciąłeś test odpowiadają…cy na to pytanie.
    > > Nie wiem jak ten test należy czytać.
    > > 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
    > >
    > > CzyĹźby pierwsza kolumna to czas inkrementacji na typie int,
    > > a trzecia kolumna na typie double? To by sugerowało że
    >
    > Tak.
    >
    > > nie warto się bawić, bo jeszcze dochodzi czas pętli, indeksowania i
    > > dostępu do pamięci.
    >
    > Nie, to czas całego kodu 'testowego'. Pętla, random etc.
    Ok, czyli sie nie oplaca. Wyglada na to ze dzisiejsze procesory
    robia inkrementacje na typie double prawie tak samo szybko jak
    na typie int. Moj kod pomiarowy na dole.


    > I mówię na serio. Jeśli w kodzie masz takie losowanko
    > 'na którym klocku zrobić operację', średnio operacji
    > na klocek jest dużo i są nieżależne, to nie rób tego
    > w ten sposób. wygwenerpowanie 1000 liczb z penwgo rozkładu,
    > aby z góry wiedzieć, ile operacji wykonać jest znacznie
    > szybsze niż milion prostych randomów.
    Zgadza się.

    W oryginalnym kodzie mam coś innego. Mam dane zero-jedynkowe i buduję z nich
    układ równań normalnych. Dane mam upakowane. Upakowanie polega
    na tym że zamiast zer i jedynek trzymam numery pozycji na których
    są jedynki. Dane są trudne, mają znamiona funkcji losowej, dlatego
    w przykładzie dałem rand. Mniej/więcej coś takiego:

    for( int i=0 ; i<N ; i++ )
    for( int j=i ; j<N ; j++ )
    macierz[ jedynki[i] * rozmiar_wiersza + jedynki[j] ] ++;

    Pozdrawiam



    Kod pomiarowy:

    #include <cstdio>
    #include <cstdlib>
    #include <ctime>

    #define BASE_SIZE (1000)
    #define BASE_ITS (200000000)

    int test_int() {
    static int data[BASE_SIZE];
    for( int i=0 ; i<BASE_ITS ; i++ )
    data[rand()%BASE_SIZE] ++ ;
    int max = 0;
    for( int i=0 ; i<BASE_SIZE ; i++ )
    if( max < data[i] )
    max = data[i];
    return max;
    }

    double test_double() {
    static double data[BASE_SIZE];
    for( int i=0 ; i<BASE_ITS ; i++ )
    data[rand()%BASE_SIZE] ++ ;
    double max = 0;
    for( int i=0 ; i<BASE_SIZE ; i++ )
    if( max < data[i] )
    max = data[i];
    return max;
    }


    int main(int argc, char *argv[]) {
    clockid_t start;
    srand(123);

    start = clock();
    int max_i = test_int();
    printf("max = %d test int = %d\n" , max_i ,
    (int)((clock()-start)/(CLOCKS_PER_SEC/1000)) );

    start = clock();
    double max_d = test_double();
    printf("max = %lf test double = %d\n", (double)max_d,
    (int)((clock()-start)/(CLOCKS_PER_SEC/1000)) );

    return 0;
    }


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

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: