Pitanja:
1) kolika je matrica/problem?
2) da li je matrica sistema simetricna/hermitska?
3) odakle potice/kako glasi problem?
4) imas MATLAB?
5) cuo za BLAS?
6) cuo za ATLAS?
7) cuo za LAPACK?
8) iskustvo sa Fortranom?
Za n<=1e4 mozes da koristis rutine za ne-retke matrice u MATLAB-u. Mozda u Mathematici ali samo verzija >=5.
Za simetricne ili hermitske matrice dimenzije do 1e7 mozes da koristis conjugate gradient. Preconditioning helps. A lot. Da ponovim: PUNO.
Performanse ce zavisiti puno od odnosa najvece i najmanje sopstvene vrednosti matrice sistema (condition number of the matrix).
Ovo je glavni razlog zasto je preconditioning bitan. Preconditioning je glavni razlog zasto je bitno znati i razumeti konkretan problem. Seriously.
Za nesimetricne sisteme postoji biconjugate gradient. Nemam licnog iskustva sa doticnim ali sam razgovarao sa nekim ko ima. Iskustvo je bilo lose. Izrazito lose. Pouka: potrudi se da dovedes problem u Hermitian/symmetric formu.
*detaljna* referenca iz numericke analize je
http://www.amazon.com/Introduc...lied-Mathematics/dp/038797878X
odlicna referenca za numericku linearnu algebru je:
http://www.amazon.com/Computat...&qid=1175839017&sr=1-1
za brzinu koda bitna je optimizacija pristupa memoriji i cache-u. puno. SSE2/3 je dobra ideja. oba problema resavaju se koriscenjem optimizovanih BLAS ili ATLAS rutina za sve osnovne operacije nad vektorima i matricama.
znaj da je MATLAB tanak omot oko prilicno adekvatne (sto se koriscenja memorije tice) LAPACK/BLAS implementacije.
znaj da su zato MATLAB instrukcije prilicno brze.
znaj medjutim da je MATLAB scripting jezik:
a) ocajan
b) ocajno spor
Happy supercomputing,
Marko