computer-architecture

___ tag123optimierung ___ Optimierung ist der Akt der Verbesserung einer Methode oder eines Designs. In der Programmierung nimmt die Optimierung normalerweise die Form an, die Geschwindigkeit eines Algorithmus zu erhöhen oder die benötigten Ressourcen zu reduzieren. Eine weitere Bedeutung der Optimierung sind numerische Optimierungsalgorithmen. ___ tag123intel ___ Für Probleme im Zusammenhang mit Intel-Halbleiterchips und -baugruppen, Intel-Architekturmerkmalen und ISA-Erweiterungen sowie Intel-Chips Mikroarchitektur. ___ tag123cpuarchitecture ___ Die Hardware-Mikroarchitektur (x86, x86_64, ARM, ...) einer CPU oder eines Mikrocontrollers. ___ tag123computerarchitektur ___ Die Hardware-Mikroarchitektur (x86, x86_64, ARM, ...) einer CPU oder eines Mikrocontrollers. ___ tag123branchprediction ___ In der Computerarchitektur ist ein Verzweigungsvorhersager eine digitale Schaltung, die versucht zu erraten, auf welche Weise eine Verzweigung (z. B. eine Wenn-Dann-sonst-Struktur) gehen wird, bevor dies sicher bekannt ist. Der Zweck des Verzweigungsprädiktors besteht darin, den Fluss in der Befehlspipeline zu verbessern. Verzweigungsvorhersager spielen eine kritische Rolle beim Erreichen einer hohen effektiven Leistungsfähigkeit in vielen modernen Pipelinemikroprozessorarchitekturen, wie zum Beispiel x86. ___ answer31301510 ___

Das ist eine gute Frage! Ich glaube, die Verwirrung, die es verursacht, ist auf Intels seltsame Benennungsschemata zurückzuführen, die oft die Begriffe in der Wissenschaft überladen. Ich werde versuchen, sowohl Ihre Frage zu beantworten als auch die Verwirrung, die ich in den Kommentaren sehe, zu klären.

Zunächst einmal. Ich stimme zu, dass in der Terminologie der Computerwissenschaften ein Verzweigungszielpuffer nicht gleichbedeutend mit Verzweigungsprädiktor ist. In der Terminologie von Intel ist der Branch Target Buffer (BTB) [in Großbuchstaben] jedoch etwas Spezifisches und enthält sowohl einen Prädiktor als auch einen Verzweigungszielpuffercache (BTBC), der nur eine Tabelle mit Verzweigungsbefehlen und deren Zielen auf einem genommenen Ergebnis darstellt. Diese BTBC verstehen die meisten Leute als Verzweigungszielpuffer [Kleinschreibung]. Also, was ist der Branch Address Calculator (BAC) und warum brauchen wir ihn, wenn wir einen BTB haben?

Sie verstehen also, dass moderne Prozessoren in Pipelines mit mehreren Stufen aufgeteilt sind. Ob dies ein einfacher Pipelineprozessor oder ein außer Betrieb befindlicher Supersclarprozessor ist, die ersten Stufen sind typischerweise holen dann decodieren . In der fetch Stufe haben wir nur die Adresse der aktuellen Anweisung, die im Programmzähler (PC) enthalten ist. Wir verwenden den PC, um Bytes aus dem Speicher zu laden und sie an die Stufe decodieren zu senden. In den meisten Fällen inkrementieren wir den PC, um die nachfolgende (n) Anweisung (en) zu laden, aber in anderen Fällen verarbeiten wir eine Kontrollflussanweisung, die den Inhalt des PC vollständig ändern kann.

Der Zweck des BTB besteht darin, zu erraten, ob die Adresse im PC auf einen Verzweigungsbefehl zeigt, und wenn ja, wie sollte die nächste Adresse im PC lauten? Das ist gut, wir können einen Prädiktor für bedingte Verzweigungen und den BTBC für die nächste Adresse verwenden. Wenn die Vorhersage richtig war, ist das großartig! Wenn die Vorhersage falsch war, was dann? Wenn der BTB die einzige Einheit ist, die wir haben, müssen wir warten, bis der Zweig die Ausgabe / execute Stufe der Pipeline erreicht. Wir müssten die Pipeline spülen und neu beginnen. Aber nicht jede Situation muss so spät gelöst werden. Hier kommt der Branch Address Calculator (BAC) ins Spiel.

Der BTB wird in der Phase fetch der Pipeline verwendet, der BAC befindet sich jedoch in der Stufe decode . Sobald der Befehl, den wir abgerufen haben, entschlüsselt ist, haben wir tatsächlich viel mehr Informationen, die nützlich sein können. Die erste neue Information, die wir kennen, ist: "Ist die Anweisung, die ich tatsächlich einen Zweig abgerufen habe?" In der Abrufphase haben wir keine Ahnung und das BTB kann nur raten, aber in der Dekodierungsstufe wissen wir es sicher. Es ist möglich, dass der BTB eine Verzweigung voraussagt, wenn die Anweisung tatsächlich keine Verzweigung ist; In diesem Fall stoppt der BAC die Abrufeinheit, korrigiert den BTB und führt das erneute Abrufen korrekt aus.

Was ist mit Zweigen wie %code% und %code% ? Diese können bei der Dekodierung validiert werden. Der BAC prüft den BTB, prüft, ob Einträge in der BTBC vorhanden sind, und setzt den Prädiktor so, dass er ihn immer vorhersagt. Für %code% -Verzweigungen kann die BAC nicht bestätigen, ob sie bereits genommen / noch nicht genommen wurden, aber sie kann zumindest die vorhergesagte Adresse validieren und den BTB im Falle einer schlechten Adressenvorhersage korrigieren. Manchmal wird der BTB überhaupt keine Filiale erkennen / vorhersagen. Die BAC muss dies korrigieren und dem BTB neue Informationen über diese Anweisung geben. Da der BAC keinen eigenen bedingten Prädiktor hat, verwendet er einen einfachen Mechanismus (Rückwärtszweige genommen, Vorwärtszweige nicht genommen).

Jemand muss mein Verständnis dieser Hardware-Zähler bestätigen, aber ich glaube, sie meinen Folgendes:

  • %code% wird inkrementiert, wenn der BTB in fetch fehlerhaft ist Job und der BAC in decode kann es beheben.
  • %code% ist inkrementiert, wenn fetch (falsch) entscheidet, den nächsten zu laden Anweisung, bevor der BTB voraussagt, dass er tatsächlich von laden soll der genommene Pfad stattdessen. Dies liegt daran, dass der BTB mehrere Zyklen benötigt und holen diese Zeit verwendet, um spekulativ einen fortlaufenden Block von Befehlen zu laden. Dies kann daran liegen, dass Intel zwei BTBs verwendet, einen schneller und den anderen langsamer, aber genauer. Es dauert mehr Zyklen, um eine bessere Vorhersage zu erhalten.

Dies erklärt, warum der Nachteil der Erkennung einer Fehlvorhersage im BTB 2/3 Zyklen beträgt, während der Nachweis einer Fehlvorhersage im BAC 8 Zyklen beträgt.

    
___ qstnhdr ___ Welche Verzweigungsfehlvorhersage erkennt der Branch Target Buffer? ___ qstntxt ___

Ich betrachte zur Zeit die verschiedenen Teile der CPU-Pipeline, die Verzweigungsfehlvorhersagen erkennen können. Ich habe Folgendes gefunden:

  1. Verzweigungszielpuffer (BPU CLEAR)
  2. Zweigstellenrechner (BA CLEAR)
  3. Jump Execution Unit (nicht sicher, der Signalname hier ??)

Ich weiß, was 2 und 3 erkennen, aber ich verstehe nicht, welche Fehlvorhersage innerhalb des BTB erkannt wird. Die BAC detektiert, wo der BTB fälschlicherweise eine Verzweigung für einen Nicht-Verzweigungsbefehl vorhergesagt hat, wobei der BTB keine Verzweigung erkannt hat, oder der BTB hat die Zieladresse für einen x86-RET-Befehl falsch vorhergesagt. Die Ausführungseinheit wertet die Verzweigung aus und stellt fest, ob sie korrekt war.

Welche Art von Fehlvorhersage wird am Verzweigungszielpuffer erkannt? Was genau wird hier als Fehlvorhersage erkannt?

Der einzige Hinweis, den ich finden konnte, war der in Vol. 3 der Intel Developer Manuals (die zwei BPU CLEAR-Ereigniszähler unten):

  

BPU sagte eine genommene Verzweigung vorher voraus, falsch angenommen, dass es war   nicht genommen.

Dies scheint zu implizieren, dass die Vorhersage nicht "synchron", sondern "asynchron" gemacht wird, daher das "falsch angenommen" ?? /

UPDATE:

Ross, das ist die CPU-Verzweigungsschaltung, aus dem ursprünglichen Intel-Patent (wie für das "Lesen"?):

Ich sehe keine "Branch Prediction Unit" irgendwo? Wäre es vernünftig, dass jemand, der dieses Papier gelesen hat, annehmen würde, dass "BPU" eine faule Art ist, BTB-Schaltung, BTB-Cache, BAC und RSB zusammen zu gruppieren?

Also meine Frage steht immer noch, welche Komponente hebt das BPU CLEAR Signal?

    
___
3
Antworten

"Datenbit" Kapazität vs "Overhead-Bit" Größe?

Ich bin etwas festgefahren, weil ich nichts finden kann, was den "Daten" -Teil des Caches abdeckt, alles, was ich gegoogelt habe, behandelt 99,9% mit der Adressierung des Caches. Die Frage, die mir gestellt wurde, ist so formuliert. %Vor% Ic...
05.07.2012, 19:31
8
Antworten

Warum brauchen wir unterschiedliche CPU-Architektur für Server & Mini / Mainframe & Mixed-Core? [geschlossen]

Ich habe mich nur gefragt, welche anderen CPU-Architekturen außer INTEL & amp; AMD. Also, Liste der CPU-Architekturen auf Wikipedia gefunden. Kategorisiert bemerkenswerte CPU-Architekturen in folgende Kategorien. Integrierte CPU-Archite...
19.04.2010, 12:17
10
Antworten

Können wir einen Computer mit nur Registern als Speicher haben?

Register sind die schnellsten Speicher in einem Computer. Also, wenn wir einen Computer mit nur Registern und nicht einmal Caches erstellen wollen, ist es möglich? Ich denke daran, die Magnetplatten sogar durch Register zu ersetzen, obwohl sie n...
26.09.2010, 16:31
1
Antwort

MIPS - Wie reserviert MIPS Speicher für Arrays im Stack?

Ich bin ziemlich neu in der MIPS-Assembler-Sprache und mache gerade einen Kurs über Computer-Architektur, der einen großen Abschnitt über MIPS-Codierung enthält. Ich habe in der Vergangenheit mehrere andere Programmiersprachen (C, C #, Python) s...
26.10.2013, 22:11
1
Antwort

GPU - Systemspeicherzuordnung

Wie ist der Systemspeicher (RAM) für den GPU-Zugriff zugeordnet? Mir ist klar, wie virtueller Speicher für CPU funktioniert, aber ich bin mir nicht sicher, wie das funktionieren würde, wenn GPU auf GPU-zugeordneten Systemspeicher (Host) zugreift...
06.07.2012, 03:27
2
Antworten

Wortgröße und Datenbus

Ich bin verwirrt über die Definition der Wortgröße . Ich habe gelesen, dass die Wortgröße eines Prozessors seine Datenbusbreite ist. Wie ein 8-Bit-Prozessor hat einen 8 Bit breiten Datenbus. Ich habe kürzlich gelesen, dass die maximale Größe de...
13.07.2012, 14:26
1
Antwort

Welche Verzweigungsfehlvorhersage erkennt der Branch Target Buffer?

Ich betrachte zur Zeit die verschiedenen Teile der CPU-Pipeline, die Verzweigungsfehlvorhersagen erkennen können. Ich habe Folgendes gefunden: Verzweigungszielpuffer (BPU CLEAR) Zweigstellenrechner (BA CLEAR) Jump Execution Unit (nicht s...
07.07.2015, 22:58