DE10393188T5 - Verarbeitung von Wiederholungs-String-Operationen - Google Patents
Verarbeitung von Wiederholungs-String-Operationen Download PDFInfo
- Publication number
- DE10393188T5 DE10393188T5 DE10393188T DE10393188T DE10393188T5 DE 10393188 T5 DE10393188 T5 DE 10393188T5 DE 10393188 T DE10393188 T DE 10393188T DE 10393188 T DE10393188 T DE 10393188T DE 10393188 T5 DE10393188 T5 DE 10393188T5
- Authority
- DE
- Germany
- Prior art keywords
- data location
- size
- iterations
- predetermined
- data
- 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.)
- Ceased
Links
- 230000003252 repetitive effect Effects 0.000 title claims abstract description 45
- 238000000034 method Methods 0.000 claims abstract description 98
- 230000015654 memory Effects 0.000 claims description 35
- 230000005540 biological transmission Effects 0.000 claims 3
- 230000008569 process Effects 0.000 description 61
- 238000004364 calculation method Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000001010 compromised effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000002406 microsurgery Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000001356 surgical procedure Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
Verfahren
zur Durchführung
von Wiederholungs-String-Operationen, wobei das Verfahren umfaßt:
Zugreifen auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße;
Ausrichten zumindest entweder eines Quelldatenorts oder Zieldatenorts auf einen ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich der Operandengröße ist; und
nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer größeren Größe als der Operandengröße verwenden.
Zugreifen auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße;
Ausrichten zumindest entweder eines Quelldatenorts oder Zieldatenorts auf einen ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich der Operandengröße ist; und
nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer größeren Größe als der Operandengröße verwenden.
Description
- Die im nachfolgenden erläuterten Implementierungen beziehen sich im allgemeinen auf Verarbeitungsoperationen in einer Rechenumgebung während sich bestimmte Implementierungen insbesondere auf eine Verarbeitung von Wiederholungs-String-Operationen beziehen.
- Prozessoren kann die Aufgabe übertragen werden, eine Operation, die auch als ein Befehl bezeichnet wird, mehrere Male aufeinanderfolgend auszuführen. Dies kann bei String-Operationen, wie beispielsweise einer Versetzungs-Operation der Fall sein, bei der Daten von einem Speicherort zu einem anderen Speicherort bewegt werden, oder einer Speicheroperation, bei der Daten von einem Register zu einem Speicherort bewegt werden. Eine Versetzungs-Operation kann mehrere Male wiederholt werden, um anstelle von lediglich einem einzelnen Datenelement einen gesamten Datenblock zu bewegen. Zur Initialisierung eines Datenblocks kann eine Speicherung wiederholt werden. Das REP-Präfix kann zusammen mit einem Befehl verwendet werden, um anzuzeigen, daß der Befehl mit einer bestimmten Anzahl von Wiederholungen wiederholt werden soll. Es besteht ein fortwährender Bedarf für neue und nützliche Arten, wiederholte Befehle auf effiziente Weise bezüglich des Zeitaufwands, Bedarfs an Prozessorressourcen oder jedes beliebigen anderen einer Vielzahl anderer Maßstäbe auszuführen.
- Beschreibung der Zeichnungen
-
1 ist ein Blockdiagramm eines Systems zur Durchführung einer offenbarten Wiederholungs-String-Operation. -
2 ist ein Ablaufdiagramm eines Verfahrens zur Durchführung kurzer Wiederholungs-String-Operationen. -
3 ist ein Ablaufdiagramm eines Verfahrens zur Durchführung von Wiederholungs-String-Operationen mit mittlerer Länge. -
4 ist ein Ablaufdiagramm eines Verfahrens zur Ausführung von Wiederholungen bei der Durchführung des Verfahrens aus3 . -
5 ist ein Ablaufdiagramm eines Verfahrens zur Durchführung langer Wiederholungs-String-Operationen. -
6 ,7 ,8A ,8B und9 sind Ablaufdiagramme von Verfahren zur Durchführung schneller Wiederholungs-String-Operation bei der Durchführung des Prozesses aus5 . -
10 ist ein Ablaufdiagramm eines Verfahrens einer parallelen Durchführung eines Overheads und einer Wiederholungs-String-Operation. - Detaillierte Beschreibung
- Bei verschiedenen Befehlsgruppen und Architekturen kann ein Wiederholungs-Präfix mit dem Zeichen REP bei einem bestimmten Befehl dazu verwendet werden, einen Prozessor dazu zu veranlassen, den Befehl mit einer gegebenen Anzahl von Wiederholungen (Iterationen) auszuführen. Beispiele umfassen REP MOVSB (Bewegen/Kopieren eines Strings aus Ein-Byte-Dateneinheiten), REP MOVSW (Bewegen/Kopieren eines Strings aus Zwei-Byte-Dateneinheiten), REP MOVSD (Bewegen/Kopieren eines Strings aus Vier-Byte-Dateneinheiten), REP STOSW (Speichern eines Strings aus Zwei-Byte-Dateneinheiten) und REP CMPSD (vergleichen eines Strings aus Vier-Byte-Dateneinheiten). Jede Wiederholung umfaßt typischerweise die Ausführung des Datentransfers und darauffolgend das Aktualisieren der Register, in welchen die Speicheradresse für die Daten gespeichert ist. Das REP-Präfix kann auch in Verbindung mit anderen Befehlen, wie beispielsweise LODS (Lade String) verwendet werden. Ein mit ECX bezeichnetes Register kann vorzugsweise zur Bestimmung der Zahl der Wiederholungen verwendet werden, die für eine bestimmte Wiederholungs-String-Operation ausgeführt werden müssen. Obwohl bei den beschriebenen Implementierungen das REP-Präfix verwendet wird, können andere Mechanismen zur Wiederholung eines Befehls verwendet werden und die beschriebenen Merkmale sind in gleicher Weise sind auf derartige andere Mechanismen anwendbar. In Zusammenhang mit einem Prozessor werden String-Operationen im allgemeinen unter Verwendung von Mikro-Operationen ausgeführt. Die Laufzeit einer Mikro-Operation in einem Prozessor umfaßt verschiedene Phasen. Eine Phase wird Ausgabe (issuance) genannt und eine darauffolgende Phase Ausführung (execution). Die Verzögerung und potentielle Leerlaufzeit zwischen Ausgabe und Ausführung kann zu einer herabgesetzten Leistungsfähigkeit eines Prozessors führen. Es ist einem Prozessor jedoch möglich, eine Mikro-Operation nach der Ausgabe der Mikro-Operation und vor der Ausführung zu annulieren. Dementsprechend wird die Anzahl der Wiederholungen, die von einer Wiederholungs-String-Operation angefordert werden, von einigen Prozessoren vor hergesagt und werden Wiederholungen basierend auf dieser Vorhersage ausgegeben. Diese Prozessoren können die nicht benötigen Wiederholungen zu einer späteren Zeitpunkt annullieren, bevor die nicht benötigten Wiederholungen ausgeführt werden. Jedoch kann eine fehlerhafte Vorhersage aufgrund der Notwendigkeit, die ausgegebenen Operationen zu annullieren, zusätzliche Verzögerungen mit sich bringen.
- Zur Verbesserung der Leistungsfähigkeit wird bei den im nachfolgenden erörterten Implementierungen der Versuch unternommen, entweder genaue Vorhersagen bezüglich der Zahl der Wiederholungen, die angefordert werden wird, zu machen oder sich darauf zu konzentrieren, genau die angeforderte Anzahl der Wiederholungen auszugeben. Verschiedene Implementierungen führen auch parallel zum Datentransfer Overhead-Berechnungen aus, um die Gesamtzeit zur Durchführung der Wiederholungs-String-Operationen zu reduzieren oder versuchen, die angeforderten Wiederholungs-String-Operationen durch Übertragen von Daten in größeren Blöcken, als dies mit dem Befehl verlangt wurde, schneller durchzuführen.
- Mit Bezugnahme auf
1 umfaßt ein System100 zur Durchführung einer Wiederholungs-String-Operation einen Computer110 mit einem Prozessor120 , einen Speicher130 und einen Bus135 , mit dem der Prozessor120 und der Speicher130 verbunden sind. Der Prozessor120 umfaßt elektronische Schaltkreise140 und einen Prozessorspeicher150 , die mittels eines Buses oder über eine andere (nicht gezeigte) Verbindung angeschlossen sein können. Das System100 umfaßt auch einen externen Speicher160 . Der Prozessor120 kann jeden der nachfolgend offenbarten Prozesse unter Verwendung der Elektronikschaltung140 und/oder des Prozessorspeichers150 durchführen. Des weiteren können im Speicher160 Befehle gespeichert werden, mit welchen der Computer zur Durchführung beliebiger der im nachfolgenden offenbarten Prozesse veranlaßt werden kann. Wahlweise ist der Rechner110 über einen Netzanschluß180 mit einem Netzrechner170 gekoppelt. - Kurze Wiederholungs-String-Operationen
-
2 zeigt einen Prozeß200 zur Durchführung kurzer Wiederholungs-String-Operationen (d.h. String-Operationen, die weniger als achtmal ausgeführt werden müssen). Jedoch kann der Prozeß200 auch String-Operationen ausführen, die nicht kurz sind. Am Anfang umfaßt der Prozeß eine Überprüfung bezüglich eines REP-Präfixes in einem Befehl (210 ). Falls dort kein REP-Präfix auftritt, muß dort keine Wiederholungs-String-Operation durchgeführt werden. - Falls dort ein REP-Präfix vorliegt, wird die Wiederholungs-String-Operation auf die Größe des Operanden (
22 ) überprüft. Der Prozeß200 wird nur fortgesetzt, falls die Operandengröße ein Byte beträgt, wie beispielsweise bei REP MOVSB (im Gegensatz zu MOVSW oder MOVSD). Dies liegt daran, daß der Prozeß200 auf Byte-Operationen zugeschnitten ist. Bei anderen Implementierungen kann der Prozeß200 für Wort-, Doppelwortoperanden oder Operanden mit anderer Länge verwendet werden. - Als nächstes werden drei Wiederholungen der String-Operation ausgegeben (230). Die gesammelten Daten geben an, daß zumindest 99% der REP MOVSB-Befehle bei bestimmten Implementierungen drei oder weniger Wiederholungen umfassen. Bei bestimmten Implementierungen wird der größte Teil des erforderlichen Speichertransfers unter Verwendung von Doppelworttransfers ausgeführt, woraus sich ein Rest von drei oder weniger zu übertragenden Bytes ergibt. Dieser Rest wird dann durch Byte-String-Operationen verarbeitet. Somit hat bei derartigen Implementierungen die überwiegende Mehrheit der Byte-String-Operationen eine ECX von weniger als oder von drei. Somit kann die Zahl drei als eine obere Grenze für die erwartete Zahl von Wiederholungen verwendet werden. Bei anderen Implementierungen kann beispielsweise jede beliebige Zahl von Anfangswiederholungen (z.B. acht) ausgegeben werden und die Bestimmung, wie viele Wiederholungen ausgegeben werden, kann auf einem oder mehreren beliebigen relevanten Faktoren basieren.
- Ob die tatsächliche Zahl der angeforderten Wiederholungen innerhalb der Vorhersage von drei oder weniger liegt, wird dann durch Überprüfen des ECX-Registers bestimmt (
240 ). Bei bestimmten Implementierungen wird das ECX-Register vor dem Ausgeben irgendeiner Wiederholung überprüft. - Falls die tatsächliche Zahl der Wiederholungen (ECX) niedriger oder gleich drei ist, werden die ausgegebenen Wiederholungen je nach Zweckmäßigkeit ausgeführt oder annulliert (
250 ). Insbesondere ist die Zahl der ausgeführten Wiederholungen gleich dem Wert im ECX-Register (ECX) und die Zahl der annullierten Wiederholungen gleich dem Wert im ECX-Register minus drei (3-ECX). Der Datentransfer ist dann abgeschlossen. - Falls die tatsächliche Zahl von Wiederholungen (ECX) größer als drei ist, werden die drei ausgegebenen Wiederholungen annulliert (
260 ) und es werden weitere acht Wiederholungen ausgegeben (270 ). Bei anderen Implementierungen kann, basierend auf beispielsweise für Vorhersagezwecke gesammelten Daten oder anderen Faktoren, jede beliebige Zahl von Wiederholungen ausgegeben werden. Bei weiteren Implementierungen werden die drei ausgegebenen Wiederholungen nicht annulliert. Statt dessen werden zusätzliche Wiederholungen, beispielsweise basierend auf dem Wert des ECX-Registers, ausgegeben. - Als nächstes wird der Wert des ECX-Registers überprüft, um festzustellen, ob er kleiner als acht ist (
275 ). Falls dies der Fall ist, werden die ausgegebenen Wiederholungen je nach Zweckmäßigkeit ausgeführt oder annulliert (280 ). Insbesondere werden ECX Wiederholungen ausgeführt und 8-ECX Wiederholungen annulliert. - Falls ECX nicht kleiner als acht ist, wird ECX überprüft, um festzustellen, ob es größer als acht ist (
285 ). Falls ECX größer als acht ist, wurden alle acht Wiederholungen, die bereits ausgegeben wurden, ausgeführt und es werden ECX-8 zusätzliche Wiederholungen ausgegeben und ausgeführt (290 ). Falls ECX nicht größer als acht ist, werden die acht ausgegebenen Wiederholungen ausgeführt (295 ). - Wiederholungs-String-Operationen mit mittlerer Länge
-
3 zeigt ein Ablaufdiagramm eines primär zur Durchführung von Wiederholungs-String-Operationen mit mittlerer Länge angepaßten Prozesses300 , wobei die Wiederholungs-String-Operationen, die zwischen acht und 64 Wiederholungen anfordern, als Wiederholungs-String-Operationen mit mittlerer Länge bezeichnet werden. Die Auswahl von „acht" und „64" ist für die beschriebene Implementierung spezifisch und die Bezeichnung mittlere Länge kann bei anderen Implementierungen variieren. Bei der beschriebenen Implementierung basiert die Auswahl von „acht" auf Latenzbetrachtungen und die Auswahl von „64" auf Leistungsbetrachtungen und gibt im allgemeinen den Punkt wieder, an dem der Algorithmus für schnelle Wiederholungs-String-Operationen (die im nachfolgenden beschrieben werden) bessere Leistungen zeigt als der Prozeß300 . Der Prozeß300 kann unabhängig von der Operandengröße verwendet werden und ist nicht auf Byte-Operanden beschränkt. Der Prozeß300 führt Wiederholungs-String-Operationen mit mittlerer Länge durch Ausgeben exakt der Anzahl der angeforderten Iterationen durch, was bedeutet, daß keine ausgegebenen Wiederholungen annulliert werden müssen. - Der Prozeß
300 umfaßt eine Ausgabe von acht Anfangswiederholungen (310 ). Der Wert von ECX wird überprüft, um zu bestimmen, ob ECX zwischen acht und einschließlich 64 liegt (320 ). ECX kann vor oder nach der Ausgabe der acht Wiederholungen überprüft werden. - Falls ECX zwischen acht und 64 liegt, werden die zu Anfang ausgegebenen acht Wiederholungen bzw. Iterationen ausgeführt (
330 ). Des weiteren werden ECX-8 zusätzliche Wiederholungen ausgegeben (340 ) und ausgeführt (350 ). Die im nachfolgenden erläuterte4 zeigt ein Ablaufdiagramm eines Prozesses400 zur Ausführung der zusätzlichen ECX-8 Zusatzwiederholungen. - Falls ECX nicht zwischen acht und 64 liegt, wird ein anderer Prozeß zur Fortsetzung der Durchführung der Wiederholungs-String-Operation aufgerufen (
360 ). Beispielsweise kann für kurze Wiederholungs-String-Operationen (d.h. weniger als acht Wiederholungen) der mit der Operation275 beginnende Prozeß200 verwendet werden. Für lange Wiederholungs-String-Operationen (d.h. mehr als 64 Wiederholungen) kann ein im nachfolgenden erläuterter Prozeß500 verwendet werden. - Die Prozesse
200 und300 oder Abwandlungen dieser können auf viele andere Arten zur Durchführung sowohl von kurzen Wiederholungs-String-Operationen als auch von Wiederholungs-String-Operationen mit mittlerer Länge kombiniert werden. Beispielsweise kann der Prozeß200 durch Ersetzen der Operation290 durch die Operationen320–350 aus dem Prozeß300 modifiziert werden. -
4 zeigt ein Ablaufdiagramm des Prozesses400 zur Ausführung der zusätzlichen ECX-8 Wiederholungen (Operation350 des Prozesses300 ). Der Prozeß400 bezieht sich auf eine spezielle Implementierung, bei der sowohl Hardware-Register als auch ein Mikro-Code verwendet werden. - Der Prozeß
400 umfaßt das Laden eines Schleifenzählerregisters mit dem Wert ECX-8 (410 ). Der Schleifenzähler ist ein abwärtszählender Zähler, der die Zahl der verbleibenden, auszugebenden und auszuführenden Wiederholungen verfolgt und wird als der Restwiederholungs zähler bezeichnet. Das Laden des Restwiederholungszählerregisters kann unter Verwendung eines Mikrocodes ausgeführt werden und das Restwiederholungszählerregister kann sich in einem Ausgabeabschnitt einer Mikrooperation befinden. - Ein als Wiederholungen-Erledigt-Zähler bezeichneter aufwärts/abwärts zählender Zähler wird mit Null initialisiert (
420 ). Die Initialisierung kann beispielsweise mittels einer Mikrooperation („uop") in Mikrocode ausgeführt werden. Der Wiederholungen-Erledigt-Zähler zählt entweder aufwärts oder abwärts, wobei der Absolutwert des Wiederholungen-Erledigt-Zählers die Zahl der abgeschlossenen Wiederholungen wiedergibt und der Wiederholungen-Erledigt-Zähler einmal pro. Wiederholung inkrementiert oder dekrementiert wird. Der Wiederholungen-Erledigt-Zähler wird inkrementiert, falls die Wiederholungs-String-Operation sich vorwärtsbewegt, d.h. auf progressiv höhere Speicheradressen als Quell- und/oder Zielorte zugreift. Der Wiederholungen-Erledigt-Zähler wird dekrementiert, falls sich die Wiederholungs-String-Operation rückwärts bewegt, d.h. auf progressiv niedrigere Speicheradressen als Quell- und/oder Zielorte zugreift. - Ein Speicheradress-Offset wird unter Verwendung des Wertes des Wiederholungen-Erledigt-Zählers und der Daten-/Einheitgröße des Operanden der Wiederholungs-String-Operation in Hardware berechnet (
430 ). Beispielsweise beträgt unter der Annahme, daß der Wiederholungen-Erledigt-Zähler einen Wert von 1 aufweist und der Operand ein Doppelwort ist (vier Bytes), der berechnete Adress-Offset vier. - Der Wert des Adress-Offsets wird in den Mikrocode zurückgegeben (
440 ). Der Offset wird dann vom Mikrocode zur Durchführung der nächsten Iteration der Wiederholungs-String-Operation verwendet (450 ). Insbesondere kann der Mikrocode den Offset zur Berechnung der Quell- und Zieladressen der nächsten Wiederholung verwenden. Bei typischen Implementierungen einer REP MOVS-Operation wird die Anfangsadresse des Quelldatenortes in einem mit ESI bezeichneten Register gespeichert und die Anfangsadresse des Datenzielortes in einem mit EDI bezeichneten Register. Der Offset wird vom Mikrocode zu ESI addiert, um den Ort zum Laden von Daten zu bestimmen und der Offset wird zu EDI addiert, um den Ort zum Speichern von Daten zu bestimmen. Bei diesem Beispiel wird angenommen, daß die Werte von ESI und EDI so angepaßt sind, daß den in der Operation330 des Prozesses300 am Anfang ausgeführten acht Wiederholungen Rechnung getragen wird. - Nach der Ausgabe jeder Wiederholung wird der Restwiederholungszähler dekrementiert (
460 ) und der Wiederholungen-Erledigt-Zähler entweder inkrementiert oder dekrementiert (470 ). Der Restwiederholungszähler wird dann überprüft, um festzustellen, ob sein Wert größer als Null ist, was anzeigt, daß die Ausgabe der Wiederholungs-String-Operation nicht abgeschlossen ist (480 ). Falls der Restwiederholungszähler größer als Null ist, springt der Prozeß400 zurück zur Operation430 . Ansonsten endet der Prozeß400 . Bei einer anderen Implementierung wird kein Restwiederholungszähler verwendet, sondern wird der absolute Wert des Wiederholungen-Erledigt-Zählers mit dem Wert von ECX-8 verglichen. - Bei einer weiteren Implementierung zur Durchführung von Wiederholungs-String-Operationen mit mittlerer Länge (und kurzen Wiederholungs-String-Operationen) wird nicht notwendigerweise exakt die angeforderte Zahl von Wiederholungen ausgegeben. Bei der Implementierung werden Wiederholungen in Gruppen von acht ausgegeben, wobei jene annulliert werden, die nicht benötigt werden. Somit werden für Anfragen von Null bis acht Wiederholungen von der Implementierung acht Wiederholungen, für Anfragen von neun bis sechzehn Wiederholungen sechzehn Wiederholungen (in zwei Gruppen von acht) usw. ausgegeben. Bei dieser Implementierung wird die durch Durchführung der Wiederholungen in Gruppen von acht erzielte Wirksamkeit vorteilhaft ausgenutzt.
- Lange Wiederholungs-String-Operation – Allgemeines
- In
5 ist ein Ablaufdiagramm eines Prozesses500 zur Durchführung von langen Wiederholungs-String-Operationen gezeigt. Eine lange Wiederholungs-String-Operation umfaßt Wiederholungs-String-Operationen, die mehr als 64 Wiederholungen erfordern. - Die Bezeichnung mit „kurz", „mittlerer Länge" und „lang" hängt vollkommen vom Wert von ECX ab und basiert somit auf der Zahl der angeforderten Wiederholungen. Es ist verständlich, daß beispielsweise bestimmte Wiederholungs-String-Operationen mit mittlerer Länge einen größeren Datentransfer umfassen können als bestimmte lange Wiederholungs-String-Operationen. Beispielsweise werden durch REP MOVSB mit ECX = 60 (mittlere Länge)
240 Datenbytes bewegt, wobei von REP MOVSB mit ECX = 65 (lang) lediglich 65 Datenbytes bewegt werden. Bei anderen Implementierungen wird bei der Bestimmung, wie die Wiederholungs-String-Operation zu bezeichnen und auszuführen ist, ein höheres Gewicht auf die Operandengröße gelegt. - Der Prozeß
500 umfaßt die Bestimmung, ob ECX größer als 64 ist (510 ). Falls ECX nicht größer als 64 ist, handelt es sich bei der Wiederholungs-String-Operation nicht um eine lange Wiederholungs-String-Operation. Dementsprechend wird ein Prozeß zur Durchführung kürzerer Wiederholungs-String-Operationen verwendet (520 ). Beispiele geeigneter Prozesse umfassen die oben erläuterten Prozesse200 und300 . - Falls ECX größer ist als 64, handelt es sich bei der Wiederholungs-String-Operation um eine lange Wiederholungs-String-Operation. Vom Prozeß
500 wird dann bestimmt, ob ESI und/oder EDI unter Verwendung kompatibler Operationen ausgerichtet werden können (530 ). - Kompatible Operationen betreffen Operationen, die beispielsweise String-Operationen und Wiederholungs-String-Operationen umfassen, die unter Verwendung einer Datengröße, bei der es sich um dieselbe Größe wie beim Operanden handelt, auf Daten wirken. Bei einem REP MOVSB-Befehl ist der Operand beispielsweise ein Byte und falls ECX = 32, würden die 32 Datenbytes von einer kompatiblen Operation mit einem Byte zu einem Zeitpunkt bewegt werden. In ähnlicher Weise ist der Operand bei einem REP MOVSB-Befehl ein Vier-Byte-Doppelwort und würden, falls ECX = 32, die 128 (32·4) Datenbytes mit vier Bytes zu einem Zeitpunkt bewegt werden.
- Im Gegensatz dazu wirkt eine schnelle Operation auf die Daten unter Verwendung einer größeren Datengröße als der Größe des Operanden. Falls es sich bei der schnellen Operation um eine String-Operation handelt, kann die schnelle Operation auch als eine schnelle String-Operation bezeichnet werden. Betrachtet man wiederum einen REP MOVSD-Befehl mit ECX = 32, könnten die 128 Byte mit acht Byte zu einem Zeitpunkt, 16 Byte zu einem Zeitpunkt oder irgendeiner anderen Zahl von mehr als vier zu einem Zeitpunkt von einer schnellen Operation bewegt werden. Schnelle Operationen sind im allgemeinen schneller als kompatible Operationen, da von den schnellen Operationen bei jedem Transfer mehr Daten bewegt werden können. Häufig ist es daher wünschenswert, insbesondere bei langen Wiederholungs-String-Operationen, schnelle Operationen zu verwenden. Die endgültigen String-Datenergebnisse im Speicher sollten unabhängig davon, ob schnelle Operationen oder kompatible Operationen verwendet werden, identisch sein.
- Für die höhere Geschwindigkeit ist jedoch aufgrund eines mit schnellen Operationen verbundenen Overheads ein Preis zu zahlen. Der Overhead-Aufwand wird durch die Entscheidung reflektiert, schnelle Operationen lediglich dann zu verwenden, wenn ECX > 64. Bei einigen Implementierungen werden schnelle Operationen aufgrund der verschiedenen Bedenken bezüglich des Overheads auch lediglich bei bestimmten Adressier-Modi verwendet, wie beispielsweise 32 Bit und nicht 16 Bit.
- Bei schnellen Operationen ist es häufig wünschenswert entweder die Quell- und/oder Zieldatenorte nach der Größe der zu bewegenden Daten auszurichten. Ein Speicherort ist auf eine bestimmte Datengröße ausgerichtet, falls die Adresse des Ortes durch diese Größe teilbar ist. Beispielsweise ist die Adresse
128 auf Datengrößen von 128, 64, 32, 16, 8, 4, 2 und 1 Byte ausgerichtet, jedoch nicht auf Datengrößen von beispielsweise 100 Byte oder 12 Byte. Bei diesem Beispiel kann die Adresse beispielsweise als auf 16 ausgerichtet bezeichnet werden. Schnelle Operationen können im allgemeinen ohne Ausrichtung einer Adresse ausgeführt werden, jedoch ist die Leistungsfähigkeit häufig beeinträchtigt, da Cache-Linienaufspaltungen beim Zugriff auf die Daten auftreten. Dementsprechend können die Speicheroperationen ohne Ausrichtung sogar leistungsfähiger sein, wenn sie lediglich mit kompatiblen Operationen ausgeführt werden. - Es ist nicht immer möglich, eine Adresse unter Verwendung von kompatiblen Operationen auszurichten. Beispielsweise kann EDI mit einem REP MOVSW-Befehl und EDI=3 mit kompatiblen Operationen nicht auf 16 ausgerichtet werden, weil EDI immer einen ungeraden Wert aufweist. In derartigen Fällen wird die lange Wiederholungs-String-Operation mit kompatiblen Operationen durchgeführt (
540 ). Im allgemeinen ist es jedoch möglich, falls ESI und/oder EDI auf die Operandengröße ausgerichtet sind, was als O-Größen-ausgerichtet bezeichnet wird, kompatible Operationen zur Ausrichtung der Adresse(n) auf 8 oder 16 zu verwenden. - Falls die Adresse mit einer oder mehreren kompatiblen Operationen ausgerichtet werden kann, werden zunächst eine oder mehrere kompatible Operationen zum Ausrichten entweder von EDI und/oder ESI durchgeführt (
550 ). Die Zahl der zur Ausrichtung einer Speicheradresse erforderlichen kompatiblen Operationen hängt von der Datengröße ab, mit der die Adresse ausgerichtet werden muß. Beispielsweise erfordert eine sich vorwärts bewegende REP MOVSB Wiederholungs-String-Operation mit EDI=6 zwei kompatible Operationen zur Aus richtung von EDI auf 8 und dann zehn kompatible Operationen zur Ausrichtung von EDI auf 16. - Nach dem Ausrichten zumindest einer Speicheradresse (
500 ) wird eine schnelle Operation mit dieser Adresse entweder in einer Vorwärts- oder Rückwärtsrichtung durchgeführt (560 ). Schnelle Operationen können so lange durchgeführt werden, bis die verbleibenden zu bearbeitenden Daten weniger sind als die Größe der schnellen Operation. Danach werden kompatible Operationen durchgeführt, bis die verbleibenden Daten verarbeitet sind (570 ). Unter der Annahme eines REP MOVSB-Befehls mit ECX=150 müssen beispielsweise 150 Byte bewegt werden. Wird des weiteren zunächst angenommen, daß mit der schnellen Operation 16 Byte bewegt werden können und daß die Speicheradressen beide auf 16 ausgerichtet sind, verbleiben nach neun schnellen Operationen sechs Bytes, die bewegt werden müssen. Da die verbleibenden sechs Bytes zu klein sind, um eine schnelle Operation zu verwenden, werden sechs kompatible Operationen (in diesem Beispiel Byte-Operationen) durchgeführt. - Lange Wiederholungs-String-Operationen – Implementierungen schneller Operationen
- In
6 ,7 ,8A und9 sind vier Ablaufdiagramme von Prozessen600 ,700 ,800 und900 zur Verwendung beim Prozeß500 gezeigt. Die Prozesse600 ,700 ,800 und900 dienen der Durchführung von schnellen Wiederholungs-String-Operationen, wie sie im Schritt560 des Prozesses500 genannt sind. - Unter Bezugnahme auf
6 kann der Prozeß600 zur Durchführung schneller Operationen verwendet werden, wenn sowohl ESI als auch EDI auf 16 ausgerichtet sind. Der Prozeß600 umfaßt das Laden von 16 Bytes aus ESI (610 ) und das Speichern von 16 Bytes in EDI (620 ). - Unter Bezugnahme auf
7 kann der Prozeß700 dazu verwendet werden, schnelle Operationen durchzuführen, wenn ESI auf acht ausgerichtet und EDI auf 16 ausgerichtet ist. Der Prozeß700 umfaßt das Laden von 8 Bytes aus ESI (710 ), das Vorrücken von ESI um acht (720 ) und das Laden von weiteren 8 Bytes aus ESI (730 ). Das Vorrücken umfaßt sowohl das Inkrementieren als auch Dekrementieren von ESI abhängig davon, ob die schnellen Operationen sich vorwärtsbewegende bzw. rückwärtsbewegende Operationen sind. Die beiden Gruppen von 8 Bytes werden miteinander verknüpft (740 ) und in EDI gespeichert (750 ). Das Ver knüpfen umfaßt die Verkettung der beiden Gruppen von 8 Byte zur Wiederspiegelung der 16 Byte im ursprünglichen Wert von ESI. - Unter Bezugnahme auf
8A kann der Prozeß800 zur Durchführung schneller Operationen verwendet werden, wenn EDI auf 16 ausgerichtet ist und ESI nicht auf 16 ausgerichtet ist. Der Prozeß kann beispielsweise auch dann verwendet werden, wenn ESI nicht auf 8 ausgerichtet ist. Im allgemeinen werden vom Prozeß800 zwei Datengruppen mit 16 Bytes aus auf 16 ausgerichteten Orten geladen, die ESI umklammern, und die beiden Datengruppen verknüpft bzw. verbunden, um die gewünschten 16 Byte zu erhalten. - Insbesondere wird sowohl ein niedrig ausgerichteter Ort für ESI (
810 ) als auch ein hoch ausgerichteter Ort für ESI (820 ) bestimmt. Der niedrig ausgerichtete Ort für ESI ist der nächstgelegene auf 16 ausgerichtete Ort, der sich niedriger im Speicher befindet. Der höher ausgerichtete Ort für ESI ist der nächstgelegene auf 16 ausgerichtete Ort, der sich höher im Speicher befindet. - Als nächstes werden 16 Bit vom niedrig ausgerichteten Ort (
830 ) und 16 Byte vom hoch ausgerichteten Ort (840 ) geladen. Die beiden Datengruppen mit 16 Byte werden dann verbunden, um 16 Byte entsprechend zu ESI zu erhalten (850 ). Bei diesem Beispiel kann ein Verbinden ein Extrahieren der relevanten Daten in jeder der 16 Byte-Datengruppen beispielsweise durch Maskieren der beiden Datengruppen und dann Verknüpfen der maskierten Datengruppen umfassen. Die ESI entsprechenden 16 Bytes werden dann in EDI gespeichert (860 ). - Der Prozeß
800 kann auch mit Bezugnahme auf einen Speicher (870 ) in8B erläutert werden. Der Speicher870 zeigt ESI von einem hoch ausgerichteten Ort und einem niedrig ausgerichteten Ort umklammert. Falls sich die Wiederholungs-String-Operation vorwärtsbewegt, müssen die mit FWD-DATA markierten Daten in EDI gespeichert werden. Dementsprechend müssen Datengruppen B und A geladen und verbunden werden. Falls sich die Wiederholungs-String-Operation rückwärtsbewegt, müssen die als BACK-DATA markierten Daten in EDI gespeichert werden. Dementsprechend müssen die Datengruppen B und C geladen und verbunden werden. - Bei anderen Implementierungen müssen die Ladungen von den niedrig und hoch ausgerichteten Orten nicht 16 Byte (beziehungsweise wie groß die Ausricht-Größe auch immer ist) und sogar nicht einmal dieselbe Anzahl von Bytes umfassen. Beispielsweise können mit der niedrig ausgerichteten Ladung Daten mit einer ersten vorbestimmten Größe geladen werden, mit der hoch ausgerichteten Ladung Daten mit einer zweiten vorbestimmten Größe geladen werden und die verbundenen Daten eine dritte vorbestimmte Größe aufweisen. Bei diesem Beispiel können sich die erste, zweite und dritte vorbestimmte Größe voneinander und von der Ausricht-Größe unterscheiden.
- Jedoch wird bei bestimmten Implementierungen die Leistungsfähigkeit durch Einstellen sowohl der ersten, zweiten als auch dritten vorbestimmten Größe auf die Ausricht-Größe erzielt. Des weiteren ist es möglich, daß der niedrig ausgerichtete und hoch ausgerichtete Ort identisch sind, wenn beispielsweise ESI auf 16 ausgerichtet ist.
- Mit Bezugnahme auf
9 kann ein Prozeß900 dazu verwendet werden, schnelle Operationen durchzuführen, wenn sowohl EDI als auch ESI auf acht ausgerichtet sind. Der Prozeß900 kann beispielsweise auch verwendet werden, wenn sowohl EDI als auch ESI auf 8 ausgerichtet ist, jedoch weder EDI noch ESI auf 16 ausgerichtet ist. Der Prozeß900 umfaßt das Laden von 8 Byte von ESI (910 ) und das Speichern der 8 geladenen Bytes in EDI (920 ). - Bei Implementierungen können einer oder mehrere der Prozesse
600 ,700 ,800 und900 zur Durchführung schneller Operationen verwendet werden. Beispielsweise kann ein Algorithmus in Mikrocode geschrieben werden, mit dem die Möglichkeiten zur Ausrichtung ermittelt werden und einer der Prozesse600 ,700 ,800 und900 zur Ausführung gewählt wird. Fälle, die den Ausrichtungserfordernissen eines der Prozesse600 ,700 ,800 und900 nicht genügen, können im allgemeinen unter Verwendung kompatibler String-Operationen ausgeführt werden. - Zusätzliche Probleme bei der Implementierung können daraus resultieren, daß anstelle der durch den Befehl definierten kompatiblen Operation eine schnelle Operation verwendet wird. Es ist verständlich, daß durch die Durchführung unterschiedlicher Operationen, d.h. durch das Durchführen einer schnellen Operation anstelle einer kompatiblen Operation, der Status der Maschine bzw. des Rechners nicht zu allen Zeitpunkten während der schnellen Operation derselbe sein könnte, der er während der kompatiblen Operation wäre. Jedoch können verschiedene Techniken beim Versuch, den Zustand der Maschine bzw. des Rechners beizubehalten, der sich bei der Ausführung kompatibler Operationen ergeben hätte, verwendet wer den, wodurch die Verwendung schneller Operationen für ein Programm transparent wird. Die Bewahrung des Zustands kann beispielsweise das Beibehalten derselben Ergebnisse im Speicher wie bei kompatiblen Operationen umfassen und das Auslösen derselben Fehlerbedingungen. Diese werden nachfolgend erörtert:
Beim ersten, oben genannten Beispiel werden dieselben Ergebnisse im Speicher gelassen. Einen Aspekt, den dies bei einer Kopieroperation mit sich bringt, besteht darin, daß ein Überschreiben der Quelldaten vor. einer Verwendung der Quelldaten vermieden wird. Da bei der angeforderten Wiederholungs-String-Operation nicht notwendigerweise die Verwendung einer schnellen Operation anstelle der spezifizierten kompatiblen Operationen in Betracht gezogen wurde, kann eine unzureichende Trennung zwischen den Quell- und Zielorten bestehen. - Die Vermeidung eines Überschreibens kann auf eine Vielzahl von Arten berücksichtigt werden, wie beispielsweise dadurch, daß eine minimale Trennung zwischen ESI und EDI erforderlich ist, oder daß Werte an temporären Orten gespeichert werden. Bei einer Implementierung, bei der schnelle 16 Byte-Operationen verwendet werden, ist es erforderlich, daß EDI und ESI nicht zwischen ein und 15 Byte voneinander sind.
- In ähnlicher Weise kann im Gegensatz zu linearen Adressen ein Überschreiben auch ein Problem über Seitengrenzen darstellen. Die Seiten-Offsets für die Quell- und Zieldaten können verglichen werden, um sicherzustellen, daß kein Überschreiben erfolgt, falls sich die Quelle und die Daten auf derselben Seite oder auf aneinanderangrenzenden Seiten befinden. Bei einer Implementierung werden schnelle Transfers von 16 Byte vermieden, falls der Zielseiten-Offset vor dem Quellseiten-Offset weniger als 16 Byte beträgt. Diese Implementierung erlaubt auch die Möglichkeit, daß die Zielseite gleich der Quellseite plus 1 sein kann, während der Zielseiten-Offset nahe bei 0 ist und der Quellseiten-Offset nahe an der oberen Grenze, wie beispielsweise 4 KByte. In einem derartigen Fall wird durch die Implementierung dennoch sichergestellt, daß die Zielseite zuzüglich dem Offset zumindest 16 Bytes vor der Quellseite zuzüglich dem Offset liegt.
- Beim zweiten oben genannten Beispiel wird der Versuch unternommen, dieselben Fehlerbedingungen, die kompatible Operationen ausgelöst hätten, bei schnellen Operationen auszulösen. Beispiele umfassen Segmentierungs- und Schutzfehler, Ausrichtungsausnahmen oder Seitenwechsel (paging)-Verletzungen. Eine Technik, um die Auslösung derselben Fehler zu unterstützen besteht darin, auf genau dieselben Speicherorte zuzugreifen, auf die mit kompatiblen Operationen zugegriffen worden wäre. Dadurch kann die Möglichkeit, eine unrichtige oder unerwartete Ausnahme (exception) zu empfangen, die anzeigt, daß auf ein Segment oder eine Seite nicht zugegriffen werden kann, beseitigt werden.
- Um derartige Zugriffe zu vermeiden, können für ein Minimum von 16 Byte (unter der Annahme einer Implementierung, die eine auf 16 ausgerichtete Adresse erfordert und 16 Byte-Transfers verwendet) kompatible Operationen durchgeführt werden sowie beliebige zusätzliche kompatible Operationen, die erforderlich sind, um die Adresse auf 16 auszurichten. Des weiteren können kompatible Operationen am Ende der schnellen Operationen für zumindest 16 Byte durchgeführt werden. Auf diese Weise wird bei Zugriffen auf die Quelle, falls der Prozeß
800 verwendet wird, nicht auf Speicherorte außerhalb der beabsichtigten Quelldaten zugegriffen. - Man beachte, daß durch den Zugriff auf größere Mengen von Daten zu einem Zeitpunkt, d.h. beispielsweise auf 16 Byte anstelle von auf eines (bei Annahme eines Byte-Operanden), dieselben Austest-(Debugging-) und Befehlseinfang-(instruction trapping)-kapazitäten möglicherweise nicht verfügbar sind. Beispielsweise könnte es möglich sein, daß der Zustand nicht nach jedem Byte-Transfer überprüft werden kann.
- Für verschiedene Implementierungen kann es notwendig sein, zusätzlich Problemstellungen anzusprechen. Ein Beispiel besteht darin, daß es für einen Prozessor notwendig sein kann, zu verhindern, daß sich die Quelldatenorte und die Zieldatenorte überkreuzen oder um das Ende des unterstützten Adressraums umbrechen (wrap).
- Overhead-Berechnung
-
10 zeigt ein Ablaufdiagramm eines Prozesses1000 zur parallelen Durchführung eines Overheads und einer Wiederholungs-String-Operation. Der Durchführung einer Wiederholungs-String-Operation zugeordneter Overhead umfaßt das Aktualisieren der drei Register ECX, EDI und ESI, was das Durchführen verschiedener, zur Bestimmung der Aktualisierungswerte notwendiger Berechnungen umfaßt. Diese Berechnungen umfassen ganzzahlige Registeroperationen, die viele Prozessoren parallel zu den zur Durchführung der Wiederholungs-String-Operationen verwendeten Speicheroperationen durchführen können. - Der Prozeß
1000 umfaßt das Ausführen angeforderter Wiederholungs-String-Iterationen (1010 ). Die Werte von ECX, EDI und ESI können wahlweise gespeichert werden, um sie für einen Zugriff während der Ausführung der angeforderten Wiederholungs-String-Iterationen zu erhalten (1020 ). Als nächstes werden zur Aktualisierung von ECX, EDI und ESI notwendige Berechnungen parallel zur Ausführung der angeforderten Wiederholungs-String-Iterationen durchgeführt (1030 ). Schließlich werden ECX, EDI und ESI parallel mit der Ausfühung der angeforderten Wiederholungs-String-Iterationen wahlweise aktualisiert (1040 ). Der Prozeß1000 läßt eine Verwendung von Leerlaufkapazitäten eines Prozessors zu und vermeidet zumindest einen Teil der sich ergebenden Verzögerung, falls der Overhead bis nach der Ausführung der Iterationen nicht begonnen worden wäre. - Zusätzliche Implementierungen
- Wieder mit Bezugnahme auf
1 kann der Prozessor120 unter Verwendung einer Struktur oder einer Vorrichtung implementiert sein, die zur Befehlsausführung geeignet sind. Beispiele umfassen einen Mikroprozessor, einen Kontroller oder eine Logikvorrichtung. Die verschiedenen Speicher130 ,150 ,160 , die auch als Speichermedien bezeichnet werden, können mit Hilfe einer Struktur oder einer Vorrichtung zur zumindest temporären Datenspeicherung implementiert sein. Beispiele umfassen ein Register, einen Direktzugriffsspeicher („RAM"), einen Nur-Lese-Speicher („ROM") und eine Floppy-Disk. Die Elektronikschaltung140 kann mit Hilfe einer geeigneten Struktur oder Vorrichtung implementiert sein, die zur Durchführung einer Funktion konfiguriert werden kann. Beispiele umfassen eine integrierte Schaltung. Der Computer110 kann mit Hilfe einer Struktur oder einer Vorrichtung implementiert sein, die die in1 angegebenen Elemente umfaßt. Beispiele umfassen einen allgemein verwendbaren Computer, wie beispielsweise einen Personalcomputer, einen zweckgebundenen Computer, einen Personal Digital Assistent („PDA"), einen elektronischen Organizer, eine elektronische Spielvorrichtung, ein Mobiltelefon, eine Paging (Seitenauswahl)-Vorrichtung oder eine Fernsteuerung. Der Netzcomputer170 kann auf die oben bezüglich des Computers110 beschriebenen Arten implementiert sein. Die Netzverbindung180 kann eine Vielzahl von Verbindungen, wie beispielsweise eine Kabelverbindung, eine drahtlose Verbindung, eine Lokalbereichsnetzverbindung und eine weiträumige Netzverbindung umfassen. - Spezielle Implementierungen können Gebrauch von Schaltungen zur Durchführung einer oder mehrerer der offenbarten Prozesse machen. Derartige Schaltungen können beispielsweise einen Speicher, einen Prozessor mit oder ohne Mikrocodeteil oder Hardwareteil, einen Mikrocodeteil eines Prozessors, einen Hardwareteil eines Prozessors, einen Kontroller, eine Logikvorrichtung, eine analoge oder digitale Schaltung oder einen Chip oder eine andere integrierte Schaltung umfassen. Beispielsweise können einer oder mehrere der offenbarten Prozesse mit Hilfe eines Prozessors, der als Mikrocode im Prozessor gespeicherte Befehle ausführt oder mit Hilfe von Hardware in einem Prozessor einschließlich beispielsweise eines Hardwaresequenzers, der eine Hardwarezustandsmaschine steuert, implementiert sein. Prozesse können auch in beispielsweise in Software oder Mikrocode ablaufenden Zustandsmaschinen implementiert sein.
- Die offenbaren Prozesse können im allgemeinen auf Befehle angewandt werden, die verschiedene Datenspeicherorte verwenden. Beispiele von Datenspeicherorten umfassen Prozessorregister, sonstige Prozessorspeicher, sonstige Computerspeicher und externe Speicher.
- Es wurde eine Anzahl von Implementierungen beschrieben. Beispielsweise können Implementierungen auf einen selbstständigen Rechner beschränkt sein oder einen Rechner umfassen, der mit einem anderen Rechner vernetzt ist. Dennoch ist verständlich, daß verschiedene Abwandlungen vorgenommen werden können. Dementsprechend befinden sich auch andere Implementierungen innerhalb des Umfangs der folgenden Ansprüche.
- Zusammenfassung
- Das Durchführen von Wiederholungs-String-Operationen kann das Ausrichten eines Quelldatenortes oder Zieldatenortes mit einem Ort umfassen, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten das Durchführen einer String-Operation umfaßt, die Daten mit einer Größe verwendet, die gleich der Operandengröße ist. Nach dem Ausrichten kann eine String-Operation durchgeführt werden, die Daten mit einer größeren Größe als der Operandengröße verwendet. Das Durchführen von Wiederholungs-String-Operationen kann das Ausgeben einer ersten vorbestimmten Zahl von Iterationen umfassen, falls eine Operandengröße eine vorbestimmte Größe ist, und das Ausgeben einer zweiten vorbestimmten Zahl von Iterationen ansonsten. Das Durchführen von Wiederholungs-String-Operationen kann ein Bestimmen, daß eine angeforderte Zahl von Iterationen in einer Wiederholungs-String-Operation innerhalb eines vorbestimmten Mehrzahlenbereichs liegt und das Ausgeben genau der angeforderten Zahl von Iterationen für jeden beliebigen Wert der angeforderten Zahl in diesem Bereich umfassen.
Claims (38)
- Verfahren zur Durchführung von Wiederholungs-String-Operationen, wobei das Verfahren umfaßt: Zugreifen auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten zumindest entweder eines Quelldatenorts oder Zieldatenorts auf einen ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich der Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer größeren Größe als der Operandengröße verwenden.
- Verfahren nach Anspruch 1, das des weiteren ein Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes auf ausgerichtete Orte umfaßt, die durch eine vorbestimmte ganze Zahl teilbar sind, wobei das Durchführen der einen oder mehreren String-Operationen zum Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes führt.
- Verfahren nach Anspruch 2, wobei die ausgerichteten Orte Bytes wiedergeben, die vorbestimmte ganze Zahl gleich 8 ist, und das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden von Daten mit einer Größe von 8 Byte vom Quelldatenort; und Speichern der geladenen Daten mit der Größe von 8 Byte am Zieldatenort.
- Verfahren nach Anspruch 2, wobei die ausgerichteten Orte Bytes wiedergeben, die vorbestimmte ganze Zahl gleich 16 ist und das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden von Daten mit einer Größe von 16 Byte vom Quelldatenort; und Speichern der geladenen Daten mit der Größe von 16 Byte am Zieldatenort.
- Verfahren nach Anspruch 1, wobei nur entweder der Quelldatenort oder der Zieldatenort mit einem ausgerichteten Ort ausgerichtet ist, der durch eine vorbestimmte ganze Zahl teilbar ist.
- Verfahren nach Anspruch 5, wobei nur der Zieldatenort mit einem ausgerichteten Ort ausgerichtet ist, der durch die vorbestimmte Zahl teilbar ist.
- Verfahren nach Anspruch 6, wobei der ausgerichtete Ort Bytes wiedergibt, die vorbestimmte ganze Zahl gleich 16 ist, der Quelldatenort mit einem ausgerichteten Ort ausgerichtet ist, der durch 8 teilbar ist und das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer Größe von 8 Byte vom Quelldatenort; Vorschieben des Quelldatenortes um 8 Byte; Laden einer zweiten Datengruppe mit einer Größe von 8 Byte vom Quelldatenort; Verknüpfen der ersten und zweiten Datengruppe in eine 16-Byte-Datengruppe; Speichern der 16-Byte-Datengruppe am Zieldatenort.
- Verfahren nach Anspruch 6, wobei der ausgerichtete Ort Bytes wiedergibt, die vorbestimmte ganze Zahl gleich 16 ist und das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer Größe von 16 Byte von einem nächstgelegenen ausgerichteten Datenort, der durch 16 teilbar ist und sich am oder unterhalb des Quelldatenortes befindet; Laden einer zweiten Gruppe von Daten mit einer Größe von 16 Byte von einem nächstgelegenen ausgerichteten Datenort, der durch 16 teilbar ist und sich am oder oberhalb des Quelldatenortes befindet; Verknüpfen der ersten und zweiten Datengruppe zu einer verknüpften 16 Byte-Datengruppe entsprechend Daten am Quelldatenort; und Speichern der verknüpften 16 Byte-Datengruppe am Zieldatenort.
- Verfahren nach Anspruch 1, wobei das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer ersten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder unterhalb des Quelldatenortes befindet; Laden einer zweiten Datengruppe mit einer zweiten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder oberhalb des Quelldatenortes befindet; Verknüpfen der ersten und zweiten Datengruppe in eine verknüpfte Datengruppe mit einer dritten vorbestimmten Größe und entsprechend Daten am Quelldatenort; und Speichern der verknüpften Datengruppe am Zieldatenort.
- Verfahren nach Anspruch 1, wobei der ausgerichtete Ort Bytes wiedergibt und die vorbestimmte ganze Zahl gleich einer Zahl von Bytes mit einer Größe ist, die größer als die Operandengröße ist.
- Verfahren nach Anspruch 1, wobei der ausgerichtete Ort Bytes wiedergibt und die vorbestimmte ganze Zahl aus der Gruppe bestehend aus 8 und 16 gewählt wird.
- Verfahren nach Anspruch 1, wobei das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten ein Vorwärtsbewegen umfaßt.
- Verfahren nach Anspruch 1, wobei Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten ein Rückwärtsbewegen umfaßt.
- Verfahren nach Anspruch 1, wobei das Verfahren mittels eines Prozessors durchgeführt wird.
- Artikel umfassend ein Speichermedium mit darauf gespeicherten Befehlen, die beim Ausführen durch einen Rechner zumindest zum folgenden führen: Zugriff auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten zumindest entweder eines Quelldatenorts oder eines Zieldatenorts mit einem ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich einer Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer Größe verwenden, die größer als die Operandengröße ist.
- Artikel nach Anspruch 15, wobei die Befehle, wenn sie von einem Rechner ausgeführt werden, zum Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes auf ausgerichtete Orte führen, die durch die vorbestimmte ganze Zahl teilbar sind, wobei das Durchführen der einen oder mehreren String-Operationen zum Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes führt.
- Artikel nach Anspruch 15, wobei das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer ersten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder unterhalb des Quelldatenortes befindet; Laden einer zweiten Datengruppe mit einer zweiten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder oberhalb des Quelldatenortes befindet; Verknüpfen der ersten und zweiten Datengruppe zu einer verknüpften Datengruppe mit einer dritten vorbestimmten Größe und entsprechend Daten am Quelldatenort; und Speichern der verknüpften Datengruppe am Zieldatenort.
- Vorrichtung zur Durchführung von Wiederholungs-String-Operationen, wobei die Vorrichtung Schaltungen zur Durchführung zumindest der folgenden Operationen umfaßt: Zugreifen auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten zumindest entweder eines Quelldatenorts oder eines Zieldatenorts mit einem ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich einer Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die größer als die Operandengröße ist.
- Vorrichtung nach Anspruch 18, wobei die Schaltung sowohl den Quelldatenort als auch den Zieldatenort mit ausgerichteten Orten ausrichtet, die durch die vorbestimmte ganze Zahl teilbar sind, wobei das Durchführen der einen oder mehreren String-Operationen zum Ausrichten sowohl des Quelldatenortes als auch des Zieldatenortes führt.
- Vorrichtung nach Anspruch 18, wobei das Durchführen einer oder mehrerer String-Operationen nach dem Ausrichten umfaßt: Laden einer ersten Datengruppe mit einer ersten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte Zahl teilbar ist und sich am oder unterhalb des Quelldatenortes befindet; Laden einer zweiten Datengruppe mit einer zweiten vorbestimmten Größe von einem nächstgelegenen ausgerichteten Datenort, der durch die vorbestimmte ganze Zahl teilbar ist und sich am oder oberhalb des Quelldatenortes befindet; Verknüpfen der ersten und zweiten Datengruppe in eine verknüpfte Datengruppe mit einer dritten vorbestimmten Größe und entsprechend Daten am Quelldatenort; und Speichern der verknüpften Datengruppe am Datenzielort.
- Vorrichtung nach Anspruch 18, wobei die Schaltung einen Speicher mit darin gespeicherten Befehlen umfaßt, um zumindest eine der folgenden Operationen durchzuführen: Zugreifen auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten zumindest entweder eines Quelldatenorts oder eines Zieldatenorts mit einem ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operation umfaßt, die Daten mit einer Größe verwenden, die gleich einer Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer Größe verwenden, die größer als die Operandengröße ist.
- Vorrichtung nach Anspruch 18, wobei die Schaltung einen Prozessor zur Durchführung von zumindest einer der folgenden Operationen umfaßt. Zugriff auf eine Anforderung einer Wiederholungs-String-Operation mit einer Operandengröße; Ausrichten von zumindest entweder eines Quelldatenorts oder eines Zieldatenorts mit einem ausgerichteten Ort, der durch eine vorbestimmte ganze Zahl teilbar ist, wobei das Ausrichten ein Durchführen einer oder mehrerer String-Operationen umfaßt, die Daten mit einer Größe verwenden, die gleich einer Operandengröße ist; und nach dem Ausrichten Durchführen einer oder mehrerer String-Operationen, die Daten mit einer Größe verwenden, die größer als die Operandengröße ist.
- Vorrichtung nach Anspruch 18, wobei die Schaltung umfaßt: einen Speicher; einen Prozessor; und einen den Speicher und den Prozessor verbindenden Bus.
- Verfahren zur Durchführung von Wiederholungs-String-Operationen, wobei das Verfahren umfaßt: Bestimmen einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgeben einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgeben einer zweiten vorbestimmten Zahl von Iterationen.
- Verfahren nach Anspruch 24, wobei die erste vorbestimmte Zahl von Iterationen basierend auf einer Vorhersage einer angeforderten Zahl von Iterationen für Wiederholungs-Byte-String-Operationen ausgewählt ist.
- Verfahren nach Anspruch 24, wobei die erste vorbestimmte Zahl von Iterationen 3 ist, die zweite vorbestimmte Zahl von Iterationen 8 ist, die vorbestimmte Größe ein Byte ist und 8 Iterationen für Operandengrößen eines Ortes oder Doppelwortes ausgegeben werden.
- Verfahren nach Anspruch 24, das des weiteren umfaßt: Bestimmen, daß eine angeforderte Zahl von Iterationen der Wiederholungs-String-Operation größer ist als die vorbestimmte Zahl ausgegebener Iterationen, bei der es sich entweder um die erste vorbestimmte Zahl oder die zweite vorbestimmte Zahl handelt; und Ausgeben zusätzlicher Iterationen je nach Notwendigkeit, so daß genau die angeforderte Zahl von Iterationen der Wiederholungs-String-Operation ausgegeben wird.
- Verfahren nach Anspruch 27, wobei das Bestimmen, daß die angeforderte Zahl von Iterationen größer ist als die vorbestimmte Zahl, vor einem Ausgeben der vorbestimmten Zahl von Iterationen durchgeführt wird.
- Verfahren nach Anspruch 27, wobei das Bestimmen, daß die angeforderte Zahl von Iterationen größer ist als die vorbestimmte Zahl, nach einem Ausgeben der vorbestimmten Zahl von Iterationen durchgeführt wird.
- Verfahren zur Durchführung von Wiederholungs-String-Operationen, wobei die Vorrichtung eine Schaltung zur Durchführung von zumindest den folgenden Operationen umfaßt: Bestimmen einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgeben einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgeben einer zweiten vorbestimmten Zahl von Iterationen.
- Vorrichtung nach Anspruch 30, wobei die Schaltung einen Speicher mit darin gespeicherten Befehlen zur Durchführung zumindest einer der folgenden Operationen umfaßt: Bestimmung einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgabe einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgabe einer zweiten vorbestimmten Zahl von Iterationen.
- Vorrichtung nach Anspruch 30, wobei die Schaltung einen Prozessor zur Durchführung von zumindest einer der folgenden Operationen umfaßt: Bestimmung einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgabe einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgabe einer zweiten vorbestimmten Zahl von Iterationen.
- Vorrichtung nach Anspruch 30, wobei die Schaltung zur Durchführung zumindest der folgenden weiteren Operation betrieben werden kann: Bestimmung, daß eine angeforderte Zahl von Iterationen der Wiederholungs-String-Operation größer als die vorbestimmte Zahl ausgegebener Iterationen ist, bei der es sich entweder um die erste oder die zweite vorbestimmte Zahl handelt; und Ausgabe zusätzlicher Iterationen je nach Notwendigkeit, so daß genau die angeforderte Zahl von Iterationen der Wiederholungs-String-Operation ausgegeben wird.
- Artikel, umfassend ein Speichermedium mit darauf gespeicherten Befehlen, die bei einer Ausführung durch einen Rechner zumindest zum folgenden führen: Bestimmen einer Operandengröße, die einer Wiederholungs-String-Operation zugeordnet ist; Ausgabe einer ersten vorbestimmten Zahl von Iterationen, falls die Operandengröße eine vorbestimmte Größe ist; und ansonsten Ausgabe einer zweiten vorbestimmten Zahl von Iterationen.
- Artikel nach Anspruch 34, wobei das Speichermedium darauf gespeicherte Befehle umfaßt, die wenn sie von einem Rechner ausgeführt werden, zumindest zu den weiteren Operationen führen: Bestimmen, daß eine vorbestimmte Zahl von Iterationen der Wiederholungs-String-Operation größer ist als die vorbestimmte Zahl ausgegebener Iterationen ist, bei der es sich entweder um die erste oder zweite vorbestimmte Zahl handelt; und Ausgabe zusätzlicher Iterationen je nach Notwendigkeit, so daß genau die angeforderte Zahl von Iterationen der Wiederholungs-String-Operation ausgegeben wird.
- Verfahren zur Durchführung von Wiederholungs-String-Operationen, wobei das Verfahren umfaßt: exaktes Ausgeben einer angeforderten Zahl von Iterationen für eine Wiederholungs-String-Operation; und Ausführen der angeforderten Zahl von Iterationen der String-Operation, wobei die String-Operation zur Übertragung von Daten mit einer spezifischen Byte-Länge vorgesehen ist, wobei das Ausführen umfaßt: Verwenden eines Hardwarezählers zur Speicherung eines zur Identifizierung sowohl eines Quelldatenortes als auch eines Zieldatenortes verwendeten Iterationswertes; Multiplizieren durch Hardware des in einem Hardwarezähler gespeicherten Iterationswertes mit der spezifischen Byte-Länge zur Bestimmung eines tatsächlichen Speicheradressoffsets des Quelldatenortes und des Zieldatenortes; Ändern des im Hardwarezähler gespeicherten Iterationswerts um 1 nach jeder Iteration; und Zuführen des tatsächlichen Speicheradressoffsets zu einem Mikrocode.
- Vorrichtung zur Durchführung von Wiederholungs-String-Operationen, wobei die Vorrichtung eine Schaltung zur Durchführung zumindest der folgenden Operationen umfaßt: exaktes Ausgeben einer angeforderten Zahl von Iterationen für eine Wiederholungs-String-Operation; und Ausführen der angeforderten Zahl der Iterationen der String-Operation, wobei die String-Operation zur Übertragung von Daten mit einer spezifischen Byte-Länge vorgesehen ist, wobei das Ausführen umfaßt: Verwenden eines Hardwarezählers zur Speicherung eines zur Identifizierung sowohl eines Quelldatenortes als auch eines Zieldatenortes verwendeten Iterationswertes; Multiplizieren durch Hardware des in einem Hardwarezähler gespeicherten Iterationswertes mit der spezifischen Byte-Länge zur Bestimmung eines tatsächlichen Speicheradressoffsets des Quelldatenortes und des Zieldatenortes; Ändern des im Hardwarezähler gespeicherten Iterationswertes um 1 nach jeder Iteration; und Zuführen des tatsächlichen Speicheradressoffsets zu einem Mikrocode.
- Artikel, umfassend ein Speichermedium mit darauf gespeicherten Befehlen, die, wenn sie mit Hilfe einer Maschine ausgeführt werden, zumindest zum folgenden führen: Ausgeben genau der angeforderten Zahl von Iterationen für die Wiederholungs-String-Operation für jeden Wert der angeforderten Zahl, die sich innerhalb des vorbestimmten Bereichs befindet; und Ausführen der angeforderten Zahl von Iterationen der String-Operation, wobei die String-Operation zur Übertragung von Daten mit einer spezifischen Byte-Länge vorgesehen ist, wobei das Ausführen umfaßt: Verwenden eines Hardwarezählers zum Speichern eines zur Identifizierung sowohl eines Quelldatenortes als auch eines Zieldatenortes verwendeten Iterationswertes; Multiplizieren durch Hardware des in einem Hardwarezähler gespeicherten Iterationswertes mit der spezifischen Bytelänge zur Bestimmung eines tatsächlichen Speicheradressoffsets des Quelldatenortes und des Zieldatenortes; Ändern des im Hardwarezähler gespeicherten Iterationswertes um eins nach jeder Iteration; und Zuführen des tatsächlichen Speicheroffsets zu einem Mikrocode.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/233,155 | 2002-08-28 | ||
US10/233,155 US7100029B2 (en) | 2002-08-28 | 2002-08-28 | Performing repeat string operations |
PCT/US2003/027386 WO2004021171A1 (en) | 2002-08-28 | 2003-08-28 | Performing repeat string operations |
Publications (1)
Publication Number | Publication Date |
---|---|
DE10393188T5 true DE10393188T5 (de) | 2005-09-01 |
Family
ID=31977168
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE10393188T Ceased DE10393188T5 (de) | 2002-08-28 | 2003-08-28 | Verarbeitung von Wiederholungs-String-Operationen |
Country Status (7)
Country | Link |
---|---|
US (1) | US7100029B2 (de) |
CN (1) | CN100353314C (de) |
AU (1) | AU2003263046A1 (de) |
DE (1) | DE10393188T5 (de) |
HK (1) | HK1083139A1 (de) |
TW (1) | TWI257572B (de) |
WO (1) | WO2004021171A1 (de) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7366885B1 (en) | 2004-06-02 | 2008-04-29 | Advanced Micro Devices, Inc. | Method for optimizing loop control of microcoded instructions |
US8243798B2 (en) * | 2006-12-20 | 2012-08-14 | Intel Corporation | Methods and apparatus for scalable video bitstreams |
US9164770B2 (en) * | 2009-10-23 | 2015-10-20 | Mindspeed Technologies, Inc. | Automatic control of multiple arithmetic/logic SIMD units |
CN101794308B (zh) * | 2010-03-04 | 2012-03-14 | 哈尔滨工程大学 | 一种面向有意义串挖掘的重复串提取方法及装置 |
RU2010145507A (ru) * | 2010-11-10 | 2012-05-20 | ЭлЭсАй Корпорейшн (US) | Устройство и способ управления микрокомандами без задержки |
CN106066843A (zh) * | 2016-06-02 | 2016-11-02 | 北京赛思信安技术股份有限公司 | 一种高速Base64并行编解码装置 |
CN110134441B (zh) * | 2019-05-23 | 2020-11-10 | 苏州浪潮智能科技有限公司 | Risc-v分支预测方法、装置、电子设备及存储介质 |
US20230418611A1 (en) * | 2022-06-23 | 2023-12-28 | Arm Limited | Prediction of number of iterations of a fetching process |
US11803390B1 (en) * | 2022-07-01 | 2023-10-31 | Arm Limited | Prediction class determination |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE4234487A1 (de) | 1992-10-14 | 1994-04-21 | Henkel Kgaa | Wäßrige Detergensgemische |
JPH0721034A (ja) * | 1993-06-28 | 1995-01-24 | Fujitsu Ltd | 文字列複写処理方法 |
US5701517A (en) * | 1994-12-22 | 1997-12-23 | Cirrus Logic, Inc. | Pipelined alignment shifter and method for universal bit field boundary alignment |
US5784607A (en) * | 1996-03-29 | 1998-07-21 | Integrated Device Technology, Inc. | Apparatus and method for exception handling during micro code string instructions |
US5835972A (en) * | 1996-05-28 | 1998-11-10 | Advanced Micro Devices, Inc. | Method and apparatus for optimization of data writes |
US6032252A (en) * | 1997-10-28 | 2000-02-29 | Advanced Micro Devices, Inc. | Apparatus and method for efficient loop control in a superscalar microprocessor |
-
2002
- 2002-08-28 US US10/233,155 patent/US7100029B2/en not_active Expired - Lifetime
-
2003
- 2003-08-27 TW TW092123586A patent/TWI257572B/zh not_active IP Right Cessation
- 2003-08-28 AU AU2003263046A patent/AU2003263046A1/en not_active Abandoned
- 2003-08-28 WO PCT/US2003/027386 patent/WO2004021171A1/en active Application Filing
- 2003-08-28 DE DE10393188T patent/DE10393188T5/de not_active Ceased
- 2003-08-28 CN CNB038246422A patent/CN100353314C/zh not_active Expired - Fee Related
-
2006
- 2006-05-04 HK HK06105281A patent/HK1083139A1/xx not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
HK1083139A1 (en) | 2006-06-23 |
TW200414031A (en) | 2004-08-01 |
CN1695115A (zh) | 2005-11-09 |
TWI257572B (en) | 2006-07-01 |
WO2004021171A1 (en) | 2004-03-11 |
US7100029B2 (en) | 2006-08-29 |
US20040044885A1 (en) | 2004-03-04 |
AU2003263046A1 (en) | 2004-03-19 |
CN100353314C (zh) | 2007-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE3151745C2 (de) | ||
DE112013005188B4 (de) | Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen | |
DE69133302T2 (de) | Registerabbildung in einem einzigen Taktzyklus | |
DE102010051476B4 (de) | Addierbefehle, um drei Quelloperanden zu addieren | |
DE102015109124B4 (de) | Cache-Wegvorhersage | |
DE3424962C2 (de) | ||
DE2846495C2 (de) | Zentraleinheit | |
DE69028269T2 (de) | Virtuelles Adressierungsverfahren zum Betrieb eines Speichers in einer Datenverarbeitungsanlage und Einrichtung zur Ausführung besagten Verfahrens | |
CH650600A5 (de) | Zentralprozessoreinheit einer datenverarbeitungsanlage mit operationscode-erweiterungsregister. | |
DE2417795C2 (de) | Datenverarbeitungsanlage | |
DE2230102A1 (de) | Rechenwerk fuer variable wortlaengen | |
DE112011105121T5 (de) | Systeme, Vorrichtungen und Verfahren zum Schrittmustersammeln von Datenelementen und Schrittmusterstreuen von Datenelementen | |
DE2630323B2 (de) | Datenspeichereinrichtung mit einem Hauptspeicher, einem Hilfsspeicher und einer Vorausschaulogik | |
DE2611598A1 (de) | Uebersetzungseinrichtung fuer speicheradressen | |
DE112010002773T5 (de) | Entpacken von gepackten daten auf mehreren spuren | |
DE2903349A1 (de) | Datenverarbeitungseinrichtung | |
DE102015007422A1 (de) | Befehlssatz zum Eliminieren fehlausgerichteter Speicherzugriffe während der Verarbeitung eines Arrays mit fehlausgerichteten Datenzeilen | |
DE2424931A1 (de) | Datenverarbeitungsanlage, insbesondere mikroprogramm-datenverarbeitungseinheit mit parallelen befehlsstroemen fuer mehrere ebenen von subbefehlsvorraeten | |
DE112013005343T5 (de) | Befehle für Codierungsalgorithemen mit gleitendem Fenster | |
DE3043653C2 (de) | Datenverarbeitungsanlage | |
DE1285219B (de) | Steuerwerk zur Ausfuehrung von Unterprogrammen | |
DE102018126036A1 (de) | Systeme und verfahren zum setzen eines kachelregisterpaars auf null | |
DE69231237T2 (de) | Datenverarbeitungsvorrichtung | |
DE10393188T5 (de) | Verarbeitung von Wiederholungs-String-Operationen | |
DE102018125971A1 (de) | Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law |
Ref document number: 10393188 Country of ref document: DE Date of ref document: 20050901 Kind code of ref document: P |
|
R011 | All appeals rejected, refused or otherwise settled | ||
R003 | Refusal decision now final |
Effective date: 20130930 |