GPU-Bibliotheken für lineare Algebra-Operationen

8

Ich suche nach GPU-Bibliotheken, um meinen Code zu beschleunigen, dessen primäre "Hochleistungs" -Regionen Singularwertzerlegung, QR-Faktorisierung und Eigenwerte, Eigenvektorberechnung aufweisen. Ich habe die Website von Nvidia nach Tools wie CuBLAS, Magma usw. durchsucht, möchte den Code jedoch nicht in Cuda schreiben.

Es wäre wunderbar, wenn es da draußen Bibliotheken gäbe, die ich einfach aus meinem Haupt-C-Code für Dinge wie SVD, QR usw. "aufrufen" kann, und die Berechnung würde auf den GPUs durchgeführt. Zusammenfassend habe ich also einen normalen C-Code, in dem die intensiven linearen Algebraoperationen beschleunigt werden. Kennt jemand eine Open Source (vorzugsweise) Bibliothek, die dies kann?

Vielen Dank.

atmaere
quelle

Antworten:

8

Für [CU] BLAS gibt es im CUDA-Toolkit (src / fortran_thunking. {C, h}) einen Wrapper namens "thunking", der Zeiger aus dem CPU-Speicher entnimmt und die gesamte GPU-Zuweisung / das Kopieren für Sie übernimmt. Sie können es mit Präprozessoranweisungen wie in Ihren Code einfügen

#define ZGEMV CUBLAS_ZGEMV
#define ZGEMM CUBLAS_ZGEMM
...

Für LAPACK verfügt Magma über CPU-seitige Schnittstellen für die meisten, wenn nicht alle Funktionen (diese werden in der Regel zuerst implementiert), sodass Sie wie beim Thunking nur Anrufe austauschen. In einigen Fällen können die Schnittstellen- oder Arbeitsbereichsanforderungen etwas anders sein, daher sollten Sie etwas vorsichtiger sein als beim Thunking.

Der notwendige Haftungsausschluss ist, dass es kein kostenloses Mittagessen gibt: Wenn Sie nicht bereit sind, die Speicherkopien zumindest explizit zu behandeln, wird Ihre Leistung auf große Probleme mit hoher Rechenintensität (Flops / Bytes) beschränkt sein. Wenn Ihre Probleme klein und / oder stapelweise sind, würde ich Ihnen dringend empfehlen, Steuercode zu schreiben, um die Speicherkopien und Bibliotheksaufrufe zu streamen, um Speicherkopien und Berechnungen zu überlappen. Dies ist nicht wirklich CUDA, sondern eine API, da Sie keine Kernel schreiben müssen. Sowohl CUBLAS als auch Magma bieten API-Aufrufe zum Angeben von Streams.

Max Hutchinson
quelle
4

Karl Rupp, der ViennaCL ( http://viennacl.sourceforge.net/ ) schreibt und auf Computational Sci StackEx arbeitet, kann sich hier einschalten - seine Bibliothek verfügt über mehrere Matrixzerlegungen, einschließlich SVD, LU, Eigendecomp usw. Eine reine Header-Bibliothek, die gut mit C ++ - Code (bei C nicht sicher) kompatibel sein sollte.

Ein Beispiel für die Verwendung mit LU-Faktorisierungen - http://viennacl.sourceforge.net/viennacl-examples-dense-matrix.html .

Jesse Chan
quelle
Siehe für seine vorherige Beschreibung. scicomp.stackexchange.com/questions/376/…
Jesse Chan
Wir sind dabei, ViennaCL für andere Sprachen als C ++ zu öffnen. Eine reine C-Schnittstelle für BLAS-Operationen wird mit der kommenden Version 1.5.0 und weitere Faktorisierungsalgorithmen mit Version 1.6.0 verfügbar sein.
Karl Rupp
3

Vielleicht möchten Sie einen Blick auf die CULA-Bibliothek werfen , die eine Reihe der häufigsten LAPACK / BLAS-Operationen in einfacher Genauigkeit (kostenlose Edition) und doppelter Genauigkeit (Vollversion, dh kostenpflichtige Version) implementiert.

Die Bibliothek fungiert als direkter Ersatz für LAPACK / BLAS. Wenn Sie diese Funktionen also bereits in Ihrem Originalcode verwenden, sollten Sie nichts ändern müssen.

Pedro
quelle