eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingmatlab taki wydajny? › Re: matlab taki wydajny?
  • Path: news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.nask.pl!
    news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!border2.nntp.dca.gigane
    ws.com!nntp.giganews.com!postnews.google.com!f12g2000yqn.googlegroups.com!not-f
    or-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: matlab taki wydajny?
    Date: Thu, 21 Jan 2010 00:18:00 -0800 (PST)
    Organization: http://groups.google.com
    Lines: 146
    Message-ID: <3...@f...googlegroups.com>
    References: <5...@a...googlegroups.com>
    <8...@r...googlegroups.com>
    <9...@k...googlegroups.com>
    <4...@u...googlegroups.com>
    <c...@s...googlegroups.com>
    NNTP-Posting-Host: 82.210.189.188
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    X-Trace: posting.google.com 1264061881 8466 127.0.0.1 (21 Jan 2010 08:18:01 GMT)
    X-Complaints-To: g...@g...com
    NNTP-Posting-Date: Thu, 21 Jan 2010 08:18:01 +0000 (UTC)
    Complaints-To: g...@g...com
    Injection-Info: f12g2000yqn.googlegroups.com; posting-host=82.210.189.188;
    posting-account=CvUQzQoAAABvVQmR58QmR6N4Cev1qhAS
    User-Agent: G2/1.0
    X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.7)
    Gecko/20091221 Firefox/3.5.7 (.NET CLR
    3.5.30729),gzip(gfe),gzip(gfe)
    Xref: news-archive.icm.edu.pl pl.comp.programming:184521
    [ ukryj nagłówki ]

    On 19 Sty, 07:15, Mariusz Marszałkowski <m...@g...com> wrote:
    > On 19 Sty, 02:52, bartekltg <b...@g...com> wrote:
    >
    > > On 18 Sty, 20:26, Mariusz Marszałkowski <m...@g...com> wrote:
    >
    > > > Nie rozumie, a co ja porównałem jak nie mnożenie macierzy?
    >
    > > Porownales wektor * macierz. Ja zastanawialem sie nad porownaniem
    > > mnozenia 2 macierzy kwadratowych (i nieco wiekszych niz 1000).
    >
    > Nie wiem czy się skuszę (mam masę innych rzeczy do testowana) na
    > taki test, ale może... Nie znam tego algorytmu który ma mniejszą
    > złożoność niż N^3. Obecnie jakie jest dokładne teoretyczne
    > ograniczenie?

    Coppersmitha-Winograda daje n^2.376, ale stala jest tak duza,
    za na razie komputery nie bawia sie takimi macierzami pelnymi.

    Niby mozna uzywac algorytmu Strassena (n^log_2 7 = log^2.807),
    ale ma on klopoty z numeryczna stabilnoscia. Blas uzywa n^3
    (jeszcze do tego wroce).

    > Może jakbym miał przystępnie opisany ten algorytm to bym napisał w
    > gołym C.
    > Zapodajcie linka do dobrego algorytmu, może spróbuję.

    http://en.wikipedia.org/wiki/Strassen_algorithm
    ale IHMO nie ma sensu n^3 starczy.

    > > > Napisałem wydajniej to co opisałem: mnożenie macierzy o
    > > > rozmiarze Nx1 przez macierz MxN. Super wydajny pakiet powinien
    > > > mieć specjalną implementację do takich macierzy.
    >
    > > A nie jest to wydajne? Masz czas tego samego rzedu co w jezyku
    > > kompilowalnym (i to skompilowanem pod swoj system i procek!).
    >
    > Zależy jak oceniać. Słyszałem opinie z których wynikało że
    > matlab to wszystko robi z 50 razy szybciej. W świetle tamtych

    http://ubuntuforums.org/archive/index.php/t-1295370.
    html
    :)

    > opinii wypadł śmiesznie, i głównie to chciałem sprawdzić. A
    > czy jest 2 razy szybszy czy 2 razy wolniejszy to osobiście
    > zgadzam się że nie powód do oceniania pakietu. Chciałem się
    > tylko upewnić czy nie jest 50 razy lepszy :)

    50 na dzien dobry brzmi smiesznie.
    Ale nadal bede mowic, ze sprawdziles to dla
    danych nieso spoza zakresu w ktorym matlab jest dobry.

    > Przy jednym z moich projektów miesięczny rachunek za energię
    > na komputery liczące to około 1000zł. Dużo nie brakuje aby
    > starczyło na wypłatę dla nastepnego programisty...

    Teraz polowe zaoszczedzisz.. Student na pol etatu na to pojdzie?

    > Właśnie od różnych ludzi i z różnych środowisk, w
    > końcu mnie sprowokowali.

    Skoro sprowokowali, to zrob uczciwy test na duzych
    maciezach a nie pitu-pitu wektorkami po 1000 elementow:)

    > > Moze rzeczywiscie pisali mnozenie macierzy w javie;)
    >
    > Sadze ze w ogole nie pisali i w ogole nie porownywali czasow,
    > tylko ulegli marketingowi matlaba.

    :)


    > Ale mogil sie postarac a wrecz powinni. Wystarczy rozpoznac
    > ze mnozymy wektor przez macierz i dac goto do wyspecjalizowanej
    > procedurki. Tak samo jesli mnozymy macierz [NxK] przez [KxM] dla
    > M i N znacznie wiekszych niz K, to jakas wyspecjalizowana procedura
    > wymnozylaby duzo szybciej niz ogolna.

    Dla bardzo malych K mozna by sie bawic w rozwijanie petli.
    Dla wiekszych - nie ma znaczenia przy algorytmie n^3.


    > > Ja nadal uwazam, ze jesli pakiet numeryczny daje ten sam rzad
    > > wielkosci, to jest przyzwoity wynik.
    >
    > Ja tez tak podejrzewam, ale teraz tez wiem ze nie ma
    > implementacji 50 razy wydajniejszych.

    Za to sa 50razy mniej wydajne;)

    > > W miare mozliwosci (trzeba napisac) zrob to porownanie przy mnozeniu
    > > dwuch macierzy 1000x1000. Roznica powinna sie znacznie zmniejszyc.
    >
    > Nie obiecuje, ale sprobuje, tylko zapodajcie dobry opis algorytmu,
    > nigdy
    > nie implementowalem lepszego algorytmu mnozenia macierzy.


    > Może mieć algorytm o lepszej zlozonosci niż N^3 i
    > jego moc się nie ujawnia gdy mnozymy macierze
    > podobne do wierszowych.


    Nie. Matlab, (mimo mojego natkniecia sie na informacje,
    ze jednak) nie korzysta z szybszych algorytmow
    (przynajmniej dla macierzy rzedu 1000-2000).

    Dowod literaturowy. Matlab korzysta z BLASa jako
    silnika do operacji na macierzach:
    http://www.mathworks.com/access/helpdesk/help/techdo
    c/ref/mtimes.html
    [*]
    Wiki gdzies wsponilala, ze BLAS uzywa dla duzych macierzy jakios
    modyfikacji
    Strassena, jadnak w kodzie tego nie widac:
    http://www.netlib.org/blas/dgemm.f (macierz macierz).

    Dowod statystyczny (12 macierzy o wielkosciach ciut ponizej 1000 do
    ok2000):
    wyn=[];for j=95:110; n=floor(2^(j/10)); a=rand(n); b=rand(n);
    tic;a*b;wyn=[wyn;n,toc], end;
    plot(log(wyn(:,1)),log(wyn(:,2)),'*' ) %poogladajmy sobie
    [s,serr]=lscov([x,ones(size(x))],y)

    Czas algorytmu to n^k hdzie k= 2.99 +- 0.06

    Wiec n^3. Przynajmniej nie bede sie bac o stabilnosc numeryczna.

    Jednak polecam napisanie tego n^3 i porownaine z matlabem.
    Moze ci 'z roznych srodowisk' nie mylili sie tak bardzo
    i kombajn bedize szybszy od napredce zmajstrowanego
    programiku (pomijajac wspolczynnik 50 wziety z sufitu;)

    pozdrawiam
    bartekltg

    [*] z tego linku wynika tez, ze jednak uzywa dgemv, czyli
    specjalizowanej procedury macierz-wektor.

    Czyzby 1000 bylo nadl tam mala liczba.
    Moze porwnajmy monzenie M_kxn * wektor_n
    gdzie n rzedu 10^6 a k rzedu kilkadziesiat.





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: