eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingAlgorytmiczny problem lamera... :-) › Re: Algorytmiczny problem lamera... :-)
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Algorytmiczny problem lamera... :-)
    Date: Sun, 12 Oct 2014 21:03:54 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 111
    Message-ID: <m1ejaq$qkb$1@node2.news.atman.pl>
    References: <1...@g...com>
    <m0s8le$lfc$1@node2.news.atman.pl>
    <4...@g...com>
    <m18osf$4gt$1@node1.news.atman.pl>
    <2...@g...com>
    <m1cdr5$18m$1@node1.news.atman.pl>
    <1...@g...com>
    <m1dmig$8km$1@node1.news.atman.pl>
    <a...@g...com>
    <m1e6hq$pik$1@node1.news.atman.pl>
    <1...@g...com>
    NNTP-Posting-Host: 89-73-81-145.dynamic.chello.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1413140634 27275 89.73.81.145 (12 Oct 2014 19:03:54 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sun, 12 Oct 2014 19:03:54 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101
    Thunderbird/31.1.2
    In-Reply-To: <1...@g...com>
    Xref: news-archive.icm.edu.pl pl.comp.programming:206746
    [ ukryj nagłówki ]

    On 12.10.2014 19:53, M.M. wrote:
    > On Sunday, October 12, 2014 5:25:46 PM UTC+2, bartekltg wrote:
    >> On 12.10.2014 13:39, M.M. wrote:
    >> Trochę porównujesz inne rzeczy.
    >> Test odpalasz 10 razy. Ale pamięć dla tablic alokujesz tylko
    >> raz, dla kontenerów 10 razy:>
    > O to chodzi aby nie porownywac takich samych procedur - zart :D
    > Powiedzmy ze porownuje wszelka wygode programowania na szablonach z
    > metlikiem wskaznikow.
    >
    >> BTW,
    >> static int data[CNT_ROWS][CNT_COLS];
    >> Zdecydowanie nie leży na stosie ;-) Przez to static.
    > Zgadzam sie.
    >
    >> Znasz rozmiary statycznie, a jednak nie używasz resize.
    >> przez co alokujesz to co trzeba, ale też polowę, ćwiartkę...
    > Porownuje tez listy vs wektory. Lista powinna byc sprytniejsza.

    A niby czemu? Jeśli dlatego, że to powiązane kawałki tablic,
    odbije się to na późniejszej wydajności dostępu.
    http://en.wikipedia.org/wiki/Unrolled_linked_list (albo drzewo)

    Skoro wiemy, ile danych będzie, lepiej podpowiedzieć to kontenerowi.
    Nawet nie trzeba wiedzieć dokładnie, po to jest "reserve".

    >> Rules jako tablica tablic możę bie być najlepsza? I tak każda
    >> reguła jest inaczej używana, nie wsadzisz więc tego w pętlę.
    >> Czemu nie struktura? [update, zaminiłem ma pair, przyszpieszenie
    >> znikome]
    > Hmmm moze, nie wiem.
    >
    >> > for( int i=0 ; i<LOOPS ; i++ ) {
    >> > for( int i=0 ; i<CNT_ROWS ; i++ ) {
    >> Nie rób tak ;-)
    > Poniewaz taka sama nazwa zmiennej? Lubie tak robic, choc
    > przyznaje, ze czasami tez mnie to drazni. Jednak generalnie dla
    > programisty mniej zmiennych do analizy, a dla kompilatora... tez
    > mniej zmiennych do optymalizowania.

    Jak mniej zmiennych? Masz zmienną 'i' z pętli zewnętrznej oraz zmienna
    'i' z pętli wewnętrznej. To, że pierwsze 'i' nie jest dostępne dla
    Ciebie przez nazwę, nie znaczy, że nie istnieje, kompilator ma tyle
    samo zmiennych:) To jedynie pułapka na programistę.


    >> Wrzuciłem napisaną przez siebie wersję na vector.
    >> Ciut wolniejsza, ale nie aż tak;-)
    > Dzieki wielkie!
    >
    >
    >> testRaw
    >> 9.14884s sum=-191116600
    >> testRaw2
    >> 6.54265s sum=-191116600
    >> testVectBrt
    >> 10.0932s sum=-191116600
    >> testVect2Brt
    >> 9.03653s sum=-191116600
    >
    > Ciekawe dlaczego u Ciebie testRaw2 taki szybki wypadl. U mnie byl
    > ciut wolniejszy. Z powodu innego sprzetu, kompilatora, opcji
    > kompilacji?

    -O3 -std=c++11 -march=native -mtune=native
    Różnica jest też na -O2, gdy użyję
    -fprofile-generate
    -fprofile-use
    na samym O2 nie ma. Do asma nie zaglądałem.
    Dlaczego aż o tyle szybszy, pojęcia nie mam;-)


    >> long long testVector()
    >> {

    > Musze sprawdzic, czy vector z stdliba te ma constBegin, albo metode
    > 'at' zamiast operatora indeksowania[].

    Ma.
    At() to to samo co [] + sprawdzanie zakresu (jeśli jest poza, rzuca
    specjalny wyjątek).

    > W QT metoda at jest duzo szybsza
    > od operatora[].

    Dziwne to QT... ;-)



    >> long long testVector2()
    >> {
    > Hmmmm, sprytniejsze.

    Główne przyspieszenie jest jednak z niemaczania struktury:)


    A, wersja indeksowa/wskaźnikowa ma taką zaletę, że łatwiej
    (nie każde omp i kompilator wspiera iteratory) zrównoleglić
    przez openmp.

    Samo dodanie do testRaw

    #pragma omp parallel for reduction(+:sum) //<-----
    for( int i=0 ; i<CNT_ROWS ; i++ ) {
    zbiło wynik do 5s (4 rdzenie).


    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: