JP6651485B2 - Instruction and logic circuits for processing character strings - Google Patents
Instruction and logic circuits for processing character strings Download PDFInfo
- Publication number
- JP6651485B2 JP6651485B2 JP2017154302A JP2017154302A JP6651485B2 JP 6651485 B2 JP6651485 B2 JP 6651485B2 JP 2017154302 A JP2017154302 A JP 2017154302A JP 2017154302 A JP2017154302 A JP 2017154302A JP 6651485 B2 JP6651485 B2 JP 6651485B2
- Authority
- JP
- Japan
- Prior art keywords
- packed
- data elements
- instruction
- data
- register
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 title claims description 61
- 238000000034 method Methods 0.000 claims description 26
- 238000004590 computer program Methods 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 3
- 238000007667 floating Methods 0.000 description 28
- 238000003860 storage Methods 0.000 description 27
- 230000006870 function Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 13
- 238000004422 calculation algorithm Methods 0.000 description 11
- 230000002776 aggregation Effects 0.000 description 10
- 238000004220 aggregation Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 10
- 238000013461 design Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000003491 array Methods 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 238000013500 data storage Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 4
- 230000033001 locomotion Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 239000004065 semiconductor Substances 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 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
- 230000008901 benefit Effects 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 235000019580 granularity Nutrition 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008450 motivation Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000001902 propagating effect 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, 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, 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, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline, 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, 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, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
Description
本願開示は、論理的及び数学的演算を行う、処理装置並びに関連するソフトウェア及びソフトウェア列の分野に関する。 The present disclosure relates to the field of processing devices and associated software and software trains for performing logical and mathematical operations.
計算機システムは、我々の社会でますます普及している。計算機の処理能力により、広範な職業で働く人々の効率と生産性が向上している。計算機を買って所有する費用は落ち続けている。従って、より多くの消費者が、より新しく、より速い計算機を活用できるようになっている。更に、多くの人は、ノート型の計算機を、その自由度ゆえに、楽しんで利用している。可搬型計算機により、利用者は、職場を離れても旅行中でも、簡単にデータを持ち運ぶことができ、仕事もできる。このような場面は、営業職や管理職にとって、また学生にとってすらも、ありふれた光景である。 Computer systems are becoming more and more popular in our society. The computing power is increasing the efficiency and productivity of people working in a wide range of occupations. The cost of buying and owning a calculator continues to fall. Thus, more consumers can take advantage of newer and faster computers. Furthermore, many people enjoy using notebook computers because of their flexibility. The portable computer allows the user to easily carry data and work while away from work or traveling. Such scenes are a common sight for sales and managers, and even for students.
処理装置の技術が進むにつれ、より新しいソフトウェアも開発が進んでいる。このソフトウェアは、進んだ処理装置を持つ計算機で走る。利用者は概して、自分の計算機に、より高い性能を期待し要求する。このことは、使うソフトウェアの種類には無関係である。このような性能に関する問題が起こりうるのは、処理装置の内部で実際に実行される命令及び演算の種類からである。ある種類の演算は、完了するのに、他の演算よりも時間がかかる。その理由は、演算が複雑であるせいか、演算に必要な回路の型のせいか、その両方のせいである。このことが、ある種の複雑な演算を処理装置の内部で実行する方法を、最適化する動機である。 As processor technology advances, newer software is also being developed. This software runs on a computer with advanced processing equipment. Users generally expect and demand higher performance from their computers. This is independent of the type of software used. Such performance problems may arise from the types of instructions and operations actually executed inside the processing device. Certain types of operations take longer to complete than others. This is because of the complexity of the operation or the type of circuit required for the operation, or both. This is the motivation for optimizing the way certain complex operations are performed inside the processing unit.
通信の応用が、10年以上に渡って、超小型処理装置の進歩を駆り立ててきた。実際、計算と通信の間の境界線は、ますますぼやけてきている。この理由は、部分的には、通信の応用で文字列を使うからである。文字列の応用は、一般消費者向け市場で広まっている。また、文字列の応用は、多数の装置で広まっている。装置とは例えば携帯電話から個人用計算機までである。このような装置は、文字列情報を、一層より高速に処理することを求めている。文字列を通信する装置は、計算し通信する装置に進化し続けている。計算し通信する装置は、次のような形の応用を行う。即ち、マイクロソフト(登録商標)インスタントメッセンジャー(商標)、電子メールの応用(例えばマイクロソフト(登録商標)アウトルック(商標))、及び携帯電話メールの応用である。その結果、将来における、個人の計算及び通信の体験は、文字列を扱う能力について、更により豊かになると期待される。 Communications applications have driven the advancement of microprocessing devices for over a decade. In fact, the line between computation and communication is becoming increasingly blurred. This is due in part to the use of character strings in communications applications. String applications are widespread in the consumer market. Also, the application of character strings has been widespread on many devices. The device is, for example, from a mobile phone to a personal computer. Such devices require that the character string information be processed even faster. Devices that communicate character strings continue to evolve into devices that compute and communicate. Devices that calculate and communicate have applications in the following forms: That is, Microsoft (registered trademark) Instant Messenger (trademark), an application of electronic mail (for example, Microsoft (registered trademark) Outlook (trademark)), and an application of mobile phone mail. As a result, personal computing and communication experiences in the future are expected to be even richer in their ability to handle strings.
従って、計算又は通信する装置同士の間で交換される文字列情報を、処理すること又は構文解析することは、現在の計算装置及び通信装置にとって、一段と重要性を増している。とりわけ、通信又は計算する装置が文字情報の列を解釈することは、文字列データに対して行う最も重要な演算のうちの、いくつかを含む。このような演算では、計算量が嵩むにしても、データの並列度は高い水準であってもよい。この並列度を利用して、様々なデータ格納装置を使う効率的な実装を行える。格納装置とは、例えば、単一命令複数データ(SIMD)型のレジスタである。数多くの現在の計算機アーキテクチャはまた、次のことを要求する。即ち、複数の演算、複数の命令、又は複数の下位命令(よく「マイクロ命令」又は「μop」という。)を使って、様々な論理的及び数学的演算を、多数の演算対象に対して行う。このことにより、処理速度を上げ、その論理的及び数学的演算を行うのに必要なクロック周期の数を減らす。 Accordingly, processing or parsing string information exchanged between computing or communicating devices is becoming increasingly important for current computing and communication devices. Among other things, interpreting a sequence of character information by a communicating or calculating device involves some of the most important operations performed on character string data. In such an operation, the degree of parallelism of the data may be at a high level even if the amount of calculation increases. By utilizing this degree of parallelism, efficient implementation using various data storage devices can be performed. The storage device is, for example, a single instruction multiple data (SIMD) type register. Many current computer architectures also require that: That is, various logical and mathematical operations are performed on a large number of operation targets using a plurality of operations, a plurality of instructions, or a plurality of lower instructions (often referred to as “micro instructions” or “μops”). . This speeds up processing and reduces the number of clock cycles required to perform its logical and mathematical operations.
例えば、多数の命令から成る命令列が、次のことを行うために必要であってもよい。即ち、文字列の中の特定の語を解釈するのに必要な1つ以上の演算である。この演算は、処理装置、システム、又は計算機プログラムの内部の様々なデータ型が表現する、2つ以上の文字列語を比べることを含む。しかし、このような従来の技術では、多数の処理周期が必要になることがあり、処理装置又はシステムは、結果を得るために、不要な電力を消費してしまうことがある。更に、いくつかの従来技術では、演算の対象としてもよいデータ型として、限られたものしか使えないことがある。 For example, an instruction sequence consisting of a number of instructions may be needed to do the following: That is, one or more operations required to interpret a particular word in the string. This operation involves comparing two or more string words represented by various data types within the processing device, system, or computer program. However, such a conventional technique may require a large number of processing cycles, and the processing device or system may consume unnecessary power to obtain a result. Further, in some conventional techniques, only a limited data type may be used as a target of an operation.
本発明の一態様によると、命令を記憶した機械読み取り可能媒体が提供される。前記命令は、機械により実行されると、前記機械に第1のパック化オペランドの各データ要素を、第2のパック化オペランドの各データ要素と比較する段階と、前記比較の第1の結果を記憶する段階を含む方法を実行させる。 According to one aspect of the present invention, there is provided a machine-readable medium having instructions stored thereon. The instructions, when executed by the machine, cause the machine to compare each data element of a first packed operand with each data element of a second packed operand, and to provide a first result of the comparison. The method including the step of storing is performed.
本願発明を実施例を使って説明する。本願発明は、実施例及び添付の図面によっては、限定されない。 The present invention will be described using examples. The present invention is not limited by the embodiments and the attached drawings.
以下の記載が記述するのは、技法の実施例である。この技法は、処理装置、計算機システム、又はソフトウェアプログラムの内部で、文字列の要素同士の間を比べる演算を行う。以下の記載では、多数の個別の詳細を記述する。詳細とは例えば処理装置の型、マイクロアーキテクチャの事情、事象、実施可能な機構、等である。詳細を記載する目的は、本願発明のより深い理解を与えるためである。しかし、当業者は次の点に注意。即ち、本発明を、そのような個別の詳細を抜きに実施してもよい。加えて、いくつかの周知の構造、回路などは、詳細を示していない。これは、本願発明を不要に複雑に示すのを避けるためである。 Described below are examples of techniques. This technique performs an operation to compare between elements of a character string inside a processing device, a computer system, or a software program. In the following description, numerous specific details are set forth. The details are, for example, the type of the processing device, the circumstances of the microarchitecture, the event, the executable mechanism, and the like. The purpose of describing the details is to provide a deeper understanding of the invention. However, those skilled in the art are aware of the following. That is, the present invention may be practiced without such individual details. In addition, some well-known structures, circuits, etc., do not show details. This is to avoid unnecessarily complicating the present invention.
以下の実施例を、処理装置を参照して記述する。しかし、他の実施例を、他の型の集積回路や論理部品に応用できる。本願発明と同じ技術及び教示を、他の型の回路又は半導体部品に容易に応用できる。他の型の回路又は半導体部品も、より高いパイプライン効率及び改善した性能から、利益を受けることができる。本願発明の教示は、データの演算を行う、いかなる処理装置又は機械にも、応用できる。なお、本願発明は、256ビット、128ビット、64ビット、32ビット、又は16ビットのデータの演算を行う処理装置又は機械に限定されない。本願発明を、パック化データを演算する必要がある、いかなる処理装置及び機械にも、応用できる。 The following example is described with reference to a processing device. However, other embodiments can be applied to other types of integrated circuits and logic components. The same techniques and teachings as the present invention can be readily applied to other types of circuits or semiconductor components. Other types of circuits or semiconductor components can also benefit from higher pipeline efficiency and improved performance. The teachings of the present invention can be applied to any processing device or machine that performs data operations. Note that the present invention is not limited to a processing device or a machine that performs 256-bit, 128-bit, 64-bit, 32-bit, or 16-bit data operation. The present invention can be applied to any processing device and machine that needs to operate packed data.
以下の記載では、説明のために、多数の個別の詳細を記述する。詳細を記載する目的は、本願発明の徹底的な理解を与えるためである。しかし、当業者は次の点を理解することになる。即ち、これらの個別の詳細は、本願発明を実施するために必要ではない。場合により、周知の電気的な構造及び回路については、特に詳しくは記載していない。これは、本願発明を不要に複雑に示すのを避けるためである。加えて、以下の記載は、例を示す。添付の図面は、様々な例を示す。これらの例を示すのは、説明のためである。しかし、これらの例を、本願発明を限定する意味で解釈してはならない。これらの例は、本願発明の例を示すことを、意図しているだけである。これらの例は、本願発明の全ての可能な実装を網羅する一覧を示すことを、意図していない。 In the following description, numerous specific details are set forth for purposes of explanation. The purpose of describing the details is to provide a thorough understanding of the invention. However, those skilled in the art will understand the following. That is, these individual details are not required to practice the present invention. In some instances, well-known electrical structures and circuits have not been described in detail. This is to avoid unnecessarily complicating the present invention. In addition, the following description shows examples. The accompanying drawings illustrate various examples. These examples are provided for illustrative purposes. However, these examples should not be construed as limiting the present invention. These examples are only intended to illustrate examples of the present invention. These examples are not intended to provide a comprehensive list of all possible implementations of the present invention.
以下の例では、命令の取り扱い及び分散を、実行部及び論理回路の文脈で記述する。しかし、本願発明の他の実施例を、ソフトウェアによっても実現できる。1つの実施例では、本願発明の方法を、機械が実行可能な命令に実施する。この命令を使って、次のことを行える。即ち、汎用処理装置又は専用処理装置をこの命令によってプログラムし、本願発明の工程を実行させる。本願発明を、計算機プログラム又はソフトウェアとして提供してもよい。この計算機プログラム又はソフトウェアは、機械可読媒体又は計算機可読媒体を含んでもよい。機械可読媒体又は計算機可読媒体は、命令を内部に格納して持つ。この命令を使って、計算機(又は他の電子装置)をプログラムしてもよい。このプログラムにより、本願発明による処理を行う。代わりに、本願発明の工程を、特定のハードウェア部品によって実行してもよい。特定のハードウェア部品は、本願発明の工程を実行するための、配線を固定した論理回路を含む。又は、本願発明の工程を、プログラムされた計算機部品と専用ハードウェア部品との、いかなる組み合わせによっても実行してもよい。このようなソフトウェアを、システムの記憶装置の内部に格納できる。同様に、命令を分散できる。この分散を、網により行う。又は、この分散を、他の計算機可読媒体を使って行う。 In the following examples, instruction handling and distribution will be described in the context of execution units and logic circuits. However, other embodiments of the present invention can be realized by software. In one embodiment, the method of the present invention is implemented on machine-executable instructions. Using this instruction, you can: That is, the general-purpose processing device or the special-purpose processing device is programmed by this instruction, and the steps of the present invention are executed. The present invention may be provided as a computer program or software. The computer program or software may include a machine-readable medium or a computer-readable medium. A machine readable medium or a computer readable medium has instructions stored therein. The instructions may be used to program a calculator (or other electronic device). The processing according to the present invention is performed by this program. Alternatively, the steps of the present invention may be performed by specific hardware components. Specific hardware components include logic circuits with fixed wiring for performing the steps of the present invention. Alternatively, the steps of the present invention may be executed by any combination of programmed computer components and dedicated hardware components. Such software can be stored inside the storage device of the system. Similarly, instructions can be distributed. This dispersion is performed by a network. Alternatively, this distribution is performed using another computer-readable medium.
従って、機械可読媒体は、機械(例えば計算機)が読める形式で情報を格納又は伝達するための、いかなる機構を含んでもよい。機械可読媒体は、次のものを含むが、これらに限定されない:フロッピー(登録商標)ディスケット;光学ディスク;コンパクトディスク;CD−ROM;光磁気ディスク;ROM;RAM;EPROM;EEPROM;磁気カード若しくは光学カード;フラッシュ記憶装置;インターネット上の伝送;電気的、光学的、音響的、若しくは他の形態の伝搬する信号(例えば搬送波、赤外線信号、デジタル信号、等);又は、同様のもの。従って、計算機可読媒体は、機械(例えば計算機)が読める形式で、電子的な命令又は情報を、格納又は伝達するのに適した、いかなる型の媒体及び機械可読媒体をも含む。更に、本願発明を、計算機プログラムとしてダウンロードしてもよい。即ち、プログラムを、遠隔の計算機(例えばサーバー)から転送して、要求する計算機(例えばクライアント)に取り込んでもよい。プログラムの転送を、次の信号によって行ってもよい。即ち、電気的、光学的、音響的、又は他の形態のデータ信号。これらの信号を、搬送波又は他の伝搬媒体に実施する。これらの信号は、通信接続(例えばモデム接続、網接続等)を経由する。 Thus, a machine-readable medium may include any mechanism for storing or transmitting information in a form readable by a machine (eg, a computer). Machine-readable media include, but are not limited to, floppy diskettes; optical disks; compact disks; CD-ROMs; magneto-optical disks; ROM; RAM; EPROM; Card; flash storage; transmission over the Internet; electrical, optical, acoustic, or other forms of propagating signal (eg, carrier, infrared, digital, etc.); or the like. Accordingly, computer readable media includes any type of medium and machine readable media suitable for storing or transmitting electronic instructions or information in a form readable by a machine (eg, a computer). Further, the present invention may be downloaded as a computer program. That is, the program may be transferred from a remote computer (for example, a server) and taken into a requesting computer (for example, a client). The transfer of the program may be performed by the following signal. That is, an electrical, optical, acoustic, or other form of data signal. These signals are implemented on a carrier or other propagation medium. These signals pass through a communication connection (eg, a modem connection, a network connection, etc.).
設計は、様々な段階を踏んでもよい。即ち、設計は、創案からシミュレーションを経て製造に至る。設計を表現するデータは、その設計を多数の方法で表現してもよい。まず、シミュレーションで便利なのは、次の方法である。即ち、ハードウェアを、ハードウェア記述言語又は別の機能記述言語を使って表現してもよい。加えて、論理の及び/又はトランジスターのゲート水準の回路モデルを、設計の過程の何らかの段階で作ってもよい。更に、ほとんどの設計者は、何らかの段階で、ハードウェアモデルにおける、種々の素子の物理的な配置を表現する水準のデータに辿り着く。従来の半導体の製造技術を使う場合には、このハードウェアモデルを表現するデータは、半導体マスクの様々な層に種々の特徴が有るか無いかを指定するデータであってもよい。このマスクを使って集積回路を作る。設計におけるいかなる表現でも、そのデータをいかなる形態の機械可読媒体に格納してもよい。機械可読媒体とは、次のものでもよい。即ち、そのような情報を伝送するために、変調した若しくは他の方法で生成した、光学的若しくは電気的な波、記憶装置、又は磁気若しくは光学的な格納器(例えば円盤)。これらの媒体のいかなるものも、設計又はソフトウェア情報を「担う」又は「示す」のでもよい。符号又は設計を示す又は担う電気的な搬送波を伝送する場合に、その電気信号の複写、蓄積、又は再送を行うと、新しい複写ができる。従って、通信設備者又は網提供者は、本願発明の技術を実施する物(即ち搬送波)の複写を作ってもよい。 The design may take different stages. That is, the design extends from the creation to the manufacturing through the simulation. Data representing a design may represent the design in a number of ways. First, the following method is convenient for simulation. That is, the hardware may be expressed using a hardware description language or another function description language. In addition, logic and / or transistor gate level circuit models may be created at some stage in the design process. Further, most designers at some stage reach a level of data that represents the physical placement of various elements in the hardware model. When a conventional semiconductor manufacturing technique is used, the data representing the hardware model may be data specifying whether various layers of the semiconductor mask have various features. An integrated circuit is made using this mask. Any representation in the design may store the data on any form of machine-readable medium. The machine-readable medium may be: That is, an optical or electrical wave, storage device, or magnetic or optical enclosure (eg, a disk) that has been modulated or otherwise generated to transmit such information. Any of these media may "carry" or "show" the design or software information. When transmitting an electrical carrier that indicates or carries a code or design, copying, storing, or retransmitting the electrical signal results in a new copy. Accordingly, the telecommunications facility operator or network provider may make a copy of an entity (ie, a carrier) that implements the techniques of the present invention.
近年の処理装置では、多数の異なる実行部を使って、様々な命令を処理し実行する。全ての命令が平等に作られている訳では無い。即ち、ある命令は他の命令よりも早く完了する。別の命令は、完了するのに莫大なクロックサイクルを費やすことがある。命令の実行速度が速ければ速いほど、処理装置の全体的な性能はより良いことになる。従って、有利なのは、なるべく多くの命令を、なるべく速く実行することである。しかし、いくつかの命令は、他の命令よりも遥かに複雑である。従って、実行時間と処理装置の資源を、他の命令よりも多く必要とする。そのような命令の例としては、浮動小数点命令、記憶装置からの読み込み/記憶装置への書き出し操作、データの移動命令等がある。 Recent processing devices process and execute various instructions using a number of different execution units. Not all instructions are created equal. That is, some instructions complete earlier than others. Another instruction may spend an enormous number of clock cycles to complete. The faster the instruction is executed, the better the overall performance of the processing unit. Therefore, it is advantageous to execute as many instructions as possible, as quickly as possible. However, some instructions are much more complex than others. Therefore, it requires more execution time and processor resources than other instructions. Examples of such an instruction include a floating-point instruction, a read / write operation from / to a storage device, and a data movement instruction.
ますます多くの計算機システムを、インターネット、文章作成、及びマルチメディアのアプリケーションで使うようになったので、時が経つにつれ、処理装置に、それらを支援する機能が追加されてきた。例えば、単一命令複数データ(SIMD)型の整数及び浮動小数点命令、並びに、ストリーミングSIMD拡張(SSE)のような命令は、特定のプログラムの仕事を実行するのに必要な命令の総数を減らす。このことにより、消費電力を減らすこともできる。このような命令がソフトウェアの性能を高速化できるのは、複数のデータ要素に並列に演算を行うことによる。その結果、広範な応用で性能を上げられる。応用は、映像の処理、発話の処理、及び画像や写真の処理を含む。SIMD命令の実装は、超小型処理装置や類似の論理回路で行われている。このような実装は、通常、多数の問題を孕んでいる。更に、SIMD演算は複雑なので、大抵は追加の回路が必要になる。追加の回路により、データを正しく処理して演算する。 As more and more computer systems are used for Internet, text-writing, and multimedia applications, over time, processing units have been provided with features to support them. For example, instructions such as single instruction multiple data (SIMD) type integer and floating point instructions, and streaming SIMD extensions (SSE) reduce the total number of instructions required to perform a particular program's work. Thereby, power consumption can be reduced. Such instructions can speed up the performance of software by performing operations on a plurality of data elements in parallel. As a result, performance can be increased in a wide range of applications. Applications include video processing, speech processing, and image and photo processing. The implementation of the SIMD instruction is performed by a micro processor or a similar logic circuit. Such an implementation typically has a number of problems. In addition, SIMD operations are complex and often require additional circuitry. The additional circuit correctly processes and computes the data.
現在、少なくとも2つのパック化演算対象のデータ要素の各々を比べるSIMD命令は存在しない。本発明の1つの実施例で行うようなSIMDパック化比較命令が無いと、応用プログラムで同じ結果を得るために、多数の命令及びデータレジスタが必要になることがある。応用プログラムは、例えば文字列についての、解釈、圧縮及び復元、処理、並びに演算を行う。本願で開示する実施例では、「文字列」の比較と「列」の比較を、相互に交換可能なように参照する。しかし、本発明の実施例を、情報のいかなる列(例えば、文字の列、数値の列、又は他のデータの列)にも適用してよい。 Currently, there is no SIMD instruction that compares each of at least two data elements to be packed. Without SIMD packed compare instructions as performed in one embodiment of the present invention, multiple instructions and data registers may be required to achieve the same result in an application program. The application program performs, for example, interpretation, compression and decompression, processing, and calculation of a character string. In the embodiments disclosed in the present application, the comparison of “character string” and the comparison of “string” are referred to interchangeably. However, embodiments of the present invention may be applied to any sequence of information (eg, a sequence of characters, a sequence of numbers, or a sequence of other data).
従って、本願発明の実施例による、少なくとも1つの文字列比較命令は、プログラムのオーバーヘッド及び必要な資源を減らせる。本願発明の実施例は、文字列を構文解析する演算を、SIMD関連のハードウェアを利用する算法として実装する方法を提供する。現在、SIMDレジスタにあるデータについて、文字列を構文解析する演算を行うことは、やや困難で手間がかかる。算法によっては、算術演算を実行する肝心の命令の数よりも、算術演算のためにデータを配置する命令に、より多くの数を必要とするほどである。本願発明の実施例による文字列比較演算の実施例を実装することにより、文字列を処理するために必要な命令の数を大幅に減らせる。 Thus, at least one string comparison instruction according to embodiments of the present invention can reduce program overhead and required resources. Embodiments of the present invention provide a method for implementing an operation for parsing a character string as an algorithm using SIMD-related hardware. At present, it is somewhat difficult and troublesome to perform an operation for parsing a character string on data in a SIMD register. Some algorithms require more instructions for arranging data for arithmetic operations than the number of critical instructions for performing arithmetic operations. By implementing the embodiment of the character string comparison operation according to the embodiment of the present invention, the number of instructions required to process a character string can be significantly reduced.
本願発明の実施例は、文字列を比べる1つ以上の演算を実装するための命令を含む。文字列を比べる演算は、一般に、データの2つの列からのデータ要素を比較することに関する。この比較により、どのデータ要素が合致するかを判断する。別の変形例を、汎用の文字列比較算法について作ってもよい。この算法も後で開示する。一般化した意味では、文字列比較演算の1つの実施例を、2つのパック化演算対象中にある個々のデータ要素に適用する。2つのパック化演算対象は、データの2つの列を示す。この文字列比較演算の実施例を、次のように汎用的に示せる:
DEST1 <− SRC1 cmp SRC2;
1つのパック化したSIMDデータ演算対象について、この汎用演算を、各演算対象の各データ要素の位置に適用できる。
Embodiments of the present invention include instructions for implementing one or more operations that compare strings. Operations that compare strings generally relate to comparing data elements from two columns of data. This comparison determines which data element matches. Another variation may be made for a general purpose string comparison algorithm. This algorithm is also disclosed later. In a generalized sense, one embodiment of a string comparison operation applies to individual data elements in two packed operations. The two packed operation targets indicate two columns of data. An example of this string comparison operation can be shown generically as follows:
DEST1 <-SRC1 cmp SRC2;
For one packed SIMD data operation target, this general-purpose operation can be applied to the position of each data element of each operation target.
上記の動作において、「DEST」と「SRC」は、対応するデータや動作の送信先と送信元を表す一般的な用語である。実施形態では、レジスタ、またはメモリ、または図示したものとは異なる名称や機能を有するその他の記憶領域により実施できる。例えば、一実施形態では、DEST1は一時的記憶レジスタやその他の記憶領域であり、SRC1とSRC2は送信先の第1と第2の記憶レジスタまたはその他の記憶領域である。他の実施形態では、SRC及びDEST記憶領域は同一記憶領域内(例えば、SIMDレジスタ)の異なるデータ記憶要素に対応する。 In the above operation, “DEST” and “SRC” are general terms indicating the destination and source of the corresponding data or operation. In an embodiment, the present invention can be implemented by a register or a memory, or another storage area having a name and function different from those illustrated. For example, in one embodiment, DEST1 is a temporary storage register or other storage area, and SRC1 and SRC2 are destination first and second storage registers or other storage areas. In other embodiments, the SRC and DEST storage areas correspond to different data storage elements in the same storage area (eg, SIMD registers).
さらに、一実施形態では、ストリング比較動作により、あるソースレジスタの各要素が他のソースレジスタの各要素と等しいかどうかのインジケータを生成し、そのインジケータをDEST1等のレジスタに記憶する。一実施形態では、インジケータはインデックス値である。他の実施形態では、インジケータはマスク値である。他の実施形態では、インジケータはその他のデータ構造やポインタを表す。 Further, in one embodiment, the string comparison operation generates an indicator of whether each element of one source register is equal to each element of another source register, and stores the indicator in a register such as DEST1. In one embodiment, the indicator is an index value. In another embodiment, the indicator is a mask value. In other embodiments, the indicators represent other data structures or pointers.
図1Aはコンピュータシステムの一例を示すブロック図である。このコンピュータシステムはプロセッサを有する。このプロセッサは、本発明の一実施形態によるストリング比較動作の命令を実行する実行ユニットを含む。システム100は、ここに説明する実施形態のような、本発明により、データを処理するアルゴリズムを実行する論理回路を含む実行ユニットを利用する、プロセッサ102等のコンポーネントを含む。システム100は、カリフォルニア州サンタクララ市のインテルコーポレイションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(登録商標)、StrongARM(登録商標)に基づくプロセッシングシステムを表す。しかし、(他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックス等を含む)他のシステムを使うことも可能である。一実施形態では、サンプルシステム100は、ワシントン州レドモンド市のマイクロソフトコーポレーションのウィンドウズ(登録商標)オペレーティングシステムの一バージョンを実行するが、他のオペレーティングシステム(ユニックス、リナックス(登録商標)等)、組み込みソフトウェア、及び/またはグラフィカルユーザインターフェイス等を用いても良い。このように、本発明の実施形態は、ハードウェア回路とソフトウェアの特定の組み合わせには限定されない。
FIG. 1A is a block diagram illustrating an example of a computer system. The computer system has a processor. The processor includes an execution unit that executes a string comparison operation instruction according to one embodiment of the invention.
実施形態はコンピュータシステムには限定されない。本発明の別の実施形態は、その他のデバイス、例えばハンドヘルドデバイスや組み込みアプリケーション等で利用することもできる。ハンドヘルドデバイスの例としては、セルラ電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタント(PDA)、ハンドヘルドPCなどがある。組み込みアプリケーションには、マイクロコントローラ、デジタルシグナルプロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、その他のオペランドにストリング比較演算を実行するシステムがある。さらに、複数のデータ(several data)に対して同時に命令を実行してマルチメディアアプリケーションの効率を向上させるアーキテクチャを組み込んだ。データのタイプとボリュームが大きくなるにつれ、コンピュータやそのプロセッサはより効率的な方法でデータを操作するように高機能化(enhanced)されねばならない。 Embodiments are not limited to computer systems. Other embodiments of the present invention may be utilized with other devices, such as handheld devices and embedded applications. Examples of handheld devices include cellular phones, Internet protocol devices, digital cameras, personal digital assistants (PDAs), handheld PCs, and the like. For embedded applications, perform string comparison operations on microcontrollers, digital signal processors (DSPs), system-on-chips, network computers (NetPCs), set-top boxes, network hubs, wide area network (WAN) switches, and other operands There is a system. In addition, it incorporates an architecture that increases the efficiency of multimedia applications by executing instructions on multiple data simultaneously. As data types and volumes grow, computers and their processors must be enhanced to manipulate the data in a more efficient manner.
図1Aは、コンピュータシステム100のブロック図であり、プロセッサ102を有する。プロセッサ102は、1つまたは複数のオペランド(operands)のデータ要素を比較するアルゴリズムを実行する1つまたは複数の実行ユニット108を含む。一実施形態をシングルプロセッサデスクトップまたはサーバシステムについて説明するが、別の実施形態をマルチプロセッサシステムで利用することができる。システム100はハブアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を含む。プロセッサ102は、CISC(complex instruction set computer)マイクロプロセッサ、RISC(reduced instruction set computing)マイクロプロセッサ、VLIW(very long instruction word)マイクロプロセッサ、複数の命令セットの組み合わせを実装したプロセッサ、その他のデジタルシグナルプロセッサ等の任意のプロセッサである。プロセッサ102は、プロセッサバス110と結合し、プロセッサバス110により、プロセッサ102とシステム100の他のコンポーネントとの間でデータ信号を送信できる。システム100の要素は、本技術分野の当業者に周知である従来の機能を実行する。
FIG. 1A is a block diagram of a
一実施形態では、プロセッサ102はレベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャによって、プロセッサ102は単一内部キャッシュを有しても、複数内部キャッシュレベルを有していてもよい。あるいは、他の実施形態では、キャッシュメモリはプロセッサ102の外部にあってもよい。他の実施形態では、具体的な実施形態及び必要性に応じて内部キャッシュと外部キャッシュを組み合わせてもよい。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、命令ポインタレジスタを含む様々なレジスタに相異なるタイプのデータを格納できる。
In one embodiment, processor 102 includes level one (L1)
プロセッサ102には、実行ユニット108もあり、整数及び浮動小数点の演算を実行する論理回路を含む。プロセッサ102は、マクロ命令のマイクロコードを格納するマイクロコード(μコード)ROMも含む。この実施形態では、実行ユニット108はパック化命令セット109を処理する論理回路を含む。一実施形態では、パック化命令セット109は、複数のオペランドの要素を比較するパック化ストリング比較命令(packed string comparison instruction)を含む。汎用プロセッサ102の命令セットにパック化命令セット109を含めることにより、その命令を実行する関連回路とともに、多くのマルチメディアアプリケーションで利用する演算を汎用プロセッサ102においてパック化データを用いて実行することができる。このように、プロセッサのデータバスの幅を最大限に用いてパック化データ(packed data)に演算を行ことにより、多くのマルチメディアアプリケーションを高速化し、より効率的に実行することができる。これにより、プロセッサのデータバスを介してデータを小さい単位で転送して、一度に一データ要素に演算を実行する必要が無くなる。
マイクロコントローラ、組み込みプロセッサ、グラフィックスデバイス、DSP、その他のタイプの論理回路において、実行ユニット108の別の実施形態を利用することもできる。システム100は、メモリ120を含む。メモリ120は、DRAM(dynamic random access memory)デバイス、SRAM(static random access memory)デバイス、フラッシュメモリデバイス、その他のメモリデバイスである。メモリ120は、プロセッサ102により実行できる、データ信号で表された命令及び/またはデータを格納できる。システム論理チップ116はプロセッサバス110とメモリ120に結合している。例示した実施形態では、システム論理チップ116はメモリコントローラハブ(MCH)である。プロセッサ102は、プロセッサバス110を介してMCH116と通信できる。MCH116は、命令とデータの格納、グラフィックスコマンド、データ、及びテクスチャの格納のために、メモリ120への広帯域幅メモリパス118を提供する。MCH116は、プロセッサ102、メモリ120、及びシステム100のその他のコンポーネントの間でデータ信号を方向付け(direct)、プロセッサバス110、メモリ120、及びシステムI/O122間のデータ信号をブリッジする。実施形態によっては、システム論理チップ116は、グラフィックスコントローラ112に結合するためのグラフィックスポートを提供する。MCH116は、メモリインターフェイス118を通してメモリ120に結合している。グラフィックスカード112は、AGP(Accelerated Graphics Port)インターコネクト114によりMCH116に結合されている。
Processor 102 also has an execution unit 108, which includes logic for performing integer and floating point operations. Processor 102 also includes a microcode (μcode) ROM that stores microcode for macro instructions. In this embodiment, execution unit 108 includes logic for processing packed instruction set 109. In one embodiment, packed instruction set 109 includes a packed string comparison instruction that compares elements of a plurality of operands. By including the packed instruction set 109 in the instruction set of the general-purpose processor 102, the operations used in many multimedia applications can be performed using the packed data in the general-purpose processor 102, along with the associated circuits that execute the instruction. it can. Thus, by performing operations on packed data using the maximum width of the data bus of the processor, many multimedia applications can be speeded up and executed more efficiently. This eliminates the need to transfer data in small units via the data bus of the processor and perform operations on one data element at a time.
Other embodiments of execution unit 108 may be utilized in microcontrollers, embedded processors, graphics devices, DSPs, and other types of logic circuits.
システム100は、独自のハブインターフェイスバス122を用いて、MCH116をI/Oコントローラハブ(ICH)130に結合する。ICH130は、ローカルI/Oバスを介してI/Oデバイスに直接接続する。ローカルI/Oバスは、メモリ120、チップセット、及びプロセッサ102に周辺機器を接続する高速I/Oバスである。例としては、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)128、ワイヤレストランシーバ126、データストレージ124、ユーザ入力及びキーボードインターフェイスを含むレガシーI/Oコントローラ、USB(Universal Serial Bus)等のシリアル拡張ポート、及びネットワークコントローラ134がある。データストレージデバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス、その他の大容量ストレージデバイスである。
システムの他の実施形態の場合、ストリング比較命令を含むアルゴリズムを実行する実行ユニットをシステムオンチップ(system on a chip)で利用できる。システムオンチップの一実施形態は、プロセッサ及びメモリである。かかるシステムのメモリはフラッシュメモリである。フラッシュメモリはプロセッサ及びその他のシステムコンポーネントと同じダイ(die)にあってもよい。また、他の論理ブロック、例えばメモリコントローラまたはグラフィックスコントローラ等がシステムオンチップ上にあってもよい。 For other embodiments of the system, an execution unit that executes an algorithm including a string comparison instruction is available on a system on a chip. One embodiment of a system on a chip is a processor and a memory. The memory of such a system is a flash memory. The flash memory may be on the same die as the processor and other system components. Also, other logic blocks, such as a memory controller or a graphics controller, may be on the system-on-chip.
図1Bは、本発明の一実施形態の原理を化体するデータ処理システム140を示す。当業者には言うまでもなく、本発明の範囲から逸脱することなく、ここに説明する実施形態を別の処理システムで利用することもできる。
FIG. 1B shows a
コンピュータシステム140は、ストリング比較演算を含むSIMD演算を実行できるプロセッシングコア159を有する。一実施形態では、プロセッシングコア159は、任意タイプのアーキテクチャの処理ユニットを表し、CISC、RISC、VLIWなど各タイプのアーキテクチャを含むが、これらには限定されない。プロセッシングコア159は、1つまたは複数のプロセステクノロジーでの生産に適しており、機械読み取り可能媒体で十分に詳しく表せるので、生産が容易になる。
プロセッシングコア159は、実行ユニット142、一組のレジスタファイル145、及びデコーダ144を有する。プロセッシングコア159は、この他の回路(図示せず)も含むが、この回路は本発明を理解するためには必要ない。実行ユニット142は、プロセッシングコア159が受け取った命令を実行するために使用する。実行ユニット142は、一般的なプロセッサ命令を認識するのに加え、パック化命令セット143の命令を認識して、パック化データフォーマットに演算を実行する。パック化命令セット143は、ストリング比較演算をサポートする命令を含み、他のパック化命令を含んでも良い。実行ユニット142は内部バスによりレジスタファイル145に結合している。レジスタファイル145は、データを含む情報を格納する、プロセッシングコア159上の記憶領域を表す。上記の通り、パック化データを記憶するのに用いる記憶領域は必須ではない。実行ユニット142はデコーダ144に結合している。デコーダ144は、プロセッシングコア159が受け取った命令を制御信号及び/またはマイクロコードエントリーポイント(microcode entry points)にデコードするために用いられる。実行ユニット142は、これらの制御信号及び/またはマイクロコードエントリーポイントに応じて適切な演算を実行する。
The
プロセッシングコア159は、他の様々なシステムデバイスと通信するためにバス141と結合されている。システムデバイスには、シンクロナスDRAM(SDRAM)コントロール146、スタティックRAM(SRAM)コントロール147、バーストフラッシュメモリインターフェイス148、PCMCIA/コンパクトフラッシュ(登録商標)(CF)カードコントロール149、液晶ディスプレイ(LCD)コントロール150、DMAコントローラ151、代替バスマスターインターフェイス152が含まれるが、これらには限定されない。一実施形態では、データプロセッシングシステム140は、I/Oバス153を介して様々なI/Oデバイスと通信するためのI/Oブリッジ154も有する。I/Oデバイスには、例えばUART155、USB156、ブルートゥース(登録商標)ワイヤレスUART157、及びI/O拡張インターフェイス158が含まれるが、これらには限定されない。
Processing
データプロセッシングシステム140の一実施形態は、ストリング比較演算を含むSIMD演算を実行できる、モバイル、ネットワーク及び/またはワイヤレス通信およびプロセッシングコア159である。プロセッシングコア159は、様々なオーディオ、ビデオ、画像化、及び通信アルゴリズムでプログラムすることができる。これらのアルゴリズムには、例えば、ウォルシュ・アダマール変換、高速フーリエ変換、離散余弦変換(DCT)、これらのそれぞれの逆変換;色空間変換等の圧縮・解凍方法、ビデオエンコード動き予測、またはビデオデコード動き補償;パルスコード変調(PCM)等の変復調(MODEM)機能等が含まれる。
One embodiment of the
図1Cは、SIMDストリング比較演算を実行できるデータ処理システムのさらに別の実施形態を示す。別の一実施形態によるデータプロセッシングシステム160は、メインプロセッサ166、SIMDコ・プロセッサ161、キャッシュメモリ167、及び入出力システム168を含む。入出力システム168は、任意的に、ワイヤレスインターフェイス169に結合している。SIMDコ・プロセッサ161は、ストリング比較演算を含むSIMD演算を実行できる。プロセッシングコア170は、1つまたは複数のプロセステクノロジーでの生産に適しており、機械読み取り可能媒体で十分に詳しく表せるので、プロセッシングコア170を含むデータプロセッシングシステム160の全部または一部の生産が容易になる。
FIG. 1C illustrates yet another embodiment of a data processing system capable of performing a SIMD string comparison operation. The
一実施形態では、SIMDコ・プロセッサ161は、実行ユニット162と一組のレジスタファイル164を有する。メインプロセッサ165の一実施形態は、実行ユニット162が実行するSIMDストリング比較命令を含む命令セット163の命令を認識するデコーダ165を有する。別の実施形態では、SIMDコ・プロセッサ161は、デコーダ165Bの少なくとも一部を有し、命令セット163の命令をデコードする。プロセッシングコア170は、この他の回路(図示せず)も含むが、この回路は本発明の実施形態を理解するためには必要ない。
In one embodiment, the SIMD co-processor 161 has an
動作中、メインプロセッサ166は、キャッシュメモリ167や入出力システム168とのインターラクションを含む、一般的なタイプのデータ処理演算を制御するデータ処理命令ストリーム(stream of data processing instructions)を実行する。SIMDコ・プロセッサ命令はデータ処理命令ストリームの中に組み込まれている。メインプロセッサ166のデコーダ165は、SIMDコ・プロセッサ命令を、付随するSIMDコ・プロセッサ161が実行すべきタイプであるとして認識する。従って、メインプロセッサ166は、これらのSIMDコ・プロセッサ命令(または、SIMDコ・プロセッサ命令を表す制御信号)をコ・プロセッサバス166上に発行し、付随するSIMDコ・プロセッサはコ・プロセッサバス166からコ・プロセッサ命令を受け取る。この場合、SIMDコ・プロセッサ161は、それに宛てられたSIMDコ・プロセッサ命令を受け取り、実行する。
In operation,
SIMDコ・プロセッサ命令が処理するデータは、ワイヤレスインターフェイス169を介して受け取ってもよい。一例として、音声通信をデジタル信号の形式で受信して、SIMDコ・プロセッサ命令で処理して、その音声通信を表すデジタルオーディオサンプルを再生する。他の一例として、圧縮オーディオ及び/またはビデオをデジタルビットストリームの形式で受信して、SIMDコ・プロセッサ命令で処理して、そのデジタルオーディオサンプル及び/またはモーションビデオフレームを再生してもよい。プロセッシングコア170の一実施形態では、メインプロセッサ166とSIMDコ・プロセッサ161は単一のプロセッシングコア170に集積されている。プロセッシングコア170は、実行ユニット162、一組のレジスタファイル164、及びデコーダ165を有し、SIMDストリング比較命令を含む命令セット163の命令を認識する。
Data processed by the SIMD co-processor instructions may be received via the wireless interface 169. As an example, a voice communication is received in the form of a digital signal and processed with SIMD co-processor instructions to reproduce digital audio samples representing the voice communication. As another example, compressed audio and / or video may be received in the form of a digital bitstream and processed with SIMD co-processor instructions to play the digital audio samples and / or motion video frames. In one embodiment of
図2は、プロセッサ200のマイクロアーキテクチャを示すブロック図である。プロセッサ200は、本発明の一実施形態によるストリング比較命令を実行する論理回路を含む。ストリング比較命令の一実施形態では、第1のオペランドの各データ要素を第2のオペランドの各データ要素と比較して、各比較結果が一致したかを示すインジケータを格納する。実施形態では、サイズがバイト、ワード、ダブルワード、クアッドワード(quadword)等であり、データタイプが整数や浮動小数点であるデータ要素に、ストリング比較命令を演算することができる。一実施形態では、インオーダー(in-order)フロントエンド201がプロセッサ200の一部となっており、実行するマクロ命令をフェッチして、後でプロセッサパイプラインで使用するように準備する。フロントエンド201は複数のユニットを含む。一実施形態では、命令プリフェッチャ226は、メモリからマクロ命令をフェッチして、命令デコーダ228に供給(feed)する。命令デコーダ228は、マクロ命令を、機械が実行可能なマイクロ命令またはマイクロ演算(micro opやμopsとも呼ぶ)と呼ばれるプリミティブ(primitives)にデコードする。一実施形態では、トレースキャッシュ230は、デコードされたマイクロ演算を取って、プログラムオーダーシーケンス(program ordered sequences)またはトレース(traces)を組立、実行のためにマイクロ演算キュー234に入れる。トレースキャッシュ230が複雑なマクロ命令を見つける(encounter)と、マイクロコードROM232がその演算を完了するのに必要なマイクロ演算を供給する。
FIG. 2 is a block diagram illustrating the micro-architecture of the
多数のマクロ命令は単一のマイクロ演算に変換されるが、他のマクロ命令はその演算を完全に完了するのに複数の(several)マイクロ演算を必要とする。一実施形態では、1つのマクロ命令を完了するのに5つ以上のマイクロ演算が必要であれば、デコーダ228はマイクロコードROM232にアクセスしてマクロ命令を実行する。一実施形態では、パック化ストリング比較命令を少数のマイクロ演算にデコードして、命令デコーダ228で処理する。他の実施形態では、演算を行うのに多数のマイクロ演算が必要な場合、パック化ストリング比較アルゴリズムをマイクロコードROM232内に格納することもできる。トレースキャッシュ230は、マイクロコードROM232のストリング比較アルゴリズムのマイクロコードシーケンスを読むための、正しいマイクロ命令ポインタを決定するエントリーポイントのプログラマブルロジックアレイ(PLA)である。マイクロコードROM232がカレントの(current)マクロ命令のマイクロ演算のシーケンス決定(sequencing)を終了すると、マシンのフロントエンド201は、トレースキャッシュ230からマイクロ演算のフェッチを再開する。
Many macro instructions are translated into a single micro-operation, while other macro instructions require several micro-operations to complete the operation completely. In one embodiment, if more than four micro-operations are required to complete a macro instruction,
一部のSIMDその他のマルチメディアタイプの命令は複雑な命令であると考えられる。浮動小数点関係の命令もほとんどが複雑な命令である。そこで、命令デコーダ228は複雑なマクロ命令が来ると(encounter)、マイクロコードROM232の適切な場所にアクセスして、そのマクロ命令のマイクロコードシーケンスを読み出す。そのマクロ命令を実行するのに必要な様々なマイクロ演算を、アウトオブオーダー(out-of-order)実行エンジン203に送り、適切な整数実行ユニット及び浮動小数点実行ユニットで実行する。
Some SIMD and other multimedia type instructions are considered to be complex instructions. Most floating point instructions are also complicated instructions. Thus, when a complex macro instruction arrives, the
アウトオブオーダー実行エンジン203は、マイクロ命令の実行準備をするところである。アウトオブオーダー実行論理回路は、多数のバッファを有し、マイクロ命令がパイプラインを下り、実行スケジューリングがなされるにつれ、実行を最適化するように、マイクロ命令のフローをスムースにして並べ替える。アロケータロジックは、各マイクロ演算を実行するために必要なマシンバッファとリソースをアロケートする。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリーにリネーム(rename)する。アロケータは、命令スケジューラであるメモリスケジューラ、高速スケジューラ202、低速・一般浮動小数点スケジューラ204、及び単純浮動小数点スケジューラ206の前にある、メモリ演算用と非メモリ演算用の2つのマイクロ演算キューの一方の各マイクロ演算にエントリーをアロケートする。マイクロ演算スケジューラ202、204、206は、マイクロ演算が依存する入力レジスタオペランドソースの準備状況(readiness)と、マイクロ演算がその演算を完了するのに必要とする実行リソースの利用可能性とに基づき、マイクロ演算がいつ実行できるか決定する。本実施形態の高速スケジューラ202は、メインクロックサイクルの半分ごとにスケジューリングをできるが、他のスケジューラはメインプロセッサクロックサイクルごとにしかスケジューリングができない。複数のスケジューラはディスパッチポートをアービトレーションしてマイクロ演算の実行をスケジューリングする。 The out-of-order execution engine 203 is preparing to execute a microinstruction. The out-of-order execution logic has a large number of buffers and smoothly reorders the flow of microinstructions to optimize execution as the microinstructions go down the pipeline and execution is scheduled. The allocator logic allocates the machine buffers and resources needed to perform each micro operation. Register renaming logic renames the logic register to an entry in the register file. The allocator consists of one of two micro operation queues, one for memory operation and one for non-memory operation, that precede the instruction scheduler memory scheduler, high speed scheduler 202, low speed / general floating point scheduler 204, and simple floating point scheduler 206. Allocate an entry for each micro operation. The micro-operation scheduler 202, 204, 206 may determine, based on the readiness of the input register operand source on which the micro-operation depends, and the availability of execution resources required by the micro-operation to complete the operation, Determine when micro-operations can be performed. The fast scheduler 202 of this embodiment can schedule every half of the main clock cycle, while other schedulers can schedule only every main processor clock cycle. A plurality of schedulers arbitrate the dispatch ports to schedule the execution of micro-operations.
レジスタファイル208、210はスケジューラ202、204、206と、実行ブロック211の実行ユニット212、214、216、218、220、222、224との間にある。整数演算と浮動小数点演算にはそれぞれ別のレジスタファイル208、210がある。他の実施形態では、整数レジスタ及び浮動小数点レジスタは同一レジスタファイルにあってもよい。本実施形態の各レジスタファイル208、210は、ちょうど完了した結果であってまだレジスタファイルに書き込まれていないものを、新しいディペンデント(dependent)なマイクロ演算にバイパスまたは転送するバイパスネットワークを含む。整数レジスタファイル208と浮動小数点レジスタファイル210は、互いにデータをやりとりすることができる。一実施形態では、整数レジスタファイル208は、下位32ビット用と上位32ビット用である2つの別々のレジスタファイルに分離されている。一実施形態の浮動小数点レジスタファイル210は、128ビット幅のエントリーを有する。浮動小数点命令は、一般的には64ビットから128ビットの幅のオペランドを有するからである。
The register files 208, 210 are between the schedulers 202, 204, 206 and the
実行ブロック211は、実行ユニット212,214,216,218,220,222,224を含み、これらにより命令が実際に実行される。このセクションにはレジスタファイル208,210が含まれる。レジスタファイル208,210は、マイクロ命令の実行に必要な整数及び浮動小数点データオペランドの値が記憶される。本実施形態のプロセッサ200は、複数の実行ユニット、すなわちアドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点moveユニット224により構成されている。本実施形態では、浮動小数点実行ブロック222、224は、浮動小数点演算、MMX演算、SIMD演算、及びSSE演算を実行する。本実施形態の浮動小数点ALU222は、64ビット対64ビットの浮動小数点割り算器を含み、割り算、平方根、剰余のマイクロ演算を実行する。本発明の実施形態では、浮動小数点値が関わる動作は浮動小数点ハードウェアで行われる。例えば、整数形式と浮動小数点形式の間の変換には浮動小数点レジスタファイルが関与する。同様に、浮動小数点割り算演算は浮動小数点割り算器で行われる。一方、非浮動小数点型や整数型は整数ハードウェアリソースで処理される。単純かつ頻度が高いALU演算は高速ALU実行ユニット216、218に行く。本実施形態の高速ALU216,218は、有効レイテンシーがクロックサイクルの半分である高速演算を実行できる。一実施形態では、ほとんどの複雑な整数演算は低速ALU220に行く。低速ALU220が、乗算、シフト、フラグロジック、ブランチ処理等のレイテンシーが長いタイプの演算用の整数実行ハードウェアを含むからである。メモリロード・ストア命令は、AGU212,214で実行される。この実施形態は、整数ALU216,218,220は、64ビットデータオペランドに整数演算を実行するものとして説明した。別の実施形態では、ALU216,218,220は、16,32,128,256等の様々なデータビットをサポートするように実施することもできる。同様に、浮動小数点ユニット222,224は、様々な幅のビットを有するある範囲のオペランドをサポートするように実施することもできる。一実施形態では、浮動小数点ユニット222、224は、SIMD命令やマルチメディア命令とともに、128ビット幅のパック化データオペランドに演算をすることができる。
本実施形態では、マイクロ演算スケジューラ202,204,206は、親のロード(load)の実行が終わる前に、ディペンデント演算(dependent operations)をディスパッチする。マイクロ演算はプロセッサ200においてスペキュレーティブ(speculatively)にスケジューリングされるので、プロセッサ200はメモリミスを処理するロジックも含む。データキャッシュにおいてデータロードがミスすると、パイプライン中には、データが一時的に正しくないディペンデント演算がある。正しくないデータを使う命令をリプレイメカニズムが追跡し、再実行する。ディペンデント演算のみをリプレイする必要があり、インディペンデント演算は完了することができる。プロセッサの一実施形態のスケジューラとリプレイメカニズムは、ストリング比較演算の命令シーケンスを捉えるように設計されている。
In the present embodiment, the micro operation schedulers 202, 204, 206 dispatch dependent operations before the execution of the parent load ends. Because micro-operations are speculatively scheduled in
「レジスタ」という用語は、オペランドを特定するマクロ命令の一部として使われる、オンボードプロセッサの記憶場所を言う。換言すると、ここでレジスタとは、プロセッサの外側から(プログラマーの視点から)見えるレジスタである。しかし、一実施形態のレジスタは、特定タイプの回路を意味していると限定すべきではない。むしろ、実施形態のレジスタは、データを記憶して供給し、本明細書に記載する機能を実行できるだけでよい。ここで説明したレジスタは、専用の物理的レジスタ、レジスタリネーミングを利用した動的割当ての物理的レジスタ、専用の物理的レジスタ及び動的割当の物理的レジスタの組み合わせなど、任意数の異なる技術を用いて、プロセッサ内の回路により実施することができる。一実施形態では、整数レジスタは32ビットの整数データを記憶する。一実施形態のレジスタファイルは、パック化データ用に8個のマルチメディアSIMDレジスタも含む。以下の説明では、レジスタは、カリフォルニア州サンタクララ市のインテルコーポレイションのMMXテクノロジーで実現された、マイクロプロセッサの64ビット幅MMX(登録商標)レジスタ(場合によっては「mm」レジスタとも呼ぶ)などの、パック化データを保持するように設計されたデータレジスタであるものとする。これらのMMXレジスタは、整数形式と浮動小数点形式とがあるが、SIMD命令やSSE命令をともなうパック化データ要素に利用できる。同様に、SSE2,SSE3,SSE4またはそれ以降(総称的に「SSEx」と呼ぶ)のテクノロジーに関する128ビット幅のXMMレジスタも、このようなパック化データオペランドを保持するために用いることができる。本実施形態では、パック化データや整数データを記憶する際、レジスタは2つのデータタイプを区別する必要はない。
The term "register" refers to a location on an onboard processor that is used as part of a macro instruction that specifies an operand. In other words, a register here is a register that is visible from outside the processor (from a programmer's point of view). However, the register of one embodiment should not be limited to mean any particular type of circuit. Rather, the registers of the embodiments need only be able to store and supply data and perform the functions described herein. The registers described herein may employ any number of different technologies, including dedicated physical registers, dynamically allocated physical registers using register renaming, and combinations of dedicated and dynamically allocated physical registers. And can be implemented by circuitry within the processor. In one embodiment, the
以下の図の実施例では、複数のデータオペランドを説明する。図3Aは、本発明の一実施形態によるマルチメディアレジスタにおける様々なパック化データタイプを表した図である。図3Aは、128ビット幅オペランドの、パック化バイト310、パック化ワード320、及びパック化ダブルワード330を示している。本実施例のパック化バイトフォーマット310は、128ビットの長さで、16個のパック化バイトデータ要素を含む。ここでは、1バイトは8ビットのデータであると定義する。各バイトデータ要素の情報は、バイト0がビット7からビット0まで、バイト1がビット15からビット8まで、バイト2がビット23からビット16まで、そして最終的にバイト15がビット127からビット120までに記憶される。このように、レジスタのすべてのビットが利用される。このような記憶構成をとることにより、プロセッサの記憶効率が高まる。また、16個のデータ要素にアクセスするので、1つの演算を16個のデータ要素に並行に演算することができる。
In the embodiment of the following figures, a plurality of data operands will be described. FIG. 3A is a diagram illustrating various packed data types in a multimedia register according to an embodiment of the present invention. FIG. 3A illustrates a packed
一般的に、データ要素は、単一のレジスタや記憶場所(memory location)に格納される個別のデータ(individual piece of data)であり、他のデータ要素と同じ長さのものである。SSExテクノロジーに関連するパック化データシーケンスでは、XMMレジスタに格納されるデータ要素数は、128ビットを個々のデータ要素のビット長で割った数である。MMX及びSSEテクノロジーに関連するパック化データシーケンスでは、MMXレジスタに格納されるデータ要素数は、64ビットを個々のデータ要素のビット長で割った数である。図3Aに示したデータタイプは128ビット長であるが、本発明の実施形態は、64ビット幅でもその他のサイズのオペランドでも動作可能である。本実施例のパック化ワードフォーマット320は、128ビットの長さで、8個のパック化ワードデータ要素を含む。各パック化ワードは16ビットの情報を含む。図3Aのパック化ダブルワードフォーマット330は、128ビットの長さで、4個のパック化ダブルワードデータ要素を含む。各パック化ダブルワードデータ要素は32ビットの情報を含む。パック化クアドワード(quadword)は、128ビットの長さであり、2つのパック化クアドワードデータ要素を含む。
In general, a data element is an individual piece of data stored in a single register or memory location and has the same length as other data elements. In packed data sequences related to SSEx technology, the number of data elements stored in the XMM register is 128 bits divided by the bit length of each data element. In packed data sequences related to MMX and SSE technologies, the number of data elements stored in the MMX register is 64 bits divided by the bit length of each data element. Although the data type shown in FIG. 3A is 128 bits long, embodiments of the present invention can operate with 64-bit wide or other size operands. The packed
図3Bは、別のレジスタ内データ記憶フォーマットを示す図である。各パック化データは独立した2つ以上のデータ要素を含んでいても良い。パック化ハーフ341、パック化シングル342、及びパック化ダブル343である3つのパック化データフォーマットを示した。パック化ハーフ341、パック化シングル342、及びパック化ダブル343の一実施形態は、固定小数点データ要素である。別の実施形態では、パック化ハーフ341、パック化シングル342、及びパック化ダブル343は、浮動小数点データ要素を含んでいてもよい。パック化ハーフ341の別の一実施形態は、8個の16ビットデータ要素を含む128ビット長データである。パック化シングル342の一実施形態は、128ビットの長さであり、4個の32ビットデータ要素を含む。パック化ダブル343の一実施形態は、128ビットの長さであり、2つの64ビットデータ要素を含む。言うまでもなく、かかるパック化データフォーマットは、例えば、96ビット、160ビット、192ビット、224ビット、256ビット、またはそれ以上のレジスタ長に拡張することができる。
FIG. 3B is a diagram showing another data storage format in a register. Each packed data may include two or more independent data elements. Three packed data formats are shown: packed
図3Cは、本発明の一実施形態によるマルチメディアレジスタにおける様々な符号付き及び符号無しのパック化データタイプを表した図である。符号無しパック化バイト表現344は、SIMDレジスタにおける符号無しパック化バイトの記憶を示す。各バイトデータ要素の情報は、バイト0がビット7からビット0まで、バイト1がビット15からビット8まで、バイト2がビット23からビット16まで、そして最終的にバイト15がビット127からビット120までに格納される。このように、レジスタのすべてのビットが利用される。このような記憶構成をとることにより、プロセッサの記憶効率が高まる。また、16個のデータ要素にアクセスするので、1つの演算を16個のデータ要素に並行に演算することができる。符号付きパック化バイト表現345は、符号付きパック化バイトの記憶を示す。各バイトデータ要素の8番目のビットは符号インジケータである。符号無しパック化ワード表現346は、ワード7からワード0までがどのようにSIMDレジスタに記憶されるかを示している。符号付きパック化ワード表現347は、符号無しパック化ワードレジスタ内表現346と同様である。各ワードデータ要素の16番目のビットは符号インジケータである。符号無しパック化ダブルワードデータ表現348は、ダブルワードデータ要素がどのように格納されるか示している。符号付きパック化ダブルワード表現349は、符号無しパック化ダブルワードレジスタ内表現348と同様である。必要な符号ビットは、各ダブルワードデータ要素の32番目のビットである。一実施形態では、オペランドは定数でもよく、それが付随する命令によって変化しない。
FIG. 3C is a diagram illustrating various signed and unsigned packed data types in a multimedia register according to an embodiment of the present invention. The unsigned packed byte representation 344 shows the storage of unsigned packed bytes in SIMD registers. The information of each byte data element is that
図3Dは、オペレーションエンコーディング(opcode)フォーマット360の一実施形態を示す。これは、32ビット以上であり、レジスタ・メモリオペランドのアドレッシングモードは、「IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference」に記載されたopcodeフォーマットのタイプに対応している。このマニュアルは、ワールドワイドウェブintel.com/design/litcentrで、カリフォルニア州サンタクララ市のインテルコーポレイションから入手できる。一実施形態では、ストリング比較演算は1つまたは複数のフィールド361及び362でエンコードされる。2つまでのソースオペランド識別子364と365を含め、一命令につき2つまでのオペランドの場所が特定される。ストリング比較命令の一実施形態では、デスティネーションオペランド識別子366はソースオペランド識別子364と同じであり、他の実施形態では異なる。別の実施形態では、デスティネーションオペランド識別子366はソースオペランド識別子365と同じであり、他の実施形態では異なる。ストリング比較命令の一実施形態では、ソースオペランド識別子364と365により特定されるソースオペランドの一方は、ストリング比較命令の結果により上書きされる。一方、他の実施形態では、識別子364はソースレジスタ要素に対応し、識別子365はデスティネーションレジスタ要素に対応する。ストリング比較命令の一実施形態では、オペランド識別子364と365は、32ビットまたは64ビットのソース及びデスティネーションオペランドを特定するために用いられる。
FIG. 3D illustrates one embodiment of an operation encoding (opcode)
図3Eは、40ビットまたはそれ以上の、別のオペレーションエンコーディング(opcode)フォーマット370を示す。opcodeフォーマット370は、opcodeフォーマット360に対応し、任意的なプレフィックスバイト378を含む。ストリング比較演算のタイプは、1つまたは複数のフィールド378、371及び372でエンコードされる。1つの命令につき2つまでのオペランドの場所がソースオペランド識別子374と375、及びプレフィックスバイト378により特定される。ストリング比較命令の一実施形態では、プレフィックスバイト378は、32ビット、64ビット、または128ビットのソース及びデスティネーションオペランドを特定するために用いられる。ストリング比較命令の一実施形態では、デスティネーションオペランド識別子376はソースオペランド識別子374と同じであり、他の実施形態では異なる。別の実施形態では、デスティネーションオペランド識別子376はソースオペランド識別子375と同じであり、他の実施形態では異なる。一実施形態では、ストリング比較演算は、オペランド識別子374と375により特定されるオペランドの各要素を、オペランド識別子374と375により特定される他のオペランドの各要素と比較、その各要素をストリング比較演算の結果により上書きする。一方、他の実施形態では、識別子374と375により特定されるオペランドのストリング比較は、他のレジスタの他のデータ要素に書き込まれる。opcodeフォーマット360と370では、MODフィールド363と373、及び任意的なスケール・インデックス・ベース及びディスプレースメントバイトにより部分的に規定される、レジスタからレジスタ、メモリからレジスタ、メモリによるレジスタ、レジスタによるレジスタ、イミーディエイト(immediate)によるレジスタ、レジスタからメモリへのアドレッシングが可能である。
FIG. 3E illustrates another operation encoding (opcode)
次に図3Fを参照して、別の実施形態では、64ビット単一命令複数データ(SIMD)算術演算は、コ・プロセッサデータ処理(CDP)命令により実行される。オペレーションエンコーディング(opcode)フォーマット380は、CDPopcodeフィールド382と389を有するかかるCDP命令を示す。ストリング比較演算の別の実施形態では、CDP命令のタイプは、1つまたは複数のフィールド383、384、387及び388でエンコードされる。2つまでのソースオペランド識別子385と390と、1つのデスティネーションオペランド識別子386とを含め、一命令につき3つまでのオペランドの場所を特定できる。コ・プロセッサの一実施形態は、8、16、32及び64ビット値で動作できる。一実施形態では、ストリング比較演算は整数データ要素に実行される。実施形態では、ストリング比較命令は、条件フィールド381を用いて、条件付きで実行してもよい。ストリング比較命令によっては、ソースデータサイズはフィールド383によりエンコードできる。ストリング比較命令の実施形態では、SIMDフィールドでゼロ(Z)、ネガティブ(N)、キャリー(C)、オーバーフロー(V)の検出をできる。命令によっては飽和のタイプをフィールド384でエンコードしてもよい。
Referring now to FIG. 3F, in another embodiment, a 64-bit single instruction multiple data (SIMD) arithmetic operation is performed by a co-processor data processing (CDP) instruction. Operation encoding (opcode)
一実施形態では、ストリング比較演算の結果が非ゼロであることを示すために、フィールドまたは「フラグ」を用いてもよい。実施形態によっては、ソース要素が無効であることを示すフラグや、ストリング比較演算の結果のLSBまたはMSBを示すフラグなどの他のフィールドを使ってもよい。 In one embodiment, a field or "flag" may be used to indicate that the result of the string comparison operation is non-zero. In some embodiments, other fields may be used, such as a flag indicating that the source element is invalid, or a flag indicating the LSB or MSB of the result of the string comparison operation.
図4は、本発明による、パック化データオペランドにストリング比較演算を実行するロジックの一実施形態を示すブロック図である。本発明の実施形態は、上記のような様々なタイプのオペランドで機能するように実施できる。一実施形態では、本発明によるストリング比較演算は、特定のデータタイプに作用する命令セットとして実施する。例えば、整数と浮動小数点を含む32ビットデータタイプの比較を実行するパック化ストリング比較命令を提供する。同様に、整数と浮動小数点を含む64ビットデータタイプの比較を実行するパック化ストリング比較命令を提供する。以下の説明と実施例により、データ要素が何を表しているかに関わらずデータ要素を比較する比較命令の動作を説明する。説明を簡単にするため、一部の実施例は、データ要素がテキストの言葉である1つまたは複数のストリング比較命令の実行を示す。 FIG. 4 is a block diagram illustrating one embodiment of logic for performing a string comparison operation on packed data operands according to the present invention. Embodiments of the present invention can be implemented to work with various types of operands as described above. In one embodiment, the string comparison operation according to the present invention is implemented as an instruction set that operates on a particular data type. For example, it provides a packed string compare instruction that performs a comparison of 32-bit data types including integer and floating point. Similarly, a packed string compare instruction is provided that performs a comparison of 64-bit data types including integer and floating point. The following description and examples describe the operation of a compare instruction that compares data elements regardless of what the data elements represent. For simplicity, some embodiments show the execution of one or more string comparison instructions where the data elements are textual words.
一実施形態では、ストリング比較命令は、第1のデータオペランドDATA A 410の各要素を、第2のデータオペランドDATA B 420の各要素と比較し、各比較の結果をRESULTANT 440レジスタに格納する。以下の説明では、DATA A、DATA B、及びRESULTANTはレジスタであるものとする。しかし、そのようには限定されず、レジスタ、レジスタファイル、及びメモリの記憶場所を含む。一実施形態では、テキストストリング比較命令(例えば、「PCMPxSTRy」)は1つのマイクロ演算にデコードされる。別の実施形態では、各命令は、データオペランドにテキストストリング比較演算を行う様々な数のマイクロ演算にデコードできる。この実施例では、オペランド410、420は、ワード幅のデータ要素を有するソースレジスタ・メモリに格納された128ビット幅の情報である。一実施形態では、オペランド410、420は、128ビットSSEx XMMレジスタ等の128ビット長SIMDレジスタに保持される。一実施形態では、RESULTANT440はXMMデータレジスタでもある。他の実施形態では、RESULTANT440は、拡張レジスタ(例えば、「EAX」)などの他のタイプのレジスタであってもよく、メモリの記憶場所であってもよい。実施形態によっては、オペランドとレジスタは32、64、256ビットなどの長さであっても良く、バイト、ダブルワード、またはクアドワードサイズのデータ要素を有していてもよい。この実施例のデータ要素はワードサイズであるが、同じコンセプトをバイトやダブルワードサイズの要素に拡張することができる。一実施形態では、データオペランドが64ビット幅であれば、XMMレジスタの替わりにMMXレジスタを用いる。
In one embodiment, the string compare instruction compares each element of the first data
一実施形態では、第1のオペランド410は、A7,A6,A5,A4,A3,A2,A1及びA0の8つのデータ要素により構成されている。第1と第2のオペランドの要素間の各比較は、結果440中のデータ要素の位置に対応してもよい。一実施形態では、第2のオペランド420は、B7,B6,B5,B4,B3,B2,B1及びB0の8つのデータセグメントにより構成されている。ここでデータセグメントとは、長さが等しく、1データワード(16ビット)より構成される。しかし、データ要素とデータ要素位置はワード以外の粒度(granularities)を有していてもよい。各データ要素がバイト(8ビット)、ダブルワード(32ビット)、またはクアドワード(64ビット)であるとき、128ビットオペランドは16バイト幅、4ダブルワード幅、または2クアドワード幅のデータ要素をそれぞれ有する。本発明の実施形態は特定の長さのデータオペランドやデータセグメントに限定されず、各実施形態に適切なサイズを利用できる。
In one embodiment, the
オペランド410,420は、レジスタ、メモリの記憶場所、レジスタファイル、またはこれらの組み合わせ(mix)のどれにあってもよい。データオペランド410、420は、テキストストリング比較命令とともに、プロセッサの実行ユニットのストリング比較ロジック430に送られる。一実施形態では、命令が実行ユニットに到着する時までに、その命令はプロセッサパイプラインで早めにデコードされる。このように、ストリング比較命令はマイクロ命令(μop)またはその他のデコードされたフォーマットの形式であり得る。一実施形態では、2つのデータオペランド410,420をストリング比較ロジック430が受け取る。一実施形態では、テキストストリング比較ロジックは、2つのデータオペランドの要素が等しいかどうかの表示を生成する。一実施形態では、各オペランドの有効要素のみを比較する。有効要素は、各オペランドの各要素について他のレジスタまたはメモリの記憶場所により示される。一実施形態では、オペランド410の各要素をオペランド420の各要素と比較する。この比較により、オペランド410の要素数にオペランド420の要素数をかけた数に等しい比較結果ができる。例えば、各オペランド410と420が32ビット値である場合、結果レジスタ440は、ストリング比較ロジック430で実行されたテキスト比較演算の32×32までの結果インジケータを記憶する。一実施形態では、第1と第2のオペランドからのデータ要素は単精度(例えば、32ビット)であり、他の実施形態では、第1と第2のオペランドのデータ要素は倍精度(例えば、64ビット)である。他の実施形態では、第1と第2のオペランドは、8、16、32ビットを含む任意サイズの整数要素を含み得る。
一実施形態では、すべてのデータ位置のデータ要素は並行に処理される。他の実施形態では、データ要素位置の一部は同時に処理できる。一実施形態では、RESULTANT440は、オペランド410と420に格納された各データ要素間の比較の複数の結果により構成される。具体的には、一実施形態では、結果(RESULTANT)はオペランド410または420の一方のデータ要素数の2乗だけの比較結果を記憶してもよい。
In one embodiment, data elements at all data locations are processed in parallel. In other embodiments, some of the data element locations can be processed simultaneously. In one embodiment,
一実施形態では、RESULTANTは、オペランド410と420の有効なデータ要素の間の比較のみの比較結果を記憶する。一実施形態では、各オペランドのデータ要素は、明示的または黙示的に有効であると示され得る。例えば、一実施形態では、各オペランドデータ要素は、有効レジスタなどの他の記憶領域内に記憶される、有効ビットなどの有効性インジケータに対応する。一実施形態では、両方のオペランドの各要素の有効性ビットは、同じ有効レジスタに記憶される。しかし、他の実施形態では、1つのオペランドの有効性ビットは、第1の有効レジスタに記憶され、他のオペランドの有効性ビットは第2の有効レジスタに記憶される。有効な要素間でのみ比較を行うように、オペランドデータ要素を比較する前に、またはそれと共に、(例えば、対応する有効ビットをチェックすることにより)両方のデータ要素が有効であるか判断してもよい。
In one embodiment, RESULTANT stores the comparison result of only the comparison between the valid data elements of
一実施形態では、各オペランドの有効データ要素は、オペランドの一方または両方に記憶されたヌルまたは「ゼロ」フィールドの使用により黙示的に示され得る。例えば、一実施形態では、ヌルバイト(または他のサイズ)を要素に記憶して、ヌルバイトより重要な(significant)データ要素はすべて無効であり、一方、ヌルバイトより重要でないデータ要素はすべて有効であるので、他のオペランドの対応する有効なデータ要素と比較すべきことを示してもよい。さらに、一実施形態では、(上記の通り)1つのオペランドの有効データ要素を明示的に示し、一方、他のオペランドの有効データ要素をヌルフィールドを用いて黙示的に示しても良い。一実施形態では、有効データ要素は、1つ以上のソースオペランド内の有効なデータ要素またはサブエレメント(sub-elements)の数に対応するカウントにより示される。 In one embodiment, the valid data element for each operand may be implicitly indicated by the use of a null or "zero" field stored in one or both of the operands. For example, in one embodiment, the null byte (or other size) is stored in the element such that all significant data elements are invalid while all non-null data elements are valid. , May be indicated to be compared with corresponding valid data elements of other operands. Further, in one embodiment, the valid data element of one operand may be explicitly indicated (as described above), while the valid data element of the other operand may be implicitly indicated using a null field. In one embodiment, valid data elements are indicated by a count corresponding to the number of valid data elements or sub-elements in one or more source operands.
各オペランドの有効データ要素を示す方法にかかわらず、少なくとも1つの実施形態では、有効であると示された各オペランドのデータ要素を比較する。有効データ要素のみの比較は、様々な実施形態で複数の方法で実行できる。詳細かつ理解可能な説明をする目的では、2つのテキストストリングオペランド間で有効なデータ要素のみを比較する方法は、以下によりもっともよく概念的に説明できる。しかし、以下の説明は、テキストストリングオペランドの有効データ要素のみの比較を以下に概念的に説明または実施するかの一例に過ぎない。他の実施形態では、他の概念的説明や方法を用いて、有効なデータ要素をいかに比較するかを示す。 Regardless of how the valid data element for each operand is indicated, at least one embodiment compares the data element for each operand that is indicated as valid. Comparison of only valid data elements can be performed in multiple ways in various embodiments. For the purpose of providing a detailed and understandable explanation, a method of comparing only valid data elements between two text string operands can be best conceptually described below. However, the following description is merely one example of how the comparison of only valid data elements of a text string operand is conceptually described or performed below. In other embodiments, other conceptual descriptions and methods are used to show how valid data elements are compared.
一実施形態では、オペランドの有効なデータ要素数が(例えば、有効性レジスタの有効ビットや、最下位から始めて有効なバイト・ワードの数をカウントすることにより)明示的に示されているか、(例えば、オペランド内のヌルキャラクタにより)黙示的に示されているかにかかわらず、各オペランドの有効データ要素のみを互いに比較する。一実施形態では、有効性インジケータの集計と比較するデータ要素を、図5を参照して概念的に説明する。 In one embodiment, the number of valid data elements of the operand is explicitly indicated (e.g., by counting the number of valid bits in the validity register, or the number of valid byte words starting from the least significant), or ( Only the valid data elements of each operand are compared to each other, whether implied (for example, by a null character in the operand). In one embodiment, the data elements that are compared to the tally of validity indicators are conceptually described with reference to FIG.
図5を参照して、一実施形態では、アレイ501と505は、第1のオペランドと第2のオペランドの各要素がそれぞれ有効であるかどうかを示すエントリーを含む。例えば、上記の例では、アレイ501は、第1のオペランドが対応する有効データ要素を含む各アレイ要素には「1」を含む。同様に、アレイ505は、第2のオペランドが対応する有効データ要素を含む各アレイ要素に「1」を含む。一実施形態では、アレイ501と505は、2つのオペランドにある各有効要素に対して、アレイ要素0から始まり1を含む。例えば、一実施形態では、第1のオペランドが4つの有効要素を含む場合、アレイ501は最初の4つのアレイ要素にのみ1を含み、アレイ501の他のアレイ要素はすべてゼロである。
Referring to FIG. 5, in one embodiment,
一実施形態では、アレイ501と505はサイズが16要素であり、2つの128ビットオペランドの16個のデータ要素を表し、各々はサイズが8ビット(1バイト)である。他の実施形態では、オペランドのデータ要素のサイズが16ビットであり、アレイ501と505は8要素のみを含む。他の実施形態では、アレイ501と505は、対応するオペランドのサイズに応じて大きくても小さくてもよい。
In one embodiment,
一実施形態では、第1のオペランドの各データ要素を第2のオペランドの各データ要素と比較し、その結果をi×jアレイ510で表す。例えば、テキストストリングを表す第1のオペランドの第1のデータ要素を、例えば、他のテキストストリングを表す他のオペランドの各データ要素と比較し、アレイ510の第1の行内の各アレイ要素に記憶された「1」は、第1のオペランドの第1のデータ要素と第2のオペランドの各データ要素の間の一致に対応する。これは、アレイ510が完了するまで、第1のオペランドの各データ要素に対して繰り返される。
In one embodiment, each data element of the first operand is compared to each data element of the second operand, and the result is represented by an i ×
一実施形態では、i×jエントリーの第2のアレイ515が生成され、有効なオペランドのデータ要素のみが等しいかどうかの表示を記憶する。例えば、一実施形態では、アレイ510の最初の行511の各エントリーを対応する有効なアレイ要素506及び有効なアレイ要素502と論理的にANDを取って、その結果をアレイ515の対応する要素516に配置する。AND演算は、アレイ510の各要素と、有効なアレイ501及び505の対応する要素との間で実行し、その結果をアレイ520の対応する要素に配置してもよい。
In one embodiment, a
一実施形態では、結果アレイ520は、一オペランドのデータ要素のうち他のオペランドのデータ要素と関係するものがあるか示す。例えば、結果アレイ520は、アレイ515の要素のペアをAND演算し、ANDのすべての結果をOR演算することにより、他のオペランドのデータ要素により決まる範囲内にデータ要素があるか示すビットを記憶することができる。
In one embodiment,
図5は、少なくとも2つのパック化オペランドのデータ要素間の比較に関する様々なインジケータを記憶する結果アレイ520も示す。例えば、結果アレイ520は、アレイ515の対応する要素をOR演算することにより、2つのオペランド間に等しいデータ要素はあるかどうかを示すビットを記憶する。アレイ515のアレイ要素のどれかが、例えば、オペランドの有効なデータ要素間に一致するものがあることを示す「1」を含む場合、これは結果アレイ520に反映される。結果アレイ520の要素をOR演算して、オペランドの有効なデータ要素が等しいか判断することもできる。
FIG. 5 also shows a
一実施形態では、アレイ内の隣接する「1」を検出することにより、結果アレイ520内の、2つのオペランドのデータ要素間の有効な一致の連続を検出する。一実施形態では、これは、連続する結果アレイ要素を一度にAND演算し、「0」を検出するまで一AND演算の結果と次の結果とをAND演算することにより、実現できる。他の実施形態では、他の論理を用いて2つのパック化演算のデータ要素の有効な一致の範囲を検出してもよい。
In one embodiment, detecting a contiguous "1" in the array detects a sequence of valid matches between the data elements of the two operands in the
一実施形態では、結果アレイ520は、対応する結果アレイエントリーに「1」を返すことにより、両方のオペランドの各データ要素が一致するか示すこともできる。すべてのエントリーが等しいか判断するため、結果アレイエントリーにXOR演算を実行してもよい。他の実施形態では、他の論理を用いて2つのオペランドの有効データ要素が等しいか判断してもよい。
In one embodiment,
一実施形態では、データ要素のストリングがデータ要素の他のストリング内のどこかにあることを、テストストリングを他のストリングの同じサイズの部分と比較して、テストストリングと他のストリングのその部分との一致を結果アレイに示すことにより、検出できる。例えば、一実施形態では、第1のオペランドの3つのデータ要素に対応する3つのキャラクタのテストストリングを、第2のストリングの3つのデータ要素の第1のセットと比較する。一致を検出したら、その一致を結果アレイに反映させる。これは、一致に対応する3つの結果エントリーのグループに「1」を格納することにより行う。テストストリングを他のオペランドの次の3つのデータ要素と比較する。または、比較されるにつれてテストストリングが他のオペランドに沿って「スライド」するように、前のオペランドのデータ要素の2つと新しい第3のデータ要素を、テストストリングと比較してもよい。 In one embodiment, the test string is compared to the same sized portion of the other string to determine that the string of the data element is somewhere in the other string of the data element, and the test string and that portion of the other string are compared. Can be detected by showing a match in the result array. For example, in one embodiment, a test string of three characters corresponding to three data elements of a first operand is compared to a first set of three data elements of a second string. When a match is found, the match is reflected in the result array. This is done by storing "1" in the group of three result entries corresponding to the match. Compare the test string with the next three data elements of the other operand. Alternatively, two of the data elements of the previous operand and a new third data element may be compared to the test string such that the test string "slides" along the other operand as it is compared.
一実施形態では、アプリケーションに応じて、結果アレイのエントリーを反転、または否定してもよい。他の実施形態では、結果エントリーの一部のみを、例えば2つのオペランドのデータ要素間の有効な一致に対応するものだけを否定(negate)する。他の実施形態では、他の演算を結果アレイ520の結果エントリーに実行してもよい。例えば、実施形態によっては、結果アレイ520はマスク値として表される。他の実施形態では、結果アレイはインデックス値で表され、レジスタなどの記憶場所に記憶される。インデックスは、一実施形態では結果アレイのMSBのグループにより表され、他の実施形態ではアレイのLSBで表される。一実施形態では、インデックスは、設定されているLSBまたはMSBへのオフセット値により表される。マスクは、一実施形態ではゼロ拡張であり、他の実施形態ではバイト/ワードマスク、またはその他の粒度(granularity)である。
In one embodiment, the result array entries may be inverted or negated, depending on the application. In other embodiments, only some of the result entries are negated, eg, only those that correspond to a valid match between the data elements of the two operands. In other embodiments, other operations may be performed on the result entries of
様々な実施形態では、SIMDオペランドの各要素の比較する際の上記の各相違は、個々の命令として実行される。他の実施形態では、上記の相違は、命令に付随するフィールド(immediate fields)などの単一の命令の属性を変えることにより実行され得る。図6は、1つまたは複数の命令により実行される、2つまたはそれ以上のSIMDオペランドの各データ要素を比較する様々な動作を示す図である。一実施形態では、図6の動作により比較されるオペランドはテキストストリングである。他の実施形態では、オペランドはその他のデータ情報やデータである。 In various embodiments, each of the above differences in comparing each element of the SIMD operand is implemented as a separate instruction. In other embodiments, the above differences may be implemented by changing the attributes of a single instruction, such as immediate fields associated with the instruction. FIG. 6 is a diagram illustrating various operations performed by one or more instructions to compare each data element of two or more SIMD operands. In one embodiment, the operands compared by the operation of FIG. 6 are text strings. In other embodiments, the operand is other data information or data.
図6を参照して、動作610において、第1のSIMDオペランド601と第2のSIMDオペランド605の各要素を互いに比較する。一実施形態では、一方のオペランドはXMMレジスタなどのレジスタに記憶され、他方のオペランドは他のXMMレジスタまたはメモリに記憶されている。一実施形態では、比較のタイプは、図6に示した動作を実行する命令に対応するイミーディエイトフィールド(immediate field)により制御される。例えば、一実施形態では、2ビットのイミーディエイトフィールド(例えば、IMM8[1:0])を用いて、比較するデータ要素が符号付きバイトか、符号付きワードか、符号無しバイトか、符号無しワードか示す。一実施形態では、比較結果によりi×jアレイ(例えば、BoolRes[i,j])、またはi×jアレイの一部ができる。
Referring to FIG. 6, in
動作613において、並行して、オペランド601と605がそれぞれ表すストリングの終わりを見つけて、オペランド601と605の各要素の有効性を判断する。一実施形態では、レジスタまたはメモリの記憶場所内の対応する1つまたは複数のビットを設定することにより、オペランド601と605の各要素の有効性を明示的に示す。一実施形態では、その1つまたは複数のビットは、オペランド601と605のLSBの位置から始まる連続した有効データ要素(例えば、バイト)の数に対応する。例えば、オペランドのサイズにもよるが、EAXレジスタやRAXレジスタなどのレジスタを用いて、第1のオペランドの各データ要素の有効性を示すビットを記憶する。同様に、オペランドのサイズによっては、EDXレジスタやRDXレジスタなどのレジスタを用いて、第2のオペランドの各データ要素の有効性を示すビットを記憶する。他の実施形態では、オペランド601と605の各要素の有効性を、本開示ですでに説明した手段により、黙示的に示しても良い。
In
一実施形態では、動作615において、比較と有効性に関する情報を集約機能(aggregation function)により結合して、2つのオペランドの要素の比較結果を生成する。一実施形態では、集約機能を、2つのオペランドの要素の比較を実行する命令に付随するイミーディエイトフィールドにより決定する。例えば、一実施形態では、2つのオペランドのデータ要素が等しいか、2つのオペランドのデータ要素の範囲が等しいか、2つのオペランドの各データ要素が等しいか、オペランドの少なくともデータ要素の一部の並びが同じか、比較により示すかどうか、イミーディエイトフィールド(immediate field)が示す。 In one embodiment, in operation 615, the comparison and validity information is combined by an aggregation function to generate a comparison of the elements of the two operands. In one embodiment, the aggregation function is determined by the immediate field associated with the instruction that performs the comparison of the two operand elements. For example, in one embodiment, the data elements of the two operands are equal, the ranges of the data elements of the two operands are equal, the data elements of the two operands are equal, or the sequence of at least some of the data elements of the operands. The immediate field indicates whether are the same or a comparison.
動作620において、一実施形態では、(例えば、IntRes1に記憶された)集約機能の結果をネゲートする。一実施形態では、イミーディエイトフィールドのビット(例えば、IMM8[6:5])により、集約機能の結果に実行するネゲート機能のタイプを制御する。例えば、イミーディエイトフィールドは、集約結果をまったくネゲート(negate)しない、集約機能の結果をすべてネゲートする、オペランドの有効要素に対応する集約結果のみをネゲートすることを示してもよい。一実施形態では、ネゲート演算の結果をアレイ(例えば、IntRes2アレイ)に記憶する。
At
一実施形態では、それぞれ動作625と630において、ネゲート演算により生成される結果のアレイをインデックス値またはマスク値に変換する。ネゲート演算結果をインデックスに変換する場合、イミーディエイトフィールドのビット(例えば、IMM8[6])により、比較結果のMSBまたはLSBをインデックスにエンコードするかどうか、その結果をレジスタ(例えば、ECXまたはRCX)に記憶するかどうか制御する。一実施形態では、ネゲート演算の結果をマスク値で表す場合、イミーディエイトフィールドのビット(例えば、IMM8[6])を用いて、マスクをゼロ延長(zero-extended)拡張するか、バイト(またはワード)に拡張するか制御する。
In one embodiment, at
このように、ストリング比較演算の実行方法を開示する。実施形態の例を説明し、添付した図面に示したが、言うまでもなく、かかる実施形態は本発明の単なる例示であって制約するものではなく、本開示を研究すれば当業者には様々な修正に想到するので、本発明は図示し説明した具体的な構成に限定はされない。本技術分野等では、成長が速く進歩が容易には予見できないので、本発明の原理や添付したクレームの範囲から逸脱することなく技術的な進歩を可能とすることにより容易になるので、開示の実施形態を構成と詳細において容易に修正できる。 Thus, a method of performing a string comparison operation is disclosed. While example embodiments are described and illustrated in the accompanying drawings, it should be understood that such embodiments are merely illustrative of the invention and are not limiting, and that various modifications will become apparent to those of skill in the art upon studying the present disclosure. Therefore, the present invention is not limited to the specific configuration shown and described. In this technical field, etc., since growth is fast and progress cannot be easily foreseen, it is facilitated by enabling technical progress without departing from the principle of the present invention and the scope of the appended claims. Embodiments can be easily modified in configuration and details.
なお、上記の実施形態について次の付記を記載する。
(付記1) 命令を記憶した機械読み取り可能媒体であって、前記命令は、機械により実行されると、前記機械に
第1のパック化オペランドの各データ要素を、第2のパック化オペランドの各データ要素と比較する段階と、
前記比較の第1の結果を記憶する段階と
を含む方法を実行させる媒体。
(付記2) 前記第1のオペランドの有効データ要素のみを、前記第2のオペランドの有効データ要素のみと比較する、付記1に記載の機械読み取り可能媒体。
(付記3) 前記第1の結果は前記データ要素のいずれかが等しいかどうか示す、付記1に記載の機械読み取り可能媒体。
(付記4) 前記第1の結果は前記第1のオペランドに示された一範囲のデータ要素が、前記第2のオペランドに示された一範囲のデータ要素と等しいかどうか示す、付記1に記載の機械読み取り可能媒体。
(付記5) 前記第1の結果は前記第1のオペランドの各データ要素が、前記第2のオペランドの各データ要素と等しいかどうか示す、付記1に記載の機械読み取り可能媒体。
(付記6) 前記第1の結果は前記第1のオペランドのデータ要素の一部の順序が、前記第2のオペランドのデータ要素の一部の順序と等しいかどうか示す、付記1に記載の機械読み取り可能媒体。
(付記7) 前記第1の結果の一部をネゲートする、付記1に記載の機械読み取り可能媒体。
(付記8) 前記第1の結果は、マスク値またはインデックス値のいずれかにより表される、付記1に記載の機械読み取り可能媒体。
(付記9) 第1のオペランドの有効データ要素のみを、第2のオペランドの有効データ要素のみと比較する比較ロジックと、
前記比較ロジックを制御する第1の制御信号とを有する装置。
(付記10) 前記第1と第2のオペランドのデータ要素の有効性を明示的に示す、付記9に記載の装置。
(付記11) 前記第1と第2のオペランドのデータ要素の有効性を黙示的に示す、付記9に記載の装置。
(付記12) 前記第1の制御信号は、前記比較ロジックが符号付きまたは符号無しの値を比較するかどうか示す符号制御信号を含む、付記9に記載の装置。
(付記13) 前記第1の制御信号は、どれかが等しい、範囲が等しい、それぞれ等しい、不連続サブストリング、及び順序が等しいよりなるリストから選択した集約機能を前記比較ロジックが実行するかどうか示す集約機能信号を含む、付記12に記載の装置。
(付記14) 前記第1の制御信号は、ネゲート信号を含み、前記比較ロジックに前記比較の結果の少なくとも一部をネゲートさせる、付記13に記載の装置。
(付記15) 前記第1の制御信号は、前記比較ロジックが前記比較の結果のMSBまたはLSBのインデックスを生成するかどうか示すインデックス信号を含む、付記14に記載の装置。
(付記16) 前記第1の制御信号は、前記比較ロジックが前記比較の結果としてゼロ延長マスクまたは拡張マスクを生成するかどうかを示すマスク信号を含む、付記15に記載の装置。
(付記17) 前記第1の制御信号は、複数のビットを記憶する制御フィールドである、付記16に記載の装置。
(付記18) 単一命令複数データ(SIMD)比較命令を記憶する第1のメモリと、
前記SIMD比較命令を実行して、前記SIMD比較命令で示された第1と第2のオペランドのデータ要素を比較するプロセッサを有する、システム。
(付記19) 前記第1のオペランドを、第1のレジスタのアドレスにより前記命令内に示す、付記18に記載のシステム。
(付記20) 前記第2のオペランドを、メモリアドレスまたは第2のレジスタにより前記命令内に示す、付記19に記載のシステム。
(付記21) 前記命令は前記プロセッサに対する制御信号を示すイミーディエイトフィールドを含む、付記20に記載のシステム。
(付記22) イミーディエイトフィールドは、前記オペランドが符号付きバイト、符号無しバイト、符号付きワード、または符号無しワードを含むかどうかを示す、付記21に記載のシステム。
(付記23) 前記イミーディエイトフィールドは集約機能を前記プロセッサが実行することを示す、付記22に記載のシステム。
(付記24) 前記イミーディエイトフィールドは、マスクまたはインデックスを前記命令の実行に応じて生成するかどうかを示す、付記23に記載のシステム。
(付記25) 前記命令は、前記第1及び第2のオペランドの明示的に有効なデータ要素のみを比較させる、付記18に記載のシステム。
(付記26) 前記命令は、前記第1及び第2のオペランドの黙示的に有効なデータ要素のみを比較させる、付記18に記載のシステム。
(付記27) 第1のテキストストリングに対応する第1のパック化オペランドを記憶する第1の記憶領域と、
第2のテキストストリングに対応する第2のパック化オペランドを記憶する第2の記憶領域と、
前記第1のパック化オペランドのすべての有効データ要素を、前記第2のパック化オペランドのすべての有効データ要素と比較する比較ロジックと、
前記比較ロジックが実行した前記比較の結果アレイを記憶する第3の記憶領域と
を有するプロセッサ。
(付記28) 前記比較ロジックは値の2次元のアレイを生成し、前記アレイのエントリーは前記第1のパック化オペランドの有効なデータ要素と前記第2のパック化オペランドの有効なデータ要素との間の比較に対応する、付記27に記載のプロセッサ。
(付記29) 前記比較ロジックは、前記値の2次元のアレイに、いずれかが等しい、範囲が等しい、各々が等しい、非連続的サブストリング、及び順序が等しいよりなる集約機能の1つを実行する、付記28に記載のプロセッサ。
(付記30) 前記結果アレイは、マスク値またはインデックス値のいずれかにより表される、付記29に記載のプロセッサ。
In addition, the following supplementary notes are described for the above embodiment.
(Supplementary Note 1) A machine-readable medium storing instructions, wherein the instructions, when executed by a machine, cause the machine to transfer each data element of a first packed operand to each of a second packed operand. Comparing with the data element;
Storing the first result of the comparison.
(Supplementary note 2) The machine-readable medium of
(Supplementary note 3) The machine-readable medium of
(Supplementary note 4) The
(Supplementary note 5) The machine-readable medium of
(Supplementary note 6) The machine according to
(Supplementary note 7) The machine-readable medium of
(Supplementary note 8) The machine-readable medium according to
(Supplementary note 9) comparison logic for comparing only the valid data element of the first operand with only the valid data element of the second operand;
A first control signal for controlling the comparison logic.
(Supplementary note 10) The apparatus according to supplementary note 9, wherein the validity of the data elements of the first and second operands is explicitly indicated.
(Supplementary note 11) The apparatus according to supplementary note 9, wherein the validity of the data elements of the first and second operands is implicitly indicated.
(Supplementary note 12) The apparatus according to supplementary note 9, wherein the first control signal includes a sign control signal indicating whether the comparison logic compares signed or unsigned values.
(Supplementary note 13) The first control signal is whether or not the comparison logic performs an aggregation function selected from a list consisting of: equal, equal in range, respectively equal, discontinuous substrings, and equal order. 13. The apparatus of
(Supplementary note 14) The apparatus according to
(Supplementary note 15) The apparatus according to
(Supplementary note 16) The apparatus according to
(Supplementary note 17) The apparatus according to
(Supplementary Note 18) A first memory storing a single instruction multiple data (SIMD) comparison instruction;
A system comprising: a processor that executes the SIMD comparison instruction and compares data elements of first and second operands indicated by the SIMD comparison instruction.
(Supplementary note 19) The system according to supplementary note 18, wherein the first operand is indicated in the instruction by an address of a first register.
(Supplementary note 20) The system according to
(Supplementary note 21) The system according to
(Supplementary note 22) The system according to
(Supplementary note 23) The system according to
(Supplementary note 24) The system according to
(Supplementary note 25) The system according to supplementary note 18, wherein the instruction causes only the explicitly valid data elements of the first and second operands to be compared.
(Supplementary note 26) The system according to Supplementary note 18, wherein the instruction causes only the implicitly valid data elements of the first and second operands to be compared.
(Supplementary Note 27) A first storage area for storing a first packed operand corresponding to the first text string;
A second storage area for storing a second packed operand corresponding to the second text string;
Comparison logic for comparing all valid data elements of the first packed operand with all valid data elements of the second packed operand;
A third storage area for storing an array of the result of the comparison executed by the comparison logic.
(Supplementary note 28) The comparison logic generates a two-dimensional array of values, where an entry in the array is a valid data element of the first packed operand and a valid data element of the second packed operand. 28. The processor of claim 27 corresponding to a comparison between:
(Supplementary note 29) The comparison logic performs one of an aggregation function consisting of equal to, equal to, equal to each other, non-contiguous substrings, and equal order to the two-dimensional array of values. 29. The processor according to attachment 28.
(Supplementary note 30) The processor according to supplementary note 29, wherein the result array is represented by either a mask value or an index value.
Claims (19)
命令を実行し、データを処理する少なくとも1つのプロセッサコアと、
レベル1(L1)キャッシュを含む複数レベルのキャッシュと、
第1のパック化データソースレジスタと、
第2のパック化データソースレジスタと、
パック化比較命令を含む命令をデコードするデコーダであって、第1のセットのパック化整数データ要素は前記第1のパック化データソースレジスタに記憶され、第2のセットのパック化整数データ要素は前記第2のパック化データソースレジスタに記憶され、前記第1のセットの1つ以上のパック化整数データ要素はキャラクタをエンコードし、前記第2のセットのパック化整数データ要素は範囲のセットをエンコードするデコーダと、
前記パック化比較命令を実行して、前記第1のセットの第1のパック化整数データ要素によりエンコードされた第1のキャラクタが、前記第2のセットのパック化整数データ要素により画定される前記範囲内にあるか判断する実行回路であって、結果レジスタを更新して、前記第1のキャラクタが前記範囲内にあるかという情報を提供する実行回路と、
を有するプロセッサ。 A processor,
At least one processor core for executing instructions and processing data;
A multi-level cache including a level 1 (L1) cache;
A first packed data source register;
A second packed data source register;
A decoder for decoding an instruction, including a packed compare instruction, wherein a first set of packed integer data elements is stored in said first packed data source register, and a second set of packed integer data elements is: The first set of one or more packed integer data elements stored in the second packed data source register encodes a character, and the second set of packed integer data elements stores a set of ranges. A decoder to encode,
Executing the packed comparison instruction such that a first character encoded by the first set of first packed integer data elements is defined by the second set of packed integer data elements. a running circuit that determines it is within range, to update the result register, and execution circuit to which the first character to provide the information that it is within the range,
A processor having:
請求項1に記載のプロセッサ。 The first packed data source register and the second packed data source register include a 128 bit packed data register;
The processor according to claim 1.
第2のセットのパック化整数データ要素を第2のパック化データソースレジスタに記憶するステップと、
パック化比較命令を含む命令をデコードするステップであって、前記第1のセットの1つ以上のパック化整数データ要素はキャラクタをエンコードし、前記第2のセットのパック化整数データ要素は範囲のセットをエンコードする、ステップと
前記パック化比較命令を実行するステップと、
前記パック化比較命令の実行に応じて、前記第1のセットの第1のパック化整数データ要素によりエンコードされた第1のキャラクタが、前記第2のセットの前記パック化整数データ要素により画定される前記範囲内にあるか判断するステップと、
結果レジスタを更新して、前記第1のキャラクタが前記範囲内にあるかという情報を提供するステップと、
を含む、方法。 Storing a first set of packed integer data elements in a first packed data source register;
Storing a second set of packed integer data elements in a second packed data source register;
Decoding an instruction including a packed compare instruction, wherein the first set of one or more packed integer data elements encodes a character, and wherein the second set of packed integer data elements comprises a range of Encoding a set; and executing the packed compare instruction;
In response to execution of the packed comparison instruction, a first character encoded by the first set of first packed integer data elements is defined by the second set of packed integer data elements. Judging whether it is within the range,
Updating a result register to provide information that said first character is within said range;
Including, methods.
請求項7に記載の方法。 The first packed data source register and the second packed data source register include a 128 bit packed data register;
The method according to claim 7.
請求項7に記載の方法。 Scheduling the packed compare instruction for execution subsequent to decoding.
The method according to claim 7.
請求項7に記載の方法。 The characters include text characters and numeric characters,
The method according to claim 7.
第1のセットのパック化整数データ要素を第1のパック化データソースレジスタに記憶するステップと、
第2のセットのパック化整数データ要素を第2のパック化データソースレジスタに記憶するステップと、
パック化比較命令を含む命令をデコードするステップであって、前記第1のセットの1つ以上のパック化整数データ要素はキャラクタをエンコードし、前記第2のセットのパック化整数データ要素は範囲のセットをエンコードする、ステップと、
前記パック化比較命令を実行するステップと、
前記パック化比較命令の実行に応じて、前記第1のセットの第1のパック化整数データ要素によりエンコードされた第1のキャラクタが、前記第2のセットの前記パック化整数データ要素により画定される前記範囲内にあるか判断するステップと、
結果レジスタを更新して、前記第1のキャラクタが前記範囲内にあるかという情報を提供するステップと、
を実行させるコンピュータプログラム。 On the computer,
Storing a first set of packed integer data elements in a first packed data source register;
Storing a second set of packed integer data elements in a second packed data source register;
Decoding an instruction including a packed compare instruction, wherein the first set of one or more packed integer data elements encodes a character, and wherein the second set of packed integer data elements comprises a range of Encoding the set, steps,
Executing the packed comparison instruction;
In response to execution of the packed comparison instruction, a first character encoded by the first set of first packed integer data elements is defined by the second set of packed integer data elements. Judging whether it is within the range,
Updating a result register to provide information that said first character is within said range;
A computer program that executes
請求項13に記載のコンピュータプログラム。 Decoding includes converting the packed compare instruction using a microcode read only memory (ROM);
A computer program according to claim 13.
請求項13に記載のコンピュータプログラム。 The first packed data source register and the second packed data source register include a 128 bit packed data register;
A computer program according to claim 13.
デコードに続く実行のため前記パック化比較命令をスケジューリングするステップをさらに実行させる、請求項13に記載のコンピュータプログラム。 On the computer,
14. The computer program of claim 13, further comprising the step of scheduling the packed compare instruction for execution following decoding.
請求項13に記載のコンピュータプログラム。 The characters include text characters and numeric characters,
A computer program according to claim 13.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/525,981 | 2006-09-22 | ||
US11/525,981 US9069547B2 (en) | 2006-09-22 | 2006-09-22 | Instruction and logic for processing text strings |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015025307A Division JP6193281B2 (en) | 2006-09-22 | 2015-02-12 | Instruction and logic circuit for processing character strings |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019183764A Division JP7052171B2 (en) | 2006-09-22 | 2019-10-04 | Processors, systems and methods |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2018005924A JP2018005924A (en) | 2018-01-11 |
JP6651485B2 true JP6651485B2 (en) | 2020-02-19 |
Family
ID=39200855
Family Applications (10)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009529420A Active JP5575477B2 (en) | 2006-09-22 | 2007-09-21 | Instruction and logic circuit for processing character strings |
JP2014003425A Active JP5837105B2 (en) | 2006-09-22 | 2014-01-10 | Instruction and logic circuit for processing character strings |
JP2014150992A Active JP6005696B2 (en) | 2006-09-22 | 2014-07-24 | Instruction and logic circuit for processing character strings |
JP2015025309A Active JP6050399B2 (en) | 2006-09-22 | 2015-02-12 | Instruction and logic circuit for processing character strings |
JP2015025301A Active JP6567285B2 (en) | 2006-09-22 | 2015-02-12 | Instruction and logic circuit for processing character strings |
JP2015025307A Active JP6193281B2 (en) | 2006-09-22 | 2015-02-12 | Instruction and logic circuit for processing character strings |
JP2017154302A Active JP6651485B2 (en) | 2006-09-22 | 2017-08-09 | Instruction and logic circuits for processing character strings |
JP2019183764A Active JP7052171B2 (en) | 2006-09-22 | 2019-10-04 | Processors, systems and methods |
JP2022000310A Pending JP2022050519A (en) | 2006-09-22 | 2022-01-04 | Processor, system and method |
JP2022077419A Active JP7452930B2 (en) | 2006-09-22 | 2022-05-10 | Processor, system and method |
Family Applications Before (6)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009529420A Active JP5575477B2 (en) | 2006-09-22 | 2007-09-21 | Instruction and logic circuit for processing character strings |
JP2014003425A Active JP5837105B2 (en) | 2006-09-22 | 2014-01-10 | Instruction and logic circuit for processing character strings |
JP2014150992A Active JP6005696B2 (en) | 2006-09-22 | 2014-07-24 | Instruction and logic circuit for processing character strings |
JP2015025309A Active JP6050399B2 (en) | 2006-09-22 | 2015-02-12 | Instruction and logic circuit for processing character strings |
JP2015025301A Active JP6567285B2 (en) | 2006-09-22 | 2015-02-12 | Instruction and logic circuit for processing character strings |
JP2015025307A Active JP6193281B2 (en) | 2006-09-22 | 2015-02-12 | Instruction and logic circuit for processing character strings |
Family Applications After (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019183764A Active JP7052171B2 (en) | 2006-09-22 | 2019-10-04 | Processors, systems and methods |
JP2022000310A Pending JP2022050519A (en) | 2006-09-22 | 2022-01-04 | Processor, system and method |
JP2022077419A Active JP7452930B2 (en) | 2006-09-22 | 2022-05-10 | Processor, system and method |
Country Status (7)
Country | Link |
---|---|
US (20) | US9069547B2 (en) |
JP (10) | JP5575477B2 (en) |
KR (2) | KR101300362B1 (en) |
CN (10) | CN104657113B (en) |
BR (1) | BRPI0717068A2 (en) |
DE (4) | DE102007063894B3 (en) |
WO (1) | WO2008036945A1 (en) |
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 |
EP2788902B1 (en) * | 2011-12-08 | 2019-04-17 | Oracle International Corporation | Techniques for more efficient usage of memory-to-cpu bandwidth |
US20140108480A1 (en) * | 2011-12-22 | 2014-04-17 | Elmoustapha Ould-Ahmed-Vall | Apparatus and method for vector compute and accumulate |
US20140281369A1 (en) * | 2011-12-23 | 2014-09-18 | Ashish Jha | Apparatus and method for sliding window data gather |
WO2013095618A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Instruction execution that broadcasts and masks data values at different levels of granularity |
WO2013095620A1 (en) | 2011-12-23 | 2013-06-27 | Intel Corporation | Apparatus and method of improved insert instructions |
US9946540B2 (en) | 2011-12-23 | 2018-04-17 | Intel Corporation | Apparatus and method of improved permute instructions with multiple granularities |
WO2013095606A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Apparatus and method for detecting identical elements within a vector register |
CN107391086B (en) * | 2011-12-23 | 2020-12-08 | 英特尔公司 | Apparatus and method for improving permute instruction |
CN104137053B (en) * | 2011-12-23 | 2018-06-26 | 英特尔公司 | For performing systems, devices and methods of the butterfly laterally with intersection addition or subtraction in response to single instruction |
US9448765B2 (en) * | 2011-12-28 | 2016-09-20 | Intel Corporation | Floating point scaling processors, methods, systems, and instructions |
US20140351567A1 (en) * | 2011-12-30 | 2014-11-27 | Mikhail Plotnikov | Unique packed data element identification processors, methods, systems, and instructions |
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 |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
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 |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9575753B2 (en) | 2012-03-15 | 2017-02-21 | International Business Machines Corporation | SIMD compare instruction using permute logic for distributed register files |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
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 |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
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 |
US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
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 (en) * | 2013-05-30 | 2017-07-12 | 富士通株式会社 | Character string search method, character string search device, and character string search program |
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 (en) * | 2016-06-28 | 2018-10-23 | 上海兆芯集成电路有限公司 | The central processing unit of character string comparison optimization and its operating method |
CN109313552A (en) * | 2016-07-27 | 2019-02-05 | 英特尔公司 | The system and method compared for multiplexing vectors |
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 (en) * | 2016-12-29 | 2019-11-29 | 武汉新芯集成电路制造有限公司 | A kind of lookup method of the mode character based on hardware lookup table |
US10423191B2 (en) | 2017-01-19 | 2019-09-24 | International Business Machines Corporation | Clock comparator sign control |
US10564967B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Move string processing via inline decode-based micro-operations expansion |
US10613862B2 (en) | 2017-03-03 | 2020-04-07 | International Business Machines Corporation | String sequence operations with arbitrary terminators |
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 |
US10324716B2 (en) | 2017-03-03 | 2019-06-18 | International Business Machines Corporation | Selecting processing based on expected value of selected character |
US10789069B2 (en) | 2017-03-03 | 2020-09-29 | International Business Machines Corporation | Dynamically selecting version of instruction to be executed |
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 (en) * | 2017-10-31 | 2022-01-18 | 北京小米移动软件有限公司 | Data processing method and device |
US10691457B1 (en) | 2017-12-13 | 2020-06-23 | Apple Inc. | Register allocation using physical register file bypass |
JP6705473B2 (en) * | 2018-06-22 | 2020-06-03 | 日本電気株式会社 | Arithmetic device and arithmetic system |
CN112631657A (en) * | 2019-09-24 | 2021-04-09 | 阿里巴巴集团控股有限公司 | Byte comparison method and instruction processing device for character string processing |
CN111209041B (en) * | 2019-12-31 | 2022-05-17 | Oppo广东移动通信有限公司 | Neural network processor, system on chip and electronic equipment |
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 (en) | 2021-08-18 | 2022-03-07 | 주식회사 로그프레소 | Method for High-Speed String Extraction using Vector Instruction |
CN114675890B (en) * | 2022-05-26 | 2022-09-23 | 飞腾信息技术有限公司 | Instruction execution method, device, equipment and storage medium |
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 |
JPH0232663B2 (en) | 1981-09-30 | 1990-07-23 | Fujitsu Ltd | JOKENTSUKIHIKAKUENZANSOCHI |
JPS5856207A (en) | 1981-09-30 | 1983-04-02 | Hitachi Ltd | Ram controller |
JPS58106636A (en) | 1981-12-18 | 1983-06-25 | Hitachi Ltd | Pipeline operating device |
JPS617976A (en) | 1984-06-22 | 1986-01-14 | Mitsubishi Electric Corp | Vector operation processor |
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 (en) | 1986-04-04 | 1995-04-10 | 株式会社日立製作所 | Vector processor |
JPS6320628A (en) * | 1986-07-15 | 1988-01-28 | Nec Corp | Classifying system for symbol string group |
JPH0743672B2 (en) | 1987-02-18 | 1995-05-15 | 株式会社東芝 | Memory protection violation detection device |
JPH01271875A (en) | 1988-04-22 | 1989-10-30 | Nec Corp | Vector arithmetic control system |
JP2790466B2 (en) | 1988-10-18 | 1998-08-27 | 株式会社日立製作所 | Character string search method and apparatus |
JPH0769811B2 (en) | 1988-12-21 | 1995-07-31 | 松下電器産業株式会社 | Data processing device |
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 (en) * | 1992-06-18 | 1997-10-22 | 日本電気株式会社 | Vector processing equipment |
JPH0617976A (en) | 1992-06-29 | 1994-01-25 | Mitsubishi Plastics Ind Ltd | Mechanical joint |
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 (en) | 1992-09-11 | 1994-04-08 | Sumitomo Metal Ind Ltd | Information retrieving device |
JPH06162067A (en) | 1992-11-24 | 1994-06-10 | Hitachi Ltd | Device and method for controlling vector instruction |
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 (en) * | 1993-10-18 | 1995-05-02 | Mitsubishi Electric Corp | Data processing unit |
DE69519449T2 (en) | 1994-05-05 | 2001-06-21 | Conexant Systems Inc | Space pointer data path |
IT1268611B1 (en) * | 1994-09-30 | 1997-03-06 | Finmeccanica Spa | COPROCESSOR FOR CHARACTER RECOGNITION |
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 |
CN100412786C (en) | 1994-12-02 | 2008-08-20 | 英特尔公司 | Microprocessor capable of compressing composite operation number |
US5634119A (en) | 1995-01-06 | 1997-05-27 | International Business Machines Corporation | Computer processing unit employing a separate millicode branch history table |
JP2931890B2 (en) | 1995-07-12 | 1999-08-09 | 三菱電機株式会社 | Data processing device |
US7301541B2 (en) | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
AU6677896A (en) | 1995-08-31 | 1997-03-19 | Intel Corporation | A set of instructions for operating on packed data |
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 (en) | 1996-08-09 | 1998-02-24 | Furukawa Electric Co Ltd:The | Element jointing device |
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 |
WO2000022511A1 (en) * | 1998-10-09 | 2000-04-20 | Koninklijke Philips Electronics N.V. | Vector data processor with conditional instructions |
US6292886B1 (en) | 1998-10-12 | 2001-09-18 | Intel Corporation | Scalar hardware for performing SIMD operations |
JP3702789B2 (en) | 1998-12-16 | 2005-10-05 | 松下電器産業株式会社 | Conditional vector operation method and conditional vector operation device |
US6430557B1 (en) * | 1998-12-16 | 2002-08-06 | Xerox Corporation | Identifying a group of words using modified query words obtained from successive suffix relationships |
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 (en) | 2000-01-25 | 2001-10-12 | Sony Corp | Data compression method, retrieval method and device, data packet signal and recording medium |
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 |
JP2005535966A (en) | 2002-08-09 | 2005-11-24 | インテル・コーポレーション | Multimedia coprocessor control mechanism including alignment or broadcast instructions |
US6986023B2 (en) | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
JP3958662B2 (en) * | 2002-09-25 | 2007-08-15 | 松下電器産業株式会社 | Processor |
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 (en) | 2002-10-23 | 2004-05-20 | Hiroshima Industrial Promotion Organization | Matching arithmetic circuit |
JP3837386B2 (en) * | 2003-02-18 | 2006-10-25 | 誠 小川 | Information processing device |
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 |
CN101299185B (en) * | 2003-08-18 | 2010-10-06 | 上海海尔集成电路有限公司 | Microprocessor structure based on CISC structure |
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 |
GB2409065B (en) * | 2003-12-09 | 2006-10-25 | Advanced Risc Mach Ltd | Multiplexing operations in SIMD 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 |
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 |
US6915300B1 (en) | 2003-12-19 | 2005-07-05 | Xerox Corporation | Method and system for searching indexed string containing a search string |
CN1297888C (en) * | 2004-03-03 | 2007-01-31 | 浙江大学 | 32-bit media digital signal processor |
JP4129981B2 (en) * | 2004-04-02 | 2008-08-06 | インターナショナル・ビジネス・マシーンズ・コーポレーション | Compiler, compiler program, recording medium, control method, and central processing unit |
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 (en) | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
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 (en) * | 2014-03-26 | 2018-05-23 | 株式会社メガチップス | SIMD processor |
JP6162067B2 (en) | 2014-03-27 | 2017-07-12 | 東レ株式会社 | Textile processing equipment |
-
2006
- 2006-09-22 US US11/525,981 patent/US9069547B2/en active Active
-
2007
- 2007-09-21 WO PCT/US2007/079234 patent/WO2008036945A1/en active Application Filing
- 2007-09-21 BR BRPI0717068 patent/BRPI0717068A2/en not_active Application Discontinuation
- 2007-09-21 JP JP2009529420A patent/JP5575477B2/en active Active
- 2007-09-21 KR KR1020117006958A patent/KR101300362B1/en active IP Right Grant
- 2007-09-21 KR KR1020097005793A patent/KR101105030B1/en active IP Right Grant
- 2007-09-24 CN CN201410822302.7A patent/CN104657113B/en active Active
- 2007-09-24 DE DE102007063894.0A patent/DE102007063894B3/en active Active
- 2007-09-24 DE DE102007045496.3A patent/DE102007045496B4/en active Active
- 2007-09-24 CN CN201410820208.8A patent/CN104657112B/en active Active
- 2007-09-24 DE DE102007063809.6A patent/DE102007063809B3/en active Active
- 2007-09-24 CN CN201610875178.XA patent/CN107015784B/en active Active
- 2007-09-24 CN CN201410452395.9A patent/CN105607890B/en active Active
- 2007-09-24 CN CN201410826057.7A patent/CN104484157B/en active Active
- 2007-09-24 CN CN201110022470.4A patent/CN102073478B/en active Active
- 2007-09-24 CN CN200710305776.4A patent/CN101251791B/en active Active
- 2007-09-24 CN CN201810003932.XA patent/CN108052348B/en active Active
- 2007-09-24 CN CN201210381275.5A patent/CN102999315B/en active Active
- 2007-09-24 CN CN202210391590.XA patent/CN115048144A/en active Pending
- 2007-09-24 DE DE102007063911.4A patent/DE102007063911B3/en active Active
-
2011
- 2011-06-20 US US13/164,715 patent/US9063720B2/en active Active
-
2012
- 2012-12-20 US US13/721,819 patent/US8825987B2/en active Active
- 2012-12-20 US US13/721,725 patent/US8819394B2/en active Active
-
2013
- 2013-03-15 US US13/843,576 patent/US9448802B2/en active Active
-
2014
- 2014-01-10 JP JP2014003425A patent/JP5837105B2/en active Active
- 2014-07-24 JP JP2014150992A patent/JP6005696B2/en active Active
- 2014-12-05 US US14/562,632 patent/US9740489B2/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,609 patent/US9645821B2/en 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-18 US US14/576,101 patent/US9772846B2/en active Active
- 2014-12-18 US US14/576,147 patent/US9740490B2/en active Active
- 2014-12-18 US US14/576,124 patent/US9703564B2/en active Active
- 2014-12-18 US US14/576,136 patent/US9772847B2/en active Active
-
2015
- 2015-02-12 JP JP2015025309A patent/JP6050399B2/en active Active
- 2015-02-12 JP JP2015025301A patent/JP6567285B2/en active Active
- 2015-02-12 JP JP2015025307A patent/JP6193281B2/en active Active
-
2017
- 2017-08-09 JP JP2017154302A patent/JP6651485B2/en 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/en active Active
-
2021
- 2021-06-07 US US17/341,330 patent/US11537398B2/en active Active
-
2022
- 2022-01-04 JP JP2022000310A patent/JP2022050519A/en active Pending
- 2022-05-10 JP JP2022077419A patent/JP7452930B2/en active Active
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6651485B2 (en) | Instruction and logic circuits for processing character strings |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20170905 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20170905 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20171018 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20180828 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20180904 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20181204 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20190604 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20191004 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20191015 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20191224 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20200122 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6651485 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |