Produkte

Was ist oneAPI?

Unterschiedliche Workloads, diverse Rechner-Architekturen und keine Performance-Kompromisse

von Edmund Preiss
 

 
oneAPI ist ein offenes, freies und auf Standards basierendes Programmierkonzept. Intel hat oneAPI entworfen, um plattformübergreifend für diverse Beschleuniger und CPUs von den verschiedensten Anbietern mit unterschiedlichen Hardware-Architekturen und -Generationen Portabilität  und Performance anzubieten.

Eine einzige Anwendungsschnittstelle für unterschiedlichste Hardware – und trotzdem performanter Code. Diese beiden auf den ersten Blick widersprüchlichen Ziele will Intel mit dem oneAPI Toolkit erreichen, das nach zwei Jahren intensiver Entwicklung am 11. November 2020 Produktreife erreicht hat. Als konsequente Weiterentwicklung von Intel Parallel Studio XE baut Intel oneAPI 1.0 auf den bewährten Compilern und Bibliotheken auf. Die Spezifikation von oneAPI basiert dabei vor allem auf der neuen Programmiersprache DPC++, deren Compiler wiederum durch weitere API-Bibliotheks-Spezifikationen ergänzt wird.

Das Problem, das oneAPI löst: Um langfristig die maximale Leistung aus unterschiedlichster Hardware herauszukitzeln, ist ein fein austariertes Gleichgewicht nötig – zwischen dem Ausreizen sämtlicher Möglichkeiten einer Spezial-Hardware und dem Rückgriff auf die Spezifika der Programmierung dieser Hardware. Denn der Quellcode sollte zwar einerseits all diese Hardware-Funktionen möglichst performant nutzen, andererseits aber auch portabel, leicht zu warten und energieeffizient sein. Denn sonst wäre die langfristige Nutzung dieses Codes schwierig.

Widersprüchliche Entwicklungsziele unter einen Hut gebracht

Ein solches Gleichgewicht ist alles andere als einfach zu erreichen, denn auch die Entwicklungsziele von Software sind höchst widersprüchlich.

Bislang entkommen die Entwickler diesem Dilemma nur durch eine Priorisierung der Ziele gemäß der Benutzeranforderungen. Hinzu kommt: Für die Softwareentwickler ist es alles andere als trivial, mehrere getrennte Codebasen einer Anwendung für verschiedene Rechnerarchitekturen zu pflegen. Denn in dem Maße, in dem datenintensive Workloads vielfältiger werden, gibt es auch immer innovativere Architekturen, um die Daten für unterschiedliche Zwecke optimiert verarbeiten zu können.

Die Bandbreite dieser Ziel-Architekturen von Intel und anderen Chip-Herstellern umfasst CPUs (sogenannte skalare Bausteine), aber auch integrierte oder diskrete GPUs (vektorielle Bausteine) , Deep-Learning-Hardware (Matrix-Bausteine) und FPGAs (Spatial-Bausteine). Nur eine gelungene Mischung aus Skalar-, Vektor-, Matrix- und Spatial-Architekturen (SVMS), bereitgestellt über CPUs, GPUs, FPGAs und andere Spezialbeschleuniger, bringt für alle Workloads eine gute Gesamtleistung. Zur performanten Verbindung der Rechner im Cluster unterstützt oneAPI transparent sehr viele Technologien, etwa Intels OmniPath-Architektur, aber auch InfiniBand und Ethernet.

Heterogene SVMS-Architekturen

Ein vereinfachtes Standard-Programmiermodell, das auf SVMS-Architekturen ausgeführt werden kann, macht die Pflege des Codes für die Benutzer viel einfacher. Es steigert außerdem die Produktivität der Entwickler, denn ihr Code kann häufiger wiederverwendet werden und ist aufgrund der höheren Abstraktion länger nutzbar. Ganz nebenbei sinkt auch der Schulungsaufwand, denn man muss sich nicht mehr mit den Spezifika von GPU & Co. auskennen und kann die Hardware dennoch performant programmieren. Wie das funktioniert, zeigt Abbildung 1.

Genau dieses Ziel verfolgt auch die Brancheninitiative hinter oneAPI. Basierend auf Standards und offenen Spezifikationen wurde die neue Cross-Architektur-Sprache „Data Parallel C++“ – kurz DPC++ – definiert; dazu kommt noch eine ganze Reihe von Domänenbibliotheken. Auch eine Programmierung in Python ist möglich, was vor allem KI-Entwickler interessieren dürfte.

Ein Ziel ist es, dass Hardware-Anbieter in der gesamten Branche ihre eigenen kompatiblen Implementierungen für ihre CPUs und Beschleuniger entwickeln. Dann könnten Programmierer in einer einzigen Sprache und mit einem einzigen Satz von Bibliotheks-APIs im gleichen Arbeitsgang gleich mehrere Architekturen und Geräte verschiedener Hersteller programmieren.

Die Parallelität über Architekturen hinweg wird durch die neue Programmiersprache DPC++ erreicht, die wiederum auf der offenen Sprache SYCL der Khronos-Gruppe basiert. SYCL macht als Abstraktionsschicht eine einheitliche Programmierung diverser Prozessoren erst möglich.

DPC++ wiederum verwendet nicht nur moderne C++-Funktionen gemäß ISO-Standard (C++17), sondern auch Intel-bezogene Erweiterungen für die effiziente Nutzung der Hardware. Partner wie Codeplay traten bereits 2019 den Beweis an, dass es mit Hilfe einer Open-Source-Schicht möglich ist, mit DPC++ kompilierten Code auch auf GPUs anderer Hersteller auszuführen.

Die parallele Ausführung auch über Architekturgrenzen hinweg ermöglicht Intel durch die Weiterentwicklung des bewährten Toolkits Parallel Studio, das als integraler Bestandteil in Intels oneAPI-Implementierung einfließt. Um die heterogene Programmierung paralleler Prozesse zu erleichtern, setzt oneAPI zusätzlich ein übergreifendes Softwaremodell voraus, auf das die Compiler dann zurückgreifen. Ergebnis ist eine einzige Binärdatei für alle Architekturen. Deshalb unterscheiden sich die Compile- und Linkprozeduren auch von üblichen Methoden der Binärcode-Generierung.

Übergreifendes Softwaremodell

Das Softwaremodell basiert auf der SYCL-Spezifikation und beschreibt die Interaktion zwischen Host und Spezial-Hardware in Bezug auf Codeausführung und Speichernutzung. Dieses Modell besteht aus vier Teilen:

  1. Ein Plattformmodell, das den Host und das Gerät spezifiziert
  2. Ein Ausführungsmodell, das die Befehlswarteschlangen und die Befehle angibt, die auf dem Gerät ausgeführt werden sollen
  3. Ein Speichermodell, das die Speichernutzung zwischen dem Host und dem Gerät spezifiziert
  4. Ein Kernel-Modell, das Rechenkerne auf Geräte ausrichtet

Intel hat dieses offene Software-Modell bereits implementiert und verbessert es permanent. Intels eigene Implementierung mit dem Produktnamen „Intel oneAPI Toolkit“ hat bereits diverse Ableger und Unterversionen. 

Abbildung 2 zeigt die verschiedenen Komponenten, die Teil des Basis-Toolkits (Intel oneAPI Base Tookit) sind, vor allem der Compiler DPC++ und das Compatibility-Tool für DPC++, diverse Analyse- und Debugging-Tools sowie mehrere optimierte Bibliotheken, etwa für Analytics, Neuronale Netzwerke/Deep Learning oder Videoverarbeitung. 

Domänenspezifische Toolkits erweitern oneAPI je nach Bedarf

Das Intel oneAPI Base Toolkit kann jederzeit um die erwähnten domänenspezifischen Toolkits ergänzt werden, Dazu gehören das HPC Toolkit, das IoT Toolkit, das DL Framework Developer Toolkit und das Rendering Toolkit. All diese Toolkits  sind auf verschiedene Benutzer und unterschiedliche Anwendungsfelder zugeschnitten.

Das Intel oneAPI HPC Toolkit beispielsweise ist besonders für das Distributed Computing von  Supercomputeranwendungen gedacht. Es unterstützt zusätzlich zu DPC++ auch OpenMP (Open Multi-Processing) in der Version 5.0. Letzteres ist ein seit 1997 gemeinschaftlich von verschiedenen Hardware- und Compilerherstellern entwickeltes standardisiertes API für die Shared-Memory-Programmierung in C++, C und Fortran auf Multiprozessor-Computern.

Dank der Unterstützung von OpenMP kann der vorhandene Code für HPC-Anwendungen vom Host auch auf eine diskrete GPU ausgelagert werden. Benutzer können also entweder zur Verwendung von DPC++ übergehen oder aber diese Offload-Funktionen für bewährten C/C++/Fortran-Code nutzen.


Edmund Preiss

ist Business-Development-Manager Europe für Software-Tools bei Intel. Zu diesen Tools gehören z.B. Compiler, KI-Frameworks und Bibliotheken für Anwendungen in den Bereichen F&E, HPC, Fertigung, Automotive und Machine/Deep Learning.

Bildnachweise

Intel