SYCL - SYCL

SYCL
SYCL-Logo
Originalautor(en) Chronos-Gruppe
Entwickler Chronos-Gruppe
Erstveröffentlichung Marz 2014 ( 2014-03 )
Stabile Version
2020 Revision 3 / 4. März 2021 ; vor 5 Monaten ( 2021-03-04 )
Betriebssystem Plattformübergreifend
Plattform Plattformübergreifend
Typ High-Level-Programmiersprache
Webseite www .khronos .org / sycl / sycl .tech

SYCL ist ein übergeordnetes Programmiermodell zur Verbesserung der Programmierproduktivität auf verschiedenen Hardwarebeschleunigern . Es ist eine domänenspezifische eingebettete Sprache ( DSEL ) aus einer Quelle, die auf reinem C++17 basiert . Es ist ein von der Khronos Group entwickelter Standard , der im März 2014 angekündigt wurde.

Ursprung des Namens

SYCL (ausgesprochen 'Sichel') ist ein Name und kein Akronym . Insbesondere machten SYCL-Entwickler deutlich, dass der Name keinen Hinweis auf OpenCL enthält .

Zweck

SYCL ist eine gebührenfreie, plattformübergreifende Abstraktionsschicht, die auf den zugrunde liegenden Konzepten, Portabilität und Effizienz von OpenCL aufbaut und es ermöglicht, Code für heterogene Prozessoren in einem „Single-Source“-Stil mit vollständig standardmäßigem C++ zu schreiben . SYCL ermöglicht die Entwicklung aus einer einzigen Quelle, bei der C++-Vorlagenfunktionen sowohl Host- als auch Gerätecode enthalten können, um komplexe Algorithmen zu erstellen, die Hardwarebeschleuniger verwenden , und sie dann im gesamten Quellcode für verschiedene Datentypen wiederzuverwenden.

Während der SYCL-Standard als übergeordnete Programmiermodell-Untergruppe der OpenCL- Arbeitsgruppe begann und ursprünglich für die Verwendung mit OpenCL und SPIR entwickelt wurde , ist SYCL seit dem 20. September 2019 eine von der OpenCL- Arbeitsgruppe unabhängige Arbeitsgruppe der Khronos Group. Mit SYCL 2020 wurde SYCL als allgemeineres heterogenes Framework verallgemeinert, das auf andere Systeme abzielen kann. Dies ist jetzt mit dem Konzept eines generischen Back-Ends möglich , das auf jede Beschleunigungs- API abzielt und gleichzeitig die vollständige Interoperabilität mit der Ziel- API ermöglicht , z. Die hipSYCL-Implementierung zielt beispielsweise auf ROCm und CUDA über AMDs herstellerübergreifendes HIP ab.

Versionen

SYCL wurde auf der GDC im März 2014 mit der vorläufigen Version 1.2 eingeführt, dann wurde die endgültige Version von SYCL 1.2 auf der IWOCL 2015 im Mai 2015 vorgestellt.

Die neueste Version für die vorherige SYCL 1.2.1-Serie ist SYCL 1.2.1 Revision 7, die am 27. April 2020 veröffentlicht wurde (die erste Version wurde am 6. Dezember 2017 veröffentlicht).

SYCL 2.2 vorläufig wurde auf der IWOCL 2016 im Mai 2016 eingeführt und zielt auf C++14 und OpenCL 2.2 ab. Das SYCL-Komitee zog es jedoch vor, diese Version nicht fertigzustellen und sich einer flexibleren SYCL-Spezifikation zuzuwenden, um die zunehmende Vielfalt aktueller Hardwarebeschleuniger , einschließlich künstlicher Intelligenz- Engines, zu berücksichtigen, die zu SYCL 2020 führten.

Die neueste Version ist SYCL 2020 Revision 2, die am 9. Februar 2021 veröffentlicht wurde, unter Berücksichtigung des Feedbacks von Benutzern und Implementierern zur Revision 1 der vorläufigen SYCL 2020-Spezifikation, die am 30. Juni 2020 veröffentlicht wurde. C++17 und OpenCL 3.0 werden unterstützt Hauptziele dieser Veröffentlichung. Unified Shared Memory (USM) ist eine Hauptfunktion für GPUs mit OpenCL- und CUDA-Unterstützung.

Auf der IWOCL 2021 wurde eine Roadmap vorgestellt. DPC++, ComputeCpp, triSYCL, hipSYCL und neoSYCL sind die Hauptimplementierungen von SYCL. Nächstes Entwicklungsziel ist die Unterstützung von C++20 im zukünftigen SYCL 202x.

Implementierungen

  • DPC++: (data parallel C++) ist ein Open-Source-Projekt von Intel zur Einführung von SYCL für LLVM und oneAPI. C++17 und Teile von C++20 mit SYCL 2020 sind Basis dieses Compiler-Frameworks.
  • ComputeCpp: SYCL 1.2.1-konformes Framework der Firma Codeplay mit Community-Version
  • HipSYCL: unvollständige 1.2.1-Unterstützung ohne OpenCL-Kopplung und Images, teilweise SYCL 2020, unterstützt RocM (AMD), CUDA (Nvidia), OpenMP (CPUs) und Level Zero (Intel). Die aktuelle Version ist 0.9.1 im März 2021.
  • triSYCL: basiert auf OpenCL++ von OpenCL 2.2, langsame Entwicklung, unvollständig, teilweise C++17
  • neoSYCL: SYCL 1.2.1 fast vollständig, für HPC SX-Aurora Tsubasa, keine OpenCL-spezifischen Funktionen wie Image-Unterstützung
  • SYCL-gtx: C++11-Unterstützung, für OpenCL 1.2+, noch lange nicht abgeschlossen, keine aktuelle Entwicklung
  • SYLKAN ist eine Implementierung von SYCL auf Vulkan-Geräte im experimentellen Zustand.

Software

  • Gromacs : SYCL 2020 ist Teil der Gromacs-Version 2021.
  • Einsatz in der Automobilindustrie für autonomes Fahren mit Unterstützung der ISO 26262 .

Tutorials

Es gibt einige Tutorials in den ComputeCpp SYCL-Anleitungen.

Lizenz

Die Quelldateien zum Erstellen der Spezifikation, wie Makefiles und einige Skripte, die SYCL-Header und die SYCL-Codebeispiele stehen unter der Apache 2.0-Lizenz. Details zur Lizenz finden Sie unter: https://www.apache.org/licenses/LICENSE-2.0.html

Vergleich mit anderen APIs

Die offenen Standards SYCL und OpenCL ähneln dem herstellerspezifischen CUDA von Nvidia .

Im Bereich der Khronos Group sind OpenCL und Vulkan die Low-Level- Non-Single-Source- API und SYCL die High-Level- Single-Source- C++- domänenspezifische eingebettete Sprache .

Im Vergleich dazu ist die Single-Source- C++- domänenspezifische eingebettete Sprachversion von CUDA , die eigentlich " CUDA Runtime API " heißt, SYCL etwas ähnlich. Aber es gibt tatsächlich eine weniger bekannte Nicht-Single-Source- Version von CUDA, die " CUDA Driver API " genannt wird, ähnlich wie OpenCL , und zum Beispiel von der CUDA Runtime API- Implementierung selbst verwendet wird.

SYCL erweitert die C++ AMP- Funktionen und entlastet den Programmierer von der expliziten Übertragung der Daten zwischen dem Host und den Geräten durch die Verwendung von Puffern und Zugriffsmethoden , im Gegensatz zu CUDA (vor der Einführung von Unified Memory in CUDA 6). Ab SYCL 2020 ist es aber auch möglich, USM anstelle von Puffern und Accessoren zu verwenden, um ein untergeordnetes Programmiermodell ähnlich dem Unified Memory in CUDA zu verwenden .

SYCL ist höherwertig als C++ AMP und CUDA, da Sie keinen expliziten Abhängigkeitsgraphen zwischen allen Kerneln erstellen müssen und Ihnen eine automatische asynchrone Planung der Kernel mit Kommunikations- und Berechnungsüberlappung bietet. All dies geschieht durch die Verwendung des Konzepts von Accessoren, ohne dass eine Compiler-Unterstützung erforderlich ist.

Im Gegensatz zu C++ AMP und CUDA ist SYCL ein reines C++- DSEL ohne C++- Erweiterung, das eine grundlegende CPU-Implementierung ermöglicht, die auf reiner Laufzeit ohne speziellen Compiler basiert . Dies ist sehr nützlich zum Debuggen einer Anwendung oder zum Prototyping für eine neue Architektur, ohne dass die Architektur und der Compiler noch verfügbar sind.

Die hipSYCL-Implementierung fügt CUDA und HIP eine SYCL-Programmierung auf höherer Ebene hinzu .

SYCL weist viele Ähnlichkeiten mit dem Kokkos- Programmiermodell auf, einschließlich der Verwendung undurchsichtiger mehrdimensionaler Array-Objekte (SYCL-Puffer und Kokkos-Arrays), mehrdimensionaler Bereiche für die parallele Ausführung und Reduzierungen (in SYCL 2020 hinzugefügt). Zahlreiche Funktionen in SYCL 2020 wurden als Reaktion auf das Feedback der Kokkos-Community hinzugefügt.

Siehe auch

Verweise

Externe Links