Konvertieren eines pthreaded Programm MPI?
-
22-07-2019 - |
Frage
Ich verstehe die Unterschiede zwischen einem Multi-Thread-Programm und einem Programm, das sich auf Inter-Maschine-Kommunikation. Mein Problem ist, dass ich ein schönes multithreaded Programm geschrieben in ‚C‘, das funktioniert und läuft wirklich gut auf einer 8-Core-Maschine. Es gibt nun Gelegenheit, Port dieses Programm zu einem Cluster Zugriff auf mehrere Kerne zu gewinnen. Ist es der Mühe wert, die pthread Sachen auszureißen und Nachrüstung MPI (die ich nie benutzt habe) oder sind wir besser dran Umkodierung die ganze Sache (oder die meisten davon) von Grund auf neu? Angenommen, wir sind „stecken“ mit C so ein Großhandel Änderung der Sprache ist keine Option.
Lösung
Je nachdem, wie Sie Ihre Software geschrieben wird, kann es oder auch nicht von Vorteil sein, um MPI zu gehen über Ihre Pthread Implementierung zu halten.
Leider (oder zum Glück), Message Passing ist ein ganz anderes Tier als pthreading - die Grundannahme ist ganz anders. Ich liebe
Leider ist die Art und Weise Sie Daten teilen, ist sehr unterschiedlich. Es gibt keinen direkten Zugriff auf Daten in anderen Threads (da es auf anderen Maschinen sein kann), so kann es eine sehr schwierige Aufgabe sein von pthreads zu MPI zu migrieren. Auf der anderen Seite, wenn der Code ist so geschrieben, jeder Thread isoliert ist, kann es eine einfache Aufgabe, und auf jeden Fall lohnen. Um festzustellen, wie nützlich diese sein wird, müssen Sie den Code verstehen, und was Sie hoffen, durch den Wechsel zu erreichen. Es kann als eine Lernerfahrung sinnvoll sein (Sie lernen viel über Synchronisierung und Threading von in MPI arbeiten), aber kann nicht sinnvoll sein, wenn die Gewinne gering sein werden.
Andere Tipps
Re. Ihr Kommentar zu Reed - das klingt wie eine einfache, mit geringem Overhead Umstellung auf MPI. Nur vorsichtig sein. Nicht all MPI-APIs dynamische Erstellung von Prozessen unterstützen, das heißt, Sie Ihr Programm mit N Prozessen (spezifizierte beim Start) starten und Sie sind mit N-Prozessen während der gesamten Lebenszeit des Programms fest