DE102007045496B4 - Anweisung und Logik zum Bearbeiten von Textstrings - Google Patents
Anweisung und Logik zum Bearbeiten von Textstrings Download PDFInfo
- Publication number
- DE102007045496B4 DE102007045496B4 DE102007045496.3A DE102007045496A DE102007045496B4 DE 102007045496 B4 DE102007045496 B4 DE 102007045496B4 DE 102007045496 A DE102007045496 A DE 102007045496A DE 102007045496 B4 DE102007045496 B4 DE 102007045496B4
- Authority
- DE
- Germany
- Prior art keywords
- data
- operand
- packed
- elements
- operands
- 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.)
- Active
Links
- 230000002776 aggregation Effects 0.000 claims abstract description 13
- 238000004220 aggregation Methods 0.000 claims abstract description 13
- 230000006870 function Effects 0.000 claims description 14
- 238000003860 storage Methods 0.000 claims description 13
- 238000012545 processing Methods 0.000 description 47
- 238000000034 method Methods 0.000 description 18
- 238000004891 communication Methods 0.000 description 15
- 238000007667 floating Methods 0.000 description 14
- 238000013461 design Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 238000003491 array Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 230000001419 dependent effect Effects 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 5
- 238000013500 data storage Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 2
- 102000001332 SRC Human genes 0.000 description 2
- 108060006706 SRC Proteins 0.000 description 2
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 2
- 238000010420 art technique Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 235000019580 granularity Nutrition 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000001356 surgical procedure Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 235000019587 texture Nutrition 0.000 description 1
Images
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/06—Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
-
- 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
-
- 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/3001—Arithmetic 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/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- 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/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- 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
-
- 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/30098—Register arrangements
-
- 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/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- 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/3017—Runtime instruction translation, e.g. macros
-
- 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/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- 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/30181—Instruction operation extension or modification
- G06F9/30192—Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
-
- 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/3802—Instruction prefetching
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- 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/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
Maschinenlesbares Medium mit einer darauf gespeicherten SIMD(single instruction, multiple data)-Zeichenketten-Vergleichsanweisung, die, wenn sie von einer Maschine ausgeführt wird, die Maschine dazu veranlaßt, jedes Datenelement des ersten gepackten Operanden mit jedem Datenelementen des zweiten gepackten Operanden zu vergleichen und ein zweidimensionales Array von Werten, dessen Einträge dem Vergleich zwischen den Datenelementen des ersten gepackten Operanden und der Datenelementen des zweiten gepackten Operanden entsprechen, zu erzeugen, wobei der Vergleich und Gültigkeitsinformationen durch eine Aggregationsfunktion kombiniert werden, um ein Ergebnis des Vergleichs der Elemente der zwei Operanden zu erzeugen; und das Ergebnis des Vergleichs zu speichern.
Description
- ERFINDUNGSGEBIET
- Die vorliegenden Erfindung betrifft das Gebiet der Verarbeitungsvorrichtungen und der zugehörigen Software und Softwaresequenzen, die logische und mathematische Operationen ausführen.
- BESCHREIBUNG DES STANDS DER TECHNIK
- Computersysteme sind in unserer Gesellschaft zunehmend allgegenwärtig. Die Verarbeitungsleistungen von Computern haben die Effizienz und Produktivität von Arbeitern in einem breiten Spektrum von Berufen gesteigert. Da die Kosten der Anschaffung und des Besitzes eines Computers weiterhin sinken, konnten mehr und mehr Konsumenten von den Vorteilen von neueren und schnelleren Maschinen profitieren. Darüber hinaus genießen viele Menschen die Verwendung von Notebook-Computer aufgrund der Bewegungsfreiheit. Mobile Computer erlauben es dem Nutzer, ihre Daten und ihre Arbeit einfach zu transportieren, wenn sie ihr Büro verlassen oder reisen. Dieses Szenario ist Marketingmitarbeitern, leitenden Angestellten und selbst Studenten wohlbekannt.
- Da die Prozessortechnologie voranschreitet, wird auch neuer Softwarecode erzeugt, um Geräte mit diesen Prozessoren zu betreiben. Die Nutzer erwarten und verlangen im allgemeinen eine höhere Leistung von ihren Computer, ungeachtet der Art von Software, die verwendet wird. Ein solches Problem kann aus der Art von Anweisungen und Operationen erwachsen, die wirklich in dem Prozessor ausgeführt werden. Gewisse Arten von Operationen benötigen mehr Zeit zur Vollendung, basierend auf der Komplexität der Operationen und/oder der Art der benötigten Schaltungen. Dies bietet eine Möglichkeit, die Art, wie gewisse komplexe Operationen in dem Prozessor ausgeführt werden, zu optimieren.
- Kommunikationsanwendungen haben die Mikroprozessorentwicklung über mehr als ein Jahrzehnt vorangetrieben. Die Grenze zwischen Computer und Kommunikation wurde tatsächlich zunehmend verwischt, zum Teil aufgrund der Verwendung von Text-Kommunikationsanwendungen. Textanwendungen sind in Verbrauchersegmenten und in zahlreichen Vorrichtungen, von Mobiltelefonen bis zu Personalcomputern, allgegenwärtig, was eine schnellere und schnellere Verarbeitung von Textinformation erfordert. Text-Kommunikationsvorrichtungen halten in Computer- und Kommunikationsvorrichtungen weiterhin Einzug in Form von Anwendungen, wie etwa Microsoft® Instant MessengerTM, Email-Anwendungen, wie etwa Microsoft® OutlookTM, und Textanwendungen bei Mobiltelefonen. Als Ergebnis wird die Personalcomputern- und Kommunikationserfahrung von Morgen noch reicher an textlichen Möglichkeiten sein.
- Daher wurde die Verarbeitung oder das Parsen von Textinformation, die zwischen Computer- oder Kommunikationsvorrichtungen übertragen wird, zunehmend wichtig für heutige Computer- und Kommunikationsvorrichtungen. Insbesondere umfaßt die Interpretation von Folgen von Textinformationen durch eine Kommunikation- oder Computervorrichtung einige der wichtigsten Operationen, die auf Textdaten ausgeführt werden. Solche Operationen können rechenintensiv sein, bieten aber einen hohen Grad an Datenparallelismus, der durch eine effiziente Implementierung mittels verschiedener Datenspeichervorrichtungen, wie beispielsweise SIMD-Register (single instruction multiple data), ausgenutzt werden kann. Eine Anzahl von aktuellen Architekturen erfordert auch mehrere Operationen, Anweisungen oder Unter-Anweisungen (oft auch als „Mikrooperationen” oder „μops” bezeichnet), um verschiedene logische und mathematische Operationen auf einer Anzahl von Operanden auszuführen, wodurch der Durchsatz verringert wird und die Anzahl von Taktzyklen, die zur Durchführung der logischen und mathematischen Operationen benötigt werden, erhöht wird.
- Für ein Anweisungssequenz, die aus einer Anzahl von Anweisungen besteht, kann es beispielsweise nötig sein, eine oder mehrere Operationen auszuführen, die zur Interpretation von bestimmten Wörtern einer Zeichenfolge nötig sind, einschließlich des Vergleichens zweier oder mehrerer Textworte, die durch verschiedene Datentypen in einer Verarbeitungsvorrichtung, eine System oder Computerprogramm repräsentiert werden. Solche Techniken aus dem Stand der Technik können jedoch viele Verarbeitungszyklen erfordern und können bewirken, daß ein Prozessor oder System unnötige Leistung verbraucht, um das Ergebnis zu erzeugen. Des weiteren können manche Techniken aus dem Stand der Technik bei den Datentypen der Operanden, mit denen gearbeitet werden kann, beschränkt sein.
- Die Erfindung stellt ein maschinenlesbares Medium nach Anspruch 1 und einen Processor nach Anspruch 9 zur Verfügung.
- KURZE BESCHREIBUNG DER FIGUREN
- Die vorliegende Erfindung wird als Beispiel und nicht als Einschränkung in den Figuren der beigefügten Zeichnungen dargestellt:
-
1A ist ein Blockdiagramm eines Computersystems, das mit einem Prozessor ausgebildet ist, der Ausführungseinheiten umfaßt, um eine Anweisung für Zeichenfolgen-Vergleichsoperationen auszuführen, nach einer Ausführung der vorliegenden Erfindung; -
1B ist ein Blockdiagramm eines anderen beispielhaften Computersystems nach einer alternativen Ausführung der vorliegenden Erfindung; -
1C ist ein Blockdiagramm noch eines anderen beispielhaften Computersystems nach einer anderen alternativen Ausführung der vorliegenden Erfindung; -
2 ist ein Blockdiagramm der Mikroarchitektur für einen Prozessor einer Ausführung, der Logikschaltungen umfaßt, um eine oder mehr Zeichenkettenvergleichsoperationen auszuführen, nach der vorliegenden Erfindung. -
3A stellt verschiedene gepackte Datentypen-Repräsentationen in Multimediaregistern nach einer Ausführung der vorliegenden Erfindung dar; -
3B stellt gepackte Datentypen nach einer alternativen Ausführung dar; -
3C stellt verschiedene gepackte Datentypen-Repräsentationen mit und ohne Vorzeichen in Multimediaregistern dar, nach einer Ausführung der vorliegenden Erfindung; -
3D stellt eine Ausführung eines Operationscode-Formats (Opcode) dar; -
3E stellt ein alternatives Operationscode-Format (Opcode) dar; -
3F stellt noch ein alternatives Operationscode-Format dar; -
4 ist ein Blockdiagramm einer Logik, um zumindest eine Zeichenketten-Vergleichsoperation auf einer oder mehr gepackten Datenoperanden mit einfacher Genauigkeit auszuführen, nach einer Ausführung der vorliegenden Erfindung; -
5 ist ein Blockdiagramm von Arrays, die verwendet werden können, um zumindest eine Zeichenketten-Vergleichsoperation auszuführen, nach einer Ausführung. -
6 stellt Operationen dar, die in einer Ausführung der Erfindung ausgeführt werden können. - DETAILLIERTE BESCHREIBUNG
- Die folgende Beschreibung beschreibt Ausführungen einer Technik, um eine Vergleichsoperation zwischen Text- oder Zeichenkettenelementen in einer Verarbeitungsvorrichtung, einem Computersystem oder einem Softwareprogramm auszuführen. In der folgenden Beschreibung werden viele verschiedene Details, wie etwa Prozessorarten, Bedingungen der Mikroarchitektur, Ereignisse, Aktivierungsmechanismen und ähnliches, angegeben, um ein volleres Verständnis der vorliegenden Erfindung bereitzustellen. Ein Fachmann wird jedoch erkennen, daß die Erfindung ohne solche spezifischen Details angewandt werden kann. Zusätzlich wurden einige bekannte Strukturen, Schaltungen und ähnliches nicht im Detail gezeigt, um es zu vermeiden, die vorliegende Erfindung unnötig zu verdunkeln.
- Obwohl die folgenden Ausführungen mit Bezug auf einen Prozessor beschrieben werden, sind andere Ausführungen auf andere Arten von integrierten Schaltkreisen und Logik-Vorrichtungen anwendbar. Die selben Techniken und Lehren der vorliegenden Erfindung können leicht auf andere Arten von Schaltungen oder Halbleitervorrichtungen angewandt werden, die von hohem Pipeline-Durchsatz und verbesserter Leistung profitieren können. Die Lehren der vorliegenden Erfindung sind auf jeden Prozessor oder jede Maschine anwendbar, die Datenmanipulationen durchführt. Die vorliegende Erfindung ist jedoch nicht auf Prozessoren oder Maschinen beschränkt, die 256-Bit-, 128-Bit-, 64-Bit-, 32-Bit- oder 16-Bit-Datenoperationen durchführen, und kann auf jeden Prozessor oder jede Maschine angewandt werden, bei dem oder der Manipulation von gepackten Daten benötigt wird.
- In der folgenden Beschreibung werden zur Erklärung viele spezifische Details angegeben, um ein gründliches Verständnis der vorliegenden Erfindung bereitzustellen. Ein Fachmann wird jedoch erkennen, daß diese spezifischen Details nicht nötig sind, um die vorliegende Erfindung anzuwenden. An anderer Stelle wurden bekannte elektrische Strukturen und Schaltungen nicht in besonderem Detail angegeben, um die vorliegende Erfindung nicht unnötig zu verdunkeln. Zusätzlich gibt die vorliegende Erfindung Beispiele an, und die beigefügten Zeichnungen zeigen verschiedene Beispiele zum Zweck der Erläuterung. Diese Beispiele sollten jedoch nicht in einem einschränkenden Sinn konstruiert werden, das sie nur vorgesehen sind, Beispiele der vorliegenden Erfindung anzugeben, anstatt eine ausschöpfende Liste aller möglichen Implementierungen der vorliegenden Erfindung anzugeben.
- Obwohl die Beispiele unten die Behandlung und Verteilung von Anweisungen im Kontext von Ausführungseinheiten und Logikschaltungen beschreiben, können andere Ausführungen der vorliegenden Erfindung durch Software durchgeführt werden. In einer Ausführung werden die Verfahren der vorliegenden Erfindung in maschinenlesbaren Anweisungen ausgeführt. Die Anweisungen können verwendet werden, um einen Allzweck- oder einen spezialisierten Prozessor, der mit den Anweisungen programmiert ist, dazu zu veranlassen, die Schritte der vorliegenden Erfindung auszuführen. Die vorliegende Erfindung kann als ein Computerprogrammprodukt oder Software bereitgestellt werden, die ein maschinen- oder computerlesbares Medium mit darauf gespeicherten Anweisungen umfassen kann, das verwendet werden kann, einen Computer (oder eine andere elektronische Vorrichtung) zu programmieren, um ein Verfahren in Übereinstimmung mit der vorliegenden Erfindung auszuführen. Alternativ können die Schritte der vorliegenden Erfindung durch spezielle Hardwarekomponenten, die festverdrahtete Logik aufweisen, um die Schritte auszuführen, oder durch irgendeine Kombination von programmierten Computerkomponenten und spezialisierten Hardwarekomponenten ausgeführt werden. Eine solche Software kann in einem Speicher in dem System gespeichert werden. Analog kann der Code über ein Netzwerk oder mittels computerlesbarer Medien verbreitet werden.
- Demnach kann ein maschinenlesbares Medium irgendeinen Mechanismus umfassen, um Information in einer Form, die für eine Maschine lesbar ist (z. B. ein Computer), zu speichern oder zu übertragen, ist aber nicht beschränkt auf Floppydisketten, optische Disks, Compaktdisks, Festspeicher (CD-ROMs) und magnetooptische Platten, Festspeicher (ROMs), Arbeitsspeicher (RAM), löschbarer programmierbarer Festspeicher (EPROM), magnetische oder optische Karten, Flashspeicher, eine Übertragung über das Internet, elektrische, optische, akustische oder andere Formen von sich ausbreitenden Signalen (z. B. Trägerwellen, Infrarotsignale, digitale Signale etc.) oder ähnliches. Somit umfaßt das computerlesbare Medium jede Art von Medien/maschinenlesbarem Medium, der oder die geeignet ist oder sind, elektronische Anweisungen oder Informationen in einer Form, die von einer Maschine (z. B. von einem Computer) lesbar ist zu speichern oder zu übertragen. Darüber hinaus kann die vorliegende Erfindung auch als ein Computerprogramm-Produkt heruntergeladen werden. Als solches kann das Programm von einem entfernten Computer (z. B. einem Server) auf einen anfordernden Computer (z. B. einem Client) übertragen werden. Der Transfer des Programms kann über elektrische, optische, akustische oder irgendwelche anderen Arten von Datensignalen, die in einer Trägerwelle oder einem anderen Ausbreitungsmedium über eine Kommunikationsverbindung (z. B. einem Modem, einer Netzwerkverbindung oder ähnlichem) ausgebildet sind, erfolgen.
- Ein Design kann verschiedene Stufen durchlaufen, von der Erzeugung zur Simulation und zur Fabrikation. Daten, die ein Design repräsentieren können das Design in einer Anzahl von Arten repräsentieren. Erstens kann die Hardware, wie es in Simulationen nützlich ist, mittels einer Hardware-Beschreibungssprache oder einer anderen funktionalen Beschreibungssprache repräsentiert werden. Zusätzlich kann ein Modell auf Schaltungsebene mit Logik und/oder Transistoren an bestimmten Stufen des Designprozesses hergestellt werden. Darüber hinaus erreichen die meisten Designs an irgendeinem Punkt eine Stufe, bei der Daten die physische Plazierung von verschiedenen Vorrichtungen in dem Hardwaremodell repräsentieren. In dem Fall, in dem herkömmliche Halbleiterfabrikationstechniken verwendet werden, können die Daten, die das Hardwaremodell repräsentieren, diejenigen Daten sein, die das Vorhandensein oder die Abwesenheit von verschiedenen Merkmalen auf unterschiedlichen Maskenschichten für Masken, die zur Herstellung des integrierten Schaltkreises verwendet werden, spezifizieren. In jeder Repräsentation des Designs können die Daten in irgendeiner Form von maschinenlesbarem Medium gespeichert sein. Eine optische oder elektrische Welle, die moduliert oder anderweitig erzeugt wird, um solche Informationen zu übertragen, ein Speicher oder ein magnetisches oder optisches Speicherelement, wie etwa eine Disk, können das maschinenlesbare Medium ausmachen. Jedes dieser Medien kann das Design oder die Software-Information „tragen” oder „angeben”. Wenn eine elektrische Trägerwelle, die den Code oder das Design angibt oder trägt, übertragen wird, wird in dem Maße, in dem das Kopieren, Puffer oder erneutes Übertragen der elektrischen Signale ausgeführt wird, eine neue Kopie angefertigt. Daher kann ein Kommunikationsanbieter oder eine Netzwerkanbieter Kopien eines Artikels (einer Trägerwelle) anfertigen, die die Techniken der vorliegenden Erfindung verkörpern.
- Bei modernen Prozessoren werden eine Anzahl von unterschiedlichen Ausführungseinheiten verwendet, um unterschiedlichen Code und unterschiedliche Anweisungen zu verarbeiten und auszuführen. Nicht alle Anweisungen sind gleich, da manche schneller ausgeführt werden könne, während andere eine riesige Anzahl von Taktzyklen benötigen. Je schneller der Durchsatz an Anweisungen ist, desto besser ist die generelle Leistung des Prozessors. Es währe daher vorteilhaft, so viele Anweisungen wie möglich so schnell wie möglich auszuführen. Es gibt jedoch bestimmte Anweisungen, die eine größere Komplexität aufweisen und ein Mehrfaches in Bezug auf Ausführungszeit und Prozessorressourcen benötigen. Es treten beispielsweise Fließkomma-Anweisungen, Lade-/Speicheroperationen, Datenbewegungen etc. auf.
- Da mehr und mehr Computersysteme in Internet-, Text- und Multimediaanwendungen verwendet werden, wurde mit der Zeit zusätzliche Prozessorunterstützung eingeführt. Beispielsweise sind SIMD-Integer-/Fliehkomma-Anweisungen (Single Instruction, Multiple Data) und Streaming-SIMD-Erweiterungen (SSE) Anweisungen, die die gesamte Anzahl von Anweisungen verringern, die benötigt werden, um einen bestimmten Programmtask auszuführen, was wiederum den Leistungsverbrauch senken kann. Diese Anweisungen können die Softwareleistung beschleunigen, indem sie mehrere Daten parallel bearbeiten. Als Ergebnis können Leistungssteigerungen in einem breiten Bereich von Anwendungen erreicht werden, einschließlich Video, Sprache und Bild-/Fotoverarbeitung. Die Implementierung von SIMD-Anweisungen in Mikroprozessoren und ähnlichen Arten von Logikschaltkreisen schließt gewöhnlich eine Anzahl von Problemen ein. Des weiteren führt die Komplexität von SIMD-Operationen oft zu einem Bedarf nach zusätzlichen Schaltungen, um die Daten korrekt zu verarbeiten und zu manipulieren.
- Gegenwärtig ist keine SIMD-Anweisung verfügbar, die jedes Datenelement von mindestens zwei gepackten Operanden vergleicht. Ohne die Anwesenheit eine gepackten SIMD-Vergleichsanweisung, wie etwa diejenige, die von einer Ausführung ausgeführt wird, kann eine große Anzahl von Anweisungen und Datenregistern benötigt werden, um das gleiche Ergebnis bei Anwendungen, wie etwa Textinterpretation, -kompression/dekompression, -verarbeitung und -manipulation, zu erreichen. Hier offenbarte Ausführungen beziehen sich austauschbar auf Text- oder Zeichenketten-Vergleiche. Die Ausführungen können jedoch auf jede Kette von Informationen (Text, Zahlen oder andere Daten) angewandt werden.
- Somit kann zumindest eine Zeichenketten-Vergleichsanweisung in Übereinstimmung mit Ausführungen der vorliegenden Erfindung den Code-Overhead und die Ressourcen-Anforderungen verringern. Ausführungen der vorliegenden Erfindung geben eine Art an, um eine Text-Parse-Operation als einen Algorithmus zu implementieren, der mit SIMD verwandter Hardware verwendet. Es ist gegenwärtig recht schwierig und mühsam, Text-Parse-Operationen an Daten in einem SIMD-Register auszuführen. Manche Algorithmen benötigen mehrere Anweisungen, um Daten für arithmetische Operationen anzuordnen, als die eigentliche Anzahl von Anweisungen, um diese Operationen auszuführen. Durch das Implementieren von Ausführungen von Text-Vergleichsoperationen nach Ausführungen der vorliegenden Erfindung kann die Anzahl von Anweisungen, die benötigt wird, um die Textverarbeitung durchzuführen, drastisch verringert werden.
- Ausführungen der vorliegenden Erfindung schließen eine Anweisung zur Implementierung einer oder mehrerer Zeichenketten-Vergleichsoperationen ein. Eine Text-Vergleichsoperation schließt im allgemeinen das Vergleichen von Datenelementen von zwei Zeichenketten von Daten ein, um zu ermitteln, welche Datenelemente übereinstimmen. Andere Änderungen können an dem generischen Textvergleichsalgorithmus vorgenommen werden, was hierin erörtert wird. In einem verallgemeinerten Sinn kann eine Ausführung einer Textvergleichsoperation, die auf einzelne Datenelemente in zwei gepackten Operanden angewandt wird, die zwei Zeichenketten von Daten repräsentieren, generisch dargestellt werden als:
DEST1 ← SRC1 cmp SRC2;
für einen gepackten SIMD-Datenoperanden kann diese generische Operation auf jede der Datenelementpositionen jedes der Operanden angewandt werden. - Bei der obigen Operation sind „DEST” und „SRC” generische Terme, die das Ziel und die Quelle der zugehörigen Daten oder Operation repräsentieren. In manchen Ausführungen können sie durch Register, Speicher oder andere Speicherbereiche mit anderen Bezeichnungen oder Funktionen als den dargestellten implementiert werden. In einer Ausführung kann DEST1 beispielsweise durch ein temporäres Speicherregister oder ein anderer Speicherbereich gebildet werden, wogegen SRC1 und SRC2 durch einen ersten und einen zweiten Ziel-Speicherregister oder anderen Speicherbereich gebildet werden usw. In anderen Ausführungen können zwei oder mehr der SRC- und der DEST-Speicherbereiche mit unterschiedlichen Datenspeicherelementen innerhalb des gleichen Speicherbereichs (z. B. eines SIMD-Registers) übereinstimmen.
- Darüber hinaus kann eine Zeichenketten-Vergleichsoperation einen Indikator erzeugen, ob jedes der Elemente eines der Quellenregister gleich jedem der Elemente des anderen Quellenregisters ist, und den Indikator in einem Register, wie etwa DEST1, speichern. In einer Ausführung ist der Indikator ein Indexwert, wogegen in anderen Ausführungen der Indikator ein Maskenwert sein kann. In anderen Ausführungen kann der Indikator andere Datenstrukturen oder -zeiger repräsentieren.
- Die
1A ist ein Blockdiagramm eines beispielhaften Computersystems, das mit einem Prozessor ausgebildet ist, der Ausführungseinheiten umfaßt, um eine Anweisung für Zeichenfolgen-Vergleichsoperationen auszuführen, nach einer Ausführung der vorliegenden Erfindung. Das System100 umfaßt eine Komponente, wie etwa einen Prozessor102 , um Ausführungseinheiten zu verwenden, die Logik umfassen, um Algorithmen zur Verarbeitung von Daten in Übereinstimmung mit der vorliegenden Erfindung, wie etwa diejenigen in der hier beschriebenen Ausführung, ausführen. Das System100 ist repräsentativ für Verarbeitungssysteme, die auf den PENTIUM® III, PENTIUM® 4, XeonTM, Itanium®, XScaleTM und/oder StrongARMTM Mikroprozessoren, die von der Intel Corporation in Santa Clara, Kalifornien erhältlich sind, basieren, obwohl andere Systeme (einschließlich PCs mit anderen Mikroprozessoren, Ingenieurs-Workstations, Settop-Boxen und ähnliches) auch verwendet werden können. In anderen Ausführungen kann das Beispielsystem100 eine Version des WindowsTM-Betriebssystems verwenden, das von der Microsoft Corporation in Redmond, Washington erhältlich ist, obwohl andere Systeme (beispielsweise UNIX und Linux), eingebettete Software und/oder GUIs ebenfalls verwendet werden können. Somit sind Ausführungen der vorliegenden Erfindung nicht auf irgendeine spezielle Kombination von Hardwareschaltungen und Software beschränkt. - Die Ausführungen sind nicht auf Computersysteme beschränkt. Alternative Ausführungen der vorliegenden Erfindung können in anderen Vorrichtungen verwendet werden, wie etwa tragbaren Vorrichtungen und eingebetteten Anwendungen. Einige Beispiele von mobilen Vorrichtungen umfassen Mobiltelefone, Internet-Protokoll-Vorrichtungen, Digitalkameras, Personal Digital Assistants (PDAs) und Handheld-PCs. Eingebettete Anwendungen können einen Mikrocontroller, einen digitalen Signalprozessor (DSP), einen Systemchip, Netzwerkcomputer (NetPC), Settop-Boxen, Netzwerk-Hubs, WAN-Schalter (wide area network) oder jedes andere System, das Zeichenketten-Vergleichsoperationen auf Operanden durchführt. Darüber hinaus wurden manche Architekturen implementiert, um Anweisungen zu ermöglichen, um auf mehreren Daten gleichzeitig zu operieren, um die Effizienz von Multimedia-Anwendungen zu verbessern. Da die Arten und das Volumen von Daten ansteigt, wurden Computer und ihre Prozessoren verbessert, um Daten mit effizienteren Verfahren zu manipulieren.
- Die
1A ist ein Blockdiagramm eines Computersystems100 , das mit einem Prozessor102 ausgebildet ist, der eine oder mehrere Ausführungseinheiten108 aufweist, um einen Algorithmus auszuführen, um Datenelemente von einem oder mehreren Operanden zu vergleichen, nach einer Ausführung der vorliegenden Erfindung. Eine Ausführung kann im Kontext eines Ein-Prozessor-Desktop- oder Serversystems beschrieben werden, aber alternative Ausführungen können in einem Mehrprozessorsystem vorgesehen sein. Das System100 ist ein Beispiel einer Hub-Architektur. Das Computersystem100 umfaßt einen Prozessor102 , um Datensignale zu verarbeiten. Der Prozessor102 kann ein CISC-Mikroprozessor (complex instruction set computer), ein RISC-Mikroprozessor (reduced instruction set computing), ein VLIW-Mikroprozessor (very long instruction word), ein Prozessor, der eine Kombination von Anweisungssätzen implementiert oder jede andere Verarbeitungsvorrichtung sein, wie beispielsweise ein digitaler Signalprozessor. Der Prozessor102 ist mit einem Prozessorbus110 gekoppelt, der Datensignale zwischen dem Prozessor102 und anderen Komponenten in dem System100 übertragen kann. Die Elemente des Systems100 führen ihre herkömmlichen, Funktionen aus, die dem Fachmann bekannt sind. - In einer Ausführung umfaßt der Prozessor
102 einen internen Level-1-Cachespeicher104 (L1-Cache). Abhängig von der Architektur kann der Prozessor102 einen einzigen internen Cache oder mehrere Ebenen von internem Cache aufweisen. Alternativ kann in anderen Ausführungen der Cachespeicher extern von dem Prozessor102 angeordnet sein. Andere Ausführungen können auch eine Kombination von sowohl internen als auch externen Caches aufweisen, abhängig von der speziellen Implementierung und den speziellen Anforderungen. Die Registerdatei106 kann unterschiedliche Arten von Daten in verschiedenen Registern speichern, einschließlich Integer-Registern, Fließkomma-Registern, Zustands-Registern und Anweisungs-Zeigerregistern. - Die Ausführungseinheit
108 , die Logik umfaßt, um Integer- und Fließkomma-Operationen auszuführen, ist auch in dem Prozessor102 angeordnet. Der Prozessor102 umfaßt auch ein Mikrocode-ROM (Ucode-ROM), das Mikrocode für bestimmte Makroanweisungen speichert. In dieser Ausführung umfaßt die Ausführungseinheit108 Logik, um einen gepackten Anweisungssatz109 zu bearbeiten. In einer Ausführung umfaßt der gepackte Anweisungssatz109 eine Gepackter-Zeichenketten-Anweisungssatz, um Elemente einer Anzahl von Operanden zu vergleichen. Durch das Vorsehen des gepackten Anweisungssatzes109 in dem Anweisungssatz des Allzweckprozessors102 zusammen mit zugehörigen Schaltungen, um die Anweisungen auszuführen, können die Operationen, die von vielen Multimediaanwendungen verwendet werden, mittels gepackter Daten in einem Allzweckprozessor102 ausgeführt werden. Dadurch können viele Multimediaanwendungen beschleunigt werden und effizienter ausgeführt werde, indem die volle Breite eines Datenbusses eines Prozessors verwendet wird, um Operationen auf gepackten Daten auszuführen. Dies kann die Notwendigkeit, kleinere Dateneinheiten über den Datenbus des Prozessors zu übertragen, um eine oder mehrere Operationen Datenelement für Datenelement auszuführen, eliminieren. - Alternative Ausführungen einer Ausführungseinheit
108 können auch in Mikrocontrollern, eingebetteten Prozessoren, Grafikvorrichtungen, DSPs und anderen Arten von Logikschaltkreisen verwendet werden. Das System100 umfaßt einen Speicher120 . Der Speicher120 kann durch eine Dynamisches-RAM-Vorrichtung (DRAM-Vorrichtung), eine Statisches-RAM-Vorrichtung sein (SRAM-Vorrichtung), eine Flashspeicher-Vorrichtung oder andere Speichervorrichtungen gebildet werden. Der Speicher120 kann Anweisungen und/oder Daten speichern, die durch Datensignale repräsentiert werden, die von dem Prozessor102 ausgeführt werden können. - Ein System-Logikchip
116 ist mit dem Prozessorbus110 und dem Speicher120 gekoppelt. Der System-Logikchip116 in der dargestellten Ausführung ist ein Speichercontroller-Hub (MCH). Der Prozessor102 kann mit dem MCH116 über einen Prozessorbus110 kommunizieren. Der MCH116 stellt einen Speicherweg mit hoher Bandbreite118 zum Speicher120 zum speichern von Anweisungen und Daten und zum Speichern von Grafikbefehlen, -daten und -texturen bereit. Der MCH116 soll Datensignale zwischen dem Prozessor102 , dem Speicher120 und anderen Komponenten in dem System100 steuern und die Datensignale zwischen dem Prozessorbus110 , dem Speicher120 und dem System-E/A122 befördern. In manchen Ausführungen kann der System-Logikchip116 einen Grafikport bereitstellen, um mit einem Grafikcontroller112 zu koppeln. Der MCH116 ist mit dem Speicher120 über eine Speicherschnittstelle118 gekoppelt. Die Grafikkarte112 ist mit dem MCH116 über eine AGP-Zwischenverbindung114 (Accelerated Graphics Port) gekoppelt. - Das System
100 verwendet einen proprietären Hub-Schnittstellenbus122 , um den MCH116 mit dem E/A-Controllerhub (ICH)130 zu koppeln. Der ICH130 stellt direkte Verbindungen mit manchen E/A-Vorrichtungen über einen lokalen E/A-Bus bereit. Der lokale E/A-Bus ist ein E/A-Hochgeschwindigkeitsbus zur Verbindung von Peripheriegeräten zum Speicher120 , Chipsatz und Prozessor102 . Einige Beispiele sind der Audiocontroller, ein Firmware-Hub (Flash-BIOS)128 , ein drahtloser Transceiver126 , ein Datenspeicher124 , Bestands-E/A-Controller, die Nutzereingabe- und Tastaturschnittstellen umfassen, einen seriellen Erweiterungsport, wie etwa einen USB (Universal Serial Bus) und einen Netzwerkcontroller134 . Die Datenspeichervorrichtung124 kann ein Harddisk-Laufwerk, ein Floppydisk-Laufwerk, eine CD-ROM-Vorrichtung, eine Flashspeicher-Vorrichtung oder eine andere Massenspeichervorrichtung umfassen. - In einer andere Ausführung eines Systems kann eine Ausführungseinheit, um einen Algorithmus mit einer Zeichenketten-Vergleichsanweisung auszuführen, mit einem Systemchip verwendet werden. Eine Ausführung eines Systemchips umfaßt einen Prozessor und einen Speicher. Der Speicher für ein solches System ist ein Flashspeicher. Der Flashspeicher kann auf dem selben Die angeordnet sein, wie der Prozessor und andere Systemkomponenten. Zusätzlich können andere Logikblocks, wie etwa Speichercontroller oder Grafikcontroller auch auf dem Systemchip angeordnet sein.
- Die
1B stellt ein Datenverarbeitungssystem140 dar, das die Prinzipien einer Ausführung der vorliegenden Erfindung implementiert. Der Fachmann wird leicht erkennen, daß die hier beschriebenen Ausführungen mit alternativen Verarbeitungssystemen verwendet werden könne, ohne von dem Schutzumfang der Erfindung abzuweichen. - Das Computersystem
140 umfaßt einen Verarbeitungskern159 , der fähig ist, SIMD-Operationen einschließlich einer Zeichenketten-Vergleichsoperation auszuführen. In einer Ausführung repräsentiert der Verarbeitungskern159 eine Verarbeitungseinheit von irgendeiner Art von Architektur, einschließlich, aber nicht beschränkt auf, eine CISC-, eine RISC- oder eine VLIW-Architektur. Der Verarbeitungskern159 kann auch geeignet sein, mit einer oder mehreren Verarbeitungstechniken gefertigt zu werden, und kann geeignet sein, indem er auf einem maschinenlesbaren Medium in ausreichendem Detail repräsentiert wird, diese Fertigung zu vereinfachen. - Der Verarbeitungskern
159 umfaßt eine Ausführungseinheit142 , einen Satz von einer oder mehreren Registerdatei(en)145 und einen Decoder144 . Der Verarbeitungskern159 umfaßt auch zusätzliche Schaltungen (nicht gezeigt), die zum Verständnis der vorliegenden Erfindung nicht notwendig sind. Die Ausführungseinheit142 wird verwendet, um Anweisungen auszuführen, die von dem Verarbeitungskern159 empfangen werden. Zusätzlich zum Erkennen von typischen Prozessoranweisungen kann die Ausführungseinheit142 Anweisungen in dem gepackten Anweisungssatz143 erkennen, um Operationen auf gepackten Datenformaten auszuführen. Der gepackte Anweisungssatz143 umfaßt Anweisungen, um Zeichenketten-Vergleichsoperationen zu unterstützen und kann auch andere gepackte Anweisungen umfassen. Die Ausführungseinheit142 ist mit der Registerdatei145 durch einen internen Bus gekoppelt. Die Registerdatei145 stellt einen Speicherbereich auf dem Verarbeitungskern159 dar, um Information einschließlich von Daten zu speichern. Die Ausführungseinheit142 ist mit dem Decoder144 gekoppelt. Der Decoder144 wird verwendet, um Anweisungen, die von dem Verarbeitungskern159 empfangen werden, in Steuersignale und/oder Mikrocode-Einsprungstellen zu decodieren. In Antwort auf diese Steuersignale und/oder Mikrocode-Einsprungstellen führt die Ausführungseinheit142 geeignete Operationen aus. - Der Verarbeitungskern
159 ist mit dem Bus141 gekoppelt, um mit verschiedenen anderen Systemvorrichtungen zu kommunizieren, die beispielsweise einen SDRAM-Controller (synchrones DRAM)146 , einen SRAM-Controller (statisches RAM)147 , eine Burst-Flashspeicher-Schnittstelle148 , einen PCMCIA-/CF-Controller (Personal Computer Memory Card International Association/CompactFlash)149 , einen Flüssigkristallanzeigen-Controller (LCD-Controller)150 , einen DMA-Controller (direct memory access)151 und eine alternative Busmaster-Schnittstelle152 umfassen können, aber nicht auf diese beschränkt sind. In einer Ausführung kann das Verarbeitungssystem140 auch eine E/A-Brücke154 zum Kommunizieren mit verschiedenen E/A-Vorrichtungen über einen E/A-Bus153 umfassen. Solche E/A-Vorrichtungen können beispielsweise einen asynchronen Empfänger/Sender (UART)155 , einen USB-Bus (universal serial bus)156 , einen drahtlosen Bluetooth-UART157 und eine E/A-Erweiterungsschnittstelle158 umfassen können, aber nicht auf diese beschränkt sind. - Eine Ausführung des Datenverarbeitungssystems
140 sieht mobile, Netzwerk- und/oder drahtlose Kommunikation und einen Verarbeitungskern159 vor, der geeignet ist, SIMD-Operationen einschließlich einer Zeichenketten-Vergleichsoperation auszuführen. Der Verarbeitungskern159 kann mit unterschiedlichen Audio-, Video-, Bildverarbeitungs- und Kommunikationsalgorithmen einschließlich diskreter Transformationen, wie etwa einer Walsh-Hadamard-Transformation, einer schnellen Fourier-Transformation (FFT), einer diskreten Kosinustransformation (DCT) und deren jeweiligen inversen Transformationen; Kompressions-/Dekompressionstechniken, wie etwa Farbraum-Transformationen, Videocodierungs-Motion-Estimation oder Videodecodierungs-Motion-Compensation; und Modulation/Demodulation-Funktionen (MODEM), wie etwa Pulscodemodulation, programmiert werden. - Die
1C stellt weitere alternative Ausführungen von einem Datenverarbeitungssystem dar, das geeignet ist, SIMD-Zeichenketten-Vergleichsoperationen auszuführen. In Übereinstimmung mit einer alternativen Ausführung kann das Datenverarbeitungssystem160 einen Hauptprozessor146 , einen SIMD-Koprozessor161 , einen Cachespeicher167 und ein Eingang/Ausgang-System168 umfassen. Das Eingang/Ausgang-System168 kann optional mit einer drahtlosen Schnittstelle169 gekoppelt sein. Der SIMD-Koprozessor161 ist geeignet, SIMD-Operationen einschließlich Zeichenketten-Vergleichsoperationen auszuführen. Der Verarbeitungskern170 kann geeignet sein, mit einer oder mehreren Verarbeitungstechniken gefertigt zu werden, und kann geeignet sein, indem er auf einem maschinenlesbaren Medium in ausreichendem Detail repräsentiert wird, die Fertigung des gesamten Datenverarbeitungssystems160 oder eines Teils von diesem einschließlich des Verarbeitungskerns170 zu vereinfachen. - In einer Ausführung umfaßt der SIMD-Koprozessor
161 eine Ausführungseinheit162 und einen Satz von einer oder mehreren Registerdatei(en)164 . Eine Ausführung des Hauptprozessors165 umfaßt einen Decoder165 , um Anweisungen des Anweisungssatzes163 einschließlich von SIMD-Zeichenketten-Vergleichsanweisungen zu erkennen, um sie durch die Ausführungseinheit162 auszuführen. In alternativen Ausführungen umfaßt der SIMD-Koprozessor161 auch zumindest einen Teil eines Decoders165B , um Anweisungen des Anweisungssatzes163 zu decodieren. Der Verarbeitungskern170 umfaßt auch zusätzliche Schaltungen (nicht gezeigt), die für das Verständnis von Ausführungen der vorliegenden Erfindung nicht notwendig sind. - Im Betrieb führt der Hauptprozessor
166 einen Strom von Datenverarbeitungsanweisungen aus, die Datenverarbeitungsoperationen einer allgemeinen Art steuern, einschließlich Interaktionen mit dem Cachespeicher167 und dem Eingang/Ausgang-System168 . In dem Strom von Datenverarbeitungsanweisungen sind SIMD-Koprozessoranweisungen eingebettet. Der Decoder165 des Hauptprozessors166 erkennt, daß diese SIMD-Koprozessoranweisungen von einer Art sind, die durch einen angeschlossenen SIMD-Koprozessor161 ausgeführt werden sollen. Daher gibt der Hauptprozessor166 diese SIMD-Koprozessoranweisungen (oder Steuersignale, die SIMD-Koprozessoranweisungen repräsentieren) auf den Koprozessor-Bus166 aus, von dem sie durch alle angeschlossenen SIMD-Koprozessoren empfangen werden. In diesem Fall akzeptiert der SIMD-Koprozessor161 alle empfangenen SIMD-Koprozessoranweisungen, die für ihn bestimmt sind, und führt diese aus. - Daten können über ein drahtlose Schnittstelle
169 zur Verarbeitung durch die SIMD-Koprozessoranweisungen empfangen werden. In einem Beispiel kann Sprachkommunikation in Form eines digitalen Signals empfangen werden, das durch die SIMD-Koprozessoranweisungen verarbeitet wird, um digitale Audio-Abtastwerte wiederherzustellen, die repräsentativ für die Sprachkommunikation sind. In einem anderen Beispiel kann komprimiertes Audio- und/oder Video in Form eines digitalen Bitstromes empfangen werden, der durch die SIMD-Koprozessoranweisungen verarbeitet wird, um die digitalen Audio-Abtastwerte und/oder bewegten Video-Rahmen wiederherzustellen. In einer Ausführung des Verarbeitungskerns170 sind der Hauptprozessor166 und ein SIMD-Koprozessor161 in einem einzigen Verarbeitungskern170 integriert, der eine Ausführungseinheit162 , einen Satz von einer oder mehreren Registerdatei(en)164 und einen Decoder165 umfaßt, um Anweisungen des Anweisungssatzes163 einschließlich von SIMD-Zeichenketten-Vergleichsanweisungen zuerkennen. - Die
2 ist ein Blockdiagramm der Mikroarchitektur für einen Prozessor200 , der Logikschaltungen umfaßt, um eine Zeichenketten-Vergleichsanweisung auszuführen, nach einer Ausführung der vorliegenden Erfindung. In einer Ausführung der Zeichenketten-Vergleichsanweisung kann die Anweisung jedes Datenelement eines ersten Operanden mit jedem Datenelement eines zweiten Operanden vergleichen und einen Indikator, ob es eine Übereinstimmung gibt, für jeden der Vergleiche speichern. In manchen Ausführungen kann die Zeichenketten-Vergleichsanweisung implementiert werden, um auf Datenelementen mit Größen von Byte, Wort, Doppelwort, Quadwort etc. und auf Datentypen, wie etwa Integer- und Fließkomma-Datentypen, zu operieren. In einer Ausführung ist das In-Order-Frontend201 der Teil des Prozessors200 , der Makroanweisungen, die ausgeführt werden sollen, abruft und sie vorbereitet, um später in der Prozessor-Pipeline verwendet zu werden. Das Frontend201 kann verschiedene Einheiten umfassen. In einer Ausführung ruft der Anweisungs-Vorabrufer226 Makroanweisungen aus dem Speicher ab und leitet sie an einen Anweisungs-Decodierer228 weiter, der sie wiederum in Grundelemente, die Mikroanweisungen oder Mikrooperationen (auch Mikro-Ops oder Uops genannt) genannt werden, zerlegt, die die Maschine ausführen kann. In einer Ausführung nimmt der Trace-Cache230 decodierte Uops und setzt sie in die Uop-Warteschlange234 als programm-geordnete Sequenzen oder Traces zur Ausführung zusammen. Wenn der Trace-Cache230 einer komplexen Makroanweisung begegnet, stellt das Mikrocode-ROM232 das benötigte Uop bereit, um die Operation fertigzustellen. - Viele Makroanweisungen werden in eine einzige Mikro-Op umgewandelt, wogegen andere verschiedene Mikro-Ops benötigen, um die volle Operation auszuführen. In einer Ausführung greift, wenn mehr als vier Mikro-Ops benötigt werden, um eine Makroanweisung fertigzustellen, der Decodierer
228 auf das Mikrocode-ROM232 zu, um die Makroanweisung auszuführen. In einer Ausführung kann eine gepackte Zeichenketten-Vergleichsanweisung in eine geringe Zahl von Mikro-Ops decodiert werden, um in dem Anweisungsdecodierer228 verarbeitet zu werden. In einer anderen Ausführung kann eine Anweisung für einen gepackten Zeichenketten-Vergleichsalgorithmus in dem Mikrocode-ROM232 gespeichert werden, sollte eine Anzahl von Mikroops benötigt werden, um die Operation zu beenden. Der Trace-Cache230 bezieht sich auf ein Einsprungstellen-Programmierbares Logikfeld (PLA), um einen korrekten Mikroanweisungszeiger zum Lesen der Mikrocode-Sequenzen für den Zeichenketten-Vergleichsalgorithmus in dem Mikrocode-ROM232 zu ermitteln. Nachdem das Mikrocode-ROM232 das Sequenzieren der Mikroops für die aktuelle Makroanweisung beendet hat, fährt das Frontend201 der Maschine mit dem Abrufen aus dem Trace-Cache230 fort. - Manche SIMD-Anweisungen und andere Arten von Multimediaanweisungen werden als komplexe Anweisungen betrachtet. Die meisten mit Fließkomma verknüpften Anweisungen sind ebenfalls komplexe Anweisungen. Als solches wird, wenn der Anweisungsdecodierer
228 auf eine komplexe Makroanweisung trifft, auf das Mikrocode-ROM232 an dem geeigneten Ort zugegriffen, um die Mikrocode-Sequenz für die Makroanweisung zu erhalten. Die verschiedenen Mikroops, die zur Ausführung der Makroanweisung benötigt werden, werden an die Out-of-Order-Engine203 übertragen, um an den geeigneten Integer- und Fließkomma-Ausführungseinheiten ausgeführt zu werden. - Die Out-of-Order-Engine
203 ist der Ort, an dem die Mikroanweisungen zur Ausführung vorbereitet werden. Die Out-of-Order-Ausführungslogik weist eine Anzahl von Puffer auf, um den Fluß von Mikroanweisungen zu glätten und neu zu ordnen, um die Leistung zu optimieren, wenn er der Pipeline folgt und zur Ausführung eingeteilt sind. Die Zuteilungslogik teilt die Maschinenpuffer und Ressourcen zu, die jedes der Uops benötigt, um ausgeführt zu werden. Die Register-Umbenennungslogik benennt Logikregister in Einträge in einer Registerdatei um. Der Zuteiler teilt auch einen Eintrag für jede der Uops in einer der beiden Uop-Warteschlangen zu, einen für Speicheroperationen und einen für Nicht-Speicheroperationen, bevor sie die Anweisungs-Scheduler erreichen: den Speicher-Scheduler, den schnellen Scheduler202 , den langsamen/allgemeinen Fließkomma-Scheduler204 und den einfachen Fließkomma-Scheduler206 . Die Uop-Scheduler202 ,204 ,206 bestimmen, wann ein Uop bereit ist, ausgeführt zu werden, basierend auf der Bereitschaft ihrer abhängigen Eingangsregister-Operandenquellen und der Bereitschaft der Ausführungsressourcen, die die Uops benötigen, um ihre Operation zu beenden. Der schnelle Scheduler202 dieser Ausführung kann auf jeder Hälfte des Haupt-Taktzyklus einteilen, während die anderen Scheduler nur einmal pro Hauptprozessorzyklus einteilen können. Die Scheduler verhandeln, damit die Dispatcher-Eingänge Uops zur Ausführung einteilen. - Die Registerdateien
208 ,210 liegen zwischen den Scheduler202 ,204 ,206 und den Ausführungseinheiten212 ,214 ,216 ,218 ,220 ,222 ,224 in dem Ausführungsblock211 . Es gibt eine getrennte Registerdatei208 ,210 für Integer- bzw. Fließkommaoperationen. In anderen Ausführungen können das Integer- und das Fließkommaregister in der selben Registerdatei angeordnet sein. Jede der Registerdateien208 ,210 dieser Ausführung umfaßt auch ein Umleitungsnetzwerk, das beendete Ergebnisse, die noch nicht in die Registerdatei geschrieben wurden, in neue abhängige Uops umleiten oder weiterleiten kann. Die Integer-Registerdatei208 und die Fließkomma-Registerdatei210 sind auch geeignet, miteinander zu kommunizieren. In einer Ausführung wird die Integer-Registerdatei208 in zwei getrennte Registerdateien aufgeteilt, eine Registerdatei für die niederwertigen 32 Datenbits und ein zweites Register für die höherwertigen 32 Datenbits. Die Fließkomma-Registerdatei210 einer Ausführung weist 128 Bit breite Eingänge auf, weil Fließkommaanweisungen üblicherweise Operanden von 64 bis 128 in der Breite aufweisen. - Der Ausführungsblock
211 umfaßt die Ausführungseinheiten212 ,214 ,216 ,218 ,220 ,222 ,224 , wo die Anweisungen tatsächlich ausgeführt werden. Dieser Abschnitt umfaßt die Registerdateien208 ,210 , die die Integer- und Fließkommadaten-Operandenwerte speichern, die die Mikroanweisungen benötigen, um ausgeführt zu werden. Der Prozessor200 dieser Ausführung umfaßt eine Anzahl von Ausführungseinheiten: eine Adreß-Erzeugungseinheiten (Address Generation Unit, AGU)212 , eine AGU214 , eine schnelle ALU216 , eine schnelle ALU218 , eine langsame ALU220 , eine Fließkomma-ALU222 , eine Fließkomma-Verschiebungseinheit224 . In dieser Ausführung führen die Fließkomma-Ausführungsblocks222 ,224 Fließkomma-, MMX-, SIMD- und SSE-Operationen aus. Die Fließkomma-ALU222 dieser Ausführung umfaßt eine 64-Bit-mal-64-Bit-Fließkomma-Dividiereinrichtung, um Divisions-, Wurzel und Restwert-Mikroops auszuführen. In Ausführungen der vorliegenden Erfindung tritt jede Aktion, die einen Fließkommawert einschließt, in der Fließkomma-Hardware ein. Beispielsweise schließen Umwandlungen zwischen dem Integer-Format und dem Fließkomma-Format eine Fließkomma-Registerdatei ein. Ähnlich treten eine Fließkomma-Divisionsoperation an einer Fließkomma-Dividiereinrichtung auf. Auf der anderen Seite werden Nicht-Fließkomma-Zahlen und Integer-Typen mit Integer-Hardwareressourcen gehandhabt. Die einfachen, sehr häufigen ALU-Operationen werden zu den ALU-Hochgeschwindigkeits-Ausführungseinheiten216 ,218 verschoben. Die schnellen ALUs216 ,218 dieser Ausführung können schnelle Operationen mit einer effektiven Latenzzeit von einem halben Taktzyklus ausführen. In einer Ausführung werden die meisten komplexen Integer-Operationen zu dem langsamen ALU220 verschoben, da die langsame ALU220 Integer-Ausführungshardware für Operationen eines Typs mit langer Latenzzeit, wie etwa Multiplikationen, Verschiebungen, Flag-Logik und Verzweigungs-Verarbeitung umfaßt. Speicher-Lade-/Sicherungsoperationen werden durch die AGUs212 ,214 ausgeführt. In dieser Ausführung werden die Integer-ALUs216 ,218 ,220 im Zusammenhang mit der Durchführung von Integer-Operationen auf 64-Bit-Daten beschrieben. In alternativen Ausführungen können die ALUs216 ,218 ,220 implementiert werden, um eine Anzahl von Datenbits, einschließlich 16, 32, 128, 256 etc. zu unterstützen. Ähnlich können die Fließkomma-Einheiten222 ,224 implementiert werden, um einen Bereich von Operanden mit unterschiedlichen Breiten an Bits zu unterstützen. In einer Ausführung könne die Fließkomma-Einheiten222 ,224 auf gepackten Datenoperanden mit 128 Bits Breite zusammen mit SIMD- und Multimedia-Anweisungen operieren. - In dieser Ausführung teilen die Uop-Scheduler
202 ,204 ,206 abhängige Operationen, bevor die vorhergehende Ladung mit die Ausführung beendet hat. Da Uops spekulativ eingeteilt werden und in dem Prozessor200 ausgeführt werden, umfaßt der Prozessor200 auch Logik, um Speicherfehlzugriffe zu behandeln. Wenn auf eine Datenladung im Cache fehlzugegriffen wird, kann es abhängige Operationen in der Ausführung in der Pipeline geben, die den Scheduler mit zeitweilig inkorrekten Daten verlassen haben. Ein Wiederabspiel-Mechanismus verfolgt Anweisungen, die inkorrekte Daten verwenden, und führt sie nochmals aus. Nur die abhängigen Operationen müssen wieder abgespielt werden und den unabhängigen kann erlaubt werden, zu beenden. Die Scheduler und der Wiederabspiel-Mechanismus einer Ausführung eines Prozessors sind auch entworfen, um Anweisungssequenzen für Zeichenketten-Vergleichsoperationen abzufangen. - Der Begriff „Register” wird hier so verwendet, daß er sich auf die Speicherplätze innerhalb des Prozessors bezieht, die als Teil von Makroanweisungen verwendet werden, um Operanden zu identifizieren. Mit anderen Worten sind die Register, auf die hier Bezug genommen wird, diejenigen, die (Vom Standpunkt eines Programmierers) von außerhalb des Prozessors sichtbar sind. Die Register einer Ausführung sollten jedoch in ihrer Wortbedeutung nicht auf eine besondere Art von Schaltkreis eingeschränkt sein. Statt dessen müssen die Register einer Ausführung nur geeignet sein, Daten zu speichern und bereitzustellen und die hier beschriebenen Funktionen ausführen können. Die hier beschriebenen Register können in einem Prozessor durch Schaltungen unter Verwendung einer Anzahl von unterschiedlichen Techniken implementiert werden, wie etwa zweckgebundene physische Register, physische Register, die mittels Register-Umbenennung dynamisch zugeteilt werden, Kombinationen von zweckgebundenen und dynamisch zugeteilten physischen Registern etc. In einer Ausführung speichern Integer-Register Zweiunddreißig-Bit-Integer-Daten. Eine Registerdatei einer Ausführung umfaßt auch acht SIMD-Multimedia-Register für gepackte Daten. In der Erörterung unten sollen die Register so verwendet werden, daß sie Datenregister sind, die entworfen sind, um gepackte Daten zu halten, wie etwa 64 Bit breite MMXTM-Register (in manchen Fällen auch als „mm”-Register bezeichnet) in Mikroprozessoren von der Intel Corporation in Santa Clara, Kalifornien, die mit MMX-Technologie ausgestattet sind. Diese MMX-Register, die sowohl in der Integer- als auch der Fließkomma-Form verfügbar sind, können mit gepackten Datenelementen betrieben werden, die SIMD- und SSE-Anweisungen begleiten. Ähnlich können auch 128 Bit breite XMM-Register, die zu SSE2-, SSE3-, SSE4-Technologie und darüber hinaus (allgemein als „SSEx” bezeichnet) gehören, verwendet werden, um solche gepackten Datenoperanden zu halten. In dieser Ausführung müssen die Register beim Speichern von gepackten Daten und Integer-Daten nicht zwischen diesen beiden Datentypen unterscheiden.
- In den Beispielen der folgenden Figuren werden eine Anzahl von Datenoperanden beschrieben. Die
3A stellt verschiedene gepackte Datentypen-Repräsentationen in Multimedia-Registern nach einer Ausführung der vorliegenden Erfindung dar. Die3 stellt Datentypen für ein gepacktes Byte310 , ein gepacktes Wort320 und ein gepacktes Doppelwort (Dword)330 für 128 Bit breite Operanden dar. Das gepackte Byte-Format310 dieses Beispiels ist 128 Bits lang und umfaßt sechzehn gepackte Byte-Datenelemente. Ein Byte ist hier als 8 Bits an Daten definiert. Informationen für jedes der Byte-Datenelemente wird in Bit 7 bis Bit 0 für das Byte 0, Bit 15 bis Bit 7 für das Byte 1, Bit 23 bis Bit 16 für das Byte 2 bis hin zu Bit 127 bis Bit 120 für Byte 15 gespeichert. Somit werden alle verfügbaren Bits in dem Register verwendet. Diese Speicheranordnung erhöht die Speichereffizienz des Prozessors. Wenn auf sechzehn Datenelemente zugegriffen wird, kann eine Operation nun parallel auf sechzehn Datenelemente ausgeführt werden. - Im allgemeinen ist ein Datenelement eine einzelne Datenmenge, die in einem einzigen Register oder Speicherplatz mit anderen Datenelementen der gleichen Länge gespeichert wird. Bei gepackten Datensequenzen, die sich auf SSEx-Technologie beziehen, beträgt die Anzahl von Datenelementen, die in einem XMM-Register gespeichert werden, 128 Bits geteilt durch die Länge eines einzelnen Datenelements in Bits. Ähnlich beträgt bei gepackten Datensequenzen, die sich auf MMX- und SSE-Technologie beziehen, die Anzahl von Datenelementen, die in einem MMX-Register gespeichert werden, 64 Bits geteilt durch die Länge eines einzelnen Datenelements in Bits. Obwohl die in der
3A dargestellten Datentypen 128 Bit lang sind, können Ausführungen der vorliegenden Erfindung auch mit Operanden einer Breite von 64 Bits oder einer anderen Länge arbeiten. Das gepackte Wort-Format320 dieses Beispiels ist 128 Bits lang und umfaßt acht gepackte Wort-Datenelemente. Jedes der gepackten Worte umfaßt sechzehn Bits an Information. Das gepackte Doppelwort-Format von3A ist 128 Bits lang und umfaßt vier gepackte Doppelwort-Datenelemente. Jedes der gepackten Doppelwort-Datenelemente umfaßt zweiunddreißig Bits an Information. Ein gepacktes Quadwort ist 128 Bits lang und umfaßt zwei gepackte Quadwort-Datenelemente. - Die
3B stellt alternative Datenspeicherformate im Register dar. Jede der gepackten Daten können mehr als ein unabhängiges Datenelement umfassen. Drei gepackte Datenformate werden dargestellt; gepacktes Halbwort341 , gepacktes Einzelwort342 und gepacktes Doppelwort343 . Eine Ausführung des gepackten Halbworts341 , gepackten Einzelworts342 und gepackten Doppelworts343 umfaßt Festkomma-Datenelemente. In einer alternativen Ausführung können ein oder mehrere der gepackten Halbwörter341 , gepackten Einzelwörter342 und gepackten Doppelwörter343 Fließkomma-Datenelemente umfassen. Eine alternative Ausführung des gepackten Halbwortes342 ist hundertachtundzwanzig Bits lang und umfaßt acht 16-Bit-Datenelemente. Eine alternative Ausführung des gepackten Einzelwortes343 ist hundertachtundzwanzig Bits lang und umfaßt vier 32-Bit-Datenelemente. Eine Ausführung des gepackten Doppelwortes342 ist hundertachtundzwanzig Bits lang und umfaßt zwei 64-Bit-Datenelemente. Man wird anerkennen, daß solche gepackten Datenformate auf andere Registerlängen erweitert werden können, Beispielsweise auf 96-Bits, 160-Bits, 224-Bits, 256-Bits und andere. - Die
3C stellt verschiedene gepackte Datentypen-Repräsentationen mit und ohne Vorzeichen in Multimediaregistern dar, nach einer Ausführung der vorliegenden Erfindung. Die gepackte Byte-Repräsentation ohne Vorzeichen334 stellt den Speicher eines gepackten Bytes in einem SIMD-Register dar. Informationen für jedes der Byte-Datenelemente wird in Bit sieben bis Bit null für das Byte Null, Bit fünfzehn bis Bit acht für das Byte eins, Bit dreiundzwanzig bis Bit sechzehn für das Byte zwei bis hin zu Bit hundertsiebenundzwanzig bis hundertzwanzig für Byte fünfzehn gespeichert. Somit werden alle verfügbaren Bits in dem Register verwendet. Diese Speicheranordnung kann die Speichereffizienz des Prozessors erhöhen. Zudem kann, wenn auf sechzehn Datenelemente zugegriffen wird, eine Operation auf sechzehn Datenelementen in einer parallelen Weise ausgeführt werden. Die gepackten Byte-Repräsentationen mit Vorzeichen345 stellen die Speicherung eines gepackten Bytes mit Vorzeichen dar. Man beachte, daß das achte Bit jedes Byte-Datenelements der Vorzeichen-Indikator ist. Die gepackte Wort-Repräsentation ohne Vorzeichen346 stellt dar, wie Wort sieben bis Wort null in einem SIMD-Register gespeichert werden. Die gepackte Wort-Repräsentation mit Vorzeichen347 ähnelt der gepackten Wort-Repräsentation ohne Vorzeichen346 im Register. Man beachte, daß das sechzehnte Bit jedes der Wort-Datenelemente der Vorzeichen-Indikator ist. Die gepackte Doppelwort-Repräsentation ohne Vorzeichen348 zeigt, wie Doppelwort-Datenelemente gespeichert werden. Die gepackte Doppelwort-Repräsentation mit Vorzeichen349 ähnelt der gepackten Doppelwort-Repräsentation ohne Vorzeichen348 im Register. Man beachte, daß das notwendige Vorzeichen-Bit das sechsunddreißigste Bit jedes der Doppelwort-Datenelemente ist. In einer Ausführung können ein oder mehrere Operanden konstant sein und sich daher nicht zwischen Instanzen von einer oder mehr Anweisungen, zu denen sie gehören, ändern. - Die
3D ist eine Darstellung einer Ausführung eines Operationscode-Formats (Opcode)360 mit zweiunddreißig oder mehr Bits und Register-/Speicher-Operanden-Adressierungsmoden, mit einer Art von Opcode-Format, das in der „IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference” beschrieben ist, die von der Intel Corporation, Santa Clara, Kalifornien auf dem World Wide Web (www) bei intel.com/design/litcentr verfügbar ist. In einer Ausführung kann eine Zeichenketten-Vergleichsoperation durch eine oder mehrere Felder361 und362 codiert werden. Bis zu zwei Operandenorte pro Anweisung können angegeben werden, einschließlich bis zu zwei Quellen-Operandenbezeichner364 und365 . In einer Ausführung der Zeichenketten-Vergleichsoperation ist der Ziel-Operandenbezeichner366 der gleiche wie der Quellen-Operandenbezeichner364 , wogegen sie sich in anderen Ausführungen unterscheiden. In einer alternativen Ausführung ist der Ziel-Operandenbezeichner366 der gleiche wie der Quellen-Operandenbezeichner365 , wogegen sie sich in anderen Ausführung unterscheiden. In einer Ausführung einer Zeichenketten-Vergleichsanweisung wird einer der Quellen-Operanden, die durch die Quellen-Operandenbezeichner364 und365 identifiziert werden, durch die Ergebnisse der Zeichenketten-Vergleichsoperationen überschrieben, wogegen in anderen Ausführungen der Bezeichner364 zu einem Quellen-Registerelement gehört und der Bezeichner365 zu einem Ziel-Registerelement gehört. In einer Ausführung der Zeichenketten-Vergleichsanweisung können die Operandenbezeichner364 und365 verwendet werden, um 32-Bit- oder 64-Bit-Quellen- und Ziel-Operanden zu identifizieren. - Die
3E ist eine Darstellung eines alternativen Operationscode-Formats (Opcode-Format)370 mit vierzig oder mehr Bits. Das Opcode-Format370 entspricht dem Opcode-Format360 und umfaßt ein optionales Präfix-Byte378 . Die Art von Zeichenketten-Vergleichsoperation kann durch eine oder mehr Felder378 ,371 und372 codiert werden. Bis zu zwei Operandenorte pro Anweisungen können durch die Quellen-Operandenbezeichner374 und375 und durch das Präfix-Byte378 identifiziert werden. In einer Ausführung der Zeichenketten-Vergleichsanweisung kann das Präfix-Byte378 verwendet werden, um 32-Bit, 64-Bit oder 128-Bit-Quellen- und Ziel-Operanden zu identifizieren. In einer Ausführung der Zeichenketten-Vergleichsanweisung ist der Ziel-Operandenbezeichner376 der gleiche wie der Quellen-Operandenbezeichner374 , wogegen sie sich in anderen Ausführungen unterscheiden. In einer alternativen Ausführung ist der Ziel-Operandenbezeichner376 der gleiche wie der Quellen-Operandenbezeichner375 , wogegen sie sich in anderen Ausführungen unterscheiden. In einer Ausführung vergleichen die Zeichenketten-Vergleichsoperationen jedes der Elemente eines der Operanden, die durch die Operandenbezeichner374 und375 identifiziert werden, mit jedem der Elemente eines anderen Operanden, der durch die Operandenbezeichner374 und375 identifiziert wird [...] wird mit den Ergebnissen der Zeichenketten-Vergleichsoperationen überschrieben, wogegen in anderen Ausführungen der Zeichenketten-Vergleich der Operanden, die von den Bezeichnern374 und375 identifiziert werden, in ein anderes Datenelement in einem anderen Register geschrieben [wird] werden. Die Opcode-Formate360 und370 erlauben eine Register-zu-Register-, Speicher-zu-Register-, Register-durch-Speicher-, Register-durch-Register-, Register-durch-Aktuell-, Register-zu-Speicher-Adressierung, die teilweise durch die MOD-Felder363 und373 und durch optionale Scale-Index-Base- und Verschiebungs-Bytes spezifiziert werden. - Betrachtet man nun die
3F , so kann in manchen alternativen Ausführungen eine arithmetische SIMD-Operation (single instruction multiple data) durch eine Koprozessor-Datenverarbeitungsanweisung (CDP-Anweisung) ausgeführt werden. Das Operationscode-Format (Opcode-Format)380 stellt eine solche CDP-Anweisung mit CDP-Opcode-Felder382 und389 dar. Die Art von CDP-Anweisung kann in alternativen Ausführungen der Zeichenketten-Vergleichsoperationen durch ein oder mehrere Felder383 ,384 ,387 und388 codiert sein. Bis zu drei Operandenorte pro Anweisung können identifiziert werden, einschließlich bis zu zwei Quellen-Operanden-Bezeichner385 und390 und eine Ziel-Operanden-Bezeichner386 . Eine Ausführung des Koprozessors kann auf 8-, 16-, 32- und 64-Bit-Werten operieren. In einer Ausführung wird die Zeichenketten-Vergleichsoperation auf Integer-Datenelementen ausgeführt. In manchen Ausführungen kann eine Zeichenketten-Vergleichsanweisung bedingt mittels des Bedingungsfeldes381 ausgeführt werden. In manchen Ausführungen der Zeichenketten-Vergleichsanweisung, kann Null- (Z), Negativ- (N), Übertrag- (C) und Überlauf-Detektion (V) in den SIMD-Feldern ausgeführt werden. Für manche Anweisungen kann die Art der Sättigung durch das Feld384 codiert werden. - In einer Ausführung können Felder oder „Flags” verwendet werden, um anzuzeigen, wann das Ergebnis einer Zeichenketten-Vergleichsoperation ungleich Null ist. In manchen Ausführungen können andere Felder verwendet werden; solche Flags, um anzuzeigen, ob ein Quellen-Element ungültig ist, sowie Flags, um ein niedrigstwertiges oder höchstwertiges Bit eines Ergebnisses der Zeichenketten-Vergleichsoperation anzuzeigen.
- Die
4 ist ein Blockdiagramm einer Ausführung von Logik, um eine Zeichenketten-Vergleichsoperation auf gepackten Datenoperanden auszuführen, nach der vorliegenden Erfindung. Ausführungen der vorliegenden Erfindung können implementiert werden, um mit verschiedenen Arten von Operanden, wie etwa den oben beschriebenen, arbeiten zu können. In einer Ausführung werden die Zeichenketten-Vergleichsoperationen nach der vorliegenden Erfindung als ein Satz von Anweisungen implementiert, um auf speziellen Datentypen zu operieren. Beispielsweise wird eine gepackte Zeichenketten-Vergleichsanweisung bereitgestellt, um einen Vergleich von 32-Bit-Datentypen, einschließlich von Integer und Fließkomma, auszuführen. Ähnlich wird eine gepackte Zeichenketten-Vergleichsanweisung bereitgestellt, um einen Vergleich von 64-Bit-Datentypen, einschließlich Integer und Fließkomma, auszuführen. Die folgende Erörterung und die folgenden Beispiele sollen die Operation einer Vergleichsanweisung erläutern, um Datenelemente zu vergleichen, ungeachtet dessen, was die Elemente repräsentieren. Der Einfachheit halber erläutern manche Beispiele die Operation einer oder mehrerer Zeichenketten-Vergleichsanweisungen, wobei die Datenelemente Text-Worte repräsentieren. - In einer Ausführung vergleicht eine Zeichenketten-Vergleichsanweisung jedes der Elemente eines ersten Datenoperanden DATA A
410 mit jedem der Elemente eines zweiten Datenoperanden DATA B420 , und das Ergebnis jedes der Vergleiche wird in einem RESULTANT-Register440 gespeichert. In der folgenden Erörterung wird auf DATA A, DATA B und RESULTANT im allgemeinen als Register Bezug genommen, sie sind aber dadurch nicht eingeschränkt und können auch Register, Registerdateien und Speicherplätze umfassen. In einer Ausführung wird eine Zeichenketten-Vergleichsoperation (z. B. „PCMPxSTRy”) in eine Mikrooperationen decodiert. In einer alternativen Ausführung kann jede der Anweisungen in eine unterschiedliche Zahl von Mikro-Ops decodiert werden, um die Zeichenketten-Vergleichsoperation auf den Datenoperanden auszuführen. In diesem Beispiel sind die Operanden410 ,420 128-Bit-breite Informationsstücke, die in einem Register/Speicher mit Datenelementen von einem Wort Breite gespeichert werden. In einer Ausführung werden die Operanden410 ,420 in SIMD-Registern von 128 Bit Länge gehalten, wie etwa 128-Bit-SSEx-XMM-Registern. In einer Ausführung ist der RESULTANT440 auch ein XMM-Datenregister. In anderen Ausführungen kann der RESULTANT440 eine andere Art von Register sein, wie etwa ein erweitertes Register (z. B. „EAX”) oder ein Speicherplatz sein. Abhängig von der speziellen Implementierung können die Operanden und Register andere Längen aufweisen, wie etwa 32, 64 und 256 Bits, und können Datenelemente von Byte-, Doppelwort- und Quadwort-Größe aufweisen. Obwohl die Datenelemente dieses Beispiels Wort-Länge aufweisen, kann das gleiche Konzept auf Elemente von Byte- oder Doppelwort-Größe erweitert werden. In einer Ausführung, in der die Datenoperanden64 Bits breit sind, werden MMX-Register anstatt der XMM-Register verwendet. - In einer Ausführung umfaßt der erste Operand
410 einen Satz von acht Datenelementen: A7, A6, A5, A4, A3, A2, A1 und A0. Jeder Vergleich zwischen Elementen des ersten und des zweiten Operanden können zu einer Datenelement-Position in dem Resultanten440 gehören. In einer Ausführung umfaßt der zweite Operand420 einen anderen Satz von acht Datenelementen: B7, B6, B5, B4, B3, B2, B1 und B0. Die Datensegmente haben hier eine gleiche Länge und umfassen jeweils ein einziges Wort (16 Bits) an Daten. Die Datenelemente und Datenelement-Positionen können jedoch Granularitäten, die von Wort abweichen, aufweisen. Wäre jedes der Elemente ein Byte (8 Bits), ein Doppelwort (32 Bits) oder ein Quadwort (64 Bits), so hatten die 128-Bit-Operanden eine Breite von sechzehn Bytes, vier Doppelworten bzw. zwei Quadworten. Ausführungen der vorliegenden Erfindung sind nicht auf Datenoperanden oder Datensegmente einer besonderen Länge eingeschränkt und können für jede Implementierung angemessen dimensioniert werden. - Die Operanden
410 ,420 können entweder in einem Register oder einem Speicherplatz oder einer Registerdatei oder einer Mischung daraus liegen. Die Datenoperanden410 ,420 werden an die Zeichenketten-Vergleichslogik430 einer Ausführungseinheit in dem Prozessor zusammen mit einer Zeichenketten-Vergleichsanweisung gesandt. Zu dem Zeitpunkt, an dem die Anweisungen die Ausführungseinheit erreichen, können die Anweisungen in einer Ausführung vorher in der Prozessor-Pipeline decodiert worden sein. Daher kann die Zeichenketten-Vergleichsoperation in Form einer Mikrooperationen (Uop) oder irgendeinem anderen decodierten Format vorliegen. In einer Ausführung werden die beiden Datenoperanden410 ,420 an Zeichenketten-Vergleichslogik430 empfangen. In einer Ausführung erzeugt die Zeichenketten-Vergleichslogik eine Indikation, ob Elemente der beiden Datenoperanden gleich sind. In einer Ausführung werden nur gültige Elemente jedes der Operanden verglichen, was durch ein anderes Register oder einen anderen Speicherplatz für jedes der Elemente in jedem der Operanden angezeigt werden kann. In einer Ausführung wird jedes der Elemente des Operanden410 mit jedem der Elemente des Operanden420 verglichen, was eine Anzahl von Vergleichsergebnissen erzeugen kann, die gleich der Anzahl von Elementen des Operanden410 multipliziert mit der Anzahl von Elementen des Operanden420 ist. In dem Fall, in dem jeder der Operanden410 und420 32-Bit-Werte sind, speichert das Resultanten-Register440 bis zu 32 × 32 Ergebnisindikatoren der Text-Vergleichsoperation, die durch die Zeichenketten-Vergleichslogik430 ausgeführt wurde. In einer Ausführung sind die Datenelemente des ersten und des zweiten Operanden von einfacher Genauigkeit (z. B. 32 Bit), wogegen in anderen Ausführungen die Datenelemente des ersten und des zweiten Operanden von doppelter Genauigkeit (z. B. 64 Bit) sind. In noch anderen Ausführungen können der erste und der zweite Operand Integer-Elemente jeder Größe umfassen, einschließlich 8, 16 und 32 Bits. - In einer Ausführung werden die Datenelemente für alle der Datenpositionen parallel verarbeitet. In einer anderen Ausführung kann ein bestimmter Anteil der Datenelement-Positionen zugleich zu einem Zeitpunkt verarbeitet werden. In einer Ausführung umfaßt die Resultante
440 mehrere Ergebnisse der Vergleiche, die zwischen jedem der Datenelemente, die in dem Operanden410 und420 gespeichert sind, ausgeführt wurden. Insbesondere kann in einer Ausführung die Resultante eine Anzahl von Vergleichsergebnissen speichern, die gleich dem Quadrat der Anzahl von Datenelementen in einem der Operanden410 oder420 ist. - In einer Ausführung kann die Resultante nur Vergleichsergebnisse für Vergleiche speichern, die zwischen gültigen Datenelementen der Operanden
410 und420 vorgenommen werden. In einer Ausführung können die Datenelemente jedes der Operanden explizit oder implizit als gültig angezeigt werden. In einer Ausführung entspricht beispielsweise jedes der Operanden-Datenelemente einem Gültigkeitsindikator, wie etwa einem Gültigkeits-Bit, das in einem anderen Speicherbereich gespeichert ist, wie etwa einem Gültigkeits-Register. In einer Ausführung können Gültigkeits-Bits für jedes der Elemente von beiden Operanden in dem gleichen Gültigkeits-Register gespeichert werden, wogegen in anderen Ausführungen die Gültigkeits-Bits für einen Operanden in einem ersten Gültigkeits-Register gespeichert werden und die Gültigkeits-Bits für den anderen Operanden in einem zweiten Gültigkeits-Register gespeichert werden. Bevor die Operanden-Datenelemente verglichen werden, oder gleichzeitig, kann eine Ermittlung ausgeführt werden, ob beide Datenelemente gültig sind (zum Beispiel durch die Prüfung der zugehörigen Gültigkeits-Bits), so daß die Vergleiche nur zwischen gültigen Datenelementen ausgeführt werden. - In einer Ausführung können die gültigen Datenelemente implizit durch die Verwendung von Null- oder „Zero”-Feldern angezeigt werden, die in einem oder beiden der Operanden gespeichert werden. In einer Ausführung kann beispielsweise ein Null-Byte (oder andere Größe) in einem Element gespeichert werden, um anzuzeigen, daß alle höherwertigeren Datenelemente als das Null-Byte ungültig sind, wogegen alle niederwertigeren Datenelemente als das Null-Byte gültig sind und daher mit den entsprechenden gültigen Datenelementen des anderen Operanden verglichen werden sollen. Darüber hinaus können in einer Ausführung die gültigen Datenelemente eines der Operanden explizit angezeigt werden (wie vorher beschrieben), wogegen die gültigen Datenelemente des anderen Operanden implizit mittels Null-Feldern angezeigt werden können. In einer Ausführung werden gültige Datenelemente durch einen Zähler angezeigt, der der Anzahl von gültigen Datenelementen oder Unter-Datenelementen in einem oder mehreren Quellen-Operanden entspricht.
- Ungeachtet des Verfahrens, durch das gültige Elemente jedes der Operanden angezeigt werden, vergleicht zumindest eine Ausführung nur Datenelemente jedes der Operanden, die so angezeigt werden, daß sie gültig sind. Das ausschließliche Vergleichen von gültigen Datenelementen kann in einer Anzahl von Arten in verschiedenen Ausführungen ausgeführt werden. Zu dem Zweck, eine gründliche und verständliche Beschreibung bereitzustellen, kann das Verfahren, durch das nur gültige Datenelemente zwischen zwei Zeichenketten-Operanden verglichen werden, am besten wie folgt konzeptualisiert werden. Die folgende Beschreibung ist jedoch nur ein Beispiel davon, wie das Vergleichen von ausschließlich gültigen Datenelementen von Zeichenketten-Operanden konzeptualisiert oder implementiert werden kann. In anderen Ausführungen können andere Konzeptualisierungen oder Verfahren verwendet werden, um darzustellen, wie gültige Datenelemente verglichen werden.
- Ungeachtet dessen, ob die Anzahl von gültigen Datenelementen in den Operanden explizit angezeigt ist (z. B. über Gültigkeits-Bits in einem Gültigkeits-Register oder durch ein Abzählen der Anzahl von gültigen Bytes/Wörtern, angefangen bei dem niedrigstwertigen) oder implizit angezeigt ist (z. B. über Null-Zeichen innerhalb der Operanden selbst), werden in einer Ausführung nur die gültigen Datenelemente jedes der Operanden miteinander verglichen. In einer Ausführung kann die Aggregation der Gültigkeits-Indikatoren und der Datenelemente, die verglichen werden sollen, in der
5 konzeptualisiert werden. - Mit Bezug auf die
5 umfassen in einer Ausführung die Arrays501 und505 Einträge, die anzeigen, ob jedes der Elemente eines ersten Operanden bzw. eines zweiten Operanden gültig sind. In der obigen Darstellung kann der Array501 eine „1” in jedem seiner Arrayelemente, für die ein erster Operand ein entsprechendes gültiges Datenelement aufweist, enthalten. Ähnlich kann der Array505 eine „1” in jedem seiner Arrayelemente, für die ein zweiter Operand ein entsprechendes gültiges Datenelement aufweist, enthalten. In einer Ausführung können die Arrays501 und505 Einsen aufweisen, beginnend mit dem Arrayelement Null, für jedes gültige Element, das in jedem der beiden jeweiligen Operanden vorhanden ist. Wenn beispielsweise ein erster Operand vier gültige Elemente aufweist, kann in einer Ausführung der Array501 nur in den ersten vier Arrayelementen Einsen aufweisen, und alle anderen Arrayelemente des Arrays501 können Nullen sein. - In einer Ausführung weisen die Arrays
501 und505 jeweils 16 Elemente mit Größen auf, um 16 Datenelemente der zwei 128-Bit-Operanden zu repräsentieren, die jeweils 8 Bits (1 Byte) groß sind. In anderen Ausführungen, bei denen die Datenelemente der Operanden eine Größe von 16 Bits (1 Wort) aufweisen, können die Arrays501 und505 nur 8 Elemente umfassen. In anderen Ausführungen können die Arrays501 und505 größer oder kleiner sein, abhängig von der Größe der Operanden, zu denen sie gehören. - In einer Ausführung wird jedes der Datenelemente eines ersten Operanden mit jedem der Datenelemente eines zweiten Operanden verglichen, und das Ergebnis kann durch einen i × j-Array
510 dargestellt werden. Beispielsweise kann ein erstes Datenelement eines ersten Operanden, der eine Zeichenkette repräsentiert, als Beispiel mit jedem der Datenelemente in einem anderen Operanden, der eine andere Zeichenkette repräsentiert, verglichen werden, und eine „1” kann in jedem der Arrayelemente in der ersten Reihe des Arrays510 gespeichert werden, die einer Übereinstimmung zwischen dem ersten Datenelement des ersten Operanden und jedem der Datenelemente des zweiten Operanden entspricht. Dies kann für jedes der Datenelemente in dem ersten Operanden wiederholt werden, bis der Array510 fertiggestellt ist. - In einer Ausführung kann ein zweiter Array
515 von i × j Einträgen erzeugt werden, um Indikationen darüber zu speichern, ob nur gültige Operanden-Datenelemente gleich sind. In einer Ausführung kann beispielsweise auf jeden Eintrag der oberen Reihe511 des Arrays510 ein logisches AND mit dem entsprechenden gültigen Arrayelement506 und dem gültigen Arrayelement502 , und das Ergebnis kann in das entsprechende Element516 des Arrays515 plaziert werden. Die AND-Operation kann zwischen jedem der Elemente des Arrays510 und den entsprechenden Elementen in den gültigen Arrays501 und505 ausgeführt werden, und das Ergebnis kann in das entsprechende Element des Arrays520 plaziert werden. - In einer Ausführung kann der Ergebnisarray
520 das Vorhandensein von Datenelementen in einem Operanden anzeigen, die Beziehungen zu einem oder mehreren Datenelementen in dem anderen Operanden aufweisen. Der Ergebnisarray520 kann beispielsweise Bits speichern, um anzuzeigen, ob es irgendwelche Datenelemente gibt, die in irgendeinem eines Satzes von Bereichen liegt, der durch Datenelemente in dem anderen Operanden definiert ist, indem auf Paare von Elementen des Arrays515 AND ausgeführt wird und auf alle der Resultate der AND-Operation OR ausgeführt wird. - Die
5 stellt auch einen Ergebnisarray520 dar, um verschiedene Indikatoren zu speichern, die den Vergleich zwischen Datenelementen von zumindest zwei gepackten Operanden betreffen. Der Ergebnisarray520 kann beispielsweise Bits speichern, um anzuzeigen, ob es irgendwelche gleichen Datenelemente zwischen den zwei Operanden gibt, indem er eine OR-Operation auf die entsprechenden Elemente des Arrays515 ausführt. Wenn irgendeiner der Arrayelemente des Arrays515 eine „1” aufweist, was anzeigt, daß eine Übereinstimmung zwischen gültigen Datenelementen der Operanden existiert, so kann die in dem Ergebnisarray520 reflektiert werden, auf dessen Elemente ebenfalls OR ausgeführt wird, um zu ermitteln, ob irgendwelche gültigen Datenelemente der Operanden gleich sind. - In einer Ausführung wird eine zusammenhängende Kette von gültigen Übereinstimmungen zwischen den Datenelementen von zwei Operanden in dem Ergebnisarray
520 detektiert, indem angrenzende „1”-Werte in dem Array detektiert werden. In einer Ausführung kann die erreicht werden, indem auf zwei zusammenhängende Elemente des Ergebnisarrays AND angewandt wird, und auf das Ergebnis einer AND-Operation und den nächsten Ergebniseintrag AND angewandt wird, bis eine „0” detektiert wird. In anderen Ausführungen kann andere Logik verwendet werden, um einen Bereich von gültigen Datenelementen in zwei gepackten Operanden zu detektieren. - In einer Ausführung kann der Ergebnisarray
520 anzeigen, ob jedes der Datenelemente der beiden Operanden übereinstimmen, indem er beispielsweise eine „1” in dem zugehörigen Ergebnisarray-Eintrag zurückgibt. Um zu ermitteln, ob alle der Einträge gleich sind, kann eine XOR-Operation auf die Ergebnisarray-Einträge ausgeführt werden. In anderen Ausführungen können andere Logiken verwendet werden, um zu ermitteln, ob jedes der gültigen Datenelemente der beiden Operanden gleich sind. - In einer Ausführung kann das Vorhandensein einer Kette von Datenelementen irgendwo in einer andere Kette von Datenelementen detektiert werden, indem eine Testkette mit Abschnitten der anderen Kette von gleicher Größe verglichen werden und eine Übereinstimmung zwischen der Testkette und dem Abschnitt der anderen Kette in dem Ergebnisarray angezeigt wird. In einer Ausführung kann beispielsweise eine Testkette von drei Buchstaben, die zu drei Datenelementen in einem ersten Operanden gehören, mit einem ersten Satz von drei Datenelementen einer zweiten Kette verglichen werden. Wenn eine Übereinstimmung detektiert wird, kann die Übereinstimmung in dem Ergebnisarray wiedergegeben werden, indem ein oder mehrere „1”-Werte in einer oder mehrerer der Gruppen von drei Ergebniseinträgen, die zu der Übereinstimmung gehören, gespeichert wird. Die Testkette kann dann mit den nächsten drei Datenelementen des anderen Operanden verglichen werden oder zwei der vorhergehenden Operanden-Datenelementen und ein neues drittes Datenelement können mit der Testkette so verglichen werden, daß die Testkette an den anderen Operanden entlang „gleitet”, während verglichen wird.
- In einer Ausführung können die Einträge des Ergebnisarrays invertiert, oder negiert, werden, abhängig von der Anwendung. In anderen Ausführungen können nur manche der Ergebniseinträge negiert werden, wie etwa nur diejenigen, bei denen angezeigt ist, daß sie gültigen Übereinstimmungen zwischen Datenelementen der zwei Operanden entsprechen. In anderen Ausführungen können andere Operationen auf die Ergebniseinträge des Ergebnisarrays
520 angewandt werden. In manchen Ausführungen kann der Ergebnisarray520 beispielsweise als ein Maskenwert repräsentiert werden, wogegen der Ergebnisarray in anderen Ausführungen durch einen Indexwert repräsentiert wird, der in einem Speicherplatz, wie etwa einem Register, gespeichert werden kann. In einer Ausführung kann ein Index als eine Gruppe von höchstwertigen Bits des Ergebnisarrays repräsentiert werden, wogegen in anderen Ausführungen der Index durch eine Gruppe von niedrigstwertigen Bits des Arrays repräsentiert werden kann. In einer Ausführung kann der Index durch einen Verschiebungswert zu dem niedrigst- oder höchstwertigen Bit der festgesetzt wurde, repräsentiert werden. In einer Ausführung kann die Maske eine Ausdehnung von Null haben, während sie in anderen Ausführungen eine Byte-/Wort-Maske oder von einer anderen Granularität sein kann. - In verschiedenen Ausführungen können alle der oben beschriebenen Varianzen beim Vergleichen jedes Elements der zwei oder mehr SIMD-Operanden als separate, einzelne Anweisungen ausgeführt werden. In anderen Ausführungen können die oben beschriebenen Varianzen ausgeführt werden, indem Attribute einer einzigen Anweisung, wie etwa unmittelbare Felder, die mit einer Anweisung verknüpft sind, geändert werden. Die
6 stellt verschiedene Operationen dar, die durch eine oder mehrere Anweisungen angewandt werden, um jedes der Datenelemente von zwei oder mehreren SIMD-Operanden zu vergleichen. In einer Ausführung repräsentieren die Operanden, die durch die Operationen in der6 verglichen werden, jede eine Zeichenkette. In anderen Ausführungen können die Operanden irgendwelche anderen Informationen oder Daten repräsentieren. - Bezieht man sich auf die
6 , so kann jedes der Elemente eines ersten SIMD-Operanden601 und eines zweiten SIMD-Operanden605 bei der Operation610 mit einander verglichen werden. In einer Ausführung kann ein Operand in einem Register, wie etwa einem XMM-Register, gespeichert werden, wogegen der andere Operand in einem anderen XMM-Register oder im Speicher gespeichert werden kann. In einer Ausführung kann die Art des Vergleichs durch ein unmittelbar angrenzendes Feld gesteuert werden, das zu einer Anweisung gehört, die die in der6 dargestellten Operationen ausführt. In einer Ausführung können beispielsweise zwei Bits eines unmittelbar angrenzenden Feldes (z. B. IMM8[1:0]) verwendet werden, um anzuzeigen, ob die zu vergleichenden Datenelemente Bytes mit Vorzeichen, Wörter mit Vorzeichen, Bytes ohne Vorzeichen oder Wörter ohne Vorzeichen sind. In einer Ausführung kann das Ergebnis des Vergleichs einen i × j-Array (z. B. BoolRes[i, j]) oder irgendeinen Abschnitt eines i × j-Arrays erzeugen. - Parallel dazu wird das Ende jeder der Ketten, die durch die Operanden
601 und605 repräsentiert werden, gefunden, und die Gültigkeit jedes der Elemente der Operanden601 und605 kann bei der Operation613 ermittelt werden. In einer Ausführung wird die Gültigkeit jedes der Elemente der Operanden601 und605 explizit angezeigt, indem ein entsprechendes Bit oder entsprechende Bits in einem Register oder Speicherplatz gesetzt werden. In einer Ausführung können das Bit oder die Bits zu einer Anzahl von aufeinander folgenden gültigen Datenelementen (z. B. Bytes) gehören, beginnend von der niedrigstwertigen Bit-Position der Operanden601 und605 . Ein Register, wie etwa ein EAX- oder ein RAX-Register, kann beispielsweise verwendet werden, um Bits zu speichern, die, abhängig von der Größe des Operanden, die Gültigkeit jedes der Datenelemente des ersten Operanden anzeigt. Ähnlich kann ein Register, wie etwa ein EAX- oder ein RAX-Register, verwendet werden, um Bits zu speichern, die, abhängig von der Größe des Operanden, die Gültigkeit jedes der Datenelemente des zweiten Operanden anzeigt. In einer anderen Ausführung kann die Gültigkeit jedes der Elemente der Operanden601 und605 implizit durch Mittel angezeigt werden, die schon in dieser Offenlegung erörtert wurden. - In einer Ausführungsform kann der Vergleich und Gültigkeitsinformation bei
615 durch eine Aggregationsfunktion kombiniert werden, um irgendein Ergebnis des Vergleichs der Elemente der zwei Operanden zu erzeugen. In einer Ausführung wird die Aggregationsfunktion durch ein unmittelbar angrenzendes Feld bestimmt, das mit einer Anweisung, den Vergleich der Elemente der zwei Operanden auszuführen, verknüpft ist. In einer Ausführung kann beispielsweise das unmittelbar angrenzende Feld anzeigen, ob der Vergleich anzeigen soll, ob irgendwelche der Datenelemente der zwei Operanden gleich sind, ob irgendwelche (kontinuierliche oder diskontinuierliche) Bereiche der Datenelemente in den beiden Operanden gleich sind, ob jede der Datenelemente der zwei Operanden gleich sind oder ob die Operanden eine gleiche Ordnung von zumindest manchen Datenelementen teilen. - Das Ergebnis der Aggregationsfunktion (das beispielsweise in dem IntRes1 Array gespeichert wird) in einer Ausführung bei der Operation
620 negiert werden. In einer Ausführung können Bits eines unmittelbar angrenzenden Feldes (z. B. IMM8[6:5]) die Art der Negationsfunktion, die auf das Ergebnis der Aggregationsfunktion angewandt wird, steuern. Unmittelbar angrenzende Felder können beispielsweise anzeigen, daß die Aggregationsergebnisse überhaupt nicht negiert werden sollen, daß alle Ergebnisse der Aggregationsfunktion negiert werden sollen oder daß nur Aggregationsergebnisse, die zu gültigen Elementen der Operanden gehören, negiert werden sollen. In einer Ausführung können die Ergebnisse der Negationsoperation in einem Array (z. B. dem IntRes2 Array) gespeichert werden. - Der Ergebnisarray, der durch die Negationsoperation erzeugt wird, kann in einer Ausführung bei
625 bzw.630 in einen Index- oder Maskenwert umgewandelt werden. Wenn das Ergebnis der Negationsoperation in einen Index umgewandelt wird, können Bits eines unmittelbar angrenzenden Feldes (z. B. IMM8[6]) steuern, ob das oder die höchstwertige(n) Bit(s) oder das oder die niedrigstwertige(n) Bit(s) des Ergebnisses des Vergleichs in einen Index codiert wird/werden, und das Ergebnis daraus in einem Register (z. B. ECX oder RCX) gespeichert werden kann. Wenn das Ergebnis der Negationsoperation in einer Ausführung durch einen Maskenwert repräsentiert werden soll, können Bits eines unmittelbar angrenzenden Feldes (z. B. IMM8[6]) verwendet werden, um zu steuern, ob die Maske eine Ausdehnung von Null aufweisen soll oder in eine Byte-Maske (oder Wort-Maske) erweitert werden soll. - Es wurden hier Techniken zur Durchführung einer Zeichenketten-Vergleichsoperation offenbart. Während bestimmte beispielhafte Ausführungen beschrieben und in den beigefügten Zeichnungen dargestellt wurden, versteht es sich, daß solche Ausführungen nur zu Erläuterung und nicht zur Einschränkung der Erfindung im allgemeinen vorgesehen sind und daß diese Erfindung nicht auf die speziellen gezeigten und beschriebenen Konstruktionen und Anordnungen beschränkt ist, da verschiedene andere Modifikationen einem Fachmann bei der Lektüre der Offenlegung offenbar werden. In einem Gebiet der Technik wie diesem, in dem das Wachstum schnell ist und weitere Fortschritte nicht leicht vorherzusehen sind, können die offenbarten Ausführungen leicht in der Anordnung und im Detail modifiziert werden, wie es durch dieses ermöglichende technologische Fortschritte erleichtert wird, ohne von den Prinzipien der vorliegenden Offenbarung oder dem Schutzumfang der beigefügten Ansprüche abzuweichen.
Claims (11)
- Maschinenlesbares Medium mit einer darauf gespeicherten SIMD(single instruction, multiple data)-Zeichenketten-Vergleichsanweisung, die, wenn sie von einer Maschine ausgeführt wird, die Maschine dazu veranlaßt, jedes Datenelement des ersten gepackten Operanden mit jedem Datenelementen des zweiten gepackten Operanden zu vergleichen und ein zweidimensionales Array von Werten, dessen Einträge dem Vergleich zwischen den Datenelementen des ersten gepackten Operanden und der Datenelementen des zweiten gepackten Operanden entsprechen, zu erzeugen, wobei der Vergleich und Gültigkeitsinformationen durch eine Aggregationsfunktion kombiniert werden, um ein Ergebnis des Vergleichs der Elemente der zwei Operanden zu erzeugen; und das Ergebnis des Vergleichs zu speichern.
- Maschinenlesbares Medium nach Anspruch 1, bei dem nur gültige Datenelemente des ersten Operanden mit nur gültigen Datenelementen des zweiten Operanden verglichen werden.
- Maschinenlesbares Medium nach Anspruch 1, bei dem das Ergebnis anzeigt, ob irgendwelche der Datenelemente gleich sind.
- Maschinenlesbares Medium nach Anspruch 1, bei dem das Ergebnis anzeigt, ob ein Bereich von Datenelementen, die in dem ersten Operanden bezeichnet sind, gleich einem zweiten Bereich von Datenelementen ist, die in dem zweiten Operanden bezeichnet sind.
- Maschinenlesbares Medium nach Anspruch 1, bei dem das Ergebnis anzeigt, ob jedes der Datenelemente des ersten Operanden gleich jedem der Datenelemente des zweiten Operanden ist.
- Maschinenlesbares Medium nach Anspruch 1, bei dem das Ergebnis anzeigt, ob eine Reihenfolge eines Abschnitts von Datenelementen des ersten Operanden gleich der zu einer Reihenfolge eines Abschnitts von Datenelementen des zweiten Operanden ist.
- Maschinenlesbares Medium nach Anspruch 1, bei dem ein Abschnitt des Ergebnisses negiert wird.
- Maschinenlesbares Medium nach Anspruch 1, bei dem das Ergebnis entweder durch einen Maskenwert oder durch einen Indexwert repräsentiert wird.
- Prozessor, der folgendes umfaßt: einen ersten Speicherbereich, um einen ersten gepackten Operanden, der zu einer ersten Zeichenkette gehört, zu speichern; einen zweiten Speicherbereich, um einen zweiten gepackten Operanden, der zu einer zweiten Zeichenkette gehört, zu speichern; eine Vergleichslogik, die dazu konfiguriert ist, jedes Datenelement des ersten gepackten Operanden mit jedem Datenelementen des zweiten gepackten Operanden zu vergleichen und ein zweidimensionales Array von Werten, dessen Einträge dem Vergleich zwischen den Datenelementen des ersten gepackten Operanden und der Datenelementen des zweiten gepackten Operanden entsprechen, zu erzeugen, wobei der Vergleich und Gültigkeitsinformationen durch eine Aggregationsfunktion kombiniert werden, um ein Ergebnis des Vergleichs der Elemente der zwei Operanden zu erzeugen; einen dritten Speicherbereich, um das Array des Vergleichs, der durch die Vergleichslogik ausgeführt wurde, zu speichern.
- Prozessor nach Anspruch 9, bei dem die Vergleichslogik irgendeine einer Gruppe von Aggregationsfunktionen auf dem zweidimensionalen Array von Werten ausführt, wobei die Aggregationsfunktion aus irgendwelche-gleich, gleicher-Bereich, alle-gleich, unzusammenhängende-Unterketten und gleiche-Reihenfolge besteht.
- Prozessor nach Anspruch 9, bei dem der Ergebnisarray entweder durch eine Maske oder durch einen Indexwert repräsentiert wird.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/525,981 US9069547B2 (en) | 2006-09-22 | 2006-09-22 | Instruction and logic for processing text strings |
US11/525,981 | 2006-09-22 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE102007045496A1 DE102007045496A1 (de) | 2008-04-30 |
DE102007045496B4 true DE102007045496B4 (de) | 2016-10-20 |
Family
ID=39200855
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE102007045496.3A Active DE102007045496B4 (de) | 2006-09-22 | 2007-09-24 | Anweisung und Logik zum Bearbeiten von Textstrings |
DE102007063894.0A Active DE102007063894B3 (de) | 2006-09-22 | 2007-09-24 | Anweisung und Logik zum Bearbeiten von Textstrings |
DE102007063809.6A Active DE102007063809B3 (de) | 2006-09-22 | 2007-09-24 | Anweisungen und Logik zur Verarbeitung von Zeichenketten |
DE102007063911.4A Active DE102007063911B3 (de) | 2006-09-22 | 2007-09-24 | Anweisung und Logik zum Bearbeiten von Textstrings |
Family Applications After (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE102007063894.0A Active DE102007063894B3 (de) | 2006-09-22 | 2007-09-24 | Anweisung und Logik zum Bearbeiten von Textstrings |
DE102007063809.6A Active DE102007063809B3 (de) | 2006-09-22 | 2007-09-24 | Anweisungen und Logik zur Verarbeitung von Zeichenketten |
DE102007063911.4A Active DE102007063911B3 (de) | 2006-09-22 | 2007-09-24 | Anweisung und Logik zum Bearbeiten von Textstrings |
Country Status (7)
Country | Link |
---|---|
US (20) | US9069547B2 (de) |
JP (10) | JP5575477B2 (de) |
KR (2) | KR101300362B1 (de) |
CN (10) | CN104657112B (de) |
BR (1) | BRPI0717068A2 (de) |
DE (4) | DE102007045496B4 (de) |
WO (1) | WO2008036945A1 (de) |
Families Citing this family (75)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7958181B2 (en) | 2006-09-21 | 2011-06-07 | Intel Corporation | Method and apparatus for performing logical compare operations |
US9069547B2 (en) | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
US7991987B2 (en) * | 2007-05-10 | 2011-08-02 | Intel Corporation | Comparing text strings |
US8954484B2 (en) | 2009-06-12 | 2015-02-10 | Cray Inc. | Inclusive or bit matrix to compare multiple corresponding subfields |
US8515052B2 (en) | 2007-12-17 | 2013-08-20 | Wai Wu | Parallel signal processing system and method |
US8200947B1 (en) * | 2008-03-24 | 2012-06-12 | Nvidia Corporation | Systems and methods for voting among parallel threads |
US8755515B1 (en) | 2008-09-29 | 2014-06-17 | Wai Wu | Parallel signal processing system and method |
US9747105B2 (en) * | 2009-12-17 | 2017-08-29 | Intel Corporation | Method and apparatus for performing a shift and exclusive or operation in a single instruction |
US9003170B2 (en) | 2009-12-22 | 2015-04-07 | Intel Corporation | Bit range isolation instructions, methods, and apparatus |
US9009447B2 (en) * | 2011-07-18 | 2015-04-14 | Oracle International Corporation | Acceleration of string comparisons using vector instructions |
WO2013086380A1 (en) * | 2011-12-08 | 2013-06-13 | Oracle International Corporation | Techniques for more efficient usage of memory - to - cpu bandwidth |
WO2013095592A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Apparatus and method for vector compute and accumulate |
US9424327B2 (en) * | 2011-12-23 | 2016-08-23 | Intel Corporation | Instruction execution that broadcasts and masks data values at different levels of granularity |
CN104137053B (zh) * | 2011-12-23 | 2018-06-26 | 英特尔公司 | 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法 |
CN104011616B (zh) * | 2011-12-23 | 2017-08-29 | 英特尔公司 | 改进置换指令的装置和方法 |
CN107193537B (zh) | 2011-12-23 | 2020-12-11 | 英特尔公司 | 经改进的插入指令的装置和方法 |
CN104081336B (zh) * | 2011-12-23 | 2018-10-23 | 英特尔公司 | 用于检测向量寄存器内的相同元素的装置和方法 |
CN104025021A (zh) * | 2011-12-23 | 2014-09-03 | 英特尔公司 | 用于滑动窗口数据收集的设备和方法 |
US9946540B2 (en) | 2011-12-23 | 2018-04-17 | Intel Corporation | Apparatus and method of improved permute instructions with multiple granularities |
WO2013101010A1 (en) | 2011-12-28 | 2013-07-04 | Intel Corporation | Floating point scaling processors, methods, systems, and instructions |
EP2798465B1 (de) * | 2011-12-30 | 2018-11-14 | Intel Corporation | Prozessoren zur identifizierung von einzelnen verpackten datenelementen, verfahren, systeme, und anweisungen |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9454366B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
US9575753B2 (en) | 2012-03-15 | 2017-02-21 | International Business Machines Corporation | SIMD compare instruction using permute logic for distributed register files |
US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
US9454367B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Finding the length of a set of character data having a termination character |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US9317285B2 (en) | 2012-04-30 | 2016-04-19 | Apple Inc. | Instruction set architecture mode dependent sub-size access of register with associated status indication |
US8838997B2 (en) * | 2012-09-28 | 2014-09-16 | Intel Corporation | Instruction set for message scheduling of SHA256 algorithm |
US9268567B2 (en) | 2012-09-30 | 2016-02-23 | Intel Corporation | Instruction and logic for boyer-moore search of text strings |
US9804839B2 (en) | 2012-12-28 | 2017-10-31 | Intel Corporation | Instruction for determining histograms |
US20140281418A1 (en) * | 2013-03-14 | 2014-09-18 | Shihjong J. Kuo | Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions |
US9207941B2 (en) * | 2013-03-15 | 2015-12-08 | Intel Corporation | Systems, apparatuses, and methods for reducing the number of short integer multiplications |
JP6160259B2 (ja) | 2013-05-30 | 2017-07-12 | 富士通株式会社 | 文字列探索方法、文字列探索装置および文字列探索プログラム |
US9606803B2 (en) * | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
US11113054B2 (en) | 2013-09-10 | 2021-09-07 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression |
US9639369B2 (en) | 2013-11-11 | 2017-05-02 | Apple Inc. | Split register file for operands of different sizes |
US10191743B2 (en) | 2013-12-29 | 2019-01-29 | Intel Corporation | Versatile packed data comparison processors, methods, systems, and instructions |
US10133570B2 (en) | 2014-09-19 | 2018-11-20 | Intel Corporation | Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated |
US9772848B2 (en) * | 2014-11-14 | 2017-09-26 | Intel Corporation | Three-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US9891913B2 (en) * | 2014-12-23 | 2018-02-13 | Intel Corporation | Method and apparatus for performing conflict detection using vector comparison operations |
US10203955B2 (en) * | 2014-12-31 | 2019-02-12 | Intel Corporation | Methods, apparatus, instructions and logic to provide vector packed tuple cross-comparison functionality |
GB2546465B (en) * | 2015-06-05 | 2018-02-28 | Advanced Risc Mach Ltd | Modal processing of program instructions |
US10423411B2 (en) | 2015-09-26 | 2019-09-24 | Intel Corporation | Data element comparison processors, methods, systems, and instructions |
US9996361B2 (en) * | 2015-12-23 | 2018-06-12 | Intel Corporation | Byte and nibble sort instructions that produce sorted destination register and destination index mapping |
US11106467B2 (en) * | 2016-04-28 | 2021-08-31 | Microsoft Technology Licensing, Llc | Incremental scheduler for out-of-order block ISA processors |
CN106201440B (zh) * | 2016-06-28 | 2018-10-23 | 上海兆芯集成电路有限公司 | 字符串比较指令优化的中央处理单元以及其操作方法 |
WO2018022528A1 (en) | 2016-07-27 | 2018-02-01 | Intel Corporation | System and method for multiplexing vector compare |
US10783102B2 (en) | 2016-10-11 | 2020-09-22 | Oracle International Corporation | Dynamically configurable high performance database-aware hash engine |
US10725947B2 (en) | 2016-11-29 | 2020-07-28 | Oracle International Corporation | Bit vector gather row count calculation and handling in direct memory access engine |
CN106649836B (zh) * | 2016-12-29 | 2019-11-29 | 武汉新芯集成电路制造有限公司 | 一种基于硬件查找表的模式字符的查找方法 |
US10423191B2 (en) | 2017-01-19 | 2019-09-24 | International Business Machines Corporation | Clock comparator sign control |
US10324716B2 (en) | 2017-03-03 | 2019-06-18 | International Business Machines Corporation | Selecting processing based on expected value of selected character |
US10620956B2 (en) | 2017-03-03 | 2020-04-14 | International Business Machines Corporation | Search string processing via inline decode-based micro-operations expansion |
US10255068B2 (en) | 2017-03-03 | 2019-04-09 | International Business Machines Corporation | Dynamically selecting a memory boundary to be used in performing operations |
US10613862B2 (en) | 2017-03-03 | 2020-04-07 | International Business Machines Corporation | String sequence operations with arbitrary terminators |
US10789069B2 (en) | 2017-03-03 | 2020-09-29 | International Business Machines Corporation | Dynamically selecting version of instruction to be executed |
US10564967B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Move string processing via inline decode-based micro-operations expansion |
US10564965B2 (en) * | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Compare string processing via inline decode-based micro-operations expansion |
US10678506B2 (en) * | 2017-08-01 | 2020-06-09 | Arm Limited | Matching consecutive values in a data processing apparatus |
CN107832058B (zh) * | 2017-10-31 | 2022-01-18 | 北京小米移动软件有限公司 | 数据处理方法及装置 |
US10691457B1 (en) | 2017-12-13 | 2020-06-23 | Apple Inc. | Register allocation using physical register file bypass |
JP6705473B2 (ja) * | 2018-06-22 | 2020-06-03 | 日本電気株式会社 | 演算装置及び演算システム |
US11640300B2 (en) * | 2019-09-24 | 2023-05-02 | Alibaba Group Holding Limited | Byte comparison method for string processing and instruction processing apparatus |
CN111209041B (zh) * | 2019-12-31 | 2022-05-17 | Oppo广东移动通信有限公司 | 神经网络处理器、片上系统及电子设备 |
US11809558B2 (en) * | 2020-09-25 | 2023-11-07 | Advanced Micro Devices, Inc. | Hardware security hardening for processor devices |
GB2599652B (en) * | 2020-10-06 | 2023-01-18 | Advanced Risc Mach Ltd | Masked-vector-comparison instruction |
US11880263B2 (en) | 2021-05-13 | 2024-01-23 | Meta Platforms, Inc. | Systems having disaggregated components coupled by optical media |
KR102370851B1 (ko) | 2021-08-18 | 2022-03-07 | 주식회사 로그프레소 | 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법 |
CN114675890B (zh) * | 2022-05-26 | 2022-09-23 | 飞腾信息技术有限公司 | 一种指令执行方法、装置、设备及存储介质 |
Family Cites Families (103)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4068299A (en) * | 1973-12-13 | 1978-01-10 | Honeywell Information Systems, Inc. | Data processing system incorporating a logical compare instruction |
JPS57170344A (en) | 1981-04-09 | 1982-10-20 | Fujitsu Ltd | Paper jointer |
JPS5856207A (ja) | 1981-09-30 | 1983-04-02 | Hitachi Ltd | Ram制御装置 |
JPH0232663B2 (ja) | 1981-09-30 | 1990-07-23 | Fujitsu Ltd | Jokentsukihikakuenzansochi |
JPS58106636A (ja) | 1981-12-18 | 1983-06-25 | Hitachi Ltd | パイプライン演算装置 |
JPS617976A (ja) | 1984-06-22 | 1986-01-14 | Mitsubishi Electric Corp | ベクトル演算処理装置 |
US5210833A (en) * | 1985-11-08 | 1993-05-11 | Nec Corporation | System for selectively masking data in a branch address register and replacing the microinstruction address register by the masked data |
JPH0731669B2 (ja) | 1986-04-04 | 1995-04-10 | 株式会社日立製作所 | ベクトル・プロセツサ |
JPS6320628A (ja) * | 1986-07-15 | 1988-01-28 | Nec Corp | 記号列グル−プ分類方式 |
JPH0743672B2 (ja) * | 1987-02-18 | 1995-05-15 | 株式会社東芝 | メモリ保護違反検出装置 |
JPH01271875A (ja) | 1988-04-22 | 1989-10-30 | Nec Corp | ベクトル演算制御方式 |
JP2790466B2 (ja) | 1988-10-18 | 1998-08-27 | 株式会社日立製作所 | 文字列検索方法及び装置 |
JPH0769811B2 (ja) * | 1988-12-21 | 1995-07-31 | 松下電器産業株式会社 | データ処理装置 |
US5125092A (en) * | 1989-01-09 | 1992-06-23 | International Business Machines Corporation | Method and apparatus for providing multiple condition code fields to to allow pipelined instructions contention free access to separate condition codes |
US5138669A (en) * | 1990-06-29 | 1992-08-11 | Hitachi, Ltd. | Range-conditional character string retrieving method and system |
CA2045773A1 (en) | 1990-06-29 | 1991-12-30 | Compaq Computer Corporation | Byte-compare operation for high-performance processor |
US5268995A (en) | 1990-11-21 | 1993-12-07 | Motorola, Inc. | Method for executing graphics Z-compare and pixel merge instructions in a data processor |
US5553309A (en) * | 1991-11-08 | 1996-09-03 | Japan Atomic Energy Research Institute | Device for high speed evaluation of logical expressions and high speed vector operations |
JP2665111B2 (ja) * | 1992-06-18 | 1997-10-22 | 日本電気株式会社 | ベクトル処理装置 |
JPH0617976A (ja) | 1992-06-29 | 1994-01-25 | Mitsubishi Plastics Ind Ltd | メカニカル継手 |
US6131092A (en) | 1992-08-07 | 2000-10-10 | Masand; Brij | System and method for identifying matches of query patterns to document text in a document textbase |
JPH0696124A (ja) | 1992-09-11 | 1994-04-08 | Sumitomo Metal Ind Ltd | 情報検索装置 |
JPH06162067A (ja) | 1992-11-24 | 1994-06-10 | Hitachi Ltd | ベクトル命令制御装置および制御方法 |
GB2273377A (en) * | 1992-12-11 | 1994-06-15 | Hughes Aircraft Co | Multiple masks for array processors |
US5651121A (en) | 1992-12-18 | 1997-07-22 | Xerox Corporation | Using mask operand obtained from composite operand to perform logic operation in parallel with composite operand |
US5465374A (en) * | 1993-01-12 | 1995-11-07 | International Business Machines Corporation | Processor for processing data string by byte-by-byte |
US5519649A (en) * | 1993-06-04 | 1996-05-21 | Nippon Steel Corporation | Micro-processor having rapid condition comparison function |
CA2162115A1 (en) | 1993-06-14 | 1994-12-22 | David V. James | Method and apparatus for finding a termination character within a variable-length character string on a processor |
JPH07114469A (ja) * | 1993-10-18 | 1995-05-02 | Mitsubishi Electric Corp | データ処理装置 |
DE69519449T2 (de) | 1994-05-05 | 2001-06-21 | Conexant Systems Inc | Raumzeigersdatenpfad |
IT1268611B1 (it) * | 1994-09-30 | 1997-03-06 | Finmeccanica Spa | Coprocessore per riconoscimento caratteri |
US5717952A (en) * | 1994-11-16 | 1998-02-10 | Apple Computer, Inc. | DMA controller with mechanism for conditional action under control of status register, prespecified parameters, and condition field of channel command |
US5724572A (en) * | 1994-11-18 | 1998-03-03 | International Business Machines Corporation | Method and apparatus for processing null terminated character strings |
US5819101A (en) * | 1994-12-02 | 1998-10-06 | Intel Corporation | Method for packing a plurality of packed data elements in response to a pack instruction |
BR9509845A (pt) | 1994-12-02 | 1997-12-30 | Intel Corp | Microprocessador com operação de compactação de elementos de operação compósitos |
US5634119A (en) * | 1995-01-06 | 1997-05-27 | International Business Machines Corporation | Computer processing unit employing a separate millicode branch history table |
JP2931890B2 (ja) * | 1995-07-12 | 1999-08-09 | 三菱電機株式会社 | データ処理装置 |
US7301541B2 (en) | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
EP0847551B1 (de) | 1995-08-31 | 2012-12-05 | Intel Corporation | Befehlsatz zur verarbeitung von gepackten daten |
US5884059A (en) | 1996-01-26 | 1999-03-16 | Advanced Micro Devices, Inc. | Unified multi-function operation scheduler for out-of-order execution in a superscalar processor |
US5907842A (en) * | 1995-12-20 | 1999-05-25 | Intel Corporation | Method of sorting numbers to obtain maxima/minima values with ordering |
US5991874A (en) * | 1996-06-06 | 1999-11-23 | Intel Corporation | Conditional move using a compare instruction generating a condition field |
JPH1056027A (ja) | 1996-08-09 | 1998-02-24 | Furukawa Electric Co Ltd:The | 素子接合装置 |
US6058465A (en) | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
TW380237B (en) * | 1996-09-23 | 2000-01-21 | Advanced Risc Mach Ltd | Data processing system register control |
US6377970B1 (en) * | 1998-03-31 | 2002-04-23 | Intel Corporation | Method and apparatus for computing a sum of packed data elements using SIMD multiply circuitry |
GB2338094B (en) | 1998-05-27 | 2003-05-28 | Advanced Risc Mach Ltd | Vector register addressing |
JP5052713B2 (ja) | 1998-10-09 | 2012-10-17 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 条件付き命令を備えるベクトルデータプロセッサ |
US6292886B1 (en) | 1998-10-12 | 2001-09-18 | Intel Corporation | Scalar hardware for performing SIMD operations |
US6430557B1 (en) * | 1998-12-16 | 2002-08-06 | Xerox Corporation | Identifying a group of words using modified query words obtained from successive suffix relationships |
EP1197875B1 (de) | 1998-12-16 | 2006-03-22 | Matsushita Electric Industrial Co., Ltd. | Verfahren und vorrichtung für bedingte vektoroperationen |
US6282628B1 (en) | 1999-02-24 | 2001-08-28 | International Business Machines Corporation | Method and system for a result code for a single-instruction multiple-data predicate compare operation |
US6356951B1 (en) * | 1999-03-01 | 2002-03-12 | Sun Microsystems, Inc. | System for parsing a packet for conformity with a predetermined protocol using mask and comparison values included in a parsing instruction |
US6470440B1 (en) | 1999-05-20 | 2002-10-22 | International Business Machines Corporation | Vector compare and maximum/minimum generation apparatus and method therefor |
US6745336B1 (en) | 1999-05-20 | 2004-06-01 | Princeton University | System and method of operand value based processor optimization by detecting a condition of pre-determined number of bits and selectively disabling pre-determined bit-fields by clock gating |
GB2355084B (en) | 1999-07-21 | 2004-04-28 | Element 14 Ltd | Setting condition values in a computer |
US6421696B1 (en) | 1999-08-17 | 2002-07-16 | Advanced Micro Devices, Inc. | System and method for high speed execution of Fast Fourier Transforms utilizing SIMD instructions on a general purpose processor |
US6484255B1 (en) | 1999-09-20 | 2002-11-19 | Intel Corporation | Selective writing of data elements from packed data based upon a mask using predication |
JP2001282820A (ja) | 2000-01-25 | 2001-10-12 | Sony Corp | データ圧縮方法、検索方法、検索装置、データパケット信号および記録媒体 |
US20050228595A1 (en) * | 2001-05-25 | 2005-10-13 | Cooke Laurence H | Processors for multi-dimensional sequence comparisons |
US6986025B2 (en) * | 2001-06-11 | 2006-01-10 | Broadcom Corporation | Conditional execution per lane |
US7861071B2 (en) | 2001-06-11 | 2010-12-28 | Broadcom Corporation | Conditional branch instruction capable of testing a plurality of indicators in a predicate register |
US20040054877A1 (en) * | 2001-10-29 | 2004-03-18 | Macy William W. | Method and apparatus for shuffling data |
US7631025B2 (en) * | 2001-10-29 | 2009-12-08 | Intel Corporation | Method and apparatus for rearranging data between multiple registers |
US20030167460A1 (en) | 2002-02-26 | 2003-09-04 | Desai Vipul Anil | Processor instruction set simulation power estimation method |
US6928605B2 (en) | 2002-03-29 | 2005-08-09 | Intel Corporation | Add-compare-select accelerator using pre-compare-select-add operation |
US7793084B1 (en) | 2002-07-22 | 2010-09-07 | Mimar Tibet | Efficient handling of vector high-level language conditional constructs in a SIMD processor |
US6986023B2 (en) | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
WO2004015563A1 (en) | 2002-08-09 | 2004-02-19 | Intel Corporation | Multimedia coprocessor control mechanism including alignment or broadcast instructions |
JP3958662B2 (ja) * | 2002-09-25 | 2007-08-15 | 松下電器産業株式会社 | プロセッサ |
US7103756B2 (en) * | 2002-09-30 | 2006-09-05 | Hewlett-Packard Development Company, L.P. | Data processor with individually writable register subword locations |
US7003653B2 (en) * | 2002-10-21 | 2006-02-21 | Sun Microsystems, Inc. | Method for rapid interpretation of results returned by a parallel compare instruction |
JP2004145493A (ja) | 2002-10-23 | 2004-05-20 | Hiroshima Industrial Promotion Organization | マッチング演算回路 |
JP3837386B2 (ja) * | 2003-02-18 | 2006-10-25 | 誠 小川 | 情報処理装置 |
US7472258B2 (en) | 2003-04-21 | 2008-12-30 | International Business Machines Corporation | Dynamically shared group completion table between multiple threads |
US20040252547A1 (en) * | 2003-06-06 | 2004-12-16 | Chengpu Wang | Concurrent Processing Memory |
US7689641B2 (en) * | 2003-06-30 | 2010-03-30 | Intel Corporation | SIMD integer multiply high with round and shift |
US7043518B2 (en) * | 2003-07-31 | 2006-05-09 | Cradle Technologies, Inc. | Method and system for performing parallel integer multiply accumulate operations on packed data |
CN100545804C (zh) * | 2003-08-18 | 2009-09-30 | 上海海尔集成电路有限公司 | 一种基于cisc结构的微控制器及其指令集的实现方法 |
US7475393B2 (en) | 2003-08-29 | 2009-01-06 | Motorola, Inc. | Method and apparatus for parallel computations with incomplete input operands |
US7315935B1 (en) | 2003-10-06 | 2008-01-01 | Advanced Micro Devices, Inc. | Apparatus and method for port arbitration in a register file on the basis of functional unit issue slots |
GB2411975B (en) | 2003-12-09 | 2006-10-04 | Advanced Risc Mach Ltd | Data processing apparatus and method for performing arithmetic operations in SIMD data processing |
GB2409067B (en) | 2003-12-09 | 2006-12-13 | Advanced Risc Mach Ltd | Endianess compensation within a SIMD data processing system |
GB2409064B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing in parallel a data processing operation on data elements |
GB2409062C (en) * | 2003-12-09 | 2007-12-11 | Advanced Risc Mach Ltd | Aliasing data processing registers |
GB2409065B (en) * | 2003-12-09 | 2006-10-25 | Advanced Risc Mach Ltd | Multiplexing operations in SIMD processing |
US6915300B1 (en) | 2003-12-19 | 2005-07-05 | Xerox Corporation | Method and system for searching indexed string containing a search string |
CN1297888C (zh) * | 2004-03-03 | 2007-01-31 | 浙江大学 | 32位媒体数字信号处理器 |
JP4129981B2 (ja) * | 2004-04-02 | 2008-08-06 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ、コンパイラプログラム、記録媒体、制御方法、及び中央処理装置 |
US20050251644A1 (en) | 2004-05-06 | 2005-11-10 | Monier Maher | Physics processing unit instruction set architecture |
GB2414308B (en) * | 2004-05-17 | 2007-08-15 | Advanced Risc Mach Ltd | Program instruction compression |
US7284092B2 (en) * | 2004-06-24 | 2007-10-16 | International Business Machines Corporation | Digital data processing apparatus having multi-level register file |
EP1622009A1 (de) | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM-Architektur und Systeme |
US7434034B2 (en) * | 2004-09-13 | 2008-10-07 | Ati Technologies Inc. | SIMD processor executing min/max instructions |
US7237094B2 (en) * | 2004-10-14 | 2007-06-26 | International Business Machines Corporation | Instruction group formation and mechanism for SMT dispatch |
US20060101256A1 (en) | 2004-10-20 | 2006-05-11 | Dwyer Michael K | Looping instructions for a single instruction, multiple data execution engine |
US7565514B2 (en) * | 2006-04-28 | 2009-07-21 | Freescale Semiconductor, Inc. | Parallel condition code generation for SIMD operations |
US7676647B2 (en) | 2006-08-18 | 2010-03-09 | Qualcomm Incorporated | System and method of processing data using scalar/vector instructions |
US9069547B2 (en) | 2006-09-22 | 2015-06-30 | Intel Corporation | Instruction and logic for processing text strings |
US7536532B2 (en) * | 2006-09-27 | 2009-05-19 | International Business Machines Corporation | Merge operations of data arrays based on SIMD instructions |
US20140280271A1 (en) | 2013-03-15 | 2014-09-18 | Intel Corporation | Instruction and logic for processing text strings |
JP6329412B2 (ja) * | 2014-03-26 | 2018-05-23 | 株式会社メガチップス | Simdプロセッサ |
JP6162067B2 (ja) | 2014-03-27 | 2017-07-12 | 東レ株式会社 | 繊維製品の処理装置 |
-
2006
- 2006-09-22 US US11/525,981 patent/US9069547B2/en active Active
-
2007
- 2007-09-21 JP JP2009529420A patent/JP5575477B2/ja active Active
- 2007-09-21 BR BRPI0717068 patent/BRPI0717068A2/pt not_active Application Discontinuation
- 2007-09-21 KR KR1020117006958A patent/KR101300362B1/ko active IP Right Grant
- 2007-09-21 WO PCT/US2007/079234 patent/WO2008036945A1/en active Application Filing
- 2007-09-21 KR KR1020097005793A patent/KR101105030B1/ko active IP Right Grant
- 2007-09-24 CN CN201410820208.8A patent/CN104657112B/zh active Active
- 2007-09-24 DE DE102007045496.3A patent/DE102007045496B4/de active Active
- 2007-09-24 DE DE102007063894.0A patent/DE102007063894B3/de active Active
- 2007-09-24 CN CN201610875178.XA patent/CN107015784B/zh active Active
- 2007-09-24 DE DE102007063809.6A patent/DE102007063809B3/de active Active
- 2007-09-24 CN CN201210381275.5A patent/CN102999315B/zh active Active
- 2007-09-24 CN CN201810003932.XA patent/CN108052348B/zh active Active
- 2007-09-24 CN CN202210391590.XA patent/CN115048144A/zh active Pending
- 2007-09-24 CN CN201410822302.7A patent/CN104657113B/zh active Active
- 2007-09-24 CN CN201410452395.9A patent/CN105607890B/zh active Active
- 2007-09-24 CN CN201110022470.4A patent/CN102073478B/zh active Active
- 2007-09-24 DE DE102007063911.4A patent/DE102007063911B3/de active Active
- 2007-09-24 CN CN201410826057.7A patent/CN104484157B/zh active Active
- 2007-09-24 CN CN200710305776.4A patent/CN101251791B/zh active Active
-
2011
- 2011-06-20 US US13/164,715 patent/US9063720B2/en active Active
-
2012
- 2012-12-20 US US13/721,725 patent/US8819394B2/en active Active
- 2012-12-20 US US13/721,819 patent/US8825987B2/en active Active
-
2013
- 2013-03-15 US US13/843,576 patent/US9448802B2/en active Active
-
2014
- 2014-01-10 JP JP2014003425A patent/JP5837105B2/ja active Active
- 2014-07-24 JP JP2014150992A patent/JP6005696B2/ja active Active
- 2014-12-05 US US14/562,618 patent/US9495160B2/en active Active
- 2014-12-05 US US14/562,641 patent/US9720692B2/en active Active
- 2014-12-05 US US14/562,624 patent/US9804848B2/en active Active
- 2014-12-05 US US14/562,637 patent/US9632784B2/en active Active
- 2014-12-05 US US14/562,632 patent/US9740489B2/en active Active
- 2014-12-05 US US14/562,609 patent/US9645821B2/en active Active
- 2014-12-18 US US14/576,147 patent/US9740490B2/en active Active
- 2014-12-18 US US14/576,136 patent/US9772847B2/en active Active
- 2014-12-18 US US14/576,124 patent/US9703564B2/en active Active
- 2014-12-18 US US14/576,101 patent/US9772846B2/en active Active
-
2015
- 2015-02-12 JP JP2015025301A patent/JP6567285B2/ja active Active
- 2015-02-12 JP JP2015025309A patent/JP6050399B2/ja active Active
- 2015-02-12 JP JP2015025307A patent/JP6193281B2/ja active Active
-
2017
- 2017-08-09 JP JP2017154302A patent/JP6651485B2/ja active Active
- 2017-10-30 US US15/797,524 patent/US10261795B2/en active Active
-
2019
- 2019-04-15 US US16/384,865 patent/US10929131B2/en active Active
- 2019-06-29 US US16/458,012 patent/US11023236B2/en active Active
- 2019-06-29 US US16/458,014 patent/US11029955B2/en active Active
- 2019-10-04 JP JP2019183764A patent/JP7052171B2/ja active Active
-
2021
- 2021-06-07 US US17/341,330 patent/US11537398B2/en active Active
-
2022
- 2022-01-04 JP JP2022000310A patent/JP2022050519A/ja active Pending
- 2022-05-10 JP JP2022077419A patent/JP7452930B2/ja active Active
Non-Patent Citations (2)
Title |
---|
Thakkar, S. et al.: The Internet Streaming SIMD Extensions. Intel Technology Journal Q2, 1999. (recherchiert am 01.12.09) * |
Thakkar, S. et al.: The Internet Streaming SIMD Extensions. Intel Technology Journal Q2, 1999. <http://download.intel.com/technology/itj/Q21999/PDF/simd_ext.pdf> (recherchiert am 01.12.09) |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE102007045496B4 (de) | Anweisung und Logik zum Bearbeiten von Textstrings | |
DE112013005416T5 (de) | Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität | |
DE112010004887T5 (de) | Verfahren und Vorrichtung zur Durchführung einer Verschiebe- und Exklusiv-ODER-Operation in einer einzelnen Instruktion | |
DE102013021221A1 (de) | Befehle und Logik zur Vektorisierung von bedingten Schleifen | |
DE102014003795A1 (de) | Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen | |
DE102014003563A1 (de) | Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen | |
DE202016009016U1 (de) | Befehle und Logik für wiederkehrende benachbarte Sammlungen | |
DE112007002101T5 (de) | Instruktion und Logik zur Durchführung einer Skalarprodukt-Operation | |
DE112013004867T5 (de) | Befehl und Logik zum Bereitstellen von Push-Puffer-Kopier- und Speicher-Funktionalität | |
DE112011105665T5 (de) | Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität | |
DE112011105666T5 (de) | Befehl und Logik zum Bereitstellen von Vektor-Lade-OP/Speicher-OP mit Schritt-Funktionalität | |
DE102009030525A1 (de) | Effizientes Paralleles Behandeln von Gleitkomma-Ausnahmen in einem Prozessor | |
DE202012009380U1 (de) | Befehl und Logik zum Durchführen einer dynamischen Binärübersetzung | |
DE112017004911T5 (de) | Anweisung und Logik für die Erkennung eines numerischen Ansammlungsfehlers | |
DE112011105664T5 (de) | Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalität | |
DE102014004563A1 (de) | Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches | |
DE102013018238A1 (de) | Anweisung und Logik zum Bereitstellen einer Vektorkompressions- und Rotationsfunktionalität | |
DE102018001229A1 (de) | Beschleunigerschaltung mit variabler Wortlänge für ein neuronales Netzwerk | |
DE102007045187A1 (de) | Verfahren und Vorrichtung zum Ausführen einer logischen Vergleichsoperation | |
DE102014003644A1 (de) | Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich | |
DE102018002525A1 (de) | Hybridatomaritätsunterstützung für einen binärübersetzungsbasierten mikroprozessor | |
DE112013007702T5 (de) | Befehl und Logik für den Speicherzugriff in einer geclusterten Maschine mit breiter Ausführung | |
DE102018006798A1 (de) | Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen | |
DE112012006946T5 (de) | Verfahren und Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung | |
DE102018005859A1 (de) | Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
R130 | Divisional application to |
Ref document number: 102007063894 Country of ref document: DE Effective date: 20120208 Ref document number: 102007063809 Country of ref document: DE Effective date: 20120208 |
|
R130 | Divisional application to |
Ref document number: 102007063809 Country of ref document: DE Ref document number: 102007063894 Country of ref document: DE |
|
R019 | Grant decision by federal patent court | ||
R020 | Patent grant now final |