Das Schreiben von Software, die auf den heutigen heterogenen Rechnerarchitekturen effizient laufen soll, ist eine ständige Herausforderung, die durch die wachsende Zahl von Prozessoren und Beschleunigern immer schwieriger wird. Ein Versuch, diese Herausforderung zu mildern, ist das vom Khronos-Industriekonsortium entwickelte High-Level-Programmiermodell – SYCL. SYCL baut auf OpenCL auf und „ermöglicht es, Code für heterogene Prozessoren in einem Single-Source-Stil unter Verwendung von vollständig standardmäßigem C++ zu schreiben.“
Intel beispielsweise stützt sich bei Intels OneAPI-Initiative zur Portierung von Software auf seine kommende X2-GPU-Reihe stark auf SYCL. Bislang war der SYCL-Support für Nvidia-GPUs etwas umständlich. Am Montag kündigte Codeplay eine frühe Open-Source-Version von Intels SYCL-Implementierung, DPC++, an, die einen robusteren Support für Nvidia-GPUs bietet.
Ruyman Reyes, leitender Software-Ingenieur von Codeplay, beschrieb das Angebot in einem Blogbeitrag. Hier ist ein Auszug:
„Letztes Jahr waren wir wirklich begeistert zu erfahren, dass Intel große Anstrengungen hinter SYCL steckt und eine API entwickelt hat, die DPC++ (eine Implementierung von SYCL für Erweiterungen) für seine CPUs, GPUs und FPGAs enthält. Mit dem zusätzlichen Support von Xilinx, Renesas und Imagination Technologies können Softwareentwickler nun eine breite Palette von Geräten mit SYCL ansprechen.
Während ComputeCpp experimentellen Support für Nvidia-GPUs unter Verwendung von OpenCL und Nvidias bietet, bot DPC++ (Intels SYCL-Implementierung) die Möglichkeit, vollen Support für in den LLVM-Compiler integrierte Nvidia-GPUs hinzuzufügen, ohne OpenCL durchlaufen zu müssen und wurde die erste, experimentelle Phase der Implementierung, die es SYCL-Entwicklern ermöglicht, auf Nvidia-GPUs zu zielen, als Open Source zu veröffentlichen.
Die Codebasis für diese Implementierung lebt in einem separaten Zweig sowohl des Hauptprojekts des LLVM-Compilers als auch des DPC++-Zweigs, was bedeutet, dass Sie dieses Projekt vorerst nutzen müssen, um den Support für Nvidia-GPUs mit SYCL auszuprobieren. Unser Ziel ist es, mit Intel zusammenzuarbeiten, um den Nvidia-GPU-Support zum Upstream-Intel/LLVM-Compiler hinzuzufügen.
Dies ist eine frühe, unvollständige Version und es wird weiter an der Integration weiterer Funktionen und verbesserter Leistung gearbeitet.“
Sie sollten sich den Blogbeitrag einmal komplett durchlesen. Mit dem neuen DPC++-Skill haben Sie viel Raum zum Experimentieren. Es existiert auch eine Beschreibung dessen, was gut zu funktionieren scheint und was nicht. Zum Beispiel: „Im Moment kann die kompilierte SYCL-Anwendung nur entweder auf CUDA oder auf OpenCL abzielen, nicht auf beides gleichzeitig. Um eine SYCL-Anwendung für das CUDA-Backend zu erstellen, ist das Flag nvptx64-nvidia-cuda-sycldevice erforderlich.“
Heterogene Single-Source-Programmierung in C++ für OpenCL.
SYCL (ausgesprochen „sickel“) ist ein lizenzgebührenfreier, plattformübergreifender Abstraction-Layer, welcher auf den zugrunde liegenden Konzepten, der Portabilität und der Effizienz von OpenCL aufbaut und es ermöglicht, Code für heterogene Prozessoren in einem „Single-Source“-Stil unter Verwendung von vollständig standardmäßigem C++ zu schreiben.
Die SYCL-Single-Source-Programmierung ermöglicht es, den Host- und Kernel-Code für eine Anwendung in derselben Quelldatei zu erhalten und zwar auf typsichere Weise und mit der Einfachheit eines plattformübergreifenden asynchronen Task-Graphen. SYCL enthält Templates und generische Lambda-Funktionen, um eine saubere Codierung von Anwendungssoftware auf höherer Ebene mit optimierter Beschleunigung des Kernel-Codes in der umfangreichen Palette der ausgelieferten OpenCL 1.2-Implementierungen zu ermöglichen. Entwickler programmieren auf einer höheren Ebene als OpenCL C oder C++, haben aber durch die nahtlose Integration mit OpenCL, C/C++-Bibliotheken und Frameworks wie OpenCV oder OpenMP stets Zugriff auf Code auf niedrigerer Ebene.
Vielen Dank für Ihren Besuch.