-
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
- Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- Prezydent SZAP/USONA Trump ułaskawił prezydenta Hondurasu Hernandeza skazanego na 45 lat więzienia
- Rosjanie chwalą się prototypem komputera kwantowego. "Najważniejszy projekt naukowy Rosji"
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Re: Najgorszy język programowania
- NOWY: 2025-09-29 Alg., Strukt. Danych i Tech. Prog. - komentarz.pdf
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
Najnowsze wątki
- 2026-01-29 KSeF - 13 wątpliwości
- 2026-01-29 A ja się pochwalę
- 2026-01-29 Warszawa => Mid/Senior IT Recruiter <=
- 2026-01-29 Warszawa => Senior Java Developer <=
- 2026-01-29 Warszawa => IT Recruiter <=
- 2026-01-28 Degradacja
- 2026-01-28 Wysoki Sąd poinstruował czego unikać wyzywając Owsiaka "Równiejszego"
- 2026-01-28 Białystok => Solution Architect (Workday) - Legal Systems <=
- 2026-01-28 Białystok => Preseles Inżynier (background baz danych) <=
- 2026-01-28 Wrocław => Konsultant wdrożeniowy ERP <=
- 2026-01-28 Łódź => Microsoft Engineer <=
- 2026-01-28 Białystok => Tester manualny <=
- 2026-01-27 Tradycja ciągania posłów po sądach za wystąpienia w Sejmie będzie kontynuowana [Lepper 2]
- 2026-01-27 Pierwszy raz sprzedano więcej samochodów zeeletryfikowanych niż ice
- 2026-01-27 Elektryczny Kałasznikow




Mieszkanie pod klucz czy stan deweloperski? Polacy wybierają wygodę