Superskalare Prozessorarchitekturen

WAR- uns WAW-Hazards

Im Gegensatz zu den RISC-CPUs, die lediglich den Read-after-Write-(RAW) Hazard kennen (siehe Grundlagen der RISC-Architektur), können bei superskalaren CPUs auf Grund der parallelen Ausführung von Instruktionen auch Write-after-Read-(WAR) sowie Write-after-Write-(WAW) Hazards auftreten. Diese Abhängigkeiten stellt die folgende Abbildung dar, die sich auf den ersten Basisblock des Beispiels bezieht:

WAW-Hazards treten auf, da die Reihenfolge des schreibenden Zugriffs auf ein Register nicht mehr durch die Sequenz der Befehle gegeben ist. Die Instruktionen führt die CPU ja nun parallel zueinander aus. Der korrekte, letzte Schreibzugriff muss daher detektierbar sein. Dadurch kann entweder eine Zerstückelung der parallelen Ausführung erfolgen oder durch spezielle Zusätze eine Entscheidung zum korrekten Wert nachträglich getroffen werden. Während die erste Lösung unerwünscht ist, impliziert Letzteres zusätzliche Register zur Aufnahme aller Zwischenwerte sowie eine Entscheidungseinheit.

Gründe für WAW-Hazards sind:

  • Nicht optimierter Code

  • Begrenzte Registeranzahlen

  • Schleifen, die mehrfach zueinander parallel ablaufen

Die andere Sorte der neuen Abhängigkeiten sind WAR-Hazards. Sie treten auf, da die CPU unbedingt gewährleisten muss, dass sie zur Berechnung die gültigen, in diesem Fall älteren Werte in einem Register oder einer Speicherstelle nutzt. Die parallele Ausführung garantiert dies keineswegs mehr, da eine Zugriffsreihenfolge nicht mehr bestimmbar ist. WAR- und WAW-Abhängigkeiten werden als virtuell oder künstlich bezeichnet, da sie geeignete Maßnahmen wirkungslos machen. RAW hingegen bleibt eine reale, unauflösbare Datenabhängigkeit.