Frage

Ich habe MPI-System in einem Cluster zu implementieren. Wenn hier jemand Erfahrung mit MPI (MPICH / OpenMPI) hat, würde Ich mag wissen, was besser ist und wie die Leistung kann auf einem Cluster von x86_64-Box gesteigert werden.

War es hilfreich?

Lösung

MPICH hat viel mehr herum. Es ist sehr leicht zu transportieren und Sie werden Online-wert Jahren Tipps und Tricks zu finden. Es ist eine sichere Wette, und es ist wahrscheinlich kompatibel mit mehr MPI Programmen gibt.

OpenMPI ist neuer. Es ist zwar nicht ganz so tragbar ist, unterstützt sie die gängigsten Plattformen wirklich gut. Die meisten Menschen scheinen in mehrfacher Hinsicht, es ist viel besser zu denken, vor allem für die Fehlertoleranz -. Aber diese Vorteile in Anspruch nehmen Sie einige seiner besonderen Eigenschaften müssen, die nicht Teil des MPI-Standard sind

Was die Leistung, es hängt viel von der Anwendung; es ist schwer, allgemeine Ratschläge zu geben. Sie sollten eine spezifische Frage nach der Art der Berechnung schreiben Sie, die Anzahl der Knoten, und die Art der Hardware ausgeführt werden soll -. Einschließlich welche Art von Netzwerk-Hardware Sie verwenden

Andere Tipps

ich schon einige parallele Anwendungen für Windows- und Linux-Cluster geschrieben haben, und ich kann Ihnen mitteilen, dass gerade jetzt MPICH2 ist wahrscheinlich die sicherere Wahl. Es ist, wie die anderen Responder erwähnt, eine sehr reife Bibliothek. Außerdem gibt es reichlich Sende Unterstützung (via MPI_Bcast ) jetzt und in der Tat hat MPICH2 durchaus einige wirklich nette Features wie zerstreuen-and-sammeln .

OpenMPI gewinnt allerdings etwas an Boden. Penguin Computing (sie sind eine große Cluster-Anbieter, und sie mögen Linux) tatsächlich einige wirklich starke Benchmarks hat, wo OpenMPI schlägt MPICH2 Hände unter bestimmten Umständen.

In Bezug auf Ihre Kommentare über „Leistungssteigerung“, der beste Ratschlag, den ich geben kann ist, niemals mehr Daten zu senden, als unbedingt nötig, wenn Sie I / O Bindung und nie mehr als nötig Arbeit tun, wenn Sie CPU sind gebunden. Ich habe in die Falle getappt mehr als einmal das falsche Stück Code zu optimieren :) Hoffentlich werden Sie nicht in meine Fußstapfen treten!

Überprüfen Sie die MPI-Foren - sie haben viele gute Informationen über MPI-Routinen und die Beowulf Website viele interessante Fragen beantwortet hat.

‚Besser‘ ist schwer zu definieren ... ‚Faster‘ durch Benchmarking es mit Ihrem Code, und Ihre Hardware zu beantworten. Dinge wie kollektive & Offload-Optimierung auf Ihrer genaue Hardware abhängen und sind auch ganz im Hinblick auf Treiber-Stack-Versionen variabel, sollte Google in der Lage sein, Sie arbeiten Kombinationen zu finden.

Was die Optimierung der Arbeit, die auf dem Code hängt etwas, und etwas auf der Hardware.

Ist Ihr Code I / O Bindung an Speicher? In diesem Fall Untersuchung etwas besser als NFS könnte viel, oder unter Verwendung von MPI I / O statt naiv parallel I / O

Hilfe

Wenn Sie Netzwerk gebunden sind, dann an Kommunikation Ort suchen, und comms / Compute Überlappung kann helfen. Die meisten der verschiedenen MPI-Implementierungen haben Tuning-Optionen für die lokalen Shared Memory anstatt das Netzwerk für Intranode Comms verwenden, das für einige Codes deutlich die Netzlast reduzieren.

Die Trennung von I / O und MPI-Verkehr kann einen großen Unterschied bei einigen Cluster machen, insbesondere für die Gigabit-Ethernet-Cluster.

Wir haben mpich einfach, weil es schien, die meisten verfügbaren und am besten dokumentierte, haben wir nicht viel Mühe in die Test Alternativen setzen. MPICH hat angemessene Werkzeuge für den Einsatz unter Windows.
Die wichtigsten Performance-Problem, das wir hatten, war, dass wir die gleichen Basisdaten zu allen Knoten und MPICH nicht (oder nicht) Unterstützung Broadcast versenden benötigt - so die Bereitstellung der Ausgangsdaten war O (n)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top