Löse kleine symmetrische positiv definite Ax = b nur auf der GPU

8

Ich versuche eine Anwendung in Echtzeit-3D-Modellierung zu optimieren. Der Berechnungsteil der Anwendung läuft fast vollständig auf der GPU in CUDA. Die Anwendung erfordert die Lösung eines kleinen (6 × 6) doppeltpräzisen symmetrischen positiv definiten linearen Systems Ax = b 500+ mal pro Sekunde. Gegenwärtig wird dies mit einer effizienten CPU - basierten Linearen Algebra - Bibliothek unter Verwendung von Cholesky durchgeführt, erfordert jedoch das Kopieren von Daten von der CPU - GPU und zurück zur GPU hunderte Male pro Sekunde und der Overhead des Kernels startet jedes Mal usw.

Wie kann ich die Lösung für das lineare System auf der GPU berechnen, ohne die Daten überhaupt auf die CPU zu nehmen? Ich habe ein wenig über die MAGMA-Bibliothek gelesen, aber es scheint eher hybride Algorithmen als nur GPU-Algorithmen zu verwenden.

Ich bin darauf vorbereitet, dass die Lösung eines einzelnen linearen Systems auf der GPU viel langsamer sein wird als bei der vorhandenen CPU-basierten Bibliothek, aber ich möchte sehen, ob das durch das Entfernen der Datenkommunikation zwischen dem Host und dem Gerät und der Overhead von Kernelstarts usw. hunderte Male pro Sekunde. Wenn es keine GPU nur LAPACK-ähnliche Alternative gibt, wie würde ich etwas implementieren, um diesen speziellen 6x6 Fall nur auf der GPU zu lösen? Könnte es ohne große Investitionen in GPU-BLAS-Bibliotheken gemacht werden?

    
Paul Caheny 29.07.2012, 17:06
quelle

1 Antwort

3

NVIDIA hat letzten Herbst einen Code für einen Batch-Ax = b Solver an die registrierte Entwickler-Website geschickt. Dieser Code funktioniert für generische Matrizen und sollte gut genug für Ihre Anforderungen funktionieren, vorausgesetzt, Sie können die symmetrischen Matrizen zu vollständigen Matrizen erweitern (das sollte kein Problem für ein 6x6 sein?). Da der Code Pivotieren ausführt, was für positiv definitive Matrizen nicht notwendig ist, ist er für Ihren Fall nicht optimal, aber Sie können ihn möglicherweise für Ihre Zwecke modifizieren, da der Code unter einer BSD-Lizenz steht.

Die Standard-Entwickler-Website von NVIDIA hat derzeit einige Probleme. So können Sie den Batch-Solver-Code zu diesem Zeitpunkt herunterladen:

(1) Gehen Sie zu Ссылка

(2) Wenn Sie ein bestehendes NV-Entwickler-Konto haben (z. B. über partners.nvidia.com), klicken Sie auf den grünen Link "Login to nvdeveloper" in der rechten Hälfte des Bildschirms. Andernfalls klicken Sie auf "Join nvdeveloper", um einen neuen Account zu beantragen. Anfragen für neue Konten werden normalerweise innerhalb eines Geschäftstages genehmigt.

(3) Melden Sie sich bei der Eingabeaufforderung mit Ihrer E-Mail-Adresse und Ihrem Passwort an

(4) Auf der rechten Seite befindet sich ein Abschnitt mit dem Titel "Neueste Downloads". Der fünfte Punkt von oben ist "Batched Solver". Klicken Sie darauf und es wird Sie auf die Download-Seite für den Code bringen.

(5) Klicken Sie auf den Link "Download" und dann auf "Akzeptieren", um die Lizenzbedingungen zu akzeptieren. Dein Download sollte starten.

    
njuffa 30.07.2012, 17:23
quelle