https://de.wikipedia.org/w/index.php?action=history&feed=atom&title=Out-of-order_executionOut-of-order execution - Versionsgeschichte2025-07-29T19:18:03ZVersionsgeschichte dieser Seite in WikipediaMediaWiki 1.45.0-wmf.11https://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=254971331&oldid=prevWinkekatze: "in-of-order execution" entlinkt und gefettet, da es nach Löschung eine Weiterleitung auf diesen Artikel geworden ist2025-04-08T17:04:07Z<p>"in-of-order execution" entlinkt und gefettet, da es nach Löschung eine Weiterleitung auf diesen Artikel geworden ist</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 8. April 2025, 19:04 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 1:</td>
<td colspan="2" class="diff-lineno">Zeile 1:</td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>{{lang|en|'''Out-of-order execution'''}} ({{enS}} für etwa ''Ausführung in anderer Reihenfolge [als im Programmcode]'') bezeichnet die Möglichkeit, Maschinenbefehle in den Ausführungseinheiten eines (meist [[Superskalarität|superskalaren]]) [[Prozessor]]s in einer anderen Reihenfolge auszuführen als sie im [[Programmcode]] stehen, ohne allerdings das Ergebnis zu verändern. Dadurch können mehr Befehle parallel ausgeführt werden, da die Recheneinheiten des Prozessors besser ausgelastet werden. Das Gegenteil von {{lang|en|''out-of-order execution''}} ist {{lang|en|''<del style="font-weight: bold; text-decoration: none;">[[</del>in-order execution<del style="font-weight: bold; text-decoration: none;">]]</del>''}}, bei der die Befehle strikt nach Programmreihenfolge abgearbeitet werden, wie etwa beim [[Von-Neumann-Zyklus]]. Weil das Ergebnis das gleiche sein muss wie bei Ausführung in Programmreihenfolge, erhöht ''out-of-order execution'' die Geschwindigkeit nur bei Befehlsfolgen, bei denen ein nachfolgender Befehl nicht vom Ergebnis des vorherigen Befehls abhängt (sondern nur von Befehlen, die „weit genug entfernt“ zuvor ausgeführt wurden). </div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>{{lang|en|'''Out-of-order execution'''}} ({{enS}} für etwa ''Ausführung in anderer Reihenfolge [als im Programmcode]'') bezeichnet die Möglichkeit, Maschinenbefehle in den Ausführungseinheiten eines (meist [[Superskalarität|superskalaren]]) [[Prozessor]]s in einer anderen Reihenfolge auszuführen als sie im [[Programmcode]] stehen, ohne allerdings das Ergebnis zu verändern. Dadurch können mehr Befehle parallel ausgeführt werden, da die Recheneinheiten des Prozessors besser ausgelastet werden. Das Gegenteil von {{lang|en|''out-of-order execution''}} ist {{lang|en|''<ins style="font-weight: bold; text-decoration: none;">'</ins>in-order execution<ins style="font-weight: bold; text-decoration: none;">'</ins>''}}, bei der die Befehle strikt nach Programmreihenfolge abgearbeitet werden, wie etwa beim [[Von-Neumann-Zyklus]]. Weil das Ergebnis das gleiche sein muss wie bei Ausführung in Programmreihenfolge, erhöht ''out-of-order execution'' die Geschwindigkeit nur bei Befehlsfolgen, bei denen ein nachfolgender Befehl nicht vom Ergebnis des vorherigen Befehls abhängt (sondern nur von Befehlen, die „weit genug entfernt“ zuvor ausgeführt wurden). </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die schwerwiegenden Sicherheitslücken [[Spectre (Sicherheitslücke)|Spectre]] und [[Meltdown (Sicherheitslücke)|Meltdown]] können nur gegen Prozessoren eingesetzt werden, die zu {{lang|en|''out-of-order execution''}} fähig sind.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die schwerwiegenden Sicherheitslücken [[Spectre (Sicherheitslücke)|Spectre]] und [[Meltdown (Sicherheitslücke)|Meltdown]] können nur gegen Prozessoren eingesetzt werden, die zu {{lang|en|''out-of-order execution''}} fähig sind.</div></td>
</tr>
</table>Winkekatzehttps://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=254715688&oldid=prevWinkekatze: Groß-/Kleinschreibung und Kursivierung von englischen Ausdrücken vereinheitlicht2025-03-31T12:54:19Z<p>Groß-/Kleinschreibung und Kursivierung von englischen Ausdrücken vereinheitlicht</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 31. März 2025, 14:54 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 1:</td>
<td colspan="2" class="diff-lineno">Zeile 1:</td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>{{lang|en|'''Out-of-order execution'''}} ({{enS}} für etwa ''Ausführung in anderer Reihenfolge [als im Programmcode]'') bezeichnet die Möglichkeit, Maschinenbefehle in den Ausführungseinheiten eines (meist [[Superskalarität|superskalaren]]) [[Prozessor]]s in einer anderen Reihenfolge auszuführen als sie im [[Programmcode]] stehen, ohne allerdings das Ergebnis zu verändern. Dadurch können mehr Befehle parallel ausgeführt werden, da die Recheneinheiten des Prozessors besser ausgelastet werden. Das Gegenteil von {{lang|en|out-of-order execution}} ist {{lang|en|''[[in-order execution]]''}}, bei der die Befehle strikt nach Programmreihenfolge abgearbeitet werden, wie etwa beim [[Von-Neumann-Zyklus]]. Weil das Ergebnis<del style="font-weight: bold; text-decoration: none;"> der Out-of-Order-Ausführung</del> das gleiche sein muss wie bei Ausführung in Programmreihenfolge, erhöht <del style="font-weight: bold; text-decoration: none;">Out</del>-of-<del style="font-weight: bold; text-decoration: none;">Order-Execution</del> die Geschwindigkeit nur bei Befehlsfolgen, bei denen ein nachfolgender Befehl nicht vom Ergebnis des vorherigen Befehls abhängt (sondern nur von Befehlen, die „weit genug entfernt“ zuvor ausgeführt wurden). </div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>{{lang|en|'''Out-of-order execution'''}} ({{enS}} für etwa ''Ausführung in anderer Reihenfolge [als im Programmcode]'') bezeichnet die Möglichkeit, Maschinenbefehle in den Ausführungseinheiten eines (meist [[Superskalarität|superskalaren]]) [[Prozessor]]s in einer anderen Reihenfolge auszuführen als sie im [[Programmcode]] stehen, ohne allerdings das Ergebnis zu verändern. Dadurch können mehr Befehle parallel ausgeführt werden, da die Recheneinheiten des Prozessors besser ausgelastet werden. Das Gegenteil von {{lang|en|<ins style="font-weight: bold; text-decoration: none;">''</ins>out-of-order execution<ins style="font-weight: bold; text-decoration: none;">''</ins>}} ist {{lang|en|''[[in-order execution]]''}}, bei der die Befehle strikt nach Programmreihenfolge abgearbeitet werden, wie etwa beim [[Von-Neumann-Zyklus]]. Weil das Ergebnis das gleiche sein muss wie bei Ausführung in Programmreihenfolge, erhöht <ins style="font-weight: bold; text-decoration: none;">''out</ins>-of-<ins style="font-weight: bold; text-decoration: none;">order execution''</ins> die Geschwindigkeit nur bei Befehlsfolgen, bei denen ein nachfolgender Befehl nicht vom Ergebnis des vorherigen Befehls abhängt (sondern nur von Befehlen, die „weit genug entfernt“ zuvor ausgeführt wurden). </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die schwerwiegenden Sicherheitslücken [[Spectre (Sicherheitslücke)|Spectre]] und [[Meltdown (Sicherheitslücke)|Meltdown]] können nur gegen Prozessoren eingesetzt werden, die zu ''<del style="font-weight: bold; text-decoration: none;">Out</del>-of-order execution'' fähig sind.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die schwerwiegenden Sicherheitslücken [[Spectre (Sicherheitslücke)|Spectre]] und [[Meltdown (Sicherheitslücke)|Meltdown]] können nur gegen Prozessoren eingesetzt werden, die zu <ins style="font-weight: bold; text-decoration: none;">{{lang|en|</ins>''<ins style="font-weight: bold; text-decoration: none;">out</ins>-of-order execution''<ins style="font-weight: bold; text-decoration: none;">}}</ins> fähig sind.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein Prozessor hat mehrere Funktionseinheiten (bei [[x86-Prozessor]]en erstmals seit dem [[Intel Pentium#Die Pentium-1-Familie|Intel Pentium P54]]), u.&nbsp;a. [[arithmetisch-logische Einheit]] (ALU), [[Gleitkommaeinheit]] (FPU), Lade-und-Speicher-Einheit und spezielle (Gleitkomma-)Vektoreinheiten. Bei superskalaren Prozessoren ermöglichen sie, [[Befehlsparallelität]] auszunutzen und damit die Ausführungsgeschwindigkeit zu erhöhen: Während ein vorhergehender Befehl eine Funktionseinheit noch belegt, stehen die freien Funktionseinheiten bereits dem nachfolgenden Befehl zur Verfügung. Wegen [[Datenabhängigkeit]]en zwischen den Befehlen, oder wenn sie dieselbe Funktionseinheit benötigen, ist die parallele Ausführung aber nicht immer möglich. Oft könnten Befehle zwar parallel ausgeführt werden, stehen aber nicht direkt hintereinander im Programmcode; ein Prozessor ohne <del style="font-weight: bold; text-decoration: none;">Out</del>-of-<del style="font-weight: bold; text-decoration: none;">Order-Execution</del> hält sich streng an die Ausführungsreihenfolge, die im Programm vorgegeben ist, und kann sie dann nicht parallel ausführen.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein Prozessor hat mehrere Funktionseinheiten (bei [[x86-Prozessor]]en erstmals seit dem [[Intel Pentium#Die Pentium-1-Familie|Intel Pentium P54]]), u.&nbsp;a. [[arithmetisch-logische Einheit]] (ALU), [[Gleitkommaeinheit]] (FPU), Lade-und-Speicher-Einheit und spezielle (Gleitkomma-)Vektoreinheiten. Bei superskalaren Prozessoren ermöglichen sie, [[Befehlsparallelität]] auszunutzen und damit die Ausführungsgeschwindigkeit zu erhöhen: Während ein vorhergehender Befehl eine Funktionseinheit noch belegt, stehen die freien Funktionseinheiten bereits dem nachfolgenden Befehl zur Verfügung. Wegen [[Datenabhängigkeit]]en zwischen den Befehlen, oder wenn sie dieselbe Funktionseinheit benötigen, ist die parallele Ausführung aber nicht immer möglich. Oft könnten Befehle zwar parallel ausgeführt werden, stehen aber nicht direkt hintereinander im Programmcode; ein Prozessor ohne <ins style="font-weight: bold; text-decoration: none;">{{lang|en|''out</ins>-of-<ins style="font-weight: bold; text-decoration: none;">order execution''}}</ins> hält sich streng an die Ausführungsreihenfolge, die im Programm vorgegeben ist, und kann sie dann nicht parallel ausführen.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Eine Umordnung der Befehle im Programm per Hand oder durch den Compiler kann auf einem <del style="font-weight: bold; text-decoration: none;">In</del>-<del style="font-weight: bold; text-decoration: none;">Order</del>-Prozessor zwar zu besseren Ergebnissen führen, ist aber im Allgemeinen nicht optimal, weil Einflüsse während der Laufzeit nicht oder kaum berücksichtigt werden können. Insbesondere ist die Ausführungszeit von Speicherzugriffen nicht vorhersagbar. Diese hängt davon ab, ob der [[Cache]] die geforderten Daten oder der Übersetzungspuffer ([[Translation Lookaside Buffer|TLB]]) die geforderte Seitenübersetzung liefern kann. Das kann man meist nicht oder nur schwer zur [[Kompilierzeit]] voraussagen.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Eine Umordnung der Befehle im Programm per Hand oder durch den Compiler kann auf einem <ins style="font-weight: bold; text-decoration: none;">in</ins>-<ins style="font-weight: bold; text-decoration: none;">order</ins>-Prozessor zwar zu besseren Ergebnissen führen, ist aber im Allgemeinen nicht optimal, weil Einflüsse während der Laufzeit nicht oder kaum berücksichtigt werden können. Insbesondere ist die Ausführungszeit von Speicherzugriffen nicht vorhersagbar. Diese hängt davon ab, ob der [[Cache]] die geforderten Daten oder der Übersetzungspuffer ([[Translation Lookaside Buffer|TLB]]) die geforderte Seitenübersetzung liefern kann. Das kann man meist nicht oder nur schwer zur [[Kompilierzeit]] voraussagen.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein dynamisches Verfahren zum Umordnen der Befehle, wie die <del style="font-weight: bold; text-decoration: none;">Out</del>-of-<del style="font-weight: bold; text-decoration: none;">Order</del>-<del style="font-weight: bold; text-decoration: none;">Execution</del>-Ausführung, kann zur Ausführungszeit entsprechend reagieren und so mehr Befehle parallel ausführen und damit die Bearbeitung beschleunigen.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein dynamisches Verfahren zum Umordnen der Befehle, wie die <ins style="font-weight: bold; text-decoration: none;">out</ins>-of-<ins style="font-weight: bold; text-decoration: none;">order</ins>-<ins style="font-weight: bold; text-decoration: none;">execution</ins>-Ausführung, kann zur Ausführungszeit entsprechend reagieren und so mehr Befehle parallel ausführen und damit die Bearbeitung beschleunigen.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Funktionsprinzip ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Funktionsprinzip ==</div></td>
</tr>
<tr>
<td colspan="2" class="diff-lineno">Zeile 30:</td>
<td colspan="2" class="diff-lineno">Zeile 30:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Implementiert wird meist [[Scoreboarding]] oder der [[Tomasulo-Algorithmus]].</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Implementiert wird meist [[Scoreboarding]] oder der [[Tomasulo-Algorithmus]].</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Beim Scoreboarding werden belegte Ressourcen auf einem zentralen [[Scoreboard]] markiert und nach ihrer Verwendung wieder freigegeben.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Beim Scoreboarding werden belegte Ressourcen auf einem zentralen [[Scoreboard]] markiert und nach ihrer Verwendung wieder freigegeben.</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Der Tomasulo-Algorithmus implementiert [[dynamisches Scheduling]]. So werden mehrere Befehle gleichzeitig ausgeführt, solange die Operanden unabhängig sind. Verhindert werden <del style="font-weight: bold; text-decoration: none;">Read</del>-<del style="font-weight: bold; text-decoration: none;">After</del>-<del style="font-weight: bold; text-decoration: none;">Write</del>-[[Pipeline-Hazard|<del style="font-weight: bold; text-decoration: none;">Hazards</del>]], indem der Befehl verzögert wird, und <del style="font-weight: bold; text-decoration: none;">Write</del>-<del style="font-weight: bold; text-decoration: none;">After</del>-<del style="font-weight: bold; text-decoration: none;">Read</del>-<del style="font-weight: bold; text-decoration: none;">Hazards</del>, indem ein neuer Wert zwischengespeichert wird. Zur Reduzierung der Datenabhängigkeiten wird zusätzlich [[Registerumbenennung]] verwendet.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Der Tomasulo-Algorithmus implementiert [[dynamisches Scheduling]]. So werden mehrere Befehle gleichzeitig ausgeführt, solange die Operanden unabhängig sind. Verhindert werden <ins style="font-weight: bold; text-decoration: none;">''read</ins>-<ins style="font-weight: bold; text-decoration: none;">after</ins>-<ins style="font-weight: bold; text-decoration: none;">write</ins>-[[Pipeline-Hazard|<ins style="font-weight: bold; text-decoration: none;">hazards</ins>]]<ins style="font-weight: bold; text-decoration: none;">''</ins>, indem der Befehl verzögert wird, und <ins style="font-weight: bold; text-decoration: none;">''write</ins>-<ins style="font-weight: bold; text-decoration: none;">after</ins>-<ins style="font-weight: bold; text-decoration: none;">read</ins>-<ins style="font-weight: bold; text-decoration: none;">hazards''</ins>, indem ein neuer Wert zwischengespeichert wird. Zur Reduzierung der Datenabhängigkeiten wird zusätzlich [[Registerumbenennung]] verwendet.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Der erste [[X86-Prozessor|x86]]-Prozessor mit <del style="font-weight: bold; text-decoration: none;">Out</del>-of-order execution war der<del style="font-weight: bold; text-decoration: none;"> NexGen's</del> [[NexGen#Nx686|Nx686]]. Fast alle modernen [[X86-Prozessor|x86]]-Prozessoren ab dem [[Intel Pentium Pro]] bzw. [[AMD K5]] können Befehle {{lang|en|out-of-order}} ausführen. Bekannte Ausnahmen sind die [[IDT WinChip|IDT-WinChip]]-, [[VIA C3|VIA-C3]]- und [[VIA C7|-C7]]-Serien, die von [[Centaur Technology]] entwickelt wurden, und die [[Intel Atom|Intel-Atom]]-Serie bis einschließlich Cedar Trail.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Der erste [[X86-Prozessor|x86]]-Prozessor mit <ins style="font-weight: bold; text-decoration: none;">{{lang|en|''out</ins>-of-order execution<ins style="font-weight: bold; text-decoration: none;">''}}</ins> war der [[NexGen#Nx686|Nx686]]. Fast alle modernen [[X86-Prozessor|x86]]-Prozessoren ab dem [[Intel Pentium Pro]] bzw. [[AMD K5]] können Befehle {{lang|en|<ins style="font-weight: bold; text-decoration: none;">''</ins>out-of-order<ins style="font-weight: bold; text-decoration: none;">''</ins>}} ausführen. Bekannte Ausnahmen sind die [[IDT WinChip|IDT-WinChip]]-, [[VIA C3|VIA-C3]]- und [[VIA C7|-C7]]-Serien, die von [[Centaur Technology]] entwickelt wurden, und die [[Intel Atom|Intel-Atom]]-Serie bis einschließlich Cedar Trail.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
</tr>
</table>Winkekatzehttps://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=252882873&oldid=prev78.48.6.45: K.2025-02-01T09:17:20Z<p>K.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 1. Februar 2025, 11:17 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 1:</td>
<td colspan="2" class="diff-lineno">Zeile 1:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{lang|en|'''Out-of-order execution'''}} ({{enS}} für etwa ''Ausführung in anderer Reihenfolge [als im Programmcode]'') bezeichnet die Möglichkeit, Maschinenbefehle in den Ausführungseinheiten eines (meist [[Superskalarität|superskalaren]]) [[Prozessor]]s in einer anderen Reihenfolge auszuführen als sie im [[Programmcode]] stehen, ohne allerdings das Ergebnis zu verändern. Dadurch können mehr Befehle parallel ausgeführt werden, da die Recheneinheiten des Prozessors besser ausgelastet werden. Das Gegenteil von {{lang|en|out-of-order execution}} ist {{lang|en|''[[in-order execution]]''}}, bei der die Befehle strikt nach Programmreihenfolge abgearbeitet werden, wie etwa beim [[Von-Neumann-Zyklus]]. Weil das Ergebnis der Out-of-Order-Ausführung das gleiche sein muss wie bei Ausführung in Programmreihenfolge, erhöht Out-of-Order-Execution die Geschwindigkeit nur bei Befehlsfolgen, bei denen ein nachfolgender Befehl nicht vom Ergebnis des vorherigen Befehls abhängt (sondern nur von Befehlen, die „weit genug entfernt“ zuvor ausgeführt wurden). </div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>{{lang|en|'''Out-of-order execution'''}} ({{enS}} für etwa ''Ausführung in anderer Reihenfolge [als im Programmcode]'') bezeichnet die Möglichkeit, Maschinenbefehle in den Ausführungseinheiten eines (meist [[Superskalarität|superskalaren]]) [[Prozessor]]s in einer anderen Reihenfolge auszuführen als sie im [[Programmcode]] stehen, ohne allerdings das Ergebnis zu verändern. Dadurch können mehr Befehle parallel ausgeführt werden, da die Recheneinheiten des Prozessors besser ausgelastet werden. Das Gegenteil von {{lang|en|out-of-order execution}} ist {{lang|en|''[[in-order execution]]''}}, bei der die Befehle strikt nach Programmreihenfolge abgearbeitet werden, wie etwa beim [[Von-Neumann-Zyklus]]. Weil das Ergebnis der Out-of-Order-Ausführung das gleiche sein muss wie bei Ausführung in Programmreihenfolge, erhöht Out-of-Order-Execution die Geschwindigkeit nur bei Befehlsfolgen, bei denen ein nachfolgender Befehl nicht vom Ergebnis des vorherigen Befehls abhängt (sondern nur von Befehlen, die „weit genug entfernt“ zuvor ausgeführt wurden). </div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die schwerwiegenden Sicherheitslücken [[Spectre (Sicherheitslücke)|Spectre]] und [[Meltdown (Sicherheitslücke)|Meltdown]] können gegen Prozessoren eingesetzt werden, die zu ''Out-of-order execution'' fähig sind.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die schwerwiegenden Sicherheitslücken [[Spectre (Sicherheitslücke)|Spectre]] und [[Meltdown (Sicherheitslücke)|Meltdown]] können<ins style="font-weight: bold; text-decoration: none;"> nur</ins> gegen Prozessoren eingesetzt werden, die zu ''Out-of-order execution'' fähig sind.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
</tr>
</table>78.48.6.45https://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=252882843&oldid=prev78.48.6.45: Siehe auch in den Text eingearbeitet.2025-02-01T09:16:56Z<p>Siehe auch in den Text eingearbeitet.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 1. Februar 2025, 11:16 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 1:</td>
<td colspan="2" class="diff-lineno">Zeile 1:</td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>{{lang|en|'''Out-of-order execution'''}} ({{enS}} für etwa ''Ausführung in anderer Reihenfolge [als im Programmcode]'') bezeichnet die Möglichkeit, Maschinenbefehle in den Ausführungseinheiten eines (meist [[Superskalarität|superskalaren]]) [[Prozessor]]s in einer anderen Reihenfolge auszuführen als sie im [[Programmcode]] stehen, ohne allerdings das Ergebnis zu verändern. Dadurch können mehr Befehle parallel ausgeführt werden, da die Recheneinheiten des Prozessors besser ausgelastet werden. Das Gegenteil von {{lang|en|out-of-order execution}} ist {{lang|en|''[[in-order execution]]''}}, bei der die Befehle strikt nach Programmreihenfolge abgearbeitet werden, wie etwa beim [[Von-Neumann-Zyklus]]. Weil das Ergebnis der Out-of-Order-Ausführung das gleiche sein muss wie bei Ausführung in Programmreihenfolge, erhöht Out-of-Order-Execution die Geschwindigkeit nur bei Befehlsfolgen, bei denen ein nachfolgender Befehl nicht vom Ergebnis des vorherigen Befehls abhängt (sondern nur von Befehlen, die „weit genug entfernt“ zuvor ausgeführt wurden).</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>{{lang|en|'''Out-of-order execution'''}} ({{enS}} für etwa ''Ausführung in anderer Reihenfolge [als im Programmcode]'') bezeichnet die Möglichkeit, Maschinenbefehle in den Ausführungseinheiten eines (meist [[Superskalarität|superskalaren]]) [[Prozessor]]s in einer anderen Reihenfolge auszuführen als sie im [[Programmcode]] stehen, ohne allerdings das Ergebnis zu verändern. Dadurch können mehr Befehle parallel ausgeführt werden, da die Recheneinheiten des Prozessors besser ausgelastet werden. Das Gegenteil von {{lang|en|out-of-order execution}} ist {{lang|en|''[[in-order execution]]''}}, bei der die Befehle strikt nach Programmreihenfolge abgearbeitet werden, wie etwa beim [[Von-Neumann-Zyklus]]. Weil das Ergebnis der Out-of-Order-Ausführung das gleiche sein muss wie bei Ausführung in Programmreihenfolge, erhöht Out-of-Order-Execution die Geschwindigkeit nur bei Befehlsfolgen, bei denen ein nachfolgender Befehl nicht vom Ergebnis des vorherigen Befehls abhängt (sondern nur von Befehlen, die „weit genug entfernt“ zuvor ausgeführt wurden).<ins style="font-weight: bold; text-decoration: none;"> </ins></div></td>
</tr>
<tr>
<td colspan="2" class="diff-empty diff-side-deleted"></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td colspan="2" class="diff-empty diff-side-deleted"></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die schwerwiegenden Sicherheitslücken [[Spectre (Sicherheitslücke)|Spectre]] und [[Meltdown (Sicherheitslücke)|Meltdown]] können gegen Prozessoren eingesetzt werden, die zu ''Out-of-order execution'' fähig sind.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
</tr>
<tr>
<td colspan="2" class="diff-lineno">Zeile 34:</td>
<td colspan="2" class="diff-lineno">Zeile 36:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [[Hardwareseitiges Multithreading]]</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [[Hardwareseitiges Multithreading]]</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* [[Spectre (Sicherheitslücke)]] </div></td>
<td colspan="2" class="diff-empty diff-side-added"></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* [[Meltdown (Sicherheitslücke)]]</div></td>
<td colspan="2" class="diff-empty diff-side-added"></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Literatur ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Literatur ==</div></td>
</tr>
</table>78.48.6.45https://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=251408430&oldid=prevY2kbug: /* Motivation */ in Klammern ist es klar, dass das eine Anmerkung ist... Die x86-Architektur ist was anderes als x86-Prozessoren. Der Architektur ist es eigentlich egal, in wie viele Einheiten das aufgespittet (oder nicht) ist.2024-12-20T10:41:07Z<p><span class="autocomment">Motivation: </span> in Klammern ist es klar, dass das eine Anmerkung ist... Die x86-Architektur ist was anderes als x86-Prozessoren. Der Architektur ist es eigentlich egal, in wie viele Einheiten das aufgespittet (oder nicht) ist.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 20. Dezember 2024, 12:41 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 2:</td>
<td colspan="2" class="diff-lineno">Zeile 2:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein Prozessor hat mehrere Funktionseinheiten<del style="font-weight: bold; text-decoration: none;">,</del> (<del style="font-weight: bold; text-decoration: none;">Anmerkung: Bei der</del> x86-<del style="font-weight: bold; text-decoration: none;">Befehlssatzarchitektur</del> erstmals seit dem [[Intel Pentium#Die Pentium-1-Familie|Intel Pentium P54]]) u.&nbsp;a. [[arithmetisch-logische Einheit]] (ALU), [[Gleitkommaeinheit]] (FPU), Lade-und-Speicher-Einheit und spezielle (Gleitkomma-)Vektoreinheiten. Bei superskalaren Prozessoren ermöglichen sie, [[Befehlsparallelität]] auszunutzen und damit die Ausführungsgeschwindigkeit zu erhöhen: Während ein vorhergehender Befehl eine Funktionseinheit noch belegt, stehen die freien Funktionseinheiten bereits dem nachfolgenden Befehl zur Verfügung. Wegen [[Datenabhängigkeit]]en zwischen den Befehlen, oder wenn sie dieselbe Funktionseinheit benötigen, ist die parallele Ausführung aber nicht immer möglich. Oft könnten Befehle zwar parallel ausgeführt werden, stehen aber nicht direkt hintereinander im Programmcode; ein Prozessor ohne Out-of-Order-Execution hält sich streng an die Ausführungsreihenfolge, die im Programm vorgegeben ist, und kann sie dann nicht parallel ausführen.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein Prozessor hat mehrere Funktionseinheiten (<ins style="font-weight: bold; text-decoration: none;">bei</ins> <ins style="font-weight: bold; text-decoration: none;">[[</ins>x86-<ins style="font-weight: bold; text-decoration: none;">Prozessor]]en</ins> erstmals seit dem [[Intel Pentium#Die Pentium-1-Familie|Intel Pentium P54]])<ins style="font-weight: bold; text-decoration: none;">,</ins> u.&nbsp;a. [[arithmetisch-logische Einheit]] (ALU), [[Gleitkommaeinheit]] (FPU), Lade-und-Speicher-Einheit und spezielle (Gleitkomma-)Vektoreinheiten. Bei superskalaren Prozessoren ermöglichen sie, [[Befehlsparallelität]] auszunutzen und damit die Ausführungsgeschwindigkeit zu erhöhen: Während ein vorhergehender Befehl eine Funktionseinheit noch belegt, stehen die freien Funktionseinheiten bereits dem nachfolgenden Befehl zur Verfügung. Wegen [[Datenabhängigkeit]]en zwischen den Befehlen, oder wenn sie dieselbe Funktionseinheit benötigen, ist die parallele Ausführung aber nicht immer möglich. Oft könnten Befehle zwar parallel ausgeführt werden, stehen aber nicht direkt hintereinander im Programmcode; ein Prozessor ohne Out-of-Order-Execution hält sich streng an die Ausführungsreihenfolge, die im Programm vorgegeben ist, und kann sie dann nicht parallel ausführen.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Eine Umordnung der Befehle im Programm per Hand oder durch den Compiler kann auf einem In-Order-Prozessor zwar zu besseren Ergebnissen führen, ist aber im Allgemeinen nicht optimal, weil Einflüsse während der Laufzeit nicht oder kaum berücksichtigt werden können. Insbesondere ist die Ausführungszeit von Speicherzugriffen nicht vorhersagbar. Diese hängt davon ab, ob der [[Cache]] die geforderten Daten oder der Übersetzungspuffer ([[Translation Lookaside Buffer|TLB]]) die geforderte Seitenübersetzung liefern kann. Das kann man meist nicht oder nur schwer zur [[Kompilierzeit]] voraussagen.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Eine Umordnung der Befehle im Programm per Hand oder durch den Compiler kann auf einem In-Order-Prozessor zwar zu besseren Ergebnissen führen, ist aber im Allgemeinen nicht optimal, weil Einflüsse während der Laufzeit nicht oder kaum berücksichtigt werden können. Insbesondere ist die Ausführungszeit von Speicherzugriffen nicht vorhersagbar. Diese hängt davon ab, ob der [[Cache]] die geforderten Daten oder der Übersetzungspuffer ([[Translation Lookaside Buffer|TLB]]) die geforderte Seitenübersetzung liefern kann. Das kann man meist nicht oder nur schwer zur [[Kompilierzeit]] voraussagen.</div></td>
</tr>
</table>Y2kbughttps://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=251407673&oldid=prevWikimagnesit: Ausdruck formaler gemacht2024-12-20T10:00:56Z<p>Ausdruck formaler gemacht</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 20. Dezember 2024, 12:00 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 2:</td>
<td colspan="2" class="diff-lineno">Zeile 2:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein Prozessor hat mehrere Funktionseinheiten, (Anmerkung: <del style="font-weight: bold; text-decoration: none;">In</del> der x86<del style="font-weight: bold; text-decoration: none;"> Welt</del> erstmals seit dem [[Intel Pentium#Die Pentium-1-Familie|Intel Pentium P54]]) u.&nbsp;a. [[arithmetisch-logische Einheit]] (ALU), [[Gleitkommaeinheit]] (FPU), Lade-und-Speicher-Einheit und spezielle (Gleitkomma-)Vektoreinheiten. Bei superskalaren Prozessoren ermöglichen sie, [[Befehlsparallelität]] auszunutzen und damit die Ausführungsgeschwindigkeit zu erhöhen: Während ein vorhergehender Befehl eine Funktionseinheit noch belegt, stehen die freien Funktionseinheiten bereits dem nachfolgenden Befehl zur Verfügung. Wegen [[Datenabhängigkeit]]en zwischen den Befehlen, oder wenn sie dieselbe Funktionseinheit benötigen, ist die parallele Ausführung aber nicht immer möglich. Oft könnten Befehle zwar parallel ausgeführt werden, stehen aber nicht direkt hintereinander im Programmcode; ein Prozessor ohne Out-of-Order-Execution hält sich streng an die Ausführungsreihenfolge, die im Programm vorgegeben ist, und kann sie dann nicht parallel ausführen.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein Prozessor hat mehrere Funktionseinheiten, (Anmerkung: <ins style="font-weight: bold; text-decoration: none;">Bei</ins> der x86<ins style="font-weight: bold; text-decoration: none;">-Befehlssatzarchitektur</ins> erstmals seit dem [[Intel Pentium#Die Pentium-1-Familie|Intel Pentium P54]]) u.&nbsp;a. [[arithmetisch-logische Einheit]] (ALU), [[Gleitkommaeinheit]] (FPU), Lade-und-Speicher-Einheit und spezielle (Gleitkomma-)Vektoreinheiten. Bei superskalaren Prozessoren ermöglichen sie, [[Befehlsparallelität]] auszunutzen und damit die Ausführungsgeschwindigkeit zu erhöhen: Während ein vorhergehender Befehl eine Funktionseinheit noch belegt, stehen die freien Funktionseinheiten bereits dem nachfolgenden Befehl zur Verfügung. Wegen [[Datenabhängigkeit]]en zwischen den Befehlen, oder wenn sie dieselbe Funktionseinheit benötigen, ist die parallele Ausführung aber nicht immer möglich. Oft könnten Befehle zwar parallel ausgeführt werden, stehen aber nicht direkt hintereinander im Programmcode; ein Prozessor ohne Out-of-Order-Execution hält sich streng an die Ausführungsreihenfolge, die im Programm vorgegeben ist, und kann sie dann nicht parallel ausführen.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Eine Umordnung der Befehle im Programm per Hand oder durch den Compiler kann auf einem In-Order-Prozessor zwar zu besseren Ergebnissen führen, ist aber im Allgemeinen nicht optimal, weil Einflüsse während der Laufzeit nicht oder kaum berücksichtigt werden können. Insbesondere ist die Ausführungszeit von Speicherzugriffen nicht vorhersagbar. Diese hängt davon ab, ob der [[Cache]] die geforderten Daten oder der Übersetzungspuffer ([[Translation Lookaside Buffer|TLB]]) die geforderte Seitenübersetzung liefern kann. Das kann man meist nicht oder nur schwer zur [[Kompilierzeit]] voraussagen.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Eine Umordnung der Befehle im Programm per Hand oder durch den Compiler kann auf einem In-Order-Prozessor zwar zu besseren Ergebnissen führen, ist aber im Allgemeinen nicht optimal, weil Einflüsse während der Laufzeit nicht oder kaum berücksichtigt werden können. Insbesondere ist die Ausführungszeit von Speicherzugriffen nicht vorhersagbar. Diese hängt davon ab, ob der [[Cache]] die geforderten Daten oder der Übersetzungspuffer ([[Translation Lookaside Buffer|TLB]]) die geforderte Seitenübersetzung liefern kann. Das kann man meist nicht oder nur schwer zur [[Kompilierzeit]] voraussagen.</div></td>
</tr>
</table>Wikimagnesithttps://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=235940389&oldid=prev84.140.197.199: /* Implementierung */ NexGen's Nx686 war erste Out-of-order CPU in der x86 Welt.2023-07-30T01:37:02Z<p><span class="autocomment">Implementierung: </span> NexGen's Nx686 war erste Out-of-order CPU in der x86 Welt.</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 30. Juli 2023, 03:37 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 30:</td>
<td colspan="2" class="diff-lineno">Zeile 30:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Tomasulo-Algorithmus implementiert [[dynamisches Scheduling]]. So werden mehrere Befehle gleichzeitig ausgeführt, solange die Operanden unabhängig sind. Verhindert werden Read-After-Write-[[Pipeline-Hazard|Hazards]], indem der Befehl verzögert wird, und Write-After-Read-Hazards, indem ein neuer Wert zwischengespeichert wird. Zur Reduzierung der Datenabhängigkeiten wird zusätzlich [[Registerumbenennung]] verwendet.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Tomasulo-Algorithmus implementiert [[dynamisches Scheduling]]. So werden mehrere Befehle gleichzeitig ausgeführt, solange die Operanden unabhängig sind. Verhindert werden Read-After-Write-[[Pipeline-Hazard|Hazards]], indem der Befehl verzögert wird, und Write-After-Read-Hazards, indem ein neuer Wert zwischengespeichert wird. Zur Reduzierung der Datenabhängigkeiten wird zusätzlich [[Registerumbenennung]] verwendet.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Fast alle modernen [[X86-Prozessor|x86]]-Prozessoren ab dem [[Intel Pentium Pro]] bzw. [[AMD K5]] können Befehle {{lang|en|out-of-order}} ausführen. Bekannte Ausnahmen sind die [[IDT WinChip|IDT-WinChip]]-, [[VIA C3|VIA-C3]]- und [[VIA C7|-C7]]-Serien, die von [[Centaur Technology]] entwickelt wurden, und die [[Intel Atom|Intel-Atom]]-Serie bis einschließlich Cedar Trail.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">Der erste [[X86-Prozessor|x86]]-Prozessor mit Out-of-order execution war der NexGen's [[NexGen#Nx686|Nx686]]. </ins>Fast alle modernen [[X86-Prozessor|x86]]-Prozessoren ab dem [[Intel Pentium Pro]] bzw. [[AMD K5]] können Befehle {{lang|en|out-of-order}} ausführen. Bekannte Ausnahmen sind die [[IDT WinChip|IDT-WinChip]]-, [[VIA C3|VIA-C3]]- und [[VIA C7|-C7]]-Serien, die von [[Centaur Technology]] entwickelt wurden, und die [[Intel Atom|Intel-Atom]]-Serie bis einschließlich Cedar Trail.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
</tr>
</table>84.140.197.199https://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=235939504&oldid=prev84.140.197.199: /* Motivation */ Hinweis bezüglich erster superskalarer x86 CPU2023-07-30T01:27:58Z<p><span class="autocomment">Motivation: </span> Hinweis bezüglich erster superskalarer x86 CPU</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 30. Juli 2023, 03:27 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 2:</td>
<td colspan="2" class="diff-lineno">Zeile 2:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Motivation ==</div></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein Prozessor hat mehrere Funktionseinheiten, u.&nbsp;a. [[arithmetisch-logische Einheit]] (ALU), [[Gleitkommaeinheit]] (FPU), Lade-und-Speicher-Einheit und spezielle (Gleitkomma-)Vektoreinheiten. Bei superskalaren Prozessoren ermöglichen sie, [[Befehlsparallelität]] auszunutzen und damit die Ausführungsgeschwindigkeit zu erhöhen: Während ein vorhergehender Befehl eine Funktionseinheit noch belegt, stehen die freien Funktionseinheiten bereits dem nachfolgenden Befehl zur Verfügung. Wegen [[Datenabhängigkeit]]en zwischen den Befehlen, oder wenn sie dieselbe Funktionseinheit benötigen, ist die parallele Ausführung aber nicht immer möglich. Oft könnten Befehle zwar parallel ausgeführt werden, stehen aber nicht direkt hintereinander im Programmcode; ein Prozessor ohne Out-of-Order-Execution hält sich streng an die Ausführungsreihenfolge, die im Programm vorgegeben ist, und kann sie dann nicht parallel ausführen.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein Prozessor hat mehrere Funktionseinheiten,<ins style="font-weight: bold; text-decoration: none;"> (Anmerkung: In der x86 Welt erstmals seit dem [[Intel Pentium#Die Pentium-1-Familie|Intel Pentium P54]]) </ins> u.&nbsp;a. [[arithmetisch-logische Einheit]] (ALU), [[Gleitkommaeinheit]] (FPU), Lade-und-Speicher-Einheit und spezielle (Gleitkomma-)Vektoreinheiten. Bei superskalaren Prozessoren ermöglichen sie, [[Befehlsparallelität]] auszunutzen und damit die Ausführungsgeschwindigkeit zu erhöhen: Während ein vorhergehender Befehl eine Funktionseinheit noch belegt, stehen die freien Funktionseinheiten bereits dem nachfolgenden Befehl zur Verfügung. Wegen [[Datenabhängigkeit]]en zwischen den Befehlen, oder wenn sie dieselbe Funktionseinheit benötigen, ist die parallele Ausführung aber nicht immer möglich. Oft könnten Befehle zwar parallel ausgeführt werden, stehen aber nicht direkt hintereinander im Programmcode; ein Prozessor ohne Out-of-Order-Execution hält sich streng an die Ausführungsreihenfolge, die im Programm vorgegeben ist, und kann sie dann nicht parallel ausführen.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Eine Umordnung der Befehle im Programm per Hand oder durch den Compiler kann auf einem In-Order-Prozessor zwar zu besseren Ergebnissen führen, ist aber im Allgemeinen nicht optimal, weil Einflüsse während der Laufzeit nicht oder kaum berücksichtigt werden können. Insbesondere ist die Ausführungszeit von Speicherzugriffen nicht vorhersagbar. Diese hängt davon ab, ob der [[Cache]] die geforderten Daten oder der Übersetzungspuffer ([[Translation Lookaside Buffer|TLB]]) die geforderte Seitenübersetzung liefern kann. Das kann man meist nicht oder nur schwer zur [[Kompilierzeit]] voraussagen.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Eine Umordnung der Befehle im Programm per Hand oder durch den Compiler kann auf einem In-Order-Prozessor zwar zu besseren Ergebnissen führen, ist aber im Allgemeinen nicht optimal, weil Einflüsse während der Laufzeit nicht oder kaum berücksichtigt werden können. Insbesondere ist die Ausführungszeit von Speicherzugriffen nicht vorhersagbar. Diese hängt davon ab, ob der [[Cache]] die geforderten Daten oder der Übersetzungspuffer ([[Translation Lookaside Buffer|TLB]]) die geforderte Seitenübersetzung liefern kann. Das kann man meist nicht oder nur schwer zur [[Kompilierzeit]] voraussagen.</div></td>
</tr>
</table>84.140.197.199https://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=194067935&oldid=prevY2kbug: /* Implementierung */ 3x und2019-11-15T12:23:53Z<p><span class="autocomment">Implementierung: </span> 3x und</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. November 2019, 14:23 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 30:</td>
<td colspan="2" class="diff-lineno">Zeile 30:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Tomasulo-Algorithmus implementiert [[dynamisches Scheduling]]. So werden mehrere Befehle gleichzeitig ausgeführt, solange die Operanden unabhängig sind. Verhindert werden Read-After-Write-[[Pipeline-Hazard|Hazards]], indem der Befehl verzögert wird, und Write-After-Read-Hazards, indem ein neuer Wert zwischengespeichert wird. Zur Reduzierung der Datenabhängigkeiten wird zusätzlich [[Registerumbenennung]] verwendet.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Tomasulo-Algorithmus implementiert [[dynamisches Scheduling]]. So werden mehrere Befehle gleichzeitig ausgeführt, solange die Operanden unabhängig sind. Verhindert werden Read-After-Write-[[Pipeline-Hazard|Hazards]], indem der Befehl verzögert wird, und Write-After-Read-Hazards, indem ein neuer Wert zwischengespeichert wird. Zur Reduzierung der Datenabhängigkeiten wird zusätzlich [[Registerumbenennung]] verwendet.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Fast alle modernen [[X86-Prozessor|x86]]-Prozessoren ab dem [[Intel Pentium Pro]] bzw. [[AMD K5]] können Befehle {{lang|en|out-of-order}} ausführen. Bekannte Ausnahmen sind die [[IDT WinChip|IDT-WinChip]]-<del style="font-weight: bold; text-decoration: none;"> und</del> [[VIA C3|VIA-C3]]- und [[VIA C7|-C7]]-Serien, die von [[Centaur Technology]] entwickelt wurden, und die [[Intel Atom|Intel-Atom]]-Serie bis einschließlich Cedar Trail.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Fast alle modernen [[X86-Prozessor|x86]]-Prozessoren ab dem [[Intel Pentium Pro]] bzw. [[AMD K5]] können Befehle {{lang|en|out-of-order}} ausführen. Bekannte Ausnahmen sind die [[IDT WinChip|IDT-WinChip]]-<ins style="font-weight: bold; text-decoration: none;">,</ins> [[VIA C3|VIA-C3]]- und [[VIA C7|-C7]]-Serien, die von [[Centaur Technology]] entwickelt wurden, und die [[Intel Atom|Intel-Atom]]-Serie bis einschließlich Cedar Trail.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
</tr>
</table>Y2kbughttps://de.wikipedia.org/w/index.php?title=Out-of-order_execution&diff=194067924&oldid=prevY2kbug: /* Implementierung */ Form2019-11-15T12:23:21Z<p><span class="autocomment">Implementierung: </span> Form</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="de">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. November 2019, 14:23 Uhr</td>
</tr><tr>
<td colspan="2" class="diff-lineno">Zeile 30:</td>
<td colspan="2" class="diff-lineno">Zeile 30:</td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Tomasulo-Algorithmus implementiert [[dynamisches Scheduling]]. So werden mehrere Befehle gleichzeitig ausgeführt, solange die Operanden unabhängig sind. Verhindert werden Read-After-Write-[[Pipeline-Hazard|Hazards]], indem der Befehl verzögert wird, und Write-After-Read-Hazards, indem ein neuer Wert zwischengespeichert wird. Zur Reduzierung der Datenabhängigkeiten wird zusätzlich [[Registerumbenennung]] verwendet.</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Tomasulo-Algorithmus implementiert [[dynamisches Scheduling]]. So werden mehrere Befehle gleichzeitig ausgeführt, solange die Operanden unabhängig sind. Verhindert werden Read-After-Write-[[Pipeline-Hazard|Hazards]], indem der Befehl verzögert wird, und Write-After-Read-Hazards, indem ein neuer Wert zwischengespeichert wird. Zur Reduzierung der Datenabhängigkeiten wird zusätzlich [[Registerumbenennung]] verwendet.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker" data-marker="−"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Fast alle modernen [[X86-Prozessor|x86]]-Prozessoren ab dem [[Intel Pentium Pro]] bzw. [[AMD K5]] können Befehle {{lang|en|out-of-order}} ausführen. Bekannte Ausnahmen sind die [[IDT WinChip|IDT-WinChip]]- und [[VIA C3|VIA-C3]]-<del style="font-weight: bold; text-decoration: none;">/</del>[[VIA C7|-C7]]-Serien, die von [[Centaur Technology]] entwickelt wurden, und die [[Intel Atom|Intel-Atom]]-Serie bis einschließlich Cedar Trail.</div></td>
<td class="diff-marker" data-marker="+"></td>
<td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Fast alle modernen [[X86-Prozessor|x86]]-Prozessoren ab dem [[Intel Pentium Pro]] bzw. [[AMD K5]] können Befehle {{lang|en|out-of-order}} ausführen. Bekannte Ausnahmen sind die [[IDT WinChip|IDT-WinChip]]- und [[VIA C3|VIA-C3]]-<ins style="font-weight: bold; text-decoration: none;"> und </ins>[[VIA C7|-C7]]-Serien, die von [[Centaur Technology]] entwickelt wurden, und die [[Intel Atom|Intel-Atom]]-Serie bis einschließlich Cedar Trail.</div></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td>
</tr>
<tr>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
<td class="diff-marker"></td>
<td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Siehe auch ==</div></td>
</tr>
</table>Y2kbug