Lapack vagy alternativak

Fórumok

Nagy, 10k x 10k szimmetrikus, suru matrixegyenleteket kell megoldanom, neha invertalnom, es szeretnek hallani tapasztalatokat. Most MacOSX alatt hasznalom az Accelerate frameworkbe belepakolt cLapackot, de tobb problema is van.
Egyreszt, hogy szeretnem portolni a programot Linux ala, masreszt az Accelerate-ben nincs benne minden amire szuksegem van. Az egyik ilyen lenne az extra preciz iterative finomitas, hibakorlat-becslessel.

Lattam jo par Lapack-alapu fejlesztest, de mintha nyoma sem lenne tisztesseges dokumentacionak. Tovabba elegge elszoktam attol, hogy nekem kelljen levadaszni es leforditani a fuggosegeket.

Milyen Lapack alternativak vannak, amiket konnyu installalni, beforgatni es behuzalozni?

Hozzászólások

Hát én amikor utoljára néztem (nekem hatalmas mátrixok pszeudoinverze kellett), a lapacknak nem találtam alternatíváját. Bár ez mondjuk már kb. egy éve volt:
Akkor az Armadillot probáltam illetve pár ruby-s linalg csomagot (talán lapack wrappert is) de ezek nálam annyi mem+idő overheadet adtak hozzá dolgokhoz hogy én végül maradtam a plain lapacknál c-ből hívva.

Es nem volt szivas a forditassal? Azt tudom, hogy legalabb a BLAS a fuggosegei kozott van.
Nalam mac alatt a 3.2-es van fent, amit jo lenne legalabb 3.4-re frissiteni, de ezt muszaj kezzel forgatni.
Viszont ha neked sikerult installalnod egy lapackot, akkor allitolag erdemes kiprobalni a ScaLapackot, a Magmat vagy az Elementalt. Ezek mind lapackra epulnek, csak parhuzamositas van benne. (van meg a libFlame projekt, de az nem tudom altalanos-e vagy celhardverre van kihegyezve.)

Kozben raakadtam egy erdekes es jol dokumentalt verziora, az Eigen-re.
Template-ekkel dolgozik, szoval nem kell forgatni es emiatt jol portolhato. Emellett nagyon gyors, es a template-eles miatt tud szamolni long double-lel.
Viszonylag konnyu volt behuzalozni.

Egyet kell ertsek vele, tegnap sikerult behuzalozni, es remekul megy.
Nem template-eli a szimmetrikus matrixokat, vagyis muszaj feltolteni az also es a felso haromszoget is, de az eredmeny karpotol. Egy 6000x6000res matrixegyenletet megoldott 90 masodperc alatt, az 1000x1000res-sen meg atgyalogol (megjegyzem, a lapack is, de ott nem probaltam 6k-sat, ugy tunt precizitasi gondjai vannak).

Valamiert viszont a dinamikus meretu VectorXd deklaralasnal mindig lehalt, ha kezzel megcsinaltam 1-soros matrixbol ugy mukodott. Es a headerbe muszaj volt includolni, es ezzel egyutt az osszes helyre ahol oroklodik az osztaly (a gcc-nek meg kell adni az Eigen library helyet). Nem nagy gond, de meg akartam ezt uszni egy forward deklaracioval. Viszont mukodik es gyors. Par napon belul kiprobalom linux alatt.

James Demmel, Yozo Hida, William Kahan, Xiaoye S. Li, Sonil Mukherjee, and Jason Riedy. Error Bounds from Extra Precise Iterative Refinement. ACM Transactions on Mathematical Software (TOMS), 32(2):325-351, 2006.

http://www.netlib.org/lapack/lawnspdf/lawn165.pdf

Netlib-en ott van minden forrás, fordítani neked kell. A fordítás nálam Linux, Windows (MinGW) és Mac OS X 10.5.8 alatt is ment. Mac-en kell előtte egy gfortran-t is csinálni :-)

Igen, es ugy tudom, hogy a Lapack 3.4-ben is benne van ez a metodus. Gfortran szerencsere van finkbol, de a bonyolult forditasoktol mindig tartok. Ha frissitik a klaszteren az oprendszert, rengeteg dolgot ujra kell forditani (nem, nem torlik le a regit, csak a ki tudja milyen fuggosegek valtoznak).
De elobb-utobb kiprobalom ezt a verziot is, koszi.