Ein Compute-Shader ist ein Shader-Typ, der die massiv parallelen Rechenkerne einer Grafikkarte für allgemeine Berechnungen nutzt — nicht nur zum Zeichnen von Bildern. Er ist die moderne Schnittstelle zwischen Grafik-API und GPGPU-Berechnungen.
Grundprinzip: Arbeit in Gruppen
Statt Dreiecke zu verarbeiten, arbeitet ein Compute-Shader auf einem abstrakten Gitter aus Arbeitsgruppen (Workgroups). Jede Gruppe besteht aus vielen Threads (bei Vulkan oft 32–256), die gleichzeitig laufen. Die GPU führt diese Gruppen auf ihren Shader-Kernen aus; über gemeinsamen Speicher innerhalb einer Gruppe können Threads Daten austauschen.
Compute-Shader vs. klassische Shader
Während Vertex- und Fragment-Shader fest in die Grafik-Pipeline eingebunden sind, läuft ein Compute-Shader unabhängig davon in einer eigenen Compute-Pipeline. Er hat keinen Zugriff auf Rasterisierung oder Tiefentest, dafür aber auf flexible Speicherzugriffe (Shader Storage Buffers, strukturierte Bilder) — ideal für Algorithmen, die nicht ins Schema „Dreieck rein, Pixel raus" passen.
Einsatzgebiete
- Physiksimulation: Partikel, Flüssigkeiten, Kollisionen
- Bild- und Videobearbeitung: Filter, Schärfen, Effekte
- Künstliche Intelligenz: Matrix-Operationen für neuronale Netze
- Datenverarbeitung: Sortieren, Suchen, Hashen großer Datenmengen
- Raytracing-Nachbearbeitung, Tone Mapping, Upscaling
Abgrenzung zu CUDA und OpenCL
Compute-Shader sind in moderne Grafik-APIs eingebettet: In Vulkan und WebGPU sind sie Pflicht, in OpenGL seit Version 4.3 verfügbar. CUDA (Nvidia) und OpenCL sind eigenständige GPGPU-APIs mit ähnlichen Konzepten (Kernel statt Compute-Shader). Compute-Shader haben den Vorteil, direkt mit der Grafik-Pipeline Daten zu teilen — GPU-seitig, ohne Umweg über die CPU.
Verwandte Grundlagen: Shader, Grafik-Pipeline, GPGPU, SIMD, GPU.