2012-04-04 3 views
0

Ich habe eine Frage im Zusammenhang mit Parallel Computing. Ich habe einen ziemlich großen, in C++ geschriebenen Code, der mit OpenMP auf einer gemeinsamen Speicherbasis parallelisiert wird. Ich wollte fragen, ob es möglich ist, diesen Code für geteilten Speicher in einen Code für verteilten Speicher umzuwandeln.OpenMP zu verteilter Speicher-Code

Wenn möglich, welche Schritte müssen ausgeführt werden? Vielen Dank für Ihre Mitarbeit.

Danke, Rahul Singh

+0

Niemand kann Ihnen ohne weitere Informationen eine definitive Antwort geben. Veröffentlichen Sie einen relevanten Code oder erklären Sie, wie Ihr Programm ein bisschen besser funktioniert. – Bojangles

+0

Ich hoffe, Sie erkennen, dass es keine allgemeine Antwort darauf gibt. Konvertieren eines shared-memory-Programms zu verteilten ist extrem anwendungsspezifisch. – Mysticial

+1

Um nach einer allgemeinen Antwort zu fragen, ist das gleiche wie zu fragen, wie [HTML mit Regex parsen] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained) -Stichworte). – Mysticial

Antwort

0

Die meisten Programme, die auf Shared-Memory-Computer parallelisiert werden kann, kann auch für die Ausführung auf verteilten Speicher Computer parallelisiert werden, um laufen. Also ja, das Problem, dass Ihr OpenMP-Programm löst, kann wahrscheinlich auf einem verteilten Speicher-Computer gelöst werden. Die Konvertierung Ihres OpenMP-Programms in ein verteiltes Speicherprogramm ist jedoch eine andere Sache. Sie sollten besser mit einer seriellen Implementierung beginnen und parallelisieren, als zu versuchen, einen Modus des parallelen Denkens für einen anderen Modus der parallelen Ausführung anzupassen.

Also, der erste Schritt, den Sie suchen, könnte sein, Ihr Programm zu vereinheitlichen. Aber, wie die Kommentatoren bereits angedeutet haben, es ist sehr schwierig, nützlichere Ratschläge zu geben als ich bereits habe (und ich habe überhaupt keinen sehr nützlichen Rat gegeben), ohne viel mehr über Ihre Bewerbung zu wissen.

0

Shared Memory und Distributed Memory sind zwei verschiedene Paradigmen im parallelen Rechnen, die oft unterschiedliche Denkstrategien bedeuten. Einige parallele Programmierrahmenwerke, wie UPC oder MPI, können emuliert werden, um entweder auf gemeinsam genutzten oder verteilten Maschinen zu laufen, obwohl es besser ist, dies nicht zu tun, da z. hier soll UPC auf gemeinsam genutztem Speicher verwendet werden und MPI soll auf verteilten Speichermaschinen verwendet werden. Ich bin mir nicht sicher über OpenMP.

In beiden Fällen ist mein Ratschlag, zuerst darüber nachzudenken, wie Sie in Ihrem Code auf einer verteilten Architektur Parallelität erhalten und dann mit MPI gehen können. Wenn Sie in der Computer Science-Branche sind, gibt es bereits sehr gut geschriebene Pakete, wie PETSc, von Argonne National Lab, und Trilinos, von Sandia National Lab, die Ihnen helfen können, viel schneller zu entwickeln.

+0

MPI im Shared Memory ist oft eine sehr gute Wahl, besonders für Codes, die auf einer Vielzahl von Maschinen laufen sollen. –

+0

@HighPerformanceMark Ich stimme dem zu. Es ist nur so, dass MPI im Vergleich zu OpenMP normalerweise viel mehr Arbeit macht. SO, wenn Sie nur mit Shared Memory beschäftigt sind, könnte OpenMp/UPC wahrscheinlich eine bessere Wahl sein. – GradGuy