-
Hintergrund
-
Wenn auf einen Prozessor als 64-Bit oder 32-Bit Bezug genommen wird, bezieht sich dies typischerweise auf die Breite der Register (d. h. die Breite von softwaresichtbaren Registern) und wenn auf ein Betriebssystem als 64-Bit oder 32-Bit Bezug genommen wird, bezieht sich dies auf die Breite der virtuellen Speicheradressen. Ein Prozessor mit 64-Bit-Speicheradressen kann daher direkt auf 264 Bytes des byte-adressierbaren Speichers zugreifen. Die meisten neuen Prozessoren sind 64-Bit und solche Prozessoren arbeiten am effektivsten, wenn sie mit 64-Bit-Software betrieben werden. 64-Bit-Prozessoren sind jedoch rückwärtskompatibel und die meisten können mit 32-Bit-Software betrieben werden, was aber ineffizient ist, da die 32-Bit-Software nicht die gesamte Hardware in dem 64-Bit-Prozessor verwendet.
-
Die unten beschriebenen Ausführungsformen sind nicht auf Ausführungen beschränkt, die einige oder alle Nachteile bekannter Prozessorarchitekturen lösen.
-
Kurzfassung
-
Diese Kurzfassung wird bereitgestellt, um eine Auswahl von Konzepten in einer vereinfachten Form vorzustellen, welche nachfolgend in der detaillierten Beschreibung weiter beschrieben sind. Diese Zusammenfassung dient weder dazu, Schlüsselmerkmale oder wesentliche Merkmale des beanspruchten Gegenstandes zu identifizieren, noch dazu, als ein Mittel bei der Bestimmung des Schutzbereiches des beanspruchten Gegenstandes verwendet zu werden.
-
Es werden Verfahren zum effizienten Laufenlassen eines 32-Bit-Betriebssystems auf einem 64-Bit-Prozessor beschrieben. In einer Ausführungsform umfasst der Prozessor 64-Bit-Hardware und arbeitet als ein Singlethread-Prozessor, wenn ein 64-Bit-Betriebssystem auf ihm läuft. Wenn jedoch ein 32-Bit-Betriebssystem (welches ein Gastbetriebssystem sein kann, das auf einer virtuellen Maschine betrieben wird) läuft, arbeitet der Prozessor als ein Zwei-Thread-Kern (engl. two-threaded core). Die Registerdatei ist in zwei Teile logisch geteilt, einer für jeden Thread, und Logik, die in einer Funktionseinheit vorgesehen ist, kann zwischen Threads aufgeteilt, zwischen Threads gemeinsam benutzt oder dupliziert werden, um eine Instanz von der Logik für jeden Thread bereitzustellen. Konfigurationsbits können gesetzt werden, um anzugeben, ob der Prozessor als eine Singlethread- oder Multithread-Vorrichtung arbeiten sollte.
-
Ein erster Aspekt stellt einen Prozessor bereit, der einen ersten und einen zweiten Betriebsmodus aufweist, wobei der Prozessor umfasst: ein oder mehrere Konfigurationsregister, die ausgelegt sind, um einen Konfigurationsparameter zu speichern, wobei der Konfigurationsparameter eine Breite softwaresichtbarer Register angibt; eine Registerdatei, die mehrere Mehrzweckregister umfasst; Steuerlogik, die der Registerdatei zugeordnet bzw. mit dieser verbunden ist und im zweiten Betriebsmodus ausgelegt ist, um die Registerdatei in mehrere Teile logisch zu teilen und Zugriff auf die Teile zu steuern, wobei jeder Teil ausgelegt ist, um Daten für einen von mehreren Threads von Software zu speichern; und eine oder mehrere Funktionseinheiten, die ausgelegt sind, um Instruktionen aus dem Singlethread im ersten Betriebsmodus auszuführen und Instruktionen aus den mehreren Threads im zweiten Betriebsmodus auszuführen, wobei die Abruf- bzw. Holstufe, Steuerlogik und Funktionseinheiten jeweils ausgelegt sind, um zwischen dem ersten und zweiten Betriebsmodus abhängig von einem Wert des Konfigurationsparameters umzuschalten.
-
Ein zweiter Aspekt stellt ein Verfahren zum Betreiben eines Prozessors bereit, umfassend: Festlegen eines oder mehrerer Konfigurationsregister, um eine Breite von softwaresichtbaren Registern anzugeben; und Umschalten zwischen einem ersten und einem zweiten Betriebsmodus basierend auf den Konfigurationsregistern, wobei im ersten Modus der Prozessor als ein Singlethread-Prozessor arbeitet und im zweiten Modus der Prozessor als ein Multithread-Prozessor arbeitet.
-
Weitere Aspekte stellen ein computerlesbares Speichermedium mit darauf codiertem computerlesbarem Programmcode zum Erzeugen eines hier beschriebenen Prozessors bereit sowie ein computerlesbares Speichermedium mit Speichermedium mit darauf codiertem computerlesbarem Programmcode zum Erzeugen eines Prozessors, der ausgelegt ist, das hier beschriebene Verfahren auszuführen.
-
Die hier beschriebenen Verfahren können mittels eines Computers ausgeführt werden, der mit Software in maschinenlesbarer Form konfiguriert ist, gespeichert auf einem berührbaren Speichermedium, wie beispielsweise in Form eines Computerprogramms, das einen computerlesbaren Programmcode zum Konfigurieren eines Computers umfasst, so dass dieser Bestandteile beschriebener Verfahren ausführt oder in der Form eines Computerprogramms, das Computer-Programmcodemittel umfasst, die ausgelegt sind, alle Schritte eines beliebigen der hier beschriebenen Verfahren auszuführen, wenn das Programm auf einem Computer läuft und wobei das Computerprogramm auf einem computerlesbaren Speichermedium verkörpert sein kann. Beispiele berührbarer (oder nicht-flüchtiger) Speichermedien beinhalten Disks, USB-Sticks, Speicherkarten, etc. und beinhalten keine weitergeleiteten Signale. Die Software kann zur Ausführung auf einem parallelen Prozessor oder einem seriellen Prozessor geeignet sein, so dass die Verfahrensschritte in einer beliebigen geeigneten Reihenfolge oder simultan ausgeführt werden können.
-
Die hier beschriebenen Hardware-Komponenten können mittels eines nicht-flüchtigen computerlesbaren Speichermediums erzeugt werden, das einen darauf codierten computerlesbaren Programmcode aufweist.
-
Dies zeigt, dass Firmware und Software separat verwendet werden und nützlich sein können. Es soll Software umfasst sein, die auf ”nicht-intelligenter” oder Standard-Hardware läuft oder diese steuert, um die gewünschten Funktionen auszuführen. Es soll auch Software umfasst sein, die das Konfigurieren der Hardware, wie zum Beispiel HDL-(Hardware Description Language)Software, ”beschreibt” oder definiert, wie sie für das Design von Silizium-Chips verwendet wird, oder für das Konfigurieren universell programmierbarer Chips, um erwünschte Funktionen durchzuführen.
-
Die bevorzugten Merkmale können dementsprechend kombiniert werden, wie dies für einen Fachmann offensichtlich ist, und sie können mit beliebigen der Aspekte der Erfindung kombiniert werden.
-
Kurze Beschreibung der Zeichnungen
-
Es werden Ausführungsformen der Erfindung anhand von Beispielen mit Bezug auf die folgenden Figuren beschrieben werden, wobei:
-
1 eine schematische Darstellung eines beispielhaften Out-of-Order-Prozessors zeigt;
-
2 drei schematische Darstellungen einer Addiererfunktion in einer arithmetisch-logischen Einheit (engl. Arithmetic Logic Unit, ALU) zeigen;
-
3 zwei schematische Darstellungen einer beispielhaften Funktionseinheit sowohl im ersten als auch im zweiten Betriebsmodus zeigen;
-
4 ein Flussdiagramm eines beispielhaften Betriebsverfahrens eines Prozessors ist, wie zum Beispiel in 1 gezeigt; und
-
5 eine schematische Darstellung eines beispielhaften In-Order-Prozessors ist.
-
Gemeinsame Bezugszeichen werden in den Figuren durchgehend verwendet, um ähnliche Merkmale anzugeben.
-
Detaillierte Beschreibung
-
Ausführungsformen der vorliegenden Erfindung sind nachfolgend nur beispielhaft beschrieben. Diese Beispiele stellen die besten Wege dafür dar, die Erfindung in die Praxis umzusetzen, welche der Anmelderin derzeit bekannt sind, obwohl dies natürlich nicht die einzigen Wege sind, auf welchen dies erreicht werden könnte. Die Beschreibung legt die Funktionen des Beispiels und die Abfolge der Schritte für das Konstruieren und den Betrieb des Beispiels dar. Jedoch können dieselben oder äquivalente Funktionen und Abfolgen von anderen Beispielen erzielt werden.
-
Wie oben beschrieben ist, obwohl 32-Bit-Software, wie zum Beispiel ein 32-Bit-Betriebssystem (Operating System, OS), auf einer 64-Bit-Hardware laufen kann, nutzt die 32-Bit-Software nicht den Vorteil der zusätzlichen Hardware in dem 64-Bit-Prozessor. Eine Prozessorarchitektur und ein Betriebsverfahren eines Prozessors wird hier beschrieben, die es ermöglichen, dass die 64-Bit-Hardware als ein 2-Thread 32-Bit-Kern für 32-Bit-Software, die auf der Hardware betrieben wird, erscheint, und als ein Singlethread 64-Bit-Kern für 64-Bit-Software erscheint. Die 32-Bit-Software kann beispielsweise ein Gast-OS sein, welches auf einem 64-Bit-Hypervisor (oder Virtual-Machine-Monitor) betrieben wird oder alternativ kann ein Prozessor entworfen werden, der entweder in einem 64-Bit-Modus oder einem 32-Bit-Modus gebootet werden kann. Durch Laufenlassen der 32-Bit-Software auf 64-Bit-Hardware, die als ein 2-Thread 32-Bit-Prozessor (wie hier beschrieben) arbeitet, wird die Leistung der Software verbessert, im Vergleich zum Laufenlassen der 32-Bit-Software auf einem Standard 64-Bit-Prozessor. Ferner, wo Virtualisierung verwendet wird (zum Beispiel wo die 32-Bit-Software ein Gast-OS ist, das auf einem 64-Bit-Hypervisor betrieben wird), kann die Hardware zwischen den zwei Betriebsmodi (Singlethread 64-Bit und 2-Thread 32-Bit) wechseln, auf eine Weise, die für das Gast-OS transparent ist und dies kann dynamisch gemacht werden, abhängig davon, was auf der Hardware betrieben wird (zum Beispiel, ob das Gast-OS 32-Bit oder 64-Bit ist). Der Betrieb der hier beschriebenen Hardware bleibt unverändert für die 64-Bit-Software, aber arbeitet unterschiedlich für 32-Bit Software.
-
Es gibt viele Gründe, warum ein Benutzer 32-Bit-Software auf 64-Bit-Hardware laufen lassen möchte. Nicht alle Betriebe erfordern zusätzliche Einsatzmöglichkeiten von 64-Bit-Software und es gibt eine enorme Menge an älterer 32-Bit-Software. In verschiedenen Beispielen kann ein Benutzer Virtualisierung verwenden, um ein Gast-OS über ein Root-OS zu hosten, wo das Root-OS eine 64-Bit-Software ist und das Gast-OS eine 32-Bit- oder 64-Bit-Software sein kann. In verschiedenen Beispielen, sofern das Gast-OS keine umfangreichen Multiplikationen durchführt, werden 64-Bits nicht benötigt und so kann ein Benutzer nur ein 32-Bit-Gast-OS verwenden oder kann zwischen einem 64-Bit-Gast-OS und einem 32-Bit-Gast-OS umschalten. In einigen Beispielen kann der Benutzer zwei oder mehr Gast-Betriebssysteme auf einem Root-OS (zum Beispiel einem Arbeits-OS (Work-OS) oder einem Heim-OS (Home-OS) laufen lassen, wobei eines oder beide dieser ein 32-Bit-OS sein kann. Eine Leistungssteigerung kann auf diese Weise durch Laufenlassen von zwei 32-Bit-Threads im Vergleich zu einem Single 32-Bit-Thread auf 64-Bit-Hardware erzielt werden.
-
Um als ein 2-Thread Kern zu arbeiten, wenn eine 32-Bit-Software läuft, werden die Mehrzweckregister (General Purpose Register, GPRs) in dem Prozessor (zum Beispiel in der Registerdatei im Prozessor) in zwei Teile logisch geteilt, wobei jeder Thread einen der Teile des GPRs verwendet. Zum Beispiel kann der erste Thread (Thread 0) die untere Hälfte jedes GPRs verwenden (zum Beispiel die untere Hälfte des GPR[0], die untere Hälfte des GPR[1], etc.) und der zweite Thread (Thread 1) kann die obere Hälfte jedes GPRs verwenden (zum Beispiel die obere Hälfte von GPR[0], die obere Hälfte von GPR[1], etc.). Zusätzlich können einige arithmetisch-logische Einheiten (ALUs) in dem Prozessor entworfen werden, so dass eine 64-Bit-ALU verwendet werden kann, um parallel zwei 32-Bit Operationen durchzuführen. Andere ALUs können zwischen den Threads gemeinsam benutzt oder dupliziert werden, um eine Instanz der Logik für jeden Thread bereitzustellen.
-
Obwohl die hier beschriebenen Verfahren und Hardware verwendet werden, um 32-Bit-Software auf 64-Bit-Hardware laufen zu lassen, können die Techniken auch angewendet werden, um 32-Bit-Software auf 128-Bit-Hardware laufen zu lassen (in diesem Fall verhält sich die Hardware wie ein Vier-Thread 32-Bit-Prozessor), um 64-Bit-Software auf 128-Bit-Hardware laufen zu lassen (in diesem Fall verhält sich die Hardware wie ein 2-Thread 64-Bit-Prozessor, um 32-Bit-Software auf 96-Bit-Hardware laufen zu lassen (in diesem Fall verhält sich die Hardware wie ein Drei-Thread 32-Bit-Prozessor), etc. Im Allgemeinen können die hier beschriebenen Verfahren und Hardware verwendet werden, um X-Bit-Software (wobei zum Beispiel X = 32, 64, etc. ist) auf (n.X)-Bit-Hardware (wobei n eine positive ganze Zahl größer als 1 ist) mit der (n.X)-Bit-Hardware, die als ein n-Thread X-Bit-Prozessor arbeitet, laufen zu lassen. Die resultierende Hardware weist mehrere Betriebsmodi auf: einen ersten Modus, in dem sie als ein Singlethread (n.X)-Bit-Kern arbeitet, und zumindest einen zusätzlichen Modus, in dem sie als ein n-Thread X-Bit-Prozessor arbeitet (wobei jedes GPR in n Teile geteilt ist, mit jedem Thread wird einer der Teile des GPRs verwendet).
-
In verschiedenen Beispielen kann die Hardware mehr als zwei Betriebsmodi aufweisen, zum Beispiel kann 128-Bit-Hardware als ein Singlethread 28-Bit-Prozessor in einem ersten Modus, ein 2-Tread 64-Bit-Prozessor in einem zweiten Modus und ein 4-Thread 32-Bit-Prozessor in einem dritten Modus arbeiten. Im Allgemeinen weist die Hardware zumindest zwei Betriebsmodi auf. In einem Modus arbeitet sie als ein Singlethread-Kern (und dies kann als der ”normale Betriebsmodus” bezeichnet werden) und in jedem zusätzlichen Modus arbeitet sie als ein Multithread-Kern (und ein zusätzlicher Modus kann als ein ”Multithread-Betriebsmodus” bezeichnet werden).
-
1 zeigt ein schematisches Diagramm eines beispielhaften Out-of-Order-Prozessors 100, in dem die hier beschriebenen Verfahren implementiert werden können. Obwohl 1 einen Out-of-Order-Prozessor zeigt, können die Verfahren auch in einem In-Order-Prozessor, wie in 5 gezeigt (d. h. einem Prozessor, der Instruktionen außer der Reihenfolge (”out-of-order”) verarbeitet), implementiert werden. In diesem Beispiel ist der Prozessor 100 ein Singlethread-Prozessor; jedoch können die Verfahren auch in Multithread-Prozessoren verwendet werden und in einem Multithread-Prozessor können die Verfahren für alle Threads verwendet werden (zum Beispiel könnte ein 2-Thread 64-Bit-Kern die hier beschriebenen Verfahren verwenden, um in einem 4-Thread 32-Bit-Modus oder nur für eine (echte) Teilmenge der Threads zu arbeiten (zum Beispiel ein 2-Thread 64-Bit-Kern könnte die hier beschriebenen Verfahren verwenden), um in einem 2-Thread 32-Bit-Modus, der einen Thread verwendet, und in einem Singlethread 64-Bit-Modus, der den anderen Thread verwendet, zu arbeiten).
-
Der Prozessor 100 umfasst eine Abrufstufe 102, eine Dekodier- und Umbenennungsstufe 104, einen Neuordnungspuffer 106, eine Übergabe- bzw. Festschreibstufe (Commit-Stufe) 108 und einen oder mehrere Funktionseinheiten 110, wobei jede eine oder mehrere Ausführungs-Pipelines umfasst, und eine Registerdatei (Register File, RF) 116. Der untere Teil von 1 zeigt eine erweiterte Ansicht der Registerdatei 116 und einen Teil einer Funktionseinheit 110.
-
Die Abrufstufe 102 ist ausgelegt, um Instruktionen von einem Programm (in Programmreihenfolge) abzurufen bzw. zu holen, wie durch einen Programmzähler (engl. Program Counter, PC) angezeigt wird. Wenn eine 64-Bit-Software auf 64-Bit-Hardware läuft, arbeitet die Abrufstufe 102 normal; jedoch, wenn 32-Bit-Software auf der 64-Bit-Hardware läuft, ruft die Abrufstufe 102 Instruktionen für beide Threads ab. Die Abrufstufe 102 kann beispielsweise Instruktionen für die zwei Threads abwechselnd abrufen oder kann eine beliebige Technik verwenden, um festzulegen, ob eine Instruktion für den ersten Thread (Thread 0) oder den zweiten Thread (Thread 1) abgerufen werden soll. In verschiedenen Beispielen kann die Abrufstufe 102 zusätzliche Logik 103 umfassen, die festlegt, ob der Prozessor in einem ersten Modus (Singlethread für 64-Bit-Software) oder einem zweiten Modus (2-Thread für 32-Bit-Software) arbeitet und dies kann basierend auf dem Wert von einem oder mehreren Konfigurationsregistern 105 festgelegt werden, wobei die Konfigurationsregister 105 eine Breite von softwaresichtbaren Registern (zum Beispiel einer Breite von 32-Bits für 32-Bit-Software) angeben. In einem Beispiel kann es ein einziges Konfigurationsbit sein, das angibt, ob das Betriebssystem ein 64-Bit oder 32-Bit ist und in einem Beispiel kann es auf ”1” für 64-Bit und ”0” für 32-Bit festgelegt werden. Obwohl die Konfigurationsregister 105 von der RF 116 in 1 separat gezeigt sind, können sie in anderen Beispielen Teil der RF sein.
-
Die zusätzliche Logik 103 in der Abrufstufe 102 ermöglicht der Abrufstufe, Instruktionen von zwei Threads zu bearbeiten, insbesondere da PCs zwischen den Threads gemeinsam benutzt werden können (zum Beispiel auf ähnliche Weise wie die GPRs, weil die PCs dieselbe Breite wie die GPRs aufweisen, zum Beispiel 31:0 für Thread 0 und 63:32 für Thread 1). Diese zusätzliche Logik 103 wählt aus, welcher Thread abgerufen werden soll (zum Beispiel Thread 0 oder 1 für 64-Bit-Hardware, die im 32-Bit-Modus betrieben wird).
-
In den Fällen, in denen Virtualisierung verwendet wird und das Root-OS ein 64-Bit-OS ist, werden die Konfigurationsregister 105 nur durch die Hardware verwendet, um zu identifizieren, ob der Gastkontext 32-Bit- oder 64-Bit-Software ist. Die Konfigurationsregister 105 können durch den Hypervisor (zum Beispiel wenn er in den Kontext des Gast-OS umschaltet) festgelegt werden. Wo jedoch der gesamte Kern in entweder dem ersten Betriebsmodus (64-Bit-Betrieb) oder dem zweiten Betriebsmodus (2-Thread 32-Bit-Betrieb) gebootet wird, können die Konfigurationsparameter durch irgendetwas außerhalb der CPU festgelegt werden. In verschiedenen Beispielen können die Konfigurationsparameter auf einen externen Pin festgelegt werden, der sich nicht verändern wird, solange der Kern nicht neu gebootet wird.
-
Sobald eine Instruktion abgerufen ist, wird sie der Dekodier- und Umbenennungsstufe 104 bereitgestellt, die ausgelegt ist, die Instruktionen zu interpretieren und Registerumbenennung durchzuführen. Insbesondere kann jede Instruktion einen Registerschreibvorgang; einen oder mehrere Registerlesevorgänge; und/oder eine arithmetische oder logische Operation umfassen. Ein Registerschreibvorgang schreibt an ein Zielregister und ein Registerlesevorgang liest aus einem Quellregister. Während der Registerumbenennung wird jedes architektonische Register, auf welches in einer Instruktion verwiesen wird (zum Beispiel jedes Quell- oder Zielregister), durch ein physisches Register ersetzt (oder umbenannt).
-
Für Registerschreibvorgänge wird dem architektonischen Register (zum Beispiel Zielregister), auf das zugegriffen wird, ein ungenutztes (oder verfügbares) physisches Register zugewiesen. Eine beliebige Zuweisung kann in einer Registerumbenennungstabelle gespeichert werden, wobei die Registerumbenennungstabelle eine Datenstruktur ist, die das Mapping bzw. Abbildung zwischen jedem architektonischen Register und dem physischen Register, das dieser Instruktion in dem Programmablauf zugewiesen ist, zeigt. Für Registerlesevorgänge kann das korrekte physische Register für ein besonderes architektonisches Register (zum Beispiel Quellregister) aus einem Eintrag in die Registerumbenennungstabelle, indiziert durch das architektonische Register, festgelegt werden.
-
Nachdem eine Instruktion die Dekodier- und Umbenennungsstufe 104 durchlaufen hat, wird sie in einen Neuordnungspuffer 106 (Reorder Buffer, ROB) eingefügt und an eine Funktionseinheit 110 zur Ausführung gesendet. Die Funktionseinheit 110, an welche die Instruktion gesendet wird, kann auf der Art von Instruktionen beruhen. Der Neuordnungspuffer 106 ist ein Puffer, der es ermöglicht, die Instruktionen außerhalb der Reihenfolge (”out-of-order”) auszuführen, aber in Reihenfolge (”in-order”) zu binden bzw. zu committen. Der Neuordnungspuffer 106 speichert die Instruktionen, die in ihn eingegeben werden, in Programmreihenfolge, aber die Instruktionen in dem ROB 106 können außerhalb der Sequenz durch die Funktionseinheiten 110 ausgeführt werden. In einigen Beispielen kann der Neuordnungspuffer 106 als ein zirkularer Puffer ausgebildet sein, der ein vorderes Ende besitzt, das zur ältesten Instruktion in dem ROB 106 weist, und ein hinteres Ende besitzt, das zur jüngsten Instruktion in dem ROB 106 weist. Instruktionen werden von dem Neuordnungspuffer 106 an die Übergabestufe bzw. Commitstufe 108 in Programmreihenfolge ausgegeben. Mit anderen Worten, eine Instruktion wird von dem vorderen Teil des ROB 106 ausgegeben, wenn diese Instruktion ausgeführt wurde, und das vordere Teil wird zur nächsten Instruktion in dem ROB 106 inkrementiert. Instruktionen, ausgegeben von dem Neuordnungspuffer 106, werden einer Übergabestufe 108 bereitgestellt, die die Ergebnisse der Instruktionen an das Register/den Speicher übergibt bzw. festschreibt/committet.
-
Jede Funktionseinheit 110 ist für das Ausführen von Instruktionen verantwortlich und kann dafür ausgelegt sein, spezielle Arten von Instruktionen auszuführen. Die Funktionseinheiten 110 können einen oder mehrere Lade-Speicher-Einheiten, eine Ganzzahl-Einheit, eine Gleitkomma-Einheit (Floating Point Unit, FPU), eine Digitalsignalverarbeitungs-(Digital Signal Processing, DSP)/Single Instruction Multiple Data(SIMD)-Einheit oder eine Multiply Accumulate(MAC)-Einheit umfassen. Darüber hinaus liest die Lade-Speichereinheit Daten von und schreibt Daten in den L1-Cache und Speicher. In einigen Fällen kann die Lade-Speichereinheit Adressen berechnen und sie kann (oder kann nicht) den L1-Cache beinhalten und die Data/Tag RAM Look-ups durchführen. Der L1-Cache kann selbst auf eine ”harte” oder ”weiche” Weise zwischen den Threads aufgeteilt werden, wenn dieser in einem Multithread-Modus betrieben wird (aber nicht, wenn dieser im normalen Modus mit nur einem betriebenen Singlethread arbeitet). Bei harter Partitionierung wird jeder Cache so partitioniert, dass ein Teil des physischen Cache jedem Thread überlassen wird und die Größe der Partitionen ohne Entleeren (Flushing) des Caches, zum Beispiel Teilen des L1-Caches, die auf Indexen basieren, nicht geändert werden kann. Bei weicher Partitionierung wird der Cache so partitioniert, dass die Größe der Partitionen während der Laufzeit geändert werden kann. In verschiedenen Beispielen kann der L1-Cache aufgeteilt werden, basierend auf Wegen (für assoziative Caches), die ein beliebiges geeignetes Verfahren verwenden, und diese kommen für harte und weiche Partitionierung, abhängig von dem verwendeten Verfahren, in Betracht. Eine Ganzzahl-Einheit führt ganzzahlige Instruktionen aus, eine FPU führt Gleitkomma-Instruktionen (Floating Point Instructions) durch, eine DSP/SIMD-Einheit weist mehrere Verarbeitungselemente auf, die dieselbe Operation an mehreren Datenpunkten simultan ausführt, und eine MAC-Einheit berechnet das Produkt von zwei Zahlen und addiert das Produkt zu einem Akkumulator. Die Pipelines in den Funktionseinheiten können verschiedene Längen und/oder Komplexitäten aufweisen. Zum Beispiel ist eine FPU-Pipeline in der Regel länger als eine Ganzzahl-Ausführungs-Pipeline, weil sie im Allgemeinen kompliziertere Operationen durchführt.
-
Während der Ausführung der Instruktionen, die von der Dekodier- und Umbenennungsstufe 104 empfangen werden, führt jede Funktionseinheit 110 Lesevorgänge und Schreibvorgänge in physischen Registern in einer oder mehreren gemeinsam benutzten Registerdateien 116 aus. Wenn eine 32-Bit-Software auf 64-Bit-Hardware (der zweite Betriebsmodus) läuft, ist die Registerdatei 116 (und insbesondere die GPRs in der RF), die in verschiedenen Beispielen ausgelegt sein kann, um 32 64-Bit-Adressen zu speichern, in zwei Teile 120, 122 logisch geteilt. Ein erster Teil RF-A 120 wird vom ersten Thread (Thread 0) verwendet und ist 32×32 Bits breit. Der zweite Teil RF-B 122 wird vom zweiten Thread (Thread 1) verwendet und ist auch 32×32 Bits breit. Im Gegensatz dazu, wenn 64-Bit-Software betrieben wird (der zweite Betriebsmodus), liest der Singlethread die unteren 32 Bits des GPR aus RF-A 120 und die oberen 32 Bits des GPR aus RF-B 122, wodurch der Anschein gegeben wird, dass es eine einzelne Registerdatei 116 gibt, die die gesamten 32×64 Bits enthält.
-
Das Aufteilen der RF auf diese Art und Weise kann sich nur auf die GPRs in der RF beziehen. Jedoch können diese in verschiedenen Beispielen, wenn andere Register in der RF vorhanden sind, wo die zu speichernden Werte auch kleiner in einem Multithread Modus als in dem normalen Betriebsmodus sind, auch zwischen Threads aufgeteilt werden.
-
Wie im unteren Teil von 1 gezeigt ist, umfasst eine Funktionseinheit 110 Logik 124, 126 (die als ”Dekodierlogik” bezeichnet werden kann), die die Register (zum Beispiel die Flip-Flops) und die Multiplexer in der RF 116 ansteuert. Im ersten Betriebsmodus (zum Bespiel wenn 64-Bit-Software läuft) empfangen beide dieser Elemente 124 und 126 Instruktionen und steuern beide Teile der RF 116 (d. h. RF-A 120 und RF-B 122) mit der gleichen Information an (zum Beispiel beide Teile rufen GPRs 1 und 2 von jedem entsprechenden Teil ab). Wie in 1 gezeigt ist, werden die Ergebnisse der Operationen in der ALU 124 in die zwei Teile der RF 120, 122 zurückgeschrieben. Die unteren 32 Bits des Ergebnisses werden in RF-A 120 zurückgeschrieben und die oberen 32 Bits des Ergebnisses werden in RF-B 122 zurückgeschrieben. Im zweiten Betriebsmodus (zum Beispiel wenn zwei 32-Bit-Threads laufen) empfängt das erste dieser Logikelemente 124 Instruktionen, die sich auf Thread 0 beziehen, und steuert den ersten Teil, RF-A 120 von der RF 116, an. Auf ähnliche Weise empfängt das zweite dieser Logikelemente 126 Instruktionen, die sich auf den ersten Thread 1 beziehen, und steuert den zweiten Teil, RF-B 122 von der RF 116, an. Wie in 1 gezeigt ist, werden die Ergebnisse der Operationen in der ALU 124 auch in die zwei Teile der RF 120, 122 zurückgeschrieben. Ergebnisse, die sich auf den ersten Thread beziehen, werden in den ersten Teil, RF-A 120, zurückgeschrieben und Ergebnisse, die sich auf den zweiten Thread beziehen, werden in den zweiten Teil, RF-B 122, zurückgeschrieben.
-
Durch das logische Aufteilen der RF 116 auf diese Art kann die gleiche RF für entweder 64-Bit- oder 32-Bit-Operation verwendet werden. Zusätzlich, wenn sie mit Virtualisierung verwendet wird, erkennt das Root-OS (das eine 64-Bit-Software ist) die Register als 32 Einträge, die alle 64 Bit breit sind, unabhängig davon, ob das Gast-OS 64 Bit oder 32 Bit ist und falls notwendig (zum Beispiel nach einem Kontextwechsel bzw. einer Kontextumschaltung) werden die gesamten Daten in der RF 116 in den Speicher gesichert, ohne dass eine beliebige zusätzliche Logik oder Veränderungen an den Instruktionen erforderlich sind.
-
In einer Funktionseinheit (zum Beispiel in ALU 124) kann es Teile der Logik geben, die zwischen den zwei Threads geteilt werden können, Teile der Logik geben, die dupliziert werden können, und Teile der Logik geben, die zwischen den Threads gemeinsam genutzt werden können.
-
2 zeigt drei schematische Diagramme 21–23 einer Addiererfunktion in einer ALU. Wie im ersten Diagramm 21 gezeigt, kann ein 64-Bit-Addierer aus zwei 32-Bit-Addierer 202 gebildet werden, wobei ein Übertragssignal (engl. carry signal) von einem 32-Bit-Addierer zum anderen weitergeleitet wird. Durch Hinzufügen von Logik in den Übertragspfad (zum Beispiel eines UND-Gatters 204, wie in der zweiten Darstellung 22 in 2 gezeigt) kann ein Konfigurationsbit (zum Beispiel auf 1 gesetzt für 64-Bit-Software und 0 für 32-Bit-Software) verwendet werden, um zu steuern, ob der Übertrag sich von einem 32-Bit-Addierer zu einem anderen (zum Beispiel für 64-Bit-Betrieb) verbreitet oder nicht (zum Beispiel für 2-Thread 32-Bit-Betrieb). Das Konfigurationsbit kann in den in 1 gezeigten Konfigurationsregistern 105 gespeichert werden. Wenn das Konfigurationsbit den Übertragspfad blockiert, arbeiten die zwei Addierer 202 unabhängig. Der erste Addierer 202 kann dann für den ersten Thread und der zweite Addierer 202 kann für den zweiten Thread verwendet werden. Andere Implementierungen, wie in der dritten Darstellung 23 gezeigt, können eine ähnliche Sache mit einem 65-Bit-Addierer 206 machen, wo Bit 32 (angedeutet durch Pfeile 208 und 210) mit dem Konfigurationsbit für einen Eingangsoperanden verbunden wird, für den zweiten Eingabeoperanden mit 0 verbunden wird und am Ausgang ignoriert wird. In diesem Beispiel würde ein Konfigurationsbit mit einem Wert von 1 einen beliebigen Überlauf an den unteren 32 Bits verursachen, um sich zu den oberen 32 Bits zu verbreiten, ohne dass explizit Bedarf nach einer Art Carry-Ripple-Addierer besteht. Eine ähnliche Implementierung, wie sie in den Darstellungen 21–23 gezeigt sind, kann für andere mathematische Funktionen in einer ALU, wie einem Multiplizierer, verwendet werden, wo zwei Blöcke in dem ersten Modus zusammen arbeiten (und die irgendwie verknüpft werden können, zum Beispiel auf eine ähnliche Weise wie Ganzzahl SIMD Multiplizierer) und die zwei Blöcke unabhängig in dem zweiten Modus arbeiten.
-
3 zeigt zwei schematische Darstellungen 31, 32 einer beispielhaften Funktionseinheit im ersten und zweiten Betriebsmodus. Die Funktionseinheit umfasst eine Logikfunktion A, gefolgt von einer Logikfunktion B 302 und dann einer Logikfunktion C 304. Im ersten Betriebsmodus (zum Beispiel wenn 64-Bit-Software läuft), wird die Logikfunktion A von zwei verknüpften Blöcken A1 306, A2 308 auf eine ähnliche Weise mit dem Addierer, der in den ersten beiden Diagrammen in 2 gezeigt ist, gebildet. Um auch im zweiten Betriebsmodus (zwei 32-Bit-Threads) arbeiten zu können, werden Teile der Logik 310 zwischen den zwei Threads (zum Beispiel Logik A1 306 und A2 308) geteilt, werden Teile der Logik 312 (zum Beispiel Logik B 302) dupliziert und werden Teile der Logik 314 (zum Beispiel Logik C 304) gemeinsam benutzt zwischen Threads, mit Logik 316, die zwischen Threads entscheidet (arbitriert), um zu bestimmen, welcher Thread die Logik jeweils verwendet. Im ersten Betriebsmodus (wie in Darstellung 31 gezeigt), werden die duplizierte Logik B und die Arbitrations- bzw. Entscheidungslogik 316 nicht verwendet. Dies ist ein Beispiel, um die unterschiedlichen möglichen Situationen zu zeigen, wobei andere Implementierungen Kombinationen von geteilter/duplizierter/gemeinsam benutzter Logik verwenden können, wodurch sich mehr oder weniger zusätzliche Logik ergibt.
-
Während einige Logikfunktionen wie zum Beispiel ein Addierer oder ein Multiplizierer zwischen zwei Threads einfach aufgeteilt werden können (zum Beispiel wie in den 2 und 3 gezeigt), kann es andere Logikfunktionen, wie zum Beispiel einen Dividierer, geben, die nicht einfach aufgeteilt werden können und solche Logikfunktionen können entweder repliziert (wie bei Logik B in 3) oder zwischen Threads gemeinsam benutzt werden (wie bei Logik C in 3). Auf gleiche Weise, wenn eine Funktionseinheit (zum Beispiel die FPU) die gleiche Registerbreite in beiden Softwareversionen (zum Beispiel einer 32-Bit-Version und einer 64-Bit-Version) aufweist, dann kann sie nicht für Multithread-Betrieb aufgeteilt werden. Wenn eine Funktionseinheit nicht aufgeteilt werden kann, können die Threads die Funktionseinheit temporär gemeinsam benutzen (zum Beispiel verwendet Thread 0 sie in einem Zyklus, Thread 1 verwendet sie in dem nächsten Zyklus, Thread 0 verwendet sie in dem nächsten Zyklus, etc. wie bei der Abrufstufe 102).
-
Der Prozessor 100 kann auch andere als die in 1 gezeigten Funktionselemente umfassen. Zum Beispiel kann der Prozessor ferner einen Verzweigungsprädiktor (Branch Predictor) umfassen, der ausgelegt ist, um vorherzusagen, welche Richtung der Programmablauf im Falle von bekannten Instruktionen nehmen wird, um mögliche Ablaufänderungen zu bewirken, wie zum Beispiel Verzweigungsbefehle. Verzweigungsprädiktor ist nützlich, da er ermöglicht, dass Instruktionen durch den Prozessor 100 spekulativ durchgeführt werden, bevor das Ergebnis der Verzweigungsbefehle bekannt ist. Wenn der Verzweigungsprädiktor den Programmablauf genau vorhersagt, verbessert sich hierdurch die Leistung des Prozessors 100. Jedoch, wenn der Verzweigungsprädiktor nicht korrekt die Verzweigungsrichtung vorhersagt, dann tritt eine Fehlprognose auf, die korrigiert werden muss, bevor das Programm fortfahren kann. Um eine Fehlprognose zu korrigieren, werden die spekulativen Instruktionen, die zum ROB 106 gesendet werden, abgebrochen und die Abrufstufe 102 startet Abrufinstruktionen aus dem korrekten Programmzweig.
-
Es versteht sich, dass andere Prozessoren nicht die gesamten in 1 gezeigten Funktionselemente umfassen können (d. h. eine oder mehrere Funktionselemente, die in 1 gezeigt sind, können weggelassen werden) und in einigen Beispielen zusätzliche in 1 nicht gezeigte Funktionselemente umfassen können.
-
4 ist ein Flussdiagramm eines beispielhaften Arbeitsverfahrens eines Prozessors, wie zum Beispiel in 1 gezeigt. Wie oben beschrieben sind die Konfigurationsregister 105 gesetzt (Block 402), die den Betriebsmodus des Prozessors (in Block 404) bestimmen. Im ersten Betriebsmodus arbeitet der Prozessor als eine Singlethread 64-Bit-Vorrichtung: Abrufen von Instruktionen (Block 406), Dekodieren und Umbenennen dieser Instruktionen (Block 408), Weitergeben der Instruktionen an den ROB (Block 410), Ausführen der Instruktionen (Block 412), und das Neuordnen dieser in PC-Reihenfolge (Block 413) vor dem Festschreiben (Commit) der Instruktionen (Block 414). Im zweiten Betriebsmodus arbeitet der Prozessor als eine 2-Thread 32-Bit-Vorrichtung und ruft die Instruktionen von beiden Threads (Block 416) ab, zum Beispiel können Instruktionen abwechselnd von Thread 0 oder Thread 1 abgerufen werden. Die abgerufenen Instruktionen werden dekodiert und umbenannt (Block 418) und an den ROB (Block 420) weitergeleitet. Wie oben beschrieben werden die Instruktionen dann mit Instruktionen aus dem ersten Thread, der einen ersten Teil der Registerdatei liest und schreibt, und Instruktionen aus dem zweiten Thread, der einen zweiten Teil der Registerdatei liest und schreibt, ausgeführt (Block 422). Wie in 3 gezeigt und oben beschrieben können einige Aspekte der Durchführung parallel ausgeführt werden (zum Beispiel so, dass eine erste Instruktion von Thread 0 zumindest teilweise parallel mit einer zweiten Instruktion von Thread 1 ausgeführt werden kann und andere Aspekte der Durchführung können mit Entscheidungslogik, die bestimmt, welcher Thread jeweils Priorität hat, seriell ausgeführt werden. Schließlich werden die Instruktionen von jedem Thread in PC-Reihenfolge (Block 423) neu geordnet, bevor die Ergebnisse der Instruktionen für die zwei Threads im Speicher (Block 424) festgeschrieben werden.
-
Zusätzlich zum Aufteilen der RF 116 im zweiten Betriebsmodus (wie in 1 gezeigt), kann der ROB 106 zwischen den zwei Threads (ROB-A 106A, ROB-B 106B) im zweiten Betriebsmodus, wie in 1 gezeigt) auch geteilt werden. Eine Festschreibeinheit 118 kann auch modifiziert werden, um die beiden Threads aufzunehmen. Die Festschreibeinheit 118 ist eine Einheit, die die Instruktionen zurück in Reihenfolge stellt, durch Lesen des ROB 116, im Anschluss an die Durchführung, und die Festschreibstufe 108 (zum Beispiel in Block 413) bearbeitet. Die Modifikation an der Festschreibeinheit 118 ermöglicht es, die Instruktionen aus den zwei Threads im zweiten Betriebsmodus (zum Beispiel in Block 423) unabhängig neu zu ordnen.
-
Der Umfang der Duplikation der Logik in einem Prozessor, der die hier beschriebenen Verfahren implementiert, kann anwendungsspezifisch sein. Ein größerer Umfang der Duplikation wird in höherer Leistungssteigerung (im Vergleich zur 32-Bit-Software, die auf Standard-64-Bit-Hardware betrieben wird) resultieren, aber der Bereich der Vorrichtung wird sich vergrößern. In verschiedenen Beispielen kann der Prozessor duplizierte Logik für kritische Merkmale in einer ALU umfassen oder andere Merkmale können gemeinsam benutzt werden.
-
Wie oben beschrieben können die Verfahren in einem Prozessor implementiert werden, der ferner einen Verzweigungsprädiktor umfasst, der ausgelegt ist, vorherzusagen, welche Richtung der Programmablauf im Falle von bekannten Instruktionen nehmen wird, um mögliche Ablaufänderungen, wie zum Beispiel Verzweigungsinstruktionen, zu bewirken. Wenn der Verzweigungsprädiktor die Verzweigungsrichtung nicht korrekt vorhersagt, dann tritt eine Fehlprognose auf, die korrigiert werden muss, bevor das Programm fortfahren kann. Um eine Fehlprognose zu korrigieren, werden die spekulativen Instruktionen, die zum ROB 106 gesendet werden, abgebrochen und die Abrufstufe 102 startet Abrufinstruktionen aus dem korrekten Programmzweig. Wenn im zweiten Betriebsmodus gearbeitet wird (zum Beispiel Betreiben einer 32-Bit-Software), kann eine Fehlprognose in einem von beiden Threads (zum Beispiel Thread 0 oder Thread 1) im Entleeren (Flushen) der fehlprognostizierten Instruktion und aller nachfolgender Instruktionen von beiden Threads von den Funktionseinheiten 110 resultieren. In einem solchen Beispiel startet dann die Abrufstufe 102 Abrufinstruktionen wieder für beide Threads. Alternativ kann jedoch die Logik, die verwendet wird, um die Funktionseinheiten im Falle einer falschen Spekulation durch den Prozessor zu entleeren, modifiziert/dupliziert werden, so dass eine falsche Spekulation in einem der 32-Bit-Threads (zum Beispiel Thread 0) nur in dem Entleeren der Instruktionen von diesem Thread resultiert und Entleeren von beliebigen Instruktionen von dem anderen Thread (zum Beispiel Thread 1) nicht erforderlich macht. Die Logik, die verwendet wird, um die Funktionseinheiten zu entleeren, verbreitet sich durch die gesamte Funktionseinheit, zum Beispiel bei Registerstufen in einer Funktionseinheit (zum Beispiel ”if(flush)registers.valid=0” zu implementieren). Zusätzliche Logik kann hinzugefügt werden, um die Pipeline selektiv zu entleeren, die einen extra Vergleich (mit der Threadnummer) ausführt, um zu prüfen, ob es erforderlich ist, die Stufe zu entleeren oder nicht (zum Beispiel ”if(flush and flush.thread==registers.thread)registers.valid=0”).
-
Die hier beschriebenen Verfahren können in Kombination mit Virtualisierung verwendet werden. In einem solchen Beispiel ist der Hypervisor/das Root-OS 64-Bit-Software und das Gast-OS kann 32-Bit oder 64-Bit sein.
-
Wie oben beschrieben kann der Prozessor zwischen Betriebsmodi dynamisch umschalten. Wo Virtualisierung verwendet wird, kann das Umschalten stattfinden, wenn unterschiedliche Gast-OS gebootet werden und wo Virtualisierung nicht verwendet wird, findet das Umschalten beim Booten des Prozessors statt. Das Festlegen des/der Konfigurationsbit(s), der steuert/die steuern, in welchem Betriebsmodus der Prozessor arbeitet, kann in Hardware oder Software ausgeführt werden.
-
Obwohl sich die obige Beschreibung auf einen Out-of-Order-Prozessor bezieht, können die Verfahren auch in einem In-Order-Prozessor 500, wie in 5 gezeigt, verwendet werden. Der In-Order-Prozessor umfasst eine Abrufstufe 102, Dekodierstufe 504, einen oder mehrere Funktionseinheiten 110 und Registerdatei 116. Es versteht sich, dass andere In-Order-Prozessoren nicht alle Funktionselemente, die in 5 gezeigt sind, (d. h. eines oder mehrere der Funktionselemente, die in 5 gezeigt sind, können ausgelassen werden) umfassen, und können in einigen Beispielen zusätzliche Funktionselemente, die nicht in 5 gezeigt sind, umfassen. In den Fällen, in denen die Verfahren in einem In-Order-Prozessor 500 implementiert sind, kann es einige zusätzliche Veränderungen geben, die nicht in einem Out-of-Order-Prozessor verwendet werden. Zum Beispiel kann zusätzliche Logik bereitgestellt werden (in den Abruf- oder Dekodierstufen 102, 104), um einen blockierten Thread zu entleeren (wenn in einem Multithread Modus arbeitend), so dass der andere Thread durch die Funktions-(oder Durchführungs)-Einheiten 110 durchkommen kann.
-
Obwohl viele der oben beschriebenen Beispiele auf ein OS, welches mit einer reduzierten Breite von softwaresichtbaren Registern (zum Beispiel ein 32-Bit-OS) auf einer Hardware, die breitere Register (zum Beispiel 64-Bit-Register, wie durch 64-Bit-Software bereitgestellt) betrieben wird, Bezug nehmen, ist es wünschenswert, dass Betriebssysteme nur ein Beispiel des Typs von Software ist, für welche die hier beschriebenen Verfahren verwendet werden können (zum Beispiel können die Verfahren in den Fällen verwendet werden, in denen die Software anstatt eines vollständigen OS Firmware ist).
-
Obwohl die beschriebenen Prozessoren 100, 500 RFs umfassen, die zwischen Threads in einem Multithread Betriebsmodus in verschiedenen Beispielen gemeinsam benutzt werden, kann ein Prozessor zusätzliche Stufen und/oder Puffer umfassen, die zwischen Threads in dem Multithread Betriebsmodus gemeinsam benutzt werden.
-
Der Begriff ”Prozessor” und ”Computer” werden hier verwendet, um auf jede Vorrichtung oder Teile davon mit Verarbeitungsfähigkeit zu verweisen, so dass sie Instruktionen ausführen kann. Der Begriff ”Prozessor” kann zum Beispiel zentrale Recheneinheiten (Central Processing Units, CPUs), graphische Prozesseinheiten (Graphics Processing Units, GPUs oder VPUs), Physikbeschleuniger (Physics Processing Units, PPUs), digitale Signalprozessoren (Digital Signal Processors, DSPs), Mehrzweckprozessoren (zum Beispiel eine Mehrzweck-GPU), Mikroprozessoren, jede Prozessoreinheit, die entworfen wurde, um die Aufgaben außerhalb einer CPU, etc. zu beschleunigen, beinhalten. Der Fachmann erkennt, dass solche Verarbeitungsressourcen in vielen unterschiedlichen Vorrichtungen eingebaut werden und dadurch umfasst der Begriff ”Computer” Digitalempfänger, Mediaplayer, Digitalradios, PCs, Server, Mobiltelefone, persönliche digitale Assistenten und viele andere Vorrichtungen.
-
Fachleute werden erkennen, dass Speichervorrichtungen, die verwendet werden, um Programminstruktionen zu speichern, quer über ein Netz verteilt werden können. Beispielsweise kann ein entfernter Computer ein Beispiel des beschriebenen Prozesses als Software speichern. Ein lokaler oder Terminal-Computer kann auf den entfernten Computer zugreifen und einen Teil oder die gesamte Software herunterladen, um das Programm laufen zu lassen. Alternativ dazu kann der lokale Computer Softwarepakete nach Bedarf herunterladen, oder einige Software-Instruktionen am lokalen Terminal und einige am entfernten Computer (oder Computernetz) ausführen. Fachleute werden auch erkennen, dass unter Verwendung von herkömmlichen Techniken, die Fachleuten bekannt sind, alle oder ein Teil der Software-Instruktionen von einer dedizierten Schaltung, wie zum Beispiel einem DSP, einer programmierbaren Logikanordnung oder dergleichen, durchgeführt werden können.
-
Speicher, die maschinenausführbare Daten zur Verwendung bei der Implementierung offenbarter Aspekte speichern, können nicht-transitorische Medien sein. Nicht-transitorische Medien können flüchtig oder nicht-flüchtig sein. Beispiele flüchtiger nicht-transitorischer Medien umfassen Speicher auf Halbleiter-Basis, wie zum Beispiel SRAM oder DRAM. Beispiele von Technologien, die verwendet werden können, um nicht-flüchtige Speicher zu implementieren, beinhalten optische und magnetische Speichertechnologien, Flash-Speicher, Phasenänderungsspeicher, Widerstands-RAM.
-
Ein spezieller Verweis auf ”Logik” bezieht sich auf eine Struktur, welche eine Funktion oder Funktionen durchführt. Ein Beispiel einer Logik umfasst Schaltungen, die ausgelegt sind, diese Funktion(en) durchzuführen.
-
So kann eine solche Schaltung Transistoren und/oder andere Hardware-Elemente umfassen, die in einem Herstellungsprozess zur Verfügung stehen. Solche Transistoren und/oder andere Elemente können zur Bildung von Schaltungen oder Strukturen verwendet werden, die beispielsweise Speicher wie Register, Flip-Flop-Schaltungen oder Latches, logische Operatoren wie Boole'sche-Operationen, mathematische Operatoren wie Addierer, Multiplikatoren, oder Shifter implementieren und/oder enthalten und untereinander verbinden. Solche Elemente können als kundenspezifische Schaltungen oder standardisierte Zellbibliotheken, Makros oder auf anderen Abstraktionsebenen bereitgestellt sein. Solche Elemente können in einer speziellen Anordnung miteinander verbunden sein. Die Logik kann Schaltungen umfassen, die eine feststehende Funktion haben, und die Schaltungen können programmiert sein, um eine Funktion oder Funktionen durchführen; eine solche Programmierung kann von einem Aktualisierungs- oder Steuermechanismus für Firmware oder Software bereitgestellt werden. Logik, die für die Durchführung einer Funktion identifiziert wird, kann auch eine Logik umfassen, die eine Teilfunktion oder einen Unterprozess implementiert. In einem Beispiel weist diese Hardware-Logik Schaltungen auf, die eine feststehende Funktionsoperation oder Operationen, ein Zustandsgerät oder einen Zustandsprozess implementieren.
-
Jeder hier gegebene Bereich und jeder Vorrichtungswert können erweitert oder verändert werden, ohne dabei die angestrebte Wirkung zu verlieren, wie dies für eine Fachperson offensichtlich ist.
-
Es versteht sich, dass die oben beschriebenen Nutzen und Vorteile sich auf eine Ausführungsform beziehen können, oder sie können sich auf mehrere Ausführungsformen beziehen. Die Ausführungsformen sind nicht auf jene beschränkt, die einige oder alle der dargelegten Probleme lösen, oder die, die einen oder alle der angeführten Nutzen und Vorteile aufweisen.
-
Jeder Verweis auf ”ein” Element bezieht sich auf eines oder mehrere dieser Elemente. Der Begriff ”umfassend” wird hier verwendet, um die identifizierten Verfahrensblöcke oder -elemente zu beinhalten, jedoch umfassen solche Blöcke oder Elemente keine ausschließende Liste, und eine Vorrichtung kann zusätzliche Blöcke oder Elemente enthalten, und ein Verfahren kann zusätzliche Operationen oder Elemente enthalten. Ferner sind die Blöcke, Elemente und Operationen selbst nicht implizit abgeschlossen.
-
Die Schritte der hier beschriebenen Verfahren können in jeder beliebigen geeigneten Reihenfolge ausgeführt werden, oder simultan, sollte dies angemessen sein. Die Pfeile zwischen den Kästchen in den Figuren zeigen eine beispielhafte Abfolge von Verfahrensschritten, aber sie sollen nicht dazu dienen, andere Abfolgen oder die Ausführung mehrerer Schritte in paralleler Weise auszuschließen. Zusätzlich dazu können einzelne Blöcke aus jedem der Verfahren gelöscht werden, ohne dabei vom Wesen und Schutzbereich des hier beschriebenen Gegenstands abzuweichen. Aspekte beliebiger der oben beschriebenen Beispiele können mit Aspekten beliebiger anderer beschriebener Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne die gesuchte Wirkung zu verlieren. Sind die Elemente der Figuren durch Pfeile verbunden dargestellt, so ist zu verstehen, dass diese Pfeile nur einen beispielhaften Kommunikationsfluss (einschließend Daten und Steuernachrichten) zwischen den Elementen zeigen. Der Fluss zwischen den Elementen kann in eine der beiden Richtungen oder in beide Richtungen erfolgen.
-
Man versteht, dass die obige Beschreibung einer bevorzugten Ausführungsform nur beispielhaft ist und dass verschiedene Modifikationen von Fachleuten auf dem Gebiet der Technik ausgeführt werden können. Obwohl verschiedene Ausführungsformen oben mit einem gewissen Grad an Genauigkeit beschrieben wurden, oder mit Bezug auf eine oder mehrere einzelne Ausführungsformen, könnten Fachleute auf dem Gebiet der Technik zahlreiche Änderungen an den offenbarten Ausführungsformen vornehmen, ohne dabei vom Wesen oder Schutzbereich dieser Erfindung abzuweichen.