Parallelisierte LA-Bibliothek C/C++
-
Hallo,
ich suche nach einer freien parallelisierten LA-Bibliothek für C/C++.
Weitere Anforderungen sind:
- stabil & well-tested
- wird noch aktiv entwickelt/betreut
- die Grundfunktionalität von LAPACK sollte vorhanden sein (je mehr, desto besser)
Das ganze soll auf einer Maschine laufen, so dass ich Multithreading ggü. MPI bevorzuge (das ist aber kein entscheidender Punkt).
Bisher habe ich allerdings keine Bibliothek gefunden, die auch nur annähernd die o.g. Punkte erfüllt. Ich hätte eigentlich erwartet, dass es da ein gutes Angebot gibt; ich suche ja eigentlich nur ein parallelisiertes LAPACK (bzw CLAPACK) und man könnte meinen, dass so etwas ständig verwendet wird (z.B. in Rechenzentren). ScaLAPACK kommt dem gesuchten bisher am nächsten, ist halt in Fortran geschrieben, würde aber als Notlösung auch gehen.
Eventuell habe ich aber auch nicht gründlich genug gesucht. Kennt jemand hier im Forum noch passende Programmbibliotheken?
Grüße,
rolff
-
Falls nochmal jemand über den Thread stolpert, hier mal ein paar Punkte wie man LAPACK beschleunigen kann. Als erstes tauscht man die Netlib-Referenzimplementierung von BLAS/LAPACK gegen eine plattformoptimierte Implementierung aus; AMD ACML (kostenlos, proprietary) oder Intel MKL (teuer). Man linkt einfach gegen die libacml.so anstatt liblapack.so und die Laufzeit verbessert sich ca. um den Faktor 6 (getestet: Matrixfaktorisierung, LU-Solve, SVD). Der Code muss dazu nicht geändert werden.
ACML unterstützt außerdem Multithreading durch OpenMP, dazu muss man einfach gegen die OpenMP-Version linken (libacml_mp.so). Allerdings sind die Ergebnisse hier eher enttäuschend: Obwohl alle 4 Kerne am Anschlag rennen ("gemessen" mit htop) laufen die Berechnungen nur ca. 1.5x-2x mal schneller. Und das geht auch nur bei Routinen, die (a) parallelisierbar sind und (b) parallelisiert implementiert sind (LU geht, LU-Solve scheint sequenziell zu sein).
-
Hi.
Ich weiß nicht genau, was Du haben willst, aber vielleicht ist Elemental etwas für Dich.