-
TECHNISCHER
BEREICH
-
Die vorliegende Erfindung betrifft
Speicher in einem Prozessor. Die vorliegende Erfindung betrifft insbesondere
einen Speicher mit lokalen und globalen Zugangsregionen für Subanweisungen
in einem Langes-Instruktionswort-(VLIW)-Prozessor.
-
TECHNISCHER HINTERGRUND
-
Eine Methode zum Verbessern der Leistung von
Prozessoren ist die parallele Ausführung mehrerer Anweisungen,
so dass die Anweisungsausführungsgeschwindigkeit
die Taktrate übersteigen
kann. Es wurden verschiedene Typen von Parallelprozessoren entwickelt,
einschließlich
Langes-Instruktionswort-(VLIW)-Prozessoren, die mehrere unabhängige Funktionseinheiten
zum parallelen Ausführen
mehrerer Anweisungen verwenden. VLIW-Prozessoren packen mehrere
Vorgänge
in eine sehr lange Anweisung, wobei die mehreren Vorgänge durch
Subanweisungen bestimmt werden, die auf die unabhängigen Funktionseinheiten
angewendet werden. Eine Anweisung hat einen Satz von Feldern, die
jeder Funktionseinheit entsprechen. Typische Bitlängen einer
Subanweisung liegen gewöhnlich
im Bereich von 16 bis 24 Bit pro Funktionseinheit, um eine Anweisungslänge zu erzeugen,
die häufig
im Bereich von 112 bis 168 Bit liegt.
-
Die mehreren Funktionseinheiten werden belegt
gehalten, indem eine Codesequenz mit genügend Vorgängen geführt wird, um Anweisungen plangemäß zu halten.
Ein VLIW-Prozessor
arbeitet häufig mit
einer Technik, die als "Trace
Scheduling" bezeichnet
wird, um die Planungseffizienz durch Abwickeln von Schleifen und
Planen von Code über
Grundfunktionsblöcke
zu bewahren. Mit Trace-Scheduling wird auch die Effizienz verbessert,
indem zugelassen wird, dass Anweisungen über Verzweigungspunkte gehen.
Begrenzungen der VLIW-Verarbeitung sind unter anderem begrenzter
Parallelismus, begrenzte Hardware-Ressourcen sowie eine riesige
Code-Größe. Ein
begrenztes Maß an
Parallelismus steht in Anweisungssequenzen zur Verfügung. Wenn
Schleifen nicht sehr häufig
abgewickelt werden, dann stehen nicht genügend Vorgänge zum Füllen der Anweisungen zur Verfügung. Begrenzte
Hardware-Ressourcen sind ein Problem, nicht nur wegen der Duplizierung
von Funktionseinheiten, sondern, was noch wichtiger ist, aufgrund
einer starken Zunahme der Speichergröße und der Registerdateibandbreite.
Es ist eine große
Zahl von Lese- und Schreibports für den Zugriff auf die Registerdatei
notwendig, was eine Bandbreite erfordert, die sich ohne hohe Kosten
im Hinblick auf die Größe der Registerdatei
und eine Verringerung der Taktfrequenz nur schwer unterstützen lässt. Mit
zunehmender Portzahl nimmt auch die Komplexität des Speichersystems weiter
zu. Um mehrere parallele Speicherzugriffe zuzulassen, wird der Speicher
in mehrere Gruppen mit verschiedenen Adressen unterteilt, um die
Wahrscheinlichkeit zu verringern, dass mehrere Vorgänge in einer
einzelnen Anweisung im Konflikt miteinander stehende Zugriffe haben,
die verursachen, dass der Prozessor stehenbleibt, weil zwischen
den Funktionseinheiten die Synchronität aufrecht erhalten werden
muss.
-
Die Code-Größe ist aus mehreren Gründen ein
Problem. Die Erzeugung von genügend
Operationen in einem unverzweigten Code-Fragment erfordert ein erhebliches
Abwickeln von Schleifen, was den Code noch vergrößert. Auch können Anweisungen,
die nicht voll sind, unbenutzte Subanweisungen beinhalten, was Code-Platz
vergeudet und den Code vergrößert. Ferner
führt die
Zunahme der Größe von Speichern
wie beispielsweise der Registerdatei zu einer Erhöhung der
Zahl der Bits in der Anweisung zum Adressieren von Registern in
der Registerdatei.
-
Eine Registerdatei mit einer großen Zahl
von Registern wird häufig
zum Erhöhen
der Leistung eines VLIW-Prozessors verwendet. Ein VLIW-Prozessor
wird gewöhnlich
als tief Pipeline-verknüpfte
Maschine mit einem "In-Folge"-Ausführungsmodell
implementiert. Um eine hohe Leistung zu erzielen, wird eine große Zahl
von Registern verwendet, so dass die mehreren Funktionseinheiten
so oft möglich
belegt sind.
-
Eine große Registerdatei hat mehrere
Nachteile. Zunächst
nimmt mit dem Wachsen der Zahl der direkt adressierbaren Register
auch proportional die Zahl der Bit zu, die zum Vorgeben der mehreren
Register innerhalb der Anweisung verwendet werden. Für eine Architektur
mit einem reichhaltigen Anweisungssatz, z. B. mit vier Registerspezifizierern,
kostet ein zusätzliches
Bit für
einen Registerspezifizierer effektiv vier Bits pro Subanweisung
(ein Bit pro Registerspezifizierer). Für ein VLIW-Wort mit vier bis acht
Subanweisungen werden sechzehn bis zweiunddreißig Bits für die Anweisungscodierung addiert. Zweitens
belegt eine Registerdatei mit vielen Registern einen großen Bereich.
Drittens kann eine Registerdatei mit vielen Registern kritische
Timing-Pfade erzeugen und somit die Zykluszeit des Prozessors begrenzen.
-
Ein Beispiel für ein Verfahren und eine Vorrichtung
zum Planen von Anweisungen zu mehreren Ausführungseinheiten eines superskalaren
Prozessors ist in der europäischen
Patentanmeldung mit der Veröffentlichungsnummer
0 767 425 A2 mit dem Titel "Register
and instruction controller for superscalar processor" (Jouppi, N.) beschrieben.
Das superskalare Jouppi-System beinhaltet Cache-Speicher, Register
sowie eine Mehrzahl von Ausführungsclustern zum
Ausführen
der Anweisungen. Anweisungen werden über diese mehreren Ausführungscluster
verteilt, so dass die Registerdatei in mehrere kleinere Dateien
partitioniert werden kann, eine für jedes Ausführungscluster
mit nur einem geringen Maß an
Duplizierung zwischen den Dateien. Diese Partitionierung und Verteilung
der Anweisungen erhöht
die Zahl der Anweisungen, die von einem superskalaren Prozessor
gleichzeitig ausgegeben werden können,
ohne die Komplexität
der Verbindungen der Register wesentlich zu erhöhen. Es gibt jedoch Ineffizienzen, wenn
die Verteilung der Anweisungen in Bezug auf die Operandenadressen
nicht perfekt getrennt werden kann, und in diesem Fall lassen sich
Datenübertragungen
zwischen den Partitionen der Registerdatei nicht vermeiden. Ferner
kann das Jouppi-System nicht leicht in einem VLIW-Prozessor eingesetzt
werden.
-
Es besteht Bedarf an einer besseren
Technik und Prozessorarchitektur, damit die Effizienz der Anweisungscodierung
verbessert und gleichzeitig auf einen großen Satz von architektonisch
sichtbaren Registern zugegriffen werden kann.
-
Gemäß der vorliegenden Erfindung
wird ein Prozessor (100) bereitgestellt, der Folgendes
umfasst: eine Mehrzahl von Funktionseinheiten (220, 222);
und eine Registerdatei (216), dadurch gekennzeichnet, dass
die Registerdatei in eine Mehrzahl von Registerdateisegmenten (224)
unterteilt ist, wobei einige aus der Mehrzahl von Registerdateisegmenten mit
einigen aus der Mehrzahl von Funktionseinheiten gekoppelt und assoziiert
sind, wobei die Registerdateisegmente in globale Register und lokale
Register partitioniert sind, wobei die Mehrzahl von Funktionseinheiten
auf die globalen Register zugreifen kann, wobei die Funktionseinheit,
die mit dem die lokalen Register enthaltenden Registerdateisegment
assoziiert ist, auf die lokalen Register zugreifen kann, wobei der
Prozessor ein Langes-Instruktionswort-(VLIW)-Prozessor ist.
-
Somit kann ein Langes-Instruktionswort-(VLIW)-Prozessor
mit einer Mehrzahl von Funktionseinheiten bereitgestellt werden,
der eine Mehrport-Registerdatei beinhaltet, die in eine Mehrzahl von
separaten Registerdateisegmenten unterteilt ist, wobei jedes der
Registerdateisegmente mit einer aus der Mehrzahl von Funktionseinheiten
assoziiert ist. Die Registerdateisegmente werden in lokale Register und
globale Register partitioniert. Die globalen Register werden von
allen Funktionseinheiten gelesen und beschrieben. Die lokalen Register
werden nur von einer Funktionseinheit gelesen und beschrieben, die
mit einem bestimmten Registerdateisegment assoziiert ist. Die lokalen
Register und globalen Register werden mit Registeradressen in einem
Adressraum adressiert, der separat für ein Registerdateisegment/Funktionseinheit-Paar
definiert ist. Die globalen Register werden innerhalb eines gewählten Globalregisterbereiches
mit denselben Registeradressen für
die Mehrzahl von Registerdateisegment/Funktionseinheit-Paaren adressiert.
Die lokalen Register in einem Registerdateisegment werden mit Registeradressen
in einem Lokalregisterbereich außerhalb des Globalregisterbereiches
adressiert, die innerhalb eines einzelnen Registerdateisegment/Funktionseinheit-Paares
zugeordnet sind. Registeradressen im Lokalregisterbereich sind dieselben
für die
Mehrzahl von Registerdateisegment/Funktionseinheit-Paaren und adressieren
Register lokal innerhalb eines Registerdateisegment/Funktionseinheit-Paares.
-
Ein VLIW-Prozessor verwendet ein
langes Instruktionswort, das eine Mehrzahl von Subanweisungen beinhaltet.
Die Subanweisungen werden Positionen des Instruktionswortes zugeordnet.
Der VLIW-Prozessor beinhaltet eine Registerdatei, die in eine Mehrzahl
von Registerdateisegmente unterteilt ist. Der VLIW-Prozessor beinhaltet
auch eine Mehrzahl von Funktionseinheiten, von denen jede mit einem
Registerdateisegment der Registerdatei verbunden und assoziiert
ist. Jede der Subanweisungen läuft
auf einer bestimmten Funktionseinheit und bearbeitet Operanden,
die von einem bestimmten Registerdateisegment, das mit der Funktionseinheit
assoziiert ist, gelesen und beschrieben werden. Die Registerdateisegmente
beinhalten eine Mehrzahl von Registern, die in globale Register
und lokale Register partitioniert sind. Ein globales Register ist
ein Register, auf das alle aus der Mehrzahl von Funktionseinheiten
zugreifen, und wird daher von allen Funktionseinheiten gelesen und/oder
beschrieben. Ein lokales Register ist ein Register, auf das nur
eine bestimmte Subanweisung zugreifen kann, und es kann nur von der
spezifischen Funktionseinheit gelesen und beschrieben werden, die
Anweisungen in der jeweiligen Subanweisungsposition ausführt.
-
Eine Registerdatei beinhaltet N physikalische
Register. Die Registerdatei mit N Registern wird in M Registerdateisegmente
dupliziert, jeweils mit einer reduzierten Zahl von Lese- und/oder
Schreibports im Vergleich zu einer nicht duplizierten Registerdatei,
aber jeweils mit derselben Anzahl physikalischer Register. Die Registerdateisegmente
werden in NG globale und NL lokale
Registerdateien partitioniert, wobei NG plus
NL gleich N ist. Die Registerdatei arbeitet äquivalent
damit, dass sie NG + (M * NL)
Gesamtregister hat, die für
die M Subanweisungen zur Verfügung
stehen. Die Zahl der Adressbits zum Adressieren der NG +
(M * NL) Gesamtregister bleibt gleich der
Zahl der B-Bits, die zum Adressieren von N = 2B Registern
verwendet werden. Die lokalen Register für jedes der M Registerdateisegmente
werden mit denselben B-Bit-Werten adressiert.
-
In einem Beispiel beinhaltet jedes
der M gleich vier Registerdateisegmente N gleich 128 Register. Die
Zahl NG globaler Register wird auf 96 gesetzt,
während
die Zahl NL lokaler Register in jedem Registerdateisegment
auf 32 gesetzt wird. Somit beträgt
die Gesamtzahl der getrennten und unabhängigen Register 96 + (4*32)
= 224. Die 224 Register werden mit 7 Bits adressiert, die einen
Adressraum von 0–127
definieren, anstatt der 8 Bits, die sonst zum Zugreifen auf 224
Register benötigt
werden. In einem Beispiel werden die 96 globalen Register mit Adressspezifizierern
0–95 in
allen vier Registerdateisegmenten adressiert. Lokale Register 96–127 in
einem Registerdateisegment 0, lokale Register 128–159 im
Registerdateisegment 1, lokale Register 160–191 im Registerdateisegment
2 und lokale Register 192–223
im Registerdateisegment 3 werden alle mit Registeradressen 96–127 adressiert.
-
Somit wird ein Adressbit für jede der
vier Subanweisungspositionen eingespart, was eine Ersparnis von
vier Bits pro Subanweisung und eine Ersparnis von 16 Bits für eine VLIW-Anweisung
ergibt. Die Reduzierung der Adressbits ist äußerst vorteilhaft in einem
VLIW-Prozessor, der leistungsstarke Funktionseinheiten beinhaltet,
die eine große
Zahl von Anweisungen ausführen,
die jeweils im VLIW-Instruktionswort codiert werden sollen.
-
In einigen Ausgestaltungen ist die
Partitionierung der Registerdatei programmierbar, so dass die Anzahl
NG globaler Register und die Anzahl NL lokaler Register wählbar und variabel ist. So
kann beispielsweise eine Registerdatei mit vier Registerdateisegmenten
mit jeweils 128 Registern programmierbar als flache Registerdatei
mit 128 globalen Registern und 0 lokalen Registern konfiguriert
werden, wobei die 128 Register mit sieben Adressbits adressiert werden.
Alternativ können
die vier Registerdateisegmente beispielsweise so programmierbar
konfiguriert werden, dass sie 64 globale Register und 64 lokale Register
beinhalten, so dass die Gesamtzahl der Register 64 + (4*64) = 320
Register beträgt,
die wiederum mit 7 Bits anstatt den 9 Bits adressiert werden, die sonst
zum Adressieren von 320 Registern erforderlich wären.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Die Merkmale der beschriebenen Ausgestaltungen
sind in den beiliegenden Ansprüchen
speziell dargelegt. Ausgestaltungen der Erfindung in Bezug auf Struktur
und Betriebsart werden jedoch am besten mit Bezug auf die nachfolgende
Beschreibung und die Begleitzeichnungen verständlich.
-
1 ist
ein schematisches Blockdiagramm, das eine einzelne integrierte Schaltungschip-Implementation
eines Prozessors gemäß einer
Ausgestaltung der vorliegenden Erfindung illustriert.
-
2 ist
ein schematisches Blockdiagramm, das den Kern des Prozessors zeigt. 3 ist ein schematisches
Blockdiagramm, das eine Ausgestaltung der geteilten Registerdatei
illustriert, die für
den Gebrauch in dem Prozessor geeignet ist.
-
4 ist
ein schematisches Blockdiagramm, das eine Logikansicht der Registerdatei
und von Funktionseinheiten in dem Prozessor zeigt.
-
5A, 5B und 5C zeigen jeweils ein schematisches Blockdiagramm
einer unterteilten Registerdatei, eine allgemeine Ansicht von Rechenelementen
einer Funktionseinheit sowie eine grafische Ansicht eines Anweisungsformats,
um die Schwierigkeit beim Definieren eines Anweisungsformats mit
einer begrenzten Anzahl von Anweisungsbits zu illustrieren.
-
6 ist
ein schematisches Blockdiagramm, das eine Registerdatei für einen
VLIW-Prozessor zeigt,
der globale und lokale Registerpartitionierung beinhaltet.
-
7 illustriert
ein schematisches Blockdiagramm einer SRAM-Array, die für die geteilte
Mehrport-Registerdatei verwendet wird.
-
8A und 8B zeigen jeweils ein schematisches
Blockdiagramm und ein grafisches Diagramm, die die Registerdatei
und einen Speicherarray-Einsatz der Registerdatei illustrieren.
-
9 ist
ein schematisches Blockdiagramm, das eine Anordnung der Registerdatei
in vier Registerdateisegmente zeigt.
-
10 ist
ein schematisches Timing-Diagramm, das den zeitlichen Ablauf der
Prozessor-Pipeline illustriert.
-
Die Verwendung derselben Bezugsziffern
in verschiedenen Zeichnungen bedeutet ähnliche oder identische Komponenten.
-
ARTEN DER
DURCHFÜHRUNG
DER ERFINDUNG
-
1 zeigt
ein schematisches Blockdiagramm einer einzelnen integrierten Schaltungschip-Implementation
eines Prozessors 100, der eine Speicherschnittstelle 102,
einen Geometrie-Expander 104, zwei Medienverarbeitungseinheiten 110 und 112,
einen gemeinsam genutzten Daten-Cache-Speicher 106 und
mehrere Schnittstellensteuerungen beinhaltet. Die Schnittstellensteuerungen
unterstützen
eine interaktive Graphikumgebung mit Echtzeitbeschränkungen
durch Integrieren von Grundkomponenten von Speicher-, Graphik- und Ein-/Ausgabebrückenfunktionalität auf einem
einzelnen Chip. Die Komponenten sind untereinander verbunden und
sind über
latenzarme Kommunikationskanäle
hoher Bandbreite eng mit dem Prozessorkern verbunden um mehrere
Hochbandbreiten-Datenströme
effizient und mit geringer Ansprechzeit zu verwalten. Die Schnittstellensteuerungen
beinhalten einen UltraPort Architecture Interconnect (UPA) Controller 116 sowie
einen Peripheral Component Interconnect (PCI) Controller 120.
Die illustrative Speicherschnittstelle 102 hat einen direkten
Rambus Dynamic RAM (DRDRAM) Controller. Der gemeinsam genutzte Daten-Cache-Speicher 106 ist
ein Dualport-Speicher, der von den Medienverarbeitungseinheiten 110 und 112 gemeinsam
genutzt wird, wobei jeder Medienverarbeitungseinheit ein Port zugeordnet
ist. Der Daten-Cache-Speicher 106 ist Vierwegsatz-assoziativ, folgt
einem Write-back-Protokoll
und unterstützt
Hits im Füllpuffer
(nicht dargestellt). Der Daten-Cache-Speicher 106 ermöglicht einen
schnellen Datenverbund und eliminiert die Notwendigkeit für ein komplexes,
fehleranfälliges
Cache-Kohärenz-Protokoll zwischen
den Medienverarbeitungseinheiten 110 und 112.
-
Der UPA-Controller 116 verwaltet
einen duplizierten Satz von Cache-Tags im System und führt einen
Tag-Duplikat-Suchläufe
und Hauptspeichereinleitungen in parallelen Pipelines für jede kohärente Transaktion
aus. Mit dem Ansatz unter Verwendung des UPA-Controllers 116 wird
eine reduzierte Latenz bei Cache-Fehltreffern und eine verbesserte
Auslastung von Adresse, Datenpfad und Hauptspeicher im Vergleich
zu verzeichnisgestützten
Systemen erzielt. Verzeichnisgestützte Systeme verwalten Kohärenzzustände für jeden
Datenblock im Hauptspeicher und fordern einen Lese-Modifizier-Schreib-Mehraufwand für jede Lesetransaktion,
die den Hauptspeicher erreicht. Beim UPA-Controller 116 handelt
es sich um einen zentralisierten System-Controller, bei dem sich die
Platzierung einer Cache-Kohärenzlogik
auf dem Prozessor 100 sowie DMA-Geräte
erübrigen,
was den Schaltkomplex vereinfacht.
-
Der PCI-Controller 120 wird
als Primärsystem-E/A-Schnittstelle
zum Verbinden von standardmäßigen kostenarmen
Hochvolumen-Peripheriegeräten
verwendet, aber es können
auch andere Standardschnittstellen zum Einsatz kommen. Der PCI-Bus überträgt effektiv
Daten zwischen Hochbandbreiten-Peripheriegeräten und Tiefbandbreiten-Peripheriegeräten wie
CD-ROM Spielern, DVD-Spielern und Digitalkameras.
-
Es sind zwei Medienverarbeitungseinheiten 110 und 112 in
einem einzigen integrierten Schaltungschip enthalten, um eine Ausführungsumgebung zu
unterstützen,
die Thread-Level-Parallelismus nutzt, bei dem zwei unabhängige Threads
gleichzeitig ablaufen können.
Die Threads können
von beliebigen Quellen wie z. B. derselben Anwendung, verschiedenen
Anwendungen, dem Betriebssystem oder der Laufzeitumgebung kommen.
-
Parallelismus wird auf Thread-Level
genutzt, da Parallelismus bei mehr als vier, oder sogar zwei, Anweisungen
pro Zyklus im Universalcode selten ist. So ist beispielsweise der
illustrative Prozessor 100 eine Maschine mit einer Breite
von acht mit acht Ausführungseinheiten
zum Ausführen
von Anweisungen. Ein typischer "Universal"-Verarbeitungscode hat einen Anweisungslevel-Parallelismus
von etwa zwei, so dass durchschnittlich die meisten (etwa sechs)
der acht Ausführungseinheiten
jeweils im Ruhezustand wären.
Der illustrative Prozessor 100 arbeitet mit Thread-Level-Parallelismus
und wirkt an zwei unabhängigen
Threads und erzielt dabei möglicherweise das
Zweifache der Leistung eines Prozessors mit denselben Ressourcen
und derselben Taktrate, der jedoch mit traditionellem Non-Thread-Parallelismus arbeitet.
-
Thread-Level-Parallelismus ist besonders
für JavaTM-Anwendungen nützlich, die notwendigerweise
mehrere Ausführungsthreads
haben. JavaTM-Methoden mit "Suspend", "Resume", "Sleep" und dergleichen
unterstützen
Thread-Programmcode effektiv. Darüber hinaus sind Bibliotheken
der JavaTM Klasse Thread-sicher und fördern so
Parallelismus. (JavaTM, Sun, Sun Microsystems
und das Sun-Firmenzeichen sind Warenzeichen oder eingetragene Warenzeichen
von Sun Microsystems, Inc. in den Vereinigten Staaten und anderen
Ländern.
Alle SPARC-Warenzeichen, einschließlich UltraSPARC I und UltraSPARC
II, werden unter Lizenz verwendet und sind Warenzeichen von SPARC
International, Inc. in den Vereinigten Staaten und anderen Ländern. SPARC-Warenzeichen
tragende Produkte basieren auf einer Architekaur, die von Sun Microsystems,
Inc. entwickelt wurde.) Ferner unterstützt das Thread-Modell des Prozessors 100 einen
dynamischen Compiler, der als separater Thread mittels einer Medienverarbeitungseinheit 110 läuft, während die
zweite Medienverarbeitungseinheit 112 von der derzeitigen
Anwendung verwendet wird. In dem illustrativen System wendet der
Compiler Optimierungen auf der Basis von Profil-Feedhack-Informationen "beim Laufen" an, während der
ablaufende Code dynamisch modifiziert wird, um die Ausführung bei
jedem nachfolgenden Lauf zu verbessern. So kann beispielsweise ein "Garbage Collector" auf einer ersten
Medienverarbeitungseinheit 110 ablaufen, wobei Objekte
kopiert oder Zeigerinformationen gesammelt werden, während die
Anwendung auf der anderen Medienverarbeitungseinheit 112 abgearbeitet
wird.
-
Der in 1 gezeigte
Prozessor 100 beinhaltet zwar zwei Verarbeitungseinheiten
auf einem integrierten Schaltungschip, aber die Architektur ist äußerst skalierbar,
so dass ein bis mehrere eng gekoppelte Prozessoren zu einer nachrichtenbasierten kohärenten Architektur
gekoppelt sein können
und sich auf demselben Chip befinden können, um mehrere Ausführungsthreads
zu verarbeiten. Somit entsteht in dem Prozessor 100 eine
Begrenzung der Zahl der auf einem einzelnen Chip gebildeten Prozessoren
aufgrund von Kapazitätsbeschränkungen der
integrierten Schaltungstechnologie und nicht aufgrund von Architekturbeschränkungen
in Bezug auf die Interaktionen und Verbindungen zwischen Prozessoren.
-
2 zeigt
ein schematisches Blockdiagramm des Kerns des Prozessors 100.
Die Medienverarbeitungseinheiten 110 und 112 beinhalten
jeweils einen Anweisungs-Cache-Speicher 210,
einen Anweisungsausrichter 212, einen Anweisungspuffer 214,
eine Pipeline-Steuereinheit 226,
eine geteilte Registerdatei 216, eine Mehrzahl von Ausführungseinheiten
und eine Lade-/Speichereinheit 218. In dem illustrativen
Prozessor 100 verwenden die Medienverarbeitungseinheiten 110 und 112 eine
Mehrzahl von Ausführungseinheiten
zum Ausführen
von Anweisungen. Die Ausführungseinheiten
für eine
Medienverarbeitungseinheif 110 beinhalten drei Medienfunktionseinheiten
(MFU) 220 und eine allgemeine Funktionseinheit (GFU) 222.
Die Medienfunktionseinheiten 220 sind mehrere Einzelanweisungs-Mehrdatenpfad-(MSIMD)-Medienfunktionseinheiten.
Jede der Medienfunktionseinheiten 220 kann parallele 16-Bit-Komponenten
verarbeiten. Verschiedene parallele 16-Bit-Vorgänge liefern die Einzelanweisungs-Mehrdatenpfad-Fähigkeit für den Prozessor 100 einschließlich Addieren,
Mehrfachaddieren, Verschieben, Vergleichen und dergleichen. Die
Medienfunktionseinheiten 220 funktionieren in Kombination als
eng gekoppelte digitale Signalprozessoren (DSPs). Jede Medienfunktionseinheit 220 hat
einen separaten und individuellen Subanweisungsstrom, aber alle
drei Medienfunktionseinheiten 220 laufen synchron ab, so
dass die Subanweisungen Pipeline-Stufen im Gleichschritt durchlaufen.
-
Die allgemeine Funktionseinheit 222 ist
ein RISC-Prozessor, der arithmetische Logikeinheitsvorgänge (ALU),
Lade- und Speichervorgänge,
Abzweigungen und verschiedene spezialisierte und esoterische Funktionen
wie parallele Leistungsvorgänge, reziproke
Quadratwurzelvorgänge
und viele andere ausführen
kann. Die allgemeine Funktionseinheit 222 unterstützt weniger übliche parallele
Vorgänge
wie z. B. die parallele reziproke Quadratwurzelanweisung.
-
Der illustrative Anweisungs-Cache-Speicher 210 hat
16-KB-Kapazität
und beinhaltet Hardware-Unterstützung
zum Verwalten von Kohärenz, um
dynamische Optimierungen durch selbstmodifizierenden Code zuzulassen.
Mit Hilfe von Software wird im Falle von Modifikationen angezeigt,
dass der Anweisungsspeicher modifiziert wird. Die 16-KB-Kapazität ist für die Durchführung von
Graphikschleifen, anderen Multimedia-Tasks oder Prozessen und Universal-JavaTM-Code geeignet. Kohärenz wird mit Hardware verwaltet,
die nichtzuordnenden Write-through-Cache-Speicherbetrieb unterstützt. Selbstmodifizierender
Code wird durch die explizite Verwendung von "auf Anweisungsraum speichern" Anweisungen store2i
unterstützt.
Software verwendet die store2i Anweisung, um Kohärenz mit dem Anweisungs-Cache-Speicher 210 zu
bewahren, so dass die Anweisungs-Cache-Speicher 210 nicht
bei jedem einzelnen, von der Medienverarbeitungseinheit 110 ausgegebenen
Speichervorgang gesnoopt zu werden brauchen.
-
Die Pipeline-Steuereinheit 226 ist
zwischen dem Anweisungspuffer 214 und den Funktionseinheiten
geschaltet und plant die Übertragung
von Anweisungen zu den Funktionseinheiten. Die Pipeline-Steuereinheit 226 empfängt auch
Statussignale von den Funktionseinheiten und der Lade-/Speichereinheit 218 und
verwendet die Statussignale zum Durchführen mehrerer Steuerfunktionen.
Die Pipeline-Steuereinheit 226 verwaltet ein Scoreboard
und erzeugt Unterbrechungen sowie Bypass-Steuerungen. Die Pipeline-Steuereinheit 226 erzeugt
auch Traps und verwaltet Spezialregister.
-
Jede Medienverarbeitungseinheit 110 und 112 beinhaltet
eine geteilte Registerdatei 216, wobei eine einzelne logische
Registerdatei 128 32-Bit-Register beinhaltet. Die geteilte Registerdatei 216 wird in
eine Mehrzahl von Registerdateisegmenten 224 unterteilt,
um eine Multiport-Struktur zu bilden, die repliziert wird, um die
Fläche
des integrierten Schaltungschips und die Zugriffszeit zu reduzieren.
Ein separates Registerdateisegment 224 wird jeder der Medienfunktionseinheiten 220 und
der allgemeinen Funktionseinheit 222 zugeordnet. In der
illustrativen Ausgestaltung hat jedes Registerdateisegment 224 128
32-Bit-Register.
Die ersten 96 Register (0–95)
in dem Registerdateisegment 224 sind globale Register.
Alle Funktionseinheiten können
auf die 96 globalen Register schreiben. Die globalen Register sind über alle
Funktionseinheiten (MFU und GFU) kohärent, so dass ein beliebiger
Schreibvorgang auf ein globales Register durch eine beliebige Funktionseinheit
zu allen Registerdateisegmenten 224 rundgesendet wird.
Register 96–127
in den Registerdateisegmenten 224 sind lokale Register.
Auf einer Funktionseinheit zugeordnete lokale Register kann nicht zugegriffen
werden und sie sind für
andere Funktionseinheiten nicht "sichtbar".
-
Die Medienverarbeitungseinheiten 110 und 112 sind
hoch strukturierte Rechenblöcke,
die softwaremäßig geplante
Datenrechenvorgänge
mit festen, deterministischen und relativ kurzen Anweisungslatenzen
ausführen,
Betriebseigenschaften, die eine Vereinfachung im Hinblick auf Funktion
und Zykluszeit ergeben. Die Betriebseigenschaften unterstützen eine
Mehranweisungsausgabe durch einen pragmatischen Langes-Instruktionswort-(VLIW)-Ansatz,
der Hardware-Verriegelungen vermeidet, um Software zu berücksichtigen,
die Vorgänge
nicht richtig plant. Solche Hardware-Verriegelungen sind typischerweise
komplex, fehleranfällig
und erzeugen mehrere kritische Pfade. Ein VLIW-Instruktionswort beinhaltet
immer eine Anweisung, die in der allgemeinen Funktionseinheit (GFU) 222 abläuft, und
null bis drei Anweisungen ausführt,
die in den Medienfunktionseinheiten (MFU) 220 ausgeführt werden.
Ein MFU-Anweisungsfeld
im VLIW-Instruktionswort beinhaltet ein Betriebscode-(Opcode)-Feld,
drei Source-Register- (oder unmittelbare) Felder und ein Zielregisterfeld.
Anweisungen werden im Prozessor 100 der Reihe nach ausgeführt, aber
Ladevorgänge
können
außer
der Reihe mit Bezug auf andere Anweisungen und mit Bezug auf andere
Ladevorgänge durchgeführt werden,
so dass Ladevorgänge
im Anweisungsstrom nach oben verschoben werden können, so dass Daten vom Hauptspeicher
gestreamt werden können.
Das Ausführungsmodell
eliminiert den Gebrauch und die Overhead-Ressourcen eines Anweisungsfensters,
Reservationsstationen, einem Umordnungspuffer oder anderen Blöcken zum
Ordnen von Anweisungen. Der Wegfall der Anweisungsordnungsstrukturen
und Overhead-Ressourcen ist äußerst vorteilhaft,
da die eliminierten Blöcke
typischerweise einen großen
Teil eines integrierten Schaltungschips einnehmen. So nehmen beispielsweise
die eliminierten Blöcke
etwa 30% der Chipfläche
eines Pentium II Prozessors ein.
-
Um Software-Planungsfehler zu vermeiden, sind
die Medienprozessoreinheiten 110 und 112 Hochleistungseinheiten,
die aber in Bezug auf Kompilation und Ausführung vereinfacht sind. Die
Medienverarbeitungseinheiten 110 und 112 werden
allgemein als einfache 2-Skalar-Ausführungsmaschine mit vollen Bypass-
und Hardware-Verriegelungen auf Ladevorgängen klassifiziert. Die Anweisungen
beinhalten Ladevorgänge,
Speichervorgänge,
Arithmetik- und Logik-(ALU)-Anweisungen sowie Verzweigungsanweisungen,
so dass eine Planung für
den Prozessor 100 im Wesentlichen mit der Planung für eine einfache
2-Skalar-Ausführungsmaschine
für jede
der beiden Medienverarbeitungseinheiten 110 und 112 äquivalent
ist.
-
Der Prozessor 100 unterstützt volle
Bypässe zwischen
den ersten beiden Ausführungseinheiten innerhalb
der Medienverarbeitungseinheit 110 und 112 und
hat ein Scoreboard in der allgemeinen Funktionseinheit 222 für Ladevorgänge, so
dass der Compiler keine nichtdeterministischen Latenzen aufgrund von
Cache-Fehltreffern zu handhaben braucht. Der Prozessor 100 wertet
lange Latenzvorgänge
aus, die in der allgemeinen Funktionseinheit 222 ausgeführt werden,
z. B. ein reziproker Quadratwurzelvorgang, um die Planung über Ausführungseinheiten
zu vereinfachen. Das Scoreboard (nicht dargestellt) funktioniert
durch Verfolgen eines Datensatzes eines Anweisungspakets oder einer
Anweisungsgruppe von dem Zeitpunkt, an dem die Anweisung in eine
Funktionseinheit eintritt, bis zu dem Zeitpunkt, an dem die Anweisung
fertig ist und das Ergebnis vorliegt. Ein VLIW-Anweisungspaket enthält eine
GFU-Anweisung und
null bis drei MFU-Anweisungen. Die Quell- und Zielregister aller
Anweisungen in einem eingehenden VLIW-Anweisungspaket werden anhand
des Scoreboards geprüft.
Eventuelle echte Abhängigkeiten
oder Ausgabeabhängigkeiten
halten das ganze Paket an, bis das Ergebnis bereit ist. Die Verwendung
eines scoreboarded Ergebnisses als Operand bewirkt eine Anweisungsausgabe,
um für
eine ausreichende Anzahl von Zyklen anzuhalten, bis das Ergebnis
zur Verfügung
steht. Wenn die Referenzieranweisung, die den Halt hervorruft, auf
der allgemeinen Funktionseinheit 222 oder der ersten Medienfunktionseinheit 220 abläuft, dann
dauert der Halt nur so lange, bis das Ergebnis für einen Intra-Einheit-Bypass
zur Verfügung
steht. Für
den Fall einer load-Anweisung,
für die
es im Daten-Cache-Speicher 106 einen Hit gibt, dauert der
Halt möglicherweise
nur einen einzigen Zyklus. Wenn die Referenzieranweisung auf der
zweiten oder dritten Medienfunktionseinheit 220 vorliegt,
dann dauert der Halt so lange, bis das Ergebnis die Write-back-Stufe
in der Pipeline erreicht, wo das Ergebnis bei der Übertragung
zur geteilten Registerdatei 216 umgangen wird.
-
Das Scoreboard verwaltet automatisch
Ladeverzögerungen,
die während
eines Lade-Hits
auftreten. In einer illustrativen Ausgestaltung gehen alle Ladevorgänge in das
Scoreboard, um die Software-Planung zu vereinfachen und NOPs im
Anweisungsstrom zu eliminieren.
-
Das Scoreboard dient zum Verwalten
der meisten Verriegelungen zwischen der allgemeinen Funktionseinheit 222 und
den Medienfunktionseinheiten 220. Alle Ladevorgänge und
Nicht-Pipeline-Vorgänge
mit langer Latenz der allgemeinen Funktionseinheit 222 werden
scoreboarded. Die Vorgänge
mit langer Latenz beinhalten Divisionsanweisungen idiv, fdiv, reziproke
Quadratwurzelanweisungen frecsqrt, precsqrt und Leistungsanweisungen ppower.
Keines der Ergebnisse der Medienfunktionseinheiten
220 wird
scoreboarded. Nicht scoreboarded Ergebnisse stehen für nachfolgende
Vorgänge an
der Funktionseinheit zur Verfügung,
die die Ergebnisse nach der Latenz der Anweisung erzeugt.
-
Der illustrative Prozessor 100 hat
eine Render-Rate von mehr als fünfzig
Millionen Dreiecke pro Sekunde, ohne Betriebssystem-Overhead zu
berücksichtigen.
Daher liegen Datenzufuhrspezifikationen des Prozessors 100 weit
jenseits der Kapazitäten rentabler
Speichersysteme. Ausreichende Datenbandbreite wird durch Rendern
von komprimierter Geometrie mit dem Geometrie-Expander 104,
einer chipinternen Echtzeit-Geometrie-Expansionsmaschine, erzielt. Datengeometrie
wird in einem komprimierten Format im Hauptspeicher gespeichert.
Zur Render-Zeit wird die Datengeometrie abgerufen und in Echtzeit
auf der integrierten Schaltung des Prozessors 100 expandiert.
Der Geometrie-Expander 104 spart
vorteilhafterweise Speicherplatz und Speicherübertragungsbandbreite. Die
komprimierte Geometrie arbeitet mit einer optimierten verallgemeinerten Maschenstruktur,
die explizit die meisten gemeinsam genutzten Scheitelpunkte zwischen
Dreiecken aufruft, so dass der Prozessor 100 die meisten
Scheitelpunkte nur einmal zu transformieren und zu beleuchten braucht.
In einem typischen komprimierten Maschennetz wird der Dreieckdurchsatz
der Transform-and-Light-Stufe um einen Faktor von vier oder mehr
gegenüber
dem Durchsatz für
isolierte Dreiecke erhöht.
So werden beispielsweise beim Verarbeiten von Dreiecken mehrere
Scheitelpunkte parallel bearbeitet, so dass die Auslastungsrate
von Ressourcen hoch ist, wodurch sich ein effektiver räumlicher
Software-Pipelinebetrieb
ergibt. So werden Vorgänge
zeitmäßig überlappt,
in denen an mehreren Scheitelpunkten gleichzeitig gearbeitet wird,
anstatt mehrere Schleifenwiederholungen zeitlich zu überlappen.
Für andere
Anwendungstypen mit hohem Anweisungslevel-Parallelismus werden Schleifen mit hoher
Auslösezahl
softwaremäßig in eine
Pipeline eingereiht, so dass die meisten Medienfunktionseinheiten 220 völlig ausgelastet
werden.
-
3 zeigt
ein schematisches Blockdiagramm, das eine Ausgestaltung der geteilten
Registerdatei 216 illustriert, die für den Gebrauch im Prozessor 100 geeignet
ist. Die geteilte Registerdatei 216 liefert alle Operanden
von Prozessoranweisungen, die in den Medienfunktionseinheiten 220 und den
allgemeinen Funktionseinheiten 222 ablaufen, und empfängt die
Ergebnisse der Anweisungsausführung
von den Ausführungseinheiten.
Die geteilte Registerdatei 216 fungiert als Schnittstelle
mit dem Geometrie-Expander 104. Die geteilte Registerdatei 216 ist
jeweils Quelle und Ziel von Speicher- bzw. Ladevorgängen.
-
In dem illustrativen Prozessor 100 hat
die geteilte Registerdatei 216 in jeder der Medienverarbeitungseinheiten 110 und 112 128 Register.
Graphikverarbeitung stellt eine große Belastung des Registergebrauchs
dar. Daher bietet die geteilte Registerdatei 216 eine große Zahl
von Registern, so dass die Leistung nicht durch Lade- und Speichervorgänge oder
die Handhabung von Zwischenergebnissen wie Graphik-"Fills" und -"Spills" begrenzt ist. Die
illustrative geteilte Registerdatei 216 beinhaltet zwölf Leseports
und fünf
Schreibports, was totale Datenlese- und -schreibkapazität zwischen
den Zentralregistern der geteilten Registerdatei 216 und
allen Medienfunktionseinheiten 220, der allgemeinen Funktionseinheit 222 sowie
der mit der allgemeinen Funktionseinheit 222 verbundenen
Lade-/Speichereinheit 218 ergibt. Die fünf Schreibports beinhalten
einen 64-Bit-Schreibport,
der für
Ladevorgänge
dediziert ist. Die übrigen
vier Schreibports haben eine Breite von 32 Bits und dienen für Schreibvorgänge der
allgemeinen Funktionseinheit 222 und der Medienfunktionseinheiten 220.
-
Totale Lese- und Schreibkapazität fördert Flexibilität und dient
als Einrichtung zum Programmieren von handcodierten Routinen und
Compiler-generiertem Code.
-
Große Multiport-Registerdateien
sind typischerweise metallisch begrenzt, so dass der Registerbereich
proportional zum Quadrat der Anzahl der Ports ist. Eine 16-Port-Datei
ist im Hinblick auf Größe und Geschwindigkeit
grob proportional zu einem Wert von 256. Die illustrative geteilte
Registerdatei 216 ist in vier Registerdateisegmente 310, 312, 314 und 316 unterteilt,
die jeweils drei Leseports und vier Schreibports haben, so dass
jedes Registerdateisegment eine Größe und Geschwindigkeit hat,
die proportional zu 49 für
eine Gesamtfläche
für die
vier Segmente ist, d. h. proportional zu 196. Die Gesamtfläche ist
somit potentiell kleiner und schneller als eine einzelne Zentralregisterdatei.
Schreibvorgänge werden
vollständig
so rundgesendet, dass alle Dateien kohärent gehalten werden. Logisch
gesehen gibt es keinen Unterschied zwischen der geteilten Registerdatei 216 und
einer einzelnen Zentralregisterdatei. Vom Standpunkt der Layout-Effizienz
her ist die geteilte Registerdatei 216 jedoch äußerst vorteilhaft, weil
die Größe verringert
und die Leistung durch einen schnelleren Zugriff verbessert werden
kann.
-
Die neuen Mediendaten, auf die der
Prozessor 100 wirkt, sind typischerweise stark komprimiert. Daten
werden in einem komprimierten Format vom Hauptspeicher und Ein/Ausgabegeräten zu Pins
des Prozessors 100 übertragen,
werden dann auf der den Prozessor 100 enthaltenden integrierten
Schaltung expandiert und zur geteilten Registerdatei 216 weitergeleitet.
-
Das Teilen der Registerdatei in mehrere
Segmente in der geteilten Registerdatei 216 in Verbindung
mit dem Charakter von Datenzugriffen, bei denen mehrere Bytes konkurrent
auf die Mehrzahl von Ausführungseinheiten übertragen
werden, führt
zu einer hohen Auslastungsrate der Daten, die zum integrierten Schaltungschip
geliefert werden, und führt effektiv
zu einer weitaus höheren
Datenbandbreite, als sie von Universalprozessoren unterstützt wird. Die
höchste
Datenbandanforderung liegt daher nicht zwischen den Ein/Ausgabepins
und den Zentraleinheiten, sondern stattdessen zwischen der expandierten
Datenquelle und dem Rest des Prozessors. Für Graphikverarbeitungen liegt
die höchste
Datenbandbreitenanforderung zwischen dem Geometrie-Expander 104 und
der geteilten Registerdatei 216. Für Videodatenexpansion liegt
die höchste
Datenbandbreitenanforderung innerhalb der geteilten Registerdatei 216.
Datenübertragungen
zwischen dem Geometrie-Expander 104 und
der geteilten Registerdatei 216 sowie Datenübertragungen
zwischen verschiedenen Registern der geteilten Registerdatei 216 können breit
sein und mit Prozessorgeschwindigkeit ablaufen, so dass vorteilhafterweise
eine große
Bandbreite entsteht. Darüber
hinaus kann die geteilte Registerdatei 216 mehrfach zugängig gemacht
(multiported) werden, was die Gesamtbandbreite noch weiter erhöht.
-
Die Registerdatei 216 ist
ein Schwerpunkt für die
Erzielung einer sehr großen
Bandbreite des Prozessors 100. Der Prozessor 100 überträgt Daten
mit einer Mehrzahl von Datenübertragungstechniken.
In einem Beispiel für
eine Datenübertragungstechnik werden
Cache-speicherfähige
Daten durch normale Ladevorgänge
mit einer geringen Rate von bis zu acht Byte pro Zyklus in die geteilte
Registerdatei 216 geladen. In einem weiteren Beispiel werden
Streaming-Daten über
Gruppenladevorgänge
auf die geteilte Registerdatei 216 übertragen. Diese Gruppenladevorgänge übertragen
zweiunddreißig
Bytes vom Speicher direkt in acht aufeinander folgende 32-Bit-Register.
Der Prozessor 100 verwendet den Streaming-Datenvorgang
zum Empfangen von komprimierten Videodaten zur Expansion.
-
Komprimierte Graphikdaten werden über eine
Direktspeicherzugriffseinheit(DMA) im Geometrie-Expander 104 empfangen.
Die komprimierten Graphikdaten werden vom Geometrie-Expander 104 expandiert
und mit einer hohen Bandbreitenrate über Gruppenladevorgänge, die
auf den Geometrie-Expander 104 abgebildet werden, in die
geteilte Registerdatei 216 geladen.
-
Ladevorgänge sind nichtsperrend und
werden scoreboarded, so dass eine für Ladevorgänge natürliche lange Latenz durch frühzeitige
Planung verborgen werden kann. Universalanwendungen können die
große
Registerdatei 216 häufig
nicht nutzen.
-
Eine statistische Analyse zeigt,
dass Compiler die große
Zahl von Registern in der geteilten Registerdatei 216 nicht
effektiv nutzen. Aggressive In-Lining-Techniken, die herkömmlicherweise
aufgrund der begrenzten Zahl von Registern in konventionellen Systemen
beschränkt
waren, können
jedoch vorteilhafterweise in dem Prozessor 100 eingesetzt
werden, um die große
Zahl von Registern in der geteilten Registerdatei 216 zu
nutzen. In einem Software-System, das die große Zahl von Registern im Prozessor 100 nutzt,
wird der komplette Satz von Registern nach dem Event eines Thread-(Kontext) Schalters
gespeichert. Wenn nur ein paar Register des gesamten Satzes von
Registern benutzt werden, dann ist ein Speichern aller Register
im vollen Thread-Schalter verschwenderisch. Verschwendung wird im
Prozessor 100 dadurch vermieden, dass eine individuelle
Markierung von Registern unterstützt wird.
Oktanten der zweiunddreißig
Register können als "dirty" markiert werden,
wenn sie benutzt werden, und können
demzufolge konditionell gespeichert werden.
-
In verschiedenen Ausgestaltungen
wird die geteilte Registerdatei 216 dadurch unterstützt, dass Felder
für Globals,
Trap-Register und dergleichen dediziert werden.
-
4 zeigt
ein schematisches Blockdiagramm einer Logikansicht der Registerdatei 216 und der
Funktionseinheiten im Prozessor 100. Die physikalische
Implementation des Kernprozessors 100 wird durch Replizieren
einer einzelnen Funktionseinheit zu den drei Medienfunktionseinheiten 220 vereinfacht.
Die Medienfunktionseinheiten 220 beinhalten Schaltungen,
die verschiedene Arithmetik- und Logikvorgänge ausführen, einschließlich Universalcode,
Graphikcode und Video-Image-Sprach-(VIS) Verarbeitung. VIS-Verarbeitung beinhaltet
Schleifen z. B. für
Videoverarbeitung, Bildverarbeitung, digitale Signalverarbeitung
(DSP), Sprachverarbeitung sowie Spracherkennungsalgorithmen.
-
Die 5A, 5B und 5C zeigen jeweils ein schematisches Blockdiagramm
einer geteilten Registerdatei, eine allgemeine Ansicht von Recheneinheiten
einer Funktionseinheit sowie eine grafische Ansicht eines Anweisungsformats,
um die Schwierigkeit beim Definieren eines Anweisungsformats mit
einer begrenzten Anzahl von Anweisungsbits zu illustrieren. 5A zeigt ein schematisches
Blockdiagramm eines Decoders 502, der vier Subanweisungen
eines langen Instruktionswortes decodiert. Jeder der vier Decoder
legt Steuersignale an eines von vier Registerdateisegmenten 510, 512, 514 und 516 an.
Jedes der Registerdateisegmente ist mit einer Funktionseinheit verbunden
und assoziiert. In der illustrativen Ausgestaltung ist ein erstes
Registerdateisegment 510 mit einer allgemeinen Funktionseinheit 520 verbunden
und assoziiert. Ein zweites, drittes und viertes Registerdateisegment 512, 514 und 516 sind
jeweils mit Medienfunktionseinheiten 522, 524 und 526 verbunden
und assoziiert.
-
5B zeigt
ein Beispiel für
eine VLIW-Subanweisung, insbesondere eine Multiplizier-Addier-(muladd)
Anweisung, und bezieht die Ausführung
der muladd-Anweisung
auf Rechenblöcke
in einer Funktionseinheit. Die muladd-Anweisung gibt vier Registerspezifizierer
vor, die Daten designieren, auf die die Funktionseinheit wirkt.
Die muladd-Anweisung gibt drei Quelloperanden RA,
RB und RC sowie einen
Zieloperanden RD vor. Die Funktionseinheit
beinhaltet einen Vervielfacher 530, der die Quelloperanden
RA und RB zu einem
Produkt multipliziert. Die Funktionseinheit beinhaltet auch einem
Addierer 532, der das Produkt vom Vervielfacher 530 empfängt und
Produkt und Quelloperand RC zu einer Summe
addiert, die zum Zielregisteroperanden RD übertragen
wird.
-
Für
eine Registerdatei, in der die Registerdateisegmente N = 2M Register beinhalten, werden beispielsweise
M Bits verwendet, um ein bestimmtes Register eindeutig zu spezifizieren,
so dass 4*M benötigt
werden, um die vier in einer einzigen Subanweisung adressierten
Register eindeutig zu spezifizieren.
-
5C veranschaulicht
einen Subanweisungsspeicher für
Anweisungen wie die muladd-Anweisung. Der Anweisungsspeicher wird
in Bezug auf Ressourcengröße und Geschwindigkeit
beschränkt, so
dass die Zahl der Bits in einer Subanweisung begrenzt ist. Die vier
Registerspezifizierer für
die Subanweisung verwenden nahezu die gesamte Kapazität des Subanweisungsspeichers.
So hat beispielsweise ein Registerdateisegment, das 128 Bit beinhaltet,
Register, die mit sieben Adressbits eindeutig adressiert werden.
Die Adressierung von vier Registern verbraucht 7*4 = 28 Bits. Für eine auf
32 Bit beschränkte
Subanweisungsgröße bleiben
nur vier Bits zum Spezifizieren eines Operationscodes oder anderer
Betriebsinformationen zum Steuern der Ausführung.
-
Der illustrative VLIW-Prozessor partitioniert die
Registerdatei in lokale und globale Register, um Adressbits in einem
langen Instruktionswort zu konservieren, um die Größe der Registerdatei
zu reduzieren und den Zugriff zu beschleunigen.
-
Das schematische Blockdiagramm in 6 zeigt eine Registerdatei 600 für einen
VLIW-Prozessor 100, der globale und lokale Registerpartitionierung
beinhaltet. Der Langes-Instruktionswort-(VLIW)-Prozessor hat eine
Mehrzahl von Funktionseinheiten, einschließlich drei Medienfunktionseinheiten 622, 624 und 626 und
eine allgemeine Funktionseinheit 620. Der Prozessor 100 beinhaltet auch
eine mehrfach zugängige
(multiported) Registerdatei 600, die in eine Mehrzahl separater
Registerdateisegmente 610,
612, 614 und 616 unterteilt
ist, wobei jedes der Registerdateisegmente mit einer aus der Mehrzahl
von Funktionseinheiten assoziiert ist. Die Registerdateisegmente 610, 612, 614 und 616 werden
in lokale und globale Register partitioniert. Die globalen Register
werden von allen Funktionseinheiten 620, 622, 624 und 626 gelesen
und beschrieben. Die lokalen Register werden nur von einer Funktionseinheit
gelesen und beschrieben, die mit einem bestimmten Registerdateisegment
assoziiert ist. Die lokalen Register und die globalen Register werden
mit Registeradressen in einem Registerraum adressiert, der separat
für ein
Registerdateisegment/Funktionseinheit-Paar definiert ist, wie z.
B. Registerdateisegment 610/allgemeine Funktionseinheit 620,
Registerdateisegment 612/Medienfunktionseinheit 622,
Registerdateisegment 614/Medienfunktionseinheit 624 sowie
Registerdateisegment 616/Medienfunktionseinheit 626.
-
Die globalen Register werden in einem
gewählten
globalen Registerbereich unter Verwendung derselben Registeradressen
für die
Mehrzahl von Registerdateisegment/Funktionseinheit-Paaren adressiert,
z. B. globale Register 0–95.
Die lokalen Register in einem Registerdateisegment werden mit Registeradressen
in einem lokalen Registerbereich außerhalb des globalen Registerbereichs
adressiert, z. B. Adressen 96–127,
die innerhalb eines einzelnen Registerdateisegment/Funktionseinheit-Paares
zugeordnet sind. Auf die Registerdateisegmente im lokalen Registerbereich
angewandte Registeradressen 96–127
sind dieselben für
die Mehrzahl von Registerdateisegment/Funktionseinheit-Paaren und Adressregistern
lokal innerhalb des Registerdateisegment/Funktionseinheit-Paares.
Die Registerspezifizierer der lokalen Register, wie außerhalb
des Prozessors definiert, überlappen
nicht, sondern haben stattdessen getrennte und verschiedene Spezifizierer.
So werden beispielsweise in einer Ausgestaltung, außerhalb
des Prozessors 100, die 96 globalen Register mit Adressspezifizierern
0–95 in
allen vier Registerdateisegmenten adressiert. Lokale Register 96-127
im Registerdateisegment 610, lokale Register 128-159 im
Registerdateisegment 612, lokale Register 160-191 im Registerdateisegment 614 und
lokale Register 192-223 im Registerdateisegment 616 werden
alle mit Registeradressen 96–127
adressiert. In diesem Beispiel ist die Gesamtzahl der getrennten und
unabhängigen
Register 96 + (4*32) = 224. Die 224 Register werden mit
7 Bits adressiert, die einen Adressraum von 0–127 definieren, anstatt mit
den 8 Bits, die sonst zum Zugreifen auf 224 Register notwendig sind.
-
Durch die Partitionierung von globalen
und lokalen Registern wird der Informationsgehalt von Registerspezifiziererbits
in einem Instruktionswort auf vorteilhafte Weise gehandhabt, indem
Informationen durch Positionsabhängigkeit
innerhalb einer VLIW-Anweisungsgruppe inhärent kommuniziert werden. Die
Positionierung eines Registerspezifizierers im Instruktionswort
kommuniziert somit Adressierinformationen. Die zusätzliche
Information ermöglicht
es einem Compiler oder Programmierer, mehr Register in weniger Bits
zu spezifizieren, als dies konventionell möglich war.
-
Somit wird ein Adressbit für jede der
vier Subanweisungspositionen eingespart, was Einsparungen von vier
Bits pro Subanweisung und Einsparungen von 16 Bits pro VLIW-Anweisung bedeutet. Die
Reduzierung der Adressbits ist in einem VLIW-Prozessor äußerst vorteilhaft,
der leistungsstarke Funktionseinheiten beinhaltet, die eine große Zahl
von Anweisungen ausführen,
die jeweils im VLIW-Instruktionswort codiert werden sollen.
-
In allgemeinen Ausgestaltungen beinhaltet die
Registerdatei 600 N physikalische Register. Die Registerdatei 600 mit
N Registern wird in M Registerdateisegmente 610, 612, 614 und 616 dupliziert,
die jeweils eine reduzierte Zahl von Lese- und/oder Schreibports
im Vergleich zu einer nicht duplizierten Registerdatei, aber dieselbe
Zahl physikalischer Registern haben. Die Registerdateisegmente werden
in NG globale und NL lokale
Registerdateien partitioniert, wobei NG +
NL gleich N ist. Die Registerdatei funktioniert
so, als wären
insgesamt NG + (M * NL)
Register für
die M Funktionseinheiten vorhanden. Die Anzahl der Adressbits zum
Adressieren der NG + (M * NL)
Gesamtregister bleibt gleich der Anzahl der B-Bits, die zum Adressieren
von N = 2B Register verwendet werden. Die
lokalen Register für
jedes der M Registerdateisegmente werden mit denselben B-Bit-Werten adressiert.
-
In einigen Ausgestaltungen ist die
Partitionierung der Registerdatei 600 programmierbar, so dass
die Zahl NG von globalen Registern und die
Zahl NL von lokalen Registern wählbar und
variabel ist. So kann beispielsweise eine Registerdatei mit vier
Registerdateisegmenten mit jeweils 128 Registern programmierbar
als flache Registerdatei mit 128 globalen Registern und 0 lokalen
Registern konfiguriert werden, wobei die 128 Register mit sieben
Adressbits adressiert werden. Alternativ können die vier Registerdateisegmente
z. B. programmierbar so konfiguriert werden, dass sie 64 globale
Register und 64 lokale Register beinhalten, so dass die Gesamtzahl der
Register 64 + (4*64) = 320 Register beträgt, die wiederum mit 7 Bits
anstatt den 9 Bits adressiert werden, die sonst zum Adressieren
von 320 Registern notwendig wären.
-
7 zeigt
ein schematisches Blockdiagramm einer Ausgestaltung der Multiport-Registerdatei 216.
Eine Mehrzahl von Leseadressbussen RA1 bis RAN führt Leseadressen, die jeweils
an Decoderports 816-1 bis 816-N angelegt werden.
Decoder-Schaltungen sind in der Fachwelt gut bekannt, und es können beliebige
von mehreren Implementationen als Decoder-Ports 816-1 bis 816-N verwendet werden.
Wenn eine Adresse an einen der Decoder-Ports 816-1 bis 816-N angelegt
wird, dann wird die Adresse decodiert, und ein Leseadresssignal wird
von einem Decoder-Port 816 zu einem Register in einer Speicherzellen-Array 818 übertragen.
Daten von der Speicherzellenarray 818 werden mit Ausgangsdatentreibern 822 ausgegeben.
Daten werden zu und von der Speicherzellenarray 818 unter
der Steuerung von Steuersignalen übertragen, die auf einigen
der Leitungen der Busse aus der Mehrzahl von Leseadressbussen RA1
bis RAN geführt
werden.
-
Die 8A und 8B zeigen jeweils ein schematisches
Blockdiagramm und ein Grafikdiagramm, die die Registerdatei 216 und
einen Speicherarray-Einsatz 910 illustrieren. Die Registerdatei 216 ist mit
vier Funktionseinheiten 920, 922, 924 und 926 verbunden,
die Informationen zur Durchführung
von Vorgängen
wie Arithmetik-, Logik-, Grafik-, Datenhandhabungsvorgängen und
dergleichen liefern. Die illustrative Registerdatei 216 hat
zwölf Leseports 930 und
vier Schreibports 932. Die zwölf Leseports 930 werden
illustrativ drei Ports zugeordnet, die mit jeder der vier Funktionseinheiten
verbunden sind. Die vier Schreibports 932 sind zum Empfangen
von Daten von allen vier Funktionseinheiten geschaltet.
-
Die Registerdatei 216 beinhaltet
einen Decoder, in 6 dargestellt,
für jeden
der sechzehn Lese- und Schreibports. Die Registerdatei 216 beinhaltet
eine Speicherarray 940, die teilweise in der in 8B illustrierten Einfügung 710 dargestellt
ist, und beinhaltet eine Mehrzahl von Wortleitungen 944 und Bitleitungen 946.
Die Wortleitungen 944 und Bitleitungen 946 sind
einfach ein Satz von Leitungen, die Transistoren (nicht dargestellt)
in der Speicherarray 940 verbinden. Die Wortleitungen 944 wählen Register,
so dass eine bestimmte Wortleitung ein Register der Registerdatei 216 selektiert.
Die Bitleitungen 946 sind ein zweiter Satz von Leitungen,
die die Transistoren in der Speicherarray 940 verbinden.
Die Wortleitungen 944 und Bitleitungen 946 sind
typischerweise im rechten Winkel zueinander angeordnet. In der illustrativen
Ausgestaltung sind die Wortleitungen 944 und die Bitleitungen 946 aus
Metall konstruiert, das in verschiedenen Ebenen ausgelegt ist, wie
z. B. eine Metallschicht 2 für
die Wortleitungen 944 und eine Metallschicht 3 für die Bitleitungen 946.
In anderen Ausgestaltungen können
Bitleitungen und Wortleitungen aus anderen Materialien wie z. B.
aus Polysilicium bestehen, oder sie können in anderen Ebenen als
denen vorliegen, die in der illustrierten Ausgestaltung beschrieben
sind, wie im Bereich der Halbleiterherstellung bekannt ist. In dem
illustrativen Beispiel werden die Wortleitungen 944 um
einen Abstand von etwa 1 μm
voneinander getrennt, und die Bitleitungen 946 sind um
etwa 1 μm
getrennt. Weitere Schaltungsmaße
können
für verschiedene
Prozesse konstruiert werden. Das illustrative Beispiel zeigt eine Bitleitung
pro Port, andere Ausgestaltungen können mehrere Bitleitungen pro
Port verwenden.
-
Wenn eine bestimmte Funktionseinheit
ein bestimmtes Register in der Registerdatei 216 liest, dann sendet
die Funktionseinheit ein Adresssignal über die Leseports 930,
das die entsprechenden Wortleitungen zum Zugreifen auf das Register
aktiviert. In einer Registerdatei mit einer konventionellen Struktur
und zwölf
Leseports wird jede Zelle, die ein einzelnes Informationsbit speichert,
mit zwölf
Wortleitungen verbunden, um eine Adress- und zwölf Bitleitungen zum Führen von
von der Adresse gelesenen Daten zu selektieren.
-
Die vier Schreibports 932 adressieren
Register in der Registerdatei mit vier Wortleitungen 944 und
vier Bitleitungen 946, die mit jeder Zelle verbunden sind.
Die vier Wortleitungen 944 adressieren eine Zelle, und
die vier Bitleitungen 946 führen Daten zu der Zelle.
-
Wenn also die illustrative Registerdatei 216 auf
konventionelle Weise mit zwölf
Leseports 930 und vier Schreibports 932 für insgesamt
sechzehn Ports ausgelegt wäre
und die Ports hätten
einen Abstand von 1 μm,
dann hätte
eine Speicherzelle eine integrierte Schaltungsfläche von 256 μm2 (16 × 16). Die
Fläche
ist proportional zum Quadrat der Anzahl der Ports.
-
Die Registerdatei 216 wird
alternativ zur Durchführung
von einendigen Lese- und/oder
einendigen Schreibvorgängen
unter Verwendung einer einzelnen Bitleitung pro Port pro Zelle implementiert, oder
sie wird zur Durchführung
verschiedener Lese- und/oder verschiedener Schreibvorgänge unter
Verwendung von zwei Bitleitungen pro Port pro Zelle implementiert.
-
In dieser Ausgestaltung ist die Registerdatei 216 jedoch
nicht in konventioneller Weise ausgelegt und ist stattdessen in
eine Mehrzahl von separaten und individuellen Registerdateisegmenten 225 unterteilt. 9 zeigt in einem schematischen
Blockdiagramm eine Anordnung der Registerdatei 216 zu vier Registerdateisegmenten 224.
Die Registerdatei 216 bleibt als einzelne logische Registerdatei
in dem Sinn funktionell, dass die vier Registerdateisegmente 224 dieselbe
Anzahl von Registern und dieselben Registerwerte enthalten wie eine
konventionelle Registerdatei mit derselben Kapazität, die nicht
geteilt ist. Die separaten Registerdateisegmente 224 unterscheiden
sich von einer Registerdatei, die nicht geteilt ist, durch den Wegfall
von Leitungen, die ansonsten die Ports mit den Speicherzellen verbinden
würden. Demgemäß hat jedes
Registerdateisegment 224 Verbindungen nur mit drei der
zwölf Leseports 930, ein
Registerdateisegment mit den anderen neun Leseports verbindende
Leitungen fallen weg. Alle Schreibvorgänge werden rundgesendet, so
dass jedes der vier Registerdateisegmente 224 Verbindungen
mit allen vier Schreibports 932 hat. Somit hat jedes der
vier Registerdateisegmente 224 drei Leseports und vier
Schreibports für
insgesamt sieben Ports. Die individuellen Zellen sind mit sieben
Wortleitungen und sieben Bitleitungen verbunden, so dass eine Speicherarray
mit einem Abstand von 1 um zwischen Leitungen eine Fläche von
etwa 49 μm2 hat. In der illustrativen Ausgestaltung
haben die vier Registerdateisegmente 224 eine Fläche proportional zu
sieben zum Quadrat. Die Gesamtfläche
der vier Registerdateisegmente 224 ist somit proportional
zu 49 mal 4, d. h. insgesamt 196.
-
Die geteilte Registerdatei verringert
somit vorteilhafterweise die Fläche
der Speicherarray in einem Verhältnis
von etwa 256/196 (1,3X oder 30%). Die Flächenreduzierung entspricht
ferner vorteilhafterweise einer Verbesserung der Geschwindigkeitsleistung
aufgrund einer Verringerung der Länge der Wortleitungen 944 und
der Bitleitungen 946, die die Arrayzellen verbinden, was
die Zeit reduziert, die ein Signal zum Passieren der Leitungen benötigt. Die Verbesserung
der Geschwindigkeitsleistung ist aufgrund der strikten Zeitbegrenzungen
sehr vorteilhaft, die durch die Spezifikation von Hochleistungsprozessoren
auferlegt werden, und auch um eine Registerdatei hoher Kapazität zu erzielen,
die bei hohen Geschwindigkeiten funktioniert. So erfolgt beispielsweise
das Lesen der Registerdatei 216 typischerweise in einem
einzigen Taktzyklus. Für
einen Prozessor, der bei 500 MHz arbeitet, wird eine Zykluszeit
von zwei Nanosekunden zum Zugreifen auf die Registerdatei 216 auferlegt.
Konventionelle Registerdateien haben typischerweise nur bis zu etwa
32 Register im Vergleich zu den 128 Registern in der illustrativen
Registerdatei 216 des Prozessors 100. Eine Registerdatei 216,
die wesentlich größer ist
als die Registerdatei in konventionellen Prozessoren, ist in Hochleistungsvorgängen wie
Video- und Graphikverarbeitung äußerst vorteilhaft.
Die geringere Größe der Registerdatei 216 ist
zum Erfüllen
von Zeitbeschränkungen
in einer Registerdatei von größerer Kapazität äußerst nützlich.
-
In einigen Ausgestaltungen wird die
Fläche einer
Registerdatei noch weiter reduziert, indem eine spezielle Speicherzelle
für die
lokalen Register verwendet wird, die Schreibportverbindungen zu
der Funktionseinheit haben, die lokal mit dem Registerdateisegment
assoziiert ist. So wird nur von der lokalen Funktionseinheit auf
die lokalen Register geschrieben. In der illustrativen Registerdatei 216 hat die
spezielle Zelle für
lokale Register nur einen einzigen Schreibport, was die Zahl der
Wortleitungen auf vier reduziert. Die Zahl der mit den lokalen Registern verbundenen
Bitleitungen wird ebenfalls auf vier reduziert, so dass die Zelle
noch kompakter gemacht werden kann.
-
In 10 illustriert
ein vereinfachtes schematisches Timing-Diagramm den zeitlichen Ablauf der
Prozessor-Pipeline 1100. Die Pipeline 1100 beinhaltet
neun Stufen einschließlich
drei Einleitungsstufen, einer Mehrzahl von Ausführungsphasen und zwei Terminierungsstufen.
Die drei Einleitungsstufen werden so optimiert, dass sie nur diejenigen
Vorgänge
beinhalten, die zum Decodieren von Anweisungen notwendig sind, so
dass Sprung- und Rufanweisungen, die in der JavaTM Sprache allgegenwärtig sind, schnell
ausgeführt
werden. Eine Optimierung der Einleitungsphasen erleichtert vorteilhafterweise
eine Abzweigungsvorhersage, da Abzweigungen, Sprünge und Rufe schnell ausgeführt werden
und nicht viele Blasen erzeugen.
-
Die erste der Einleitungsstufen ist
eine Abruf-Stufe 1110, während der der Prozessor 100 Anweisungen
vom 16 KB Zweiwegsatz-assoziativen Anweisungs-Cache-Speicher 210 abruft.
Die abgerufenen Anweisungen werden im Anweisungsausrichter 212 ausgerichtet
und in einer Ausrichtungsstufe 1112, einer zweiten Stufe
der Einleitungsstufen, zum Anweisungspuffer 214 weitergeleitet.
Der Ausrichtungsvorgang positioniert die Anweisungen ordnungsgemäß zum Speichern
in einem bestimmten Segment der vier Registerdateisegmente 310, 312, 314 und 316 und
für die
Ausführung
in einer assoziierten Funktionseinheit der drei Medienfunktionseinheiten 220 und
einer allgemeinen Funktionseinheit 222. In einer dritten
Stufe, einer Decodierstufe 1114 der Einleitungsstufen,
wird das abgerufene und ausgerichtete VLIW-Anweisungspaket decodiert,
und das Scoreboard (nicht dargestellt) wird gelesen und parallel
aktualisiert. Die vier Registerdateisegmente 310, 312, 314 und 316 enthalten
jeweils entweder Floating-Point-Daten
oder ganzzahlige Daten. Die Registerdateien werden in der Decodier-(D)
Stufe gelesen.
-
Nach der Decodierstufe 1114 werden
die Ausführungsstufen
durchgeführt.
Die beiden Endstufen beinhaltet eine Trap-Handling-Stufe 1160 und eine
Write-back-Stufe 1162, während der Ergebnisdaten in
die geteilte Registerdatei 216 zurückgeschrieben werden.
-
Die Erfindung wurde zwar mit Bezug
auf verschiedene Ausgestaltungen beschrieben, aber es ist zu verstehen,
dass diese Ausgestaltungen illustrativ sind und dass sie den Umfang
der Erfindung nicht begrenzen. Es sind zahlreiche Variationen, Modifikationen,
Additionen und Verbesserungen der beschriebenen Ausgestaltungen
möglich.
So wird beispielsweise die Fachperson leicht die Schritte ausführen können, die
notwendig sind, um die hierin offenbarten Strukturen und Methoden
bereitzustellen, und wird verstehen, dass die angegebenen Prozessparameter,
Materialien und Abmessungen lediglich beispielhaft sind und variiert
werden können,
um die gewünschte
Struktur sowie Modifikationen zu erzielen, die in den Umfang der
Erfindung fallen. Variationen und Modifikationen der hierin offenbarten
Ausgestaltungen sind auf der Basis der dargelegten Beschreibung
möglich,
ohne vom Umfang der Erfindung gemäß den folgenden Ansprüchen abzuweichen.
So können
die beschriebene Struktur und Betriebsmethode z. B. auf eine Registerdatei
und einen Prozessor einer beliebigen geeigneten Größe angewendet werden.
Die Registerdatei kann viel größer oder
viel kleiner sein als die beschriebenen 128 Register. Das lange
Instruktionswort kann eine beliebige geeignete Zahl von Subanweisungen
beinhalten.
-
So hat zwar zum Beispiel die illustrative
Registerdatei eine Bitleitung pro Port, aber in anderen Ausgestaltungen
können
jedem Port auch mehrere Bitleitungen zugeordnet werden. Die beschriebenen Wortleitungen
und Bitleitungen bestehen aus Metall. In anderen Beispielen können andere
leitende Materialien wie beispielsweise dotiertes Polysilicium für Verbindungen
verwendet werden. Die beschriebene Registerdatei arbeitet mit einendigen
Lese- und Schreibvorgängen,
so dass eine einzelne Bitleitung pro Bit und pro Port eingesetzt
wird. In anderen Prozessoren können
verschiedene Lese- und Schreibvorgänge mit zweiendigen Leseverstärkern verwendet
werden, so dass zwei Bitleitungen pro Bit und pro Port zugeordnet
werden, was zu einer größeren Teilung
führt.
Zweiendige Leseverstärker
verbessern die Speichertreue, erhöhen aber die Größe einer
Speicherarray erheblich, was die Geschwindigkeitsleistung stark
belastet. Somit werden die Vorteile, die mit der beschriebenen Registerdateistruktur
für einen Speicher
mit verschiedenen Lese- und Schreibvorgängen stark erhöht. Der
Abstand zwischen Bitleitungen und Wortleitungen wird mit etwa 1 μm beschrieben.
In einigen Prozessoren kann der Abstand jedoch größer als
1 um sein. In anderen Prozessoren ist der Abstand zwischen Leitungen
kleiner als 1 μm.