DE69907955T2 - Globale und locale registersegmentierung in einem vliw prozessor - Google Patents

Globale und locale registersegmentierung in einem vliw prozessor Download PDF

Info

Publication number
DE69907955T2
DE69907955T2 DE69907955T DE69907955T DE69907955T2 DE 69907955 T2 DE69907955 T2 DE 69907955T2 DE 69907955 T DE69907955 T DE 69907955T DE 69907955 T DE69907955 T DE 69907955T DE 69907955 T2 DE69907955 T2 DE 69907955T2
Authority
DE
Germany
Prior art keywords
register file
registers
register
processor
local
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69907955T
Other languages
English (en)
Other versions
DE69907955D1 (de
Inventor
Marc Tremblay
N. William JOY
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Application granted granted Critical
Publication of DE69907955D1 publication Critical patent/DE69907955D1/de
Publication of DE69907955T2 publication Critical patent/DE69907955T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Description

  • 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.

Claims (13)

  1. Prozessor (100), 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.
  2. Prozessor (100) nach Anspruch 1, der ferner Folgendes umfasst: einen Decoder (502), der mit der Registerdatei gekoppelt ist, zum Decodieren eines langen Instruktionswortes mit einer Mehrzahl von Subanweisungen, wobei die Subanweisungen Positionen des Instruktionswortes zugeordnet sind, wobei einige aus der Mehrzahl von Subanweisungen nach jeweiligen einigen aus der Mehrzahl von Funktionseinheiten ausführbar sind und auf Operanden wirken, auf die das Registerdateisegment zugreifen kann, das mit der Funktionseinheit der Mehrzahl von Funktionseinheiten assoziiert ist.
  3. Prozessor (100) nach Anspruch 1 oder Anspruch 2, bei dem die lokalen Register und globalen Register mit Registeradressen in einem Adressraum adressiert werden, der für ein Registerdateisegment/Funktionseinheit-Paar definiert ist.
  4. Prozessor (100) nach Anspruch 1 oder Anspruch 2, bei dem die Registerdatei (216) N physikalische Register beinhaltet und in M Registerdateisegmente (224) dupliziert ist, wobei die Registerdateisegmente eine verringerte Anzahl von Lese- und/oder Schreibports im Vergleich zu einer nicht duplizierten Registerdatei haben, die jedoch jeweils dieselbe Anzahl physikalischer Register haben.
  5. Prozessor (100) nach Anspruch 4, bei dem die Registerdateisegmente (224) in NG globale und NL lokale Registerdateien partitioniert sind, wobei NG plus NL gleich N ist, wobei die Registerdatei äquivalent mit einer Registerdatei mit insgesamt NG + (M * NL) Registern arbeitet, die für die M Funktionseinheiten vorhanden sind, wobei die Anzahl der Adressbits zum Adressieren der insgesamt NG + (M * NL) Register gleich der Anzahl der Bits B ist, die zum Adressieren der N = 2B verwendet werden, wobei die lokalen Register für einige der M Registerdateisegmente mit denselben B-Bit-Werten adressiert werden.
  6. Prozessor (100) nach Anspruch 5, bei dem das Partitionieren der Registerdatei (216) so programmiert werden kann, dass die Anzahl NG globaler Register und die Anzahl NL lokaler Register wählbar und variabel ist.
  7. Prozessor (100) nach Anspruch 1 oder Anspruch 2, bei dem die Registerdatei (216) eine Speicherarray-Struktur mit R Leseports (930) und W Schreibports (932) ist, die Folgendes umfasst: eine Mehrzahl von Speicherarray-Speichern; wobei die Speicherarray-Speicher eine verringerte Anzahl von Leseports haben, so dass die Gesamtzahl der Leseports für die Mehrzahl von Speicherarray-Speichern R Leseports ist; und wobei die Speicherarray-Speicher W Schreibports haben.
  8. Verfahren zum Betreiben eines Prozessors (100), umfassend die folgenden Schritte: Betreiben eines Langes-Instruktionswort-(VLIW)-Prozessors; Betreiben einer Mehrzahl von Funktionseinheiten (220, 222); Unterteilen einer Registerdatei (216) in eine Mehrzahl von Registerdateisegmenten (224); Koppeln und Assoziieren einiger aus der Mehrzahl von Registerdateisegmenten mit einigen aus der Mehrzahl von Funktionseinheiten; Partitionieren der Registerdateisegmente in globale Register und lokale Register; Zugreifen auf die globalen Register durch die Mehrzahl von Funktionseinheiten; und Zugreifen auf die lokalen Register durch die Funktionseinheit, die mit dem die lokalen Register enthaltenden Registerdateisegment assoziiert ist.
  9. Verfahren nach Anspruch 8, ferner umfassend das Adressieren der lokalen Register und globalen Register mit Registeradressen in einem Adressraum, der für ein Registerdateisegment/Funktionseinheit-Paar definiert ist.
  10. Verfahren nach Anspruch 8, ferner umfassend das Adressieren der lokalen Register in einem Registerdateisegment (224) mit Registeradressen in einem lokalen Registerbereich außerhalb des globalen Registerbereiches, die in einem einzigen Registerdateisegment/Funktionseinheit-Paar zugeordnet sind.
  11. Verfahren nach Anspruch 8, ferner umfassend: das Einbeziehen von N physikalen Registern in die Registerdatei (216); das Duplizieren der physikalischen Register in M Registerdateisegmente (224), wobei die Registerdateisegmente eine verringerte Anzahl von Lese- und/oder Schreibports im Vergleich zu einer nicht duplizierten Registerdatei haben, aber jeweils mit derselben Zahl physikalischer Register.
  12. Verfahren nach Anspruch 11, ferner umfassend: das Partitionieren der Registerdateisegmente (224) in NG globale und NL lokale Registerdateien, wobei NG plus NL gleich N ist, das Betreiben der Registerdatei äquivalent mit einer Registerdatei mit insgesamt NG + (M * NL) Registern, die für die M Funktionseinheiten vorhanden sind, wobei die Anzahl der Adressbits zum Adressieren der ingesamt NG + (M * NL) Register gleich der Anzahl der Bits B ist, die zum Adressieren der N = 2B verwendet werden, das Adressieren der lokalen Register für einige der M Registerdateisegmente mit denselben B-Bit-Werten.
  13. Verfahren nach Anspruch 11, ferner umfassend das programmierbare Partitionieren der Registerdatei (216), so dass die Anzahl NG globaler Register und die Anzahl NL lokaler Register wählbar und variabel ist.
DE69907955T 1998-12-03 1999-12-03 Globale und locale registersegmentierung in einem vliw prozessor Expired - Fee Related DE69907955T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/204,585 US7114056B2 (en) 1998-12-03 1998-12-03 Local and global register partitioning in a VLIW processor
US204585 1998-12-03
PCT/US1999/028820 WO2000033178A1 (en) 1998-12-03 1999-12-03 Local and global register partitioning in a vliw processor

Publications (2)

Publication Number Publication Date
DE69907955D1 DE69907955D1 (de) 2003-06-18
DE69907955T2 true DE69907955T2 (de) 2004-05-19

Family

ID=22758540

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69907955T Expired - Fee Related DE69907955T2 (de) 1998-12-03 1999-12-03 Globale und locale registersegmentierung in einem vliw prozessor

Country Status (4)

Country Link
US (2) US7114056B2 (de)
EP (1) EP1137982B1 (de)
DE (1) DE69907955T2 (de)
WO (1) WO2000033178A1 (de)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6718457B2 (en) * 1998-12-03 2004-04-06 Sun Microsystems, Inc. Multiple-thread processor for threaded software applications
AU2001247324A1 (en) 2000-03-08 2001-09-17 Sun Microsystems, Inc. Vliw computer processing architecture with on-chip dynamic ram
US7080234B2 (en) 2000-03-08 2006-07-18 Sun Microsystems, Inc. VLIW computer processing architecture having the problem counter stored in a register file register
AU2001245520A1 (en) 2000-03-08 2001-09-17 Sun Microsystems, Inc. Vliw computer processing architecture having a scalable number of register files
US6895494B1 (en) 2000-06-26 2005-05-17 Texas Instruments Incorporated Sub-pipelined and pipelined execution in a VLIW
DE10051284A1 (de) * 2000-10-16 2002-04-25 Systemonic Ag Datenpfadanordnung
CN1214321C (zh) 2000-12-11 2005-08-10 皇家菲利浦电子有限公司 信号处理设备
US7127593B2 (en) * 2001-06-11 2006-10-24 Broadcom Corporation Conditional execution with multiple destination stores
US6986025B2 (en) * 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
US7861071B2 (en) * 2001-06-11 2010-12-28 Broadcom Corporation Conditional branch instruction capable of testing a plurality of indicators in a predicate register
US7853781B2 (en) * 2001-07-06 2010-12-14 Juniper Networks, Inc. Load balancing secure sockets layer accelerator
US7200662B2 (en) * 2001-07-06 2007-04-03 Juniper Networks, Inc. Integrated rule network management system
US7363353B2 (en) * 2001-07-06 2008-04-22 Juniper Networks, Inc. Content service aggregation device for a data center
US7228412B2 (en) * 2001-07-06 2007-06-05 Juniper Networks, Inc. Bufferless secure sockets layer architecture
US7068603B2 (en) * 2001-07-06 2006-06-27 Juniper Networks, Inc. Cross-bar switch
US7082464B2 (en) 2001-07-06 2006-07-25 Juniper Networks, Inc. Network management system
US7305492B2 (en) * 2001-07-06 2007-12-04 Juniper Networks, Inc. Content service aggregation system
US7149892B2 (en) * 2001-07-06 2006-12-12 Juniper Networks, Inc. Secure sockets layer proxy architecture
US6839808B2 (en) * 2001-07-06 2005-01-04 Juniper Networks, Inc. Processing cluster having multiple compute engines and shared tier one caches
US7908472B2 (en) * 2001-07-06 2011-03-15 Juniper Networks, Inc. Secure sockets layer cut through architecture
US7100022B1 (en) * 2002-02-28 2006-08-29 Mindspeed Technologies, Inc. Area and power efficient VLIW processor with improved speed
US7120780B2 (en) * 2002-03-04 2006-10-10 International Business Machines Corporation Method of renaming registers in register file and microprocessor thereof
AU2003214554A1 (en) 2002-04-18 2003-10-27 Koninklijke Philips Electronics N.V. Vliw processor with data spilling means
ATE472134T1 (de) * 2002-04-18 2010-07-15 Nxp Bv Prozessor mit mehrfachbefehlsausgabe
US8643659B1 (en) 2003-12-31 2014-02-04 3Dlabs Inc., Ltd. Shader with global and instruction caches
US20060288130A1 (en) * 2005-06-21 2006-12-21 Rajesh Madukkarumukumana Address window support for direct memory access translation
KR101083848B1 (ko) 2005-06-25 2011-11-15 인텔 코오퍼레이션 서비스 호출을 지원하는 장치, 시스템 및 방법
US8593465B2 (en) * 2007-06-13 2013-11-26 Advanced Micro Devices, Inc. Handling of extra contexts for shader constants
US8284664B1 (en) 2007-09-28 2012-10-09 Juniper Networks, Inc. Redirecting data units to service modules based on service tags and a redirection table
US10020037B2 (en) * 2007-12-10 2018-07-10 Intel Corporation Capacity register file
US20090168557A1 (en) * 2007-12-31 2009-07-02 Amit Agarwal Ultra wide voltage range register file circuit using programmable triple stacking
US20090198876A1 (en) * 2008-01-31 2009-08-06 Jimmy Kwok Lap Lai Programmable Command Sequencer
TWI401602B (zh) * 2009-07-06 2013-07-11 Nat Univ Tsing Hua 處理器之使用暫存器檔案的溢出方法
KR101738941B1 (ko) * 2010-03-23 2017-05-24 삼성전자주식회사 재구성 가능 어레이 및 재구성 가능 어레이의 제어 방법
US8904115B2 (en) * 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
KR101801920B1 (ko) 2010-12-17 2017-12-28 삼성전자주식회사 동적 클러스터링이 가능한 레지스터 파일 및 동적 클러스터링이 가능한 레지스터 파일을 이용한 재구성 가능 컴퓨팅 장치
US8336017B2 (en) * 2011-01-19 2012-12-18 Algotochip Corporation Architecture optimizer
US9258234B1 (en) 2012-12-28 2016-02-09 Juniper Networks, Inc. Dynamically adjusting liveliness detection intervals for periodic network communications
US8953460B1 (en) 2012-12-31 2015-02-10 Juniper Networks, Inc. Network liveliness detection using session-external communications
US8904073B2 (en) 2013-03-14 2014-12-02 Apple Inc. Coherence processing with error checking
KR101998278B1 (ko) * 2013-04-22 2019-10-01 삼성전자주식회사 회전 레지스터 사이즈의 동적 설정을 위한 스케줄링 장치 및 방법
US10146828B2 (en) * 2014-07-23 2018-12-04 Battelle Memorial Institute System and method of storing and analyzing information
US9769017B1 (en) 2014-09-26 2017-09-19 Juniper Networks, Inc. Impending control plane disruption indication using forwarding plane liveliness detection protocols
US10374936B2 (en) 2015-12-30 2019-08-06 Juniper Networks, Inc. Reducing false alarms when using network keep-alive messages
US10397085B1 (en) 2016-06-30 2019-08-27 Juniper Networks, Inc. Offloading heartbeat responses message processing to a kernel of a network device
US10691430B2 (en) * 2018-08-27 2020-06-23 Intel Corporation Latency scheduling mehanism
US11750441B1 (en) 2018-09-07 2023-09-05 Juniper Networks, Inc. Propagating node failure errors to TCP sockets

Family Cites Families (104)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3391615A (en) 1965-05-11 1968-07-09 Albemarle Paper Co Process and apparatus for the manufacture of a multi-ply bag
US3858206A (en) 1973-02-05 1974-12-31 Hughes Aircraft Co Method and means for operating an airborne switched array radar system
US4155119A (en) 1977-09-21 1979-05-15 Sperry Rand Corporation Method for providing virtual addressing for externally specified addressed input/output operations
US4228497A (en) 1977-11-17 1980-10-14 Burroughs Corporation Template micromemory structure for a pipelined microprogrammable data processing system
US4280177A (en) 1979-06-29 1981-07-21 International Business Machines Corporation Implicit address structure and method for accessing an associative memory device
US4502111A (en) 1981-05-29 1985-02-26 Harris Corporation Token generator
US4777588A (en) 1985-08-30 1988-10-11 Advanced Micro Devices, Inc. General-purpose register file optimized for intraprocedural register allocation, procedure calls, and multitasking performance
JPS63156236A (ja) 1986-12-19 1988-06-29 Toshiba Corp レジスタ装置
DE3726192A1 (de) * 1987-08-06 1989-02-16 Otto Mueller Stacksteuerung
US4980819A (en) 1988-12-19 1990-12-25 Bull Hn Information Systems Inc. Mechanism for automatically updating multiple unit register file memories in successive cycles for a pipelined processing system
US5113515A (en) 1989-02-03 1992-05-12 Digital Equipment Corporation Virtual instruction cache system using length responsive decoded instruction shifting and merging with prefetch buffer outputs to fill instruction buffer
US5155824A (en) 1989-05-15 1992-10-13 Motorola, Inc. System for transferring selected data words between main memory and cache with multiple data words and multiple dirty bits for each address
JP2655191B2 (ja) * 1989-07-05 1997-09-17 三菱電機株式会社 演算処理装置
US5179681A (en) * 1989-11-16 1993-01-12 Sun Microsystems, Inc. Method and apparatus for current window cache with switchable address and out cache registers
US5307477A (en) 1989-12-01 1994-04-26 Mips Computer Systems, Inc. Two-level cache memory system
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5197130A (en) 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor system
US5187791A (en) * 1990-01-26 1993-02-16 Apple Computer, Inc. Microprocessor with improved interrupt response with data saving dependent upon processor status using status flag
US5222240A (en) 1990-02-14 1993-06-22 Intel Corporation Method and apparatus for delaying writing back the results of instructions to a processor
US5185872A (en) * 1990-02-28 1993-02-09 Intel Corporation System for executing different cycle instructions by selectively bypassing scoreboard register and canceling the execution of conditionally issued instruction if needed resources are busy
US5448746A (en) 1990-05-04 1995-09-05 International Business Machines Corporation System for comounding instructions in a byte stream prior to fetching and identifying the instructions for execution
DE4129614C2 (de) 1990-09-07 2002-03-21 Hitachi Ltd System und Verfahren zur Datenverarbeitung
JPH04156613A (ja) 1990-10-20 1992-05-29 Fujitsu Ltd 命令バッファ装置
EP0483967A3 (en) 1990-10-29 1993-07-21 Sun Microsystems, Inc. Apparatus for increasing the number of registers available in a computer processor
US5301340A (en) 1990-10-31 1994-04-05 International Business Machines Corporation IC chips including ALUs and identical register files whereby a number of ALUs directly and concurrently write results to every register file per cycle
US5111431A (en) 1990-11-02 1992-05-05 Analog Devices, Inc. Register forwarding multi-port register file
US5268995A (en) 1990-11-21 1993-12-07 Motorola, Inc. Method for executing graphics Z-compare and pixel merge instructions in a data processor
JP2911278B2 (ja) 1990-11-30 1999-06-23 松下電器産業株式会社 プロセッサ
JP2693651B2 (ja) 1991-04-30 1997-12-24 株式会社東芝 並列プロセッサー
US5355335A (en) 1991-06-25 1994-10-11 Fujitsu Limited Semiconductor memory device having a plurality of writing and reading ports for decreasing hardware amount
JP3169639B2 (ja) 1991-06-27 2001-05-28 日本電気株式会社 半導体記憶装置
GB2263985B (en) 1992-02-06 1995-06-14 Intel Corp Two stage window multiplexors for deriving variable length instructions from a stream of instructions
JPH05233281A (ja) 1992-02-21 1993-09-10 Toshiba Corp 電子計算機
JPH06103068A (ja) 1992-09-18 1994-04-15 Toyota Motor Corp データ処理装置
US5367651A (en) * 1992-11-30 1994-11-22 Intel Corporation Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling
US5440714A (en) * 1992-12-14 1995-08-08 Industrial Technology Research Institute Method and system configuration for simplifying the decoding system for access to an register file with overlapping windows
WO1994027216A1 (en) 1993-05-14 1994-11-24 Massachusetts Institute Of Technology Multiprocessor coupling system with integrated compile and run time scheduling for parallelism
US5463748A (en) 1993-06-30 1995-10-31 Intel Corporation Instruction buffer for aligning instruction sets using boundary detection
EP0779577B1 (de) 1993-10-18 2002-05-22 VIA-Cyrix, Inc. Mikroprozessorpipelinesteuerung und Registerübersetzung
US5574928A (en) 1993-10-29 1996-11-12 Advanced Micro Devices, Inc. Mixed integer/floating point processor core for a superscalar microprocessor with a plurality of operand buses for transferring operand segments
EP0653706A2 (de) 1993-11-17 1995-05-17 International Business Machines Corporation Fehlerbehandlung und Korrektur in einem Rechnersystem
US5542059A (en) 1994-01-11 1996-07-30 Exponential Technology, Inc. Dual instruction set processor having a pipeline with a pipestage functional unit that is relocatable in time and sequence order
JP3676411B2 (ja) 1994-01-21 2005-07-27 サン・マイクロシステムズ・インコーポレイテッド レジスタファイル装置及びレジスタファイルアクセス方法
US5524263A (en) 1994-02-25 1996-06-04 Intel Corporation Method and apparatus for partial and full stall handling in allocation
US5577200A (en) 1994-02-28 1996-11-19 Intel Corporation Method and apparatus for loading and storing misaligned data on an out-of-order execution computer system
EP0676691A3 (de) 1994-04-06 1996-12-11 Hewlett Packard Co Vorrichtung zur Registersicherstellung und Umspeicherung in einem digitalen Rechner.
JP3547482B2 (ja) 1994-04-15 2004-07-28 株式会社日立製作所 情報処理装置
US5655132A (en) * 1994-08-08 1997-08-05 Rockwell International Corporation Register file with multi-tasking support
US5732250A (en) * 1994-09-15 1998-03-24 Intel Corporation Multi-function microprocessor wait state mechanism using external control line
US5592679A (en) * 1994-11-14 1997-01-07 Sun Microsystems, Inc. Apparatus and method for distributed control in a processor architecture
US5761475A (en) 1994-12-15 1998-06-02 Sun Microsystems, Inc. Computer processor having a register file with reduced read and/or write port bandwidth
US5640526A (en) 1994-12-21 1997-06-17 International Business Machines Corporation Superscaler instruction pipeline having boundary indentification logic for variable length instructions
TW448403B (en) 1995-03-03 2001-08-01 Matsushita Electric Ind Co Ltd Pipeline data processing device and method for executing multiple data processing data dependent relationship
US6101596A (en) 1995-03-06 2000-08-08 Hitachi, Ltd. Information processor for performing processing without register conflicts
US5669001A (en) 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US5822341A (en) 1995-04-06 1998-10-13 Advanced Hardware Architectures, Inc. Multiport RAM for use within a viterbi decoder
US6112019A (en) 1995-06-12 2000-08-29 Georgia Tech Research Corp. Distributed instruction queue
JP2931890B2 (ja) 1995-07-12 1999-08-09 三菱電機株式会社 データ処理装置
CN1264085C (zh) 1995-08-31 2006-07-12 英特尔公司 一种用于执行多媒体应用的操作的装置、系统和方法
US5642325A (en) 1995-09-27 1997-06-24 Philips Electronics North America Corporation Register file read/write cell
US5664154A (en) 1995-10-02 1997-09-02 Chromatic Research, Inc. M/A for optimizing retry time upon cache-miss by selecting a delay time according to whether the addressed location's dirty bit indicates a write-back
US6167503A (en) 1995-10-06 2000-12-26 Compaq Computer Corporation Register and instruction controller for superscalar processor
US5689674A (en) 1995-10-31 1997-11-18 Intel Corporation Method and apparatus for binding instructions to dispatch ports of a reservation station
US5713039A (en) 1995-12-05 1998-01-27 Advanced Micro Devices, Inc. Register file having multiple register storages for storing data from multiple data streams
US5983340A (en) 1995-12-07 1999-11-09 Conexant Systems, Inc. Microprocessor system with flexible instruction controlled by prior instruction
US5764943A (en) 1995-12-28 1998-06-09 Intel Corporation Data path circuitry for processor having multiple instruction pipelines
WO1997027537A2 (en) 1996-01-24 1997-07-31 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
JP3623840B2 (ja) * 1996-01-31 2005-02-23 株式会社ルネサステクノロジ データ処理装置及びマイクロプロセッサ
JP3658072B2 (ja) 1996-02-07 2005-06-08 株式会社ルネサステクノロジ データ処理装置およびデータ処理方法
US5828623A (en) 1996-02-23 1998-10-27 Integrated Device Technology, Inc. Parallel write logic for multi-port memory arrays
US5596735A (en) * 1996-02-23 1997-01-21 Cyrix Corporation Circuit and method for addressing segment descriptor tables
GB9604496D0 (en) * 1996-03-01 1996-05-01 Xilinx Inc Embedded memory for field programmable gate array
US5790826A (en) 1996-03-19 1998-08-04 S3 Incorporated Reduced register-dependency checking for paired-instruction dispatch in a superscalar processor with partial register writes
US5657291A (en) 1996-04-30 1997-08-12 Sun Microsystems, Inc. Multiport register file memory cell configuration for read operation
US5860113A (en) 1996-06-03 1999-01-12 Opti Inc. System for using a dirty bit with a cache memory
US5778248A (en) 1996-06-17 1998-07-07 Sun Microsystems, Inc. Fast microprocessor stage bypass logic enable
US5742557A (en) 1996-06-20 1998-04-21 Northern Telecom Limited Multi-port random access memory
US5778243A (en) 1996-07-03 1998-07-07 International Business Machines Corporation Multi-threaded cell for a memory
US5724422A (en) 1996-08-05 1998-03-03 Industrial Technology Research Institute Encrypting and decrypting instruction boundaries of instructions in a superscalar data processing system
WO1998006042A1 (en) 1996-08-07 1998-02-12 Sun Microsystems, Inc. Wide instruction unpack method and apparatus
US5996066A (en) 1996-10-10 1999-11-30 Sun Microsystems, Inc. Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions
US5911149A (en) * 1996-11-01 1999-06-08 Nec Electronics Inc. Apparatus and method for implementing a programmable shared memory with dual bus architecture
KR100228339B1 (ko) 1996-11-21 1999-11-01 김영환 읽기 포트와 쓰기 포트를 공유하는 다중포트 액세스 메모리
US5890000A (en) * 1996-12-04 1999-03-30 International Business Machines Corporation Cooperation of global and local register allocators for better handling of procedures
US5872963A (en) 1997-02-18 1999-02-16 Silicon Graphics, Inc. Resumption of preempted non-privileged threads with no kernel intervention
US5974538A (en) 1997-02-21 1999-10-26 Wilmot, Ii; Richard Byron Method and apparatus for annotating operands in a computer system with source instruction identifiers
US5946262A (en) 1997-03-07 1999-08-31 Mitsubishi Semiconductor America, Inc. RAM having multiple ports sharing common memory locations
AU6586898A (en) * 1997-03-21 1998-10-20 University Of Maryland Spawn-join instruction set architecture for providing explicit multithreading
US5835793A (en) 1997-05-02 1998-11-10 Texas Instruments Incorporated Device and method for extracting a bit field from a stream of data
JPH117773A (ja) 1997-06-18 1999-01-12 Sony Corp 半導体記憶装置
WO1999001811A1 (fr) 1997-07-03 1999-01-14 Seiko Epson Corporation Dispositif comprenant un circuit integre a semi-conducteur, dispositif a semi-conducteur et appareil electronique comprenant ce dispositif
JPH1131137A (ja) * 1997-07-11 1999-02-02 Nec Corp レジスタファイル
US6085289A (en) 1997-07-18 2000-07-04 International Business Machines Corporation Method and system for load data formatting and improved method for cache line organization
US6055606A (en) 1997-09-05 2000-04-25 Sandcraft, Inc. Writeback cache cell with a dual ported dirty bit cell and method for operating such a cache cell
US6076159A (en) * 1997-09-12 2000-06-13 Siemens Aktiengesellschaft Execution of a loop instructing in a loop pipeline after detection of a first occurrence of the loop instruction in an integer pipeline
US6055620A (en) 1997-09-18 2000-04-25 Lg Semicon Co., Ltd. Apparatus and method for system control using a self-timed asynchronous control structure
US6212544B1 (en) 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
KR100289386B1 (ko) 1997-12-27 2001-06-01 김영환 멀티 포트 에스램
US6009510A (en) 1998-02-06 1999-12-28 Ip First Llc Method and apparatus for improved aligned/misaligned data load from cache
US5881260A (en) 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
US6092175A (en) 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
US6317820B1 (en) 1998-06-05 2001-11-13 Texas Instruments Incorporated Dual-mode VLIW architecture providing a software-controlled varying mix of instruction-level and task-level parallelism
US6192384B1 (en) * 1998-09-14 2001-02-20 The Board Of Trustees Of The Leland Stanford Junior University System and method for performing compound vector operations
US6144609A (en) 1999-07-26 2000-11-07 International Business Machines Corporation Multiport memory cell having a reduced number of write wordlines

Also Published As

Publication number Publication date
WO2000033178A1 (en) 2000-06-08
US20070016758A1 (en) 2007-01-18
US20010042190A1 (en) 2001-11-15
EP1137982A1 (de) 2001-10-04
DE69907955D1 (de) 2003-06-18
US7114056B2 (en) 2006-09-26
EP1137982B1 (de) 2003-05-14
US7437534B2 (en) 2008-10-14

Similar Documents

Publication Publication Date Title
DE69907955T2 (de) Globale und locale registersegmentierung in einem vliw prozessor
DE69909829T2 (de) Vielfadenprozessor für faden-softwareanwendungen
DE60011797T2 (de) Ausführung von mehreren fäden in einem parallelprozessor
DE60006270T2 (de) Parallele prozessorarchitektur
DE60010907T2 (de) Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter
DE60316151T2 (de) Zugriff zum breiten speicher
DE69233412T2 (de) Vorrichtung und Rechnerprogrammprodukt zur Ausführung von Verzweigungsbefehlen
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102018005172A1 (de) Prozessoren, verfahren und systeme mit einem konfigurierbaren räumlichen beschleuniger
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE112013004751T5 (de) Prozessor mit mehreren Kernen, gemeinsam genutzter Kernerweiterungslogik und gemeinsam genutzten Kernerweiterungsnutzungsbefehlen
DE60131214T2 (de) Verfahren und Anordnung zur Freilassung von Funktionseinheiten in einem multithreaded VLIW-Prozessor
DE60316774T2 (de) Verkettung von mehrfadenprozessorkernen zur bearbeitung von datenpaketen
DE102015002383A1 (de) Verfahren und Vorrichtung zum Implementieren einer dynamischen Out-of-order-Prozessorpipeline
DE112015005597T5 (de) Verknüpfungsfähige Parallelausführungs-Schicht einer Ausgabewarteschlange für einen Prozessor
DE102014003671A1 (de) Prozessoren, verfahren und systeme zum entspannen der synchronisation von zugriffen auf einen gemeinsam genutzten speicher
DE102014003799A1 (de) Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
EP0825540B1 (de) Prozessor mit Pipelining-Aufbau
DE69732793T2 (de) Acht-bit-mikrokontroller mit risc-architektur
DE112016005909T5 (de) Einrichtung und verfahren zum beschleunigen von graphenanalyse
EP1599794B1 (de) Prozessor mit verschiedenartigen steuerwerken für gemeinsam genutzte ressourcen
DE102019117545A1 (de) Reduzierung von registerbankkonflikten für ausführungseinheiten eines multithread-prozessors

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee