Simple Science

Hochmoderne Wissenschaft einfach erklärt

# Computerwissenschaften# Verteiltes, paralleles und Cluster-Computing

Evaluierung von OpenMP Offloading auf modernen GPUs

Eine Studie zur Leistung von OpenMP-Offloading für Intel- und NVIDIA-GPUs.

― 7 min Lesedauer


OpenMP und GPUOpenMP und GPULeistungs-EinsichtenOffloading auf GPUs.Tiefgehende Analyse von OpenMP
Inhaltsverzeichnis

Supercomputer sind voll wichtig für verschiedene wissenschaftliche Bereiche, weil sie es Forschern ermöglichen, komplexe Simulationen durchzuführen und grosse Datenmengen zu analysieren. Diese Systeme brauchen krassen Leistungsdruck sowohl in der Rechenpower als auch im Speicher, um detaillierte und genaue Ergebnisse zu liefern. Mit der wachsenden Nachfrage nach besserer Leistung wurden neue Arten von Computerhardware entwickelt. Allgemeine GPUs (GPGPUs) sind ein bedeutender Fortschritt, der hilft, Berechnungen in Bereichen wie Materialwissenschaft, Chemie, Astrophysik und Deep Learning zu beschleunigen.

GPUs sind so gebaut, dass sie viele Berechnungen gleichzeitig machen können, was sie ideal für Aufgaben macht, die ein hohes Mass an Parallelverarbeitung erfordern, wie das Ausführen von Simulationen und das Analysieren von Daten. Allerdings kann es ziemlich schwierig sein, Programme für GPUs zu schreiben. Ihre komplexen Designs bedeuten, dass Programmierer sowohl die Hardware als auch die Software gut verstehen müssen, um ihre Anwendungen schneller laufen zu lassen. Verschiedene Unternehmen haben auch ihre eigenen GPU-Architekturen und Programmiermethoden, was die Herausforderungen verstärken kann. Zum Beispiel ist Nvidias CUDA-Programmiermodell speziell für Nvidia-GPUs gemacht, und bestimmte Compiler sind darauf ausgelegt, damit zu arbeiten.

Ein weiteres Problem kommt von der Verwaltung des Speichers. GPUs werden normalerweise genutzt, um Berechnungen zu beschleunigen, die grosse Datenmengen verarbeiten müssen. Aber das Hin- und Herbewegen von Daten zwischen der GPU und dem Hauptcomputer kann viel Zeit kosten. Entwickler müssen ihren Code sorgfältig schreiben, um diese Verzögerungen zu minimieren. Ausserdem haben GPUs normalerweise weniger Speicher als traditionelle CPUs, was bei manchen Anwendungen zu Leistungseinbussen führen kann. Entwickler müssen clever mit dem Speicher umgehen, um ihre Programme effizient laufen zu lassen. Das Debuggen von Code, der auf einer GPU läuft, kann auch komplizierter sein als auf einer normalen CPU, wegen der vielen Interaktionen zwischen Hardware und Software. Entwickler brauchen oft spezielle Tools, um GPU-Code effektiv zu debuggen.

OpenMP für Multi-Core- und GPU-Computing

In letzter Zeit hat sich die Computerarchitektur auf Multi-Core- und Many-Core-Systeme geändert, um der Nachfrage nach verbesserter Leistung gerecht zu werden. Um diese Systeme zu unterstützen, wurden Programmiermethoden aktualisiert, um parallele Shared-Memory-Architekturen zu nutzen.

OpenMP ist eines der am weitesten verbreiteten Programmier-Interfaces, das Entwicklern ermöglicht, mit Shared-Memory-Systemen zu arbeiten. Es bietet eine Reihe von Befehlen, die zu einem Programm hinzugefügt werden können, um es in Parallelbetrieb auf Multi-Core-Systemen auszuführen. Ein Grund, warum OpenMP beliebt ist, ist die benutzerfreundliche Schnittstelle, die leicht zu lesen und zu nutzen ist.

Ursprünglich war OpenMP für Shared-Memory-Systeme wie Multi-Core-CPUs gedacht. Als jedoch Geräte wie GPUs häufiger wurden, gab es eine wachsende Nachfrage nach OpenMP, um Aufgaben auf diese Geräte auszulagern. 2013 führte OpenMP in seiner Version 4.0 Unterstützung für diese Art von Auslagerung ein. Diese Version kam mit Befehlen, die es Programmierern ermöglichen, Berechnungen auf einen Beschleuniger wie eine GPU zu verschieben und dabei den Code grösstenteils gleich für die Haupt-CPU und den Beschleuniger zu halten.

Zunächst war die Unterstützung für das Verschieben von Aufgaben auf GPUs mit OpenMP begrenzt und hing von bestimmten Compilern und Bibliotheken ab. In den letzten Jahren hat sich jedoch diese Unterstützung erweitert, da viele Compiler und Bibliotheken Funktionen für OpenMP-Auslagerung auf GPUs hinzugefügt haben.

2018 führte OpenMP die Version 5.0 ein, die neue Funktionen für die Auslagerung von Aufgaben auf GPUs brachte, darunter bessere Möglichkeiten zur Verwaltung von Datenübertragungen zwischen CPU und GPU. Die aktuelle Version ist 5.2, die im November 2021 veröffentlicht wurde.

Viele beliebte Compiler und Bibliotheken, wie GCC und Intels oneAPI, unterstützen jetzt OpenMP-Auslagerung auf GPUs. Ausserdem haben Unternehmen wie NVIDIA und Intel Tools entwickelt, um diesen Prozess für ihre Hardware zu optimieren. Weitere Hardware-Verbesserungen, wie hochbandbreitiger Speicher, erhöhen ebenfalls die Leistung.

Die Unterstützung durch verschiedene Compiler für die neuesten OpenMP-Spezifikationen ist entscheidend, um GPUs in vielen Systemen effektiv zu nutzen. Das Hardware-Design ist genauso wichtig, um sicherzustellen, dass Anwendungen gut skalierbar sind.

In diesem Zusammenhang wurde eine Studie zur Leistung und Portabilität der OpenMP-Auslagerung auf zwei modernen GPUs evaluiert: Intels PVC1100 und NVIDIAs A100. Mit den neuesten Compilern von oneAPI und GNU wurde getestet, wie gut OpenMP auf diesen beiden Hardwaretypen funktioniert.

Um die Portabilität von OpenMP auf diesen GPUs zu überprüfen, verwendeten die Forscher eine anerkannte OpenMP-Test-Suite. Für die Leistungstests nutzten sie das LULESH-Benchmark, das so konzipiert ist, dass es Simulationen auf eine Art und Weise ausführt, die realen wissenschaftlichen Problemen ähnelt.

Die Ergebnisse zeigten, dass sowohl die GNU- als auch die oneAPI-Compiler eine gute Unterstützung für viele OpenMP-Auslagerungsfunktionen bieten, besonders bei den älteren Versionen. Die Unterstützung für die neuesten Funktionen lässt jedoch noch zu wünschen übrig. Bei der Bewertung der Leistung schnitt der PVC1100 um bis zu 37 % besser ab als der A100, was seine Stärken in der Berechnung und Datenverwaltung hervorhebt.

Vergleich von HPC-GPUs

Intel Data Center Max 1100 GPU (Ponte Vecchio)

Intels Ponte Vecchio oder PVC ist für Hochleistungsrechnen und KI-Aufgaben konzipiert. Seine Hauptstärken liegen in der fortschrittlichen Verpackungstechnologie, die es ermöglicht, mehrere Chips zu stapeln, was zu besserer Leistung und Energienutzung führt. Der PVC nutzt auch Intels Xe-Architektur, die für anspruchsvolle Aufgaben wie Matrixberechnungen, die in KI-Anwendungen häufig vorkommen, optimiert ist.

Der PVC ist so optimiert, dass er mit Intels oneAPI-Software arbeitet, was Entwicklern ermöglicht, vielseitigen Code zu schreiben, der auf verschiedenen Prozessorarten laufen kann, was die Leistungsoptimierung erleichtert.

NVIDIA A100 GPU

NVIDIAs A100 GPU ist eine Spitzenoption für Hochleistungsrechnen und Datenanalyse. Sie verfügt über fortschrittliche Fähigkeiten für Deep-Learning-Aufgaben und schnelleren Speicherzugriff. Die A100 enthält eine neue Methode zur effizienten Datenverarbeitung und ermöglicht schnelle Verbindungen zwischen mehreren GPUs. Insgesamt ist sie eine leistungsstarke Lösung für ein breites Spektrum an anspruchsvollen Rechenanforderungen.

Bewertung der OpenMP-Auslagerung

Während OpenMP weiterhin entwickelt wird, bringen neue Versionen Funktionen mit, die getestet werden müssen. Die SOLLVE Validierungs- und Verifizierungstest-Suite bewertet, wie gut diese Funktionen über verschiedene Compiler funktionieren. Diese fortlaufende Bewertung ist entscheidend für Entwickler, die auf OpenMP angewiesen sind, um die Leistung in ihren wissenschaftlichen Projekten zu verbessern.

Das LULESH-Benchmark ist ein weiteres wertvolles Tool. Es simuliert ein physikalisches Problem und unterstützt mehrere parallele Programmiermethoden. Aufgrund seiner weit verbreiteten Nutzung wird LULESH oft gewählt, um neue Hardware oder Programmiermethoden zu testen.

Ergebnisse und Analyse

Sowohl die NVIDIA A100 als auch die Intel PVC1100 sind für hochcomputing Aufgaben konzipiert. Die Studie verglich ihre Leistung mithilfe spezifischer Experimente. Um den Code mit OpenMP zu kompilieren, wurden verschiedene Flags für jedes System gesetzt, um effektives Testen zu ermöglichen.

Die OpenMP-Tests zeigten, dass beide Compiler viele Funktionen aus früheren OpenMP-Versionen unterstützten. Allerdings bedarf die Unterstützung für die neuesten Funktionen noch Verbesserungen, insbesondere hinsichtlich vereinheitlichter Speicher- und Shared Memory-Direktiven.

In Bezug auf die Leistung zeigte die Auswertung, dass die PVC1100-GPU in bestimmten Aufgaben deutlich besser (bis zu 6 Mal) abschnitt als die A100. Auch die Verwaltung der Datenbewegungen war im PVC1100 effizienter, obwohl die Speicherzuordnung etwas langsamer war.

Fazit und zukünftige Arbeiten

Diese Forschung lieferte einen gründlichen Blick darauf, wie gut die OpenMP-Auslagerung auf modernen GPUs funktioniert. Die Ergebnisse zeigten auf, dass, während die neuesten Compiler viele OpenMP-Funktionen unterstützen, es noch Lücken gibt, besonders bei den Speichermanagement-Direktiven.

Die Intel PVC1100 zeigte im Vergleich zur NVIDIA A100 beeindruckende Leistung, mit dem Potenzial für noch bessere Ergebnisse durch zukünftige Codierungs- und Optimierungsanstrengungen. Für zukünftige Studien wäre es vorteilhaft, zusätzliche Anwendungen mit OpenMP-Auslagerung zu testen und tiefer in realistische Szenarien einzutauchen, um die Leistung weiter zu bewerten.

Insgesamt gibt es grosses Potenzial, die Leistung und Effizienz in der wissenschaftlichen Datenverarbeitung durch die neuesten Fortschritte in der OpenMP- und GPU-Technologie zu verbessern.

Originalquelle

Titel: Portability and Scalability of OpenMP Offloading on State-of-the-art Accelerators

Zusammenfassung: Over the last decade, most of the increase in computing power has been gained by advances in accelerated many-core architectures, mainly in the form of GPGPUs. While accelerators achieve phenomenal performances in various computing tasks, their utilization requires code adaptations and transformations. Thus, OpenMP, the most common standard for multi-threading in scientific computing applications, introduced offloading capabilities between host (CPUs) and accelerators since v4.0, with increasing support in the successive v4.5, v5.0, v5.1, and the latest v5.2 versions. Recently, two state-of-the-art GPUs -- the Intel Ponte Vecchio Max 1100 and the NVIDIA A100 GPUs -- were released to the market, with the oneAPI and NVHPC compilers for offloading, correspondingly. In this work, we present early performance results of OpenMP offloading capabilities to these devices while specifically analyzing the portability of advanced directives (using SOLLVE's OMPVV test suite) and the scalability of the hardware in representative scientific mini-app (the LULESH benchmark). Our results show that the coverage for version 4.5 is nearly complete in both latest NVHPC and oneAPI tools. However, we observed a lack of support in versions 5.0, 5.1, and 5.2, which is particularly noticeable when using NVHPC. From the performance perspective, we found that the PVC1100 and A100 are relatively comparable on the LULESH benchmark. While the A100 is slightly better due to faster memory bandwidth, the PVC1100 reaches the next problem size (400^3) scalably due to the larger memory size.

Autoren: Yehonatan Fridman, Guy Tamir, Gal Oren

Letzte Aktualisierung: 2023-05-14 00:00:00

Sprache: English

Quell-URL: https://arxiv.org/abs/2304.04276

Quell-PDF: https://arxiv.org/pdf/2304.04276

Lizenz: https://creativecommons.org/licenses/by/4.0/

Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.

Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.

Mehr von den Autoren

Ähnliche Artikel