-
Data: 2010-01-25 05:54:16
Temat: Re: no to ile czasu matlab mnozy te duze macierze?
Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- 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
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-11-29 Dławik CM
- 2024-11-29 [OT] Lewe oprogramowanie
- 2024-11-29 Błonie => Sales Specialist <=
- 2024-11-29 Warszawa => IT Expert (Network Systems area) <=
- 2024-11-29 Warszawa => Ekspert IT (obszar systemów sieciowych) <=
- 2024-11-29 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-29 Białystok => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-11-29 Pómpy ciepła darmo rozdajoo
- 2024-11-29 Białystok => Application Security Engineer <=
- 2024-11-29 Białystok => Programista Full Stack (.Net Core) <=
- 2024-11-29 Gdańsk => Software .Net Developer <=
- 2024-11-29 Wrocław => Key Account Manager <=
- 2024-11-29 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-29 Chrzanów => Specjalista ds. public relations <=
- 2024-11-27 Re: UseGalileo -- PRODUKTY I APLIKACJE UŻYWAJĄ JUŻ DZIŚ SYSTEMU GALILEO