2012-04-01 6 views
2

Bei der Parallelverarbeitung ist es normalerweise der erste Schritt, das Ursprungsproblem in eine Unteraufgabe zu zerlegen und sie auf Blöcke und Threads abzubilden.Gibt es eine effiziente Möglichkeit, Graphen auf Blöcke in der CUDA-Programmierung abzubilden?

Bei Problemen mit der regulären Datenstruktur ist es sehr einfach und effizient, z. B. Matrix Multiplikation, FFT und so weiter.

Aber Graphtheorie Probleme wie kürzester Weg, Graph Traversal, Baumsuche, haben unregelmäßige Datenstruktur. Es scheint mir nicht einfach zu sein, das Problem bei der Verwendung von GPU auf Blöcke und Threads zu verteilen.

Ich frage mich, ob es effiziente Lösungen für diese Art von Partition gibt?

Der Einfachheit halber, nehmen Sie als Beispiel ein Shortcap-Problem mit einer Quelle. Ich bin daran fest, wie man den Graphen so teilt, dass sowohl die Lokalität als auch die Koaleszenz entsteht.

+6

Das ist eine sehr weit gefasste Frage, die sehr schwer zu beantworten. Hatten Sie eine bestimmte Anwendung im Hinterkopf? Könnten Sie den Umfang dessen, nach dem Sie fragen, verfeinern? – talonmies

+0

Können Sie mehr über den Anwendungsbereich der Algorithmen sagen, nach denen Sie suchen? Ich kann meine Erfahrungen in der Suche nach dem nächsten Nachbarn austauschen, aber ich kann nicht hilfreich sein. Wenn Sie nach einem allgemeinen Grafikproblem wie der Spanning-Tree-Suche fragen ... – geek

+0

@ marina.k Ich arbeite nicht an einem Single-Source-Problem mit dem kürzesten Pfad. Erstens scheint der Dijkstra-Algorithmus schwierig zu sein, wenn er in einem Vielkernsystem realisiert wird. Zweitens, wenn eine dem Dijkstra-Algorithmus ähnliche Iterationslösung verwendet wird, weil die Beschränkung zwischen Knoten sehr komplex und unregelmäßig ist, ist es schwierig, die Lokalität und das Verschmelzen zu gewährleisten, selbst wenn geteilter Speicher zum Zwischenspeichern verwendet wird. – konjac

Antwort

1

Die Struktur der Baumstruktur wurde entwickelt, um die sequenzielle Vorgehensweise zu optimieren. Da in der Baumsuche jeder Zustand stark vom vorherigen Zustand abhängig ist, wäre es meiner Meinung nach nicht optimal, die Traversierung auf dem Baum zu parallelisieren.

Soweit es die Grafik betrifft, kann jeder verbundene Knoten parallel analysiert werden, aber ich denke, es könnte redundante Operationen für überlappende Pfade geben.

0

Sie können MapGraph verwenden, die GAS-Methode für alle Dinge verwendet, die Sie erwähnt .... sie haben auch ein Beispiel für die gleiche implementiert und Bibliothek für Gather, Apply und Scatter in Cuda für GPU und CPU-Implementierung auch enthalten.

Sie neueste Version finden Sie hier: http://sourceforge.net/projects/mpgraph/files/0.3.3/

Verwandte Themen