Der Warp Scheduler, auch Warp-Scheduler, , ist eine Steuereinheit in einem Streaming Multiprocessor (SM) von Grafikprozessoren, die das von Nvidia verwendete CUDA-Programmiermodell (Single-Instruction, Multiple-Thread, SIMT) implementieren. Der Warp Scheduler wählt in jedem Instruktionsausgabezyklus einen ausführungsbereiten Warp (Ausführungsgruppe von 32 Threads) aus und gibt dessen nächste Instruktion an die Ausführungseinheiten weiter.
Funktionsweise Wenn ein SM einen oder mehrere Thread-Blöcke ausführt, partitioniert er deren Threads in Warps zu jeweils 32 Threads. Der Ausführungskontext eines Warps (u. a. Programmzähler und Register) bleibt während der Lebensdauer des Warps auf dem Chip erhalten; ein Wechsel zwischen Warps ist daher ohne zusätzlichen Kontextwechsel-Overhead möglich. Auf diese Weise können Warps zeitlich ineinander verschränkt ausgeführt werden, um Latenzen (z. B. bei Speicherzugriffen) zu überdecken.
Implementierungsbeispiele Die konkrete Ausprägung des Warp Schedulers hängt von der jeweiligen Mikroarchitektur ab. In der Fermi-Architektur besitzt jeder SM zwei Warp-Scheduler und zwei Instruktions-Dispatch-Einheiten, wodurch zwei Warps parallel ausgegeben werden können (dual issue).
Bei der Turing-Architektur sind vier Warp-Scheduler-Einheiten pro SM dokumentiert; jeder Scheduler verwaltet eine feste Teilmenge der aktiven Warps und gibt Instruktionen an zugeordnete Ausführungseinheiten aus.
mini|Schematische Darstellung eines Dual-Warp-Schedulers (Fermi-Mikroarchitektur).
Begriffliche Einordnung In der CUDA-Terminologie heißen die vom Warp Scheduler verwalteten Ausführungsgruppen Warps; in Teilen der Fachliteratur werden vergleichbare Ausführungsgruppen in anderen Programmiersystemen als Wavefronts bezeichnet.
Einzelnachweise
Kategorie:Nvidia Kategorie:Parallelverarbeitung Kategorie:Rechnerarchitektur