MPI oder Sockets?

7

Ich arbeite an einem lose gekoppelten Cluster für einige Datenverarbeitung. Der Netzwerkcode und der Verarbeitungscode sind vorhanden, aber wir bewerten verschiedene Methoden in unserem Ansatz. Gerade jetzt, wie es sein sollte, sind wir an Leistungsprobleme gebunden, und wir versuchen, diesen Engpass zu verringern. Natürlich wären schnellere Switches wie Infiniband großartig, aber wir können uns nicht den Luxus leisten, einfach nur das rauszuwerfen, was wir haben und neue Ausrüstung zu bekommen.

Meine Frage ist das. Alle traditionellen und ernsthaften HPC-Anwendungen, die auf Clustern ausgeführt werden, werden typischerweise mit Message-Passing im Gegensatz zum direkten Senden über Sockets implementiert. Was sind die Leistungsvorteile dafür? Sollten wir eine Beschleunigung sehen, wenn wir von Steckdosen wechseln?

    
Nicholas Mancuso 30.09.2008, 15:40
quelle

10 Antworten

19

MPI könnte Buchsen verwenden. Es gibt jedoch auch eine MPI-Implementierung, die mit SAN (System Area Network) verwendet werden kann, die direkten verteilten gemeinsamen Speicher verwendet. Das ist natürlich, wenn Sie die Hardware dafür haben. Mit MPI können Sie solche Ressourcen in Zukunft nutzen. In diesem Fall können Sie massive Leistungsverbesserungen erzielen (aufgrund meiner Erfahrung mit Clustern zur Uni-Zeit können Sie Zuwächse von einigen Größenordnungen erreichen). Wenn Sie also Code schreiben, der auf höhere Cluster portiert werden kann, ist die Verwendung von MPI eine sehr gute Idee.

Auch wenn Sie Performance-Probleme verwerfen, können Sie mit MPI viel Zeit sparen, die Sie nutzen können, um die Leistung anderer Teile Ihres Systems zu verbessern oder einfach Ihre Gesundheit zu bewahren.

    
OldMan 30.09.2008, 16:18
quelle
11

Ich würde empfehlen, MPI zu verwenden, anstatt selbst zu rollen, es sei denn, Sie sind sehr gut in dieser Art von Dingen. Nachdem ich einige verteilte computer-ähnliche Anwendungen unter Verwendung meiner eigenen Protokolle geschrieben habe, finde ich mich immer wieder (und schlecht reproduzierbar) in MPI gefundene Merkmale.

Leistungsmäßig würde ich nicht erwarten, dass MPI Ihnen greifbare Netzwerk-Beschleunigungen geben wird - es benutzt Sockets genau wie Sie. MPI wird Ihnen jedoch viele Funktionen zur Verfügung stellen, die Sie für die Verwaltung vieler Knoten benötigen, d. H. Für die Synchronisation zwischen Knoten.

    
freespace 30.09.2008 16:02
quelle
4

In diesem Fall ist Leistung nicht die einzige Überlegung, selbst bei Hochleistungsclustern. MPI bietet eine Standard-API und ist "portabel". Es ist relativ trivial, eine Anwendung zwischen den verschiedenen Versionen von MPI zu wechseln.

Die meisten MPI-Implementierungen verwenden Sockets für TCP-basierte Kommunikation. Die Chancen stehen gut, dass jede gegebene MPI-Implementierung besser optimiert wird und eine schnellere Nachrichtenübermittlung ermöglicht als eine selbst entwickelte Anwendung, die Sockets direkt verwendet.

Sollten Sie jemals die Möglichkeit haben, Ihren Code auf einem Cluster mit InfiniBand auszuführen, abstrahiert der MPI-Layer diese Codeänderungen. Dies ist kein trivialer Vorteil - die Kodierung einer Anwendung zur direkten Verwendung der OFED-Implementierung (oder einer anderen IB-Verben) ist sehr schwierig.

Die meisten MPI-Anwendungen enthalten kleine Test-Apps, mit denen die Korrektheit des Netzwerk-Setups unabhängig von Ihrer Anwendung überprüft werden kann. Dies ist ein großer Vorteil, wenn es darum geht, Ihre Anwendung zu debuggen. Der MPI-Standard enthält die "pMPI" -Schnittstellen zum Profilieren von MPI-Aufrufen. Mit dieser Schnittstelle können Sie außerdem Prüfsummen oder andere Datenüberprüfungen zu allen Nachrichtenweiterleitungsroutinen hinzufügen.

    
Stan Graves 17.04.2009 20:14
quelle
3

MPI hat den Vorteil, dass Sie kollektiv kommunizieren können. Do Broadcasts / Reduktionen in O (log p) / * p ist Ihre Anzahl von Prozessoren * / anstelle von O (p) ist ein großer Vorteil.

    
Chad Brewbaker 19.05.2009 16:29
quelle
2

Ich muss OldMan und Freespace zustimmen. Wenn Sie nicht über eine spezifische und Verbesserung einer nützlichen Metrik (Leistung, Wartbarkeit usw.) über MPI Bescheid wissen, warum erfinden Sie das Rad neu. MPI stellt eine große Menge an gemeinsamem Wissen bezüglich des Problems dar, das Sie zu lösen versuchen.

Es gibt eine große Anzahl von Problemen, die Sie lösen müssen, die nicht nur Daten senden. Verbindungsaufbau und Wartung werden alle in Ihrer Verantwortung liegen. Wenn MPI ist die genaue Abstraktion (es klingt wie es ist) Sie brauchen, verwenden Sie es.

Zumindest ist die Verwendung von MPI und späteres Refactoring mit Ihrem eigenen System ein guter Ansatz, der die Installation und die Abhängigkeit von MPI kostet.

Ich mag vor allem Oldmans Argument, dass MPI Ihnen weit mehr bietet als einfache Socket-Kommunikation. Sie erhalten eine Vielzahl von parallelen und verteilten Computing-Implementierung mit einer transparenten Abstraktion.

    
Stephen Pellicer 30.09.2008 17:40
quelle
2

Message Passing ist ein Paradigma, keine Technologie. In der allgemeinsten Installation verwendet MPI Sockets für die Kommunikation. Sie könnten eine Beschleunigung sehen, wenn Sie zu MPI wechseln, aber nur, wenn Sie Ihre Socket-Kommunikation nicht optimiert haben.

Wie ist Ihre Anwendungs-E / A gebunden? Ist es an die Übertragung der Datenblöcke an die Arbeitsknoten gebunden oder ist es wegen der Kommunikation während der Berechnung gebunden?

Wenn die Antwort "wegen der Kommunikation" lautet, besteht das Problem darin, dass Sie eine eng gekoppelte Anwendung schreiben und versuchen, sie auf einem Cluster auszuführen, der für lose gekoppelte Aufgaben ausgelegt ist. Die einzige Möglichkeit, Leistung zu erzielen, besteht darin, bessere Hardware zu bekommen (schnellere Switches, Infiniband usw.) ... vielleicht könnten Sie sich Zeit für die HPC von jemand anderem nehmen?

Wenn die Antwort "Datenblock" -Übertragungen ist, dann überlegen Sie sich, den Mitarbeitern mehrere Datenblöcke zuzuweisen (damit sie länger beschäftigt bleiben) & amp; Komprimiere die Datenblöcke vor der Übertragung. Dies ist eine Strategie, die in einer lose gekoppelten Anwendung helfen kann.

    
paxos1977 30.09.2008 17:46
quelle
1

Ich habe MPI nicht benutzt, aber ich habe Sockets ziemlich oft benutzt. Es gibt einige Dinge, die bei Hochleistungssockeln zu beachten sind. Machst du viele kleine Pakete oder große Pakete? Wenn Sie viele kleine Pakete machen, sollten Sie den Nagle-Algorithmus ausschalten, um schneller reagieren zu können:

setsockopt (m_socket, IPPROTO_TCP, TCP_NODELAY, ...);

Außerdem kann die Verwendung von Signalen viel langsamer sein, wenn versucht wird, eine hohe Datenmenge zu übertragen. Vor langer Zeit machte ich ein Testprogramm, bei dem der Leser auf ein Signal wartete und ein Paket las - es würde ungefähr 100 Pakete / Sek. Erhalten. Dann blockierte ich nur Lesevorgänge und bekam 10000 Lesevorgänge pro Sekunde.

Der Punkt ist, all diese Optionen zu betrachten und sie tatsächlich zu testen. Unterschiedliche Bedingungen machen verschiedene Techniken schneller / langsamer. Es ist wichtig, nicht nur Meinungen zu bekommen, sondern sie auf die Probe zu stellen. Steve Maguire spricht in "Writing Solid Code" darüber. Er verwendet viele Beispiele, die kontraintuitiv sind, und testet sie, um herauszufinden, was besseren / schnelleren Code macht.

    
Dan Hewett 30.09.2008 16:29
quelle
0

MPI verwendet Sockets unterhalb, also sollte der einzige Unterschied die API sein, mit der Ihr Code verbunden ist. Sie könnten das Protokoll feinabstimmen, wenn Sie Sockets direkt verwenden, aber das ist es. Was genau machst du mit den Daten?

    
Greg Rogers 30.09.2008 15:52
quelle
0

MPI Verwendet Sockets, und wenn Sie wissen, was Sie tun, können Sie wahrscheinlich mehr Bandbreite aus Sockets herausholen, weil Sie nicht so viele Metadaten senden müssen.

Aber Sie müssen wissen, was Sie tun, und es ist wahrscheinlich fehleranfälliger. Im Wesentlichen würden Sie MPI durch Ihr eigenes Nachrichtenprotokoll ersetzen.

    
Omar Kooheji 30.09.2008 16:01
quelle
0

Für Messaging mit hohem Volumen und geringem Aufwand Unternehmen möchten Sie vielleicht auschecken OAMQ mit mehreren Produkten. Die Open-Source-Variante OpenAMQ betreibt angeblich den Handel bei JP Morgan, also sollte es zuverlässig sein, oder?

    
pklausner 30.09.2008 16:09
quelle

Tags und Links