Learning to Parallelize with OpenMP by Augmented Heterogeneous AST Representation
Dieses Paper schlägt Graph2Par vor, einen neuartigen graphbasierten Lernansatz unter Verwendung einer erweiterten heterogenen AST-Repräsentation und eines neu erstellten OMP_Serial-Datensatzes, um eine Genauigkeit von 85 % bei der Erkennung von OpenMP-parallelisierbaren Schleifen zu erreichen, womit es den aktuellen Stand der Technik bei tokenbasierten Methoden übertrifft.
Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen
Moderne Computer sind wie riesige Städte voller winziger Arbeiter geworden, von denen jeder in der Lage ist, eine Aufgabe in einem Bruchteil einer Sekunde auszuführen. Um diese Maschinen schnell laufen zu lassen, müssen Programmierer sie lehren, viele Arbeiter gleichzeitig auszusenden, um Aufgaben zu erledigen, anstatt sie nacheinander abzuarbeiten. Diese Praxis, bekannt als Parallelisierung, ist essenziell, um das Beste aus der heutigen leistungsstarken Hardware herauszuholen. Es ist jedoch schwierig, einem Computer beizubringen, wie er seine Arbeit aufteilt. Es erfordert ein tiefes Verständnis dafür, wie verschiedene Teile eines Programms voneinander abhängen. Wenn ein Programmierer falsch rät, kann das Programm abstürzen oder das falsche Ergebnis liefern. Seit Jahrzehnten bauen Experten Werkzeuge, um diese Gelegenheiten zur Teamarbeit automatisch zu finden, aber diese Werkzeuge gehen oft zu vorsichtig vor, übersehen viele Chancen, die Dinge zu beschleunigen, oder sie werden durch komplexe Codestrukturen verwirrt.
In einer kürzlich durchgeführten Studie setzten sich Forscher daran, Computer dazu zu bringen, diese Gelegenheiten selbst zu erkennen, und nutzten dabei eine Methode, die davon inspiriert ist, wie Maschinen Sprache verstehen lernen. Das Team, unter der Leitung von Le Chen und Kollegen von der Iowa State University und Intel Labs, konzentrierte sich auf eine spezifische Art von Anweisung, die in der Programmiersprache C verwendet wird, namens OpenMP. Diese Anweisungen fungieren wie Wegweiser, die dem Computer sagen, wo es sicher ist, gleichzeitig mehrere Arbeiter zu starten. Die Herausforderung bestand darin, dass bestehende Werkzeuge, die auf starren mathematischen Regeln beruhen, oft den Wald vor lauter Bäumen nicht sehen können. Sie könnten eine perfekt parallelisierbare Schleife übersehen, nur weil sie einen Funktionsaufruf oder eine verschachtelte Struktur enthält, die für einen traditionellen Analysator kompliziert aussieht. Die Forscher erkannten, dass sie einen neuen Weg brauchten, um dem Computer zu zeigen, wie der Code tatsächlich aussieht – nicht nur als eine Folge von Wörtern, sondern als eine Karte seiner Struktur und Bedeutung.
Um dies anzugehen, musste das Team zuerst eine massive Bibliothek mit Beispielen aufbauen, einen Datensatz, den sie OMP Serial nannten. Sie sammelten fast 18.600 Beispiele von Schleifen, die bereits als parallel markiert waren, und etwa 14.000 Schleifen, die dies nicht waren. Sie entnahmen diese aus tausenden von realen Softwareprojekten im Internet sowie aus sorgfältig gestalteten synthetischen Beispielen, die darauf ausgelegt waren, spezifische Muster zu testen. Diese Sammlung bot ihnen einen reichen Grundzustand, von dem aus sie lernen konnten. Aber das Vorhandensein der Daten war nur die halbe Miete; sie brauchten einen Weg, um die Daten in ein maschinelles Lernmodell einzuspeisen, das den Code wirklich verstehen konnte. Anstatt den Code wie einen Satz in einem Buch zu behandeln, bei dem die Reihenfolge der Wörter am wichtigsten ist, entschieden sie sich dafür, ihn wie eine komplexe Karte zu behandeln. Sie erstellten eine Darstellung, die als „augmented heterogeneous abstract syntax tree“ bezeichnet wird. Vereinfacht ausgedrückt ist dies ein detaillierter Graph, der jedes Stück des Codes miteinander verbindet. Er zeigt nicht nur die Hierarchie des Programms – wie einen übergeordneten Befehl und dessen untergeordnete Befehle – sondern auch, wie der Code von einem Schritt zum nächsten fließt und wie die Wörter im Code nebeneinander im Text stehen. Diese Karte erfasst das strukturelle Skelett des Programms und bewahrt gleichzeitig die subtilen Beziehungen zwischen verschiedenen Teilen, die eine einfache Liste von Wörtern übersehen würde.
Mit dieser neuen Karte in der Hand trainierten die Forscher ein hochentwickeltes Lernmodell, das als „heterogeneous graph transformer“ bekannt ist. Stellen Sie sich dieses Modell wie einen Studenten vor, dem man tausende dieser Karten zeigt, zusammen mit der richtigen Antwort für jede einzelne: ob die Schleife sicher parallelisiert werden kann oder nicht. Das Modell lernt, die verborgenen Muster zu erkennen, die auf Sicherheit hindeuten. Es achtet auf die verschiedenen Arten von Verbindungen in der Karte und versteht, dass eine Verknüpfung zwischen einem Funktionsaufruf und einer Variable etwas anderes bedeuten kann als eine Verknüpfung zwischen zwei mathematischen Operationen. Nach dem Training wurde das Modell in seiner Fähigkeit getestet, vorherzusagen, welche Schleifen parallelisiert werden konnten und, entscheidend, welcher spezifische Typ von Anweisung verwendet werden sollte, um dies zu tun. Die Ergebnisse waren beeindruckend. Das Modell erreichte eine Genauigkeit von 85 Prozent bei der Erkennung parallelisierbarer Regionen und übertraf damit die besten bestehenden Werkzeuge, die auf traditioneller statischer Analyse beruhen, deutlich.
Die Studie zeigte auch genau auf, wo die alten Werkzeuge scheiterten. Die Forscher fanden heraus, dass die häufigsten Fehler traditioneller Software bei Schleifen auftraten, die Funktionsaufrufe enthielten, Schleifen, die eine große Menge an Daten auf einen einzigen Wert reduzierten, und Schleifen, die in andere Schleifen verschachtelt waren. Dies sind die kniffligen Fälle, in denen der Code für einen starren Analysator unordentlich aussieht, aber eigentlich sicher für parallele Arbeit ist. Der neue maschinelle Lernansatz hingegen bewältigte diese komplexen Strukturen mit viel größerem Erfolg. Er rät nicht nur; er lernte die zugrunde liegende Logik der Form des Codes. Die Forscher demonstrierten, dass es durch die Kombination einer reichen, strukturellen Sicht auf den Code mit leistungsstarken Lernalgorithmen möglich ist, eine Aufgabe zu automatisieren, die lange Zeit menschliche Intuition erfordert hat. Diese Arbeit legt nahe, dass die Zukunft des Schreibens schneller Software nicht in besseren Regelwerken für Computer liegen könnte, sondern darin, sie zu lehren, den Code so zu sehen, wie es ein erfahrener menschlicher Programmierer tut: als ein lebendiges, vernetztes System statt als eine statische Abfolge von Befehlen.
Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?
Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.