-
Path: news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.task.gda
.pl!newsfeed.pionier.net.pl!news.glorb.com!postnews.google.com!e37g2000yqn.goog
legroups.com!not-for-mail
From: Mariusz Marszałkowski <m...@g...com>
Newsgroups: pl.comp.programming
Subject: no to ile czasu matlab mnozy te duze macierze?
Date: Fri, 22 Jan 2010 17:28:58 -0800 (PST)
Organization: http://groups.google.com
Lines: 124
Message-ID: <8...@e...googlegroups.com>
NNTP-Posting-Host: 89.229.16.190
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
X-Trace: posting.google.com 1264210139 31072 127.0.0.1 (23 Jan 2010 01:28:59 GMT)
X-Complaints-To: g...@g...com
NNTP-Posting-Date: Sat, 23 Jan 2010 01:28:59 +0000 (UTC)
Complaints-To: g...@g...com
Injection-Info: e37g2000yqn.googlegroups.com; posting-host=89.229.16.190;
posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
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:184572
[ ukryj 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
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- 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
Najnowsze wątki
- 2025-01-19 Test - nie czytać
- 2025-01-19 qqqq
- 2025-01-19 Tauron przysyła aneks
- 2025-01-19 Nowa ładowarka Moya a Twizy -)
- 2025-01-18 Power BANK z ładowaniem przelotowym robi PRZERWY
- 2025-01-18 Pomoc dla Filipa ;)
- 2025-01-18 znowu kradno i sie nie dzielo
- 2025-01-18 Zieloni oszuchiści
- 2025-01-18 Zielonka => Specjalista ds. public relations <=
- 2025-01-18 Warszawa => Frontend Developer (JS, React) <=
- 2025-01-18 Warszawa => Software .Net Developer <=
- 2025-01-18 Warszawa => Developer .NET (mid) <=
- 2025-01-18 Katowice => Administrator IT - Systemy Operacyjne i Wirtualizacja <=
- 2025-01-17 Zniknął list gończy za "Frogiem". Frog się nam odnalazł?
- 2025-01-17 Kto wytłumaczy "głupiemu" prezydentowi Dudzie wielką moc prawną "dekretu premiera" TUSKA? [(C)Korneluk (2025)]