Frage

Ich arbeite an einem losen gekoppelten Cluster für einige Datenverarbeitung. Der Netzwerkcode und Verarbeitungscode ist vorhanden, aber wir verschiedene Methoden in unserem Ansatz evaluieren. Gerade jetzt, wie wir sollten, wir sind I / O Bindung auf Performance-Probleme, und wir versuchen, diesen Engpass zu verringern. Offensichtlich schnelle Schalter wie Infiniband wären genial, aber wir können nicht den Luxus leisten, nur werfen, was wir haben und neue Ausrüstung zu bekommen.

Meine Frage gestellt ist dies. Alle traditionellen und schwere HPC-Anwendungen auf Clustern durchgeführt werden in der Regel mit der Meldung direkt gegen das Senden über Sockets vorbei umgesetzt. Was sind die Leistungsvorteile zu diesem? Sollten wir einen Speedup sehen, ob wir von Steckdosen eingeschaltet?

War es hilfreich?

Lösung

MPI KÖNNTEN Sockets verwenden. Aber es gibt auch MPI-Implementierung mit SAN (System Area Network) verwendet werden, die direkt verteilten gemeinsam genutzten Speicher verwenden. Das ist natürlich, wenn Sie die Hardware dafür. So MPI ermöglicht es Ihnen, diese Ressourcen in der Zukunft zu nutzen. An diesem Fall können Sie massive Performance-Verbesserungen gewinnen (mit Clustern auf meiner Erfahrung zurück an der Universität Zeit, Sie Gewinne von einigen Größenordnungen erreichen können). Also, wenn Sie Code writting, die zu höheren End-Cluster portiert werden kann, unter Verwendung von MPI eine sehr gute Idee ist.

Auch Performance-Probleme zu verwerfen, MPI verwenden, können Sie viel Zeit sparen, dass Sie die Leistung anderer Teile des Systems verbessern können oder einfach Ihre geistige Gesundheit speichern.

Andere Tipps

würde ich Ihre eigene mit MPI statt Walzen empfehlen, es sei denn, Sie zu dieser Art der Sache sehr gut sind. Nachdem wir einige verteilte Computing-artige Anwendungen schrieb meine eigene Protokolle, ich mich immer finden Reproduktion (und Wiedergabe schlecht) innerhalb MPI Merkmale aufweisen.

Performance weise würde ich nicht erwarten, dass MPI Sie keine greifbaren Netzwerk speedups geben - es nutzt Steckdosen wie Sie. MPI werden Sie jedoch mit viel Sie die Funktionalität bieten viele Knoten für die Verwaltung, das heißt die Synchronisation zwischen den Knoten benötigen würde.

Die Leistung ist nicht die einzige Überlegung in diesem Fall, auch auf Hochleistungsclustern. MPI bietet ein Standard-API und ist „tragbar.“ Es ist relativ trivial, eine Anwendung zwischen den verschiedenen Versionen von MPI zu wechseln.

Die meisten MPI-Implementierungen verwenden Buchsen für TCP-basierte Kommunikation. Quoten sind gut, dass eine bestimmte MPI-Implementierung besser optimiert werden und schneller Message Passing bieten, als eine Anwendung home grown-Buchsen direkt verwenden.

Darüber hinaus sollten Sie jemals die Chance bekommen, den Code auf einem Cluster ausführen, die InfiniBand hat, die MPI-Schicht wird abstrakt eine dieser Code-Änderungen. Dies ist kein trivialer Vorteil - Codierung eine Anwendung direkt OFED zu verwenden (oder eine anderes IB Verb) Umsetzung sehr schwierig ist.

Die meisten MPI-Anwendungen umfassen kleine Test-Anwendungen, die die Richtigkeit der Netzwerkeinrichtung verwendet werden kann, unabhängig von Ihrer Anwendung zu überprüfen. Dies ist ein großer Vorteil, wenn es darum geht, Ihre Anwendung zu debuggen. Der MPI-Standard enthält die „PMPI“ Schnittstellen zur Profilierung MPI aufruft. Diese Schnittstelle ermöglicht es Ihnen auch leicht Prüfsummen hinzufügen oder andere Datenüberprüfung auf alle Message-Passing-Routinen.

MPI hat den Vorteil, dass Sie kollektive Kommunikation tun. Doing Ausstrahlungen / Reduzierungen in O (log p) / * p ist die Anzahl der Prozessoren * / anstelle von O (p) ist ein großer Vorteil.

Ich werde mit OldMan und freiem Speicherplatz muss zustimmen. Sofern Sie eine spezifische und Verbesserung einiger nützlichen Metrik (Performance, Wartbarkeit, etc.) wissen über MPI, warum das Rad neu zu erfinden. MPI stellt eine große Menge an gemeinsamen Kenntnisse in Bezug auf das Problem, das Sie versuchen zu lösen.

Es gibt eine große Anzahl von Themen, die Sie angehen müssen, die über die reine Senden von Daten ist. Verbindungsaufbau und Wartung werden alle Ihre Verantwortung geworden. Wenn MPI die genaue Abstraktion ist (es klingt wie es ist), die Sie benötigen, verwenden Sie es.

Am allerwenigsten, MPI und später Refactoring mit Ihrem eigenen System heraus ist ein guter Ansatz kostet die Installation und die Abhängigkeit von MPI.

Besonders gut gefällt mir Oldman Punkt, dass MPI Sie viel mehr über die einfache Socket-Kommunikation gibt. Sie erhalten eine ganze Reihe von parallelen und verteilten Rechnens Umsetzung mit einer transparenten Abstraktion.

Message Passing ist ein Paradigma keine Technologie. In der allgemeinsten Installation wird MPI-Buchsen verwenden, um zu kommunizieren. Sie könnten eine Geschwindigkeit siehe oben durch zu MPI Schalten, sondern nur, soweit Sie nicht Ihre Socket-Kommunikation optimiert haben.

Wie ist Ihre Anwendung I / O Bindung? Ist es gebunden an die Datenblocks zu den Arbeitsknoten übertragen, oder ist es gebunden, weil die Kommunikation während der Berechnung?

Wenn die Antwort „weil der Kommunikation“ dann ist das Problem ist, dass Sie eine eng gekoppelte Anwendung schreiben und versuchen, es auf einem Cluster für lose gekoppelte Aufgaben konzipiert auszuführen. Die einzige Möglichkeit, die Leistung zu gewinnen wird eine bessere Hardware zu bekommen (schneller Schalter, Infiniband, etc.) ... vielleicht könnten Sie Zeit auf jemand anderes HPC ausleihen?

Wenn die Antwort „Datenblock“ überträgt dann betrachten Arbeiter mehrere Datenblöcke zuordnen (so bleiben sie beschäftigt mehr) und die Datenblöcke vor der Übertragung komprimieren. Dies ist eine Strategie, die in einer losen gekoppelten Anwendung helfen kann.

Ich habe MPI nicht verwendet, aber ich habe Steckdosen ziemlich viel verwendet. Es gibt ein paar Dinge auf Hochleistungs-Steckdosen in Betracht ziehen. Machst du viele kleine Pakete oder große Pakete? Wenn Sie viele kleine Pakete tun erwägen Drehen des Nagle-Algorithmus für eine schnellere Reaktion aus:

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

Auch Signale verwendet, kann tatsächlich viel langsamer sein, wenn ein hohes Volumen an Daten, die durch zu bekommen versuchen. Vor langer Zeit habe ich ein Testprogramm, in dem der Leser auf ein Signal warten würde, und ein Paket lesen - es wäre einen Kampf 100 Pakete / sec erhalten. Dann habe ich einfach tat blockierende Lese- und bekam 10000 liest / sec.

Der Punkt ist, all diese Optionen aussehen, und sie tatsächlich testen. Verschiedene Bedingungen werden verschiedene Techniken schneller / langsamer. Es ist wichtig, nicht nur Meinungen, aber sie auf die Probe zu stellen. Steve Maguire spricht darüber in "Solid Code zu schreiben". Er verwendet viele Beispiele, die kontraintuitiv sind, und prüft sie, um herauszufinden, was besser / schneller Code macht.

MPI verwendet Steckdosen unter, so wirklich der einzige Unterschied sollte die API, dass der Code-Schnittstellen mit sein. Sie könnten tune das Protokoll gut, wenn Sie Sockets direkt verwenden, aber das ist es. Was genau sind Sie mit den Daten zu tun?

MPI Verwendet Steckdosen, und wenn Sie wissen, was Sie tun, Sie wahrscheinlich mehr Bandbreite aus Steckdosen bekommen können, weil Sie nicht so viele Meta-Daten senden müssen.

Aber Sie müssen wissen, was Sie tun, und es ist wahrscheinlich, mehr fehleranfällig sein. im Wesentlichen werden Sie mpi mit Ihrem eigenen Messaging-Protokoll ersetzen.

Für hohe Volumen, geringe Overhead Unternehmen Messaging möchten Sie vielleicht, um zu überprüfen OAMQ mit mehreren Produkten. Die Open-Source-Variante OpenAMQ angeblich läuft der Handel an JP Morgan, so dass es zuverlässig sein sollte, sollte es nicht?

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