bk99.de entertain the web since 1997

Offener Compiler übersetzt CUDA für x86-Mehrkernprozessoren

Zusammenfassung

Das Open-Source-Projekt Ocelot veröffentlichte Ende 2009 einen Just-in-time-Compiler, der CUDA-Programme nicht nur auf NVIDIA-Grafikkarten, sondern auch auf x86-Prozessoren mit mehreren Kernen ausführt. Dazu übersetzt er die GPU-Befehle in die Zwischensprache von LLVM und erzeugt daraus Maschinencode für jedes LLVM-Ziel. Er war an über 100 CUDA-Anwendungen geprüft und stand unter der New-BSD-Lizenz.

Was Ocelot löste

CUDA ist NVIDIAs Programmiermodell für Berechnungen auf der Grafikkarte. Wer dafür schrieb, war an NVIDIA-Hardware gebunden. Ocelot nahm den Zwischencode PTX, den der CUDA-Compiler erzeugt, und übersetzte ihn so, dass er auch auf normalen Prozessoren lief. Damit ließ sich derselbe Code ohne Grafikkarte testen und auf Rechnern ohne NVIDIA-Karte ausführen.

Für Forschung war das wertvoll: Man konnte Programme auf unterschiedlicher Hardware vergleichen, analysieren und Fehler finden, ohne den Quellcode umzuschreiben.

Warum das wichtig war

2009 war gerade OpenCL als herstellerunabhängiger Standard erschienen. Ocelot zeigte einen anderen Weg: nicht den Code neu schreiben, sondern den vorhandenen CUDA-Code mit einem Compiler auf andere Hardware bringen. Die Idee, mit LLVM als gemeinsamer Zwischenschicht zu arbeiten, hat sich in der Compiler-Welt seitdem breit durchgesetzt.

Was daraus wurde

Die Bindung an CUDA ist bis heute eines der stärksten Argumente für NVIDIA, gerade bei KI-Anwendungen. Projekte wie AMDs HIP, das CUDA-ähnlichen Code für AMD-Karten übersetzt, verfolgen den Gedanken von Ocelot weiter. Aus derselben Forschungsgruppe an der Georgia Tech stammt auch Red Fox, das 2013 Datenbankabfragen auf GPUs beschleunigte.

Ideen

  • Ein Just-in-time-Compiler kann GPU-Code zur Laufzeit auf andere Hardware übersetzen.
  • LLVM dient als gemeinsame Zwischenschicht für viele Zielarchitekturen.
  • Vorhandenen Code übersetzen statt neu schreiben senkt die Bindung an einen Hersteller.

Einsichten

  • Programmiermodelle binden Software oft stärker an einen Hersteller als die Hardware selbst.
  • Compiler-Zwischensprachen sind ein mächtiges Werkzeug gegen Abhängigkeiten.

Fakten

  • Ocelot übersetzte CUDA-Programme über LLVM auf x86-Mehrkernprozessoren.
  • Der Compiler war an über 100 CUDA-Anwendungen validiert.
  • Der Code stand unter der New-BSD-Lizenz.

Referenzen

Bemerkungen

  • Ocelot entstand an der Georgia Tech; die Projektseite lag ursprünglich bei Google Code.

Empfehlungen

  • Prüfe bei GPU-Projekten früh, wie stark du dich an einen Hersteller bindest.
  • Nutze portable Schichten wie HIP, SYCL oder OpenCL, wenn Hardwareunabhängigkeit wichtig ist.

Originalbeitrag lesen →

Im Webarchiv suchen