-
Data: 2013-05-03 14:13:28
Temat: Re: Stara szkoła w XXI wieku
Od: Edek <e...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Dnia Fri, 03 May 2013 04:02:49 -0700 po głębokim namyśle firr kenobi
rzekł:
> drugie dla mnie najciekawze zdanie
>
> "Systems programming is definitely in no way a goal. If that's the
> target, C is still the language of choice, of course. However, C is
> still the golden standard for general performance -- although, of
> course, Fortran beats it in some cases."
>
> jest to tajemnica ktora sie przejawia od jakiegos czasu w moim zyciu - w
> jakich to cases fortran beats c ??? (mozliwe ze tak jest ale to raczej z
> jakichs 'pzypadkowych' powodow typu pewnie cos ze zmiennymi lokalnymi
> albo conwencja wywolan funkcji w c albo cos takiego - pozatym raczej
> chyba nie ma powodu wiec nie powinno tak byc ale chetnie bym sie
> dowiedzial)
Fortran przez lata królował w obliczeniach numerycznych, teraz już
bardziej używane jest C++.
Na pytanie 'dlaczego' nie ma trywialnej odpowiedzi: Fortran numerycznie
jest szybszy od C dość często, Python jest wolniejszy tak ze 20x minimum
praktycznie zawsze - tak po prostu jest, zaakceptuj to jak pogodę.
> z innych ciekawostek: CO TO ROBI ?
>
> function randmatstat(t)
> n = 5 v = zeros(t)
> w = zeros(t)
> for i = 1:t
> a = randn(n,n)
> b = randn(n,n)
> c = randn(n,n)
> d = randn(n,n)
> P = [a b c d]
> Q = [a b; c d]
> v[i] = trace((P.'*P)^4)
> w[i] = trace((Q.'*Q)^4)
> end std(v)/mean(v), std(w)/mean(w)
> end
Wklejam wersję c. Od "co" ważniejsze dla mnie jest "jak".
Edek
PS. Kod w c:
struct double_pair randmatstat(int t) {
int n = 5;
struct double_pair r;
double *v = (double*)calloc(t,sizeof(double));
double *w = (double*)calloc(t,sizeof(double));
double *a = (double*)malloc((n)*(n)*sizeof(double));
double *b = (double*)malloc((n)*(n)*sizeof(double));
double *c = (double*)malloc((n)*(n)*sizeof(double));
double *d = (double*)malloc((n)*(n)*sizeof(double));
double *P = (double*)malloc((n)*(4*n)*sizeof(double));
double *Q = (double*)malloc((2*n)*(2*n)*sizeof(double));
double *PtP1 = (double*)malloc((4*n)*(4*n)*sizeof(double));
double *PtP2 = (double*)malloc((4*n)*(4*n)*sizeof(double));
double *QtQ1 = (double*)malloc((2*n)*(2*n)*sizeof(double));
double *QtQ2 = (double*)malloc((2*n)*(2*n)*sizeof(double));
for (int i=0; i < t; i++) {
randmtzig_fill_randn(a, n*n);
randmtzig_fill_randn(b, n*n);
randmtzig_fill_randn(c, n*n);
randmtzig_fill_randn(d, n*n);
memcpy(P+0*n*n, a, n*n*sizeof(double));
memcpy(P+1*n*n, b, n*n*sizeof(double));
memcpy(P+2*n*n, c, n*n*sizeof(double));
memcpy(P+3*n*n, d, n*n*sizeof(double));
for (int j=0; j < n; j++) {
for (int k=0; k < n; k++) {
Q[2*n*j+k] = a[k];
Q[2*n*j+n+k] = b[k];
Q[2*n*(n+j)+k] = c[k];
Q[2*n*(n+j)+n+k] = d[k];
}
}
cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans,
n, n, 4*n, 1.0, P, 4*n, P, 4*n, 0.0, PtP1, 4*n);
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
4*n, 4*n, 4*n, 1.0, PtP1, 4*n, PtP1, 4*n, 0.0, PtP2,
4*n);
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
4*n, 4*n, 4*n, 1.0, PtP2, 4*n, PtP2, 4*n, 0.0, PtP1,
4*n);
for (int j=0; j < n; j++) {
v[i] += PtP1[(n+1)*j];
}
cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans,
2*n, 2*n, 2*n, 1.0, Q, 2*n, Q, 2*n, 0.0, QtQ1, 2*n);
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
2*n, 2*n, 2*n, 1.0, QtQ1, 2*n, QtQ1, 2*n, 0.0, QtQ2,
2*n);
cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans,
2*n, 2*n, 2*n, 1.0, QtQ2, 2*n, QtQ2, 2*n, 0.0, QtQ1,
2*n);
for (int j=0; j < 2*n; j++) {
w[i] += QtQ1[(2*n+1)*j];
}
}
free(PtP1);
free(PtP2);
free(QtQ1);
free(QtQ2);
free(P);
free(Q);
free(a);
free(b);
free(c);
free(d);
double v1=0.0, v2=0.0, w1=0.0, w2=0.0;
for (int i=0; i < t; i++) {
v1 += v[i]; v2 += v[i]*v[i];
w1 += w[i]; w2 += w[i]*w[i];
}
free(v);
free(w);
r.s1 = sqrt((t*(t*v2-v1*v1))/((t-1)*v1*v1));
r.s2 = sqrt((t*(t*w2-w1*w1))/((t-1)*w1*w1));
return r;
}
Następne wpisy z tego wątku
- 03.05.13 14:04 M.M.
- 03.05.13 14:08 Stachu 'Dozzie' K.
- 03.05.13 14:53 M.M.
- 03.05.13 15:23 Kosu
- 03.05.13 16:09 M.M.
- 03.05.13 17:39 Kosu
- 03.05.13 21:47 Bronek Kozicki
- 04.05.13 23:07 Stachu 'Dozzie' K.
- 29.05.13 23:29 3d
Najnowsze wątki z tej grupy
- 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
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2025-01-04 gasik
- 2025-01-04 13. Raport Totaliztyczny: Powszechna Deklaracja Praw Człowieka Nie Chroni Przed Wyzyskiem Ani Przed Eksploatacją
- 2025-01-04 Zbieranie danych przez www
- 2025-01-04 reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- 2025-01-04 w Nowym Roku 2025r
- 2025-01-04 Warszawa => Specjalista ds. IT - II Linia Wsparcia <=
- 2025-01-04 Warszawa => Java Developer <=
- 2025-01-04 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-04 Warszawa => System Architect (Java background) <=
- 2025-01-04 Wrocław => Application Security Engineer <=
- 2025-01-04 Chrzanów => Specjalista ds. public relations <=
- 2025-01-04 Katowice => Key Account Manager (ERP) <=
- 2025-01-03 Problem z odczytem karty CF
- 2025-01-03 Jazda z Warszawy do Krakowa teslą
- 2025-01-03 Wrocław => Konsultant Wdrożeniowy Comarch XL/Optima (Księgowość i