-
Data: 2010-01-21 15:10:59
Temat: Re: matlab taki wydajny?
Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 21 Sty, 10:08, thrunduil <t...@w...pl> wrote:
> > No to sie okazuje, ze narzut matlaba dla niewielkich wektorkow jest
> > spory.
>
> To nie ma nic wspolnego z narzutem Matlaba.
Zakład?
> To sie nie skaluje liniowo. Kod mnozenia gdy prawa strona jest
> macierza robi pewna sztuczke - blocking, podstawowy kod mnozenia ma
> conajmniej szesc zagniezdzonych petli w taki sposob aby potrzebne
> rzeczy byly w pamieci cache.
> Cache misses dla L2 to koszt rzedu 200-300 cykli procesora. Unikniecie
> wiec koniecznosci czytania pamieci daje duze oszczednosci.
> Da sie to zrobic gdy prawa strona jest macierza, Gdy mnozy sie
> wielkokrotnie przez wektor z prawej strony wykorzystanie pamieci jest
> duzo gorsze, stad roznica efektywnosci. Narzut petli powinien byc
> zaniedbywalny.
To nie ma nic wspolnego z pamiecia, przynajmniej nie tak, jak
sugerujesz.
Jesli by mialo, to moj prosty kod (podany na koncu) tez by mizernie
dzialal.
Ale on nie chec, 1000 roznych mnozen wektorka dlugosci 1000
przez macierz 1000x1000 liczy w niecale 6s.
Dwa razy wolniej niz matlab liczac iloczyn 2 macierzy,
ale tez ponad dwa razy szybciej niz analogiczne petla
w matlabie:
||>> tic,for j=1:1000,a*v;end;toc
||
||Elapsed time is 15.379616 seconds.
Czyli rozdrabnianie wywoluje jakis narzyt nie tylko
przez gorsze wykorzystywanie pamieci.
Chyba, ze cos w kodzie jest zle. Wektor wejsciowy zalezy od
tego, co sie wpisze, wynik jest takze wypisywany ('potrzebny').
W kazdej petli korzystam z innego wektora (kawalka znacznie
dluzszego wektora)..
pozdrawiam
bartekltg
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
void mnoz (double *w,double *M,double *v,int n)
{
for (int j=0;j<n;j++)
{
double t=0;
for (int i=0;i<n;i++)
t+=v[i]*M[j+2*i];
w[j]=t;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
double *w;double *M;double *v;
clock_t start,end;
double dif;
int n,r;
scanf("%d %d",&n,&r);
srand(r);//coby jakos dziwnie nie zoptymalizowalo
w=new double [n*n];
v=new double [n*n];
M=new double [n*n];
for (int i=0;i<n*n;i++)
v[i]=rand()*1.024894;
for (int i=0;i<n*n;i++)
M[i]=rand()*1.894;
start=clock();
for (int i=0;i<n;i++) //n razy podrzucamy rozne wektorki
mnoz(&w[i*n],M,&v[i*n],n);
end=clock();
double aku=1;
for (int i=1;i<n*n;i++)
aku+=w[i]*w[i-1]; //coby wynik byl potrzebny i kod nie wyparowal
printf("\n%.2le \n",aku);
dif = difftime (end,start);
printf ("\n%.2lf \n", double(end-start)/double(CLOCKS_PER_SEC) );
return 0;
}
Następne wpisy z tego wątku
- 21.01.10 15:14 Stachu 'Dozzie' K.
- 21.01.10 15:50 Wit Jakuczun
- 21.01.10 17:53 Mariusz Marszałkowski
- 21.01.10 18:05 Mariusz Marszałkowski
- 21.01.10 18:20 Mariusz Marszałkowski
- 21.01.10 18:21 thrunduil
- 21.01.10 19:00 Wit Jakuczun
- 21.01.10 20:25 bartekltg
- 21.01.10 20:31 bartekltg
- 21.01.10 20:45 Mariusz Marszałkowski
- 21.01.10 21:08 Wit Jakuczun
- 21.01.10 22:10 Mariusz Marszałkowski
- 22.01.10 09:05 lolo
- 22.01.10 09:15 Mariusz Marszałkowski
- 22.01.10 09:34 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-06 Jeździ, skręca, hamuje
- 2025-01-06 Białystok => System Architect (Java background) <=
- 2025-01-06 Gliwice => Specjalista ds. public relations <=
- 2025-01-06 Białystok => Solution Architect (Java background) <=
- 2025-01-06 Zielona GĂłra => Konsultant WdroĹźeniowy Comarch XL/Optima (KsiÄgowoĹ
- 2025-01-06 Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- 2025-01-06 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-01-06 Do IO i innych elektrooszolomow, tu macie prawdziwe smrody
- 2025-01-06 Białystok => Full Stack .Net Engineer <=
- 2025-01-06 Kraków => Business Development Manager - Network and Network Security
- 2025-01-06 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-06 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-06 Lublin => Programista Delphi <=
- 2025-01-06 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-01-06 śnieg