eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › no to ile czasu matlab mnozy te duze macierze?
Ilość wypowiedzi w tym wątku: 34

  • 11. Data: 2010-01-24 16:33:46
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 24 Sty, 13:45, Mariusz Marszałkowski <m...@g...com> wrote:
    > On 24 Sty, 11:18, thrunduil <t...@w...pl> wrote:
    >
    > > On 23 Sty, 11:37, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > > Wiec na razie bazuje na tym, ze moj kod (napisany na kolanie)
    > > > dziala 6s na intel atom N270, a matlab 2.5s na niewiadomym
    > > > sprzecie.
    >
    > > dany kod dla AxB gdzie A,B = 1024x1024, czas = 2.13 sec.
    > > matlab dla AxB, czas = .168 sec
    >
    > > czyli matlab jest 12x szybszy.
    >
    > Jak był kod kompilowany?
    > Jaka maszyna?
    > Pozdrawiam

    Mam takie wyniki:
    Matlab 0.68
    Ten kod który zamieściłem 2.25
    Czyli matlab jest szybszy 3.3 razy.

    Pozdrawiam




  • 12. Data: 2010-01-25 05:54:16
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: bartekltg <b...@g...com>

    On 24 Sty, 17:33, Mariusz Marszałkowski <m...@g...com> wrote:

    > Mam takie wyniki:
    > Matlab 0.68
    > Ten kod który zamieściłem 2.25
    > Czyli matlab jest szybszy 3.3 razy.


    Pod wplywem linkow z poprzedniego watku zaczalem troszke
    eksperymentowac,
    wyniki dojrzaly chyba do wyjscia na swiat

    Dla uproszczenia sobie zycia testuje tylko macierze o rozmierze
    bedacym wielokrotnoscia 192 (NWW(64,24)). Wyniki wrzucam dla 960.

    Mierzone w kilka razy w petli, biore najlepszy wynik (praktycznie sie
    nie roznily),
    watek mial ustawione priorytet real time.

    Indeksowanie: C(i,,j) = B(i,k)*C(k,j)
    lub w rozwinieciu na c:
    C[i*N+j] += A[i*N+k]*B[k*N+j]; (*)


    1. Algorytm naiwny, ijk
    46.6s

    2. Prosta sztuczka, w ostatniej petli chcemy isc po kolei po pamieci,
    a nie skakac. Patrzymy na (*) i ustalamy koljnosc petli na ikj.
    Wynik, 10.23s $ razy lepiej.

    3. Kod z konkursu. Wywalilem czesc wielowatkowa, bo mam jeden rdzen.
    Korzysta on tam z fortranowskiego sposobu zapisu macierzy,
    ale to nie ma znaczenia dla szybkosci. Wkladajac mu macierze
    w odwrotnej kolejnosci dostajemy to samo (bo (B' *A')'=A*B)
    Jesli to ja czegos nie popsulem:), wynik niewiele lepszy:
    9.644s.

    4. Wstepna transpozycja. Kolega machnal. Przed wykonaniem
    wlasciwego sumowania przepisujemy macierz do tymczasowej
    tablicy i tranponujemy ja. Kolejnosc ijk.
    Kolejne przyszpieszenie 8.177s

    5. Mnozymy blokami wielkosci SNxSN a bloki metoda ikj.
    Kod niewiele mniej czytelny niz w ikj. W zaleznosci
    od SN
    8: 3.572 16: 3.262
    24: 2.771 32: 2.634
    48: 2.725 64: 2.574
    Znaczna poprawa. Zeszlismy ponizej 2.6s, 18 razy lepiej niz naiwnie.

    6. Kod z http://lwn.net/Articles/255364/ trzeci w 6.2.1
    Ten sam algorytm, napisany (wg autora) tak, aby podpowiedziec
    kompilaorowi
    jak ma optymalizowac.
    W zaleznosci od SN:
    8: 4.634 16: 3.081
    24: 2.624 32: 2.418
    48: 2.206 64: 2.189
    Ponizej 2.2s. Kilkanascie procent lepiej.

    7. MATLAB.
    piorytet wysoki, kilka prob, wybrana najlepsza
    1.48s
    30 razy lepiej niz naiwnie, nadal niepomijalnie szybciej niz
    to, co udalo mi sie bez przesadnego siedzenia(1.7razy wolniej)
    nad kodem lub wyszukiwania(1.5 razy wolniej) w sieci wycisnac z c++.


    Jako bonus, kody (tylko moje, a noz cos poknocilem):

    pozdrawiam
    bartekltg

    template <class T,int SM> void dgemm_bikj(T *A, T *B, T *C, int N)
    {
    int i,j,k,ii,kk,jj;

    for (i = 0; i < N; i+=SM)
    for (k = 0; k < N; k+=SM)
    for (j = 0; j < N; j+=SM)
    for (ii = i; ii < i+SM; ii++)
    for (kk = k; kk < k+SM; kk++)
    for (jj = j; jj < j+SM; jj++)
    C[ii*N+jj] += A[ii*N+kk]*B[kk*N+jj];
    }

    void dgemm_ikj(double *A, double *B, double *C, int N)
    {
    int i,j,k;
    for (i = 0; i < N; i++)
    for (k = 0; k < N; k++)
    for (j = 0; j < N; j++)
    C[i*N+j] += A[i*N+k]*B[k*N+j];
    }

    void dgemm_ijk(double *A, double *B, double *C, int N)
    {
    int i,j,k;
    for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
    for (k = 0; k < N; k++)
    C[i*N+j] += A[i*N+k]*B[k*N+j];
    }


  • 13. Data: 2010-01-25 11:47:13
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 25 Sty, 06:54, bartekltg <b...@g...com> wrote:
    > On 24 Sty, 17:33, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > Mam takie wyniki:
    > > Matlab 0.68
    > > Ten kod który zamieściłem 2.25
    > > Czyli matlab jest szybszy 3.3 razy.
    >
    > 4. Wstepna transpozycja. Kolega machnal. Przed wykonaniem
    > wlasciwego sumowania przepisujemy macierz do tymczasowej
    > tablicy i tranponujemy ja. Kolejnosc ijk.
    > Kolejne przyszpieszenie 8.177s

    Czy wstępna transpozycja to jest to co ja zapisałem, czy chodzi
    o innego kolegę? :) U mnie działa wstępna transpozycja 3.3 razy
    wolniej niż matlab.

    Jak były kompilowane procedury? Na niektórych platformach
    sprzętowych są duże zyski dzięki opcjom -O3 i -fprofile-generate/use.
    Także ważne jest aby mieć najnowszą wersję gcc.

    Pozdrawiam


  • 14. Data: 2010-01-25 12:30:49
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: thrunduil <t...@w...pl>

    On 24 Sty, 13:45, Mariusz Marszałkowski <m...@g...com> wrote:

    > > czyli matlab jest 12x szybszy.

    > Jak był kod kompilowany?
    > Jaka maszyna?

    laptop z pewnie jakims duo core.

    Mam inne wyniki, macierze 1024x1024
    Matlab: 0.114798 sec
    Kod c: 2.07 sec

    Visual studio
    /Ox /Oi /Ot /Oy /GT /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D
    "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release
    \vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt


    Intel Core 2 Quad Q9300, 4x32 KB L1, 2x3072KB L2,


  • 15. Data: 2010-01-25 12:35:10
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: bartekltg <b...@g...com>

    On 25 Sty, 12:47, Mariusz Marszałkowski <m...@g...com> wrote:

    > Czy wstępna transpozycja to jest to co ja zapisałem, czy chodzi
    > o innego kolegę? :) U mnie działa wstępna transpozycja 3.3 razy
    > wolniej niż matlab.

    Nie, inny (nie bierze tu udzialu w dyskusji). Procedura na kolanie,
    bardzo
    mozliwe, ze da sie ja znacznie poprawic. Moze w wolnej chwili
    sprawdze.
    BTW, zbilem do(dla tych samych warunkow co poprzednio) 1.86s:)

    > Jak były kompilowane procedury? Na niektórych platformach
    > sprzętowych są duże zyski dzięki opcjom -O3 i -fprofile-generate/use.
    > Także ważne jest aby mieć najnowszą wersję gcc.

    VC++2008 express
    /Ox(czyli /O2 i sporo dodatkow, O3 nie ma.) /Ob2 (inline co sie da)
    /Ot(preferuj szybkosc nad rozmiarem) /GL(global) /arch:SSE (nie mam
    SSE2).

    pozdrawiam
    bartekltg


  • 16. Data: 2010-01-25 13:26:58
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: bartekltg <b...@g...com>

    On 23 Sty, 10:21, Mariusz Marszałkowski <m...@g...com> wrote:

    > > >> tic;a*b;toc
    >
    > powinno chyba być c=a*b ?

    Powinno byc. Pozniej sprawdzalem, roznicy nie ma.

    > > Elapsed time is 2.585347 seconds.
    >
    > Na jakim sprzecie matlab mial taki wynik?

    Althon XP 1700, ale tylko sily wyzsze wiedza, na ile obecnie krecony:)

    pozdrawiam
    bartekltg



  • 17. Data: 2010-01-25 13:45:24
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: bartekltg <b...@g...com>

    On 25 Sty, 13:30, thrunduil <t...@w...pl> wrote:
    > On 24 Sty, 13:45, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > > czyli matlab jest 12x szybszy.
    > > Jak był kod kompilowany?
    > > Jaka maszyna?
    >
    > laptop z pewnie jakims duo core.
    >
    > Mam inne wyniki, macierze 1024x1024
    > Matlab:  0.114798 sec
    > Kod c: 2.07 sec

    Rzad wielkosci proporcji miedzy algorytmem z transponowaniem
    a matlabem zgadza z moimi wynikami.

    > Visual studio
    > /Ox /Oi /Ot /Oy /GT /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D
    > "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release
    > \vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt
    >
    > Intel Core 2 Quad Q9300, 4x32 KB L1, 2x3072KB L2,

    Sprobuj jeszcze dodac /arch:SSE2 z code generation.


    pozdrawiam
    bartekltg


  • 18. Data: 2010-01-25 14:45:09
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 25 Sty, 14:45, bartekltg <b...@g...com> wrote:
    > On 25 Sty, 13:30, thrunduil <t...@w...pl> wrote:
    >
    > > On 24 Sty, 13:45, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > > > czyli matlab jest 12x szybszy.
    > > > Jak był kod kompilowany?
    > > > Jaka maszyna?
    >
    > > laptop z pewnie jakims duo core.
    >
    > > Mam inne wyniki, macierze 1024x1024
    > > Matlab:  0.114798 sec
    > > Kod c: 2.07 sec
    >
    > Rzad wielkosci proporcji miedzy algorytmem z transponowaniem
    > a matlabem zgadza z moimi wynikami.
    >
    > > Visual studio
    > > /Ox /Oi /Ot /Oy /GT /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D
    > > "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release
    > > \vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt
    >
    > > Intel Core 2 Quad Q9300, 4x32 KB L1, 2x3072KB L2,
    >
    > Sprobuj jeszcze dodac /arch:SSE2 z code generation.
    >
    Na niektórych architekturach, na niektórych programach,
    obserwowałem, że gcc wypada znacznie lepiej niż VC. Może
    własnie z powodu gcc mam lepszy wynik. Jutro może
    zajdę chwilę czasu, to spróbuję skompilować w GCC Twoje
    procedury.

    Pozdrawiam serdecznie.


  • 19. Data: 2010-01-25 16:20:43
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: thrunduil <t...@w...pl>

    On 25 Sty, 15:45, Mariusz Marszałkowski <m...@g...com> wrote:
    > On 25 Sty, 14:45, bartekltg <b...@g...com> wrote:
    >
    >
    >
    > > On 25 Sty, 13:30, thrunduil <t...@w...pl> wrote:
    >
    > > > On 24 Sty, 13:45, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > > > > czyli matlab jest 12x szybszy.
    > > > > Jak był kod kompilowany?
    > > > > Jaka maszyna?
    >
    > > > laptop z pewnie jakims duo core.
    >
    > > > Mam inne wyniki, macierze 1024x1024
    > > > Matlab:  0.114798 sec
    > > > Kod c: 2.07 sec
    >
    > > Rzad wielkosci proporcji miedzy algorytmem z transponowaniem
    > > a matlabem zgadza z moimi wynikami.
    >
    > > > Visual studio
    > > > /Ox /Oi /Ot /Oy /GT /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D
    > > > "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release
    > > > \vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt
    >
    > > > Intel Core 2 Quad Q9300, 4x32 KB L1, 2x3072KB L2,
    >
    > > Sprobuj jeszcze dodac /arch:SSE2 z code generation.
    >
    > Na niektórych architekturach, na niektórych programach,
    > obserwowałem, że gcc wypada znacznie lepiej niż VC. Może
    > własnie z powodu gcc mam lepszy wynik. Jutro może
    > zajdę chwilę czasu, to spróbuję skompilować w GCC Twoje
    > procedury.

    http://www.ddj.com/cpp/184401976

    troche stare,
    ale na podstawie tych testow VS (ver 7) na pewno nie jest wolniejszy
    od gcc (ver 3.4)
    Nowsze gcc i tak nie chodzi pod windows (korzystajac z mingw).


  • 20. Data: 2010-01-25 16:27:35
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: marszi <w...@g...com>

    On 25 Sty, 17:20, thrunduil <t...@w...pl> wrote:
    > On 25 Sty, 15:45, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    >
    >
    > > On 25 Sty, 14:45, bartekltg <b...@g...com> wrote:
    >
    > > > On 25 Sty, 13:30, thrunduil <t...@w...pl> wrote:
    >
    > > > > On 24 Sty, 13:45, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > > > > > czyli matlab jest 12x szybszy.
    > > > > > Jak był kod kompilowany?
    > > > > > Jaka maszyna?
    >
    > > > > laptop z pewnie jakims duo core.
    >
    > > > > Mam inne wyniki, macierze 1024x1024
    > > > > Matlab:  0.114798 sec
    > > > > Kod c: 2.07 sec
    >
    > > > Rzad wielkosci proporcji miedzy algorytmem z transponowaniem
    > > > a matlabem zgadza z moimi wynikami.
    >
    > > > > Visual studio
    > > > > /Ox /Oi /Ot /Oy /GT /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D
    > > > > "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release
    > > > > \vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt
    >
    > > > > Intel Core 2 Quad Q9300, 4x32 KB L1, 2x3072KB L2,
    >
    > > > Sprobuj jeszcze dodac /arch:SSE2 z code generation.
    >
    > > Na niektórych architekturach, na niektórych programach,
    > > obserwowałem, że gcc wypada znacznie lepiej niż VC. Może
    > > własnie z powodu gcc mam lepszy wynik. Jutro może
    > > zajdę chwilę czasu, to spróbuję skompilować w GCC Twoje
    > > procedury.
    >
    > http://www.ddj.com/cpp/184401976
    >
    > troche stare,
    > ale na podstawie tych testow VS (ver 7) na pewno nie jest wolniejszy
    > od gcc (ver 3.4)
    > Nowsze gcc i tak nie chodzi pod windows (korzystajac z mingw).

    Ja mam pod windows 4.4.0, i to juz od jakiegoś czasu. Różnica w
    szybkosci
    niektorych programamow była bardo duza. Najlatwiej pobrac gcc wraz
    qtcreaorem.

    Pozdrawiam
    Mariusz Marszalkowski (sorry, nie ze swojego konta odpisuje)


strony : 1 . [ 2 ] . 3 . 4


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: