Out-of-order execution: Difference between revisions

Content deleted Content added
Out-of-order processors: clarify that there are many ways to commit ooo results not just one.
Tags: Mobile edit Mobile web edit Advanced mobile edit
WikiCleanerBot (talk | contribs)
m v2.05b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation)
Line 9:
 
=== Early use in supercomputers ===
Arguably the first machine to use out-of-order execution is the [[CDC 6600]] (1964), which used a [[Scoreboarding|scoreboard]] to resolve conflicts. The 6600 however lacked [[Hazard_(computer_architecture)#Write_after_write_(WAW)|WAW conflict]] handling, choosing instead to stall. This situation was termed a "First Order Conflict" by Thornton.<ref>{{harvtxt|Thornton|1970|p=125}}</ref>. Whilst it had both [[RAW conflict]] resolution (termed "Second Order Conflict"<ref>{{harvtxt|Thornton|1970|p=126}}</ref>) and [[Hazard_(computer_architecture)#Write_after_read_(WAR)|WAR conflict]] resolution (termed "Third Order Conflict"<ref>{{harvnb|Thornton|1970|p=127}}</ref>) all of which is sufficient to declare it capable of full out-of-order execution, the 6600 did not have precise exception handling. An early and limited form of Branch prediction was possible as long as the branch was to locations on what was termed the "Instruction Stack" which was limited to within a depth of seven words from the Program Counter.<ref>{{harvnb|Thornton|1970|p=112,123}}</ref>
 
About two years later, the [[IBM System/360 Model 91]] (1966) introduced [[register renaming]] with [[Tomasulo's algorithm]],<ref>{{citation |title=An Efficient Algorithm for Exploiting Multiple Arithmetic Units |journal=[[IBM Journal of Research and Development]] |volume=11 |issue=1 |pages=25–33 |date=1967 |author-first=Robert Marco |author-last=Tomasulo |author-link=Robert Marco Tomasulo |doi=10.1147/rd.111.0025 |url=https://pdfs.semanticscholar.org/8299/94a1340e5ecdb7fb24dad2332ccf8de0bb8b.pdf |archive-url=https://web.archive.org/web/20180612141530/https://pdfs.semanticscholar.org/8299/94a1340e5ecdb7fb24dad2332ccf8de0bb8b.pdf |url-status=dead |archive-date=2018-06-12 |citeseerx=10.1.1.639.7540|s2cid=8445049 }}</ref> which dissolves false dependencies (WAW and WAR), making full out-of-order execution possible. An instruction addressing a write into a register ''r<sub>n</sub>'' can be executed before an earlier instruction using the register ''r<sub>n</sub>'' is executed, by actually writing into an alternative (renamed) register ''alt-r<sub>n</sub>'', which is turned into a normal register ''r<sub>n</sub>'' only when all the earlier instructions addressing ''r<sub>n</sub>'' have been executed, but until then ''r<sub>n</sub>'' is given for earlier instructions and ''alt-r<sub>n</sub>'' for later ones addressing ''r<sub>n</sub>''.