DE60316774T2 - Verkettung von mehrfadenprozessorkernen zur bearbeitung von datenpaketen - Google Patents

Verkettung von mehrfadenprozessorkernen zur bearbeitung von datenpaketen Download PDF

Info

Publication number
DE60316774T2
DE60316774T2 DE60316774T DE60316774T DE60316774T2 DE 60316774 T2 DE60316774 T2 DE 60316774T2 DE 60316774 T DE60316774 T DE 60316774T DE 60316774 T DE60316774 T DE 60316774T DE 60316774 T2 DE60316774 T2 DE 60316774T2
Authority
DE
Germany
Prior art keywords
programming
tasks
context
contexts
register
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
DE60316774T
Other languages
English (en)
Other versions
DE60316774D1 (de
Inventor
Matthew Worcester ADILETTA
Debra Sudbury BERNSTEIN
Hugh Newton WILKINSON
Gilbert Framingham WOLRICH
Mark Uxbridge Rosenbluth
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 DE60316774D1 publication Critical patent/DE60316774D1/de
Publication of DE60316774T2 publication Critical patent/DE60316774T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • 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

Description

  • Parallelverarbeitung ist eine effiziente Form der Informationsverarbeitung gleichzeitiger Ereignisse in einem Computerprozess. Parallelverarbeitung erfordert im Gegensatz zu sequentieller Verarbeitung die gleichzeitige Ausführung vieler Programme in einem Computer. Im Zusammenhang eines Parallelprozessors umfasst die Parallelität das Ausführen von mehr als einer Sache zur gleichen Zeit. Anders als bei einem seriellen Paradigma, bei dem alle Aufgaben an einer einzigen Station oder einer Pipelinemaschine ausgeführt werden, in der alle Aufgaben an spezialisierten Stationen ausgeführt werden, werden bei der parallelen Verarbeitung viele Stationen bereitgestellt, von denen jede in der Lage ist, verschiedene Aufgaben gleichzeitig auszuführen. Eine Anzahl von Stationen arbeitet gleichzeitig und unabhängig an denselben oder gemeinsamen Elementen einer Computeraufgabe.
  • In den folgenden Veröffentlichungen werden verschiedene Beispiele für die parallele Verarbeitung gegeben. In dem Dokument von Schmidt und Suda, "The Performance of Alternative Threading Architecture for Parallel Communication Subsystems", wird eine aufgabenbasierte Threadarchitektur offenbart, bei der Protokollaufgaben parallel ausgeführt werden und durch das Weiterleiten von Steuernachrichten und Datennachrichten zueinander zum Koordinieren paralleler Protokollverarbeitung kommunizieren, und auch eine nachrichtenbasierte Threadarchitektur wird untersucht. In US-A-5,913,059 wird die Ausführung mehrerer Threads offenbart. In "Understanding Network Processors", einer Diplomarbeit an der University of California, Berkeley, September 2001, von Niraj Shah, wird eine programmierbare Pipeline von Prozessoren offenbart und Moors et al., "Cascading Content-Addressable Memories", IEEE MICRO 12(3), S. 56–66, offenbart inhaltsadressierbare Speicher. Schließlich offenbart das Dokument WO 0148606 das Betreiben auf Netzwerkpaketen mit einer Vielzahl von Programmthreads.
  • Dementsprechend kann die Verwendung oder Anwendung paralleler Verarbeitung Computeraufgaben lösen.
  • KURZE DARSTELLUNG DER ERFINDUNG
  • Ein Aspekt der Erfindung stellt ein Verfahren zum Erstellen einer Vielzahl von Pipelines, wie in Anspruch 1 dargelegt, bereit. Weitere Aspekte der Erfindung stellen einen Prozessor, ein Mehrfachverarbeitungssystem und ein Computerprogrammprodukt, wie in den Ansprüchen 20, 27 bzw. 28 dargelegt, bereit.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Blockdiagramm eines Kommunikationssystems, das einen hardwarebasierten Mehrfachthreadprozessor einsetzt;
  • 2 ist ein Blockdiagramm einer Funktionseinheit einer Programmiermaschine, die in dem hardwarebasierten Mehrfachthreadprozessor aus 1 eingesetzt wird;
  • 3 ist ein Blockdiagramm eines Kontextzustandübergangs;
  • 4 ist ein Blockdiagramm eines kontextadressierbaren Speichers (CAM);
  • 5 ist ein ausführliches Blockdiagramm eines CAM-Prozesses;
  • 6 ist ein vereinfachtes Blockdiagramm eines Kontextpipelineprozesses.
  • BESCHREIBUNG
  • Architektur
  • Unter Bezugnahme auf 1 enthält ein Computerverarbeitungssystem 10 einen parallelen, hardwarebasierten Mehrfachthread-Netzwerkprozessor 12. Der hardwarebasierte Mehrfachthread-Prozessor 12 ist mit einem Speichersystem oder einer Speicherressource 14 gekoppelt. Das Speichersystem 14 enthält einen dynamischen Direktzugriffsspeicher (DRAM) 14a und einen statischen Direktzugriffsspeicher (SRAM) 14b. Das Verarbeitungssystem 10 ist insbesondere für Aufgaben nützlich, die in parallele Unteraufgaben oder Funktionen aufgeteilt werden können. Insbesondere eignet sich der hardwarebasierte Mehrfachthreadprozessor 12 für Aufgaben, die eher bandbreitenorientiert als latenzorientiert sind. Der hardwarebasierte Mehrfachthreadprozessor 12 weist mehrere funktionale Mikromaschinen oder Programmiermaschinen 16 auf, welche jeweils mehrere hardwaregesteuerte Threads aufweisen, die gleichzeitig aktiv sind und unabhängig an einer spezifischen Aufgabe arbeiten.
  • Die Programmiermaschinen 16 führen jeweils Programmzähler in der Hardware und mit den Programmzählern verbundene Zustände. Effektiv können entsprechende Untergruppen des Kontextes oder der Threads gleichzeitig auf jeder der Programmiermaschinen 16 aktiv sein, während nur eine zu einer gegebenen Zeit aktuell betrieben wird.
  • In diesem Beispiel werden in 1 acht Programmiermaschinen 16a16h dargestellt. Jede Maschine der Programmiermaschinen 16a16h verarbeitet acht Hardwarethreads oder Kontexte. Die acht Programmiermaschinen 16a16h arbeiten mit gemeinsamen Ressourcen, einschließlich einer Speicherressource 14 und (nicht gezeigten) Busschnittstellen. Der hardwarebasierte Mehrfachthreadprozessor 12 enthält einen dynamischen Direktzugriffsspeicher-(DRAM)-Controller 18a und einen statischen Direktzugriffsspeicher-(SRAM)-Controller 18b. Der DRAM-Speicher 14a und der DRAM-Controller 18a werden in der Regel zum Verarbeiten großer Datenvolumina verwendet, z. B. beim Verarbeiten von Netzwerknutzlasten von Netzwerkpaketen. Der SRAM-Speicher 14b und der SRAM-Controller 18b werden bei einer Netzwerkimplementation für geringe Latenz und Aufgaben mit schnellem Zugriff verwendet, z. B. das Zugreifen auf Nachschlagetabellen für den Speicher für den Kernprozessor 20 und dergleichen.
  • Die acht Programmiermaschinen 16a16h greifen auf der Grundlage von Eigenschaften der Daten entweder auf den DRAM-Speicher 14a oder SRAM-Speicher 14b zu. Somit werden Daten mit geringer Latenz und geringer Bandbreite in dem SRAM-Speicher 14b gespeichert und von dort abgefragt, während Daten höherer Bandbreite, für die die Latenz nicht so entscheidend ist, in dem DRAM-Speicher 14a gespeichert und von dort abgerufen werden. Die Programmiermaschinen 16a16h können Speicherreferenzanweisungen entweder auf den DRAM-Controller 18a oder den SRAM-Controller 18b ausführen.
  • Der hardwarebasierte Mehrfachthreadprozessor 12 enthält auch einen Prozessorkern 20 zum Laden der Mikrocodesteuerung für die Programmiermaschinen 16a16h. In diesem Beispiel handelt es sich bei dem Prozessorkern 20 um eine XSkaleTM-basierte Architektur.
  • Der Prozessorkern 20 führt Allzweckcomputerfunktionen, wie das Handhaben von Protokollen, Ausnahmen und zusätzlicher Unterstützung für die Paketverarbeitung aus, bei der die Programmiermaschinen 16 die Pakete für ausführlichere Verarbeitung, wie in Grenzbedingungen, weiterleiten.
  • Der Prozessorkern 20 weist ein (nicht gezeigtes) Betriebssystem auf. Über das Betriebssystem (Operating System, OS) kann der Prozessorkern 20 Funktionen aufrufen, die auf den Programmiermaschinen 16a16h betrieben werden. Der Prozessorkern 20 kann jedes unterstützte OS, insbesondere ein Echtzeit-OS verwenden. Für den als eine XSkaleTM-Architektur implementierten Prozessorkern 20 kann ein Betriebssystem, wie beispielsweise Microsoft NT Echtzeit, VXWorks und μCOS oder ein über das Internet erhältliches Freeware-Betriebssystem verwendet werden.
  • Vorteile der hardwarebasierten Mehrfachthreadarchitektur können durch den SRAM- oder DRAM-Speicherzugriff erklärt werden. Beispielsweise bewirkt ein von einem Kontext (z. B. Thread_0) von einer der Programmiermaschinen 16 angeforderter SRAM-Zugriff, dass der SRAM-Controller 18b einen Zugriff auf den SRAM-Speicher 14b initiiert. Der SRAM-Controller 18b greift auf den SRAM-Speicher 14b zu, ruft die Daten aus dem SRAM-Speicher 14b ab und gibt die Daten an eine anfordernde Programmiermaschine.
  • Wenn eine der Programmiermaschinen 16a16h nur einen einzigen betreibbaren Thread aufweisen würde, würde diese Programmiermaschine während eines SRAM-Zugriffs im Ruhezustand sein, während Daten von dem SRAM-Speicher 14b zurückgeholt werden würden.
  • Durch den in jeder der Programmmiermaschinen 16a16h eingesetzten Hardwarekontextaustausch in jeder der Programmiermaschinen 16a16h können alle Kontexte mit eindeutigen Programmzählern in derselben Programmiermaschine ausgeführt werden. Somit kann ein anderer Thread, z. B. Thread_1, funktionieren, während der erste Thread, Thread_0, darauf wartet, dass die gelesenen Daten zurückgegeben werden. Während der Ausführung kann Thread_1 auf den DRAM-Speicher 14a zugreifen. Während Thread_1 auf der DRAM-Einheit und Thread_0 auf der SRAM-Einheit betrieben wird, kann ein neuer Thread, z. B. Thread_2 nun in der Programmiermaschine betrieben werden. Thread_2 kann für eine bestimmte Zeitdauer betrieben werden, bis er auf den Speicher zugreifen oder eine andere Operation mit langer Latenz ausführen muss, wie beispielsweise das Vornehmen eines Zugriffs auf eine Busschnittstelle. Daher kann der Mehrfachthreadprozessor 12 eine Busoperation, eine SRAM-Operation und eine DRAM-Operation aufweisen, die alle von einer der Programmiermaschinen 16 ausgeführt oder betrieben werden und mehrere Threads oder Kontexte zur Verarbeitung von mehr Arbeit aufweisen können.
  • Das Austauschen von Hardwarekontext synchronisiert außerdem den Abschluss von Aufgaben. Beispielsweise können zwei Threads auf die gemeinsame Speicherressource, z. B. den SRAM-Speicher 14b zugreifen. Jede der getrennten Funktionseinheiten, z. B. der SRAM-Controller 18b und der DRAM-Controller 18a, gibt bei Abschluss einer von einem der Programmiermaschinenthreads oder -kontexten angeforderten Aufgaben ein Flag zurück, um den Abschluss einer Operation zu signalisieren. Wenn die Programmiermaschinen 16a16h das Flag empfangen, können die Programmiermaschinen 16a16h bestimmen, welcher Thread eingestellt werden soll.
  • Ein Anwendungsbeispiel für den hardwarebasierten Mehrfachthreadprozessor 12 ist ein Netzwerkprozessor. Als Netzwerkprozessor bildet der hardwarebasierte Mehrfachthreadprozessor 12 eine Schnittstelle zu Netzwerkvorrichtungen, wie eine MAC-(Media Access Controller)-Vorrichtung, z. B. eine 10/100BaseT-Octal MAC oder Gigabit-Ethernet-Vorrichtung. Als Netzwerkprozessor kann der hardwarebasierte Mehrfachthreadprozessor 12 allgemein eine Schnittstelle zu jeder Art von Kommunikationsvorrichtung oder eine Schnittstelle bilden, die große Datenmengen sendet oder empfängt. Das in einer Netzwerkanwendung funktionierende Computerprozessorsystem 10 kann Netzwerkpakete empfangen und diese Pakete parallel verarbeiten.
  • Programmiermaschinen
  • Unter Bezugnahme auf 2 wird eine Programmiermaschine 16a der Programmiermaschinen 16a16h gezeigt. Die Programmiermaschine 16a enthält einen Steuerspeicher 30, der in einem Beispiel einen RAM von 4096 Anweisungen, die jeweils 40 Bit breit sind, enthält. Der RAM speichert ein Mikroprogramm, welches von der Programmiermaschine 16a ausgeführt wird. Das Mikroprogramm in dem Steuerspeicher 30 kann durch den Prozessorkern 20 geladen werden (1).
  • Zusätzlich zu Ereignissignalen, die auf einem ausführenden Thread lokal sind, setzt die Programmiermaschine 16a globale Signalisierungszustände ein. Bei Signalisierungszuständen kann ein ausführender Thread einen Signalzustand an alle Programmiermaschinen 16a16h rundsenden. Jeder und alle Threads der Programmiermaschine können zu diesen Signalisierungszuständen abzweigen. Diese Signalisierungszustände können zur Bestimmung der Verfügbarkeit einer Ressource oder zur Bestimmung verwendet werden, ob eine Ressource zur Wartung fällig ist. Die Kontextereignislogik weist eine Vermittlung für die acht (8) Threads auf. In einem Beispiel handelt es sich bei der Vermittlung um einen Rundlaufmechanismus. Es könnten andere Techniken verwendet werden, zu denen Prioritätsschlangenbildung oder gewichtete faire Schlangenbildung gehören.
  • Wie oben beschrieben, unterstützt die Programmiermaschine 16a die Mehrfachthreadausführung von acht Kontexten. Dies ermöglicht, dass ein Thread mit der Ausführung startet, kurz nachdem ein anderer Thread einen Speicherbezug ausgibt und auf den Abschluss dieses Bezugs warten muss, bevor er weitere Arbeit ausführen kann. Die Mehrfachthreadausführung ist für das Aufrechterhalten effizienter Hardwareausführung der Programmiermaschine 16a entscheidend, da die Speicherlatenz signifikant ist. Die Mehrfachthreadausführung gestattet es der Programmiermaschine 16, Speicherlatenz zu verbergen, indem nützliche unabhängige Arbeit über verschiedene Threads ausgeführt wird.
  • Zur Ermöglichung des effizienten Austauschs von Kontext weist die Programmiermaschine 16a ihren eigenen Registersatz, Programmzähler und kontextspezifische lokale Register auf. Das Vorliegen einer Kopie pro Kontext entfernt den Bedarf, kontextspezifische Informationen zu und von gemeinsamem Speicher und Programmiermaschinenregistern für jeden Kontextaustausch zu bewegen. Der schnelle Kontextaustausch ermöglicht es, dass Kontext Berechnungen ausführt; während andere Kontexte zum Abschluss auf Eingabe/Ausgabe (E/A) warten, in der Regel externe Speicherzugriffe oder auf ein Signal eines anderen Kontexts oder einer anderen Hardwareeinheit.
  • Die Programmiermaschine 16a führt beispielsweise die acht Kontexte aus, indem acht Programmzähler und acht kontextbezogene Registersätze geführt werden. Es können acht unterschiedliche Arten kontextbezogener Register vorliegen, nämlich Allzweckregister (GPR) 32, Interprogrammagentregister (nicht gezeigt), statische Direktzugriffsspeicher(SRAM)-Eingabetransferregister 24, dynamische Direktzugriffsspeicher-(DRAM)-Eingabetransferregister 36, SRAM-Ausgabetransferregister 38, DRAM-Ausgabetransferregister 40.
  • Die GPR 32 werden für allgemeine Programmierzwecke verwendet. Die GPR 32 werden ausschließlich unter Programmsteuerung gelesen und beschrieben. Wenn die GPR 32 als Quelle in einer Anweisung verwendet werden, führen sie einer Ausführungsdatenstrecke 44 Operanden zu. Wenn sie als ein Ziel in einer Anweisung verwendet werden, wird das Ergebnis der Ausführungsdatenstrecke 44 in die GPR 32 geschrieben. Die Programmmiermaschine 16a enthält auch E/A-Transferregister 34, 36, 38 und 40, die zum Übertragen von Daten zu und von der Programmiermaschine 16a und Stellen außerhalb der Programmiermaschine 16a, dem DRAM-Speicher 14a, dem SRAM-Speicher 14b usw. verwendet werden.
  • Es wird auch ein lokaler Speicher 42 verwendet. Der lokale Speicher 42 ist ein adressierbarer Speicher, der sich in der Programmiermaschine 16a befindet. Der lokale Speicher 42 wird ausschließlich unter Programmsteuerung gelesen und beschrieben. Der lokale Speicher 42 enthält auch Variablen, die von allen Programmiermaschinen 16a16h gemeinsam verwendet werden. Gemeinsam verwendete Variablen werden in verschiedenen zugewiesenen Aufgaben während den funktiona len Pipelinestufen durch die Programmiermaschinen 16a16h modifiziert, welche als nächstes beschrieben werden. Die gemeinsam verwendeten Variablen enthalten einen kritischen Abschnitt, der die Lese-Modifikations-Schreib-Zeiten definiert. Die Implementation und die Verwendung des kritischen Abschnitts in dem Computerverarbeitungssystem 10 wird ebenfalls unten beschrieben.
  • Programmiermaschinenkontexte
  • Jede der Programmiermaschinen 16 unterstützt Mehrfachthreadausführung von acht Kontexten. Ein Grund dafür ist, dass ein Thread, direkt nachdem ein anderer Thread einen Speicherbezug ausgibt und vor Ausführung weiterer Arbeit auf den Abschluss dieses Bezugs warten muss, mit der Ausführung beginnen kann. Dieses Verhalten ist für das Führen der effizienten Hardwareausführung der Programmiermaschinen 16a16f kritisch, da die Speicherlatenz signifikant ist. Wenn nur eine einzige Threadausführung unterstützt werden würde, befände sich anders ausgedrückt die Programmiermaschine für eine signifikante Zyklusanzahl im Leerlauf, während sie auf den Abschluss von Bezügen wartet, und dadurch würde der Gesamtberechnungsdurchsatz verringert. Die Mehrfachthreadausführung ermöglicht es einer Programmiermaschine, durch Ausführen nützlicher unabhängiger Arbeit über mehrere Threads Speicherlatenz zu verbergen.
  • Die Programmiermaschinen 16a16h verfügen jeweils über acht Kontexte. Um einen effizienten Austausch von Kontexten zu ermöglichen, weist jede Programmiermaschine ihren eigenen Registersatz, Programmzähler und kontextspezifische lokale Register auf. Das Vorhandensein von einer Kopie pro Kontext macht das Bewegen kontextspezifischer Informationen zu/von gemeinsam benutztem Speicher und von Programmiermaschinenregistern für jeden Kontexttausch unnötig. Ein schneller Austausch von Kontext ermöglicht einem Kontext die Ausführung von Berechnung, während andere Kontexte für den Abschluss auf E/A, in der Regel externe Speicherzugriffe oder auf ein Signal von einem anderen Kontext oder einer anderen Hardwareeinheit warten.
  • Dementsprechend zeigt 3 die Zustandsübergänge 100 für einen Kontext. Jeder der acht Kontexte wird sich in einem der oben beschriebenen Zustände befinden. Höchstens ein Kontext kann sich in dem Ausführungszustand befinden und eine beliebige Anzahl von Kontexten kann sich in einem der anderen Zustände befinden:
    • 1) Inaktiver Zustand (100a) – Weil einige Anwendungen möglicherweise nicht alle acht Kontexte benötigen, befindet sich ein Kontext im inaktiven Zustand, wenn sein CTXAktivierungs-(Kontextaktivierungs-)Steuer- und Statusregister(CRS)-Aktivierungsbit '0' ist.
    • 2) Bereitschaftszustand (100b) – Obwohl der Kontext in diesem Zustand zur Ausführung bereit ist, kann er nicht verarbeitet werden, da ein anderer Kontext immer noch ausgeführt wird. Wenn der ausführende Kontext in einen Schlafzustand übergeht, wählt die Vermittlung des Kontexts der Maschine den nächsten Kontext aus allen Kontexten im Bereitschaftszustand aus, der in den Ausführungszustand übergeht. Bei der Vermittlung handelt es sich um einen Rundlauf.
    • 3) Ausführungszustand (100c) – Ein Kontext befindet sich in einem Ausführungszustand, wenn seine Kontextzahl sich in Aktiv CTX Status CSR befindet. Der (nicht gezeigte) Programmzähler des ausführenden Kontexts wird verwendet, um Anweisungen aus dem Steuerspeicher 50 abzurufen. Ein Kontext bleibt in dem Ausführungszustand, bis er eine Anweisung ausführt, die bewirkt, dass er in den Schlafzustand eintritt. Zu einer Zeit kann sich höchstens ein Kontext im Ausführungszustand befinden.
    • 4) Schlafzustand (100d) – Ein Kontext wartet auf das Auftreten eines oder mehrerer in CTX Nr Aufwach Ereignisse CSR festgelegter Ereignisse, wobei Nr. acht unterschiedliche Kontexte anzeigt, wie z. B. Nr. 0 bis Nr. 7, typischerweise, aber nicht beschränkt auf einen E/A-Zugriff. In diesem Zustand vermittelt der Kontext keinen Eintritt in den Ausführungszustand.
  • Unter Bezugnahme auf 2 enthält jede Programmiermaschine vier Arten von 32-Bit-Datenstreckenregistern, wie unten beschrieben. Die 256 Allgemeinregister, 128 Register des nächsten Nachbarn, 512 Transferregister und 640 32-Bitworte des lokalen Speichers.
  • Allgemeinregister
  • Die Programmiermaschine 16a enthält Allgemeinregister (GPR) 52, die für allgemeine Programmmierzwecke verwendet werden. Sie werden ausschließlich unter Programmsteuerung gelesen und beschrieben. Wenn die GPR 2 als eine Quelle in einer Anweisung verwendet werden, führen sie einer Ausführungsdatenstrecke 56 Operanden zu. Wenn sie in einer Anweisung als Ziel verwendet werden, werden die Ergebnisse der Ausführungsdatenstrecke 56 in die GPR 52 geschrieben. Die GPR 52 sind physisch und logisch in zwei Bänken, GPR A 52a und GPR B 52b, enthalten, wie in 3 gezeigt.
  • Transferregister
  • Die Programmiermaschine 16a enthält auch Transferregister 58 und 60. Die Transferregister 34, 36, 38 und 40 werden zum Übertragen von Daten zu und von der Programmmiermaschine 16a und Stellen außerhalb der Programmiermaschine, z. B. DRAM, SRAM usw., verwendet. Wie in 2 gezeigt, gibt es vier Arten von Transferregistern, und zwar Eingabetransferregister und Ausgabetransferregister.
  • Wenn die Eingabetransferregister als Quelle in einer Anweisung verwendet werden, führen sie der Ausführungsdatenstrecke 44 Operanden zu. Wenn die Ausgabetransferregister als ein Ziel in einer Anweisung verwendet werden, werden sie mit den Ergebnissen aus der Ausgabendatenstrecke 44 beschrieben.
  • Lokale Steuer- und Statusregister (CSRs)
  • Lokale Steuer- und Statusregister (CSR) 66 sind bezüglich der Ausführungsdatenstrecke 56 lokal und enthalten spezielle Informationen. Sie können durch spezielle Anweisungen (local_csr_rd und local_csr_wr) gelesen und beschrieben werden und in der Regel wird weniger häufig auf sie zugegriffen, als Datenstreckenregister.
  • Register der nächsten Nachbarn
  • Die Programmiermaschine 16a enthält auch 128 Register der nächsten Nachbarn (NN) 54. Wenn ein NN-Register 54 als eine Quelle in einer Anweisung verwendet wird, führt es der Ausführungsdatenstrecke 44 ebenfalls Operanden zu. Das NN-Register 54 wird entweder von einer externen Einheit beschrieben, wie einer angrenzenden Programmiermaschine, aber darauf nicht beschränkt, oder von derselben Programmiermaschine 16a, in der das NN-Register resident ist. Das spezifische Register wird durch eine kontextbezogene Operation ausgewählt, wobei die Registernummer in der Anweisung codiert ist, oder als in einer Ringoperation, die beispielsweise über NN_Setzen (NN-Schreibadresse) und NN_Holen (NN-Leseadresse) in den CSR-Registern ausgewählt wird.
  • Die NN_Setzen-Register werden verwendet, wenn die vorherige benachbarte Programmmiermaschine eine Anweisung mit NN_Setzen als Ziel ausführt. Das durch den Wert in diesem Registern ausgewählte NN-Register 54 wird beschrieben, und der Wert in dem NN_Setzen-Register wird dann inkrementiert (ein Wert von 127 wird zu 0). Der Wert in diesem Register wird mit dem Wert in dem NN_Holen-Register verglichen, um zu bestimmen, wann NN_Voll- und NN_Leer-Statussignale bestätigt werden sollen.
  • Die NN_Holen-Register werden verwendet, wenn das NN-Register 54 als eine Quelle abgerufen wird, die im Quellenfeld der Anweisung angegeben wird. Das durch den Wert in diesem Registern ausgewählte NN-Register 54 wird gelesen, und der Wert in dem NN_Holen-Register wird dann inkrementiert (ein Wert von 127 wird zu 0). Der Wert in diesem Register wird mit dem Wert in dem NN_Setzen-Register verglichen, um zu bestimmen, wann NN_Voll- und NN_Leer-Statussignale bestätigt werden sollen.
  • Insbesondere, wenn das NN-Register 54 als ein Ziel in einer Anweisung verwendet wird, werden die Anweisungsergebnisdaten aus der Programmiermaschine 16a, in der Regel zu einer anderen, angrenzenden Programmiermaschine gesendet. Wenn das NN-Register 54 als ein Ziel in einer Anweisung verwendet wird, werden andererseits die Anweisungsergebnisdaten in das ausgewählte NN-Register 54 in der Programmiermaschine 16a geschrieben. Die Daten werden nicht aus der Programmiermaschine 16a gesendet, wie der Fall wäre, wenn das NN-Register 54 als ein Ziel verwendet werden würde. Das NN-Register 54 wird in einem Kontextpipelineverfahren verwendet, wie unten beschrieben.
  • Lokaler Speicher
  • Die Programmiermaschine 16a enthält 640 32-Bitwörter in einem lokalen Speicher 42. Bei dem lokalen Speicher handelt es sich um adressierbaren Speicher, der sich in der Programmiermaschine 16a befindet. Der lokale Speicher 42 wird ausschließlich unter Programmsteuerung gelesen und beschrieben. Als Quelle führt der lokale Speicher der Ausführungsdatenstrecke 44 Operanden zu und als Ziel empfängt er Ergebnisse. Der spezifische lokale Speicherort, der ausgewählt wird, basiert auf dem Wert in einem der LM_Addr-Register 53, der durch local_CSR_wr-Anweisungen geschrieben wird. Pro Kontext gibt es zwei LM_Addr-Register 53 sowie eine Arbeitskopie von jedem. Wenn ein Kontext in den Schlafzustand 100d übergeht, wird der Wert der Arbeitskopien in die Kontextkopie von LM_Adds platziert. Wenn der Kontext in den Ausführungszustand übergeht, wird der Wert seiner Kopie von LM_Addr in die Arbeitskopien platziert. Die Auswahl von LM_Addr_0 oder LM_Addr_1 erfolgt in der Anweisung. Es ist auch möglich, beide oder eine LM_Addrs als global zu verwenden, indem CTX_Aktivierung [LM_Addr_0_Global] und/oder CTX_Aktivierung [LM_Addr_1_Global] gesetzt wird. Bei globaler Verwendung benutzen alle Kontexte die Arbeitskopie von LM_Addr anstelle ihrer eigenen kontextspezifischen Kopie.
  • Der lokale Speicher 42 enthält auch von den Programmiermaschinen 16a16h gemeinsam benutzte Variablen. Gemeinsam verwendete Variabeln werden in verschiedenen zugewiesenen Aufgaben modifiziert, die während Pipelinestufen von den Programmiermaschinen 16a16h verwendet werden. Die gemeinsam benutzten Variablen enthalten einen kritischen Sektor, der ihre Lese-Modifikations-Schreib-Zeiten definiert.
  • Kritischer Abschnitt
  • Die Pipelinestufen der Programmiermaschinen 16a16h enthalten eine Mindestauflösung, die durch die Differenz zwischen dem kritischen Abschnitt der gemeinsam verwendeten Variablen und der Ankunftszeit eines nachfolgenden Pakets definiert wird. Die dem kritischen Abschnitt zugeteilte Zeit muss unter der Ankunftszeit des nachfolgenden Pakets liegen, das die Mindestauflösung der Pipelinestufe bestimmt. Die Latenz eines Speicherlesens gefolgt von den Anweisungen, eine Variable zu modifizieren, gefolgt von einem Schreiben, übersteigt die Paketankunftsgeschwindigkeit für Pakte der Minimalgröße bei weitem. Daher muss der kritische Abschnitt so gehalten werden, dass er geringer als die Ankunftszeit des nachfolgenden Pakets ist.
  • Ausführungsdatenstrecke
  • Die Programmiermaschine 16a enthält auch die Ausführungsdatenstrecke 44, die einen oder zwei Operanden aufnehmen, eine Operation ausführen und gegebenenfalls ein Ergebnis zurückschreiben kann. Die Quellen und Ziele können GPR 32, Transferregister 34, 36, 38 und 40, NN-Register 54 und der lokale Speicher 42 sein. Die Operationen sind Verschieben, Addieren/Subtrahieren, Logische, Multiplizieren, Byteausrichten und erstes Bit finden. Die Ausführungsdatenstrecke 44 enthält auch einen inhaltsadressierbaren Speicher (CAM) 64.
  • Inhaltsadressierbarer Speicher (CAM)
  • 4 zeigt ein CAM-Blockdiagramm 102. Die Programmiermaschine 16a enthält den CAM 64 mit 16 Einträgen und zugeordneter Steuerlogik 104. Jeder Eintrag speichert einen 32-Bitwert, der mit einem Quelloperanden verglichen werden kann. Alle Einträge werden parallel verglichen und das Ergebnis des Nachschlagens ist ein 6-Bit-Wert. Das 6-Bitergebnis besteht aus einem 2-Bitcode, an den eine 4-Bit-Eintragsnummer 106 angehängt ist. Zwei Ergebnisse eines Nachschlagens 108 sind möglich. Ein erstes Ergebnis ist ein Fehlschlagen (0) 110, bei dem sich kein Nachschlagewert in dem CAM 64 befindet und die Eintragszahl der zuletzt verwendete Eintrag (LRU) ist, der als vorgeschlagener zu ersetzender Eintrag verwendet wird. Das zweite Ergebnis kann ein Treffer (1) 112 sein, bei dem sich der Nachschlagewert in dem CAM 64 befindet und die Eintragsnummer ein passender Eintrag ist.
  • Die LRU-Logik 104 führt eine zeitlich geordnete Liste der Verwendung von Einträgen für den CAM 64. Wenn ein Eintrag geladen wird oder zu einem Nachschlagen 108 passt, wird er als MRU (Zuletzt verwendet) markiert. Ein Nachschlagen, das fehlschlägt, modifiziert die LRU-Liste nicht.
  • Unter Bezugnahme auf 5 wird ein beispielhafter CAM-Prozess 120 gezeigt. Die Programmiermaschine 16a verwendet beispielsweise einen 16-Eintrag-Cache oder einen CAM 64 mit einer LRU-Ersetzungsrichtlinie zum Speichern einer Liste zuletzt verwendeter Variablen, die zu einer Zeit in acht (8) aktiven Kontexten oder Threads verwendet werden. Die Threads werden unter Verwendung einer Lesephase 122 und einer (nicht gezeigten) Modifikations-Schreibphase in Reihenfolge ausgeführt. Während der Lesephase 122 fordert ein Kontext eine Variable an und der CAM 64 wird daraufhin überprüft, ob die benötigte Variable gecacht ist (124). Wenn der CAM 64 einen Treffer anzeigt, ist kein Lesen notwendig und der Inhalt des CAM 64 gibt die Stelle der Variable in dem CAM an (126). Außerdem wird der aktualisierte Wert der Variable in dem Cache gespeichert, wenn dieser Kontext für seine Modifikations-Schreib-Phase aktiv wird, wobei der Kontext den Wert direkt aus dem CAM 64 liest (128).
  • Wenn der CAM 64 während der Lesephase 122 ein Fehlschlagen anzeigt, wird andererseits ein Lesen der benötigten Variable initiiert (130). In der Folge wird die Ausführungszeit für die verbleibenden sieben (7) Kontexte verwendet, um die Latenz des Lesen vollkommen zu verbergen (132). Die Variable ist außerdem an der Modifikations-Schreib-Stufe dieses Kontexts verfügbar (132). Die Schreiblatenz des kritischen Abschnitts wird vermieden, da die Variable in dem CAM 64 bereits gültig ist, wenn sie kürzlich verwendet wurde. Als nächstes wird der CAM beschrieben oder aktualisiert (134). Der Inhalt des CAM 64 stellt die Stelle der gecachten LRU-Variable bereit, wobei die neue Variable die zuvor verwendete Variable überschreibt (136).
  • Danach liest der Kontext den Wert direkt aus dem CAM 64 (136) und der Kontext kehrt zum Anfang der Lesephase zurück (122). In der Folge wird jede Programmiermaschine zu einer Pipelinestufe, die eine spezialisierte Aufgabe der Paketverarbeitung ausführt, wobei auch der für bestimmte Aufgaben verwendete Kontext oder die Variable(n) überwacht wird/werden.
  • Kontextpipelining
  • Unter Bezugnahme auf 6 zeigt ein Kontextpipelinestrom 130 die bestimmten Abschnitten einer Verarbeitungsaufgabe eines Pakets oder eine Zelle zugewiesenen Programmiermaschinen 16a16h. Der Kontext für eine bestimmte zugewiesene Aufgabe wird auf den Programmiermaschinen 16a16h unter Verwendung des CAM 64a64c geführt. Die Pakete werden unter Verwendung der NN-Register 54a54c zum Weiterleiten von Daten von einer Programmiermaschine zu einer nachfolgenden, benachbarten Programmiermaschine pipelineartig wie auf einem Fließband verarbeitet. Die Daten werden von einer Stufe 132a zu einer nachfolgenden Stufe 132b und dann von Stufe 132b zu Stufe 132c der Pipeline usw. weitergeleitet. Anders ausgedrückt werden Daten zu der nächsten Stufe der Pipeline weitergeleitet, wodurch die Stufen des Prozessorzyklus einander überlappen können. Während eine Anweisung ausgeführt wird, kann beispielsweise die nächste Anweisung geholt werden, was bedeutet, dass sich zu einer beliebigen Zeit mehr als eine Anweisung "in der Pipeline" befinden kann, jeweils in einer unterschiedlichen Verarbeitungsstufe.
  • Daten können beispielsweise von einer Programmiermaschine 16 zur nächsten Programmiermaschine 16 in der Pipeline unter Verwendung der NN-Register 54a54c vorwärts weitergeleitet werden. Dieses Implementationsverfahren der Pipelineverarbeitung hat den Vorteil, dass die in dem CAM 64a64c für jede Stufe 132a–c enthaltene Informationen durchgängig für alle acht Kontexte der Pipelinestufe gültig sind. Das Kontextpipelineverfahren kann verwendet werden, wenn Mindestdaten aus dem zu verarbeitenden Paket durch die Kontextpipeline 130 fortschreiten müssen.
  • Andere Ausführungsformen
  • Es versteht sich, dass das obige Beispiel zwar in Verbindung mit der ausführlichen Beschreibung davon beschrieben worden ist, die vorstehende Beschreibung den Schutzumfang der Erfindung jedoch veranschaulichen und nicht einschränken soll, der durch den Schutzumfang der beigefügten Ansprüche definiert wird. Weitere Aspekte, Vorteile und Modifikationen fallen in den Schutzumfang der folgenden Ansprüche.

Claims (28)

  1. Verfahren, umfassend: Erstellen einer Vielzahl von Pipeline-Stufen (132a132c), wobei jede Pipeline-Stufe (132a132) mindestens eine Programmiermaschine (16a16h) umfasst; und an jeder Pipeline-Stufe (132a132c): Zuweisen einer oder mehrerer Aufgaben zur Verarbeitung in der mindestens einen Programmiermaschine (16a16h); Verwalten paralleler Verarbeitung der einen oder mehreren Aufgaben, einschließlich Erstellen eines Kontexts für jede der einen oder mehreren Aufgaben, wobei mindestens eine der einen oder mehreren Aufgaben die Ausführung mehrerer Anweisungen erfordert; Umschalten von der Verarbeitung eines der Kontexte zu einem anderen der Kontexte auf der Basis eines Ausführungsstatus einer Aufgabe durch mindestens eine der Programmiermaschinen; Bilden eines oder mehrerer nicht auf den Kontext bezogenen Register (54a54c), die in jeder der Programmiermaschinen (16a16c) resident sind, wobei mindestens eines der nicht auf den Kontext bezogenen Register in jeder der Programmiermaschinen (16a16c) zum Übertragen von Daten zwischen Programmiermaschinen (16a16c) verwendet wird; und Erstellen einer oder mehrerer Pipelines und Durchleiten von mit der einen oder mehreren Aufgaben verbundenen Daten an eine nachfolgende Pipeline-Stufe (132a132c) nach Abschluss der einen oder mehreren Aufgaben und Übertragen von Daten von dem mindestens einen nicht auf den Kontext bezogenen Register (54a54c) an ein anderes nicht auf den Kontext bezogenes Register (54a54c), das in einer benachbarten Programmiermaschine (16a16c) resident ist.
  2. Verfahren nach Anspruch 1, wobei das Erstellen der Kontexte für die zugewiesenen Aufgaben das Bereitstel len eines softwaregesteuerten Caches (64, 102) umfasst.
  3. Verfahren nach Anspruch 2, wobei der softwaregesteuerte Cache ein CAM-Speicher (Content Addressable Memory) (64, 102) ist.
  4. Verfahren nach Anspruch 1, wobei das Bilden mindestens eines der nicht auf den Kontext bezogenen Register ferner das Bilden mindestens eines Registers des nächsten Nachbarn (54a54c) umfasst, welches in jeder der Programmiermaschinen (16a16c) resident ist.
  5. Verfahren nach Anspruch 4, wobei das Erstellen der einen oder der mehreren Pipelines ferner das Übertragen von Daten von dem mindestens einen Register des nächsten Nachbarn (54a54c), das in einer der Programmiermaschinen (16a16c) resident ist, an ein nachfolgendes Register des nächsten Nachbarn (54a54c) umfasst, das in einer benachbarten Programmiermaschine (16a16c) resident ist.
  6. Verfahren nach Anspruch 5, wobei die eine der Programmiermaschinen die aktuell betriebene Pipeline-Stufe (132a132c) der einen oder mehreren Pipelines führt und die benachbarte Programmiermaschine (16a16c) eine nachfolgende Pipeline-Stufe (132a132c) der einen oder mehreren Pipelines führt.
  7. Verfahren nach Anspruch 1, ferner umfassend das Modifizieren von Variablen in den zugewiesenen Aufgaben, die in den Pipeline-Stufen (132a132c) durch die Programmiermaschinen (16a16c) verwendet werden.
  8. Verfahren nach Anspruch 7, wobei die Variablen gemeinsam benutzte Variablen sind, die von den Programmiermaschinen (16a16c) der Pipeline-Stufen (132a132c) verwendet werden und einen kritischen Abschnitt enthalten, der die Lese-Modifikations-Schreib-Zeit der gemeinsam benutzten Variablen definiert.
  9. Verfahren nach Anspruch 8, ferner umfassend das Definieren einer Mindestauflösung der Pipeline-Stufe (132a132c), die durch den Unterschied zwischen dem kritischen Abschnitt der gemeinsam benutzten Variablen und der Ankunftszeit eines nachfolgenden Pakets definiert wird, wobei der kritische Abschnitt geringer als die Ankunftszeit des nachfolgenden Pakets ist.
  10. Verfahren nach Anspruch 3, wobei jede der Programmiermaschinen (16a16c) eine Vielzahl von Kontexten gleichzeitig ausführt.
  11. Verfahren nach Anspruch 10, wobei die Vielzahl von Kontexten in einer Reihenfolge ausgeführt wird.
  12. Verfahren nach Anspruch 11, wobei die Ausführung der Anweisungen in jedem Kontext eine Lesephase und eine Schreib-Modifikations-Phase enthält.
  13. Verfahren nach Anspruch 12, wobei der CAM (64, 102) eine Vielzahl von Einträgen zum Überwachen der am weitesten zurückliegend benutzten Variablen enthält.
  14. Verfahren nach Anspruch 13, wobei die Lesephase das Bestimmen des Cachezustands einer gemeinsam benutzten Variable in dem CAM (64, 102) und das Aktualisieren eines Werts für die gemeinsam benutzte Variable umfasst, wenn die gemeinsam benutzte Variable in dem CAM (64, 102) gecacht wird.
  15. Verfahren nach Anspruch 13, wobei die Lesephase ein Lesen der gemeinsam benutzten Variable aus einem loka len Speicher in mindestens einem der Vielzahl von Kontexten ausführt.
  16. Verfahren nach Anspruch 15, wobei die verbleibende Vielzahl von Kontexten eine Latenzzeit des Lesens verbergen, indem sie andere zugewiesene Aufgabe zur Verarbeitung von Paketen ausführen.
  17. Verfahren nach Anspruch 15, wobei die gemeinsam benutzte Variable in dem CAM (64, 102) gecacht wird und zur Verarbeitung in der Modifikations-Schreib-Phase in dem mindestens einen der Vielzahl von Kontexten verfügbar ist.
  18. Verfahren nach Anspruch 1, wobei mindestens eine Programmiermaschine (16a16h) mehrere mit einer ersten der mehreren Aufgaben verbundene Anweisungen ausführt und zu einer zweiten der mehreren Aufgaben umschaltet, wenn eine mit der ersten der mehreren Aufgaben verbundene Anweisung eine Lange-Latenz-Operation umfasst.
  19. Verfahren nach Anspruch 1, bei dem die mindestens eine Programmiermaschine (16a16h) mehrere mit einer ersten der mehreren Aufgaben verbundene Anweisung ausführt und zu einer zweiten der mehreren Aufgaben umschaltet, wenn eine mit der ersten der mehreren Aufgaben verbundene Anweisung den Zugriff auf den Speicher (14a, 14b) erfordert.
  20. Prozessor, umfassend: eine oder mehrere Programmiermaschinen (16a16c), die in einer Vielzahl von Pipeline-Stufen (132a132c) angeordnet sind und wobei an jeder Pipeline-Stufe (132a132c) mindestens eine Programmiermaschine (16a16h) zum Ausführen von Folgendem ausgebildet ist: Verwalten der parallelen Verarbeitung einer oder mehrerer Aufgaben, einschließlich des Einrichtens eines Kontexts für jede der einen oder mehreren Aufgaben, wobei mindestens eine der Aufgaben die Ausführung mehrerer Anweisungen erfordert; Umschalten von der Verarbeitung eines der Kontexte zu einem anderen der Kontexte auf der Basis eines Ausführungsstatus einer Aufgabe durch mindestens eine der Programmiermaschinen; Bilden eines oder mehrerer nicht auf den Kontext bezogenen Register (54a54c), die in jeder der Programmiermaschinen (1616c) resident sind, wobei mindestens eines der nicht auf den Kontext bezogenen Register in jeder der Programmiermaschinen (16a16c) zum Übertragen von Daten zwischen Programmiermaschinen (16a16c) verwendet wird; und Erstellen einer oder mehrerer Pipelines und Durchleiten von mit der einen oder mehreren Aufgaben verbundenen Daten an eine nachfolgende Pipeline-Stufe (132a132c) nach Abschluss der einen oder mehreren Aufgaben und Übertragen von Daten von dem mindestens einen nicht auf den Kontext bezogenen Register (54a54c) an ein anderes nicht auf den Kontext bezogenes Register (54a54c), das in einer benachbarten Programmiermaschine (16a16c) resident ist.
  21. Prozessor nach Anspruch 20, wobei das mindestens eine nicht auf den Kontext bezogene Register ferner mindestens ein Register des nächsten Nachbarn (54a54c) umfasst, das in der mindestens einen Programmiermaschine resident ist, und das Erstellen der einen oder mehreren Pipelines ferner das Übertragen von Daten von dem Register des nächsten Nachbarn (54a54c), das in der mindestens einen Programmiermaschine (16a16c) resident ist, an ein nachfolgendes Register des nächsten Nachbarn (54a54c) umfasst, das in einer nachfolgenden Programmiermaschine (16a16c) resident ist.
  22. Prozessor nach Anspruch 21, wobei jede der Programmiermaschinen (16a16h) einen CAM (Content Addressable Memory) (64, 102) enthält.
  23. Prozessor nach Anspruch 22, wobei der CAM (64, 102) eine Vielzahl von Einträgen zum Überwachen der am weitesten zurückliegend verwendeten Variablen enthält.
  24. Prozessor nach Anspruch 22, ferner umfassend gemeinsam benutzte Variabeln, die durch die Pipeline-Stufen (132a132c) der Vielzahl von Programmiermaschinen (16a16b) verwendet werden, wobei die gemeinsam benutzten Variablen einen kritischen Abschnitt umfassen, der die Lese-Modifikations-Schreibzeit der gemeinsam benutzten Variablen umfasst.
  25. Prozessor nach Anspruch 24, ferner umfassend eine Mindestauflösung der Pipeline-Stufe (132a132c) die durch die Differenz zwischen dem kritischen Abschnitt der gemeinsam benutzten Variablen und der Ankunftszeit eines nachfolgenden Pakets definiert wird, wobei der kritische Abschnitt geringer als die Ankunftszeit des nachfolgenden Pakets ist.
  26. Prozessor nach Anspruch 22, wobei die Vielzahl von Kontexten in Reihenfolge ausgeführt werden, wobei die Reihenfolge eine Lesephase und eine Schreib-Modifikations-Phase enthält, wobei die Lesephase das Bestimmen des Cachezustands einer gemeinsam benutzten Variabeln in dem CAM (64, 102) und das Aktualisieren eines Werts für die gemeinsam benutzte Variable umfasst, wenn die gemeinsam benutzte Variable in dem CAM (64, 102) gecacht ist, und wobei die Lesephase ein Lesen der gemeinsam benutzten Variablen aus einem lokalen Speicher in mindestens einem der Vielzahl von Kontexten ausführt.
  27. Multiverarbeitungssystem, umfassend einen oder mehrere Prozessoren (12) nach einem der Ansprüche 20 bis 26.
  28. Computerprogrammprodukt, das in einem computerlesbaren Medium gespeichert wird, wobei das Programm eine Vielzahl von Anweisungen umfasst, die bei der Ausführung bewirken, dass der mindestens eine Prozessor (12) das Verfahren nach einem der Ansprüche 1 bis 5 implementiert.
DE60316774T 2002-01-25 2003-01-16 Verkettung von mehrfadenprozessorkernen zur bearbeitung von datenpaketen Expired - Lifetime DE60316774T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/057,723 US7181594B2 (en) 2002-01-25 2002-01-25 Context pipelines
US57723 2002-01-25
PCT/US2003/001580 WO2003065207A2 (en) 2002-01-25 2003-01-16 Pipelines of multithreaded processor cores for packet processing

Publications (2)

Publication Number Publication Date
DE60316774D1 DE60316774D1 (de) 2007-11-22
DE60316774T2 true DE60316774T2 (de) 2008-08-28

Family

ID=27609476

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60316774T Expired - Lifetime DE60316774T2 (de) 2002-01-25 2003-01-16 Verkettung von mehrfadenprozessorkernen zur bearbeitung von datenpaketen

Country Status (11)

Country Link
US (1) US7181594B2 (de)
EP (1) EP1481323B1 (de)
KR (1) KR100613923B1 (de)
CN (1) CN100440151C (de)
AT (1) ATE375552T1 (de)
AU (1) AU2003209290A1 (de)
CA (1) CA2473551C (de)
DE (1) DE60316774T2 (de)
HK (1) HK1072298A1 (de)
TW (1) TWI231914B (de)
WO (1) WO2003065207A2 (de)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7546444B1 (en) 1999-09-01 2009-06-09 Intel Corporation Register set used in multithreaded parallel processor architecture
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
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
US20040034858A1 (en) * 2002-08-14 2004-02-19 Kushlis Robert J. Programming a multi-threaded processor
US9330060B1 (en) * 2003-04-15 2016-05-03 Nvidia Corporation Method and device for encoding and decoding video image data
US20060236011A1 (en) * 2005-04-15 2006-10-19 Charles Narad Ring management
US7853951B2 (en) * 2005-07-25 2010-12-14 Intel Corporation Lock sequencing to reorder and grant lock requests from multiple program threads
US20070044103A1 (en) * 2005-07-25 2007-02-22 Mark Rosenbluth Inter-thread communication of lock protected data
US20070124728A1 (en) * 2005-11-28 2007-05-31 Mark Rosenbluth Passing work between threads
US7624250B2 (en) 2005-12-05 2009-11-24 Intel Corporation Heterogeneous multi-core processor having dedicated connections between processor cores
US20070140282A1 (en) * 2005-12-21 2007-06-21 Sridhar Lakshmanamurthy Managing on-chip queues in switched fabric networks
US20070245074A1 (en) * 2006-03-30 2007-10-18 Rosenbluth Mark B Ring with on-chip buffer for efficient message passing
JP5256685B2 (ja) * 2007-10-18 2013-08-07 日本電気株式会社 情報処理装置
US7926013B2 (en) * 2007-12-31 2011-04-12 Intel Corporation Validating continuous signal phase matching in high-speed nets routed as differential pairs
JP5514120B2 (ja) * 2008-11-14 2014-06-04 株式会社日立メディコ 超音波診断装置及び超音波画像生成方法
US8127262B1 (en) * 2008-12-18 2012-02-28 Xilinx, Inc. Communicating state data between stages of pipelined packet processor
US10565126B2 (en) 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10489304B2 (en) 2017-07-14 2019-11-26 Arm Limited Memory address translation
US10353826B2 (en) * 2017-07-14 2019-07-16 Arm Limited Method and apparatus for fast context cloning in a data processing system
US10613989B2 (en) 2017-07-14 2020-04-07 Arm Limited Fast address translation for virtual machines
US10467159B2 (en) 2017-07-14 2019-11-05 Arm Limited Memory node controller
US10534719B2 (en) 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10592424B2 (en) 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US10884850B2 (en) 2018-07-24 2021-01-05 Arm Limited Fault tolerant memory system

Family Cites Families (109)

* 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
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
US4745544A (en) * 1985-12-12 1988-05-17 Texas Instruments Incorporated Master/slave sequencing processor with forced I/O
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
US5142683A (en) * 1987-03-09 1992-08-25 Unisys Corporation Intercomputer communication control apparatus and method
US4866664A (en) * 1987-03-09 1989-09-12 Unisys Corporation Intercomputer communication control apparatus & method
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
DE69132495T2 (de) * 1990-03-16 2001-06-13 Texas Instruments Inc 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
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
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
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
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
DE69231957T2 (de) * 1991-10-21 2002-04-04 Toshiba Kawasaki Kk Hochgeschwindigkeitsprozessor zum fähiger Abhandeln mehrerer Unterbrechungen
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
ATE188559T1 (de) * 1992-12-23 2000-01-15 Centre Electron Horloger Multi-tasking-steuerungsgerät mit geringem energieverbrauch
EP0680640A1 (de) * 1993-01-22 1995-11-08 University Corporation For Atmospheric Research Multipipelinemultiprozessorsystem
US5404464A (en) * 1993-02-11 1995-04-04 Ast Research, Inc. Bus control system and method that selectively generate an early address strobe
US5448702A (en) * 1993-03-02 1995-09-05 International Business Machines Corporation Adapters with descriptor queue management capability
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
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
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 富士通株式会社 キュー装置
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
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
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 プログラム制御システム
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
US5940612A (en) * 1995-09-27 1999-08-17 International Business Machines Corporation System and method for queuing of tasks in a multiprocessing system
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
US5940866A (en) * 1995-12-13 1999-08-17 International Business Machines Corporation Information handling system having a local address queue for local storage of command blocks transferred from a host processing side
US5699537A (en) * 1995-12-22 1997-12-16 Intel Corporation Processor microarchitecture for efficient dynamic scheduling and execution of chains of dependent instructions
DE19681186D2 (de) 1995-12-29 1999-03-11 Tixi Com Gmbh Verfahren und Mikrocomputersystem zur automatischen, sicheren und direkten Datenübertragung
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
US5784649A (en) * 1996-03-13 1998-07-21 Diamond Multimedia Systems, Inc. Multi-threaded FIFO pool buffer and bus transfer control system
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
KR100219597B1 (ko) * 1996-03-30 1999-09-01 윤종용 씨디-롬 드라이브에서의 큐잉 제어 방법
US5956518A (en) * 1996-04-11 1999-09-21 Massachusetts Institute Of Technology Intermediate-grain reconfigurable processing device
US5946487A (en) * 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
KR980004067A (ko) * 1996-06-25 1998-03-30 김광호 멀티프로세서 시스템의 데이터 송수신장치 및 방법
JP3541335B2 (ja) 1996-06-28 2004-07-07 富士通株式会社 情報処理装置及び分散処理制御方法
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
US6058465A (en) 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
JP2970553B2 (ja) * 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
US5812868A (en) * 1996-09-16 1998-09-22 Motorola Inc. Method and apparatus for selecting a register file in a data processing system
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
US5854922A (en) * 1997-01-16 1998-12-29 Ford Motor Company Micro-sequencer apparatus and method of combination state machine and instruction memory
US5961628A (en) 1997-01-28 1999-10-05 Samsung Electronics Co., Ltd. Load and store unit for a vector processor
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
US5983274A (en) 1997-05-08 1999-11-09 Microsoft Corporation Creation and use of control information associated with packetized network data by protocol drivers and device drivers
US6006321A (en) * 1997-06-13 1999-12-21 Malleable Technologies, Inc. Programmable logic datapath that may be used in a field programmable device
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
US5938736A (en) * 1997-06-30 1999-08-17 Sun Microsystems, Inc. Search engine architecture for a high performance multi-layer switch element
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
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
US5948081A (en) * 1997-12-22 1999-09-07 Compaq Computer Corporation System for flushing queued memory write request corresponding to a queued read request and all prior write requests with counter indicating requests to be flushed
US5970013A (en) 1998-02-26 1999-10-19 Lucent Technologies Inc. Adaptive addressable circuit redundancy method and apparatus with broadcast write
US6067300A (en) * 1998-06-11 2000-05-23 Cabletron Systems, Inc. Method and apparatus for optimizing the transfer of data packets between local area networks
US6327650B1 (en) * 1999-02-12 2001-12-04 Vsli Technology, Inc. Pipelined multiprocessing with upstream processor concurrently writing to local register and to register of downstream processor
US6745317B1 (en) * 1999-07-30 2004-06-01 Broadcom Corporation Three level direct communication connections between neighboring multiple context processing elements
US7546444B1 (en) * 1999-09-01 2009-06-09 Intel Corporation Register set used in multithreaded parallel processor architecture
US6625654B1 (en) * 1999-12-28 2003-09-23 Intel Corporation Thread signaling in multi-threaded network processor
US6665755B2 (en) * 2000-12-22 2003-12-16 Nortel Networks Limited External memory engine selectable pipeline architecture

Also Published As

Publication number Publication date
US20030145173A1 (en) 2003-07-31
US7181594B2 (en) 2007-02-20
KR100613923B1 (ko) 2006-08-18
CN100440151C (zh) 2008-12-03
CA2473551C (en) 2009-01-06
WO2003065207A3 (en) 2004-05-27
TW200307214A (en) 2003-12-01
AU2003209290A1 (en) 2003-09-02
ATE375552T1 (de) 2007-10-15
EP1481323A2 (de) 2004-12-01
TWI231914B (en) 2005-05-01
CN1820253A (zh) 2006-08-16
WO2003065207A2 (en) 2003-08-07
HK1072298A1 (en) 2005-08-19
CA2473551A1 (en) 2003-08-07
KR20040017251A (ko) 2004-02-26
DE60316774D1 (de) 2007-11-22
EP1481323B1 (de) 2007-10-10

Similar Documents

Publication Publication Date Title
DE60316774T2 (de) Verkettung von mehrfadenprozessorkernen zur bearbeitung von datenpaketen
DE60015395T2 (de) Speicher, der zwischen verarbeitenden threads geteilt ist
DE60006270T2 (de) Parallele prozessorarchitektur
DE60030767T2 (de) Datenzuweisung zu threads in einem multi-threaded netzwerkprozessor
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
DE3716229C2 (de) Mikroprozessorchip mit einem Stapelrahmen-Cache
DE69721640T2 (de) Multiprozessor-Rechnersystem und Verfahren zur Steuerung des Verkehrsflusses
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE112005000706B4 (de) Verfahren und System zum Bereitstellen von Multi-Threading auf Nutzerebene
DE2716369C2 (de)
DE2230102C2 (de) Mikroprogrammierter Prozessor mit bitparalleler Datenübertragung
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE60005002T2 (de) Vertikal-threaded prozessor mit multidimensionalem speicher
DE112015005597T5 (de) Verknüpfungsfähige Parallelausführungs-Schicht einer Ausgabewarteschlange für einen Prozessor
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
DE69826404T2 (de) Datenverarbeitungssystem mit mehreren Prozessoren, die eine Registerbank gemeinsam benutzen
DE112013003731T5 (de) Neue befehls- und hocheffiziente Mikroarchitektur zum ermöglichen einer sofortigen Kontextumschaltung für Benutzerebenen-Threading
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE1966633B2 (de) Datenverarbeitungsanlage mit überlappter Arbeitswelse bei Verwendung eines Haupt- und Pufferspeichers
DE10110504A1 (de) Controller für Prozessoren mit mehreren Befehlsthreads
DE112010005821T5 (de) Kontextwechsel
DE4335475A1 (de) Datenverarbeitungseinrichtung mit Cache-Speicher
DE19545179A1 (de) Vektorspeicheroperationen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition