Heterogene Verarbeitung erfordert Datenparallelisierung: SYCL und DPC++ sind ein guter Anfang

Heterogene Verarbeitung erfordert Datenparallelisierung: SYCL und DPC++ sind ein guter Anfang

James Reinders

Er ist Ingenieur bei Intel mit mehr als dreißig Jahren Erfahrung im parallelen Rechnen und Autor/Mitautor/Herausgeber von zehn Fachbüchern über parallele Programmierung. James arbeitet bei Intel und fördert die parallele Programmierung in einer heterogenen Welt (XPU).

Hier ist sein Artikel, der in The New Stack veröffentlicht wurde..

ch sage gerne: „Es dreht sich alles um die XPUs„.

Wir leben in einer wunderbaren Zeit, in der Hardware-Innovationen zu einer Explosion von CPUs, GPUs, FPGAs, DSPs, ASICs und dergleichen führen – die ich einfach mit XPUs abkürze. XPUs ist eine Abkürzung für „any kind of processing unit“, also jede Hardware, die einer Anwendung beim Rechnen helfen kann.

Für uns als Entwickler bedeutet der Ansturm der XPUs, dass wir zunehmend gefordert sind, für eine größere Anzahl unterschiedlicher Verarbeitungseinheiten zu programmieren. Wir müssen den zusätzlichen Zeitaufwand (und die Kosten) für das Umschreiben und Testen von Code berücksichtigen, um die Anwendungsleistung für die neuen Architekturen zu verbessern. 

Um unseren Verstand und die Wartbarkeit unseres Codes zu bewahren, ist es wichtiger denn je, dass der Code, den wir schreiben, auf so viele XPUs wie möglich anwendbar ist. 

Die Umstellung auf architekturübergreifende Modelle für die Anwendungsentwicklung hat gezeigt, dass Unternehmen dadurch viel Zeit und Geld sparen können, und mit dem Aufkommen der heterogenen Datenverarbeitung wird dies ein noch dringlicheres Anliegen.

Heute überdenken wir unsere Welt, denn sie entwickelt sich rasch zu einer Welt der XPUs, die schließlich die gesamte IT verändern wird.

XPUs: Software für beschleunigtes Rechnen neu erfinden

  • CUDA, ein weit verbreitetes proprietäres Softwareprogrammiersystem, wurde für NVIDIA-Grafikprozessoren entwickelt und ist für diese effektiv.
  • OpenCL verfolgte einen offenen Ansatz und erreichte ein gewisses Maß an herstellerübergreifender Unterstützung. Aber es hatte seine eigenen Schwächen, vor allem, dass es C-zentriert war und die Bedürfnisse von C++ nicht berücksichtigte.

CUDA und OpenCL haben ihren Zweck gut erfüllt. In Zukunft werden die Entwickler einen wirklich offenen, herstellerübergreifenden Ansatz benötigen, um das Versprechen der XPUs zu erfüllen.

Warum sind SYCL und Data Parallel C++ (DPC++) der beste Weg in die Zukunft?

Die aus CUDA und OpenCL gezogenen Lehren haben den Weg für die Entstehung einer wirklich populären und offenen Lösung für C++-basierte Datenparallelität auf heterogenen Systemen geebnet. 

Diese Lösung ist SYCL, ein Programmiermodell auf höherer Ebene, das die Produktivität der Programmierung auf mehreren Hardware-Beschleunigern verbessern soll. 

Es gewann schnell die Unterstützung vieler Hersteller, allgemeines Interesse und die Unterstützung mehrerer ernsthafter Compilerprojekte.

SYCL ist wichtig, denn eine effektive Programmierung in unserer zunehmend heterogenen Welt erfordert einen effizienten Zugriff für alle XPUs. Dies kann nur durch einen wirklich offenen Ansatz erreicht werden.

SYCL ist ein offener Standard für die parallele Datenprogrammierung in C++ mit einem einzigen Quellcode für heterogene Hardware oder XPU. 

SYCL ermöglicht eine Single-Source-Kompilierung in C++, um mehrere Geräte auf einem System anzusprechen, anstatt C++ für den Host und eine oder mehrere domänenspezifische Kernelsprachen für die Geräte zu verwenden.

SYCL bringt kernelähnliche Programmierung in C++ und einen Mechanismus zum Auffinden, Abfragen und Verwenden von Beschleunigern in einem System. 

Die kernelbasierte Programmierung ist ein wichtiger Programmierstil zur Nutzung der Datenparallelität, der auch von OpenCL und CUDA unterstützt wird. Die Möglichkeit der Aufzählung von und des Zugriffs auf Beschleuniger auf standardisierte Weise wurde bereits von OpenCL eingeführt.

Werfen Sie auch einen Blick auf DPC++ (Data Parallel C++), das der LLVM-Gemeinschaft eine offene Implementierung zur Verfügung stellt, mit dem Ziel, alles Upstream in LLVM C++-Compiler zu integrieren. DPC++ zielt darauf ab, SYCL mit einigen Erweiterungen zu implementieren. 

DPC++ hat bei vielen der Funktionen, die jetzt in SYCL 2020, enthalten sind, Pionierarbeit geleistet und hatte somit einen Vorsprung bei der Implementierung von SYCL 2020, bevor die Tinte auf dem Standard überhaupt trocken war.

Es gibt noch einiges zu tun, um die Angleichung an die gesamte SYCL 2020-Spezifikation zu vervollständigen; alle Arbeiten sind in dem sehr aktiven Open-Source-Repository leicht zu sehen.

DPC++ wird von Intel für Intel CPUs, GPUs und FPGAs verwendet.

DPC++ wird auch von Codeplay verwendet, um NVIDIA-GPUs anzusprechen.

Ein weiterer SYCL-Compiler, hipSYCL, unterstützt AMD-CPUs und -GPUs, indem er sich mit AMDs HIP/ROCm verbindet.

Mehrere Open-Source-Compiler für SYCL zu haben, ist fantastisch für die Gemeinschaft und zeigt, dass SYCL eine breite, vielfältige und offene Unterstützung hat.

Im Laufe der Jahre 2019 und 2020 habe ich mit einem kleinen engagierten Team an der Erstellung des ersten Buches über SYCL und DPC++ gearbeitet. Sie können ein kostenloses Exemplar von der Apress-Website herunterladen.

Kurz nach ihrer Veröffentlichung gab die Khronos Group die endgültige Spezifikation von SYCL 2020 bekannt.

Die jüngste Ratifizierung der Spezifikation SYCL 2020 ist ein wichtiger Schritt. Es handelt sich wirklich um eine offene Spezifikation mit einer glänzenden Zukunft. Diese Spezifikation ist das Ergebnis jahrelanger Entwicklung durch viele engagierte Menschen in der Branche. SYCL 2020 basiert auf C++17 und erleichtert die Beschleunigung von Standard-C++-Anwendungen und die Annäherung an die ISO C++ Roadmap. 

Die Khronos Group hat in ihrer Ankündigung eine Reihe von Funktionen in SYCL 2020 hervorgehoben, darunter die Unterstützung für Unified Shared Memory (USM), eingebaute Reduktionen, die erweiterte Nutzung von CTAD und atomare Operationen, die sich an den Standard-C++-Atomoperationen orientieren.

XPUs sind die Zukunft, lassen wir sie offen, um von der Vielfalt der XPUs und der Programmiersicherheit zu profitieren.

SYCL und DPC++ werden uns helfen, XPUs effektiv zu nutzen. Sie sind Teil einer breiteren Bewegung zur Unterstützung von XPUs, die sich auf Bibliotheken und alle Softwareentwicklungswerkzeuge erstreckt und auf den Ambitionen von SYCL und seinen Compilern aufbaut. 

Dies ist der Ursprung der oneAPI-Industrieinitiative, die mir sehr am Herzen liegt und an der ich gerne mitgewirkt habe, als ich wieder zu Intel kam.

Die Unterstützung dieses Themas, das die offene Nutzung aller XPUs erleichtern soll, stößt bei SYCL und oneAPI auf Interesse. 

Ein gutes Beispiel ist die Verwendung der Bibliothek oneAPI: Deep Neural Network (oneDNN), die ursprünglich stark für Intel-Prozessoren optimiert war und nun den schnellsten Computer der Welt (mit ARM-Prozessoren) beschleunigt. 

Als Ergebnis hat oneDNN jetzt eine starke Unterstützung für ARM-Prozessoren. Die Öffnung der SYCL- und oneAPI-Bibliotheken und -Werkzeuge trägt dazu bei, eine neue Ära der Offenheit und Leistung einzuleiten und uns einen nützlichen Zugang zur Programmierung für alle XPUs zu ermöglichen.

Gemeinsam hat die Softwareentwicklungsgemeinschaft die Möglichkeit, Standards, einschließlich SYCL, zu schaffen, die der gesamten Branche dienen und die Einführung von heterogener Programmierung (XPUs) und modernem C++, das die Parallelität einbezieht, stark unterstützen.

SYCL ist ein offener Standard mit breiter Unterstützung, vielen Möglichkeiten der Beteiligung, mehreren Open-Source-Implementierungen und scheinbar endlosen Möglichkeiten. 

DPC++ bietet einen offenen Compiler, der auf LLVM basiert, um den Aufwand für die Unterstützung von SYCL zu verringern und eine starke Kompatibilität zwischen XPUs zu fördern. 

oneAPI bietet ein Forum zur Diskussion und Förderung des offenen und effizienten Zugangs zu XPUs in allen Bereichen der Softwareentwicklung.

Ich hoffe, dass Sie die Gelegenheit nutzen werden, um mehr über SYCL, DPC++ und oneAPI zu erfahren, denn XPUs sind die Zukunft des Computers

Wir sollten die XPU-Unterstützung gemeinsam und transparent gestalten und die enorme Vielfalt der verfügbaren XPUs für eine effektive Programmierung nutzen.

Übersetzt von RITME