A mechanism is described that prefetches instructions and data into the
cache using a branch instruction as a prefetch trigger. The prefetch is
initiated if the predicted execution path after the branch instruction
matches the previously seen execution path. This match of the execution
paths is determined using a branch history queue that records the branch
outcomes (taken/not taken) of the branches in the program. For each branch
in this queue, a branch history mask records the outcomes of the next N
branches and serves as an encoding of the execution path following the
branch instruction. The branch instruction along with the mask is
associated with a prefetch address (instruction or data address) and is
used for triggering prefetches in the future when the branch is executed
again. A mechanism is also described to improve the timeliness of a
prefetch by suitably adjusting the value of N after observing the
usefulness of the prefetched instructions or data.
Eine Einheit wird beschrieben, die prefetches Anweisungen und Daten in den Pufferspeicher, der einen Verzweigungsbefehl als prefetch verwendet, auslösen. Das prefetch wird eingeleitet, wenn der vorausgesagte Durchführung Weg nach dem Verzweigungsbefehl den vorher gesehenen Durchführung Weg zusammenbringt. Dieses Gleiche der Durchführung Wege wird mit einer Niederlassung Geschichte Warteschlange festgestellt, die die Niederlassung Resultate (taken/not genommen) der Niederlassungen im Programm notiert. Für jede Niederlassung in dieser Warteschlange, notiert eine Niederlassung Geschichte Schablone die Resultate der folgenden N Niederlassungen und dient als kodierung des Durchführung Weges nach dem Verzweigungsbefehl. Der Verzweigungsbefehl zusammen mit der SchabloneIST mit einer prefetch Adresse (Anweisung oder Datenadresse) verbunden und wird für prefetches zukünftig auslösen verwendet, wenn die Niederlassung wieder durchgeführt wird. Eine Einheit wird beschrieben auch, um die Rechtzeitigkeit eines prefetch zu verbessern, indem man passend den Wert von N, nachdem man die Verwendungsfähigkeit von beobachtet hat, prefetched Anweisungen oder Daten justiert.