-
Path: news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.glorb.com!p
ostnews.google.com!r24g2000yqd.googlegroups.com!not-for-mail
From: bartekltg <b...@g...com>
Newsgroups: pl.comp.programming
Subject: Re: no to ile czasu matlab mnozy te duze macierze?
Date: Sun, 24 Jan 2010 21:54:16 -0800 (PST)
Organization: http://groups.google.com
Lines: 104
Message-ID: <d...@r...googlegroups.com>
References: <8...@e...googlegroups.com>
<b...@m...googlegroups.com>
<0...@f...googlegroups.com>
<e...@f...googlegroups.com>
<0...@f...googlegroups.com>
<3...@h...googlegroups.com>
<6...@o...googlegroups.com>
<9...@u...googlegroups.com>
<a...@b...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 1264398856 3743 127.0.0.1 (25 Jan 2010 05:54:16 GMT)
X-Complaints-To: g...@g...com
NNTP-Posting-Date: Mon, 25 Jan 2010 05:54:16 +0000 (UTC)
Complaints-To: g...@g...com
Injection-Info: r24g2000yqd.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:184619
[ ukryj nagłówki ]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];
}
Następne wpisy z tego wątku
- 25.01.10 11:47 Mariusz Marszałkowski
- 25.01.10 12:30 thrunduil
- 25.01.10 12:35 bartekltg
- 25.01.10 13:26 bartekltg
- 25.01.10 13:45 bartekltg
- 25.01.10 14:45 Mariusz Marszałkowski
- 25.01.10 16:20 thrunduil
- 25.01.10 16:27 marszi
- 25.01.10 16:44 bartekltg
- 25.01.10 17:40 thrunduil
- 25.01.10 19:24 Mariusz Marszałkowski
- 25.01.10 19:44 Mariusz Marszałkowski
- 25.01.10 21:10 Wojciech Jaczewski
- 25.01.10 22:13 Mariusz Marszałkowski
- 25.01.10 23:02 Wojciech Jaczewski
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2024-12-23 Riga => Specjalista ds. public relations <=
- 2024-12-23 Łódź => Specjalista ds. Sprzedaży <=
- 2024-12-23 Kraków => International Freight Forwarder <=
- 2024-12-23 Co nalezy do Cinkciarza, a co do Conotoxia ?
- 2024-12-23 Poznań => Key Account Manager <=
- 2024-12-23 Warszawa => Presales / Inżynier Wsparcia Technicznego IT <=
- 2024-12-23 Rzeszów => Spedytor Międzynarodowy <=
- 2024-12-23 Warszawa => Infrastructure Automation Engineer <=
- 2024-12-23 Białystok => Analityk w dziale Trade Development (doświadczenie z Po
- 2024-12-23 Warszawa => Site Reliability Engineer (SRE) <=
- 2024-12-23 Warszawa => DevOps Engineer <=
- 2024-12-23 Warszawa => Senior Account Manager <=
- 2024-12-23 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-23 Katowice => Administrator IT - Wirtualizacja i Konteneryzacja <=
- 2024-12-23 Mińsk Mazowiecki => Spedytor Międzynarodowy <=