DE60011797T2 - Ausführung von mehreren fäden in einem parallelprozessor - Google Patents

Ausführung von mehreren fäden in einem parallelprozessor Download PDF

Info

Publication number
DE60011797T2
DE60011797T2 DE60011797T DE60011797T DE60011797T2 DE 60011797 T2 DE60011797 T2 DE 60011797T2 DE 60011797 T DE60011797 T DE 60011797T DE 60011797 T DE60011797 T DE 60011797T DE 60011797 T2 DE60011797 T2 DE 60011797T2
Authority
DE
Germany
Prior art keywords
micro
memory
processor
sram
bus
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
DE60011797T
Other languages
English (en)
Other versions
DE60011797D1 (de
Inventor
Debra Bernstein
F. Donald HOOPER
J. Matthew ADILETTA
Gilbert Wolrich
William Wheeler
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.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Application granted granted Critical
Publication of DE60011797D1 publication Critical patent/DE60011797D1/de
Publication of DE60011797T2 publication Critical patent/DE60011797T2/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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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
    • G06F9/30127Register windows
    • 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 or 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Multi Processors (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)

Description

  • HINTERGRUND
  • Die vorliegende Erfindung betrifft Parallelprozessoren.
  • Parallelverarbeitung ist eine effiziente Form der Informationsverarbeitung von gleichzeitig ablaufenden Events in einem Rechenprozess. Die Parallelverarbeitung fordert die gleichzeitige Ausführung von vielen Programmen in einem Computer, im Gegensatz zur sequenziellen Verarbeitung. Im Zusammenhang mit einem Parallelprozessor beinhaltet Parallelität, dass gleichzeitig mehr als ein Vorgang abläuft. Im Gegensatz zu einem seriellen Paradigma, bei dem alle Tasks nacheinander in einer einzelnen Station oder in einer Pipelining-Maschine ausgeführt werden, bei der Tasks an spezialisierten Stationen ausgeführt werden, sind bei Parallelverarbeitung mehrere Stationen vorhanden, die jeweils alle Tasks ausführen können. Das heißt, im Allgemeinen arbeiten alle oder mehrere Stationen gleichzeitig und unabhängig an demselben oder an gemeinsamen Elementen eines Problems. Bestimmte Probleme sind für eine Lösung mittels Parallelverarbeitung geeignet.
  • So beinhalten Computerverarbeitungstypen einen einzelnen Anweisungsstrom, einen einzelnen Datenstrom, den konventionellen seriellen Von-Neumann-Computer mit einem einzelnen Anweisungsstrom. Ein zweiter Verarbeitungstyp ist SIMD (Prozess mit einem Anweisungsstrom und mehreren Datenströmen). Diese Verarbeitung kann mehrere Arithmetik-Logik-Prozessoren und einen einzigen Steuerprozessor haben. Alle Prozessoren führen Operationen an den Daten im Gleichschritt durch. Diese Maschinen werden vom Steuerprozessor synchronisiert. Ein dritter Typ ist MISD (Prozess mit mehreren Anweisungsströmen und einem einzigen Datenstrom). Diese Verarbeitung hat dieselben Datenstromflüsse durch eine lineare Array von Prozessoren, die unterschiedliche Anweisungsströme ausführen. Ein vierter ist MIMD (mehrere Anweisungsströme, mehrere Datenströme). Diese Verarbeitung läuft mit mehreren Prozessoren, die ihren Anweisungsstrom jeweils selbst ausführen, um einen den einzelnen Prozessoren zugeführten Datenstrom zu verarbeiten. MIMD-Prozessoren (mehrere Anweisungsströme, mehrere Datenströme) können mehrere Anweisungsverarbeitungseinheiten und somit mehrere Datenströme haben.
  • Die US-A-5 630 130 (Perotto et al) offenbart einen Multitasking-Controller mit einem Taskspeichermittel zum Speichern von bis zu N Tasks, die jeweils eine Folge von Anweisungen umfassen, einem Mikroprozessor, um durch Time-Sharing eine Mehrzahl solcher N Tasks zu verarbeiten, und einem Arbeitsspeicher zum Speichern von variablen Daten, die von dem genannten Mikroprozessor erzeugt und verwendet werden. Die Anordnung der US-A-5 630 130 kann keine Zuteilungsentscheidungen zwischen Tasks für Aktivierungsthreads treffen.
  • Byrd G.T. et al: „Multinational Processor Architectures", IEEE Spectrum, IEEE Inc. New York, US., Bd. 32, Nr. B. 1. August 1995 (1.8.1995), Seiten 38–46, XP000524855 ISSN: 0018-9235, ist eine Zusammenfassung von Multithread-Architekturen. Laut Byrd können Multithread-Architekturen als grob- oder feinkörnig klassifiziert werden. Beim grobkörnigen Ansatz läuft ein Thread über mehrere Zyklen oder mehr, bevor er umgeschaltet wird, im Allgemeinen aufgrund eines Vorgangs mit langer Latenz wie z.B. einer Speicheroperation, die nicht lokal erledigt werden kann. In einem feinkörnigen Ansatz werden Threads jedoch von Zyklus zu Zyklus umgeschaltet; dieses System erfordert mehr aktive Kontexte zum Maskieren von Vorgängen mit langer Latenz, aber es können auch jeweils mehrere Vorgänge mit langer Latenz gleichzeitig laufen (siehe S. 41, 5. Absatz). Spezifischer, laut Byrds können bei grobkörnigen Architekturen ungeladene Threads in verschiedenen Warteschlangen vorhanden sein, wie z.B. der Bereitschaftswarteschlange und der Suspendiert-Warteschlange. Intuitiv sollte die Umschaltung zwischen geladenen Warteschlangen lediglich das Ändern eines Kontextzeigers und das Vollendenlassen von laufenden Anweisungen erfordern (s. S. 42, mittlere Spalte, 1. Absatz). Byrd gibt an, dass bei feinkörniger Architektur ein Schlüssel zur Kontextumschaltung das Vorhandensein von genügend Registern ist, so dass ihre Kontexte nicht gespeichert und wieder abgerufen zu werden brauchen, wenn der Kontext umgeschaltet wird. Ein zweiter Schlüssel ist, dass, wenn ein Thread keine Anweisung mehr ausgeben kann, die Umschaltung auf einen anderen Thread nicht durch Warten auf die Vollendung aller laufenden Anweisungen verzögert wird (siehe S. 42, mittlere Spalte, 1. Absatz).
  • Byrd lehrt keinen Kontextzuteiler und schlägt auch keinen solchen vor, der als Reaktion auf externe Flags ermittelt, welcher aus einer Mehrzahl von Flags in der mikrogesteuerten Funktionsausführungseinheit für eine Promotion in einen Ausführungszustand ausführbar ist.
  • ZUSAMMENFASSUNG
  • Die Erfindung ist in den Ansprüchen definiert, auf die hiermit verwiesen wird. In einer Ausgestaltung der vorliegenden Erfindung beinhaltet eine mikrogesteuerte Funktionsausführungseinheit einen Steuerspeicher zum Speichern eines Mikroprogramms und einen Mikromaschinen-Controller zum Verwalten einer Mehrzahl von Mikroprogrammzählern. Die Einheit beinhaltet auch Decodierlogik zum Decodieren von Anweisungen und einen Kontext-Event-Zuteiler, der als Reaktion auf externe Flags ermittelt, welcher aus einer Mehrzahl von Threads, die in der mikrogesteuerten Funktionsausführungseinheit ausführbar sind, in einen Ausführungszustand promoviert werden soll.
  • Einer oder mehrere der folgenden Vorteile können von einem oder mehreren Aspekten der Erfindung erzielt werden.
  • Die Mikromaschine kann mehrere Hardware-Threads verarbeiten. Jede Mikromaschine verwaltet eine Mehrzahl von Programmzählern in Hardware und Zustände in Verbindung mit den Programmzählern. Es kann effektiv eine entsprechende Mehrzahl von Sätzen von Threads gleichzeitig auf einer Mikromaschine aktiv sein, während immer nur einer gerade tatsächlich arbeitet. Durch Hardware-Kontextumlagerung wird die Vollendung von Tasks synchronisiert. So könnten z.B. zwei Threads versuchen, auf dieselbe Gemeinschaftsressource zuzugreifen. Wenn eine Ressource eine angeforderte Task von einem der Mikromaschinen-Thread-Kontexten vollendet, dann sendet die Ressource einen Flag zurück, der die Vollendung eines Vorgangs signalisiert. Wenn die Mikromaschine den Flag erhält, kann sie bestimmen, welchen Thread sie einschaltet.
  • Mit Hilfe von Hardware-Multithreading kann ermöglicht werden, dass ein erster Thread auf einer Mikromaschine eine Transaktion wie z.B. einen Speicherzugriff einleitet. Wenn die Mikromaschine während des Speicherzugriffs nur einen einzigen Thread hatte, der arbeiten konnte, dann wäre diese Mikromaschine latent, bis Daten vom Speicher zurückgesendet werden. Durch Hardware-Kontextumlagerung in der Mikromaschine wird ermöglicht, dass andere Kontexte mit eindeutigen Programmzählern in derselben Mikromaschine ablaufen. So kann ein anderer Thread ablaufen, während der erste Thread wartet, bis gelesene Daten aus dem Speicher zurückkehren. Diese Merkmale können auf so viele Threads erweitert werden, wie gleichzeitig in einer Mikromaschine aktiv sind, um mehr Arbeit in einem Datenpfad zu erledigen.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Blockdiagramm eines Kommunikationssystems, das mit einem Hardware-gestützten Multithread-Prozessor arbeitet;
  • 2 ist ein ausführliches Blockdiagramm des Hardware-gestützten Multithread-Prozessors von 1;
  • 3 ist ein Blockdiagramm einer Mikromaschinen-Funktionseinheit, die in dem Hardware-gestützten Multithread-Prozessor der 1 und 2 eingesetzt wird;
  • 3A ist ein Blockdiagramm einer Pipeline in der Mikromaschine von 3;
  • 3B ist ein Diagramm, das ein Format für eine Kontextschaltanweisung zeigt;
  • 3C ist ein Blockdiagramm, das eine Universalregisteradressanordnung zeigt;
  • 4 ist ein Blockdiagramm eines Speicher-Controllers für einen Betrieb mit größerer Bandbreite in dem Hardware-gestützten Multithread-Prozessor;
  • 4A ist ein Ablaufdiagramm, das eine Zuteilungsrichtlinie in einem SDRAM-Controller von 4 repräsentiert;
  • 4B ist ein Zeitsteuerdiagramm, das Vorteile der Optimierung des SDRAM-Controllers zeigt;
  • 5 ist ein Blockdiagramm eines Speicher-Controllers für latenzbegrenzte Operationen, der in dem Hardware-gestützten Multithread-Prozessor verwendet wird;
  • 5A ist ein Zeitsteuerdiagramm, das Vorteile des Optimierens des SRAM-Controllers zeigt;
  • 6 ist ein Blockdiagramm einer Kommunikationsbusschnittstelle in dem Prozessor von 1.
  • BESCHREIBUNG
  • Architektur:
  • Gemäß 1 beinhaltet ein Kommunikationssystem 10 einen parallelen, Hardware-gestützten Multithread-Prozessor 12. Der Hardware-gestützte Multithread-Prozessor 12 ist mit einem Bus wie z.B. einem PCI-Bus 14, einem Speichersystem 16 und einem zweiten Bus 18 gekoppelt. Das System 10 ist besonders für Tasks nützlich, die in parallele Subtasks oder Funktionen gegliedert werden können. Insbesondere ist der Hardware-gestützte Multithread-Prozessor 12 für Tasks nützlich, die bandbreiten- anstatt latenzorientiert sind. Der Hardware-gestützte Multithread-Prozessor 12 hat mehrere Mikromaschinen 22, jeweils mit mehreren Hardwaregesteuerten Threads, die gleichzeitig aktiv sein und unabhängig an einer Task arbeiten können.
  • Der Hardware-gestützte Multithread-Prozessor 12 beinhaltet auch einen Zentralcontroller 20, der beim Laden von Microcode-Control für andere Ressourcen des Hardwaregestützten Multithread-Prozessors 12 assistiert und andere Universal-Computerfunktionen wie die Handhabung von Protokollen, Ausnahmen, zusätzliche Unterstützung für Paketverarbeitung ausführt, wobei die Mikromaschinen die Pakete für eine ausführlichere Verarbeitung wie beispielsweise in Grenzbedingungen weiterleiten. In einer Ausgestaltung ist der Prozessor 20 eine Architektur auf der Basis von Strong Arm® (Arm ist ein Warenzeichen von ARM Limited, GB). Der Universal-Mikroprozessor 20 hat ein Betriebssystem. Durch das Betriebssystem kann der Prozessor 20 Funktionen zum Einwirken auf Mikromaschinen 22a22f veranlassen. Der Prozessor 20 kann ein beliebiges unterstütztes Betriebssystem verwenden, aber es wird vorzugsweise ein Echtzeitbetriebssystem eingesetzt. Für den als Strong Arm Architektur implementierten Kernprozessor können Betriebssysteme wie MicrosoftNT Real-Time, VXWorks und μCUS, ein über das Internet erhältliches Freeware-Betriebssystem, verwendet werden.
  • Der Hardware-gestützte Multithread-Prozessor 12 beinhaltet auch eine Mehrzahl von Funktionsmikromaschinen 22a22f. Funktionsmikromaschinen (Mikromaschinen) 22a22f verwalten jeweils eine Mehrzahl von Programmzählern in Hardware sowie Zustände in Verbindung mit den Programmzählern. Effektiv kann eine entsprechende Mehrzahl von Sätzen von Threads gleichzeitig auf jeder der Mikromaschinen 22a22f aktiv sein, während jeweils immer nur einer tatsächlich arbeitet.
  • In einer Ausgestaltung gibt es sechs Mikromaschinen 22a22f wie gezeigt. Alle Mikromaschinen 22a22f haben die Kapazität zur Verarbeitung von vier Hardware-Threads. Die sechs Mikromaschinen 22a22f arbeiten mit gemeinsamen Betriebsmitteln wie dem Speichersystem 16 sowie den Busschnittstellen 24 und 28. Das Speichersystem 16 beinhaltet einen SDRAM-Controller 26a (Synchronous Dynamic Random Access Memory) und einen SRAM-Controller 26b (Static Random Access Memory). Der SDRAM-Speicher 16a und der SDRAM-Controller 26a werden gewöhnlich zum Verarbeiten großer Datenvolumen verwendet, z.B. zum Verarbeiten von Netzwerknutzdaten von Netzwerkpaketen. Der SRAM-Controller 26b und der SRAM-Speicher 16b werden in einer Vernetzungsimplementation für latenzarme Sofortzugriff-Tasks eingesetzt, z.B. zum Zugreifen auf Lookup-Tabellen, Speicher für den Kernprozessor 20 usw.
  • Die sechs Mikromaschinen 22a22f greifen, je nach den Charakteristiken der Daten, entweder auf den SDRAM 16a oder den SRAM 16b zu. Somit werden die latenzarmen Daten niedriger Bandbreite im SRAM gespeichert und von dort abgerufen, während Daten mit höherer Bandbreite, für die Latenz nicht so wichtig ist, im SDRAM gespeichert und von dort abgerufen werden. Die Mikromaschinen 22a22f können Speicherreferenzanweisungen entweder zum SDRAM-Controller 26a oder zum SRAM-Controller 16b ausführen.
  • Die Vorteile von Hardware-Multithreading können anhand von SRAM- oder SDRAM-Speicherzugriffen erläutert werden. So bewirkt beispielsweise ein von einem Thread 0 angeforderter SRAM-Zugriff von einer Mikromaschine, dass der SRAM-Controller 26b einen Zugriff auf den SRAM-Speicher 16b einleitet. Der SRAM-Controller steuert die Zuteilung für den SRAM-Bus, greift auf den SRAM 16b zu, ruft die Daten vom SRAM 16b ab und sendet die Daten zu einer anfordernden Mikromaschine 22a22b zurück. Während eines SRAM-Zugriffs wäre die Mikromaschine, z.B. 22a, wenn sie nur einen einzigen Thread hätte, der arbeiten könnte, im Ruhezustand, bis Daten vom SRAM zurückgegeben werden. Mittels Hardware-Kontextumlagerung in den einzelnen Mikromaschinen 22a22f kann ermöglicht werden, dass andere Kontexte mit eindeutigen Programmzählern in derselben Mikromaschine ablaufen. Somit kann ein anderer Thread, z.B. Thread_1, ablaufen, während der erste Thread, z.B. Thread_0, auf die Rückkehr der Lesedaten wartet. Während der Ausführung kann Thread_1 auf den SDRAM-Speicher 16a zugreifen. Während Thread_1 an der SDRAM-Einheit und Thread_0 an der SRAM-Einheit arbeitet, kann jetzt ein neuer Thread, z.B. Thread_2, in der Mikromaschine 22a arbeiten. Thread_2 kann für eine bestimmte Zeit arbeiten, bis er auf Speicher zugreifen oder eine andere Operation mit langer Latenz durchführen muss, wie z.B. die Durchführung eines Zugriffs auf eine Busschnittstelle. Somit kann der Prozessor 12 gleichzeitig einen Busvorgang, einen SRAM-Vorgang und einen SDRAM-Vorgang durchführen, die alle von einer Mikromaschine 22a vollendet oder bearbeitet werden, und noch einen Thread verfügbar haben, um mehr Arbeit im Datenpfad zu verrichten.
  • Hardware-Kontextumlagerung synchronisiert auch die Vollendung von Tasks. So könnten beispielsweise zwei Threads auf dieselbe Gemeinschaftsressource treffen, z.B. auf SRAM. Jede dieser separaten Funktionseinheiten, z.B. die FBUS-Schnittstelle 28, der SRAM-Controller 26a und der SDRAM-Controller 26b, sendet nach Vollendung einer angeforderten Task von einem der Mikromaschinen-Thread-Kontexten einen Flag zurück, der die Vollendung eines Vorgangs anzeigt. Wenn die Mikromaschine den Flag erhält, kann sie bestimmen, welchen Thread sie einschaltet.
  • Ein Beispiel für den Einsatz eines Hardware-gestützten Multithread-Prozessors 12 ist als Netzwerkprozessor. Als Netzwerkprozessor hat der Hardware-gestützte Multithread-Prozessor 12 Verbindung mit Netzgeräten wie z.B. einem Media-Access-Controller, z.B. einem 10/100BaseT Octal MAC 13a oder einem Gigabit-Ethernet-Gerät 13b. Im Allgemeinen kann der Hardware-gestützte Multithread-Prozessor 12 als Netzwerkprozessor Verbindung mit jedem beliebigen Kommunikationsgerät- oder Schnittstellentyp haben, der große Datenmengen empfängt/sendet. Das in einer vernetzten Anwendung arbeitende Kommunikationssystem 10 könnte eine Mehrzahl von Netzwerkpaketen von den Geräten 13a, 13b empfangen und diese Pakete auf parallele Weise verarbeiten. Mit dem Hardware-gestützten Multithread-Prozessor 12 kann jedes Netzwerkpaket unabhängig verarbeitet werden.
  • Ein weiteres Einsatzbeispiel für den Prozessor 12 ist als Druckmaschine für einen Postscript-Prozessor oder als Prozessor für ein Speichersubsystem, d.h. RAID-Plattenspeicherung. Ein weiterer Einsatzzweck ist als Anpassungsmaschine. So erfordert beispielsweise in der Wertpapierbranche der aufgekommene elektronische Handel den Einsatz von elektronischen Anpassungsmaschinen, um Käufer und Verkäufer für Aufträge zusammenzubringen. Diese und andere parallele Typen von Tasks können mit dem System 10 ausgeführt werden.
  • Der Prozessor 12 beinhaltet eine Busschnittstelle 28, die den Prozessor mit dem zweiten Bus 18 verbindet. Die Busschnittstelle 28 in einer Ausgestaltung verbindet den Prozessor 12 mit dem so genannten FBUS 18 (FIFO-Bus). Die FBUS-Schnittstelle 28 ist für die Steuerung und Verbindung des Prozessors 12 mit dem FBUS 18 verantwortlich. Der FBUS 18 ist ein 64 Bit breiter FIFO Bus für die Verbindung mit Media-Access-Controllern (MAC).
  • Der Prozessor 12 beinhaltet eine zweite Schnittstelle, z.B. eine PCI-Busschnittstelle 24, die andere auf dem PCI-Bus 14 befindliche Systemkomponenten mit dem Prozessor 12 verbindet. Die PCI-Busschnittstelle 24 bietet einen schnellen Datenpfad 24a zum Speicher 16, z.B. dem SDRAM-Speicher 16a. Dieser Datenpfad ermöglicht einen schnellen Transfer vom SDRAM 16a durch den PCI-Bus 14 per Direct Memory Access (DMA). Der Hardware-gestützte Multithread-Prozessor 12 unterstützt Bildübertragungen. Der Hardwaregestützte Multithread-Prozessor 12 kann eine Mehrzahl von DMA-Kanälen verwenden. Wenn also ein Ziel eines DMA-Transfers belegt ist, dann kann ein anderer DMA-Kanal den PCI-Bus zum Weiterleiten von Informationen zu einem anderen Ziel übernehmen, um den Prozessor 12 effizient zu halten. Darüber hinaus unterstützt die PCI-Busschnittstelle 24 Ziel- und Master-Vorgänge. Bei Zielvorgängen handelt es sich um Operationen, bei denen Slave-Geräte auf dem Bus 14 auf SDRAMs über Lese- und Schreibvorgänge zugreifen, die wie Slave-zu-Ziel-Operationen behandelt werden. Bei Master-Operationen sendet der Prozessorkern 20 Daten direkt zur Busschnittstelle 24 oder empfängt sie direkt davon.
  • Jede der Funktionseinheiten ist mit einem oder mehreren internen Bussen verbunden. Wie nachfolgend beschrieben, sind die internen Busse duale 32-Bit-Busse (d.h. ein Bus zum Lesen und einer zum Schreiben). Der Hardware-gestützte Multithread-Prozessor 12 ist auch so konstruiert, dass die Summe der Bandbreiten der internen Busse im Prozessor 12 größer ist als die Bandbreite von mit dem Prozessor 12 verbundenen externen Bussen. Der Prozessor 12 beinhaltet einen internen Kernprozessorbus 32, z.B. einen ASB-Bus (Advanced System Bus), der den Prozessorkern 20 mit dem Speicher-Controller 26a, 26c sowie mit einem nachfolgend beschriebenen ASB-Translator 30 verbindet. Der ASB-Bus ist eine Teilmenge des so genannten AMBA-Busses, der mit dem Strong Arm Prozessorkern verwendet wird. Der Prozessor 12 beinhaltet auch einen privaten Bus 34, der die Mikromaschineneinheiten mit dem SRAM-Controller 26b, dem ASB-Translator 30 und der FBUS-Schnittstelle 28 verbindet. Ein Speicherbus 38 verbindet den Speicher-Controller 26a, 26b mit den Busschnittstellen 24 und 28 sowie dem Speichersystem 16, einschließlich dem Flashrom 16c, der für Boot-Vorgänge usw. verwendet wird.
  • Mit Bezug auf 2, jede der Mikromaschinen 22a22f beinhaltet einen Zuteiler, der Flags untersucht, um die verfügbaren Threads zu ermitteln, an denen gearbeitet werden kann. Jeder Thread von jeder der Mikromaschinen 22a-22f kann auf den SDRAM-Controller 26a, den SDRAM-Controller 26b oder die FBUS-Schnittstelle 28 zugreifen. Die Speicher-Controller 26a und 26b beinhalten jeweils eine Mehrzahl von Warteschlangen zum Speichern von ausstehenden Speicherreferenzanforderungen. Die Warteschlangen können entweder eine Reihenfolge von Speicherreferenzen führen oder Speicherreferenzen so arrangieren, dass die Speicherbandbreite optimiert wird. Wenn beispielsweise ein Thread_0 keine Abhängigkeiten und keine Beziehung zu einem Thread_1 hat, dann gibt es keinen Grund, warum Thread_1 und 0 nicht ihre Speicherreferenzen zur SRAM-Einheit außer der Reihe vollenden könnten. Die Mikromaschinen 22a22f geben Speicherreferenzanforderungen an die Speicher-Controller 26a und 26b aus. Die Mikromaschinen 22a22f fluten die Speichersubsysteme 26a und 26b mit so vielen Speicherreferenzoperationen, dass die Speichersubsysteme 26a und 26b für den Betrieb des Prozessors 12 zu einem Engpass werden.
  • Wenn das Speichersubsystem 16 mit Speicheranforderungen geflutet wird, die von ihrer Natur aus unabhängig sind, dann kann der Prozessor 12 Speicherreferenzen sortieren. Durch Sortieren von Speicherreferenzen wird die erzielbare Speicherbandbreite verbessert. Speicherreferenzsortierung reduziert, wie nachfolgend beschrieben, Totzeit oder eine Blase, die mit Zugriffen auf SRAM auftritt. Mit Speicherreferenzen auf SRAM wird durch Umschalten der aktuellen Richtung auf Signalleitungen zwischen Lese- und Schreibvorgängen eine Blase oder eine Totzeit erzeugt, während der gewartet wird, bis sich Strom auf Leitern einschwingt, die den SRAM 16b mit dem SRAM-Controller 26b verbinden.
  • Das heißt, die Treiber, die Strom auf dem Bus treiben, müssen sich einschwingen, bevor sie ihre Zustände ändern. So können wiederholte Zyklen eines Lesevorgangs, gefolgt von einem Schreibvorgang, die Spitzenbandbreite senken. Speicherreferenzsortierung erlaubt es dem Prozessor 12, Referenzen auf Speicher so zu organisieren, dass auf lange Folgen von Lesevorgängen lange Folgen von Schreibvorgängen folgen können. Damit kann die Totzeit in der Pipeline minimiert werden, um effektiv näher an die maximale verfügbare Bandbreite heranzukommen. Referenzsortierung hilft beim Verwalten paralleler Hardware-Kontextthreads. Am SDRAM ermöglicht Referenzsortierung das Verbergen von Vorladungen von einer Bank zu einer anderen Bank. Spezifisch ausgedrückt, wenn das Speichersystem 16b in eine ungeradzahlige Bank und eine geradzahlige Bank organisiert ist, während der Prozessor an der ungeradzahligen Bank arbeitet, dann kann der Speicher-Controller mit dem Vorladen der geradzahligen Bank beginnen. Ein Vorladen ist dann möglich, wenn Speicherreferenzen zwischen ungeradzahligen und geradzahligen Banken alternieren. Indem Speicherreferenzen so geordnet werden, dass sie zwischen Zugriffen auf entgegengesetzte Bänke alternieren, verbessert der Prozessor 12 die SDRAM-Bandbreite. Darüber hinaus können weitere Optimierungen verwendet werden. So können z.B. Mischoptimierungen, bei denen Operationen, die gemischt werden können, vor einem Speicherzugriff gemischt werden, Offene-Seiten-Optimierungen, bei denen aufgrund einer Untersuchung von Adressen eine offene Speicherseite nicht neu geöffnet wird, Verkettung wie nachfolgend beschrieben und Auffrischmechanismen verwendet werden.
  • Die FBUS-Schnittstelle 28 unterstützt Sende- und Empfangsflags für jeden Port, den ein MAC-Gerät unterstützt, zusammen mit einem Interrupt-Flag, das anzeigt, wenn ein Service gerechtfertigt ist. Die FBUS-Schnittstelle 28 beinhaltet auch einen Controller 28a, der eine Kopfzeilenverarbeitung an eingehenden Paketen vom FBUS 18 durchführt. Der Controller 28a extrahiert die Paketkopfzeilen und führt einen mikroprogrammierbaren hashcodierten Quelle/Ziel/Protokoll-Lookup-Vorgang (wird für Adressglättung verwendet) im SRAM durch. Wenn sich der Hash-Code nicht erfolgreich auflöst, dann wird die Paketkopfzeile zum Prozessorkern 20 zur Weiterverarbeitung gesendet. Die FBUS-Schnittstelle 28 unterstützt die folgenden internen Datentransaktionen:
  • Figure 00130001
  • Der FBUS 18 ist ein standardmäßiger Industriebus und beinhaltet einen Datenbus, z.B. 64 Bit breit, und Seitenbandsteuerung für Adress- und Lese-/Schreibsteuerung. Die FBUS-Schnittstelle 28 bietet die Möglichkeit, große Datenmengen über eine Reihe von Ein- und Ausgabe-FIFOs 29a-29b einzugeben. Von den FIFOs 29a29b rufen die Mikromaschinen 22a22f Daten vom SDRRM-Controller 26a ab oder weisen ihn an, Daten von einem Empfangs-FIFO, in dem Daten von einem Gerät auf dem Bus 18 gekommen sind, zur FBUS-Schnittstelle 28 zu verschieben. Die Daten können durch den Speicher-Controller 26a über einen Direct-Memory-Access zum SDRAM-Speicher 16a gesendet werden. Ebenso können die Mikromaschinen Daten vom SDRAM 26a zur Schnittstelle 28, zum FBUS 18, über die FBUS-Schnittstelle 28 übertragen.
  • Datenfunktionen werden unter den Mikromaschinen verteilt. Die Konnektivität zu SRAM 26a, SDRAM 26b und FBUS 28 ist über Befehlsanforderungen gegeben. Eine Befehlsanforderung kann eine Speicheranforderung oder eine FBUS-Anforderung sein. So kann eine Speicheranforderung beispielsweise Daten von einem Register in einer Mikromaschine 22a zu einer Gemeinschaftsressource senden, z.B. einer SDRAM-Stelle, einer SRAM-Stelle, zu einem Flash-Speicher oder zu einer MAC-Adresse. Die Befehle werden zu den einzelnen Funktionseinheiten und zu den Gemeinschaftsressourcen gesendet. In den Gemeinschaftsressourcen ist jedoch keine lokale Pufferung der Daten nötig, sondern die Gemeinschaftsressourcen greifen auf verteilte Daten in den Mikromaschinen zu. Dadurch haben die Mikromaschinen 22a22f lokal Zugang zu Daten, ohne dass Buszugriffsberechtigungen zugeteilt werden müssen oder die Gefahr einer Konkurrenz auf dem Bus gegeben wäre. Mit dieser Funktion gibt es einen 0-Zyklus-Aufenthalt zum Warten auf Daten innerhalb der Mikromaschinen 22a22f.
  • Die Datenbusse, z.B. ASB-Bus 30, SRAM-Bus 34 und SDRAM-Bus 38, die diese Gemeinschaftsressourcen verbinden, z.B. Speicher-Controller 26a und 26b, haben eine ausreichende Bandbreite, so dass es keine internen Engpässe gibt. Somit hat der Prozessor 12 zur Vermeidung von Engpässen eine Bandbreitenanforderung, bei der jede der Funktionseinheiten wenigstens das Zweifache der maximalen Bandbreite der internen Busse erhält. Zum Beispiel, der SDRAM kann einen 64 Bit breiten Bus mit 83 MHz betreiben. Der SRAM-Datenbus könnte separate Lese- und Schreibbusse haben, z.B. einen Lesebus von 32 Bit Breite mit 166 MHz und einen Schreibbus von 32 Bit Breite mit 166 MHz. Das heißt im wesentlichen, dass 64 Bit mit 166 MHz laufen, was effektiv das Zweifache der Bandbreite des SDRAM ist.
  • Der Kernprozessor 20 kann ebenfalls auf die Gemeinschaftsressourcen zugreifen. Der Kernprozessor 20 hat eine Direktkommunikation mit dem SDRAM-Controller 26a, der Busschnittstelle 24 und dem SRAM-Controller 26b über den Bus 32. Zum Zugreifen auf die Mikromaschinen 22a22f und Transferregister in beliebigen der Mikromaschinen 22a22f greift der Kernprozessor 20 jedoch über den ASB-Translator 30 über den Bus 34 auf die Mikromaschinen 22a22f zu. Der ASB-Translator 30 kann sich physisch in der Busschnittstelle 28 befinden, ist aber logisch getrennt. Der ASB-Translator 30 führt eine Adressumsetzung zwischen Transferregisterstellen der FBUS-Mikromaschinen und Kernprozessoradressen (d.h. ASB-Bus) durch, so dass der Kernprozessor 20 auf Register zugreifen kann, die zu den Mikromaschinen 22a22c gehören.
  • Mikromaschinen 22 können zwar den Registersatz zum Austauschen von Daten wie nachfolgend beschrieben verwenden, aber es ist auch ein Notizblockspeicher 27 vorgesehen, damit Mikromaschinen Daten auf den Speicher ausschreiben können, damit sie von anderen Mikromaschinen gelesen werden. Der Notizblockspeicher 27 ist mit dem Bus 34 gekoppelt.
  • Der Prozessorkern 20 beinhaltet einen RISC-Kern 50, der in einer fünfstufigen Pipeline implementiert ist, die eine Ein-Zyklus-Verschiebung von einem Operanden oder zwei Operanden in einem einzigen Zyklus durchführt und Multiplikationssupport sowie 32-Bit-Barrel-Shift-Support bietet. Dieser RISC-Kern 50 ist eine standardmäßige Strong Arm® Architektur, ist aber aus Leistungsgründen mit einer fünfstufigen Pipeline ausgeführt. Der Prozessorkern 20 beinhaltet auch einen 16-KB-Befehlscache 52, einen 8-KB-Datencache 64 und einen Prefetch-Stream-Puffer 56. Der Kernprozessor 20 führt arithmetische Vorgänge parallel zu Speicherschreib- und Anweisungsabrufvorgängen durch. Der Kernprozessor 20 hat über den ARM-definierten ASB-Bus Verbindung mit anderen Funktionseinheiten. Der ASB-Bus ist ein bidirektionaler 32-Bit-Bus 32.
  • Mikromaschinen
  • 3 zeigt ein Beispiel für eine der Mikromaschinen 22a22f, z.B. Mikromaschine 22f. Die Mikromaschine hat einen Steuerspeicher 70, der in einer Implementation einen RAM von hier 1024 Wörtern von je 32 Bit beinhaltet. Der RAM speichert ein Mikroprogramm. Das Mikroprogramm kann vom Kernprozessor 20 geladen werden. Die Mikromaschine 22f beinhaltet auch Controller-Logik 72. Die Controller-Logik beinhaltet einen Anweisungsdecoder 73 sowie Programmzähler(PC) Einheiten 72a72d. Die vier Mikroprogrammzähler 72a-72d sind in Hardware ausgeführt. Die Mikromaschine 22f hat auch Kontextevent-Umschaltlogik 74. Kontexteventlogik 74 empfängt Meldungen (z.B. SEQ # EVENT RESPONSE; FBI EVENT RESPONSE; SRAM EVENT RESPONSE; SDRAM EVENT RESPONSE; und ASB EVENT RESPONSE) von jeder der Gemeinschaftsressourcen, z.B. SRAM 26a, SDRAM 26b oder Prozessorkern 20, Steuer- und Statusregister usw. Diese Meldungen geben Informationen darüber, ob eine angeforderte Funktion vollendet wurde. Je nach dem, ob eine von einem Thread angeforderte Funktion vollendet und die Vollendung signalisiert ist, muss der Thread auf dieses Vollendungssignal warten, und wenn der Thread für den Betrieb freigegeben ist, dann wird er auf eine Verfügbarer- Thread-Liste (nicht dargestellt) gesetzt. Die Mikromaschine 22f kann maximal z.B. 4 Threads zur Verfügung haben.
  • Zusätzlich zu Event-Signalen, die lokal zu einem laufenden Thread sind, verwenden die Mikromaschinen 22 Signalisierungszustände, die global sind. Beim Signalisieren von Zuständen kann ein laufender Thread einen Signalzustand zu allen Mikromaschinen 22 rundsenden. Nach dem Empfang eines Anforderung-verfügbar-Signals können beliebige und alle Threads in den Mikromaschinen an diesen Signalisierungszuständen verzweigen. Anhand dieser Signalisierungszustände kann die Verfügbarkeit einer Ressource oder die Fälligkeit einer Ressource für einen Service ermittelt werden.
  • Die Kontexteventlogik 74 hat eine Zuteilung für die vier (4) Threads. In einer Ausgestaltung erfolgt die Zuteilung auf zyklische Weise. Es können auch andere Techniken zum Einsatz kommen, wie z.B. die Einreihung in eine Prioritätswarteschlange oder eine Gewichtete-Fairness-Warteschlange. Die Mikromaschine 22f beinhaltet auch einen Ausführungsbox- (EBOX) Datenpfad 76, der eine Arithmetik-Logik-Einheit 76a sowie einen Universalregistersatz 76b beinhaltet. Die Arithmetik-Logik-Einheit 76a führt Rechen- und Logikfunktionen sowie Verschiebungsfunktionen durch. Der Registersatz 76b hat eine relativ große Zahl von Universalregistern. Wie in 3B illustriert, gibt es in dieser Implementation 64 Universalregister in einer ersten Bank, Bank A, und 64 in einer zweiten Bank, Bank B. Die Universalregister haben eine Fensterstruktur, wie nachfolgend beschrieben wird, so dass sie relativ und absolut adressierbar sind.
  • Die Mikromaschine 22f beinhaltet auch einen Schreibtransferregisterstapel 78 und einen Lesetransferstapel 80. Auch diese Register haben eine Fensterstruktur, so dass sie relativ und absolut adressierbar sind. Der Schreibtransferregisterstapel 78 ist dort, wo sich Daten zu einer Ressource befinden. Ebenso ist der Leseregisterstapel 80 für die Rückgabe von Daten von einer Gemeinschaftsressource. Im Anschluss an die oder gleichzeitig mit der Ankunft von Daten wird ein Event-Signal von der jeweiligen Gemeinschaftsressource, z.B. SRAM-Controller 26a, SDRAM-Controller 26b oder Kernprozessor 20, zum Kontexteventzuteiler 74 gesendet, der dann den Thread darüber in Kenntnis setzt, dass die Daten zur Verfügung stehen oder gesendet wurden. Beide Transferregisterbänke 78 und 80 sind durch einen Datenpfad mit der Ausführungsbox (EBOX) 76 verbunden. In einer Implementation hat das Lesetransferregister 64 Register und das Schreibtransferregister hat 64 Register.
  • Wie in 3A gezeigt, verwaltet der Mikromaschinen-Datenpfad eine 5-stufige Mikropipeline 82. Diese Pipeline beinhaltet Nachschlagen von Mikrobefehlswörtern 82a, Bilden der Registerdateiadressen 82b, Lesen von Operanden von der Registerdatei 82c, ALU, Verschiebe- oder Vergleichsoperationen 82d sowie Zurückschreiben von Ergebnissen auf Register 82e. Durch die Bereitstellung einer Writeback-Datenumgehung in die ALU/Schieber-Einheiten und indem angenommen wird, dass die Register als Registerdatei (und nicht als RAM) implementiert werden, kann die Mikromaschine die Registerdatei gleichzeitig lesen und beschreiben, so dass der Schreibvorgang vollkommen verborgen wird.
  • Die SDRAM-Schnittstelle 26a sendet ein Signal über Lesevorgänge zurück zur anfordernden Mikromaschine, das anzeigt, ob ein Paritätsfehler an der Leseanforderung aufgetreten ist. Der Mikromaschinen-Microcode prüft den SDRAM-Leseparität-Flag, wenn die Mikromaschine Rückgabedaten verwendet. Nach dem Prüfen des Flags wird dieser, wenn er gesetzt ist, durch Verzweigen darauf entfernt. Der Paritätsflag wird nur dann gesendet, wenn der SDRAM zum Prüfen aktiviert und der SDRAM paritätsgeschützt ist. Die Mikromaschinen und die PCI-Einheit sind die einzigen Requestoren, die über Paritätsfehler in Kenntnis gesetzt werden. Wenn also der Prozessorkern 20 oder der FIFO Paritätsschutz benötigt, dann assistiert eine Mikromaschine bei der Anforderung. Die Mikromaschinen 22a-22f unterstützen konditionelle Verzweigungen. Die ungünstigste konditionelle Verzweigungslatenz (ohne Jumps) tritt dann auf, wenn die Verzweigungsentscheidung die Folge von Bedingungscodes ist, die von der vorherigen Mikrosteuerungsanweisung gesetzt wurden. Die Latenz ist nachfolgend in Tabelle 1 dargestellt:
  • Figure 00190001
  • Wie in Tabelle 1 gezeigt, werden die Konditionscodes von n1 erst bei Zyklus 4 gesetzt, und die Verzweigungsentscheidung kann getroffen werden (die in diesem Fall bewirkt, dass der Verzweigungspfad in Zyklus 5 nachgeschlagen wird). Die Mikromaschine verursacht einen 2-Zyklus-Verzweigungslatenz-Mehraufwand, weil sie Vorgänge n2 und n3 (die beiden Mikrowörter direkt hinter der Verzweigung) in der Pipe abbrechen muss, bevor der Verzweigungspfad damit beginnt, die Pipe mit Operation b1 zu füllen. Erfolgt die Verzweigung nicht, dann werden keine Mikrowörter abgebrochen und die Ausführung wird normal fortgesetzt. Die Mikromaschinen haben mehrere Mechanismen, um die effektive Verzweigungslatenz zu reduzieren oder zu eliminieren.
  • Die Mikromaschinen unterstützen verschobene Verzweigungen. Eine Verschiebung von Verzweigungen ist dann gegeben, wenn es eine Mikromaschine zulässt, dass 1 oder 2 Mikrowörter nach der Verzweigung auftreten, bevor die Verzweigung wirksam wird (d.h. der Effekt der Verzweigung wird zeitlich „verschoben"). Wenn also gefunden wird, dass nützliche Arbeit die verschwendeten Zyklen nach dem Verzweigungsmikrowort füllt, dann kann die Verzweigungslatenz verborgen werden. Eine um 1 Zyklus verschobene Verzweigung ist unterhalb der Stelle zu sehen, wo n2 nach cb, aber vor b1 ablaufen kann:
  • Figure 00200001
  • Eine um 2 Zyklen verschobene Verzweigung wird nachfolgend dargestellt, wo n2 und n3 vor dem Auftreten der Verzweigung zu b1 fertig werden können. Man beachte, dass eine um 2 Zyklen verschobene Verzweigung nur dann zulässig ist, wenn die Bedingungscodes an dem Mikrowort vor der Verzweigung gesetzt sind.
  • Figure 00200002
  • Die Mikromaschinen unterstützen auch Bedingungscode-Beurteilung. Wenn die Bedingungscodes, an denen eine Verzweigungsentscheidung getroffen wird, 2 oder mehr Mikrowörter vor der Verzweigung gesetzt werden, dann kann 1 Zyklus der Verzweigungslatenz eliminiert werden, weil die Verzweigungsentscheidung 1 Zyklus früher getroffen werden kann:
  • Figure 00210001
  • In diesem Beispiel setzt n1 die Bedingungscodes und n2 setzt die Bedingungscodes nicht. Daher kann die Verzweigungsentscheidung in Zyklus 4 (anstatt 5) getroffen werden, um 1 Zyklus Verzweigungslatenz zu eliminieren. In dem Beispiel unten wird die Verzweigungsverschiebung von 1 Zyklus und das frühzeitige Setzen von Bedingungscodes kombiniert, um die Verzweigungslatenz völlig zu verbergen: Bedingungscodes (cc's) werden 2 Zyklen vor einer um 1 Zyklus verzögerten Verzweigung gesetzt:
  • Figure 00210002
  • In dem Fall, in dem die Bedingungscodes nicht frühzeitig gesetzt werden können (d.h. sie werden in dem Mikrowort vor der Verzweigung gesetzt), unterstützt die Mikromaschine eine Verzweigungsschätzung, die versucht, den verbleibenden 1 Zyklus von exponierter Verzweigungslatenz zu reduzieren. Durch „Schätzen" des Verzweigungspfades oder des Folgepfades liest der Mikrosequencer den geschätzten Pfad einen Zyklus bevor er definitiv weiß, welchen Pfad er abarbeitet. Wenn er richtig schätzt, dann wird 1 Zyklus Verzweigungslatenz wie nachfolgend gezeigt eliminiert: Schätzung: Verzweigung genommen / Verzweigung wird genommen
  • Figure 00220001
  • Wenn der Mikrocode eine genommene Verzweigung falsch schätzt, dann verschwendet die Mikromaschine nur 1 Zyklus: Schätzung: Verzweigung genommen / Verzweigung wird NICHT genommen
  • Figure 00220002
  • Der Latenzmehraufwand wird jedoch anders verteilt, wenn der Mikrocode schätzt, dass eine Verzweigung nicht genommen wird:
  • Für ein Schätzung Verzweigung NICHT genommen / Verzweigung wird NICHT genommen, gibt es keine verschwendeten Zyklen, wie nachfolgend gezeigt wird.
  • Figure 00220003
  • Für eine Schätzung Verzweigung NICHT genommen / Verzweigung wird genommen gibt es jedoch 2 verschwendete Zyklen.
  • Figure 00230001
  • Die Mikromaschine kann Verzweigungsschätzung mit einer 1-Zyklus-Verzweigungsverschiebung kombinieren, um das Ergebnis noch weiter zu verbessern. Für "Schätzung: Verzweigung genommen mit um 1 Zyklus verschobener Verzweigung / Verzweigung wird genommen" sieht das Ergebnis so aus:
  • Figure 00230002
  • In dem obigen Fall werden die beiden Zyklen an Verzweigungslatenz durch die Ausführung von n2 und durch korrektes Schätzen der Verzweigungsrichtung verborgen. Wenn Mikrocode falsch schätzt, dann bleibt 1 Zyklus Verzweigungslatenz wie nachfolgend gezeigt exponiert:
  • Schätzung: Verzweigung mit um 1 Zyklus verschobener Verzweigung genommen / Verzweigung NICHT genommen
    Figure 00230003
  • Wenn Mikrocode ein "Verzweigung NICHT genommen" richtig schätzt, dann fließt die Pipeline sequentiell im normalen ungestörten Fall. Wenn Mikrocode "Verzweigung NICHT genommen" falsch schätzt, dann exponiert die Mikromaschine wieder 1 Zyklus an unproduktiver Ausführung, wie nachfolgend gezeigt wird:
  • Schätzung: Verzweigung NICHT genommen / Verzweigung wird genommen
    Figure 00240001
  • Im Falle einer Jump-Anweisung werden 3 zusätzliche Latenzzyklen verursacht, weil die Verzweigungsadresse erst am Ende des Zyklus bekannt ist, in dem der Jump in der ALU-Stufe ist:
  • Figure 00240002
  • Kontextschalter:
  • 3B zeigt ein Format von einer Kontextschaltanweisung. Ein Kontextschalter ist eine spezielle Form einer Verzweigung, die bewirkt, dass ein anderer Kontext (und zugehöriger PC) gewählt wird. Auch Kontextschaltung verursacht ein gewisses Maß an Verzweigungslatenz. Man betrachte den folgenden Kontextschalter:
  • Figure 00250001
  • In einem Kontextschalter wird das Mikrowort „br" abgebrochen, um die Steuer- und Timing-Komplexitäten zu vermeiden, die durch Speichern des richtigen alten Kontext-PC entstehen könnten.
  • Konditionelle Verzweigungen, die an ALU-Bedingungscodes arbeiten, die vor der Verzweigung am Mikrowort gesetzt werden, können Verzweigungsverschiebungen von 0, 1 oder 2 Zyklen wählen. Bedingungscodes, die 2 oder mehr Mikroworte vor der daran tätigen konditionellen Verzweigung gesetzt werden, können eine Verzweigungsverschiebung von 0 oder 1 Zyklus wählen. Alle anderen Verzweigungen (inkl. Kontextneuzuteilung) können eine Verzweigungsverschiebung von 0 oder 1 Zyklus wählen. Die Architektur könnte so ausgelegt werden, dass sie ein Kontextzuteilungsmikrowort in einem Verzweigungsverschiebungsfenster eines vorherigen Verzweigungs-, Jump- oder Kontextzuteilungsmikrowortes zu einer illegalen Option macht. Das heißt, in einigen Ausgestaltungen würde eine Kontextumschaltung während eines Verzweigungsübergangs in der Pipeline nicht zugelassen, weil dies, wie erwähnt, das Speichern des alten Kontext-PC zu sehr verkomplizieren würde. Die Architektur könnte auch so ausgelegt werden, dass sie die Verzweigung in dem Verzweigungsverschiebungsfenster eines vorherigen Verzweigungs-, Jump- oder Kontextzuteilungsmikrowortes illegal macht, um kompliziertes und möglicherweise unvorhersehbares Verzweigungsverhalten zu vermeiden.
  • Jede Mikromaschine 22a22f unterstützt eine Multithread-Ausführung von vier Kontexten. Ein Grund hierfür ist zuzulassen, dass ein Thread mit der Ausführung beginnt, unmittelbar nachdem ein anderer Thread eine Speicherreferenz ausgibt, und warten muss, bis diese Referenz beendet ist, bevor weitere Arbeiten durchgeführt werden. Dieses Verhalten ist kritisch, um die Hardware-Ausführung der Mikromaschinen effizient zu halten, weil die Speicherlatenz signifikant ist. Oder anders ausgedrückt, wenn nur eine einzige Thread-Ausführung unterstützt würde, dann würden die Mikromaschinen für eine signifikante Anzahl von Zyklen untätig sitzen und auf die Rückkehr von Referenzen warten und dadurch den Rechendurchsatz insgesamt reduzieren. Eine Multithread-Ausführung lässt es zu, dass Mikromaschinen Speicherlatenz verbergen, indem sie nützliche unabhängige Arbeit über mehrere Threads durchführen. Es werden zwei Synchronisationsmechanismen vorgesehen, damit ein Thread eine SRAM- oder SDRAM-Referenz ausgeben kann und dann nachfolgend auf den Zeitpunkt synchronisiert wird, an dem diese Referenz vollendet ist.
  • Ein Mechanismus ist Sofortsynchronisation. Bei Sofortsynchronisation gibt die Mikromaschine die Referenz aus und lagert den Kontext sofort aus. Dem Kontext wird mitgeteilt, wenn die entsprechende Referenz beendet ist. Nach der Mitteilung wird der Kontext wieder zur Ausführung eingelagert, wenn ein Kontextumlagerungsevent auftritt und er an der Reihe ist. Somit wird, vom Standpunkt des Anweisungsstroms eines einzigen Kontexts her gesehen, das Mikrowort nach der Ausgabe der Speicherreferenz erst nach Vollendung der Referenz ausgeführt.
  • Ein zweiter Mechanismus ist verzögerte Synchronisation. In verzögerter Synchronisation gibt die Mikromaschine die Referenz aus und führt dann weiter andere nützliche Arbeit unabhängig von der Referenz durch. Einige Zeit später könnte es notwendig werden, den Ausführungsstrom des Thread auf die Vollendung der ausgegebenen Referenz zu synchronisieren, bevor weitere Arbeit durchgeführt wird. An dieser Stelle wird ein Synchronisierungsmikrowort ausgeführt, das entweder den aktuellen Thread auslagert und ihn irgendwann später zurücklagert, wenn die Referenz fertig ist, oder mit der Ausführung des aktuellen Threads fortfährt, weil die Referenz bereits fertig ist. Verzögerte Synchronisation erfolgt mit zwei verschiedenen Signalisierungsschemata:
  • Wenn die Speicherreferenz mit einem Transferregister assoziiert ist, wird das Signal, von dem der Thread ausgelöst wird, generiert, wenn das entsprechende Transferregister-Gültig-Bit gesetzt oder gelöscht ist. Zum Beispiel würde ein SRAM-Lesevorgang, der Daten im Transferregister A ablegt, dann signalisiert, wenn das Gültig-Bit für A gesetzt ist. Wenn die Speicherreferenz mit dem Transfer-FIFO oder dem Empfangs-FIFO anstatt einem Transferregisters assoziiert ist, dann wird das Signal generiert, wenn die Referenz im SDRAM-Controller 26a fertig ist. Im Mikromaschinen-Scheduler wird nur ein Signalzustand pro Kontext gespeichert, und daher kann in diesem Schema nur ein ausstehendes Signal existieren.
  • Es gibt wenigstens zwei allgemeine Betriebsparadigmen, von denen Microcontroller-Mikroprogramme entwickelt werden könnten. Eines wäre, dass der gesamte Microcontroller-Rechendurchsatz und die gesamte Speicherbandbreite auf Kosten einer einzelnen Thread-Ausführungslatenz optimiert werden. Dieses Paradigma wäre dort sinnvoll, wo das System mehrere Mikromaschinen hat, die mehrere Threads pro Mikromaschine an nicht zueinander gehörigen Datenpaketen ausführt.
  • Ein zweites ist, Mikromaschinen-Ausführungslatenz auf Kosten von Mikromaschinen-Gesamtrechendurchsatz und Gesamtspeicherbandbreite zu optimieren. Dieses Paradigma könnte die Ausführung eines Thread mit einer Echtzeitbeschränkung beinhalten, d.h. einer Beschränkung, die diktiert, dass einige Arbeit unbedingt zu einer bestimmten Zeit ausgeführt werden muss. Eine solche Beschränkung erfordert, dass einer Optimierung der Einzelthread-Ausführung Priorität gegenüber anderen Faktoren wie Speicherbandbreite oder Gesamtrechendurchsatz gegeben wird. Ein Echtzeit-Thread würde implizieren, dass eine einzelne Mikromaschine nur einen Thread ausführt. Es würden nicht mehrere Threads gehandhabt, weil es das Ziel ist zuzulassen, dass der einzelne Echtzeit-Thread so bald wie möglich ausgeführt wird – eine Ausführung mehrerer Threads würde diese Möglichkeit behindern.
  • Die Codierungsweise dieser beiden Paradigmen könnte sich in Bezug auf die Ausgabe von Speicherreferenzen und Kontextumschaltung erheblich unterscheiden. Im Echtzeitfall besteht das Ziel darin, so bald wie möglich möglichst viele Speicherreferenzen auszugeben, um die Speicherlatenz zu minimieren, die von solchen Referenzen verursacht wird. Nach der frühestmöglichen Ausgabe möglichst vieler Referenzen wäre es das Ziel, so viele Rechenvorgänge als die Mikromaschinen parallel zu den Referenzen durchzuführen. [sic] Ein Rechenablauf, der einer Echtzeitoptimierung entspricht, lautet:
    • o) Ausgabe mem ref 1
    • o) Ausgabe mem ref 2
    • o) Ausgabe mem ref 3
    • o) Ausführung von Arbeit unabhängig von mem refs 1, 2 und 3
    • o) Synch auf Vollendung von mem ref 1
    • o) Ausführung von Arbeit abhängig von mem ref 1 und unabhängig von mem refs 2 und 3
    • o) Ausgabe neuer mem refs auf der Basis von vorheriger Arbeit
    • o) Synch auf Vollendung von mem ref 2
    • o) Ausführung von Arbeit abhängig von mem refs 1 und 2, unabhängig von mem ref 3
    • o) Ausgabe neuer mem refs auf der Basis vorheriger Arbeit
    • o) Synch auf Vollendung von mem ref 3
    • o) Ausführung von Arbeit abhängig von Vollendung aller 3 refs
    • o) Ausgabe neuer mem refs auf der Basis von vorheriger Arbeit
  • Im Gegensatz dazu wäre der Ansatz für die Optimierung für Durchsatz und Bandbreite anders. Bei Optimierung für Mikromaschinen-Rechendurchsatz und Gesamtspeicherbandbreite würde der Einzelthread-Ausführungslatenz weniger Bedeutung eingeräumt. Um dies zu erzielen, wäre es das Ziel, Speicherreferenzen über das Mikroprogramm für jeden Thread gleichmäßig zu beabstanden. Dies ergäbe einen gleichmäßigen Strom von Speicherreferenzen zu den SRAM- und SDRAM-Controllern und würde die Wahrscheinlichkeit maximieren, dass ein Thread immer verfügbar ist, um die Speicherlatenz zu verbergen, die entsteht, wenn ein anderer Thread ausgelagert wird.
  • Registerdatei-Adresstypen
  • Gemäß 3C sind die beiden existierenden Registeradressräume alle lokal zugängige Register und global zugängige Register, auf die alle Mikromaschinen zugreifen können. Die Universalregister (GPR) werden als zwei separate Bänke (Bank A und Bank B) implementiert, deren Adressen auf einer Wort-für-Wort-Basis verschachtelt sind, so dass A-Bank-Register lsb=0 und B-Bank-Register lsb=1 haben. Jede Bank kann gleichzeitig Lese- und Schreibvorgänge an zwei verschiedenen Wörtern in der Bank durchführen.
  • Über die Bänke A und B ist der Registersatz 76b auch in vier Fenster 76b0–76b3 von 32 Registern organisiert, die pro Thread relativ adressierbar sind. Somit findet thread_0 sein Register 0 bei 77a (Register 0), thread_1 findet sein Register_0 bei 77b (Register 32), thread_2 findet sein Register_0 bei 77c (Register 64) und thread_3 bei 77d (Register 96). Relative Adressierung wird unterstützt, so dass mehrere Threads genau denselben Steuerspeicher und dieselben Stellen verwenden können, aber auf andere Registerfenster zugreifen und andere Funktionen ausführen. Die Anwendung von Registerfensteradressierung und Bankadressierung ergibt die benötigte Lesebandbreite unter Verwendung von nur Zwei-Port-RAMs in der Mikromaschine 22f.
  • Diese Fensterregister brauchen keine Daten von einer Kontextumschaltung zur nächsten zu speichern, so dass das normale „Pushen und Poppen" einer Kontextumlagerungsdatei oder eines Stapels wegfällt. Kontextumschaltung hat hier einen 0-Zyklus-Overhead für den Wechsel von einem Kontext zum anderen. Relative Registeradressierung unterteilt die Registerbänke in Fenster über die Adressbreite des Universalregistersatzes. Relative Adressierung erlaubt den Zugriff auf beliebige der Fenster relativ zum Ausgangspunkt des Fensters. Absolute Adressierung wird auch in dieser Architektur unterstützt, wo beliebige der Threads auf beliebige der absoluten Register zugreifen können, indem die exakte Adresse des Registers bereitgestellt wird.
  • Die Adressierung von Universalregistern 78 kann in 2 Modi je nach Mikrowortformat auftreten. Die beiden Modi sind absolut und relativ. Im Absolutmodus wird die Adressierung einer Registeradresse direkt im 7-Bit-Quellfeld (a6-a0 oder b6-b0) vorgegeben:
  • Figure 00310001
  • Registeradressen, die direkt im 8-Bit-Zielfeld (d7-d0) vorgegeben sind:
  • Figure 00310002
  • Wenn <a6:a5>=1,1, <b6:b5>=1,1 oder <d7:d6>=1,1 ist, dann werden die tieferen Bits als kontextrelatives Adressfeld (nachfolgend beschrieben) interpretiert. Wenn eine nicht-relative A- oder B-Quelladresse im A, B Absolutfeld vorgegeben wird, dann kann nur die untere Hälfte der SRAM/ASB- und SDRAM-Adressräume adressiert werden. Effektiv hat das Lesen von absoluten SRAM/SDRAM-Geräten den effektiven Adressraum; da jedoch diese Beschränkung nicht auf das Zielfeld zutrifft, benutzt der SRAM/SDRAM-Schreibvorgang weiterhin den vollen Adressraum.
  • Im Relativmodus werden Addressen eine vorgegebene Adresse [sic] im Kontextraum gemäß Definition durch ein 5-Bit-Quellfeld (a4-a0 oder b4-b0) versetzt:
    Figure 00310003
    oder gemäß Definition im 6-Bit-Zielfeld (d5-d0):
  • Figure 00320001
  • Wenn <d5:d4>=1,1 ist, dann adressiert die Zieladresse kein gültiges Register, und somit wird kein Zieloperand zurückgeschrieben.
  • Auf die folgenden Register kann von den Mikromaschinen und den Speicher-Controllern global zugegriffen werden:
    • Hash-Einheitsregister
    • Notizblock- und gemeinsame Register
    • Empfangs-FIFO und Empfangs-Status-FIFO
    • Sende-FIFO
    • Sende-Steuer-FIFO
  • Die Mikromaschinen sind nicht Interrupt-gesteuert. Jeder Mikrofluss wird bis zur Vollendung ausgeführt, dann wird ein neuer Fluss auf der Basis des Zustands gewählt, der von anderen Geräten im Prozessor 12 signalisiert wird.
  • Gemäß 4 beinhaltet der SDRAM-Speicher-Controller 26a Speicherreferenzwarteschlangen 90, bei denen Speicherreferenzanforderungen von den verschiedenen Mikromaschinen 22a22f ankommen. Der Speicher-Controller 26a beinhaltet einen Zuteiler 91, der die nächsten der [sic] Mikromaschinen-Referenzanforderungen auswählt, die zu einer der Funktionseinheiten gehen sollen. Unter der Annahme, dass eine der Mikromaschinen eine Referenzanforderung gibt, kommt die Referenzanforderung durch die Adress- und Befehlswarteschlange 90 im SDRAM-Controller 26a. Wenn in der Referenzanforderung ein Bit mit der Bezeichnung „optimiertes MEM-Bit" gesetzt ist, dann wird die eingehende Referenzanforderung entweder in die geradzahlige Bankwarteschlange 90a oder in die ungeradzahlige Bankwarteschlange 90b sortiert. Wenn in der Speicherreferenzanforderung kein Speicheroptimierungsbit gesetzt ist, dann geht die Anforderung vorgabemäßig in eine Order-Warteschlange 90c. Der SDRAM-Controller 26 ist ein von FBUS-Schnittstelle 28, Kernprozessor 20 und PCI-Schnittstelle 24 gemeinsam genutztes Betriebsmittel. Der SDRAM-Controller 26 führt auch eine Zustandsmaschine zum Durchführen atomarer READ-MODIFY-Write-Operationen. Der SDRAM-Controller 26 führt auch eine Byte-Ausrichtung für Anforderungen von Daten vom SDRAM durch.
  • Die Order-Warteschlange 90c verwaltet die Reihenfolge von Referenzanforderungen von den Mikromaschinen. Bei einer Serie von ungeradzahligen und geradzahligen Bankreferenzen ist es möglicherweise erforderlich, dass ein Signal nur nach Abschluss einer Sequenz von Speicherreferenzen zu ungeradzahligen und geradzahligen Bänken zurückgegeben wird. Wenn die Mikromaschine 22f die Speicherreferenzen in ungeradzahlige und geradzahlige Bankreferenzen sortiert und einer der Bänke, z.B. der geradzahligen Bank, die Speicherreferenzen vor der ungeradzahligen Bank ausgehen, aber das Signal auf der letzten geradzahligen Referenz aufgedrückt wird, dann wäre es denkbar, dass der Speicher-Controller 26a einer Mikromaschine signalisiert, dass die Speicheranforderung fertig ist, auch wenn die ungeradzahlige Bankreferenz noch nicht bearbeitet wurde. Dies könnte ein Kohärenzproblem verursachen. Die Situation wird dadurch vermieden, dass die Order-Warteschlange 90c bereitgestellt wird, so dass eine Mikromaschine mehrere ausstehende Speicherreferenzen haben kann, von denen nur die letzte Speicherreferenz einen Abschluss zu signalisieren braucht.
  • Der SDRAM-Controller 26a beinhaltet auch eine Hohe-Priorität-Warteschlange 90d. In der Hohe-Priorität-Warteschlange 90d geht eine eingehende Speicherreferenz von einer der Mikromaschinen direkt zur Hohe-Priorität- Warteschlange und wird mit einer höheren Priorität bearbeitet als andere Speicherreferenzen in den anderen Warteschlangen. Alle diese Warteschlangen, die Geradzahlige-Bank-Warteschlange 90a, die Ungeradzahlige-Bank-Warteschlange 90b, die Order-Warteschlange 90c und die Hohe-Priorität-Warteschlange, werden in einer einzigen RAM-Struktur implementiert, die logisch in vier verschiedene Fenster segmentiert ist, wobei jedes Fenster seinen eigenen Anfangs- und Endezeiger hat. Da Füll- und Leer-Operationen nur eine einzige Eingabe und eine einzige Ausgabe sind, können sie in dieselbe RAM-Struktur gesetzt werden, um die Dichtigkeit von RAM-Strukturen zu erhöhen.
  • Der SDRAM-Controller 26a beinhaltet auch Kernbusschnittstellenlogik, d.h. ASB-Bus 92. Die ASB-Busschnittstellenlogik 92 verbindet den Kernprozessor 20 mit dem SDRAM-Controller 26a. Der ASB-Bus ist ein Bus mit einem 32-Bit-Datenpfad und einem 28-Bit-Adresspfad. Auf die Daten wird zu und von dem Speicher durch das MEM-ASB-Datengerät 98 zugegriffen, z.B. ein Puffer. Das MEM-ASB-Datengerät 98 ist eine Warteschlange für Schreibdaten. Wenn Daten vom Kernprozessor 20 über die ASB-Schnittstelle 92 ankommen, dann werden die Daten im MEM-ASB-Gerät 98 gespeichert und nachfolgend aus dem MEM ASB Gerät 98 durch die SDRAM-Schnittstelle 110 zum SDRAM-Speicher 16a entfernt. Obwohl nicht dargestellt, kann dieselbe Warteschlangenstruktur für die Lesevorgänge vorgesehen werden. Der SDRAM-Controller 26a hat auch eine Maschine 97 zum Holen von Daten aus den Mikromaschinen und dem PCI-Bus.
  • Zusätzliche Warteschlangen sind u.a. die PCI-Adresswarteschlange 94 und die ASB-Lese/Schreib-Warteschlange 96, die eine Reihe von Anforderungen verwalten. Die Speicheranforderungen werden über den Multiplexer 106 zur SDRAM-Schnittstelle 110 gesendet. Der Multiplexer 106 wird vom SDRAM-Zuteiler 91 gesteuert, der den Füllegrad der einzelnen Warteschlangen sowie den Status der Anforderungen erfasst und davon ausgehend eine Prioritätsentscheidung auf der Basis eines programmierbaren Wertes trifft, der in einem Prioritätsservice-Steuerregister 100 gespeichert ist.
  • Wenn die Steuerung zu Multiplexer 106 eine Speicherreferenzanforderung wählt, dann wird die Speicherreferenzanforderung zu einem Decoder 108 gesendet, wo sie decodiert und eine Adresse erzeugt wird. Die decodierte Adresse wird zur SDRAM-Schnittstelle 110 gesendet, wo sie in Reihen- und Spaltenadress-Strobes zerlegt wird, um auf den SDRAM 16a zuzugreifen und um Daten über Datenleitungen 16a, die Daten zum Bus 112 senden, zu schreiben oder zu lesen. In einer Implementation ist der Bus 112 tatsächlich zwei separate Busse anstatt eines einzelnen Busses. Die separaten Busse würden einen Lesebus, der die verteilten Mikromaschinen 22a22f koppelt, und einen Schreibbus beinhalten, der die verteilten Mikromaschinen 22a22f verbindet.
  • Ein Merkmal des SDRAM-Controllers 26a ist, dass es, wenn eine Speicherreferenz in den Warteschlangen 90 gespeichert wird, zusätzlich zu dem optimierten MEM-Bit, das gesetzt werden kann, ein „Verkettungsbit" gibt. Ein gesetztes Verkettungsbit ermöglicht eine spezielle Handhabung von benachbarten Speicherreferenzen. Wie zuvor erwähnt, steuert der Zuteiler 12, welche Mikromaschine dafür ausgewählt wird, Speicherreferenzanforderungen über den Befehlsbus zur Warteschlange 90 (4) zu senden. Das Aufdrücken des Verkettungsbits steuert den Zuteiler so, dass er die Funktionseinheit wählt, die zuvor diesen Bus angefordert hat, weil das Setzen des Verkettungsbits anzeigt, dass die Mikromaschine eine Verkettungsanforderung ausgegeben hat.
  • Aneinandergrenzende Speicherreferenzen werden in die Warteschlange 90 aufgenommen, wenn das Verkettungsbit gesetzt ist. Diese aneinandergrenzenden Referenzen werden typischerweise in der Reihenfolge-Warteschlange 90c gespeichert, weil die aneinandergrenzenden Speicherreferenzen mehrere Speicherreferenzen von einem einzigen Thread sind. Zur Erzielung von Synchronisation braucht der Speicher-Controller 26a nur am Ende der verketteten Speicherreferenzen zu signalisieren, wenn sie fertig sind. In einer optimierten Speicherverkettung (z.B. dann, wenn das optimierte MEM-Bit und das Verkettungsbit gesetzt sind), könnten die Speicherreferenzen jedoch in verschiedene Bänke gehen und potentiell an einer der Bänke enden und das Signal „fertig" ausgeben, bevor die andere Bank völlig leer ist, wodurch die Kohärenz zerstört wird. Daher wird das Verkettungsbit vom Controller 110 benutzt, um die Speicherreferenzen von der aktuellen Warteschlange zu verwalten.
  • 4A zeigt eine Ablaufdarstellung der Zuteilungsrichtlinie im SDRAM-Controller 26a. Die Zuteilungsrichtlinie favorisiert verkettete Mikromaschinen-Speicheranforderungen. Der Prozess 115 beginnt mit dem Untersuchen auf verkettete Mikromaschinen-Speicherreferenzanforderungen 115a. Der Prozess 115 bleibt so lange bei den verketteten Anforderungen, bis das Verkettungsbit entfernt wird. Der Prozess untersucht ASB-Busanforderungen 115b, dann PCI-Busanforderungen 115c, Hohe-Priorität-Warteschlangenservice 115d, Entgegengesetzte-Bank-Anforderungen 115e, Order-Warteschlangenanforderungen 115f und Selbe-Bank-Anforderungen 115g. Verkettete Anforderungen werden vollständig bearbeitet, während Services 115b115d in zyklischer Folge bearbeitet werden. Erst wenn Services 115a115d völlig leer sind, bearbeitet der Prozess die Services 115e115g. Verkettete Mikromaschinen-Speicherreferenzanforderungen erfolgen dann, wenn in der vorherigen SDRAM-Speicheranforderung das Verkettungsbit gesetzt ist. Wenn das Verkettungsbit gesetzt ist, dann bearbeitet die Zuteilungsmaschine einfach die Services derselben Warteschlange nochmal, bis das Verkettungsbit entfernt wird. Der ASB hat eine höhere Priorität als PCI wegen des hohen Leistungsmehraufwands, der am Strong-Arm-Kern entsteht, wenn sich der ASB im Wartezustand befindet. Der PCI hat eine höhere Priorität als die Mikromaschinen wegen der Latenzanforderungen von PCI. Bei anderen Bussen könnte die Zuteilungspriorität jedoch anders sein.
  • 4B zeigt eine typische Zeitsteuerung eines Speichers ohne aktive Speicheroptimierung und mit aktiver Speicheroptimierung. Wie ersichtlich ist, maximiert die Verwendung von aktiven Speicheroptimierungen die Auslastung des Busses und verbirgt somit die inhärente Latenz in physikalischen SDRAM-Geräten. In diesem Beispiel kann ein nicht optimierter Zugriff 14 Zyklen erfordern, während ein optimierter Zugriff 7 Zyklen erfordern kann.
  • 5 zeigt den Speicher-Controller 26b für den SRAM. Der Speicher-Controller 26b beinhaltet eine Adress- und Befehlswarteschlange 120. Während der Speicher-Controller 26a (4) eine Warteschlange für die Speicheroptimierung auf der Basis von geradzahligen und ungeradzahligen Banken hat, wird der Speicher-Controller 26b auf der Basis des Speicheroperationstyps optimiert, d.h. Lesen oder Schreiben. Die Adress- und Befehlswarteschlange 120 beinhaltet eine Hohe-Priorität-Warteschlange 120a, eine Lesewarteschlange 120b, die die vorherrschende Speicherreferenzfunktion ist, die ein SRAM ausführt, und eine Order-Warteschlange 120c, die im Allgemeinen alle Schreibvorgänge auf SRAM beinhaltet und liest, die nicht-optimiert sein sollen. Obwohl nicht dargestellt, könnte die Adress- und Befehlswarteschlange 120 auch eine Schreibwarteschlange beinhalten.
  • Der SRAM-Controller 26b beinhaltet auch Kernbusschnittstellenlogik, d.h, den ASB-Bus 122. Die ASB-Busschnittstellenlogik 122 verbindet den Kernprozessor 20 mit dem SRAM-Controller 26b. Der ASB-Bus ist ein Bus mit einem 32-Bit-Datenpfad und einem 28-Bit-Adresspfad. Auf die Daten wird zu und von dem Speicher durch das MEM ASB Datengerät 128 zugegriffen, z.B. ein Puffer. Das MEM ASB Datengerät 128 ist eine Warteschlange für Schreibdaten. Wenn Daten vom Kernprozessor 20 über die ASB-Schnittstelle 122 eingehen, dann können die Daten im MEM ASB Gerät 128 gespeichert und nachfolgend durch die SRAM-Schnittstelle 140 aus dem MEM ASB Gerät 128 zum SRAM-Speicher 16b entfernt werden. Obwohl nicht dargestellt, kann dieselbe Warteschlangenstruktur auch für Lesevorgänge vorgesehen werden. Der SRAM-Controller 26b beinhaltet auch eine Maschine 127 zum Holen von Daten aus den Mikromaschinen und dem PCI-Bus.
  • Die Speicheranforderungen werden über den Multiplexer 126 zur SRAM-Schnittstelle 140 gesendet. Der Multiplexer 126 wird vom SRAM-Zuteiler 131 gesteuert, der den Füllegrad der Warteschlangen sowie den Status der Anforderungen erfasst und der davon ausgehend die Priorität auf der Basis eines programmierbaren Wertes entscheidet, der im Prioritätsservice-Steuerregister 130 gespeichert ist. Wenn die Steuerung zu Multiplexer 126 eine Speicherreferenzanforderung gewählt hat, dann wird die Speicherreferenzanforderung zu einem Decoder 138 gesendet, wo sie decodiert und eine Adresse generiert wird.
  • Die SRAM-Einheit verwaltet die Steuerung von Memory Mapped Off-Chip SRAM und Expansion-ROM. Der SRAM-Controller 26b kann z.B. 16 MB adressieren, z.B. 8 MB für SRAM 16b gemappt und 8 MB für Sonderfunktionen reserviert, wie z.B.: Boot-Raum über Flashrom 16c; und Konsolenport-Zugang für MAC-Geräte 13a, 13b und Zugang zu assoziierten (RMON) Zählern. Der SRAM wird für lokale Lookup-Tabellen und Warteschlangenmanagementfunktionen verwendet.
  • Der SRAM-Controller 26b unterstützt die folgenden Transaktionen:
    • Mikromaschinenanforderungen (über privaten Bus) zu/von SRAM
    • Kernprozessor (über ASB-Bus) zu/von SRAM
  • Der SRAM-Controller 26b sortiert Speicherreferenzen, um Verzögerungen (Blasen) in der Pipeline von der SRAM-Schnittstelle 140 zum Speicher 16b minimal zu halten. Der SRAM-Controller 26b sortiert Speicherreferenzen auf der Basis der Lesefunktion. Eine Blase kann 1 oder 2 Zyklen lang sein, je nach dem verwendeten Speichergerätetyp.
  • Der SRAM-Controller 26b beinhaltet ein Lock-Lookup-Gerät 142, das ein acht (8 Eingabeadressinhalt adressierbarer Speicher zum Nachschlagen von Read-Locks ist [sic]. Jede Position hat ein gültiges Bit, das von nachfolgenden Read-Lock-Anforderungen untersucht wird. Die Adress- und Befehlswarteschlange 120 beinhaltet auch eine Read-Lock-Fail-Warteschlange 120d. Die Read-Lock-Fail-Warteschlange 120d dient zum Speichern von Lese-Speicherreferenzanforderungen, die aufgrund einer Sperre an einem Teil des Speichers erfolglos verlaufen. Das heißt, eine der Mikromaschinen gibt eine Speicheranforderung aus, die eine Read-Lock-Anforderung hat, die in der Adress- und Steuerwarteschlange 120 verarbeitet wird. Die Speicheranforderung wirkt auf der Order-Warteschlange 120c oder der Lesewarteschlange 120b und erkennt sie als Read-Lock-Anforderung. Der Controller 26b greift auf das Lock-Lookup-Gerät 142 zu, um zu ermitteln, ob diese Speicherstelle bereits gesperrt ist. Wenn diese Speicherstelle gegen eine vorherige Read-Lock-Anforderung gesperrt ist, dann verläuft die Speicher-Lock-Anforderung erfolglos und wird in der Read-Lock-Fail-Warteschlange 120d gespeichert. Wenn sie entsperrt ist oder wenn 142 keine Sperre an dieser Adresse zeigt, dann wird die Adresse dieser Speicherreferenz von der SRAM-Schnittstelle 140 zum Durchführen einer traditionellen SRAM-Adress-Lese/Schreib-Anforderung auf Speicher 16b verwendet. Der Befehls-Controller und der Adressgenerator 138 geben die Sperre ebenfalls in das Lock-Lookup-Gerät 142, so dass nachfolgende Read-Lock-Anforderungen die Speicherstelle gesperrt vorfinden. Eine Speicherstelle wird durch Ausführen der Microcontroller-Anweisung in einem Programm entsperrt, wenn die Notwendigkeit für die Sperre nicht mehr besteht. Die Stelle wird durch Entfernen des Gültig-Bits im CAM entriegelt. Nach einer Entsperrung wird die Read-Lock-Fail-Warteschlange 120d zur Warteschlange mit der höchsten Priorität, so dass alle Lese-Lock-Misses in der Warteschlange die Möglichkeit erhalten, eine Speicher-Lock-Anforderung auszugeben.
  • 5A zeigt eine typische Zeitsteuerung eines statischen Direktzugriffsspeichers ohne aktive Speicheroptimierung und mit aktiver Speicheroptimierung. Wie ersichtlich ist, wird durch Gruppieren von Lese- und Schreibvorgängen die Zykluszeit verbessert und Totzyklen entfallen.
  • 6 zeigt die Kommunikation zwischen den Mikromaschinen 22 und der FBUS-Schnittstellenlogik (FBI). Die FBUS-Schnittstelle 28 in einer Netzwerkanwendung kann die Kopfzeilenverarbeitung von eingehenden Paketen vom FBUS 18 durchführen. Eine Schlüsselfunktion, die die FBUS-Schnittstelle ausführt, ist die Extraktion von Paketkopfzeilen, und ein mikroprogrammierbares hashcodiertes Quell/Ziel/Protokoll-Lookup im SRAM. Wenn sich die Hash-Codierung nicht richtig auflöst, dann wird die Paketkopfzeile für eine weitergehende Verarbeitung zum Kernprozessor 28 weitergeleitet.
  • FBI 28 enthält einen Sende-FIFO 182, einen Empfangs-FIFO 183, eine HASH-Einheit 188 sowie FBI-Steuer- und Statusregister 189. Diese vier Einheiten kommunizieren mit den Mikromaschinen 22 über einen zeitmultiplexierten Zugriff auf den SRAM-Bus 38, der mit den Transferregistern 78, 80 in den Mikromaschinen verbunden ist. Das heißt, alle Kommunikationen zu und von den Mikromaschinen erfolgen über die Transferregister 78, 80. Die FBUS-Schnittstelle 28 beinhaltet eine Push-Zustandsmaschine 200 zum Pushen von Daten in die Transferregister während der Zeitzyklen, in denen der SRAM den SRAM-Datenbus (Teil von Bus 38) NICHT benutzt, und eine Pull-Zustandsmaschine 202 zum Abrufen von Daten aus den Transferregistern in der jeweiligen Mikromaschine.
  • Die Hash-Codiereinheit beinhaltet ein Paar FIFOs 188a, 188b. Die Hash-Einheit stellt fest, dass der FBI 28 eine FBI_hash-Anforderung empfangen hat. Die Hash-Einheit 188 holt die Hash-Codierschlüssel aus der abrufenden Mikromaschine 22. Nach dem Holen und Hash-Codieren der Schlüssel werden die Anzeigen zurück zur abrufenden Mikromaschine 22 gesendet. Unter einer einzigen FBI_hash-Anforderung sind bis zu drei Hash-Codiervorgänge möglich. Die Busse 34 und 38 sind jeweils unidirektional: SDRAM_push/pull_data und Sbus_push/pull_data. Jeder dieser Busse benötigt Steuersignale, die Lese/Schreib-Controls zu den geeigneten Transferregistern der Mikromaschine 22 senden.
  • Im Allgemeinen benötigen Transferregister Schutz vor dem sie steuernden Kontext, um die Lesekorrektheit zu garantieren. Insbesondere darf thread_1, wenn ein Schreibtransferregister von einem thread_1 benutzt wird, um Daten zum SDRAM 16a zu senden, dieses Register erst dann überschreiben, wenn das Rücksignal vom SDRAM-Controller 26a anzeigt, dass dieses Register fertig ist und jetzt wieder verwendet werden kann. Es braucht nicht jeder Schreibvorgang ein Rücksignal vom Ziel, das besagt, dass die Funktion abgeschlossen ist, weil, wenn der Thread auf dieselbe Befehlswarteschlange an diesem Ziel mit mehreren Anforderungen schreibt, die Reihenfolge der Vollendung innerhalb dieser Befehlswarteschlange garantiert wird, so dass nur der letzte Befehl eine Signalisierung zurück zum Thread erfordert. Wenn der Thread jedoch mehrere Befehlswarteschlangen (Reihenfolge und Lesen) benutzt, dann müssen diese Befehlsanforderungen in separate Kontexttasks untergliedert werden, so dass die Reihenfolge über Kontextumlagerung erhalten bleibt. Der zu Beginn des vorliegenden Absatzes angedeutete Ausnahmefall bezieht sich auf eine bestimmte Klasse von Operationen unter Verwendung eines unerwünschten PUSH zu Transferregistern vom FBI um FBUS-Statusinformationen. Um den Lese/Schreib-Determinismus an den Transferregistern zu schützen, erzeugt der FBI ein spezielles Push_protect-Signal, wenn diese speziellen FBI-Push-Operationen eingerichtet werden.
  • Jede Mikromaschine 22, die die vom FBI unerwünschte Push-Technik anwendet, muss vor dem Zugreifen auf die von FBUS-Schnittstelle und Mikromaschine vereinbarten Transferregister den Schutzflag prüfen. Wenn der Flag nicht gesetzt ist, dann kann die Mikromaschine auf die Transferregister zugreifen. Wenn der Flag gesetzt ist, muss der Kontext N Zyklen lang warten, bevor auf die Register zugegriffen wird. Diese Zahl wird zuvor von der Zahl der gepushten Transferregister ermittelt, plus einem Frontend-Schutzfenster. Die Grundidee ist, dass die Mikromaschine diesen Flag testen und die Daten, die sie von den Lesetransferregistern lesen möchte, schnell zu GPRs in aneinandergrenzenden Zyklen bewegen muss, damit die Push- Maschine nicht mit dem Mikromaschinenlesevorgang kollidiert.
  • Weitere Ausgestaltungen
  • Es ist zu verstehen, dass die Erfindung zwar in Verbindung mit der ausführlichen Beschreibung davon beschrieben wurde, dass die obige Beschreibung den Umfang der Erfindung jedoch lediglich illustrieren und nicht einschränken soll. Dieser Umfang wird durch die beiliegenden Ansprüche definiert. Weitere Aspekte, Vorteile und Modifikationen liegen innerhalb des Umfangs der nachfolgenden Ansprüche.

Claims (12)

  1. Mikrogesteuerte Funktionsausführungseinheit, die Folgendes umfasst: einen Steuerspeicher (70) zum Speichern eines Mikroprogramms; einen Mikromaschinen-Controller (72) zum Verwalten einer Mehrzahl von Mikroprogrammzählern und Decodierlogik (73) zum Decodieren von Anweisungen; einen Kontext-Event-Zuteiler (74), der als Reaktion auf externe Flags ermittelt, welcher aus einer Mehrzahl von Threads, die in der mikrogesteuerten Funktionsausführungseinheit abgearbeitet werden können, in einen Ausführungszustand promoviert werden soll; einen Universalregistersatz (76) zum Speichern und Beschaffen von Operanden, wobei der Universalregistersatz in zwei Bänke unterteilt ist, die separat adressierbar sind, und wobei jede Registerbank logisch in eine Mehrzahl von Fenstern unterteilt, ist, die der Zahl der Mikroprogrammzähler entsprechen, die in dem Mikromaschinen-Controller unterstützt werden; einen Lese-Transferregistersatz (80); und einen Schreib-Transferregistersatz (78), wobei der Lese- und der Schreib-Transferregistersatz in zwei Bänke und eine Mehrzahl von Fenstern unterteilt werden, die der Zahl der Mikroprogrammzähler entsprechen, die in dem Mikromaschinen-Controller unterstützt werden.
  2. Mikrogesteuerte Einheit nach Anspruch 1, bei der der Kontext-Event-Zuteiler Meldungen von einer Gemeinschaftsressource empfängt.
  3. Mikrogesteuerte Einheit nach Anspruch 2, bei der die Gemeinschaftsressource ein statischer Arbeitsspeicher (SRAM) ist.
  4. Mikrogesteuerte Einheit nach Anspruch 2, bei der die Gemeinschaftsressource ein synchroner dynamischer Arbeitsspeicher (SDRAM) ist.
  5. Mikrogesteuerte Einheit nach Anspruch 2, bei der die Gemeinschaftsressource ein Prozessorkern ist.
  6. Mikrogesteuerte Einheit nach Anspruch 2, bei der die Gemeinschaftsressource eine Mehrzahl von Steuer- und Statusregistern ist.
  7. Mikrogesteuerte Einheit nach Anspruch 2, bei der die Meldungen Informationen darüber geben, ob eine angeforderte Funktion vollendet ist.
  8. Mikrogesteuerte Einheit nach einem der vorherigen Ansprüche, bei der der Kontext-Event-Zuteiler Zuteilung für vier Threads umfasst.
  9. Mikrogesteuerte Einheit nach Anspruch 8, bei der die Zuteilung eine Round-Robin-Zuteilung ist.
  10. Mikrogesteuerte Einheit nach Anspruch 8, bei der die Zuteilung eine Prioritätswarteschlangenzuteilung ist.
  11. Mikrogesteuerte Einheit nach Anspruch 8, bei der die Zuteilung eine Weighted-Fair-Queuing-Zuteilung ist.
  12. Mikrogesteuerte Einheit nach Anspruch 8, bei der die mikrogesteuerte Einheit eine aus einer Mehrzahl von mikrogesteuerten Einheiten ist, die in demselben Prozessor integriert ist.
DE60011797T 1999-08-31 2000-08-17 Ausführung von mehreren fäden in einem parallelprozessor Expired - Lifetime DE60011797T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US387046 1999-08-31
US09/387,046 US6668317B1 (en) 1999-08-31 1999-08-31 Microengine for parallel processor architecture
PCT/US2000/022650 WO2001016718A1 (en) 1999-08-31 2000-08-17 Execution of multiple threads in a parallel processor

Publications (2)

Publication Number Publication Date
DE60011797D1 DE60011797D1 (de) 2004-07-29
DE60011797T2 true DE60011797T2 (de) 2005-07-14

Family

ID=23528223

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60011797T Expired - Lifetime DE60011797T2 (de) 1999-08-31 2000-08-17 Ausführung von mehreren fäden in einem parallelprozessor

Country Status (9)

Country Link
US (2) US6668317B1 (de)
EP (1) EP1221086B1 (de)
CN (2) CN101221493B (de)
AT (1) ATE269988T1 (de)
AU (1) AU7061600A (de)
CA (1) CA2383384A1 (de)
DE (1) DE60011797T2 (de)
HK (1) HK1049719B (de)
WO (1) WO2001016718A1 (de)

Families Citing this family (125)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030095967A1 (en) * 1999-01-25 2003-05-22 Mackay Fabienne BAFF, inhibitors thereof and their use in the modulation of B-cell response and treatment of autoimmune disorders
US6606704B1 (en) * 1999-08-31 2003-08-12 Intel Corporation Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode
US6983350B1 (en) * 1999-08-31 2006-01-03 Intel Corporation SDRAM controller for parallel processor architecture
WO2001016702A1 (en) 1999-09-01 2001-03-08 Intel Corporation Register set used in multithreaded parallel processor architecture
US7512724B1 (en) * 1999-11-19 2009-03-31 The United States Of America As Represented By The Secretary Of The Navy Multi-thread peripheral processing using dedicated peripheral bus
US6532509B1 (en) 1999-12-22 2003-03-11 Intel Corporation Arbitrating command requests in a parallel multi-threaded processing system
US6694380B1 (en) 1999-12-27 2004-02-17 Intel Corporation Mapping requests from a processing unit that uses memory-mapped input-output space
US6631430B1 (en) * 1999-12-28 2003-10-07 Intel Corporation Optimizations to receive packet status from fifo bus
US6661794B1 (en) 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing
US7480706B1 (en) * 1999-12-30 2009-01-20 Intel Corporation Multi-threaded round-robin receive for fast network port
US6952824B1 (en) * 1999-12-30 2005-10-04 Intel Corporation Multi-threaded sequenced receive for fast network port stream of packets
US6823473B2 (en) * 2000-04-19 2004-11-23 Hewlett-Packard Development Company, L.P. Simultaneous and redundantly threaded processor uncached load address comparator and data value replication circuit
US6854075B2 (en) * 2000-04-19 2005-02-08 Hewlett-Packard Development Company, L.P. Simultaneous and redundantly threaded processor store instruction comparator
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
US20020053017A1 (en) * 2000-09-01 2002-05-02 Adiletta Matthew J. Register instructions for a multithreaded processor
US7131125B2 (en) * 2000-12-22 2006-10-31 Nortel Networks Limited Method and system for sharing a computer resource between instruction threads of a multi-threaded process
US7516334B2 (en) * 2001-03-22 2009-04-07 Sony Computer Entertainment Inc. Power management for processing modules
US7093104B2 (en) * 2001-03-22 2006-08-15 Sony Computer Entertainment Inc. Processing modules for computer architecture for broadband networks
US7233998B2 (en) * 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US7231500B2 (en) * 2001-03-22 2007-06-12 Sony Computer Entertainment Inc. External data interface in a computer architecture for broadband networks
US6526491B2 (en) * 2001-03-22 2003-02-25 Sony Corporation Entertainment Inc. Memory protection system and method for computer architecture for broadband networks
US7216204B2 (en) * 2001-08-27 2007-05-08 Intel Corporation Mechanism for providing early coherency detection to enable high performance memory updates in a latency sensitive multithreaded environment
US7225281B2 (en) * 2001-08-27 2007-05-29 Intel Corporation Multiprocessor infrastructure for providing flexible bandwidth allocation via multiple instantiations of separate data buses, control buses and support mechanisms
US6868476B2 (en) * 2001-08-27 2005-03-15 Intel Corporation Software controlled content addressable memory in a general purpose execution datapath
WO2003025709A2 (en) * 2001-09-19 2003-03-27 Bay Microsystems, Inc. Vertical instruction and data processing in a network processor architecture
US7126952B2 (en) * 2001-09-28 2006-10-24 Intel Corporation Multiprotocol decapsulation/encapsulation control structure and packet protocol conversion method
US7107413B2 (en) * 2001-12-17 2006-09-12 Intel Corporation Write queue descriptor count instruction for high speed queuing
US7895239B2 (en) 2002-01-04 2011-02-22 Intel Corporation Queue arrays in network devices
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
EP1512070A2 (de) 2002-05-24 2005-03-09 Koninklijke Philips Electronics N.V. Konfigurierbarer prozessor
US7471688B2 (en) * 2002-06-18 2008-12-30 Intel Corporation Scheduling system for transmission of cells to ATM virtual circuits and DSL ports
US8015303B2 (en) 2002-08-02 2011-09-06 Astute Networks Inc. High data rate stateful protocol processing
US7248584B2 (en) * 2002-08-07 2007-07-24 Intel Corporation Network packet processing
US7124196B2 (en) * 2002-08-07 2006-10-17 Intel Corporation Processing a network packet using queues
US7814218B1 (en) 2002-10-17 2010-10-12 Astute Networks, Inc. Multi-protocol and multi-format stateful processing
US7596621B1 (en) * 2002-10-17 2009-09-29 Astute Networks, Inc. System and method for managing shared state using multiple programmed processors
US8151278B1 (en) 2002-10-17 2012-04-03 Astute Networks, Inc. System and method for timer management in a stateful protocol processing system
US7433307B2 (en) * 2002-11-05 2008-10-07 Intel Corporation Flow control in a network environment
US7496915B2 (en) * 2003-04-24 2009-02-24 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US20050102474A1 (en) * 2003-11-06 2005-05-12 Sridhar Lakshmanamurthy Dynamically caching engine instructions
US20050108479A1 (en) * 2003-11-06 2005-05-19 Sridhar Lakshmanamurthy Servicing engine cache requests
US7536692B2 (en) 2003-11-06 2009-05-19 Intel Corporation Thread-based engine cache partitioning
US7213099B2 (en) * 2003-12-30 2007-05-01 Intel Corporation Method and apparatus utilizing non-uniformly distributed DRAM configurations and to detect in-range memory address matches
JP2005276165A (ja) * 2004-02-27 2005-10-06 Sony Corp 情報処理装置、ネットワークシステム状況呈示方法およびコンピュータプログラム
JP4586526B2 (ja) 2004-02-27 2010-11-24 ソニー株式会社 情報処理装置、情報処理方法、情報処理システムおよび情報処理用プログラム
US7181568B2 (en) * 2004-03-25 2007-02-20 Intel Corporation Content addressable memory to identify subtag matches
US20050216655A1 (en) * 2004-03-25 2005-09-29 Rosenbluth Mark B Content addressable memory constructed from random access memory
US8224639B2 (en) 2004-03-29 2012-07-17 Sony Computer Entertainment Inc. Methods and apparatus for achieving thermal management using processing task scheduling
US7478198B2 (en) * 2004-05-24 2009-01-13 Intel Corporation Multithreaded clustered microarchitecture with dynamic back-end assignment
US7533248B1 (en) * 2004-06-30 2009-05-12 Sun Microsystems, Inc. Multithreaded processor including a functional unit shared between multiple requestors and arbitration therefor
US7774393B1 (en) 2004-06-30 2010-08-10 Oracle America, Inc. Apparatus and method for integer to floating-point format conversion
US7478225B1 (en) 2004-06-30 2009-01-13 Sun Microsystems, Inc. Apparatus and method to support pipelining of differing-latency instructions in a multithreaded processor
US7330988B2 (en) * 2004-06-30 2008-02-12 Sun Microsystems, Inc. Method and apparatus for power throttling in a multi-thread processor
US8225034B1 (en) 2004-06-30 2012-07-17 Oracle America, Inc. Hybrid instruction buffer
US7941642B1 (en) 2004-06-30 2011-05-10 Oracle America, Inc. Method for selecting between divide instructions associated with respective threads in a multi-threaded processor
US7373489B1 (en) 2004-06-30 2008-05-13 Sun Microsystems, Inc. Apparatus and method for floating-point exception prediction and recovery
US7216216B1 (en) 2004-06-30 2007-05-08 Sun Microsystems, Inc. Register window management using first pipeline to change current window and second pipeline to read operand from old window and write operand to new window
US7523330B2 (en) * 2004-06-30 2009-04-21 Sun Microsystems, Inc. Thread-based clock enabling in a multi-threaded processor
US7890734B2 (en) * 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution in a multithreaded processor
US7353364B1 (en) 2004-06-30 2008-04-01 Sun Microsystems, Inc. Apparatus and method for sharing a functional unit execution resource among a plurality of functional units
US7343474B1 (en) 2004-06-30 2008-03-11 Sun Microsystems, Inc. Minimal address state in a fine grain multithreaded processor
US7861063B1 (en) 2004-06-30 2010-12-28 Oracle America, Inc. Delay slot handling in a processor
US7185178B1 (en) 2004-06-30 2007-02-27 Sun Microsystems, Inc. Fetch speculation in a multithreaded processor
US7434000B1 (en) 2004-06-30 2008-10-07 Sun Microsystems, Inc. Handling duplicate cache misses in a multithreaded/multi-core processor
US7437538B1 (en) 2004-06-30 2008-10-14 Sun Microsystems, Inc. Apparatus and method for reducing execution latency of floating point operations having special case operands
US7702887B1 (en) 2004-06-30 2010-04-20 Sun Microsystems, Inc. Performance instrumentation in a fine grain multithreaded multicore processor
US7178005B1 (en) 2004-06-30 2007-02-13 Sun Microsystems, Inc. Efficient implementation of timers in a multithreaded processor
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7370243B1 (en) 2004-06-30 2008-05-06 Sun Microsystems, Inc. Precise error handling in a fine grain multithreaded multicore processor
US7676655B2 (en) * 2004-06-30 2010-03-09 Sun Microsystems, Inc. Single bit control of threads in a multithreaded multicore processor
US7426630B1 (en) 2004-06-30 2008-09-16 Sun Microsystems, Inc. Arbitration of window swap operations
US7383403B1 (en) 2004-06-30 2008-06-03 Sun Microsystems, Inc. Concurrent bypass to instruction buffers in a fine grain multithreaded processor
US7747771B1 (en) 2004-06-30 2010-06-29 Oracle America, Inc. Register access protocol in a multihreaded multi-core processor
US8095778B1 (en) 2004-06-30 2012-01-10 Open Computing Trust I & II Method and system for sharing functional units of a multithreaded processor
US7895431B2 (en) * 2004-09-10 2011-02-22 Cavium Networks, Inc. Packet queuing, scheduling and ordering
US20060067348A1 (en) * 2004-09-30 2006-03-30 Sanjeev Jain System and method for efficient memory access of queue control data structures
US8037250B1 (en) 2004-12-09 2011-10-11 Oracle America, Inc. Arbitrating cache misses in a multithreaded/multi-core processor
US7564847B2 (en) * 2004-12-13 2009-07-21 Intel Corporation Flow assignment
US20060149921A1 (en) * 2004-12-20 2006-07-06 Lim Soon C Method and apparatus for sharing control components across multiple processing elements
US7418543B2 (en) 2004-12-21 2008-08-26 Intel Corporation Processor having content addressable memory with command ordering
US7555630B2 (en) * 2004-12-21 2009-06-30 Intel Corporation Method and apparatus to provide efficient communication between multi-threaded processing elements in a processor unit
US20060140203A1 (en) * 2004-12-28 2006-06-29 Sanjeev Jain System and method for packet queuing
US7467256B2 (en) 2004-12-28 2008-12-16 Intel Corporation Processor having content addressable memory for block-based queue structures
US7430643B2 (en) * 2004-12-30 2008-09-30 Sun Microsystems, Inc. Multiple contexts for efficient use of translation lookaside buffer
US20060150165A1 (en) * 2004-12-30 2006-07-06 Intel Corporation Virtual microengine systems and methods
JP4527571B2 (ja) * 2005-03-14 2010-08-18 富士通株式会社 再構成可能演算処理装置
US7535907B2 (en) 2005-04-08 2009-05-19 Oavium Networks, Inc. TCP engine
KR101270925B1 (ko) * 2005-05-20 2013-06-07 소니 주식회사 신호 처리 장치
US20060294344A1 (en) * 2005-06-28 2006-12-28 Universal Network Machines, Inc. Computer processor pipeline with shadow registers for context switching, and method
US20070157030A1 (en) * 2005-12-30 2007-07-05 Feghali Wajdi K Cryptographic system component
US7680909B2 (en) * 2007-03-21 2010-03-16 Ittiam Systems (P) Ltd. Method for configuration of a processing unit
US8347068B2 (en) * 2007-04-04 2013-01-01 International Business Machines Corporation Multi-mode register rename mechanism that augments logical registers by switching a physical register from the register rename buffer when switching between in-order and out-of-order instruction processing in a simultaneous multi-threaded microprocessor
US7779233B2 (en) * 2007-10-23 2010-08-17 International Business Machines Corporation System and method for implementing a software-supported thread assist mechanism for a microprocessor
US8024719B2 (en) 2008-11-03 2011-09-20 Advanced Micro Devices, Inc. Bounded hash table sorting in a dynamic program profiling system
US20100115494A1 (en) * 2008-11-03 2010-05-06 Gorton Jr Richard C System for dynamic program profiling
US8478948B2 (en) * 2008-12-04 2013-07-02 Oracle America, Inc. Method and system for efficient tracing and profiling of memory accesses during program execution
JP5081847B2 (ja) * 2009-02-20 2012-11-28 株式会社日立製作所 マルチプロセッサによるパケット処理装置およびパケット処理方法
CN101996103B (zh) * 2009-08-20 2013-03-20 三星电子(中国)研发中心 多核云计算平台并行应用优化方法
US8732711B2 (en) * 2010-09-24 2014-05-20 Nvidia Corporation Two-level scheduler for multi-threaded processing
JP5725162B2 (ja) * 2011-03-31 2015-05-27 富士通株式会社 排他制御方法、および排他制御プログラム
CN102495726B (zh) 2011-11-15 2015-05-20 无锡德思普科技有限公司 机会多线程方法及处理器
US9069598B2 (en) * 2012-01-06 2015-06-30 International Business Machines Corporation Providing logical partions with hardware-thread specific information reflective of exclusive use of a processor core
US9100212B2 (en) * 2012-07-18 2015-08-04 Netronome Systems, Inc. Transactional memory that performs a direct 32-bit lookup operation
US8902902B2 (en) * 2012-07-18 2014-12-02 Netronome Systems, Incorporated Recursive lookup with a hardware trie structure that has no sequential logic elements
US9098264B2 (en) * 2012-07-18 2015-08-04 Netronome Systems, Inc. Transactional memory that performs a direct 24-BIT lookup operation
US20140025884A1 (en) * 2012-07-18 2014-01-23 Netronome Systems, Inc. Transactional Memory that Performs a Statistics Add-and-Update Operation
KR101984635B1 (ko) 2012-07-19 2019-05-31 삼성전자주식회사 어플리케이션을 고속으로 처리하는 연산 처리 장치 및 방법
US9152452B2 (en) * 2012-08-29 2015-10-06 Netronome Systems, Inc. Transactional memory that performs a CAMR 32-bit lookup operation
US9207944B1 (en) 2013-03-15 2015-12-08 Google Inc. Doubling thread resources in a processor
CN103200048B (zh) * 2013-04-02 2018-07-13 中兴通讯股份有限公司 一种网络处理器异常检测方法、装置及网络处理设备
US9766894B2 (en) * 2014-02-06 2017-09-19 Optimum Semiconductor Technologies, Inc. Method and apparatus for enabling a processor to generate pipeline control signals
US9558000B2 (en) 2014-02-06 2017-01-31 Optimum Semiconductor Technologies, Inc. Multithreading using an ordered list of hardware contexts
US9575802B2 (en) * 2014-10-28 2017-02-21 International Business Machines Corporation Controlling execution of threads in a multi-threaded processor
CN104581172A (zh) * 2014-12-08 2015-04-29 北京中星微电子有限公司 一种实现svc宏块级算法的硬件结构
CN107003222A (zh) * 2015-01-30 2017-08-01 惠普发展公司,有限责任合伙企业 多线程流体参数信号处理
US10706101B2 (en) 2016-04-14 2020-07-07 Advanced Micro Devices, Inc. Bucketized hash tables with remap entries
US10365681B1 (en) 2016-09-04 2019-07-30 Netronome Systems, Inc. Multiprocessor system having fast clocking prefetch circuits that cause processor clock signals to be gapped
US10191867B1 (en) 2016-09-04 2019-01-29 Netronome Systems, Inc. Multiprocessor system having posted transaction bus interface that generates posted transaction bus commands
US10366019B1 (en) 2016-09-04 2019-07-30 Netronome Systems, Inc. Multiprocessor system having efficient and shared atomic metering resource
US10810064B2 (en) 2018-04-27 2020-10-20 Nasdaq Technology Ab Publish-subscribe framework for application execution
CN109525443B (zh) * 2018-12-29 2019-12-10 广州供电局有限公司 分布式前置采集通讯链路的处理方法、装置和计算机设备
CN111079904B (zh) * 2019-12-23 2023-05-23 福建星网视易信息系统有限公司 深度可分离卷积的加速方法和存储介质
CN111459630B (zh) * 2020-03-24 2023-12-08 华东计算技术研究所(中国电子科技集团公司第三十二研究所) 采用硬件多线程机制的网络处理器
CN112732416B (zh) * 2021-01-18 2024-03-26 深圳中微电科技有限公司 有效消除数据访问延迟的并行数据处理方法及并行处理器

Family Cites Families (149)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3373408A (en) 1965-04-16 1968-03-12 Rca Corp Computer capable of switching between programs without storage and retrieval of the contents of operation registers
US3478322A (en) 1967-05-23 1969-11-11 Ibm Data processor employing electronically changeable control storage
BE795789A (fr) * 1972-03-08 1973-06-18 Burroughs Corp Microprogramme comportant une micro-instruction de recouvrement
IT986411B (it) * 1973-06-05 1975-01-30 Olivetti E C Spa Sistema per trasferire il control lo delle elaborazioni da un primo livello prioritario ad un secondo livello prioritario
US4016548A (en) * 1975-04-11 1977-04-05 Sperry Rand Corporation Communication multiplexer module
CH584488A5 (de) * 1975-05-05 1977-01-31 Ibm
US4075691A (en) * 1975-11-06 1978-02-21 Bunker Ramo Corporation Communication control unit
US4130890A (en) 1977-06-08 1978-12-19 Itt Industries, Inc. Integrated DDC memory with bitwise erase
JPS56164464A (en) 1980-05-21 1981-12-17 Tatsuo Nogi Parallel processing computer
US4400770A (en) 1980-11-10 1983-08-23 International Business Machines Corporation Cache synonym detection and handling means
CA1179069A (en) * 1981-04-10 1984-12-04 Yasushi Fukunaga Data transmission apparatus for a multiprocessor system
JPS59111533A (ja) 1982-12-17 1984-06-27 Hitachi Ltd デジタルデ−タ演算回路
US4831358A (en) * 1982-12-21 1989-05-16 Texas Instruments Incorporated Communications system employing control line minimization
US4745544A (en) * 1985-12-12 1988-05-17 Texas Instruments Incorporated Master/slave sequencing processor with forced I/O
US4788640A (en) 1986-01-17 1988-11-29 Intel Corporation Priority logic system
US5297260A (en) 1986-03-12 1994-03-22 Hitachi, Ltd. Processor having a plurality of CPUS with one CPU being normally connected to common bus
US4866664A (en) 1987-03-09 1989-09-12 Unisys Corporation Intercomputer communication control apparatus & method
US5142683A (en) 1987-03-09 1992-08-25 Unisys Corporation Intercomputer communication control apparatus and method
US5115507A (en) * 1987-12-23 1992-05-19 U.S. Philips Corp. System for management of the priorities of access to a memory and its application
FR2625340B1 (fr) * 1987-12-23 1990-05-04 Labo Electronique Physique Systeme graphique avec controleur graphique et controleur de dram
DE68913629T2 (de) 1988-03-14 1994-06-16 Unisys Corp Satzverriegelungsprozessor für vielfachverarbeitungsdatensystem.
US5155854A (en) 1989-02-03 1992-10-13 Digital Equipment Corporation System for arbitrating communication requests using multi-pass control unit based on availability of system resources
US5155831A (en) 1989-04-24 1992-10-13 International Business Machines Corporation Data processing system with fast queue store interposed between store-through caches and a main memory
US5168555A (en) 1989-09-06 1992-12-01 Unisys Corporation Initial program load control
US5263169A (en) 1989-11-03 1993-11-16 Zoran Corporation Bus arbitration and resource management for concurrent vector signal processor architecture
DE3942977A1 (de) 1989-12-23 1991-06-27 Standard Elektrik Lorenz Ag Verfahren zum wiederherstellen der richtigen zellfolge, insbesondere in einer atm-vermittlungsstelle, sowie ausgangseinheit hierfuer
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
JPH03219305A (ja) * 1990-01-25 1991-09-26 Fanuc Ltd 多数個取り指定方式
DE69132495T2 (de) * 1990-03-16 2001-06-13 Texas Instruments Inc., Dallas Verteilter Verarbeitungsspeicher
US5390329A (en) * 1990-06-11 1995-02-14 Cray Research, Inc. Responding to service requests using minimal system-side context in a multiprocessor environment
US5404482A (en) * 1990-06-29 1995-04-04 Digital Equipment Corporation Processor and method for preventing access to a locked memory block by recording a lock in a content addressable memory with outstanding cache fills
US5432918A (en) * 1990-06-29 1995-07-11 Digital Equipment Corporation Method and apparatus for ordering read and write operations using conflict bits in a write queue
US5347648A (en) 1990-06-29 1994-09-13 Digital Equipment Corporation Ensuring write ordering under writeback cache error conditions
AU630299B2 (en) 1990-07-10 1992-10-22 Fujitsu Limited A data gathering/scattering system in a parallel computer
US5367678A (en) 1990-12-06 1994-11-22 The Regents Of The University Of California Multiprocessor system having statically determining resource allocation schedule at compile time and the using of static schedule with processor signals to control the execution time dynamically
KR960001273B1 (ko) * 1991-04-30 1996-01-25 가부시키가이샤 도시바 단일칩 마이크로컴퓨터
US5255239A (en) 1991-08-13 1993-10-19 Cypress Semiconductor Corporation Bidirectional first-in-first-out memory device with transparent and user-testable capabilities
US5623489A (en) * 1991-09-26 1997-04-22 Ipc Information Systems, Inc. Channel allocation system for distributed digital switching network
US5392412A (en) * 1991-10-03 1995-02-21 Standard Microsystems Corporation Data communication controller for use with a single-port data packet buffer
GB2260429B (en) * 1991-10-11 1995-05-24 Intel Corp Versatile cache memory
US5392391A (en) * 1991-10-18 1995-02-21 Lsi Logic Corporation High performance graphics applications controller
KR970008523B1 (ko) * 1991-10-21 1997-05-24 가부시키가이샤 도시바 프로세서
US5452437A (en) 1991-11-18 1995-09-19 Motorola, Inc. Methods of debugging multiprocessor system
US5442797A (en) * 1991-12-04 1995-08-15 Casavant; Thomas L. Latency tolerant risc-based multiple processor with event driven locality managers resulting from variable tagging
JP2823767B2 (ja) * 1992-02-03 1998-11-11 松下電器産業株式会社 レジスタファイル
US5459842A (en) 1992-06-26 1995-10-17 International Business Machines Corporation System for combining data from multiple CPU write requests via buffers and using read-modify-write operation to write the combined data to the memory
DE4223600C2 (de) 1992-07-17 1994-10-13 Ibm Mehrprozessor-Computersystem und Verfahren zum Übertragen von Steuerinformationen und Dateninformation zwischen wenigstens zwei Prozessoreinheiten eines Computersystems
US5404484A (en) * 1992-09-16 1995-04-04 Hewlett-Packard Company Cache system for reducing memory latency times
DK0627100T3 (da) * 1992-12-23 2000-06-26 Ebauchesfabrik Eta Ag Laveffekt-multitaskkontroller
US5448702A (en) 1993-03-02 1995-09-05 International Business Machines Corporation Adapters with descriptor queue management capability
DE69429204T2 (de) * 1993-03-26 2002-07-25 Cabletron Systems Inc Ablaufssteuerungsverfahren und -gerät für ein Kommunikationsnetzwerk
US6311286B1 (en) * 1993-04-30 2001-10-30 Nec Corporation Symmetric multiprocessing system with unified environment and distributed system functions
CA2122182A1 (en) * 1993-05-20 1994-11-21 Rene Leblanc Method for rapid prototyping of programming problems
JPH0740746A (ja) * 1993-07-29 1995-02-10 Aisin Seiki Co Ltd 車両用サンルーフ装置のチエツク機構
CA2107299C (en) 1993-09-29 1997-02-25 Mehrad Yasrebi High performance machine for switched communications in a heterogenous data processing network gateway
US5446736A (en) * 1993-10-07 1995-08-29 Ast Research, Inc. Method and apparatus for connecting a node to a wireless network using a standard protocol
US5450351A (en) 1993-11-19 1995-09-12 International Business Machines Corporation Content addressable memory implementation with random access memory
US5740402A (en) * 1993-12-15 1998-04-14 Silicon Graphics, Inc. Conflict resolution in interleaved memory systems with multiple parallel accesses
US5485455A (en) * 1994-01-28 1996-01-16 Cabletron Systems, Inc. Network having secure fast packet switching and guaranteed quality of service
US5490204A (en) * 1994-03-01 1996-02-06 Safco Corporation Automated quality assessment system for cellular networks
US5835755A (en) 1994-04-04 1998-11-10 At&T Global Information Solutions Company Multi-processor computer system for operating parallel client/server database processes
JP3547482B2 (ja) * 1994-04-15 2004-07-28 株式会社日立製作所 情報処理装置
US5542088A (en) * 1994-04-29 1996-07-30 Intergraph Corporation Method and apparatus for enabling control of task execution
US5721870A (en) * 1994-05-25 1998-02-24 Nec Corporation Lock control for a shared main storage data processing system
US5544236A (en) 1994-06-10 1996-08-06 At&T Corp. Access to unsubscribed features
US5574922A (en) * 1994-06-17 1996-11-12 Apple Computer, Inc. Processor with sequences of processor instructions for locked memory updates
US5781774A (en) * 1994-06-29 1998-07-14 Intel Corporation Processor having operating modes for an upgradeable multiprocessor computer system
JP3810449B2 (ja) * 1994-07-20 2006-08-16 富士通株式会社 キュー装置
US5568476A (en) 1994-10-26 1996-10-22 3Com Corporation Method and apparatus for avoiding packet loss on a CSMA/CD-type local area network using receive-sense-based jam signal
JP3169779B2 (ja) * 1994-12-19 2001-05-28 日本電気株式会社 マルチスレッドプロセッサ
US5550816A (en) 1994-12-29 1996-08-27 Storage Technology Corporation Method and apparatus for virtual switching
US5784712A (en) * 1995-03-01 1998-07-21 Unisys Corporation Method and apparatus for locally generating addressing information for a memory access
US5701434A (en) 1995-03-16 1997-12-23 Hitachi, Ltd. Interleave memory controller with a common access queue
US5649157A (en) * 1995-03-30 1997-07-15 Hewlett-Packard Co. Memory controller with priority queues
US5886992A (en) * 1995-04-14 1999-03-23 Valtion Teknillinen Tutkimuskeskus Frame synchronized ring system and method
US5758184A (en) * 1995-04-24 1998-05-26 Microsoft Corporation System for performing asynchronous file operations requested by runnable threads by processing completion messages with different queue thread and checking for completion by runnable threads
US5592622A (en) * 1995-05-10 1997-01-07 3Com Corporation Network intermediate system with message passing architecture
JPH08320797A (ja) * 1995-05-24 1996-12-03 Fuji Xerox Co Ltd プログラム制御システム
US5644780A (en) 1995-06-02 1997-07-01 International Business Machines Corporation Multiple port high speed register file with interleaved write ports for use with very long instruction word (vlin) and n-way superscaler processors
US5828746A (en) 1995-06-07 1998-10-27 Lucent Technologies Inc. Telecommunications network
US5828863A (en) 1995-06-09 1998-10-27 Canon Information Systems, Inc. Interface device connected between a LAN and a printer for outputting formatted debug information about the printer to the printer
US5613071A (en) * 1995-07-14 1997-03-18 Intel Corporation Method and apparatus for providing remote memory access in a distributed memory multiprocessor system
US5680641A (en) 1995-08-16 1997-10-21 Sharp Microelectronics Technology, Inc. Multiple register bank system for concurrent I/O operation in a CPU datapath
US5689566A (en) 1995-10-24 1997-11-18 Nguyen; Minhtam C. Network with secure communications sessions
US5809530A (en) 1995-11-13 1998-09-15 Motorola, Inc. Method and apparatus for processing multiple cache misses using reload folding and store merging
KR0150072B1 (ko) 1995-11-30 1998-10-15 양승택 병렬처리 컴퓨터 시스템에서의 메모리 데이타 경로 제어장치
US5796413A (en) 1995-12-06 1998-08-18 Compaq Computer Corporation Graphics controller utilizing video memory to provide macro command capability and enhanched command buffering
US5850530A (en) 1995-12-18 1998-12-15 International Business Machines Corporation Method and apparatus for improving bus efficiency by enabling arbitration based upon availability of completion data
US5699537A (en) 1995-12-22 1997-12-16 Intel Corporation Processor microarchitecture for efficient dynamic scheduling and execution of chains of dependent instructions
RU2170494C2 (ru) * 1995-12-29 2001-07-10 Тикси. Ком ГмбХ Телекоммьюникейшн Системс Способ и микрокомпьютерная система для автоматической безопасной и прямой передачи данных
US6201807B1 (en) * 1996-02-27 2001-03-13 Lucent Technologies Real-time hardware method and apparatus for reducing queue processing
US5761507A (en) * 1996-03-05 1998-06-02 International Business Machines Corporation Client/server architecture supporting concurrent servers within a server with a transaction manager providing server/connection decoupling
US5809235A (en) 1996-03-08 1998-09-15 International Business Machines Corporation Object oriented network event management framework
US5764915A (en) * 1996-03-08 1998-06-09 International Business Machines Corporation Object-oriented communication interface for network protocol access using the selected newly created protocol interface object and newly created protocol layer objects in the protocol stack
US5797043A (en) 1996-03-13 1998-08-18 Diamond Multimedia Systems, Inc. System for managing the transfer of data between FIFOs within pool memory and peripherals being programmable with identifications of the FIFOs
US5784649A (en) * 1996-03-13 1998-07-21 Diamond Multimedia Systems, Inc. Multi-threaded FIFO pool buffer and bus transfer control system
US6199133B1 (en) * 1996-03-29 2001-03-06 Compaq Computer Corporation Management communication bus for networking devices
KR100219597B1 (ko) * 1996-03-30 1999-09-01 윤종용 씨디-롬 드라이브에서의 큐잉 제어 방법
JP3541335B2 (ja) * 1996-06-28 2004-07-07 富士通株式会社 情報処理装置及び分散処理制御方法
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US5937187A (en) * 1996-07-01 1999-08-10 Sun Microsystems, Inc. Method and apparatus for execution and preemption control of computer process entities
US6023742A (en) * 1996-07-18 2000-02-08 University Of Washington Reconfigurable computing architecture for providing pipelined data paths
US5745913A (en) * 1996-08-05 1998-04-28 Exponential Technology, Inc. Multi-processor DRAM controller that prioritizes row-miss requests to stale banks
US5928736A (en) * 1996-09-09 1999-07-27 Raytheon Company Composite structure having integrated aperture and method for its preparation
US5812868A (en) * 1996-09-16 1998-09-22 Motorola Inc. Method and apparatus for selecting a register file in a data processing system
US6072781A (en) * 1996-10-22 2000-06-06 International Business Machines Corporation Multi-tasking adapter for parallel network applications
US5860158A (en) * 1996-11-15 1999-01-12 Samsung Electronics Company, Ltd. Cache control unit with a cache request transaction-oriented protocol
US5905876A (en) * 1996-12-16 1999-05-18 Intel Corporation Queue ordering for memory and I/O transactions in a multiple concurrent transaction computer system
US6212542B1 (en) * 1996-12-16 2001-04-03 International Business Machines Corporation Method and system for executing a program within a multiscalar processor by processing linked thread descriptors
US5854922A (en) * 1997-01-16 1998-12-29 Ford Motor Company Micro-sequencer apparatus and method of combination state machine and instruction memory
US6256115B1 (en) * 1997-02-21 2001-07-03 Worldquest Network, Inc. Facsimile network
US5742587A (en) * 1997-02-28 1998-04-21 Lanart Corporation Load balancing port switching hub
US5905889A (en) * 1997-03-20 1999-05-18 International Business Machines Corporation Resource management system using next available integer from an integer pool and returning the integer thereto as the next available integer upon completion of use
US5918235A (en) * 1997-04-04 1999-06-29 Hewlett-Packard Company Object surrogate with active computation and probablistic counter
US6535878B1 (en) * 1997-05-02 2003-03-18 Roxio, Inc. Method and system for providing on-line interactivity over a server-client network
US6182177B1 (en) * 1997-06-13 2001-01-30 Intel Corporation Method and apparatus for maintaining one or more queues of elements such as commands using one or more token queues
US6067585A (en) * 1997-06-23 2000-05-23 Compaq Computer Corporation Adaptive interface controller that can operate with segments of different protocol and transmission rates in a single integrated device
US5938736A (en) 1997-06-30 1999-08-17 Sun Microsystems, Inc. Search engine architecture for a high performance multi-layer switch element
US5887134A (en) * 1997-06-30 1999-03-23 Sun Microsystems System and method for preserving message order while employing both programmed I/O and DMA operations
US6393483B1 (en) * 1997-06-30 2002-05-21 Adaptec, Inc. Method and apparatus for network interface card load balancing and port aggregation
US6247025B1 (en) * 1997-07-17 2001-06-12 International Business Machines Corporation Locking and unlocking mechanism for controlling concurrent access to objects
US6170051B1 (en) * 1997-08-01 2001-01-02 Micron Technology, Inc. Apparatus and method for program level parallelism in a VLIW processor
US6014729A (en) * 1997-09-29 2000-01-11 Firstpass, Inc. Shared memory arbitration apparatus and method
US6061710A (en) * 1997-10-29 2000-05-09 International Business Machines Corporation Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
US5915123A (en) * 1997-10-31 1999-06-22 Silicon Spice Method and apparatus for controlling configuration memory contexts of processing elements in a network of multiple context processing elements
EP0918280B1 (de) * 1997-11-19 2004-03-24 IMEC vzw System und Verfahren zur Kontextumschaltung über vorbestimmte Unterbrechungspunkte
US6360262B1 (en) * 1997-11-24 2002-03-19 International Business Machines Corporation Mapping web server objects to TCP/IP ports
US6070231A (en) * 1997-12-02 2000-05-30 Intel Corporation Method and apparatus for processing memory requests that require coherency transactions
US6272520B1 (en) * 1997-12-31 2001-08-07 Intel Corporation Method for detecting thread switch events
JPH11203860A (ja) * 1998-01-07 1999-07-30 Nec Corp 半導体記憶装置
US6223238B1 (en) * 1998-03-31 2001-04-24 Micron Electronics, Inc. Method of peer-to-peer mastering over a computer bus
US6079008A (en) * 1998-04-03 2000-06-20 Patton Electronics Co. Multiple thread multiple data predictive coded parallel processing system and method
KR100280460B1 (ko) * 1998-04-08 2001-02-01 김영환 데이터 처리 장치 및 이의 복수의 스레드 처리 방법
US6373848B1 (en) * 1998-07-28 2002-04-16 International Business Machines Corporation Architecture for a multi-port adapter with a single media access control (MAC)
US6073215A (en) * 1998-08-03 2000-06-06 Motorola, Inc. Data processing system having a data prefetch mechanism and method therefor
US6366998B1 (en) * 1998-10-14 2002-04-02 Conexant Systems, Inc. Reconfigurable functional units for implementing a hybrid VLIW-SIMD programming model
US6347344B1 (en) * 1998-10-14 2002-02-12 Hitachi, Ltd. Integrated multimedia system with local processor, data transfer switch, processing modules, fixed functional unit, data streamer, interface unit and multiplexer, all integrated on multimedia processor
US6212611B1 (en) * 1998-11-03 2001-04-03 Intel Corporation Method and apparatus for providing a pipelined memory controller
US6389449B1 (en) * 1998-12-16 2002-05-14 Clearwater Networks, Inc. Interstream control and communications for multi-streaming digital processors
US6338078B1 (en) * 1998-12-17 2002-01-08 International Business Machines Corporation System and method for sequencing packets for multiprocessor parallelization in a computer network system
US6356692B1 (en) * 1999-02-04 2002-03-12 Hitachi, Ltd. Optical module, transmitter, receiver, optical switch, optical communication unit, add-and-drop multiplexing unit, and method for manufacturing the optical module
US6507862B1 (en) * 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US6529983B1 (en) * 1999-11-03 2003-03-04 Cisco Technology, Inc. Group and virtual locking mechanism for inter processor synchronization
US6532509B1 (en) * 1999-12-22 2003-03-11 Intel Corporation Arbitrating command requests in a parallel multi-threaded processing system
US6694380B1 (en) * 1999-12-27 2004-02-17 Intel Corporation Mapping requests from a processing unit that uses memory-mapped input-output space
US6324624B1 (en) * 1999-12-28 2001-11-27 Intel Corporation Read lock miss control and queue management
US6560667B1 (en) * 1999-12-28 2003-05-06 Intel Corporation Handling contiguous memory references in a multi-queue system
US6307789B1 (en) * 1999-12-28 2001-10-23 Intel Corporation Scratchpad memory
US6584522B1 (en) * 1999-12-30 2003-06-24 Intel Corporation Communication between processors

Also Published As

Publication number Publication date
WO2001016718A1 (en) 2001-03-08
ATE269988T1 (de) 2004-07-15
HK1049719B (zh) 2008-11-21
EP1221086A1 (de) 2002-07-10
CN100378655C (zh) 2008-04-02
AU7061600A (en) 2001-03-26
HK1049719A1 (en) 2003-05-23
CN101221493A (zh) 2008-07-16
CN101221493B (zh) 2012-06-06
CA2383384A1 (en) 2001-03-08
US6668317B1 (en) 2003-12-23
DE60011797D1 (de) 2004-07-29
US20040054880A1 (en) 2004-03-18
EP1221086B1 (de) 2004-06-23
CN1387641A (zh) 2002-12-25
US7191321B2 (en) 2007-03-13

Similar Documents

Publication Publication Date Title
DE60011797T2 (de) Ausführung von mehreren fäden in einem parallelprozessor
DE60010907T2 (de) Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter
DE60006270T2 (de) Parallele prozessorarchitektur
DE60030767T2 (de) Datenzuweisung zu threads in einem multi-threaded netzwerkprozessor
DE60015395T2 (de) Speicher, der zwischen verarbeitenden threads geteilt ist
DE69033272T2 (de) Verbundarchitektur für ein hochgradig paralleles skalar/vektor-multiprozessorsystem
DE69032635T2 (de) Verfahren und Vorrichtung zur Erkennung von Betriebsmittelkonflikten in einer Pipeline-Verarbeitungseinheit
DE69127936T2 (de) Busprotokoll für Prozessor mit write-back cache
DE3750306T2 (de) System zum Gewährleisten der logischen Unversehrtheit von Daten.
DE69311330T2 (de) Befehlsablauffolgeplanung von einem risc-superskalarprozessor
DE69904189T2 (de) Konfigurierter prozessor zur abbildung von logischen registernummern auf physikalische registernummern unter verwendung von virtuellen registernummern
EP1236094B1 (de) Verzweigungsbefehl für einen mehrfachverarbeitungsprozessor
DE3587439T2 (de) Gemeinsam benutzter Mehrprozessor-Pipeline-Cachespeicher.
EP1282862B1 (de) Verteilte speichersteuerung und bandbreitenoptimierung
CA2388740C (en) Sdram controller for parallel processor architecture
DE69907955T2 (de) Globale und locale registersegmentierung in einem vliw prozessor
DE69329778T2 (de) System und verfahren zur handhabung von laden und/oder speichern in einem superskalar mikroprozessor
US7546444B1 (en) Register set used in multithreaded parallel processor architecture
DE69612991T2 (de) System zur bearbeitung von selbstmodifizierendem kode
DE69325566T2 (de) Verfahren und System zur Befehlszuteilung in einem superskalaren Prozessorsystem mit unabhängig zugänglichem Zwischenspeicher
DE69030931T2 (de) Mehrfachsequenzprozessorsystem
DE112015005597T5 (de) Verknüpfungsfähige Parallelausführungs-Schicht einer Ausgabewarteschlange für einen Prozessor
DE69922238T2 (de) Mechanismus zur blockierung von ladeoperationen auf adressengeneration von speicherbefehlen und universeller abhängigkeitsvektor
DE69901338T2 (de) Mikroprozessor mit mehreren registersätzen, die den gleichen logischen raum besitzen
DE102023105563A1 (de) Arrays kooperativer gruppen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition