eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Algorytmiczny problem lamera... :-)
Ilość wypowiedzi w tym wątku: 23

  • 21. Data: 2014-10-12 21:03:54
    Temat: Re: Algorytmiczny problem lamera... :-)
    Od: bartekltg <b...@g...com>

    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



  • 22. Data: 2014-10-12 22:03:06
    Temat: Re: Algorytmiczny problem lamera... :-)
    Od: "M.M." <m...@g...com>

    On Sunday, October 12, 2014 9:03:54 PM UTC+2, bartekltg wrote:
    > 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)

    Mnie tez Twoje uzasadnienie przekonuje, osobiscie glebiej sie nie
    iteresowalem, wiec nie wiem dlaczego. W testach zwykle QList jest
    minimalnie szybsze. W dokumentacji QList czytamy:
    For most purposes, QList is the right class to use. Its index-based API is more
    convenient than QLinkedList's iterator-based API, and it is usually faster than
    QVector because of the way it stores its items in memory. It also expands to less
    code in your executable.


    > Skoro wiemy, ile danych będzie, lepiej podpowiedzieć to kontenerowi.
    > Nawet nie trzeba wiedzieć dokładnie, po to jest "reserve".
    Tak, też uważam że same allokacje już są wolne, a w przypadku wektora
    może jeszcze dojść do kopiowania danych, itd.

    > Jak mniej zmiennych?
    Wyrazilem sie nieprecyzyjnie. Chdzilo mi o ilosc zmiennych widocznych w
    poszczegolnych linijkach kodu. Jesli jedna zmienna sobie przeslonie, to
    mam pewnosc, ze tej przeslonietej przez przypadek nie uzyje (zamiast
    przeslaniajacej). Moim zdaniem, jest z tego ciut wiecej pozytku niz szkod.

    > 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:)
    Tak tak, nieprecyzyjnie sie wyrazilem, zmienne sa oczywiscie dwie.

    > To jedynie pułapka na programistę.
    Co do tego nie zgadzam sie. Kompilator i programista maja podpowiedz, ze
    jedna ze zmiennych jest w danym fragmencie kodu nieuzywana.


    > 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;-)
    I dobrze, szkoda czasu na zagladanie do asma :D

    Generalnie jest nauka z tego taka, ze nawet dzisiejszym, dobrze
    optymalizujacym kompilatorom, przydaja sie rozne podpowiedzi ze
    strony programisty. Takimi podpowiedziami moze byc slowo const,
    sam wskaznik zamiast zmiennej indeksujacej, przeslanianie
    nieuzywanych zmiennych...


    > Ma.
    > At() to to samo co [] + sprawdzanie zakresu (jeśli jest poza, rzuca
    > specjalny wyjątek).
    Bede musial sie zainteresowac tym STLem.


    > Dziwne to QT... ;-)
    Nie wiem, ja lubie QT :)

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


    > A, wersja indeksowa/wskaźnikowa ma taką zaletę, że łatwiej
    > (nie każde omp i kompilator wspiera iteratory) zrównoleglić
    > przez openmp.
    Nie uzywalem od pewnego czasu OpenMP, ale tez tak mi sie cos
    przypomina.


    > 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).
    OpenMP bardzo czesto umozliwia zrownoleglenie kodu przy zachowaniu
    maksymalnej przejrzystosci.


    Pozdrawiam


  • 23. Data: 2014-10-24 10:55:58
    Temat: Re: Algorytmiczny problem lamera... :-)
    Od: m...@g...com

    Zboczeńcy... :-)

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: