15.01.2013 Views

U. Glaeser

U. Glaeser

U. Glaeser

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

The principle of register renaming is straightforward. The processor removes false data dependencies<br />

by writing the results of the instructions first into dynamically allocated rename buffers, rather than into<br />

the specified destination registers. For instance, in the case of the following WAR dependency<br />

the processor renames the destination register of i<br />

2<br />

i<br />

2<br />

becomes<br />

© 2002 by CRC Press LLC<br />

i1:<br />

add …, r2,<br />

…; [… ← (r2)<br />

+ (…)]<br />

i2:<br />

mul r2,<br />

…, …; [r2<br />

← (…) ∗ (…)]<br />

(r2),<br />

say to r33.<br />

Then after the renaming of r2,<br />

instruction<br />

: mul r33,<br />

…, …; [33 ← (…) ∗ (…)]<br />

and the processor writes the result of i′ 2 into r33<br />

instead of into r2.<br />

This resolves the previous WAR<br />

dependency between i1<br />

and i2.<br />

In subsequent instructions, however, references to the source register r2<br />

must be redirected to the rename buffer r33<br />

as long as the renaming remains valid. In the next section<br />

we give a detailed description of the whole rename process.<br />

4<br />

A precursor to register renaming was introduced in 1967 by Tomasulo in the IBM 360/91, a scalar<br />

supercomputer of that time, which pioneered both pipelining and shelving. The 360/91 renamed floating<br />

point registers in order to preserve the logical consistency of the program execution, rather than to<br />

increase processor performance by removing false data dependencies.<br />

5<br />

Tjaden and Flynn were the first to suggest the use of register renaming for removing false data dependencies.<br />

They proposed the renaming of load type instructions, but they did not yet use the term “ register<br />

6<br />

renaming.”<br />

This specific term was introduced a few years later, in 1975, by Keller who extended renaming<br />

to cover all instructions including a destination register. He also described a possible hardware implementation<br />

of this technique. Because of the complexity of its implementation, however, about two decades<br />

passed until register renaming came into widespread use in superscalars in the beginning of the 1990s.<br />

Early superscalar models of significant processor lines, such as the PA 7100, SuperSparc, Alpha 21064,<br />

R8000, and the Pentium, typically did not yet use renaming as indicated in Fig. 6.1. Renaming appeared<br />

gradually, first in a restricted form, called partial renaming, in the beginning of the 1990s, in the IBM<br />

RS/6000 (Power1), Power2, PowerPC 601, and in NextGen’s Nx586 processors, as depicted in Fig. 6.1.<br />

Partial renaming restricts renaming to one or to a few data types, such as floating point loads or floating<br />

point instructions, as detailed in the section “Scope of Register Renaming.” Full renaming emerged later,<br />

beginning in 1992, first in the high-end models of the IBM mainframe family ES/9000, then in the<br />

PowerPC 603. Subsequently, renaming spread into virtually all superscalar processors with the notable<br />

exception of Sun’s UltraSparc line. At present register renaming is considered to be a standard feature of<br />

performance oriented superscalar processors.<br />

Overview of the Rename Process<br />

i 2 ′<br />

The rename process itself is considerably complex. It consists of a number of rename specific tasks—such<br />

as renaming the destination and the source registers, fetching renamed source operands, updating the<br />

rename buffers, releasing allocated rename buffers, recovery of the rename process from faultily executed<br />

speculative execution, etc. In addition, each of the rename specific tasks may be implemented in a number<br />

of different ways. Furthermore, the kind of the underlying microarchitecture affects how the rename<br />

process is carried out. Therefore, each concrete description of the rename process is related to a particular<br />

kind of the renaming technique employed and the underlying microarchitecture. Thus, before describing<br />

the rename process we need to be specific about both the renaming technique and the microarchitecture<br />

assumed.<br />

As far as the renaming technique is concerned, in a subsequent section, we will show that eight basic<br />

alternatives for renaming are available. In our description of the rename process, we need to presume one

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!