Historische Perspektive
Es ist wirklich unmöglich zu sagen, wie die neuen Paradigmen in der Zukunft aussehen werden, zum Beispiel eine gute historische Perspektive. Ich schlage vor, Ken Kennedys Aufstieg und Fall von HPF zu lesen . Kennedy gibt einen Überblick über zwei aufkommende Muster, MPI im Vergleich zu einem intelligenten Compiler, und erläutert, wie MPI die richtige Anzahl von Early Adopters und Flexibilität hatte, um zu dominieren. HPF hat schließlich seine Probleme behoben, aber es war zu spät.
In vielerlei Hinsicht folgen mehrere Paradigmen wie PGAS und OpenMP demselben HPF-Trend. Die frühen Codes waren nicht flexibel genug, um gut verwendet zu werden, und ließen viel Leistung auf dem Tisch. Das Versprechen, nicht jedes Jota des Parallelalgorithmus schreiben zu müssen, ist jedoch ein attraktives Ziel. Das Streben nach neuen Modellen wird also immer fortgesetzt.
Klare Trends bei der Hardware
Nun wurde der Erfolg von MPI häufig als eng mit der Modellierung der Hardware, auf der es ausgeführt wird, verbunden angeführt. Ungefähr jeder Knoten verfügt über einige wenige Prozesse, und das Weiterleiten der Nachrichten an lokale Punkt-zu-Punkt-Operationen oder durch koordinierte kollektive Operationen ist im Clusterbereich leicht möglich. Aus diesem Grund vertraue ich keinem, der ein Paradigma vorstellt , das neuen Hardwaretrends nicht genau folgt, und tatsächlich war ich von dieser Meinung durch die Arbeit von Vivak Sarakar überzeugt .
In diesem Sinne gibt es drei Trends, die in neuen Architekturen deutlich Fortschritte machen. Lassen Sie mich klarstellen, dass in HPC mittlerweile zwölf verschiedene Architekturen vermarktet werden. Dies war vor weniger als 5 Jahren nur mit x86 möglich. In den kommenden Tagen bieten sich viele Möglichkeiten, Hardware auf unterschiedliche und interessante Weise einzusetzen
- Spezialchips: Denken Sie an große Vektoreinheiten wie Beschleuniger (Ansicht von Bill Dally von Nvidia)
- Low Power Chips: ARM-basierte Cluster (zur Anpassung an Leistungsbudgets)
- Tiling of Chips: Denken Sie an das Tiling von Chips mit unterschiedlichen Spezifikationen (Arbeit von Avant Argwal )
Aktuelle Modelle
Das aktuelle Modell ist tatsächlich 3 Ebenen tief. Während es viele Codes gibt, die gut zwei dieser Ebenen verwenden, sind nicht viele aufgetaucht, die alle drei verwenden. Ich glaube, dass man, um erst einmal ins Exascale zu kommen, in die Bestimmung investieren muss, ob Code auf allen drei Ebenen ausgeführt werden kann. Dies ist wahrscheinlich der sicherste Weg, um die aktuellen Trends zu wiederholen.
Lassen Sie mich die Modelle durchlaufen und erläutern, wie sie sich basierend auf den vorhergesagten neuen Hardwareansichten ändern müssen.
Verteilt
Die Player auf der verteilten Ebene fallen größtenteils in MPI- und PGAS-Sprachen. MPI ist derzeit ein klarer Gewinner, aber PGAS-Sprachen wie UPC und Chapel machen Fortschritte im Weltraum. Ein guter Hinweis ist die HPC Benchmark Challenge. PGAS-Sprachen setzen die Benchmarks sehr elegant um.
Der interessanteste Punkt hierbei ist, dass dieses Modell derzeit nur auf Knotenebene funktioniert, es jedoch ein wichtiges Modell innerhalb eines Knotens für gekachelte Architekturen sein wird. Ein Indiz dafür ist der Intel SCC-Chip, der sich grundsätzlich wie ein verteiltes System verhält. Das SCC-Team erstellte eine eigene MPI-Implementierung, und viele Teams konnten Community-Bibliotheken erfolgreich auf diese Architektur portieren.
Um ehrlich zu sein, hat PGAS wirklich eine gute Geschichte, um in diesen Bereich einzutreten. Wollen Sie wirklich MPI Internode programmieren und müssen dann den gleichen Trick Intranode machen? Eine große Sache bei diesen gekachelten Architekturen ist, dass sie unterschiedliche Taktraten auf den Chips und große Unterschiede in der Bandbreite zum Speicher haben, so dass leistungsfähige Codes dies berücksichtigen müssen.
Shared Memory auf dem Knoten
Hier sehen wir, dass MPI oft "gut genug" ist, aber PThreads (und Bibliotheken, die von PThreads wie Intel Parallel Building Blocks abgeleitet sind) und OpenMP werden immer noch häufig verwendet. Die gängige Ansicht ist, dass es eine Zeit geben wird, in der es genügend gemeinsam genutzte Speicher-Threads gibt, die das MPI-Socket-Modell für RPC ausfallen lassen, oder Sie benötigen einen Prozess mit geringerem Gewicht, der auf dem Core ausgeführt wird. Bereits jetzt können Sie die Anzeichen von IBM Bluegene-Systemen erkennen, die Probleme mit Shared Memory MPI haben.
Laut Matt ist die Vektorisierung des seriellen Codes die größte Leistungssteigerung für rechenintensive Codes. Während viele Leute davon ausgehen, dass dies bei Beschleunigern zutrifft, ist dies auch für Maschinen auf Knoten kritisch. Ich glaube, Westmere hat eine 4-fache FPU, daher kann man nur ein Viertel der Flops ohne Vektorisierung erhalten.
Während ich nicht sehe, dass der aktuelle OpenMP gut in diesen Bereich eintritt, gibt es einen Platz für Chips mit geringer Leistung oder Kacheln, um mehr Lichtfäden zu verwenden. OpenMP hat Schwierigkeiten zu beschreiben, wie der Datenfluss funktioniert, und da mehr Threads verwendet werden, sehe ich nur, dass dieser Trend übertrieben wird. Schauen Sie sich nur Beispiele an, was zu tun ist, um ein ordnungsgemäßes Prefetching mit OpenMP zu erzielen.
Sowohl OpenMP als auch PThreads können auf einer ausreichenden Kursstufe die Vektorisierung nutzen, die erforderlich ist, um einen guten Prozentsatz der Peaks zu erhalten. Dazu müssen Sie Ihre Algorithmen jedoch so aufschlüsseln, dass die Vektorisierung auf natürliche Weise erfolgt.
Co-Prozessor
Schließlich hat das Aufkommen des Co-Prozessors (GPU, MIC, Cell Acclerators) Einzug gehalten. Es wird klar, dass kein Weg zum Exascale ohne sie vollständig sein wird. Bei SC11 nutzte jeder Bell-Wettbewerb sie sehr effektiv, um zu den niedrigen Petaflops zu gelangen. Während CUDA und OpenCL den aktuellen Markt dominiert haben, hoffe ich, dass OpenACC- und PGAS-Compiler den Raum betreten.
Nun, um es genauer zu betrachten, besteht ein Vorschlag darin, die Chips mit geringer Leistung mit vielen Co-Prozessoren zu verbinden. Dies wird die mittlere Schicht des aktuellen Stapels ziemlich gut abtöten und Codes verwenden, die Entscheidungsprobleme auf dem Hauptchip handhaben und die Arbeit an die Co-Prozessoren abschieben. Dies bedeutet, dass eine Person, damit Code recht effektiv funktioniert, die Algorithmen in Bezug auf Kernel (oder Codelets) überdenken muss, d. Soweit ich weiß, ist eine Lösung für diese Entwicklung ziemlich offen.
Wie sich dies auf den App-Entwickler auswirkt
Nun zu Ihrer Frage. Wenn Sie sich vor der zunehmenden Komplexität von Exascale-Maschinen schützen möchten, sollten Sie einige Dinge tun:
- Entwickeln Sie Ihre Algorithmen für mindestens drei Ebenen paralleler Hierarchien.
- Entwerfen Sie Ihre Algorithmen anhand von Kerneln, die zwischen den Erben verschoben werden können.
- Wenn Sie keine sequentiellen Prozesse mehr benötigen, werden alle diese Effekte asynchron ausgeführt, da eine synchrone Ausführung einfach nicht möglich ist.
Wenn Sie heute performant sein möchten, ist MPI + CUDA / OpenCL gut genug, aber UPC ist auf dem Weg dorthin. Es ist also keine schlechte Idee, sich ein paar Tage Zeit zu nehmen und es zu lernen. OpenMP unterstützt Sie beim Einstieg, führt jedoch zu Problemen, sobald der Code überarbeitet werden muss. PThreads erfordert das vollständige Umschreiben Ihres Codes in seinen Stil. Damit ist MPI + CUDA / OpenCL das aktuell beste Modell.
Was hier nicht besprochen wird
Während all dieses Gerede von Exascale nett ist, ist etwas, das hier nicht wirklich diskutiert wird, das Ein- und Ausschalten von Daten auf den Maschinen. Obwohl es viele Fortschritte bei Speichersystemen gegeben hat, sehen wir sie nicht in Commodity-Clustern (einfach zu teuer). Da datenintensives Computing immer mehr in den Fokus aller Super-Computing-Konferenzen gerückt ist, ist mit einer größeren Bewegung in den Bereich mit hoher Speicherbandbreite zu rechnen.
Dies führt zu dem anderen Trend, der eintreten könnte (wenn die richtigen Finanzierungsagenturen einbezogen werden). Die Maschinen werden sich immer mehr auf die erforderliche Art der Datenverarbeitung spezialisieren. Wir sehen bereits, dass "datenintensive" Maschinen von der NSF finanziert werden, aber diese Maschinen befinden sich auf einer anderen Strecke als die Exascale Grand Challenge 2019.
Dies wurde länger als erwartet. Fragen Sie nach Referenzen, wo Sie sie in den Kommentaren benötigen