Article

Was passiert, wenn du einen CUDA-Kernel ausführst?

CUDA GPU NVIDIA Deep-Tech Low-Level

Die meisten Entwickler nutzen GPUs als Black Box: Man schreibt einen CUDA-Kernel, startet ihn, und irgendwie funktioniert es. Doch was passiert wirklich zwischen dem kernel<<<blocks, threads>>>-Aufruf und der tatsächlichen Ausführung auf der Hardware? Ein neuer Blogpost von Fergus Finn taucht tief in diese Mechanismen ein.

Der Kompilierungsprozess

nvcc ist nicht einfach ein Compiler, sondern ein Driver-Programm, das mehrere Compiler orchestriert. Der Host-Code geht an den normalen Host-Compiler. Der Device-Code durchläuft mehrere Stufen:

  1. cicc (LLVM-basiert) transformiert den Code zu PTX
  2. ptxas kompiliert PTX zu SASS

PTX ist eine virtuelle ISA mit unendlich vielen typisierten Registern. Ein einfacher vadd-Kernel kann Register wie %rd1 bis %rd10 für 64-Bit-Integer und %f1 bis %f3 für Floats verwenden. SASS hingegen ist architekturspezifisch – virtuelle Register werden auf echte Hardware-Register gemappt.

Der Launch-Mechanismus

Der Post dokumentiert beeindruckende Details:

  • Tens von Millionen CPU-Instruktionen
  • Device-Files und Memory-Mapped Doorbell-Register
  • Über 900 ioctls für einen einzigen Kernel-Launch

Die Reise führt vom CPU-Code über PTX, SASS, Pushbuffer-Kommandos, QMDs (Queue Method Descriptors) bis hin zur eigentlichen Warp-Scheduling-Logik auf der GPU.

Warum das wichtig ist

Für ML-Entwickler: Wer versteht, was unter der Haube passiert, kann bessere Performance-Probleme debuggen. Der Post erklärt nicht nur das “Wie”, sondern zeigt auch, wie man mit Tools wie nvprof und speziellen Hooks in den Launch-Prozess hineinsehen kann.