Grundlagen zu Intels Itanium (Teil I)

Vorausschauen ...

Da Speicherzugriffe eine verhältnismäßig lange Zeit benötigen, ist es sinnvoll, spezielle Vorab-Ladebefehle für Daten am Beginn einer Programmsequenz zu platzieren. Das Laden der später benötigten Daten findet dann parallel zur Bearbeitung anderer Befehle statt, die Daten sind aber bereits im Prozessor, wenn eine Berechnung sie später tatsächlich benötigt. Wird zwischen dem Vorab-Ladebefehl und der Stelle im Programmcode, an der die Daten benötigt werden, der betreffende Speicherbereich geändert, so sind die im voraus eingelesenen Daten nicht mehr gültig. Gründe dafür können ein Schreibzugriff des Prozessors selbst oder auch ein DMA-Zugriff eines I/O-Controllers sein. Die ursprünglich eingelesenen Werte werden dann verworfen und neu eingelesen.

Für das Vorabladen der Daten wird mittels des Befehls ld.a (Load Advanced) für eine Ladeoperation ein Eintrag in der Advanced Load Address Table (ALAT) vorgenommen. Im Beispiel erzeugt ld4.a einen entsprechenden Eintrag für das Register r4, das den Inhalt einer Speicheradresse erhalten soll, die in r3 steht. Jetzt hat die CPU genügend Zeit, diesen Wert bis zur eigentlichen Nutzung, der Addition von r4 und r5, aus dem langsamen Speicher zu holen. Werden bis dahin Daten an die betreffende Speicheradresse geschrieben, so löscht die CPU den zugehörigen Eintrag in der ALAT. Vor der Addition prüft der Compiler mit ld4.c.clr, ob der Wert noch gültig ist. Falls ja, erfolgt die Addition ohne Verzögerung. Andernfalls aktualisiert der Itanium den Wert durch einen Zeit raubenden Speicherzugriff.