-
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
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
Najnowsze wątki
- 2025-05-13 48-latka, pracując w urzędzie, przyjmował łapówki, a w zamian wydawał pozytywne decyzje administracyjne dotyczące gospodarowania odpadami.
- 2025-05-13 według raportu Najwyższej Izby Kontroli z 2014 r. ustawiona ręcznie tolerancja fotoradarów wynosiła często nawet... 25 km na godz.!
- 2025-05-13 Na tapet wraca głośny temat niesprawiedliwe wystawianych mandatów za przekroczenie prędkości.
- 2025-05-13 Białystok => Senior Node.js Developer (Nest.js framework) <=
- 2025-05-13 Gdańsk => Controlling systems Consultant <=
- 2025-05-13 Białystok => Delphi Programmer <=
- 2025-05-13 Gdańsk => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-05-13 zagadałem dziś babę
- 2025-05-13 W tym urządzeniu ugotujesz wodę wszędzie. Bez podłączania do prądu
- 2025-05-13 W tym urządzeniu ugotujesz wodę wszędzie. Bez podłączania do prądu
- 2025-05-13 W tym urządzeniu ugotujesz wodę wszędzie. Bez podłączania do prądu
- 2025-05-12 wyobrazcie sobie
- 2025-05-12 pojezdziłem passatem
- 2025-05-12 Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- 2025-05-12 Warszawa => Junior Rekruter <=