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

  • 1. Data: 2010-01-23 01:28:58
    Temat: no to ile czasu matlab mnozy te duze macierze?
    Od: Mariusz Marszałkowski <m...@g...com>

    Witam

    Mam kod w C/C++. Kod jest caly czas kodem napisanym na szybkiego, jak
    ktos znajdzie bledy, to poprawimy. Kod oczywiscie realizuje mnozenie
    macierzy.

    Testowalem dla macierzy [1024,1024] x [1024,1024].
    Sprzet: Intel Atom N270 (energooszczedny, w rankingu wypada 15-20 razy
    gorzej niz i7)
    Kompilator gcc pod windows (mingw) wersja 4.4.0

    Polecenie kompilacj:
    g++ -O3 *.cpp
    czas dla double: 9-10s
    czas dla float: 9-10s
    Polecenie kompialcji:
    g++ -O3 -march=native -mtune=native *.cpp
    czas dla double: 6-7s
    czas dla float 6-7s

    Bede wdzieczny jak ktos poda czasy dla matlaba na podbym sprzecie.
    Podoby
    sprzet to np. AMD Sempron 2300+ 1.6GHz. Osobiscie nie podaje czasow
    dla matlaba, bo nie mam wykupionej licencji.

    W kodzie jest tez zamieszczony algorytm z naiwnym dostepem do
    pamieci, dzialal okolo 20 razy wolniej. Moja wersja algorytm z
    lepszym
    trafianiem w pamiec cache korzysta z dodatkowej kopii i pamieci, a
    wiec ma gorsza zlozonosc pamieciowa, ale to z powodu mojego
    lenistwa. Algorytm moze dzialac w miejscu malym kosztem czasu.
    Jesli ktos zechce napisac wersje transponujaca macierz w miejscu, to
    bedziemy mieli jeszcze lepsze rozeznanie.

    Zakomentowane sa metody show, po odkomentowaniu zostana wyswietlone
    macierze na standardowe wyjscie, mozna wrzucic do innego programu i
    sprawdzic
    czy wyniki sie zgadzaja (dla mniejszych N,M,K rzecz jasna)

    Pozdrawiam serdecznie i czekam az to ktos porowna do matlaba.





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

    #define N (9)
    #define M (8)
    #define K (7)

    typedef double m_typ;

    static m_typ mat_a[N][K];
    static m_typ mat_b[N][M];
    static m_typ mat_c[M][K];

    static void init() {
    int i,j;
    for(i=0;i<N;i++)
    for(j=0;j<M;j++)
    mat_b[i][j] = (rand()%129-64) * (m_typ)0.05;
    for(i=0;i<M;i++)
    for(j=0;j<K;j++)
    mat_c[i][j] = (rand()%129-64) * (m_typ)0.05;
    }

    static void mmat() {
    int i,j,k;
    for(i=0;i<N;i++)
    for(j=0;j<K;j++) {
    mat_a[i][j] = 0;
    for(k=0;k<M;k++)
    mat_a[i][j] += mat_b[i][k] * mat_c[k][j];
    }
    }

    static void mmat_trans() {
    int i,j,k;
    static m_typ c_trans[K][M];

    for(i=0;i<M;i++)
    for(j=0;j<K;j++)
    c_trans[j][i] = mat_c[i][j];

    for(i=0;i<N;i++)
    for(j=0;j<K;j++) {
    mat_a[i][j] = 0;
    for(k=0;k<M;k++)
    mat_a[i][j] += mat_b[i][k] * c_trans[j][k];
    }

    }

    void show(const m_typ *const m, const int r,const int c) {
    int i,j;
    for(i=0;i<r;i++) {
    for(j=0;j<c;j++)
    printf("%+7.3lf ",(double)m[i*c+j]);
    printf("\n");
    }
    printf("\n");
    }

    int main(int argc, char *argv[])
    {
    clock_t t;
    init();
    // show( (m_typ*)mat_b , N , M );
    // show( (m_typ*)mat_c , M , K );

    t = clock();
    mmat_trans();
    t = clock() - t;
    printf("czas = %d\n",(int)(t/CLOCKS_PER_SEC));

    // show( (m_typ*)mat_a , N , K );

    getchar();
    return 0;
    }


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


    Poprawka, powinno być:

    #define N (1024)
    #define M (1024)
    #define K (1024)

    Wrzucalem do excela na malych rozmiarach i przez
    pomylke zostawilem. Sorry.


  • 3. Data: 2010-01-23 09:21:27
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 21 Sty, 09:41, bartekltg <b...@g...com> wrote:
    > On 21 Sty, 09:22, thrunduil <t...@w...pl> wrote:
    > Dwie rownowazne operacje (1000 wektorow mnozymy przez macierz 1000 na
    > 1000),
    > tylko raz w petli, a raz zwijamy w paczuszke. Jak wynikalo z
    > sasiedniego
    > postu, algorytm jest ten sam bo matlab korzysta z n^3.
    >
    > >> tic;a*b;toc
    powinno chyba być c=a*b ?


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

    Pozdrawiam


  • 4. Data: 2010-01-23 10:01:28
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: Wit Jakuczun <w...@g...com>

    On 23 Sty, 02:28, Mariusz Marszałkowski <m...@g...com> wrote:
    > Witam
    >
    > Mam kod w C/C++. Kod jest caly czas kodem napisanym na szybkiego, jak
    > ktos znajdzie bledy, to poprawimy. Kod oczywiscie realizuje mnozenie
    > macierzy.
    >
    > Testowalem dla macierzy [1024,1024] x [1024,1024].
    > Sprzet: Intel Atom N270 (energooszczedny, w rankingu wypada 15-20 razy
    > gorzej niz i7)
    > Kompilator gcc pod windows (mingw) wersja 4.4.0
    >
    Jak to się ma do przykładów z tego konkursu? Może porównaj Twój kod z
    kodem
    z konkursu. Będziesz miał od razu porównanie z ATLASem. Matlab
    powinien być
    na poziomie ATLASu (nie gorzej).

    Pozdrawiam,
    Wit Jakuczun


  • 5. Data: 2010-01-23 10:07:46
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 23 Sty, 11:01, Wit Jakuczun <w...@g...com> wrote:
    > On 23 Sty, 02:28, Mariusz Marszałkowski <m...@g...com> wrote:> Witam
    >
    > > Mam kod w C/C++. Kod jest caly czas kodem napisanym na szybkiego, jak
    > > ktos znajdzie bledy, to poprawimy. Kod oczywiscie realizuje mnozenie
    > > macierzy.
    >
    > > Testowalem dla macierzy [1024,1024] x [1024,1024].
    > > Sprzet: Intel Atom N270 (energooszczedny, w rankingu wypada 15-20 razy
    > > gorzej niz i7)
    > > Kompilator gcc pod windows (mingw) wersja 4.4.0
    >
    > Jak to się ma do przykładów z tego konkursu? Może porównaj Twój kod z
    > kodem
    > z konkursu. Będziesz miał od razu porównanie z ATLASem. Matlab
    > powinien być
    > na poziomie ATLASu (nie gorzej).

    Ten konkurs jest bardzo niejasno opisany, dlatego postanowiłem
    porownac czas wykonania bezpośrednio z czasem matlaba.

    Cytuje:
    "poniższa sekwencja jest przykładowa i w testach może
    ulec zmianie: istotne jest, że występuje w niej kilka kolejnych
    wywołań bestdgemm() */

    Nie wiem ile wywolan dla jakich macierzy o jakich rozmiarach bylo.

    Pozdrawiam


  • 6. Data: 2010-01-23 10:18:56
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: Wit Jakuczun <w...@g...com>

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

    > Ten konkurs jest bardzo niejasno opisany, dlatego postanowiłem
    > porownac czas wykonania bezpośrednio z czasem matlaba.
    >
    > Cytuje:
    > "poniższa sekwencja jest przykładowa i w testach może
    > ulec zmianie: istotne jest, że występuje w niej kilka kolejnych
    > wywołań bestdgemm() */
    >
    > Nie wiem ile wywolan dla jakich macierzy o jakich rozmiarach bylo.
    >
    Ja sugerowałem, żebyś wziął np. najlepszą metodę z tego konkursu (kod
    źródłowy) i skompilował ją u siebie a następnie porównał czas dla
    testu,
    który podajesz powyżej.

    Pozdrawiam,
    Wit Jakuczun


  • 7. Data: 2010-01-23 10:19:53
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 23 Sty, 11:18, Wit Jakuczun <w...@g...com> wrote:
    > On 23 Sty, 11:07, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > Ten konkurs jest bardzo niejasno opisany, dlatego postanowiłem
    > > porownac czas wykonania bezpośrednio z czasem matlaba.
    >
    > > Cytuje:
    > > "poniższa sekwencja jest przykładowa i w testach może
    > > ulec zmianie: istotne jest, że występuje w niej kilka kolejnych
    > > wywołań bestdgemm() */
    >
    > > Nie wiem ile wywolan dla jakich macierzy o jakich rozmiarach bylo.
    >
    > Ja sugerowałem, żebyś wziął np. najlepszą metodę z tego konkursu (kod
    > źródłowy) i skompilował ją u siebie a następnie porównał czas dla
    > testu,
    > który podajesz powyżej.
    >
    Dobry pomysl.


  • 8. Data: 2010-01-23 10:37:34
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: Mariusz Marszałkowski <m...@g...com>

    On 23 Sty, 11:19, Mariusz Marszałkowski <m...@g...com> wrote:
    > On 23 Sty, 11:18, Wit Jakuczun <w...@g...com> wrote:
    >
    > > On 23 Sty, 11:07, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > > Ten konkurs jest bardzo niejasno opisany, dlatego postanowiłem
    > > > porownac czas wykonania bezpośrednio z czasem matlaba.
    >
    > > > Cytuje:
    > > > "poniższa sekwencja jest przykładowa i w testach może
    > > > ulec zmianie: istotne jest, że występuje w niej kilka kolejnych
    > > > wywołań bestdgemm() */
    >
    > > > Nie wiem ile wywolan dla jakich macierzy o jakich rozmiarach bylo.
    >
    > > Ja sugerowałem, żebyś wziął np. najlepszą metodę z tego konkursu (kod
    > > źródłowy) i skompilował ją u siebie a następnie porównał czas dla
    > > testu,
    > > który podajesz powyżej.
    >
    > Dobry pomysl.

    Niestety mój kompilator nie kompiluje najszybszego programu. Z jakiś
    powodów mingw32 w wesji 4.4.0 nie zostalo wyposazone w pthread.
    Poza tym najszybszy kod uzywa SSE2, nie wiem czy maszyna na
    ktorej to kompiluje ma SSE2, mingw najwyrazniej tez nie ma. Kolejna
    sprawa: najszybszy algorytm ten uzywa strassena (a przynajmniej ma
    procedure o takiej nazwie)

    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.

    Pozdrawiam serdecznie.


  • 9. Data: 2010-01-24 10:18:04
    Temat: Re: no to ile czasu matlab mnozy te duze macierze?
    Od: thrunduil <t...@w...pl>

    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.


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

    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

strony : [ 1 ] . 2 ... 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: