-
Data: 2010-01-23 01:28:58
Temat: no to ile czasu matlab mnozy te duze macierze?
Od: Mariusz Marszałkowski <m...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]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;
}
Następne wpisy z tego wątku
- 23.01.10 01:33 Mariusz Marszałkowski
- 23.01.10 09:21 Mariusz Marszałkowski
- 23.01.10 10:01 Wit Jakuczun
- 23.01.10 10:07 Mariusz Marszałkowski
- 23.01.10 10:18 Wit Jakuczun
- 23.01.10 10:19 Mariusz Marszałkowski
- 23.01.10 10:37 Mariusz Marszałkowski
- 24.01.10 10:18 thrunduil
- 24.01.10 12:45 Mariusz Marszałkowski
- 24.01.10 16:33 Mariusz Marszałkowski
- 25.01.10 05:54 bartekltg
- 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
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-12-02 Usiłowanie zabójstwa
- 2024-12-01 Rambo 2024. Co z radio-stopem
- 2024-12-01 Pijani kierowcy
- 2024-12-01 "Chciałem zamówić kurs tym"
- 2024-11-30 Windykatorzy ścigają spadkobierców z mandat nieboszczyka za przekroczenie prędkości???
- 2024-11-30 Łódź => Technical Artist <=
- 2024-11-30 Lublin => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-11-30 Warszawa => Microsoft Dynamics 365 Business Central Developer <=
- 2024-11-30 Bieruń => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-30 Zielona Góra => Senior PHP Symfony Developer <=
- 2024-11-30 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-30 Lublin => Spedytor międzynarodowy <=
- 2024-11-30 Warszawa => Mid IT Recruiter <=
- 2024-11-30 Warszawa => Fullstack Developer <=
- 2024-11-30 Żerniki => Dyspozytor Międzynarodowy <=