DE69909829T2 - Vielfadenprozessor für faden-softwareanwendungen - Google Patents

Vielfadenprozessor für faden-softwareanwendungen Download PDF

Info

Publication number
DE69909829T2
DE69909829T2 DE69909829T DE69909829T DE69909829T2 DE 69909829 T2 DE69909829 T2 DE 69909829T2 DE 69909829 T DE69909829 T DE 69909829T DE 69909829 T DE69909829 T DE 69909829T DE 69909829 T2 DE69909829 T2 DE 69909829T2
Authority
DE
Germany
Prior art keywords
instruction
processor
independent
functional units
parallel
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 - Lifetime
Application number
DE69909829T
Other languages
English (en)
Other versions
DE69909829D1 (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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=22758067&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=DE69909829(T2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Application granted granted Critical
Publication of DE69909829D1 publication Critical patent/DE69909829D1/de
Publication of DE69909829T2 publication Critical patent/DE69909829T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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/3824Operand accessing
    • 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/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor

Description

  • TECHNISCHER BEREICH
  • Die vorliegende Erfindung betrifft eine Prozessorarchitektur. Die vorliegende Erfindung betrifft insbesondere eine Ein-Chip-Prozessorarchitektur mit Strukturen für Multiple-Thread-Betrieb.
  • TECHNISCHER HINTERGRUND
  • Für verschiedene Verarbeitungsanwendungen kann ein automatisiertes System mehrere Events oder Prozesse gleichzeitig handhaben. Ein einzelner Prozess wird als Steuerfaden oder "Thread" bezeichnet und ist die Grundeinheit des Betriebs einer unabhängigen dynamischen Aktion innerhalb des Systems. Ein Programm hat wenigstens einen Thread. Ein System, das parallele Operationen durchführt, hat gewöhnlich viele Threads, von denen einige vorübergehend und andere andauernd sind. Systeme, die auf mehrere Prozessoren verteilt ausgeführt werden, ermöglichen wahrhaft parallele Threads. Einprozessorsysteme können nur illusorische parallele Threads haben, die gewöhnlich durch eine Prozessorausführung mit Zeitscheiben erzielt werden können, die von einer Mehrzahl von Threads gemeinsam genutzt werden.
  • Zwei Beispiele für Multiple-Thread-Prozessoren sind im US-Patent Nr. 5,742,782 mit dem Titel "Processing apparatus for executing a plurality of VLIW threads in parallel" (Motohisa Ito et al.) und im US-Patent Nr. 5,574,939 mit dem Titel "Multiprocessor coupling system with integrated compile and run time scheduling parallelism" (Stephen W. Keckler, et al.) beschrieben. Ito et al. erzielen Multi-Thread-Ausführung durch Verwenden einer Mehrzahl von Befehlsdecoderteilen und einer entsprechenden Mehrzahl von Registerteilen, um Ausführungs-Threads zu organisieren und Ergebnisse für die jeweiligen Threads zu speichern. Die Befehlsdecoderteile bilden die Befehlsthreads zu langen Instruktionsworten (VLIW) und senden die langen Instruktionsworte durch einen einzigen Satz von Befehlsschedulerteilen und Ausführungsteilen, die unter den Threads zeitlich aufgeteilt sind. Keckler et al. führen einen Multi-Thread-Betrieb mit Hilfe von parallelen Prozessoren durch, die Operationen von einem Instruktionswort parallel ausführen können. Die parallelen Prozessoren werden von Rechenthreads gemeinsam genutzt und können Operationen von verschiedenen Instruktionswörtern unterschiedlicher Rechenthreads verarbeiten, so dass die Ausführung von Threads zwischen den mehreren Prozessoren verschachtelt ist. Ein Nachteil der Systeme von Ito et al. und von Keckler et al. besteht darin, dass nur ein Satz von Ausführungseinheiten von mehreren Threads gemeinsam genutzt wird, so dass die Befehle in mehreren Threads nicht gleichzeitig ausgeführt werden können.
  • Es wurden insbesondere einige Programmiersprachen entworfen, die Multiple-Threading unterstützen sollen. Eine solche Sprache ist die Programmiersprache JavaTM, die vorteilhafterweise mit einer abstrakten Rechenmaschine ausgeführt wird, der Java Virtual MachineTM. Eine Java Virtual MachineTM kann mehrere Ausführungsthreads gleichzeitig unterstützen. Die mehreren Threads führen unabhängig Java-Code aus, der auf Java-Werte und Objekte wirkt, die sich im gemeinsam genutzten Hauptspeicher befinden. Die mehreren Threads können mit mehreren Hardware-Prozessoren entweder durch einen Zeitscheibenbetrieb eines einzelnen Hardware-Prozessors oder einen Zeitscheibenbetrieb vieler Hardware-Prozessoren unterstützt werden. 1990 entwickelten Programmierer bei Sun Microsystems eine universelle Programmiersprache, die schließlich als "die JavaTM Programmiersprache" bekannt wurde. JavaTM, Sun, Sun Microsystems und das Sun Logo sind Warenzeichen oder eingetragene Warenzeichen von Sun Microsystems, Inc. in den Vereinigten Staaten und in anderen Ländern. Alle SPARC-Warenzeichen, einschließlich UltraSPARC I und UltraSPARC II, werden unter Lizenz gebraucht und sind Warenzeichen von SPARC International, Inc. in den Vereinigten Staaten und in anderen Ländern. SPARC-Warenzeichen tragende Produkte basieren auf einer von Sun Microsystems, Inc. entwickelten Architektur.
  • JavaTM unterstützt die Codierung von Programmen, die, obwohl verzahnt, deterministisches Verhalten zeigen, da sie Techniken und Strukturen zum Synchronisieren der verzahnten Aktivität von Threads beinhaltet. Um Threads zu synchronisieren, verwendet JavaTM Monitore, High-Level-Konstrukte, die nur einen einzigen Thread gleichzeitig zur Ausführung einer von dem Monitor geschützten Code-Region zulassen. Monitore arbeiten mit Sperrungen in Verbindung mit ausführbaren Objekten zum Steuern der Thread-Ausführung.
  • Ein Thread führt Code aus, indem er eine Folge von Aktionen durchführt. Ein Thread kann den Wert einer Variablen verwenden oder der Variablen einen neuen Wert zuweisen. Wenn zwei oder mehr verzahnte Threads auf eine gemeinsam genutzte Variable wirken, dann können die Aktionen auf der Variablen ein zeitabhängiges Ergebnis erzeugen, eine inhärente Folge der verzahnten Programmierung.
  • Jeder Thread hat einen Arbeitsspeicher, der Kopien der Werte von Masterkopien von Variablen vom Hauptspeicher speichern kann, den alle Threads gemeinsam nutzen. Ein Thread greift gewöhnlich auf eine Gemeinschaftsvariable zu, indem er eine Sperrung erhält und den Arbeitsspeicher des Threads entleert, wodurch gewährleistet wird, dass danach gemeinsam genutzte Werte vom Gemeinschaftsspeicher auf den Arbeitsspeicher des Threads geladen werden. Durch Freigeben einer Sperrung gewährleistet ein Thread, dass die vom Thread im Arbeitsspeicher geführten Werte zurück auf den Hauptspeicher geschrieben werden.
  • Mehrere Ausführungsregeln schränken die Reihenfolge ein, in der bestimmte Events auftreten können. So werden beispielsweise von einem Thread durchgeführte Aktionen vollkommen so geordnet, dass für beliebige zwei von einem Thread durchgeführte Aktionen eine Aktion auf die andere folgt. Vom Hauptspeicher für eine beliebige Variable durchgeführte Aktionen werden vollständig so geordnet, dass für beliebige zwei vom Hauptspeicher an derselben Variablen durchgeführte Aktionen eine Aktion auf die andere folgt. Vom Hauptspeicher für eine beliebige Sperrung durchgeführte Aktionen werden vollständig so geordnet, dass für beliebige zwei vom Hauptspeicher an derselben Sperrung durchgeführte Aktionen eine Aktion auf die andere folgt. Auch wird nicht zugelassen, dass eine Aktion auf sich selbst folgt. Threads interagieren nicht direkt miteinander, sondern kommunizieren nur über den gemeinschaftlichen Hauptspeicher.
  • Auch die Beziehungen zwischen den Aktionen eines Threads und den Hauptspeicheraktionen sind durch Regeln eingeschränkt. So wird beispielsweise jede Sperrung oder Entsperrung gemeinschaftlich von einem Thread und vom Hauptspeicher durchgeführt. Jede Ladeaktion durch einen Thread wird auf eindeutige Weise mit einer Leseaktion durch den Hauptspeicher gepaart, so dass die Ladeaktion auf die Leseaktion folgt. Jede Speicheraktion durch einen Thread wird auf eindeutige Weise mit einer Schreibaktion durch den Hauptspeicher gepaart, so dass auf die Schreibaktion die Speicheraktion folgt.
  • Eine Threading-Implementation verursacht ein gewisses Maß an Overhead. So erzeugt beispielsweise ein Einprozessorsystem Overhead durch Zeitscheibenunterteilung zwischen Threads. Zusätzliches Overhead entsteht beim Zuordnen und Handhaben des Zugriffs auf den Hauptspeicher und den lokalen Thread-Arbeitsspeicher.
  • Es besteht Bedarf an einer Prozessorarchitektur, die Multiple-Thread-Betrieb unterstützt und Overhead in Verbindung mit Multiple-Thread-Betrieb reduziert.
  • OFFENBARUNG DER ERFINDUNG
  • Ein Prozessor hat eine verbesserte Architektur für Multiple-Thread-Betrieb auf der Basis einer hoch parallelen Struktur mit mehreren unabhängigen parallelen Ausführungspfaden für eine parallele Ausführung über Threads und einen Mehrbefehls-Parallelpfad innerhalb eines Threads. Die mehreren unabhängigen parallelen Ausführungspfade beinhalten Funktionseinheiten, die einen Befehlssatz ausführen, der spezielle Datenhandhabungsbefehle beinhaltet, die in einer Multiple-Thread-Umgebung vorteilhaft sind.
  • Gemäß einer Ausgestaltung der vorliegenden Erfindung beinhaltet ein Universalprozessor zwei unabhängige Prozessorelemente mit einem einzelnen integrierten Schaltungschip. Die beiden unabhängigen Prozessorelemente führen vorteilhafterweise während des Multiple-Thread-Betriebs simultan zwei unabhängige Threads aus. Wenn nur ein einzelner Thread auf einem ersten der beiden Prozessorelemente ausgeführt wird, dann wird das zweite Prozessorelement vorteilhafterweise für Speicherbereinigung, Just-In-Time (JIT) Kompilation und dergleichen verwendet. Die unabhängigen Prozessorelemente sind zur Illustration VLIW-(lange Instruktionswort-) Prozessoren. So beinhaltet beispielsweise ein illustrativer Prozessor zwei unabhängige VLIW-Prozessorelemente, die jeweils eine Befehlsgruppe oder ein Befehlspaket ausführen, das bis zu vier Befehle beinhaltet, die anderweitig Subbefehle genannt werden. Jeder der Befehle in einer Befehlsgruppe läuft auf einer separaten Funktionseinheit.
  • Die beiden Threads laufen unabhängig auf den jeweiligen VLIW-Prozessorelementen ab, die jeweils eine Mehrzahl von leistungsstarken Funktionseinheiten aufweisen, die parallel laufen.
  • In der illustrativen Ausgestaltung haben die VLIW-Prozessorelemente vier Funktionseinheiten, d. h. drei Medienfunktionseinheiten und eine allgemeine Funktionseinheit. Alle illustrativen Medienfunktionseinheiten beinhalten einen Befehl; der sowohl eine Multiplikation als auch eine Addition in einem einzelnen Zyklus, entweder mit Gleitkomma oder mit Festkomma, ausführen.
  • Gemäß einem Aspekt der vorliegenden Erfindung hat ein einzelner unabhängiger paralleler Ausführungspfad Betriebseinheiten mit Befehlszuführungsblöcken und Befehlsvorbereitungsblöcken, Funktionseinheiten und einer Registerdatei, die von den Betriebseinheiten anderer Pfade der mehreren unabhängigen parallelen Ausführungspfade getrennt und unabhängig sind. Die Befehlszuführungsblöcke beinhalten einen separaten Befehls-Cache-Speicher für die einzelnen unabhängigen parallelen Ausführungspfade, aber die mehreren unabhängigen parallelen Ausführungspfade nutzen einen einzelnen Daten-Cache-Speicher gemeinsam, da mehrere Threads Daten zuweilen gemeinsam nutzen. Der Daten-Cache-Speicher ist ein Dualport-Speicher und lässt Datenzugriff in beiden Ausführungspfaden in einem einzigen Zyklus zu.
  • Zusätzlich zum Befehls-Cache-Speicher beinhalten die Befehlszuführungsblöcke in einem Ausführungspfad einen Befehlsausrichter und einen Befehlspuffer, die die volle Befehlsgruppe in Vorbereitung auf den Zugriff auf die Registerdatei präzise formatieren und ausrichten. Ein einzelner Ausführungspfad hat eine einzelne Registerdatei, die physikalisch in mehrere Registerdateisegmente unterteilt ist, die jeweils mit einer besonderen Funktionseinheit der mehreren Funktionseinheiten assoziiert sind. Zu einem beliebigen Zeitpunkt haben die Registerdateisegmente, die jeder Funktionseinheit zugewiesen sind, denselben Inhalt. Eine Multiport-Registerdatei ist typischerweise proportional zum Quadrat der Anzahl der Ports auf den von der Schaltung eingenommenen Bereich metallisch begrenzt. Man hat entdeckt, dass ein Prozessor mit einer Registerdateistruktur, die in eine Mehrzahl von separaten und unabhängigen Registerdateien unterteilt ist, eine Layout-Struktur mit einer verbesserten Layout-Effizienz bildet. Die Leseports der gesamten Registerdateistruktur sind unter den separaten und individuellen Registerdateien zugeordnet. Jede der separaten und individuellen Registerdateien hat Schreibports, die der Gesamtzahl der Schreibports in der gesamten Registerdateistruktur entsprechen. Schreibvorgänge werden völlig rundgesendet, so dass alle separaten und individuellen Registerdateien kohärent sind.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die Merkmale der beschriebenen Ausgestaltungen sind speziell in den beiliegenden Ansprüchen dargelegt. Ausgestaltungen der Erfindung in Bezug auf Struktur und Funktionsweise werden jedoch am besten anhand der nachfolgenden Beschreibung der Begleitzeichnungen verständlich.
  • 1 ist ein schematisches Blockdiagramm, das eine einzelne integrierte Schaltungschip- Implementation eines Prozessors gemäß einer Ausgestaltung der vorliegenden Erfindung veranschaulicht.
  • 2 ist ein schematisches Blockdiagramm des Kerns des Prozessors.
  • 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 der Funktionseinheiten im Prozessor zeigt.
  • 5 ist ein bildliches Schema eines Beispiels für eine Befehlsausführung unter einer Mehrzahl von Medienfunktionseinheiten.
  • 6 illustriert ein schematisches Blockdiagramm einer SRAM-Array, die für die geteilte Multiport-Registerdatei verwendet wird.
  • 7A und 7B zeigen jeweils ein schematisches Blockdiagramm und ein grafisches Diagramm zum Illustrieren der Registerdatei und eines Speicherarray-Einsatzes der Registerdatei.
  • 8 ist ein schematisches Blockdiagramm einer Anordnung der Registerdatei zu vier Registerdateisegmenten.
  • 9 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 ist ein schematisches Blockdiagramm, das einen Prozessor 100 mit einer verbesserten Architektur für Multiple-Thread-Betrieb auf der Basis einer hoch parallelen Struktur mit mehreren unabhängigen parallelen Ausführungspfaden illustriert, hierin als zwei Medienverarbeitungseinheiten 110 und 112 dargestellt. Die Ausführungspfade laufen parallel über Threads ab und beinhalten einen parallelen Mehrbefehlspfad innerhalb eines Threads. Die mehreren unabhängigen parallelen Ausführungspfade beinhalten Funktionseinheiten, die einen Befehlssatz mit speziellen Datenhandhabungsanweisungen ausführen, die in einer Multiple-Thread-Umgebung vorteilhaft sind.
  • Die Multiple-Thread-Architektur des Prozessors 100 ist für den Gebrauch beim Ausführen von Multiple-Thread-Anwendungen mit einer Sprache wie der JavaTM-Sprache vorteilhaft, die unter einem Multiple-Thread-Betriebssystem auf einer Java Virtual MachineTM mit mehreren Threads läuft. Der illustrative Prozessor 100 beinhaltet zwei unabhängige Prozessorelemente, die Medienverarbeitungseinheiten 110 und 112, die zwei unabhängige parallele Ausführungspfade bilden. Eine Sprache, die mehrere Threads unterstützt, wie z.B. die Programmiersprache JavaTM, erzeugt zwei Threads, die jeweils in den beiden parallelen Ausführungspfaden mit sehr wenig Overhead ablaufen. Die speziellen Anweisungen, die vom Multiple-Thread-Prozessor ausgeführt werden, beinhalten Befehle für den Zugriff auf Arrays, sowie Befehle, die Speicherbereinigung unterstützen.
  • Eine einzelne integrierte Schaltungschip-Implementation eines Prozessors 100 beinhaltet eine Speicherschnittstelle 102, einen Geometrie-Expander 104, die beiden Medienverarbeitungseinheiten 110 und 112, einen gemeinsam genutzten Daten-Cache-Speicher 106 sowie mehrere Schnittstellensteuerungen. 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 über latenzarme Kommunikationskanäle hoher Bandbreite untereinander und eng mit dem Prozessorkern verbunden, um mehrere Datenströme mit hoher Bandbreite 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 Direct 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 eine schnelle gemeinsame Datennutzung und eliminiert die Notwendigkeit für ein komplexes, fehleranfälliges Cache-Kohärenz-Protokoll zwischen den Medienverarbeitungseinheiten 110 und 112.
  • Der UPA-Controller 116 hat eine kundenspezifische Schnittstelle, die einen geeigneten Ausgleich zwischen Rechen- und Graphiksubsystemen hoher Leistung erzielt. Der UPA-Controller ist eine Cache-kohärente Prozessor-Speicher-Verbindung. Er erzielt mehrere vorteilhafte Eigenschaften, einschließlich skalierbarer Bandbreite durch die Unterstützung mehrerer Busverbindungen für Daten und Adressen, Pakete, die für eine verbesserte Busauslastung geschaltet sind, höhere Bandbreite und präzise Interrupt-Verarbeitung. Der UPA-Controller führt latenzarme Speicherzugriffe mit Hochkapazitätspfaden zum Speicher durch. Der UPA-Controller beinhaltet eine gepufferte Crossbar-Speicherschnittstelle zum Erhöhen der Bandbreite und zum Verbessern der Skalierbarkeit. Der UPA-Controller unterstützt Hochleistungsgraphik mit Zweizyklus-Einzelwort-Schreibvorgängen auf der 64-Bit-UPA-Verbindung. Die UPA-Verbindungsarchitektur nutzt paketgeschaltete Punkt-zu-Punkt-Meldungen von einem zentralisierten Systemcontroller, um die Cache-Speicherkohärenz aufrechtzuerhalten. Paketschaltung verbessert die Bandbreitenauslastung auf dem Bus, indem die Latenzen wegfallen, die gewöhnlich mit transaktionsgestützten Designs assoziiert sind.
  • Der PCI-Controller 120 wird als primäre System-E/A-Schnittstelle zum Verbinden von standardmäßigen hochvolumigen, kostenarmen Peripheriegeräten eingesetzt, aber es können auch andere Standardschnittstellen verwendet werden. Der PCI-Bus überträgt effektiv Daten zwischen Peripheriegeräten hoher Bandbreite und Peripheriegeräten niedriger Bandbreite, wie z.B. CD-ROM-Spieler, DVD-Spieler und Digitalkameras.
  • Zwei Medienverarbeitungseinheiten 110 und 112 sind in einem einzigen integrierten Schaltungschip untergebracht, um eine Ausführungsumgebung unter Nutzung von Thread-Level-Parallelismus zu unterstützen, 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-Ebene genutzt, da Parallelismus bei mehr als vier, oder sogar zwei, Befehlen pro Zyklus in 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 Befehlen. Ein typischer "Universal"-Verarbeitungscode hat einen Befehlslevel-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 auf zwei unabhängige Threads und erzielt möglicherweise das Zweifache der Leistung eines Prozessors mit denselben Betriebsmitteln und derselben Taktrate, der jedoch mit traditionellem Non-Thread-Parallelismus arbeitet.
  • Thread-Level-Parallelismus ist besonders für JavaTM Anwendungen nützlich, die immer mehrere Ausführungsthreads haben. JavaTM Methoden mit "suspend", "resume", "sleep" und dergleichen beinhalten effektive Unterstützung für Programmcode mit mehreren Threads. Darüber hinaus sind Bibliotheken der JavaTM Klasse Thread-sicher und fördern so Parallelismus. 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 aktuellen Anwendung verwendet wird. Im illustrativen System wendet der Compiler Optimierungen auf der Basis von Profil-Feedback-Informationen "beim Laufen" an, während der Ausführungscode dynamisch modifiziert wird, um die Ausführung bei jedem aufeinander folgenden Lauf zu verbessern. So könnte beispielsweise auf einer ersten Medienverarbeitungseinheit 110 eine "Speicherbereinigung" durchgeführt werden, bei der Objekte kopiert oder Zeigerinformationen gesammelt werden, während auf der anderen Medienverarbeitungseinheit 112 die Anwendung abläuft.
  • 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 in einer nachrichtenbasierten kohärenten Architektur gebildet und auf demselben Chip untergebracht werden können, um mehrere Ausführungsthreads zu verarbeiten. So entsteht im Prozessor 100 eine Begrenzung der Anzahl 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.
  • Der Prozessor 100 ist ein Universalprozessor, der die Medienverarbeitungseinheiten 110 und 112, zwei unabhängige Prozessorelemente in einem einzelnen integrierten Schaltungschip beinhaltet. Die beiden unabhängigen Prozessorelemente 110 und 112 führen vorteilhafterweise zwei unabhängige Threads parallel während des Multiple-Thread-Betriebs aus. Wenn nur ein einziger Thread auf dem Prozessor 100 abläuft, dann führt eines der beiden Prozessorelemente den Thread aus, das zweite Prozessorelement wird vorteilhafterweise für Speicherbereinigung, Just-in-Time (JIT) Kompilation und dergleichen verwendet. Im veranschaulichten Prozessor 100 sind die unabhängigen Prozessorelemente 110 und 112 VLIW-(langes Instruktionswort)-Prozessoren. So beinhaltet z.B. ein illustrativer Prozessor 100 zwei unabhängige VLIW-Prozessorelemente, die jeweils eine Befehlsgruppe oder ein Befehlspaket ausführen, das bis zu vier Befehle beinhaltet. Jeder der Befehle in einer Befehlsgruppe läuft auf einer separaten Funktionseinheit.
  • Der Gebrauch eines VLIW-Prozessors reduziert vorteilhafterweise die Komplexität, da keine verschiedenen Strukturen wie Scheduler oder Umordnung-Puffer verwendet zu werden brauchen, die in superskalaren Maschinen zur Handhabung von Datenabhängigkeiten verwendet werden. Ein VLIW-Prozessor verwendet typischerweise Software-Planung und Software-Prüfung, um Datenkonflikte und -abhängigkeiten zu prüfen, was Hardware-Steuerschaltungen erheblich vereinfacht.
  • Die beiden Threads laufen unabhängig auf den jeweiligen VLIW-Prozessorelementen 110 und 112, die jeweils eine Mehrzahl von leistungsstarken Funktionseinheiten aufweisen, die parallel ablaufen. In der in 2 gezeigten illustrativen Ausgestaltung haben die VLIW-Prozessorelemente 110 und 112 vier Funktionseinheiten einschließlich drei Medienfunktionseinheiten 220 und einer allgemeinen Funktionseinheit 222. Alle illustrativen Medienfunktionseinheiten 220 beinhalten einen Befehl, der eine Multiplikation und eine Addition in einem einzelnen Zyklus ausführt, entweder als Gleitkomma- oder als Festkommaoperation. Somit kann ein Prozessor mit zwei VLIW-Prozessorelementen zwölf Gleitkommaoperationen in jedem Zyklus ausführen. Mit einer Ausführungsrate von 500 MHz läuft der Prozessor beispielsweise mit einer 6 Gigaflop-Rate, selbst ohne Berücksichtigung eines Betriebs der allgemeinen Funktionseinheit.
  • 2 zeigt ein schematisches Blockdiagramm des Kerns des Prozessors 100. Die Medienverarbeitungseinheiten 110 und 112 beinhalten jeweils einen Befehls-Cache-Speicher 210, einen Befehlsausrichter 212, einen Befehlspuffer 214, eine Pipeline-Steuereinheit 226, eine geteilte Registerdatei 216, eine Mehrzahl von Ausführungseinheiten sowie eine Lade-/Speichereinheit 218. Im illustrativen Prozessor 100 verwenden die Medienverarbeitungseinheiten 110 und 112 eine Mehrzahl von Ausführungseinheiten zum Ausführen von Befehlen. Die Ausführungseinheiten für eine Medienverarbeitungseinheit 110 beinhalten drei Medienfunktionseinheiten (MFU) 220 und eine allgemeine Funktionseinheit (GFU) 222.
  • Ein individueller unabhängiger paralleler Ausführungspfad 110 oder 112 hat Betriebseinheiten mit Befehlszuführungsblöcken und Befehlsvorbereitungsblöcken, Funktionseinheiten 220 und 222 und eine Registerdatei 216, die von den Betriebseinheiten anderer Pfade der mehreren unabhängigen parallelen Ausführungspfade separat und unabhängig sind. Die Befehlszuführungsblöcke beinhalten einen separaten Befehls-Cache-Speicher 210 für die individuellen unabhängigen parallelen Ausführungspfade, aber die mehreren unabhängigen parallelen Ausführungspfade nutzen einen einzelnen Daten-Cache-Speicher 106 gemeinsam, da mehrere Threads zuweilen Daten gemeinsam nutzen. Der Daten-Cache-Speicher 106 ist ein Dualport-Speicher und erlaubt einen Datenzugriff auf beide Ausführungspfade 110 und 112 in einem einzigen Zyklus. Die gemeinsame Nutzung des Daten-Cache-Speichers 106 von unabhängigen Prozessorelementen 110 und 112 vereinfacht vorteilhafterweise die Datenhandhabung, so dass kein Cache-Koordinationsprotokoll und das beim Steuern des Protokolls auftretende Overhead nötig ist.
  • Zusätzlich zum Befehls-Cache-Speicher 210 beinhalten die Befehlszuführungsblöcke in einem Ausführungspfad den Befehlsausrichter 212 und den Befehlspuffer 214, die eine volle Befehlsgruppe von vier Befehlen in Vorbereitung auf einen Zugriff auf die Registerdatei 216 präzise formatieren und ausrichten. Ein einzelner Ausführungspfad hat eine einzelne Registerdatei 216, die physikalisch in mehrere Registerdateisegmente unterteilt ist, die jeweils mit einer bestimmten Funktionseinheit der mehreren Funktionseinheiten assoziiert sind. Zu jedem Zeitpunkt haben die den einzelnen Funktionseinheiten zugeordneten Registerdateisegmente denselben Inhalt. Eine Multiport-Registerdatei ist gewöhnlich proportional zum Quadrat der Anzahl der Ports auf den von der Schaltung belegten Bereich metallisch begrenzt. Der Prozessor 100 hat eine Registerdateistruktur, die in eine Mehrzahl von separaten und unabhängigen Registerdateien unterteilt ist, um eine Layout-Struktur mit verbesserter Layout-Effizienz zu bilden. Die Leseports der gesamten Registerdateistruktur 216 sind unter den separaten und einzelnen Registerdateien zugeordnet. Jede der separaten und einzelnen Registerdateien hat Schreibports, die der Gesamtzahl der Schreibports in der gesamten Registerdateistruktur entsprechen. Schreibvorgänge werden völlig rundgesendet, so dass alle separaten und einzelnen Registerdateien kohärent sind.
  • Die Medienfunktionseinheiten 220 sind mehrere Einzelbefehls-Mehrdatenpfad- (MSIMD) Medienfunktionseinheiten. Jede der Medienfunktionseinheiten 220 kann parallele 16-Bit-Komponenten verarbeiten. Verschiedene parallele 16-Bit-Operationen liefern die Einzelbefehls-Mehrdatenpfad-Fähigkeit für den Prozessor 100, einschließlich Addieren, Mehrfachaddieren, Verschieben, Vergleichen und dergleichen. Die Medienfunktionseinheiten 220 arbeiten in Kombination als eng gekoppelte digitale Signalprozessoren (DSPs). Jede Medienfunktionseinheit 220 hat einen separaten und individuellen Subbefehlsstrom, aber alle drei Medienfunktionseinheiten 220 laufen synchron, so dass die Subbefehle Pipeline-Stufen im Gleichschritt durchlaufen.
  • Die allgemeine Funktionseinheit 222 ist ein RISC-Prozessor, der arithmetische Logikeinheit-(ALU) Operationen, Lade- und Speichervorgänge, Verzweigungen und verschiedene spezialisierte und esotere Funktionen wie z.B. parallele Leistungsoperationen, reziproke Quadratwwzelvorgänge und viele. andere ausführen kann. Die allgemeine Funktionseinheit 222, unterstützt weniger gemeinsame parallele Vorgänge als der parallele reziproke Quadratwwzelbefehl.
  • Der illustrative Befehls-Cache-Speicher 210 ist Zweiwegsatz-assoziativ, hat eine Kapazität von 16 KB und beinhaltet Hardware-Unterstützung zur Aufrechterhaltung von Kohärenz, um dynamische Optimierungen durch selbstmodifizierenden Code zuzulassen. Mit Hilfe von Software wird angezeigt, dass der Befehlsspeicher modifiziert wird, wenn Modifikationen auftreten. Die 16-KB-Kapazität ist für die Durchführung von Graphikschleifen, anderen Multimedia-Tasks oder – Prozessen sowie JavaTM Universalcode geeignet. Kohärenz wird mit Hardware aufrechterhalten, die nichtzuordnenden Write-through-Cache-Speicherbetrieb unterstützt. Selbstmodifizierender Code wird durch die explizite Verwendung des "auf Befehlsraum speichern" Befehls store2i unterstützt. Software benutzt den Befehl store2i zur Aufrechterhaltung von Kohärenz mit dem Befehls-Cache-Speicher 210, so dass die Befehls-Cache-Speicher 210 nicht bei jeder von der Medienverarbeitungseinheit 110 ausgegebenen Einspeicher-Operation gesnoopt zu werden brauchen.
  • Die Pipeline-Steuereinheit 226 ist zwischen dem Befehlspuffer 214 und den Funktionseinheiten geschaltet und plant die Übertragung von Befehlen zu den Funktionseinheiten. Die Pipeline-Steuereinheit 226 empfängt auch Statussignale von den Funktionseinheiten und der Lade-/Speichereinheit 218 und benutzt die Statussignale zum Durchführen mehrerer Steuerfunktionen. Die Pipeline-Steuereinheit 226 verwaltet ein Scoreboard und erzeugt Verzögerungen und Bypass-Steuerungen. Die Pipeline-Steuereinheit 226 erzeugt auch Traps und verwaltet Spezialregister.
  • Jede Medienverarbeitungseinheit 110 und 112 beinhaltet eine geteilte Registerdatei 216, eine einzelne Logikregisterdatei mit 128 32-Bit-Registern. Die geteilte Registerdatei 216 ist in eine Mehrzahl von Registerdateisegmenten 224 unterteilt, um eine Multiport-Struktur zu bilden, die zum Reduzieren der integrierten Schaltungschipfläche und zum Reduzieren des Zugriffszeit repliziert wird. 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) im 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 zugewiesene lokale Register können auf andere Funktionseinheiten nicht zugreifen und sie sind für diese nicht "sichtbar".
  • Die Medienverarbeitungseinheiten 110 und 112 sind hoch strukturierte Rechenblöcke, die softwaremäßig geplante Datenrechenvorgänge mit festen, deterministischen und relativ kurzen Befehlslatenzen ausführen, Betriebseigenschaften, die eine Vereinfachung im Hinblick auf Funktion und Zykluszeit ergeben. Die Betriebseigenschaften unterstützen mehrere Befehle, die über einen pragmatischen VLIW-Ansatzausgegeben werden, der Hardware-Verriegelungen vermeidet, um Software zu berücksichtigen, die Operationen nicht ordnungsgemäß plant. Solche Hardware-Verriegelungen sind typischerweise komplex, fehleranfällig und erzeugen mehrere kritische Pfade. Ein VLIW-Instruktionswort beinhaltet immer einen Befehl, der in der allgemeinen Funktionseinheit (GFU) 222 ausgeführt wird, und null bis drei Befehle, die in den Medienfunktionseinheiten (MFU) 220 ausgeführt werden. Ein MFU-Befehlsfeld im VLIW-Instruktionswort beinhaltet ein Operationscode-(Opcode) Feld, drei Source-Register (oder unmittelbare) Felder und ein Zielregisterfeld.
  • Befehle werden der Reihe nach im Prozessor 100 ausgeführt, aber Ladevorgänge können in Bezug auf andere Befehle und mit Bezug auf andere Ladevorgänge außer der Reihe erfolgen, so dass Ladevorgänge im Befehlsstrom aufwärts bewegt werden können, so dass die Daten vom Hauptspeicher gestreamt werden können. Das Ausführungsmodell eliminiert den Gebrauch und die Overhead-Ressourcen eines Befehlsfensters, Reservationsstationen, einem Umordnungspuffer oder anderen Blöcken zum Anordnen von Befehlen. Der Wegfall der Befehlsordnungsstrukturen und Overhead-Ressourcen ist äußerst vorteilhaft, da die eliminierten Blöcke gewöhnlich einen großen Teil eines integrierten Schaltungschips einnehmen. So nehmen die eliminierten Blöcke beispielsweise 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 Ausfiü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 Befehle beinhalten Ladevorgänge, Speichervorgänge, Arithmetik- und Logik-(ALU)-Befehle sowie Verzweigungsbefehle, 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 Befehlspakets oder einer Befehlsgruppe von dem Zeitpunkt, an dem der Befehl in eine Funktionseinheit eintritt, bis zu dem Zeitpunkt, an dem der Befehl fertig ist und das Ergebnis vorliegt. Ein VLIW-Befehlspaket enthält einen GFU-Befehl und null bis drei MFU-Befehle. Die Quell- und Zielregister aller Befehle in einem eingehenden VLIW-Befehlspaket 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 Befehlsausgabe, um für eine ausreichende Anzahl von Zyklen anzuhalten, bis das Ergebnis zur Verfügung steht. Wenn der Referenzierbefehl, der 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 eines load-Befehls, für den es im Daten-Cache-Speicher 106 einen Hit gibt, dauert der Halt möglicherweise nur einen einzigen Zyklus. Wenn der Referenzierbefehl 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.
  • Der Scoreboard verwaltet automatisch Ladeverzögerungen, die während eines Lade-Hits auftreten. In einer illustrativen Ausgestaltung gehen alle Ladevorgänge in den Scoreboard, um die Software-Planung zu vereinfachen und NOPs im Befehlsstrom 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 Divisionsbefehle idiv, fdiv, reziproke Quadratwurzelbefehle frecsqrt, precsqrt und Leistungsbefehle 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 des Befehls erzeugt.
  • Der illustrative Prozessor 100 hat eine Render-Rate von mehr als fünfzig Millionen Dreiecken pro Sekunde, ohne Berücksichtigung von Betriebssystem-Overhead. 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 einer 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 Befehlslevel-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 Prozessorbefehlen, die in den Medienfunktionseinheiten 220 und den allgemeinen Funktionseinheiten 222 ablaufen, und empfängt die Ergebnisse der Befehlsausfü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 und der allgemeinen Funktionseinheit 222 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.
  • Eine große gesamte 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 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 verzahnt 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.
  • 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 Cachespeicherfä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 32 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 Register 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 32 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 z.B. Videoverarbeitung, Bildverarbeitung, digitale Signalverarbeitungsschleifen (DSP), Sprachverarbeitung sowie Spracherkennungsalgorithmen.
  • 5 zeigt ein vereinfachtes bildliches Schema eines Beispiels für eine Befehlsausführung unter einer Mehrzahl von Medienfunktionseinheiten 220. Durch verschiedene interne Funktionsblöcke innerhalb einer ersten individuellen Medienfunktionseinheit erzeugte Ergebnisse sind innerhalb der ersten Medienfunktionseinheit 510 unmittelbar zugängig, sind aber global nur für andere Medienfunktionseinheiten 512 und 514 und für die allgemeine Funktionseinheit Zyklen nach Eintritt des Befehls in die erste Medienfunktionseinheit 510 zugängig, unabhängig von der tatsächlichen Latenz des Befehls. So können innerhalb einer Funktionseinheit ablaufende Befehle softwaremäßig so geplant werden, dass sie sofort ausgeführt werden, unter Berücksichtigung der tatsächlichen Latenz des Befehls. Im Gegensatz dazu wird erwartet, dass Software, die die Ausführung von Befehlen in verschiedenen Funktionseinheiten plant, die Latenz von fünf Zyklen berücksichtigt. In dem Diagramm repräsentierten die schraffierten Bereiche die Stufe, in der die Pipeline eine Ausführung eines Befehls vollendet und fünf Ergebniswerte erzeugt. Ein Ergebnis steht in einer Funktionseinheit erst dann zur Verfügung, wenn eine letzte schraffierte Stufe beendet ist. In dem Beispiel haben Medienverarbeitungseinheitsbefehle drei verschiedene Latenzen – vier Zyklen für Befehle wie z.B. fmuladd und fadd, zwei Zyklen für Befehle wie pmuladd und einen Zyklus für Befehle wie padd und xor.
  • Eine interne Bypass-Logik in einer Medienfunktionseinheit 220 leitet zwar Ergebnisse zu Ausführungseinheiten innerhalb derselben Medienfunktionseinheit 220 weiter, aber die interne Bypass-Logik erfasst keine inkorrekten Versuche, ein Ergebnis zu referenzieren, bevor es zur Verfügung steht.
  • Software, die Befehle plant, für die eine Abhängigkeit zwischen einer bestimmten Medienfunktionseinheit, z.B. 512, und anderen Medienfunktionseinheiten 510 und 514 oder zwischen der jeweiligen Medienfunktionseinheit 512 und der allgemeinen Funktionseinheit 222 auftritt, soll die Fünf-Zyklus-Latenz zwischen dem Eintritt eines Befehls in die Medienfunktionseinheit 512 und der Pipeline-Dauer von fünf Zyklen berücksichtigen.
  • 6 zeigt ein schematisches Blockdiagramm einer Ausgestaltung der Multiport-Registerdatei 216. Eine Mehrzahl von Leseadressbussen RA1 bis RAN führt Leseadressen, die jeweils an Decoderports 616–1 bis 616–N angelegt werden. Decoder-Schaltungen sind in der Fachwelt gut bekannt, und es können beliebige von mehreren Implementationen als Decoder-Ports 616–1 bis 616–N verwendet werden. Wenn eine Adresse an einen der Decoder-Ports 616-1 bis 616-N angelegt wird, dann wird die Adresse decodiert, und ein Leseadresssignal wird von einem Decoder-Port 616 zu einem Register in einer Speicherzellen-Array 618 übertragen. Daten von der Speicherzellenarray 618 werden mit Ausgangsdatentreibern 622 ausgegeben. Daten werden zu und von der Speicherzellenarray 618 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 7A und 7B zeigen jeweils ein schematisches Blockdiagramm und ein Grafikdiagramm, die die Registerdatei 216 und einen Speicherarray-Einsatz 710 illustrieren. Die Registerdatei 216 ist mit vier Funktionseinheiten 720, 722, 724 und 726 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 730 und vier Schreibports 732. Die zwölf Leseports 730 werden illustrativ drei Ports zugeordnet, die mit jeder der vier Funktionseinheiten verbunden sind. Die vier Schreibports 732 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 740, die teilweise in der in 7B illustrierten Einfügung 710 dargestellt ist, und beinhaltet eine Mehrzahl von Wortleitungen 744 und Bitleitungen 746. Die Wortleitungen 744 und Bitleitungen 746 sind einfach ein Satz von Leitungen, die Transistoren (nicht dargestellt) in der Speicherarray 740 verbinden. Die Wortleitungen 744 wählen Register, so dass eine bestimmte Wortleitung ein Register der Registerdatei 216 selektiert. Die Bitleitungen 746 sind ein zweiter Satz von Leitungen, die die Transistoren in der Speicherarray 740 verbinden. Die Wortleitungen 744 und Bitleitungen 746 sind typischerweise im rechten Winkel zueinander angeordnet. In der illustrativen Ausgestaltung sind die Wortleitungen 744 und die Bitleitungen 746 aus Metall konstruiert, das in verschiedenen Ebenen ausgelegt ist, wie z.B eine Metallschicht 2 für die Wortleitungen 744 und eine Metallschicht 3 für die Bitleitungen 746. 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 illustrativen Ausgestaltung beschrieben sind, wie im Bereich Halbleiterherstellung bekannt ist. In dem illustrativen Beispiel werden die Wortleitungen 744 um einen Abstand von etwa 1 um voneinander getrennt, und die Bitleitungen 746 sind um etwa 1 um 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 730, 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 732 adressieren Register in der Registerdatei mit vier Wortleitungen 744 und vier Bitleitungen 746, die mit jeder Zelle verbunden sind. Die vier Wortleitungen 744 adressieren eine Zelle, und die vier Bitleitungen 746 führen Daten zu der Zelle.
  • Wenn also die illustrative Registerdatei 216 auf konventionelle Weise mit zwölf Leseports 730 und vier Schreibports 732 für insgesamt sechzehn Ports ausgelegt wäre und die Ports hätten einen Abstand von 1 um, 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 224 unterteilt. 8 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 730, 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 732 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 744 und der Bitleitungen 746, 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 9 illustriert ein vereinfachtes schematisches Timing-Diagramm den zeitlichen Ablauf der Prozessor-Pipeline 900. Die Pipeline 900 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 910, während der der Prozessor 100 Befehle vom 16 KB Zweiwegsatz-assoziativen Anweisungs-Cache-Speicher 210 abruft. Die abgerufenen Befehle werden im Befehlsausrichter 212 ausgerichtet und in einer Befehlsstufe 912, einer zweiten Stufe der Einleitungsstufen, zum Befehlspuffer 214 weitergeleitet. Der Ausrichtungsvorgang positioniert die Befehle 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 914 der Einleitungsstufen, wird das abgerufene und ausgerichtete VLIW-Befehlspaket decodiert, und das Scoreboard (nicht dargestellt) wird gelesen und parallel aktualisiert. Die vier Registerdateisegmente 310, 312, 314 und 316 enthalten jeweils entweder Gleitkommadaten oder ganzzahlige Daten. Die Registerdateien werden in der Decodier-(D)-Stufe gelesen.
  • Nach der Decodierstufe 914 werden die Ausführungsstufen durchgeführt. Die beiden Endstufen beinhaltet eine Trap-Handling-Stufe 960 und eine Write-back-Stufe 962, während der Ergebnisdaten in die geteilte Registerdatei 216 zurückgeschrieben werden.
  • Die illustrative Ausgestaltung erörtert zwar speziell Vorteile, die bei der Verwendung der Programmiersprache JavaTM mit dem beschriebenen System erzielt werden, aber es wird auch jede beliebige geeignete Programmiersprache unterstützt. Andere Programmiersprachen, die Multiple-Threading unterstützen, werden im Allgemeinen vorteilhafterweise in dem beschriebenen System verwendet. Die illustrative Ausgestaltung erörtert zwar auch speziell Vorteile, die mit der Verwendung von Java Virtual MachinesTM mit dem beschriebenen System erzielt werden, aber es kann auch jede beliebige geeignete Verarbeitungsmaschine unterstützt werden. Weitere Verarbeitungsmaschinen, die Multiple-Threading unterstützen, werden im Allgemeinen vorteilhafterweise in dem beschriebenen System verwendet.
  • Ferner hat die illustrative Registerdatei zwar eine Bitleitung pro Port, aber in anderen Ausgestaltungen können mehr Bitleitungen für einen Port zugewiesen werden. Die beschriebenen Wortleitungen und Bitleitungen sind aus einem Metall gebildet. In anderen Beispielen können andere leitende Materialien wie z. B. dotiertes Polysilicium für Verbindungen verwendet werden. Die beschriebene Registerdatei verwendet einendige Lese- und Schreibvorgänge, so dass eine einzelne Bitleitung pro Bit und pro Port verwendet werden kann. In anderen Prozessoren können andere Lese- und Schreibvorgänge mit zweiendigen Leseverstärkern verwendet werden, so dass zwei Bitleitungen pro Bit und pro Port zugewiesen 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 erheblich belastet. Somit werden die mit der beschriebenen Registerdateistruktur erzielten Vorteile für einen Speicher mit differentialen Lese- und Schreibvorgängen verstärkt. Der Abstand zwischen Bitleitungen und Wortleitungen wurde mit etwa 1 um beschrieben. In einigen Prozessoren kann der Abstand größer als 1 μm sein. In anderen Prozessoren liegt der Abstand zwischen Leitungen bei weniger als 1 μm.

Claims (15)

  1. Prozessor (100), der Folgendes umfasst: eine Mehrzahl von unabhängigen Prozessorelementen (110, 112) in einem einzelnen , integrierten Schaltungschip, der eine jeweilige Mehrzahl von Threads verzahnt während einer mehrere Threads umfassenden Operation ausführen kann, wobei: die Prozessorelemente Funktionseinheiten (220, 222) aufweisen, die fest einigen der Prozessorelementen zugeordnet sind, so dass die Mehrzahl von Threads in den Funktionseinheiten parallel und gleichzeitig ausgeführt werden kann.
  2. Prozessor nach Anspruch 1, bei dem: die Mehrzahl von unabhängigen Prozessorelementen (110, 112) einer jeweiligen Mehrzahl von unabhängigen parallelen Ausführungspfaden entspricht, die parallel über eine Mehrzahl von Threads ablaufen, wobei die Ausführungspfade einen parallelen Multibefehlspfad in einem Thread beinhalten; und die unabhängigen parallelen Ausführungspfade Funktionseinheiten (220, 222) beinhalten, die einen Befehlssatz ausführen, der spezielle Datenverarbeitungsbefehle beinhaltet, die eine Multiple-Thread-Ausführungsumgebung unterstützen, wobei: die Funktionseinheiten fest zwischen den unabhängigen parallelen Ausführungspfaden zugeordnet sind, so dass eine Mehrzahl von Threads in den Funktionseinheiten gleichzeitig ausgeführt werden kann.
  3. Prozessor nach Anspruch 2, bei dem: die Mehrzahl von unabhängigen parallelen Befehlspfaden als eine Mehrzahl von Prozessoren (110, 112) in mehrere Threads umfassenden Applikationen unter Verwendung einer JAVATM-Programmiersprache abläuft, die unter einem mehrere Threads umfassenden Betriebssystem auf einer mehrere Threads umfassenden Java Virtual MachineTM laufen.
  4. Prozessor nach Anspruch 2, bei dem: die Mehrzahl von unabhängigen parallelen Befehlspfaden (110, 112) als eine Mehrzahl von Prozessoren (110, 112) in mehrere Threads umfassenden Applikationen unter Verwendung einer JAVA-Programmiersprache abläuft, die eine Mehrzahl von Threads erzeugt, die jeweils in der Mehrzahl von unabhängigen parallelen Befehlspfaden mit einem Minimum an Threading-Overhead ablaufen.
  5. Prozessor nach Anspruch 2, bei dem: die Mehrzahl von unabhängigen parallelen Befehlspfaden als eine Mehrzahl von Prozessoren (110, 112) in mehrere Threads umfassenden Applikationen unter Verwendung einer JAVATM-Programmiersprache abläuft, die spezielle Befehle zum Zugreifen auf Arrays und Befehle unterstützen, die Speicherbereinigung unterstützen.
  6. Prozessor nach Anspruch 1, bei dem: die Mehrzahl unabhängiger Prozessorelemente (110, 112) VLIW-(langes Instruktionswort) Prozessorelemente sind, die eine Mehrzahl von parallel verzahnt arbeitenden Funktionseinheiten (220, 222) beinhalten, wobei die Funktionseinheiten Medienfunktionseinheiten aufweisen, die als digitale Signalprozessoren arbeiten, und eine allgemeine Funktionseinheit, und die Medienfunktionseinheiten einen Befehl zum Ausführen einer Multiplizieroperation und einer Additionsoperation in einem einzigen Zyklus ausführen können, wobei die Muliplizieroperation und die Additionsoperationen Gleitkomma- oder Festkommaoperationen sind.
  7. Prozessor nach Anspruch 1, bei dem: die Mehrzahl von unabhängigen Prozessorelementen (110, 112) in einem einzigen verzahnt ablaufenden Parallelprozessor (100) Folgendes aufweist: eine Befehlszuführungslogik (210); eine Befehlsvorbereitungslogik (212), die mit der Befehlszuführungslogik gekoppelt ist; wobei die Mehrzahl der Funktionseinheiten (220, 222) mit der Befehlszuführungslogik gekoppelt ist und mit der Befehlsvorbereitungslogik gekoppelt ist; eine Registerdatei (216), die mit der Mehrzahl von Funktionseinheiten gekoppelt ist, mit der Befehlszuführungslogik gekoppelt ist und mit der Befehlsvorbereitungslogik gekoppelt ist; wobei die Befehlszuführungslogik, die Befehlsvorbereitungslogik, die Mehrzahl von Funktionseinheiten und die Registerdatei für ein erstes unabhängiges Prozessorelement von der Befehlszuführungslogik, der Befehlsvorbereitungslogik, der Mehrzahl von Funktionseinheiten und der Registerdatei eines zweiten unabhängigen Prozessorelementes unabhängig und separat sind; und einen Daten-Cache-Speicher (106), der mit der Mehrzahl unabhängiger Prozessorelemente gekoppelt ist und von diesen gemeinsam genutzt wird.
  8. Prozessor nach Anspruch 7, bei dem: eine Befehlszuführungslogik einen Befehls-Cache-Speicher (210) für ein erstes unabhängiges Prozessorelement beinhaltet, das von einem Befehls-Cache-Speicher (210) der Befehlszuführungslogik eines zweiten unabhängigen Prozessorelementes unabhängig und separat ist.
  9. Prozessor nach Anspruch 7, bei dem: der Daten-Cache-Speicher (106) mehrtorig ist und Datenzugriffe in Ausführungspfaden der Mehrzahl von unabhängigen Prozessorelementen in einem einzigen Zyklus gewährt.
  10. Prozessor nach Anspruch 7, bei dem: der Daten-Cache-Speicher (106) eine reduzierte Datenverarbeitungslogik hat, die von der gemeinsamen Nutzung des Daten-Cache-Speichers unter der Mehrzahl von unabhängigen Prozessorelementen resultiert, was die Notwendigkeit für ein Cache-Koordinationsprotokoll und Overhead-Logik vermeidet, die sonst beim Steuern des Koordinationsprotokolls gegeben wäre.
  11. Prozessor nach Anspruch 7, bei dem: eine Befehlsvorbereitungslogik einen Ausrichter (212) und einen Befehlspuffer (214) für ein erstes unabhängiges Prozessorelement beinhaltet, das von einem Ausrichter (212) und Befehlspuffer (214) der Befehlszuführungslogik eines zweiten unabhängigen Prozessorelementes unabhängig und separat ist, wobei der Ausrichter eine volle Befehlsgruppe in Vorbereitung auf einen Zugriff auf die Registerdatei aurichtet.
  12. Verfahren zum Betreiben eines Prozessors (100), umfassend die folgenden Schritte: paralleles Ausführen einer Mehrzahl von Ausführungsthreads in einer Mehrzahl von unabhängigen parallelen Ausführungspfaden (110, 112) über eine Mehrzahl von Threads; innerhalb eines Threads Ausführen einer Mehrzahl von Befehlen in einem parallelen Multibefehlspfad in einem aus der Mehrzahl von unabhängigen parallelen Ausführungspfaden; und Ausführen eines Befehlssatzes in einer Mehrzahl von Funktionseinheiten (220, 222), wobei die Funktionseinheiten fest zwischen den unabhängigen parallelen Ausführungspfaden zugeordnet sind, so dass die Mehrzahl von Threads gleichzeitig und parallel ausgeführt werden kann, wobei der Befehlssatz spezielle Datenverarbeitungsbefehle beinhaltet, die eine Multiple-Thread-Umgebung unterstützen.
  13. Verfahren nach Anspruch 12, ferner umfassend das Ausführen der Befehlsthreads in der Mehrzahl von unabhängigen parallelen Befehlspfaden (110, 112) als eine Mehrzahl von Prozessoren in mehrere Threads umfassenden Applikationen unter Verwendung einer JavaTM-Programmiersprache, die unter einem mehrere Threads umfassenden Betriebssystem auf einer mehrere Threads umfassenden Java Virtual MachineTM läuft.
  14. Verfahren nach Anspruch 12, ferner umfassend das Ausführen der Befehlsthreads in der Mehrzahl von unabhängigen parallelen Befehlspfaden (110, 112) als eine Mehrzahl von Prozessoren in mehrere Threads umfassenden Applikationen unter Verwendung einer JavaTM-Programmiersprache; und Erzeugen einer Mehrzahl von Threads, die jeweils in der Mehrzahl von unabhängigen parallelen Befehlspfaden mit einem Minimum an Threading-Overhead ablaufen.
  15. Verfahren nach Anspruch 12, ferner umfassend den Schritt des Ausführens der Befehlsthreads in der Mehrzahl von unabhängigen parallelen Befehlspfaden (110, 112) als eine Mehrzahl von Prozessoren in mehrere Threads umfassenden Applikationen unter Verwendung einer Java-Programmiersprache; und Zugreifen auf Arrays und Befehle mittels spezieller Befehle, die Speicherbereinigung unterstützen.
DE69909829T 1998-12-03 1999-12-03 Vielfadenprozessor für faden-softwareanwendungen Expired - Lifetime DE69909829T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/204,480 US6718457B2 (en) 1998-12-03 1998-12-03 Multiple-thread processor for threaded software applications
US204480 1998-12-03
PCT/US1999/028821 WO2000033185A2 (en) 1998-12-03 1999-12-03 A multiple-thread processor for threaded software applications

Publications (2)

Publication Number Publication Date
DE69909829D1 DE69909829D1 (de) 2003-08-28
DE69909829T2 true DE69909829T2 (de) 2004-05-27

Family

ID=22758067

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69909829T Expired - Lifetime DE69909829T2 (de) 1998-12-03 1999-12-03 Vielfadenprozessor für faden-softwareanwendungen

Country Status (4)

Country Link
US (4) US6718457B2 (de)
EP (1) EP1137984B1 (de)
DE (1) DE69909829T2 (de)
WO (1) WO2000033185A2 (de)

Families Citing this family (88)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6075935A (en) * 1997-12-01 2000-06-13 Improv Systems, Inc. Method of generating application specific integrated circuits using a programmable hardware architecture
JP3541669B2 (ja) * 1998-03-30 2004-07-14 松下電器産業株式会社 演算処理装置
US6718457B2 (en) * 1998-12-03 2004-04-06 Sun Microsystems, Inc. Multiple-thread processor for threaded software applications
US7587582B1 (en) 1998-12-03 2009-09-08 Sun Microsystems, Inc. Method and apparatus for parallel arithmetic operations
US7546444B1 (en) 1999-09-01 2009-06-09 Intel Corporation Register set used in multithreaded parallel processor architecture
US6968469B1 (en) 2000-06-16 2005-11-22 Transmeta Corporation System and method for preserving internal processor context when the processor is powered down and restoring the internal processor context when processor is restored
AU2001281162A1 (en) * 2000-08-16 2002-02-25 Sun Microsystems, Inc. General purpose processor with graphics/media support
US7681018B2 (en) * 2000-08-31 2010-03-16 Intel Corporation Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set
US7127588B2 (en) * 2000-12-05 2006-10-24 Mindspeed Technologies, Inc. Apparatus and method for an improved performance VLIW processor
US8762581B2 (en) * 2000-12-22 2014-06-24 Avaya Inc. Multi-thread packet processor
CA2346762A1 (en) * 2001-05-07 2002-11-07 Ibm Canada Limited-Ibm Canada Limitee Compiler generation of instruction sequences for unresolved storage devices
US6954846B2 (en) * 2001-08-07 2005-10-11 Sun Microsystems, Inc. Microprocessor and method for giving each thread exclusive access to one register file in a multi-threading mode and for giving an active thread access to multiple register files in a single thread mode
AU2003219666A1 (en) * 2002-01-15 2003-07-30 Chip Engines Reconfigurable control processor for multi-protocol resilient packet ring processor
US7500240B2 (en) * 2002-01-15 2009-03-03 Intel Corporation Apparatus and method for scheduling threads in multi-threading processors
US6934951B2 (en) * 2002-01-17 2005-08-23 Intel Corporation Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section
US7437724B2 (en) * 2002-04-03 2008-10-14 Intel Corporation Registers for data transfers
JP4704659B2 (ja) 2002-04-26 2011-06-15 株式会社日立製作所 記憶装置システムの制御方法および記憶制御装置
US7958289B2 (en) 2002-08-08 2011-06-07 International Business Machines Corporation Method and system for storing memory compressed data onto memory compressed disks
JP2004110367A (ja) * 2002-09-18 2004-04-08 Hitachi Ltd 記憶装置システムの制御方法、記憶制御装置、および記憶装置システム
US7263593B2 (en) 2002-11-25 2007-08-28 Hitachi, Ltd. Virtualization controller and data transfer control method
JP2004220450A (ja) * 2003-01-16 2004-08-05 Hitachi Ltd ストレージ装置、その導入方法、及びその導入プログラム
US7210127B1 (en) 2003-04-03 2007-04-24 Sun Microsystems Methods and apparatus for executing instructions in parallel
JP2005018193A (ja) * 2003-06-24 2005-01-20 Hitachi Ltd ディスク装置のインタフェースコマンド制御方法ならびに計算機システム
US7203811B2 (en) * 2003-07-31 2007-04-10 International Business Machines Corporation Non-fenced list DMA command mechanism
JP4386694B2 (ja) * 2003-09-16 2009-12-16 株式会社日立製作所 記憶システム及び記憶制御装置
JP4598387B2 (ja) * 2003-09-17 2010-12-15 株式会社日立製作所 記憶システム
US7219201B2 (en) 2003-09-17 2007-05-15 Hitachi, Ltd. Remote storage disk control device and method for controlling the same
JP4307202B2 (ja) * 2003-09-29 2009-08-05 株式会社日立製作所 記憶システム及び記憶制御装置
US7600221B1 (en) 2003-10-06 2009-10-06 Sun Microsystems, Inc. Methods and apparatus of an architecture supporting execution of instructions in parallel
JP4307964B2 (ja) 2003-11-26 2009-08-05 株式会社日立製作所 アクセス制限情報設定方法および装置
US7380086B2 (en) * 2003-12-12 2008-05-27 International Business Machines Corporation Scalable runtime system for global address space languages on shared and distributed memory machines
US8643659B1 (en) 2003-12-31 2014-02-04 3Dlabs Inc., Ltd. Shader with global and instruction caches
JP2005202893A (ja) * 2004-01-19 2005-07-28 Hitachi Ltd 記憶デバイス制御装置、ストレージシステム、プログラムを記録した記録媒体、情報処理装置、及びストレージシステムの制御方法
JP4391265B2 (ja) 2004-02-26 2009-12-24 株式会社日立製作所 ストレージサブシステムおよび性能チューニング方法
US20050210472A1 (en) * 2004-03-18 2005-09-22 International Business Machines Corporation Method and data processing system for per-chip thread queuing in a multi-processor system
US7665070B2 (en) 2004-04-23 2010-02-16 International Business Machines Corporation Method and apparatus for a computing system using meta program representation
EP1622009A1 (de) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM-Architektur und Systeme
JP4646574B2 (ja) * 2004-08-30 2011-03-09 株式会社日立製作所 データ処理システム
EP1794979B1 (de) * 2004-09-10 2017-04-12 Cavium, Inc. Selektive datenstrukturnachbildung
US7941585B2 (en) * 2004-09-10 2011-05-10 Cavium Networks, Inc. Local scratchpad and data caching system
US7594081B2 (en) 2004-09-10 2009-09-22 Cavium Networks, Inc. Direct access to low-latency memory
JP2006127028A (ja) * 2004-10-27 2006-05-18 Hitachi Ltd 記憶システム及び記憶制御装置
US7503368B2 (en) 2004-11-24 2009-03-17 The Boeing Company Composite sections for aircraft fuselages and other structures, and methods and systems for manufacturing such sections
US9003168B1 (en) * 2005-02-17 2015-04-07 Hewlett-Packard Development Company, L. P. Control system for resource selection between or among conjoined-cores
US8732368B1 (en) 2005-02-17 2014-05-20 Hewlett-Packard Development Company, L.P. Control system for resource selection between or among conjoined-cores
US8713286B2 (en) * 2005-04-26 2014-04-29 Qualcomm Incorporated Register files for a digital signal processor operating in an interleaved multi-threaded environment
US7814487B2 (en) * 2005-04-26 2010-10-12 Qualcomm Incorporated System and method of executing program threads in a multi-threaded processor
WO2006128112A2 (en) * 2005-05-25 2006-11-30 Terracotta, Inc. Clustering server providing virtual machine data sharing
US7644258B2 (en) * 2005-08-29 2010-01-05 Searete, Llc Hybrid branch predictor using component predictors each having confidence and override signals
US8296550B2 (en) * 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US8275976B2 (en) * 2005-08-29 2012-09-25 The Invention Science Fund I, Llc Hierarchical instruction scheduler facilitating instruction replay
US9176741B2 (en) * 2005-08-29 2015-11-03 Invention Science Fund I, Llc Method and apparatus for segmented sequential storage
US20070083735A1 (en) * 2005-08-29 2007-04-12 Glew Andrew F Hierarchical processor
US7454599B2 (en) * 2005-09-19 2008-11-18 Via Technologies, Inc. Selecting multiple threads for substantially concurrent processing
US20080282034A1 (en) * 2005-09-19 2008-11-13 Via Technologies, Inc. Memory Subsystem having a Multipurpose Cache for a Stream Graphics Multiprocessor
US7734897B2 (en) * 2005-12-21 2010-06-08 Arm Limited Allocation of memory access operations to memory access capable pipelines in a superscalar data processing apparatus and method having a plurality of execution threads
US8301870B2 (en) * 2006-07-27 2012-10-30 International Business Machines Corporation Method and apparatus for fast synchronization and out-of-order execution of instructions in a meta-program based computing system
CN100456230C (zh) * 2007-03-19 2009-01-28 中国人民解放军国防科学技术大学 超长指令字与单指令流多数据流融合的计算群单元
US7975130B2 (en) * 2008-02-20 2011-07-05 International Business Machines Corporation Method and system for early instruction text based operand store compare reject avoidance
US9501448B2 (en) * 2008-05-27 2016-11-22 Stillwater Supercomputing, Inc. Execution engine for executing single assignment programs with affine dependencies
EP2289001B1 (de) * 2008-05-30 2018-07-25 Advanced Micro Devices, Inc. Lokale und globale gemeinsame benutzung von daten
US8255905B2 (en) * 2008-06-27 2012-08-28 Microsoft Corporation Multi-threaded processes for opening and saving documents
US20100191911A1 (en) * 2008-12-23 2010-07-29 Marco Heddes System-On-A-Chip Having an Array of Programmable Processing Elements Linked By an On-Chip Network with Distributed On-Chip Shared Memory and External Shared Memory
US8428930B2 (en) * 2009-09-18 2013-04-23 International Business Machines Corporation Page mapped spatially aware emulation of a computer instruction set
US8301434B2 (en) 2009-09-18 2012-10-30 International Buisness Machines Corporation Host cell spatially aware emulation of a guest wild branch
US8949106B2 (en) * 2009-09-18 2015-02-03 International Business Machines Corporation Just in time compiler in spatially aware emulation of a guest computer instruction set
US9158566B2 (en) 2009-09-18 2015-10-13 International Business Machines Corporation Page mapped spatially aware emulation of computer instruction set
US8447583B2 (en) * 2009-09-18 2013-05-21 International Business Machines Corporation Self initialized host cell spatially aware emulation of a computer instruction set
US8617049B2 (en) * 2009-09-18 2013-12-31 Ethicon Endo-Surgery, Inc. Symmetrical drive system for an implantable restriction device
US8522000B2 (en) * 2009-09-29 2013-08-27 Nvidia Corporation Trap handler architecture for a parallel processing unit
US8904115B2 (en) * 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
US8756589B2 (en) 2011-06-14 2014-06-17 Microsoft Corporation Selectable dual-mode JIT compiler for SIMD instructions
KR101996641B1 (ko) * 2012-02-06 2019-07-04 삼성전자주식회사 메모리 오버레이 장치 및 방법
US8898376B2 (en) 2012-06-04 2014-11-25 Fusion-Io, Inc. Apparatus, system, and method for grouping data stored on an array of solid-state storage elements
US9626189B2 (en) 2012-06-15 2017-04-18 International Business Machines Corporation Reducing operand store compare penalties
US9563425B2 (en) 2012-11-28 2017-02-07 Intel Corporation Instruction and logic to provide pushing buffer copy and store functionality
US9317294B2 (en) 2012-12-06 2016-04-19 International Business Machines Corporation Concurrent multiple instruction issue of non-pipelined instructions using non-pipelined operation resources in another processing core
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
JP6183049B2 (ja) * 2013-08-15 2017-08-23 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US9501243B2 (en) 2013-10-03 2016-11-22 Cavium, Inc. Method and apparatus for supporting wide operations using atomic sequences
US9390023B2 (en) * 2013-10-03 2016-07-12 Cavium, Inc. Method and apparatus for conditional storing of data using a compare-and-swap based approach
US9792098B2 (en) * 2015-03-25 2017-10-17 International Business Machines Corporation Unaligned instruction relocation
CN108885543A (zh) * 2016-01-26 2018-11-23 Icat有限责任公司 具有可重新配置的算法流水线核和算法匹配流水线编译器的处理器
EP3654172A1 (de) * 2017-04-19 2020-05-20 Shanghai Cambricon Information Technology Co., Ltd Fusionierter vektormultiplizierer und verfahren unter verwendung desselben
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US10922258B2 (en) * 2017-12-22 2021-02-16 Alibaba Group Holding Limited Centralized-distributed mixed organization of shared memory for neural network processing
US11062077B1 (en) * 2019-06-24 2021-07-13 Amazon Technologies, Inc. Bit-reduced verification for memory arrays
CN110750232B (zh) * 2019-10-17 2023-06-20 电子科技大学 一种基于sram的并行乘加装置

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5197130A (en) * 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor 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
US5307449A (en) * 1991-12-20 1994-04-26 Apple Computer, Inc. Method and apparatus for simultaneously rendering multiple scanlines
US5706415A (en) * 1991-12-20 1998-01-06 Apple Computer, Inc. Method and apparatus for distributed interpolation of pixel shading parameter values
US5345541A (en) * 1991-12-20 1994-09-06 Apple Computer, Inc. Method and apparatus for approximating a value between two endpoint values in a three-dimensional image rendering device
US5517603A (en) * 1991-12-20 1996-05-14 Apple Computer, Inc. Scanline rendering device for generating pixel values for displaying three-dimensional graphical images
US5553305A (en) * 1992-04-14 1996-09-03 International Business Machines Corporation System for synchronizing execution by a processing element of threads within a process using a state indicator
WO1994027216A1 (en) * 1993-05-14 1994-11-24 Massachusetts Institute Of Technology Multiprocessor coupling system with integrated compile and run time scheduling for parallelism
EP0627682B1 (de) * 1993-06-04 1999-05-26 Sun Microsystems, Inc. Gleitkommaprozessor für einen hochleistungsfähigen dreidimensionalen Graphikbeschleuniger
JP3676411B2 (ja) 1994-01-21 2005-07-27 サン・マイクロシステムズ・インコーポレイテッド レジスタファイル装置及びレジスタファイルアクセス方法
JP3547482B2 (ja) * 1994-04-15 2004-07-28 株式会社日立製作所 情報処理装置
AUPM704294A0 (en) * 1994-07-25 1994-08-18 Canon Information Systems Research Australia Pty Ltd Method and apparatus for the creation of images
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
US5742796A (en) * 1995-03-24 1998-04-21 3Dlabs Inc. Ltd. Graphics system with color space double buffering
US5712799A (en) 1995-04-04 1998-01-27 Chromatic Research, Inc. Method and structure for performing motion estimation using reduced precision pixel intensity values
US5689674A (en) * 1995-10-31 1997-11-18 Intel Corporation Method and apparatus for binding instructions to dispatch ports of a reservation station
US5764943A (en) 1995-12-28 1998-06-09 Intel Corporation Data path circuitry for processor having multiple instruction pipelines
JP2000515270A (ja) * 1996-01-24 2000-11-14 サン・マイクロシステムズ・インコーポレイテッド ネットワークまたはローカルメモリから受け取った命令セットの実行のための二重命令セットプロセッサ
US5657291A (en) 1996-04-30 1997-08-12 Sun Microsystems, Inc. Multiport register file memory cell configuration for read operation
US5778248A (en) 1996-06-17 1998-07-07 Sun Microsystems, Inc. Fast microprocessor stage bypass logic enable
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US5778243A (en) * 1996-07-03 1998-07-07 International Business Machines Corporation Multi-threaded cell for a memory
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
US6137497A (en) * 1997-05-30 2000-10-24 Hewlett-Packard Company Post transformation clipping in a geometry accelerator
US6658447B2 (en) * 1997-07-08 2003-12-02 Intel Corporation Priority based simultaneous multi-threading
US6052128A (en) * 1997-07-23 2000-04-18 International Business Machines Corp. Method and apparatus for clipping convex polygons on single instruction multiple data computers
US6052129A (en) * 1997-10-01 2000-04-18 International Business Machines Corporation Method and apparatus for deferred clipping of polygons
US6212544B1 (en) * 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
US6092175A (en) * 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
JP3983394B2 (ja) * 1998-11-09 2007-09-26 株式会社ルネサステクノロジ 幾何学処理プロセッサ
US7114056B2 (en) * 1998-12-03 2006-09-26 Sun Microsystems, Inc. Local and global register partitioning in a VLIW processor
US6718457B2 (en) * 1998-12-03 2004-04-06 Sun Microsystems, Inc. Multiple-thread processor for threaded software applications
US6343348B1 (en) * 1998-12-03 2002-01-29 Sun Microsystems, Inc. Apparatus and method for optimizing die utilization and speed performance by register file splitting
US6279100B1 (en) * 1998-12-03 2001-08-21 Sun Microsystems, Inc. Local stall control method and structure in a microprocessor
US6615338B1 (en) * 1998-12-03 2003-09-02 Sun Microsystems, Inc. Clustered architecture in a VLIW processor
US6321325B1 (en) * 1998-12-03 2001-11-20 Sun Microsystems, Inc. Dual in-line buffers for an instruction fetch unit
US6249861B1 (en) * 1998-12-03 2001-06-19 Sun Microsystems, Inc. Instruction fetch unit aligner for a non-power of two size VLIW instruction
US7117342B2 (en) * 1998-12-03 2006-10-03 Sun Microsystems, Inc. Implicitly derived register specifiers in a processor
US6205543B1 (en) * 1998-12-03 2001-03-20 Sun Microsystems, Inc. Efficient handling of a large register file for context switching
US6714197B1 (en) * 1999-07-30 2004-03-30 Mips Technologies, Inc. Processor having an arithmetic extension of an instruction set architecture
US6671796B1 (en) * 2000-02-25 2003-12-30 Sun Microsystems, Inc. Converting an arbitrary fixed point value to a floating point value

Also Published As

Publication number Publication date
WO2000033185A2 (en) 2000-06-08
US20050010743A1 (en) 2005-01-13
US20060282650A1 (en) 2006-12-14
US7042466B1 (en) 2006-05-09
DE69909829D1 (de) 2003-08-28
WO2000033185A3 (en) 2000-10-12
EP1137984B1 (de) 2003-07-23
US20010042188A1 (en) 2001-11-15
US6718457B2 (en) 2004-04-06
EP1137984A2 (de) 2001-10-04

Similar Documents

Publication Publication Date Title
DE69909829T2 (de) Vielfadenprozessor für faden-softwareanwendungen
DE112009000741B4 (de) Vektorbefehle zum Ermöglichen von effizienter Synchronisation und parallelen Reduktionsoperationen
Kaeli et al. Heterogeneous computing with OpenCL 2.0
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
DE102018005172A1 (de) Prozessoren, verfahren und systeme mit einem konfigurierbaren räumlichen beschleuniger
DE102018130441A1 (de) Einrichtung, Verfahren und Systeme mit konfigurierbarem räumlichem Beschleuniger
DE69826700T2 (de) Kompilerorientiertes gerät zur parallelkompilation, simulation und ausführung von rechnerprogrammen und hardwaremodellen
DE102018005181A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Leistungs-, Richtigkeits- und Energiereduktionsmerkmalen
DE60316151T2 (de) Zugriff zum breiten speicher
DE102009012766A1 (de) Ein Zugriffssperrenvorgang, um atomare Aktualisierungen zu einem geteilten Speicher zu ermöglichen
DE102008005515A1 (de) Virtuelle Architektur und virtueller Befehlssatz für die Berechnung paralleler Befehlsfolgen
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE112013004751T5 (de) Prozessor mit mehreren Kernen, gemeinsam genutzter Kernerweiterungslogik und gemeinsam genutzten Kernerweiterungsnutzungsbefehlen
DE112005000706T5 (de) Verfahren und System zum Bereitstellen von Multi-Threading auf Nutzerebene
DE102014003671A1 (de) Prozessoren, verfahren und systeme zum entspannen der synchronisation von zugriffen auf einen gemeinsam genutzten speicher
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE102012212639A1 (de) Temporäre SIMT-Ausführungs-Optimierung
DE102013114072A1 (de) System und Verfahren zum Hardware-Scheduling von indexierten Barrieren
DE102012221502A1 (de) System und Verfahren zum Durchführen von gestalteter-Speicherzugriff-Operationen
DE112012007115T5 (de) Wahlweise Logikprozessor-Zählung und Typauswahl für eine gegebene Arbeitsbelastung basierend auf Wärme- und Leistungsbudget-Einschränkungen der Plattform
DE102014003799A1 (de) Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle
DE102012222918A1 (de) Verfahren und Apparat zum Planen von Anweisungen ohne Anweisungs-Dekodieren
DE112013005368T5 (de) Prozessoren, verfahren und systeme für echtzeit-befehlsverfolgung
DE69732793T2 (de) Acht-bit-mikrokontroller mit risc-architektur
EP0825540B1 (de) Prozessor mit Pipelining-Aufbau

Legal Events

Date Code Title Description
8364 No opposition during term of opposition