Mit ROCr und ROCm möchte AMD den Platzhirsch Nvidia und dessen CUDA herausfordern. Die Ansätze sind vielversprechend, aber an einigen Stellen muss das Unternehmen noch nacharbeiten.

Die Programmierung von Grafikkarten (GPU) für wissenschaftliches Rechnen findet vorrangig in C++ und Fortran (sowie teilweise in C) statt. Der Primus in diesem Feld ist Nvidias CUDA und das dazu gehörige Software-Ökosystem aus performanten und spezialisierten C-Bibliotheken (z. B. cuFFT, cuBLAS, cuRAND, cuDNN und cuSPARSE), einer C-Laufzeitumgebung wie libcuda oder libcudart, C++-Abstraktionen (thrust und cub) sowie aus Entwicklungswerkzeugen wie dem Debugger cuda-gdb oder der Profiling-Suite NVVP. Entwickler erhalten in Verbindung mit einem breiten Spektrum an meist frei zugänglichen Lernressourcen wie Webinaren oder Onlinekursen einen vergleichsweise komfortablen Einstieg in die Programmierung von Nvidia GPUs. Davon verspricht sich Big Green nicht nur eine Beschleunigung der Anwendung, sondern auch höhere Verkaufszahlen der Hardware, denn CUDA-Applikationen und -Bibliotheken sind ausschließlich auf Nvidia-Hardware lauffähig.

Die offen standardisierte Alternative OpenCL fristet leider seit Jahren außerhalb akademischer Projekte ein Schattendasein. Trotz mehrerer Anstrengungen einer Renaissance (OpenCL 2.1 im Jahr 2015, OpenCL 2.2 im Jahr 2016) und der semantischen Nähe zu CUDA hat dieses Paradigma nicht die flächendeckende Anwendung aufzuweisen wie Nvidias Plattform. Gründe dafür sind unter anderem ein fehlendes einheitliches Software-Ökosystem für GPU- und CPU-basierte Plattformen, wirtschaftliche Interessen der Hersteller, die hauseigene Technologien den Vorzug geben, die schiere Hardware-Komplexität im Wechselspiel zum Low-level-Charakter von OpenCL sowie die heterogenen Möglichkeiten der Kompilation von OpenCL-Kernels.

Gegenangriff von AMD

Aus dieser Situation heraus hat AMD in den vergangenen Monaten eine Open-Source-Plattform zum Ausführen, Analysieren und Kompilieren von Software auf AMD-GPU-Hardware geschaffen. Innerhalb der AMD-Initiative Radeon Open Compute (ROC) ist ein vollständiges und reichhaltiges Ökosystem aus Treibern, Laufzeitumgebungen, Compiler-Infrastruktur und Analysewerkzeugen unter dem Namen ROCm (Radeon Open Compute Platform) entstanden. Als Betriebssystem unterstützt das Projekt aktuell exklusiv Linux, da der Fokus auf dem serverbasierten Cloud-, Deep-Learning- und HPC-Markt liegt.

Das Herzstück der ROCm bildet der Kernel-Treiber ROCk, den AMD-spezifische Paketquellen im laufenden Betrieb installieren und dessen Aktivierung beim Reboot stattfindet. Diese Kernel-Erweiterung unterstützten auf der Hostseite Intels Xeon-E3 und -E5-Chips der Haswell-Generation oder neuer, sowie alle Core i3/i5/i7 Chips der dritten Generation und aufwärts. In kommenden Versionen der ROCm-Plattform gehören zusätzlich AMDs hauseigene Epyc- und Ryzen-Architekturen, OpenPower-CPUs und Caviums Thunder X ARM-Chipsatz zu den unterstützten Plattformen. ROCm arbeitet zum Zeitpunkt der Fertigstellung des Artikels mit AMDs Fiji und Polaris-GPU-Karten zusammen, also der dritten und vierten Generation der GCN-Architektur (Graphics Core Next). Das Treibermodul unterstützt außerdem den Multi-GPU-Betrieb sowie Remote Direct Memory Access (RDMA) und exportiert zusätzlich eine Systemmanagement-API, um beispielsweise Monitoring-Werkzeuge anzubinden.

Seit Anfang Mai 2017 ist ROCm 1.5 verfügbar. Nach ersten Tests scheint es sich um ein Bugfix-Release zu handeln, das neue Features in begrenztem Maße mitbringt. Eine Neuerung ist, dass es mit OpenCL 2.0 arbeiten kann – abgesehen von Pipes and DeviceEnqueue. ROCm 1.5.1 soll zeitnah mit Unterstützung von ARM- und OpenPower-Architekturen verfügbar sein. Man darf also gespannt bleiben, welche Performance ROCm auf API und auf Hardware-Niveau weiterhin bieten kann.