文字列を処理するための命令及び論理回路
ストリング比較演算を実行する方法、装置、及びプログラム手段である。一実施形態では、一装置は第1の命令を実行する実行リソースを含む。前記第1の命令に応じて、前記実行リソースは、第1と第2のテキストストリングに対応する第1と第2のオペランドの各データ要素間の比較結果を記憶する。
【発明の詳細な説明】
【技術分野】
【0001】
本願開示は、論理的及び数学的演算を行う、処理装置並びに関連するソフトウェア及びソフトウェア列の分野に関する。
【背景技術】
【0002】
計算機システムは、我々の社会でますます普及している。計算機の処理能力により、広範な職業で働く人々の効率と生産性が向上している。計算機を買って所有する費用は落ち続けている。従って、より多くの消費者が、より新しく、より速い計算機を活用できるようになっている。更に、多くの人は、ノート型の計算機を、その自由度ゆえに、楽しんで利用している。可搬型計算機により、利用者は、職場を離れても旅行中でも、簡単にデータを持ち運ぶことができ、仕事もできる。このような場面は、営業職や管理職にとって、また学生にとってすらも、ありふれた光景である。
【0003】
処理装置の技術が進むにつれ、より新しいソフトウェアも開発が進んでいる。このソフトウェアは、進んだ処理装置を持つ計算機で走る。利用者は概して、自分の計算機に、より高い性能を期待し要求する。このことは、使うソフトウェアの種類には無関係である。このような性能に関する問題が起こりうるのは、処理装置の内部で実際に実行される命令及び演算の種類からである。ある種類の演算は、完了するのに、他の演算よりも時間がかかる。その理由は、演算が複雑であるせいか、演算に必要な回路の型のせいか、その両方のせいである。このことが、ある種の複雑な演算を処理装置の内部で実行する方法を、最適化する動機である。
【0004】
通信の応用が、10年以上に渡って、超小型処理装置の進歩を駆り立ててきた。実際、計算と通信の間の境界線は、ますますぼやけてきている。この理由は、部分的には、通信の応用で文字列を使うからである。文字列の応用は、一般消費者向け市場で広まっている。また、文字列の応用は、多数の装置で広まっている。装置とは例えば携帯電話から個人用計算機までである。このような装置は、文字列情報を、一層より高速に処理することを求めている。文字列を通信する装置は、計算し通信する装置に進化し続けている。計算し通信する装置は、次のような形の応用を行う。即ち、マイクロソフト(登録商標)インスタントメッセンジャー(商標)、電子メールの応用(例えばマイクロソフト(登録商標)アウトルック(商標))、及び携帯電話メールの応用である。その結果、将来における、個人の計算及び通信の体験は、文字列を扱う能力について、更により豊かになると期待される。
【0005】
従って、計算又は通信する装置同士の間で交換される文字列情報を、処理すること又は構文解析することは、現在の計算装置及び通信装置にとって、一段と重要性を増している。とりわけ、通信又は計算する装置が文字情報の列を解釈することは、文字列データに対して行う最も重要な演算のうちの、いくつかを含む。このような演算では、計算量が嵩むにしても、データの並列度は高い水準であってもよい。この並列度を利用して、様々なデータ格納装置を使う効率的な実装を行える。格納装置とは、例えば、単一命令複数データ(SIMD)型のレジスタである。数多くの現在の計算機アーキテクチャはまた、次のことを要求する。即ち、複数の演算、複数の命令、又は複数の下位命令(よく「マイクロ命令」又は「μop」という。)を使って、様々な論理的及び数学的演算を、多数の演算対象に対して行う。このことにより、処理速度を上げ、その論理的及び数学的演算を行うのに必要なクロック周期の数を減らす。
【発明の概要】
【発明が解決しようとする課題】
【0006】
例えば、多数の命令から成る命令列が、次のことを行うために必要であってもよい。即ち、文字列の中の特定の語を解釈するのに必要な1つ以上の演算である。この演算は、処理装置、システム、又は計算機プログラムの内部の様々なデータ型が表現する、2つ以上の文字列語を比べることを含む。しかし、このような従来の技術では、多数の処理周期が必要になることがあり、処理装置又はシステムは、結果を得るために、不要な電力を消費してしまうことがある。更に、いくつかの従来技術では、演算の対象としてもよいデータ型として、限られたものしか使えないことがある。
【課題を解決するための手段】
【0007】
本発明の一態様によると、命令を記憶した機械読み取り可能媒体が提供される。前記命令は、機械により実行されると、前記機械に第1のパック化オペランドの各データ要素を、第2のパック化オペランドの各データ要素と比較する段階と、前記比較の第1の結果を記憶する段階を含む方法を実行させる。
【図面の簡単な説明】
【0008】
【図1A】計算機システムの区画図である。計算機システムは、処理装置を含む。処理装置は、実行部を含む。実行部は、命令を実行する。命令は、文字列比較演算を行う。この命令は、本願発明の1つの実施例による。
【図1B】本願発明の別の実施例による、別の例の計算機システムの区画図である。
【図1C】本願発明の更に別の実施例による、更に別の例の計算機システムの区画図である。
【図2】1つの実施例による処理装置のマイクロアーキテクチャの区画図である。この実施例は、論理回路を含む。この論理回路は、本願発明による文字列比較演算を1つ以上行う。
【図3A】本願発明の1つの実施例による、マルチメディアレジスタにおける種々のパック化データ型の表現を示す。
【図3B】別の実施例による、パック化データ型を示す。
【図3C】本願発明の1つの実施例による、マルチメディアレジスタにおける種々の符号付き及び符号無しのパック化データ型の表現を示す。
【図3D】演算の符号化(即ち命令符号)の形式の1つの実施例を示す。
【図3E】演算の符号化(即ち命令符号)の別な形式を示す。
【図3F】演算の符号化の更に別な形式を示す。
【図4】論理回路の区画図である。この論理回路は、本願発明の1つの実施例により、少なくとも1つの文字列比較演算を、1つ以上の単精度パック化データ演算対象に対して行う。
【図5】配列の区画図である。この配列を使って、1つの実施例による少なくとも1つの文字列比較演算を行ってもよい。
【図6】本発明の1つの実施例で行ってもよい演算を示す。
【発明を実施するための形態】
【0009】
本願発明を実施例を使って説明する。本願発明は、実施例及び添付の図面によっては、限定されない。
【実施例】
【0010】
以下の記載が記述するのは、技法の実施例である。この技法は、処理装置、計算機システム、又はソフトウェアプログラムの内部で、文字列の要素同士の間を比べる演算を行う。以下の記載では、多数の個別の詳細を記述する。詳細とは例えば処理装置の型、マイクロアーキテクチャの事情、事象、実施可能な機構、等である。詳細を記載する目的は、本願発明のより深い理解を与えるためである。しかし、当業者は次の点に注意。即ち、本発明を、そのような個別の詳細を抜きに実施してもよい。加えて、いくつかの周知の構造、回路などは、詳細を示していない。これは、本願発明を不要に複雑に示すのを避けるためである。
【0011】
以下の実施例を、処理装置を参照して記述する。しかし、他の実施例を、他の型の集積回路や論理部品に応用できる。本願発明と同じ技術及び教示を、他の型の回路又は半導体部品に容易に応用できる。他の型の回路又は半導体部品も、より高いパイプライン効率及び改善した性能から、利益を受けることができる。本願発明の教示は、データの演算を行う、いかなる処理装置又は機械にも、応用できる。なお、本願発明は、256ビット、128ビット、64ビット、32ビット、又は16ビットのデータの演算を行う処理装置又は機械に限定されない。本願発明を、パック化データを演算する必要がある、いかなる処理装置及び機械にも、応用できる。
【0012】
以下の記載では、説明のために、多数の個別の詳細を記述する。詳細を記載する目的は、本願発明の徹底的な理解を与えるためである。しかし、当業者は次の点を理解することになる。即ち、これらの個別の詳細は、本願発明を実施するために必要ではない。場合により、周知の電気的な構造及び回路については、特に詳しくは記載していない。これは、本願発明を不要に複雑に示すのを避けるためである。加えて、以下の記載は、例を示す。添付の図面は、様々な例を示す。これらの例を示すのは、説明のためである。しかし、これらの例を、本願発明を限定する意味で解釈してはならない。これらの例は、本願発明の例を示すことを、意図しているだけである。これらの例は、本願発明の全ての可能な実装を網羅する一覧を示すことを、意図していない。
【0013】
以下の例では、命令の取り扱い及び分散を、実行部及び論理回路の文脈で記述する。しかし、本願発明の他の実施例を、ソフトウェアによっても実現できる。1つの実施例では、本願発明の方法を、機械が実行可能な命令に実施する。この命令を使って、次のことを行える。即ち、汎用処理装置又は専用処理装置をこの命令によってプログラムし、本願発明の工程を実行させる。本願発明を、計算機プログラム又はソフトウェアとして提供してもよい。この計算機プログラム又はソフトウェアは、機械可読媒体又は計算機可読媒体を含んでもよい。機械可読媒体又は計算機可読媒体は、命令を内部に格納して持つ。この命令を使って、計算機(又は他の電子装置)をプログラムしてもよい。このプログラムにより、本願発明による処理を行う。代わりに、本願発明の工程を、特定のハードウェア部品によって実行してもよい。特定のハードウェア部品は、本願発明の工程を実行するための、配線を固定した論理回路を含む。又は、本願発明の工程を、プログラムされた計算機部品と専用ハードウェア部品との、いかなる組み合わせによっても実行してもよい。このようなソフトウェアを、システムの記憶装置の内部に格納できる。同様に、命令を分散できる。この分散を、網により行う。又は、この分散を、他の計算機可読媒体を使って行う。
【0014】
従って、機械可読媒体は、機械(例えば計算機)が読める形式で情報を格納又は伝達するための、いかなる機構を含んでもよい。機械可読媒体は、次のものを含むが、これらに限定されない:フロッピー(登録商標)ディスケット;光学ディスク;コンパクトディスク;CD−ROM;光磁気ディスク;ROM;RAM;EPROM;EEPROM;磁気カード若しくは光学カード;フラッシュ記憶装置;インターネット上の伝送;電気的、光学的、音響的、若しくは他の形態の伝搬する信号(例えば搬送波、赤外線信号、デジタル信号、等);又は、同様のもの。従って、計算機可読媒体は、機械(例えば計算機)が読める形式で、電子的な命令又は情報を、格納又は伝達するのに適した、いかなる型の媒体及び機械可読媒体をも含む。更に、本願発明を、計算機プログラムとしてダウンロードしてもよい。即ち、プログラムを、遠隔の計算機(例えばサーバー)から転送して、要求する計算機(例えばクライアント)に取り込んでもよい。プログラムの転送を、次の信号によって行ってもよい。即ち、電気的、光学的、音響的、又は他の形態のデータ信号。これらの信号を、搬送波又は他の伝搬媒体に実施する。これらの信号は、通信接続(例えばモデム接続、網接続等)を経由する。
【0015】
設計は、様々な段階を踏んでもよい。即ち、設計は、創案からシミュレーションを経て製造に至る。設計を表現するデータは、その設計を多数の方法で表現してもよい。まず、シミュレーションで便利なのは、次の方法である。即ち、ハードウェアを、ハードウェア記述言語又は別の機能記述言語を使って表現してもよい。加えて、論理の及び/又はトランジスターのゲート水準の回路モデルを、設計の過程の何らかの段階で作ってもよい。更に、ほとんどの設計者は、何らかの段階で、ハードウェアモデルにおける、種々の素子の物理的な配置を表現する水準のデータに辿り着く。従来の半導体の製造技術を使う場合には、このハードウェアモデルを表現するデータは、半導体マスクの様々な層に種々の特徴が有るか無いかを指定するデータであってもよい。このマスクを使って集積回路を作る。設計におけるいかなる表現でも、そのデータをいかなる形態の機械可読媒体に格納してもよい。機械可読媒体とは、次のものでもよい。即ち、そのような情報を伝送するために、変調した若しくは他の方法で生成した、光学的若しくは電気的な波、記憶装置、又は磁気若しくは光学的な格納器(例えば円盤)。これらの媒体のいかなるものも、設計又はソフトウェア情報を「担う」又は「示す」のでもよい。符号又は設計を示す又は担う電気的な搬送波を伝送する場合に、その電気信号の複写、蓄積、又は再送を行うと、新しい複写ができる。従って、通信設備者又は網提供者は、本願発明の技術を実施する物(即ち搬送波)の複写を作ってもよい。
【0016】
近年の処理装置では、多数の異なる実行部を使って、様々な命令を処理し実行する。全ての命令が平等に作られている訳では無い。即ち、ある命令は他の命令よりも早く完了する。別の命令は、完了するのに莫大なクロックサイクルを費やすことがある。命令の実行速度が速ければ速いほど、処理装置の全体的な性能はより良いことになる。従って、有利なのは、なるべく多くの命令を、なるべく速く実行することである。しかし、いくつかの命令は、他の命令よりも遥かに複雑である。従って、実行時間と処理装置の資源を、他の命令よりも多く必要とする。そのような命令の例としては、浮動小数点命令、記憶装置からの読み込み/記憶装置への書き出し操作、データの移動命令等がある。
【0017】
ますます多くの計算機システムを、インターネット、文章作成、及びマルチメディアのアプリケーションで使うようになったので、時が経つにつれ、処理装置に、それらを支援する機能が追加されてきた。例えば、単一命令複数データ(SIMD)型の整数及び浮動小数点命令、並びに、ストリーミングSIMD拡張(SSE)のような命令は、特定のプログラムの仕事を実行するのに必要な命令の総数を減らす。このことにより、消費電力を減らすこともできる。このような命令がソフトウェアの性能を高速化できるのは、複数のデータ要素に並列に演算を行うことによる。その結果、広範な応用で性能を上げられる。応用は、映像の処理、発話の処理、及び画像や写真の処理を含む。SIMD命令の実装は、超小型処理装置や類似の論理回路で行われている。このような実装は、通常、多数の問題を孕んでいる。更に、SIMD演算は複雑なので、大抵は追加の回路が必要になる。追加の回路により、データを正しく処理して演算する。
【0018】
現在、少なくとも2つのパック化演算対象のデータ要素の各々を比べるSIMD命令は存在しない。本発明の1つの実施例で行うようなSIMDパック化比較命令が無いと、応用プログラムで同じ結果を得るために、多数の命令及びデータレジスタが必要になることがある。応用プログラムは、例えば文字列についての、解釈、圧縮及び復元、処理、並びに演算を行う。本願で開示する実施例では、「文字列」の比較と「列」の比較を、相互に交換可能なように参照する。しかし、本発明の実施例を、情報のいかなる列(例えば、文字の列、数値の列、又は他のデータの列)にも適用してよい。
【0019】
従って、本願発明の実施例による、少なくとも1つの文字列比較命令は、プログラムのオーバーヘッド及び必要な資源を減らせる。本願発明の実施例は、文字列を構文解析する演算を、SIMD関連のハードウェアを利用する算法として実装する方法を提供する。現在、SIMDレジスタにあるデータについて、文字列を構文解析する演算を行うことは、やや困難で手間がかかる。算法によっては、算術演算を実行する肝心の命令の数よりも、算術演算のためにデータを配置する命令に、より多くの数を必要とするほどである。本願発明の実施例による文字列比較演算の実施例を実装することにより、文字列を処理するために必要な命令の数を大幅に減らせる。
【0020】
本願発明の実施例は、文字列を比べる1つ以上の演算を実装するための命令を含む。文字列を比べる演算は、一般に、データの2つの列からのデータ要素を比較することに関する。この比較により、どのデータ要素が合致するかを判断する。別の変形例を、汎用の文字列比較算法について作ってもよい。この算法も後で開示する。一般化した意味では、文字列比較演算の1つの実施例を、2つのパック化演算対象中にある個々のデータ要素に適用する。2つのパック化演算対象は、データの2つの列を示す。この文字列比較演算の実施例を、次のように汎用的に示せる:
DEST1 <− SRC1 cmp SRC2;
1つのパック化したSIMDデータ演算対象について、この汎用演算を、各演算対象の各データ要素の位置に適用できる。
【0021】
上記の動作において、「DEST」と「SRC」は、対応するデータや動作の送信先と送信元を表す一般的な用語である。実施形態では、レジスタ、またはメモリ、または図示したものとは異なる名称や機能を有するその他の記憶領域により実施できる。例えば、一実施形態では、DEST1は一時的記憶レジスタやその他の記憶領域であり、SRC1とSRC2は送信先の第1と第2の記憶レジスタまたはその他の記憶領域である。他の実施形態では、SRC及びDEST記憶領域は同一記憶領域内(例えば、SIMDレジスタ)の異なるデータ記憶要素に対応する。
【0022】
さらに、一実施形態では、ストリング比較動作により、あるソースレジスタの各要素が他のソースレジスタの各要素と等しいかどうかのインジケータを生成し、そのインジケータをDEST1等のレジスタに記憶する。一実施形態では、インジケータはインデックス値である。他の実施形態では、インジケータはマスク値である。他の実施形態では、インジケータはその他のデータ構造やポインタを表す。
【0023】
図1Aはコンピュータシステムの一例を示すブロック図である。このコンピュータシステムはプロセッサを有する。このプロセッサは、本発明の一実施形態によるストリング比較動作の命令を実行する実行ユニットを含む。システム100は、ここに説明する実施形態のような、本発明により、データを処理するアルゴリズムを実行する論理回路を含む実行ユニットを利用する、プロセッサ102等のコンポーネントを含む。システム100は、カリフォルニア州サンタクララ市のインテルコーポレイションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(登録商標)、StrongARM(登録商標)に基づくプロセッシングシステムを表す。しかし、(他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックス等を含む)他のシステムを使うことも可能である。一実施形態では、サンプルシステム100は、ワシントン州レドモンド市のマイクロソフトコーポレーションのウィンドウズ(登録商標)オペレーティングシステムの一バージョンを実行するが、他のオペレーティングシステム(ユニックス、リナックス等)、組み込みソフトウェア、及び/またはグラフィカルユーザインターフェイス等を用いても良い。このように、本発明の実施形態は、ハードウェア回路とソフトウェアの特定の組み合わせには限定されない。
【0024】
実施形態はコンピュータシステムには限定されない。本発明の別の実施形態は、その他のデバイス、例えばハンドヘルドデバイスや組み込みアプリケーション等で利用することもできる。ハンドヘルドデバイスの例としては、セルラ電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタント(PDA)、ハンドヘルドPCなどがある。組み込みアプリケーションには、マイクロコントローラ、デジタルシグナルプロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、その他のオペランドにストリング比較演算を実行するシステムがある。さらに、複数のデータ(several data)に対して同時に命令を実行してマルチメディアアプリケーションの効率を向上させるアーキテクチャを組み込んだ。データのタイプとボリュームが大きくなるにつれ、コンピュータやそのプロセッサはより効率的な方法でデータを操作するように高機能化(enhanced)されねばならない。
【0025】
図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の要素は、本技術分野の当業者に周知である従来の機能を実行する。
【0026】
一実施形態では、プロセッサ102はレベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャによって、プロセッサ102は単一内部キャッシュを有しても、複数内部キャッシュレベルを有していてもよい。あるいは、他の実施形態では、キャッシュメモリはプロセッサ102の外部にあってもよい。他の実施形態では、具体的な実施形態及び必要性に応じて内部キャッシュと外部キャッシュを組み合わせてもよい。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、命令ポインタレジスタを含む様々なレジスタに相異なるタイプのデータを格納できる。
【0027】
プロセッサ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に結合されている。
【0028】
システム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デバイス、フラッシュメモリデバイス、その他の大容量ストレージデバイスである。
【0029】
システムの他の実施形態の場合、ストリング比較命令を含むアルゴリズムを実行する実行ユニットをシステムオンチップ(system on a chip)で利用できる。システムオンチップの一実施形態は、プロセッサ及びメモリである。かかるシステムのメモリはフラッシュメモリである。フラッシュメモリはプロセッサ及びその他のシステムコンポーネントと同じダイ(die)にあってもよい。また、他の論理ブロック、例えばメモリコントローラまたはグラフィックスコントローラ等がシステムオンチップ上にあってもよい。
【0030】
図1Bは、本発明の一実施形態の原理を化体するデータ処理システム140を示す。当業者には言うまでもなく、本発明の範囲から逸脱することなく、ここに説明する実施形態を別の処理システムで利用することもできる。
【0031】
コンピュータシステム140は、ストリング比較演算を含むSIMD演算を実行できるプロセッシングコア159を有する。一実施形態では、プロセッシングコア159は、任意タイプのアーキテクチャの処理ユニットを表し、CISC、RISC、VLIWなど各タイプのアーキテクチャを含むが、これらには限定されない。プロセッシングコア159は、1つまたは複数のプロセステクノロジーでの生産に適しており、機械読み取り可能媒体で十分に詳しく表せるので、生産が容易になる。
【0032】
プロセッシングコア159は、実行ユニット142、一組のレジスタファイル145、及びデコーダ144を有する。プロセッシングコア159は、この他の回路(図示せず)も含むが、この回路は本発明を理解するためには必要ない。実行ユニット142は、プロセッシングコア159が受け取った命令を実行するために使用する。実行ユニット142は、一般的なプロセッサ命令を認識するのに加え、パック化命令セット143の命令を認識して、パック化データフォーマットに演算を実行する。パック化命令セット143は、ストリング比較演算をサポートする命令を含み、他のパック化命令を含んでも良い。実行ユニット142は内部バスによりレジスタファイル145に結合している。レジスタファイル145は、データを含む情報を格納する、プロセッシングコア159上の記憶領域を表す。上記の通り、パック化データを記憶するのに用いる記憶領域は必須ではない。実行ゆn一途142はデコーダ144に結合している。デコーダ144は、プロセッシングコア159が受け取った命令を制御信号及び/またはマイクロコードエントリーポイント(microcode entry points)にデコードするために用いられる。実行ユニット142は、これらの制御信号及び/またはマイクロコードエントリーポイントに応じて適切な演算を実行する。
【0033】
プロセッシングコア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が含まれるが、これらには限定されない。
【0034】
データプロセッシングシステム140の一実施形態は、ストリング比較演算を含むSIMD演算を実行できる、モバイル、ネットワーク及び/またはワイヤレス通信およびプロセッシングコア159である。プロセッシングコア159は、様々なオーディオ、ビデオ、画像化、及び通信アルゴリズムでプログラムすることができる。これらのアルゴリズムには、例えば、ウォルシュ・アダマール変換、高速フーリエ変換、離散余弦変換(DCT)、これらのそれぞれの逆変換;色空間変換等の圧縮・解凍方法、ビデオエンコード動き予測、またはビデオデコード動き補償;パルスコード変調(PCM)等の変復調(MODEM)機能等が含まれる。
【0035】
図1Cは、SIMDストリング比較演算を実行できるデータ処理システムのさらに別の実施形態を示す。別の一実施形態によるデータプロセッシングシステム160は、メインプロセッサ166、SIMDコ・プロセッサ161、キャッシュメモリ167、及び入出力システム168を含む。入出力システム168は、任意的に、ワイヤレスインターフェイス169に結合している。SIMDコ・プロセッサ161は、ストリング比較演算を含むSIMD演算を実行できる。プロセッシングコア170は、1つまたは複数のプロセステクノロジーでの生産に適しており、機械読み取り可能媒体で十分に詳しく表せるので、プロセッシングコア170を含むデータプロセッシングシステム160の全部または一部の生産が容易になる。
【0036】
一実施形態では、SIMDコ・プロセッサ161は、実行ユニット162と一組のレジスタファイル164を有する。メインプロセッサ165の一実施形態は、実行ユニット162が実行するSIMDストリング比較命令を含む命令セット163の命令を認識するデコーダ165を有する。別の実施形態では、SIMDコ・プロセッサ161は、デコーダ165Bの少なくとも一部を有し、命令セット163の命令をデコードする。プロセッシングコア170は、この他の回路(図示せず)も含むが、この回路は本発明の実施形態を理解するためには必要ない。
【0037】
動作中、メインプロセッサ166は、キャッシュメモリ167や入出力システム168とのインターラクションを含む、一般的なタイプのデータ処理演算を制御するデータ処理命令ストリーム(stream of data processing instructions)を実行する。SIMDコ・プロセッサ命令はデータ処理命令ストリームの中に組み込まれている。メインプロセッサ166のデコーダ165は、SIMDコ・プロセッサ命令を、付随するSIMDコ・プロセッサ161が実行すべきタイプであるとして認識する。従って、メインプロセッサ166は、これらのSIMDコ・プロセッサ命令(または、SIMDコ・プロセッサ命令を表す制御信号)をコ・プロセッサバス166上に発行し、付随するSIMDコ・プロセッサはコ・プロセッサバス166からコ・プロセッサ命令を受け取る。この場合、SIMDコ・プロセッサ161は、それに宛てられたSIMDコ・プロセッサ命令を受け取り、実行する。
【0038】
SIMDコ・プロセッサ命令が処理するデータは、ワイヤレスインターフェイス169を介して受け取ってもよい。一例として、音声通信をデジタル信号の形式で受信して、SIMDコ・プロセッサ命令で処理して、その音声通信を表すデジタルオーディオサンプルを再生する。他の一例として、圧縮オーディオ及び/またはビデオをデジタルビットストリームの形式で受信して、SIMDコ・プロセッサ命令で処理して、そのデジタルオーディオサンプル及び/またはモーションビデオフレームを再生してもよい。プロセッシングコア170の一実施形態では、メインプロセッサ166とSIMDコ・プロセッサ161は単一のプロセッシングコア170に集積されている。プロセッシングコア170は、実行ユニット162、一組のレジスタファイル164、及びデコーダ165を有し、SIMDストリング比較命令を含む命令セット163の命令を認識する。
【0039】
図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がその演算を完了するのに必要なマイクロ演算を供給する。
【0040】
多数のマクロ命令は単一のマイクロ演算に変換されるが、他のマクロ命令はその演算を完全に完了するのに複数の(several)マイクロ演算を必要とする。一実施形態では、1つのマクロ命令を完了するのに5つ以上のマイクロ演算が必要であれば、デコーダ228はマイクロコードROM232にアクセスしてマクロ命令を実行する。一実施形態では、パック化ストリング比較命令を少数のマイクロ演算にデコードして、命令デコーダ228で処理する。他の実施形態では、演算を行うのに多数のマイクロ演算が必要な場合、パック化ストリング比較アルゴリズムをマイクロコードROM232内に格納することもできる。トレースキャッシュ230は、マイクロコードROM232のストリング比較アルゴリズムのマイクロコードシーケンスを読むための、正しいマイクロ命令ポインタを決定するエントリーポイントのプログラマブルロジックアレイ(PLA)である。マイクロコードROM232がカレントの(current)マクロ命令のマイクロ演算のシーケンス決定(sequencing)を終了すると、マシンのフロントエンド201は、トレースキャッシュ230からマイクロ演算のフェッチを再開する。
【0041】
一部のSIMDその他のマルチメディアタイプの命令は複雑な命令であると考えられる。浮動小数点関係の命令もほとんどが複雑な命令である。そこで、命令デコーダ228は複雑なマクロ命令が来ると(encounter)、マイクロコードROM232の適切な場所にアクセスして、そのマクロ命令のマイクロコードシーケンスを読み出す。そのマクロ命令を実行するのに必要な様々なマイクロ演算を、アウトオブオーダー(out-of-order)実行エンジン203に送り、適切な整数実行ユニット及び浮動小数点実行ユニットで実行する。
【0042】
アウトオブオーダー実行エンジン203は、マイクロ命令の実行準備をするところである。アウトオブオーダー実行論理回路は、多数のバッファを有し、マイクロ命令がパイプラインを下り、実行スケジューリングがなされるにつれ、実行を最適化するように、マイクロ命令のフローをスムースにして並べ替える。アロケータロジックは、各マイクロ演算を実行するために必要なマシンバッファとリソースをアロケートする。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリーにリネーム(rename)する。アロケータは、命令スケジューラであるメモリスケジューラ、高速スケジューラ202、低速・一般浮動小数点スケジューラ204、及び単純浮動小数点スケジューラ206の前にある、メモリ演算用と非メモリ演算用の2つのマイクロ演算キューの一方の各マイクロ演算にエントリーをアロケートする。マイクロ演算スケジューラ202、204、206は、マイクロ演算が依存する入力レジスタオペランドソースの準備状況(readiness)と、マイクロ演算がその演算を完了するのに必要とする実行リソースの利用可能性とに基づき、マイクロ演算がいつ実行できるか決定する。本実施形態の高速スケジューラ202は、メインクロックサイクルの半分ごとにスケジューリングをできるが、他のスケジューラはメインプロセッサクロックサイクルごとにしかスケジューリングができない。複数のスケジューラはディスパッチポートをアービトレーションしてマイクロ演算の実行をスケジューリングする。
【0043】
レジスタファイル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ビットの幅のオペランドを有するからである。
【0044】
実行ブロック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ビット幅のパック化データオペランドに演算をすることができる。
【0045】
本実施形態では、マイクロ演算スケジューラ202,204,206は、親のロード(load)の実行が終わる前に、ディペンデント演算(dependent operations)をディスパッチする。マイクロ演算はプロセッサ200においてスペキュレーティブ(speculatively)にスケジューリングされるので、プロセッサ200はメモリミスを処理するロジックも含む。データキャッシュにおいてデータロードがミスすると、パイプライン中には、データが一時的に正しくないディペンデント演算がある。正しくないデータを使う命令をリプレイメカニズムが追跡し、再実行する。ディペンデント演算のみをリプレイする必要があり、インディペンデント演算は完了することができる。プロセッサの一実施形態のスケジューラとリプレイメカニズムは、ストリング比較演算の命令シーケンスを捉えるように設計されている。
【0046】
「レジスタ」という用語は、オペランドを特定するマクロ命令の一部として使われる、オンボードプロセッサの記憶場所を言う。換言すると、ここでレジスタとは、プロセッサの外側から(プログラマーの視点から)見えるレジスタである。しかし、一実施形態のレジスタは、特定タイプの回路を意味していると限定すべきではない。むしろ、実施形態のレジスタは、データを記憶して供給し、本明細書に記載する機能を実行できるだけでよい。ここで説明したレジスタは、専用の物理的レジスタ、レジスタリネーミングを利用した動的割当ての物理的レジスタ、専用の物理的レジスタ及び動的割当の物理的レジスタの組み合わせなど、任意数の異なる技術を用いて、プロセッサ内の回路により実施することができる。一実施形態では、整数レジスタは32ビットの整数データを記憶する。一実施形態のレジスタファイルは、パック化データ用に8個のマルチメディアSIMDレジスタも含む。以下の説明では、レジスタは、カリフォルニア州サンタクララ市のインテルコーポレイションのMMXテクノロジーで実現された、マイクロプロセッサの64ビット幅MMX(登録商標)レジスタ(場合によっては「mm」レジスタとも呼ぶ)などの、パック化データを保持するように設計されたデータレジスタであるものとする。これらのMMXレジスタは、整数形式と浮動小数点形式とがあるが、SIMD命令やSSE命令をともなうパック化データ要素に利用できる。同様に、SSE2,SSE3,SSE4またはそれ以降(総称的に「SSEx」と呼ぶ)のテクノロジーに関する128ビット幅のXMMレジスタも、このようなパック化データオペランドを保持するために用いることができる。本実施形態では、パック化データや整数データを記憶する際、レジスタは2つのデータタイプを区別する必要はない。
【0047】
以下の図の実施例では、複数のデータオペランドを説明する。図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個のデータ要素に並行に演算することができる。
【0048】
一般的に、データ要素は、単一のレジスタや記憶場所(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つのパック化クアドワードデータ要素を含む。
【0049】
図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ビット、またはそれ以上のレジスタ長に拡張することができる。
【0050】
図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番目のビットである。一実施形態では、オペランドは定数でもよく、それが付随する命令によって変化しない。
【0051】
図3Dは、オペレーションエンコーディング(opcode)フォーマット360の一実施形態を示す。これは、32ビット以上であり、レジスタ・メモリオペランドのアドレッシングモードは、「IA-32 Intel Architecture Software Developer's Manual Volumne 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ビットのソース及びデスティネーションオペランドを特定するために用いられる。
【0052】
図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)によるレジスタ、レジスタからメモリへのアドレッシングが可能である。
【0053】
次に図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でエンコードしてもよい。
【0054】
一実施形態では、ストリング比較演算の結果が非ゼロであることを示すために、フィールドまたは「フラグ」を用いてもよい。実施形態によっては、ソース要素が無効であることを示すフラグや、ストリング比較演算の結果のLSBまたはMSBを示すフラグなどの他のフィールドを使ってもよい。
【0055】
図4は、本発明による、パック化データオペランドにストリング比較演算を実行するロジックの一実施形態を示すブロック図である。本発明の実施形態は、上記のような様々なタイプのオペランドで機能するように実施できる。一実施形態では、本発明によるストリング比較演算は、特定のデータタイプに作用する命令セットとして実施する。例えば、整数と浮動小数点を含む32ビットデータタイプの比較を実行するパック化ストリング比較命令を提供する。同様に、整数と浮動小数点を含む64ビットデータタイプの比較を実行するパック化ストリング比較命令を提供する。以下の説明と実施例により、データ要素が何を表しているかに関わらずデータ要素を比較する比較命令の動作を説明する。説明を簡単にするため、一部の実施例は、データ要素がテキストの言葉である1つまたは複数のストリング比較命令の実行を示す。
【0056】
一実施形態では、ストリング比較命令は、第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レジスタを用いる。
【0057】
一実施形態では、第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クアドワード幅のデータ要素をそれぞれ有する。本発明の実施形態は特定の長さのデータオペランドやデータセグメントに限定されず、各実施形態に適切なサイズを利用できる。
【0058】
オペランド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ビットを含む任意サイズの整数要素を含み得る。
【0059】
一実施形態では、すべてのデータ一のデータ要素は並行に処理される。他の実施形態では、データ要素位置の一部は同時に処理できる。一実施形態では、RESULTANT440は、オペランド410と420に格納された各データ要素間の比較の複数の結果により構成される。具体的には、一実施形態では、結果(RESULTANT)はオペランド410または420の一方のデータ要素数の2乗だけの比較結果を記憶してもよい。
【0060】
一実施形態では、RESULTANTは、オペランド410と420の有効なデータ要素の間の比較のみの比較結果を記憶する。一実施形態では、各オペランドのデータ要素は、明示的または黙示的に有効であると示され得る。例えば、一実施形態では、各オペランドデータ要素は、有効レジスタなどの他の記憶領域内に記憶される、有効ビットなどの有効性インジケータに対応する。一実施形態では、両方のオペランドの各要素の有効性ビットは、同じ有効レジスタに記憶される。しかし、他の実施形態では、1つのオペランドの有効性ビットは、第1の有効レジスタに記憶され、他のオペランドの有効性ビットは第2の有効レジスタに記憶される。有効な要素間でのみ比較を行うように、オペランドデータ要素を比較する前に、またはそれと共に、(例えば、対応する有効ビットをチェックすることにより)両方のデータ要素が有効であるか判断してもよい。
【0061】
一実施形態では、各オペランドの有効データ要素は、オペランドの一方または両方に記憶されたヌルまたは「ゼロ」フィールドの使用により黙示的に示され得る。例えば、一実施形態では、ヌルバイト(または他のサイズ)を要素に記憶して、ヌルバイトより重要な(significant)データ要素はすべて無効であり、一方、ヌルバイトより重要でないデータ要素はすべて有効であるので、他のオペランドの対応する有効なデータ要素と比較すべきことを示してもよい。さらに、一実施形態では、(上記の通り)1つのオペランドの有効データ要素を明示的に示し、一方、他のオペランドの有効データ要素をヌルフィールドを用いて黙示的に示しても良い。一実施形態では、有効データ要素は、1つ以上のソースオペランド内の有効なデータ要素またはサブエレメント(sub-elements)の数に対応するカウントにより示される。
【0062】
各オペランドの有効データ要素を示す方法にかかわらず、少なくとも1つの実施形態では、有効であると示された各オペランドのデータ要素を比較する。有効データ要素のみの比較は、様々な実施形態で複数の方法で実行できる。詳細かつ理解可能な説明をする目的では、2つのテキストストリングオペランド間で有効なデータ要素のみを比較する方法は、以下によりもっともよく概念的に説明できる。しかし、以下の説明は、テキストストリングオペランドの有効データ要素のみの比較を以下に概念的に説明または実施するかの一例に過ぎない。他の実施形態では、他の概念的説明や方法を用いて、有効なデータ要素をいかに比較するかを示す。
【0063】
一実施形態では、オペランドの有効なデータ要素数が(例えば、有効性レジスタの有効ビットや、最下位から始めて有効なバイト・ワードの数をカウントすることにより)明示的に示されているか、(例えば、オペランド内のヌルキャラクタにより)黙示的に示されているかにかかわらず、各オペランドの有効データ要素のみを互いに比較する。一実施形態では、有効性インジケータの集計と比較するデータ要素を、図5を参照して概念的に説明する。
【0064】
図5を参照して、一実施形態では、アレイ501と505は、第1のオペランドと第2のオペランドの各要素がそれぞれ有効であるかどうかを示すエントリーを含む。例えば、上記の例では、アレイ501は、第1のオペランドが対応する有効データ要素を含む各アレイ要素には「1」を含む。同様に、アレイ505は、第2のオペランドが対応する有効データ要素を含む各アレイ要素に「1」を含む。一実施形態では、アレイ501と505は、2つのオペランドにある各有効要素に対して、アレイ要素0から始まり1を含む。例えば、一実施形態では、第1のオペランドが4つの有効要素を含む場合、アレイ501は最初の4つのアレイ要素にのみ1を含み、アレイ501の他のアレイ要素はすべてゼロである。
【0065】
一実施形態では、アレイ501と505はサイズが16要素であり、2つの128ビットオペランドの16個のデータ要素を表し、各々はサイズが8ビット(1バイト)である。他の実施形態では、オペランドのデータ要素のサイズが16ビットであり、アレイ501と505は8要素のみを含む。他の実施形態では、アレイ501と505は、対応するオペランドのサイズに応じて大きくても小さくてもよい。
【0066】
一実施形態では、第1のオペランドの各データ要素を第2のオペランドの各データ要素と比較し、その結果をi×jアレイ510で表す。例えば、テキストストリングを表す第1のオペランドの第1のデータ要素を、例えば、他のテキストストリングを表す他のオペランドの各データ要素と比較し、アレイ510の第1の行内の各アレイ要素に記憶された「1」は、第1のオペランドの第1のデータ要素と第2のオペランドの各データ要素の間の一致に対応する。これは、アレイ510が完了するまで、第1のオペランドの各データ要素に対して繰り返される。
【0067】
一実施形態では、i×jエントリーの第2のアレイ515が生成され、有効なオペランドのデータ要素のみが等しいかどうかの表示を記憶する。例えば、一実施形態では、アレイ510の最初の行511の各エントリーを対応する有効なアレイ要素506及び有効なアレイ要素502と論理的にANDを取って、その結果をアレイ515の対応する要素516に配置する。AND演算は、アレイ510の各要素と、有効なアレイ501及び505の対応する要素との間で実行し、その結果をアレイ520の対応する要素に配置してもよい。
【0068】
一実施形態では、結果アレイ520は、一オペランドのデータ要素のうち他のオペランドのデータ要素と関係するものがあるか示す。例えば、結果アレイ520は、アレイ515の要素のペアをAND演算し、ANDのすべての結果をOR演算することにより、他のオペランドのデータ要素により決まる範囲内にデータ要素があるか示すビットを記憶することができる。
【0069】
図5は、少なくとも2つのパック化オペランドのデータ要素間の比較に関する様々なインジケータを記憶する結果アレイ520も示す。例えば、結果アレイ520は、アレイ515の対応する要素をOR演算することにより、2つのオペランド間に等しいデータ要素はあるかどうかを示すビットを記憶する。アレイ515のアレイ要素のどれかが、例えば、オペランドの有効なデータ要素間に一致するものがあることを示す「1」を含む場合、これは結果アレイ520に反映される。結果アレイ520の要素をOR演算して、オペランドの有効なデータ要素が等しいか判断することもできる。
【0070】
一実施形態では、アレイ内の隣接する「1」を検出することにより、結果アレイ520内の、2つのオペランドのデータ要素間の有効な一致の連続を検出する。一実施形態では、これは、連続する結果アレイ要素を一度にAND演算し、「0」を検出するまで一AND演算の結果と次の結果とをAND演算することにより、実現できる。他の実施形態では、他の論理を用いて2つのパック化演算のデータ要素の有効な一致の範囲を検出してもよい。
【0071】
一実施形態では、結果アレイ520は、対応する結果アレイエントリーに「1」を返すことにより、両方のオペランドの各データ要素が一致するか示すこともできる。すべてのエントリーが等しいか判断するため、結果アレイエントリーにXOR演算を実行してもよい。他の実施形態では、他の論理を用いて2つのオペランドの有効データ要素が等しいか判断してもよい。
【0072】
一実施形態では、データ要素のストリングがデータ要素の他のストリング内のどこかにあることを、テストストリングを他のストリングの同じサイズの部分と比較して、テストストリングと他のストリングのその部分との一致を結果アレイに示すことにより、検出できる。例えば、一実施形態では、第1のオペランドの3つのデータ要素に対応する3つのキャラクタのテストストリングを、第2のストリングの3つのデータ要素の第1のセットと比較する。一致を検出したら、その一致を結果アレイに反映させる。これは、一致に対応する3つの結果エントリーのグループに「1」を格納することにより行う。テストストリングを他のオペランドの次の3つのデータ要素と比較する。または、比較されるにつれてテストストリングが他のオペランドに沿って「スライド」するように、前のオペランドのデータ要素の2つと新しい第3のデータ要素を、テストストリングと比較してもよい。
【0073】
一実施形態では、アプリケーションに応じて、結果アレイのエントリーを反転、または否定してもよい。他の実施形態では、結果エントリーの一部のみを、例えば2つのオペランドのデータ要素間の有効な一致に対応するものだけを否定(negate)する。他の実施形態では、他の演算を結果アレイ520の結果エントリーに実行してもよい。例えば、実施形態によっては、結果アレイ520はマスク値として表される。他の実施形態では、結果アレイはインデックス値で表され、レジスタなどの記憶場所に記憶される。インデックスは、一実施形態では結果アレイのMSBのグループにより表され、他の実施形態ではアレイのLSBで表される。一実施形態では、インデックスは、設定されているLSBまたはMSBへのオフセット値により表される。マスクは、一実施形態ではゼロ拡張であり、他の実施形態ではバイト/ワードマスク、またはその他の粒度(granularity)である。
【0074】
様々な実施形態では、SIMDオペランドの各要素の比較する際の上記の各相違は、個々の命令として実行される。他の実施形態では、上記の相違は、命令に付随するフィールド(immediate fields)などの単一の命令の属性を変えることにより実行され得る。図6は、1つまたは複数の命令により実行される、2つまたはそれ以上のSIMDオペランドの各データ要素を比較する様々な動作を示す図である。一実施形態では、図6の動作により比較されるオペランドはテキストストリングである。他の実施形態では、オペランドはその他のデータ情報やデータである。
【0075】
図6を参照して、動作610において、第1のSIMDオペランド601と第2のSIMDオペランド605の各要素を互いに比較する。一実施形態では、一方のオペランドはXMMレジスタなどのレジスタに記憶され、他方のオペランドは他のXMMレジスタまたはメモリに記憶されている。一実施形態では、比較のタイプは、図6に示した動作を実行する命令に対応するイミーディエイトフィールド(immediate field)により制御される。例えば、一実施形態では、2ビットのイミーディエイトフィールド(例えば、IMM8[1:0])を用いて、比較するデータ要素が符号付きバイトか、符号付きワードか、符号無しバイトか、符号無しワードか示す。一実施形態では、比較結果によりi×jアレイ(例えば、BoolRes[i,j])、またはi×jアレイの一部ができる。
【0076】
動作613において、並行して、オペランド601と605がそれぞれ表すストリングの終わりを見つけて、オペランド601と605の各要素の有効性を判断する。一実施形態では、レジスタまたはメモリの記憶場所内の対応する1つまたは複数のビットを設定することにより、オペランド601と605の各要素の有効性を明示的に示す。一実施形態では、その1つまたは複数のビットは、オペランド601と605のLSBの位置から始まる連続した有効データ要素(例えば、バイト)の数に対応する。例えば、オペランドのサイズにもよるが、EAXレジスタやRAXレジスタなどのレジスタを用いて、第1のオペランドの各データ要素の有効性を示すビットを記憶する。同様に、オペランドのサイズによっては、EDXレジスタやRDXレジスタなどのレジスタを用いて、第2のオペランドの各データ要素の有効性を示すビットを記憶する。他の実施形態では、オペランド601と605の各要素の有効性を、本開示ですでに説明した手段により、黙示的に示しても良い。
【0077】
一実施形態では、動作615において、比較と有効性に関する情報を集約機能(aggregation function)により結合して、2つのオペランドの要素の比較結果を生成する。一実施形態では、集約機能を、2つのオペランドの要素の比較を実行する命令に付随するイミーディエイトフィールドにより決定する。例えば、一実施形態では、2つのオペランドのデータ要素が等しいか、2つのオペランドのデータ要素の範囲が等しいか、2つのオペランドの各データ要素が等しいか、オペランドの少なくともデータ要素の一部の並びが同じか、比較により示すかどうか、イミーディエイトフィールド(immediate field)が示す。
【0078】
動作620において、一実施形態では、(例えば、IntRes1に記憶された)集約機能の結果をネゲートする。一実施形態では、イミーディエイトフィールドのビット(例えば、IMM8[6:5])により、集約機能の結果に実行するネゲート機能のタイプを制御する。例えば、イミーディエイトフィールドは、集約結果をまったくネゲート(negate)しない、集約機能の結果をすべてネゲートする、オペランドの有効要素に対応する集約結果のみをネゲートすることを示してもよい。一実施形態では、ネゲート演算の結果をアレイ(例えば、IntRes2アレイ)に記憶する。
【0079】
一実施形態では、それぞれ動作625と630において、ネゲート演算により生成される結果のアレイをインデックス値またはマスク値に変換する。ネゲート演算結果をインデックスに変換する場合、イミーディエイトフィールドのビット(例えば、IMM8[6])により、比較結果のMSBまたはLSBをインデックスにエンコードするかどうか、その結果をレジスタ(例えば、ECXまたはRCX)に記憶するかどうか制御する。一実施形態では、ネゲート演算の結果をマスク値で表す場合、イミーディエイトフィールドのビット(例えば、IMM8[6])を用いて、マスクをゼロ延長(zero-extended)拡張するか、バイト(またはワード)に拡張するか制御する。
【0080】
このように、ストリング比較演算の実行方法を開示する。実施形態の例を説明し、添付した図面に示したが、言うまでもなく、かかる実施形態は本発明の単なる例示であって制約するものではなく、本開示を研究すれば当業者には様々な修正に想到するので、本発明は図示し説明した具体的な構成に限定はされない。本技術分野等では、成長が速く進歩が容易には予見できないので、本発明の原理や添付したクレームの範囲から逸脱することなく技術的な進歩を可能とすることにより容易になるので、開示の実施形態を構成と詳細において容易に修正できる。
【技術分野】
【0001】
本願開示は、論理的及び数学的演算を行う、処理装置並びに関連するソフトウェア及びソフトウェア列の分野に関する。
【背景技術】
【0002】
計算機システムは、我々の社会でますます普及している。計算機の処理能力により、広範な職業で働く人々の効率と生産性が向上している。計算機を買って所有する費用は落ち続けている。従って、より多くの消費者が、より新しく、より速い計算機を活用できるようになっている。更に、多くの人は、ノート型の計算機を、その自由度ゆえに、楽しんで利用している。可搬型計算機により、利用者は、職場を離れても旅行中でも、簡単にデータを持ち運ぶことができ、仕事もできる。このような場面は、営業職や管理職にとって、また学生にとってすらも、ありふれた光景である。
【0003】
処理装置の技術が進むにつれ、より新しいソフトウェアも開発が進んでいる。このソフトウェアは、進んだ処理装置を持つ計算機で走る。利用者は概して、自分の計算機に、より高い性能を期待し要求する。このことは、使うソフトウェアの種類には無関係である。このような性能に関する問題が起こりうるのは、処理装置の内部で実際に実行される命令及び演算の種類からである。ある種類の演算は、完了するのに、他の演算よりも時間がかかる。その理由は、演算が複雑であるせいか、演算に必要な回路の型のせいか、その両方のせいである。このことが、ある種の複雑な演算を処理装置の内部で実行する方法を、最適化する動機である。
【0004】
通信の応用が、10年以上に渡って、超小型処理装置の進歩を駆り立ててきた。実際、計算と通信の間の境界線は、ますますぼやけてきている。この理由は、部分的には、通信の応用で文字列を使うからである。文字列の応用は、一般消費者向け市場で広まっている。また、文字列の応用は、多数の装置で広まっている。装置とは例えば携帯電話から個人用計算機までである。このような装置は、文字列情報を、一層より高速に処理することを求めている。文字列を通信する装置は、計算し通信する装置に進化し続けている。計算し通信する装置は、次のような形の応用を行う。即ち、マイクロソフト(登録商標)インスタントメッセンジャー(商標)、電子メールの応用(例えばマイクロソフト(登録商標)アウトルック(商標))、及び携帯電話メールの応用である。その結果、将来における、個人の計算及び通信の体験は、文字列を扱う能力について、更により豊かになると期待される。
【0005】
従って、計算又は通信する装置同士の間で交換される文字列情報を、処理すること又は構文解析することは、現在の計算装置及び通信装置にとって、一段と重要性を増している。とりわけ、通信又は計算する装置が文字情報の列を解釈することは、文字列データに対して行う最も重要な演算のうちの、いくつかを含む。このような演算では、計算量が嵩むにしても、データの並列度は高い水準であってもよい。この並列度を利用して、様々なデータ格納装置を使う効率的な実装を行える。格納装置とは、例えば、単一命令複数データ(SIMD)型のレジスタである。数多くの現在の計算機アーキテクチャはまた、次のことを要求する。即ち、複数の演算、複数の命令、又は複数の下位命令(よく「マイクロ命令」又は「μop」という。)を使って、様々な論理的及び数学的演算を、多数の演算対象に対して行う。このことにより、処理速度を上げ、その論理的及び数学的演算を行うのに必要なクロック周期の数を減らす。
【発明の概要】
【発明が解決しようとする課題】
【0006】
例えば、多数の命令から成る命令列が、次のことを行うために必要であってもよい。即ち、文字列の中の特定の語を解釈するのに必要な1つ以上の演算である。この演算は、処理装置、システム、又は計算機プログラムの内部の様々なデータ型が表現する、2つ以上の文字列語を比べることを含む。しかし、このような従来の技術では、多数の処理周期が必要になることがあり、処理装置又はシステムは、結果を得るために、不要な電力を消費してしまうことがある。更に、いくつかの従来技術では、演算の対象としてもよいデータ型として、限られたものしか使えないことがある。
【課題を解決するための手段】
【0007】
本発明の一態様によると、命令を記憶した機械読み取り可能媒体が提供される。前記命令は、機械により実行されると、前記機械に第1のパック化オペランドの各データ要素を、第2のパック化オペランドの各データ要素と比較する段階と、前記比較の第1の結果を記憶する段階を含む方法を実行させる。
【図面の簡単な説明】
【0008】
【図1A】計算機システムの区画図である。計算機システムは、処理装置を含む。処理装置は、実行部を含む。実行部は、命令を実行する。命令は、文字列比較演算を行う。この命令は、本願発明の1つの実施例による。
【図1B】本願発明の別の実施例による、別の例の計算機システムの区画図である。
【図1C】本願発明の更に別の実施例による、更に別の例の計算機システムの区画図である。
【図2】1つの実施例による処理装置のマイクロアーキテクチャの区画図である。この実施例は、論理回路を含む。この論理回路は、本願発明による文字列比較演算を1つ以上行う。
【図3A】本願発明の1つの実施例による、マルチメディアレジスタにおける種々のパック化データ型の表現を示す。
【図3B】別の実施例による、パック化データ型を示す。
【図3C】本願発明の1つの実施例による、マルチメディアレジスタにおける種々の符号付き及び符号無しのパック化データ型の表現を示す。
【図3D】演算の符号化(即ち命令符号)の形式の1つの実施例を示す。
【図3E】演算の符号化(即ち命令符号)の別な形式を示す。
【図3F】演算の符号化の更に別な形式を示す。
【図4】論理回路の区画図である。この論理回路は、本願発明の1つの実施例により、少なくとも1つの文字列比較演算を、1つ以上の単精度パック化データ演算対象に対して行う。
【図5】配列の区画図である。この配列を使って、1つの実施例による少なくとも1つの文字列比較演算を行ってもよい。
【図6】本発明の1つの実施例で行ってもよい演算を示す。
【発明を実施するための形態】
【0009】
本願発明を実施例を使って説明する。本願発明は、実施例及び添付の図面によっては、限定されない。
【実施例】
【0010】
以下の記載が記述するのは、技法の実施例である。この技法は、処理装置、計算機システム、又はソフトウェアプログラムの内部で、文字列の要素同士の間を比べる演算を行う。以下の記載では、多数の個別の詳細を記述する。詳細とは例えば処理装置の型、マイクロアーキテクチャの事情、事象、実施可能な機構、等である。詳細を記載する目的は、本願発明のより深い理解を与えるためである。しかし、当業者は次の点に注意。即ち、本発明を、そのような個別の詳細を抜きに実施してもよい。加えて、いくつかの周知の構造、回路などは、詳細を示していない。これは、本願発明を不要に複雑に示すのを避けるためである。
【0011】
以下の実施例を、処理装置を参照して記述する。しかし、他の実施例を、他の型の集積回路や論理部品に応用できる。本願発明と同じ技術及び教示を、他の型の回路又は半導体部品に容易に応用できる。他の型の回路又は半導体部品も、より高いパイプライン効率及び改善した性能から、利益を受けることができる。本願発明の教示は、データの演算を行う、いかなる処理装置又は機械にも、応用できる。なお、本願発明は、256ビット、128ビット、64ビット、32ビット、又は16ビットのデータの演算を行う処理装置又は機械に限定されない。本願発明を、パック化データを演算する必要がある、いかなる処理装置及び機械にも、応用できる。
【0012】
以下の記載では、説明のために、多数の個別の詳細を記述する。詳細を記載する目的は、本願発明の徹底的な理解を与えるためである。しかし、当業者は次の点を理解することになる。即ち、これらの個別の詳細は、本願発明を実施するために必要ではない。場合により、周知の電気的な構造及び回路については、特に詳しくは記載していない。これは、本願発明を不要に複雑に示すのを避けるためである。加えて、以下の記載は、例を示す。添付の図面は、様々な例を示す。これらの例を示すのは、説明のためである。しかし、これらの例を、本願発明を限定する意味で解釈してはならない。これらの例は、本願発明の例を示すことを、意図しているだけである。これらの例は、本願発明の全ての可能な実装を網羅する一覧を示すことを、意図していない。
【0013】
以下の例では、命令の取り扱い及び分散を、実行部及び論理回路の文脈で記述する。しかし、本願発明の他の実施例を、ソフトウェアによっても実現できる。1つの実施例では、本願発明の方法を、機械が実行可能な命令に実施する。この命令を使って、次のことを行える。即ち、汎用処理装置又は専用処理装置をこの命令によってプログラムし、本願発明の工程を実行させる。本願発明を、計算機プログラム又はソフトウェアとして提供してもよい。この計算機プログラム又はソフトウェアは、機械可読媒体又は計算機可読媒体を含んでもよい。機械可読媒体又は計算機可読媒体は、命令を内部に格納して持つ。この命令を使って、計算機(又は他の電子装置)をプログラムしてもよい。このプログラムにより、本願発明による処理を行う。代わりに、本願発明の工程を、特定のハードウェア部品によって実行してもよい。特定のハードウェア部品は、本願発明の工程を実行するための、配線を固定した論理回路を含む。又は、本願発明の工程を、プログラムされた計算機部品と専用ハードウェア部品との、いかなる組み合わせによっても実行してもよい。このようなソフトウェアを、システムの記憶装置の内部に格納できる。同様に、命令を分散できる。この分散を、網により行う。又は、この分散を、他の計算機可読媒体を使って行う。
【0014】
従って、機械可読媒体は、機械(例えば計算機)が読める形式で情報を格納又は伝達するための、いかなる機構を含んでもよい。機械可読媒体は、次のものを含むが、これらに限定されない:フロッピー(登録商標)ディスケット;光学ディスク;コンパクトディスク;CD−ROM;光磁気ディスク;ROM;RAM;EPROM;EEPROM;磁気カード若しくは光学カード;フラッシュ記憶装置;インターネット上の伝送;電気的、光学的、音響的、若しくは他の形態の伝搬する信号(例えば搬送波、赤外線信号、デジタル信号、等);又は、同様のもの。従って、計算機可読媒体は、機械(例えば計算機)が読める形式で、電子的な命令又は情報を、格納又は伝達するのに適した、いかなる型の媒体及び機械可読媒体をも含む。更に、本願発明を、計算機プログラムとしてダウンロードしてもよい。即ち、プログラムを、遠隔の計算機(例えばサーバー)から転送して、要求する計算機(例えばクライアント)に取り込んでもよい。プログラムの転送を、次の信号によって行ってもよい。即ち、電気的、光学的、音響的、又は他の形態のデータ信号。これらの信号を、搬送波又は他の伝搬媒体に実施する。これらの信号は、通信接続(例えばモデム接続、網接続等)を経由する。
【0015】
設計は、様々な段階を踏んでもよい。即ち、設計は、創案からシミュレーションを経て製造に至る。設計を表現するデータは、その設計を多数の方法で表現してもよい。まず、シミュレーションで便利なのは、次の方法である。即ち、ハードウェアを、ハードウェア記述言語又は別の機能記述言語を使って表現してもよい。加えて、論理の及び/又はトランジスターのゲート水準の回路モデルを、設計の過程の何らかの段階で作ってもよい。更に、ほとんどの設計者は、何らかの段階で、ハードウェアモデルにおける、種々の素子の物理的な配置を表現する水準のデータに辿り着く。従来の半導体の製造技術を使う場合には、このハードウェアモデルを表現するデータは、半導体マスクの様々な層に種々の特徴が有るか無いかを指定するデータであってもよい。このマスクを使って集積回路を作る。設計におけるいかなる表現でも、そのデータをいかなる形態の機械可読媒体に格納してもよい。機械可読媒体とは、次のものでもよい。即ち、そのような情報を伝送するために、変調した若しくは他の方法で生成した、光学的若しくは電気的な波、記憶装置、又は磁気若しくは光学的な格納器(例えば円盤)。これらの媒体のいかなるものも、設計又はソフトウェア情報を「担う」又は「示す」のでもよい。符号又は設計を示す又は担う電気的な搬送波を伝送する場合に、その電気信号の複写、蓄積、又は再送を行うと、新しい複写ができる。従って、通信設備者又は網提供者は、本願発明の技術を実施する物(即ち搬送波)の複写を作ってもよい。
【0016】
近年の処理装置では、多数の異なる実行部を使って、様々な命令を処理し実行する。全ての命令が平等に作られている訳では無い。即ち、ある命令は他の命令よりも早く完了する。別の命令は、完了するのに莫大なクロックサイクルを費やすことがある。命令の実行速度が速ければ速いほど、処理装置の全体的な性能はより良いことになる。従って、有利なのは、なるべく多くの命令を、なるべく速く実行することである。しかし、いくつかの命令は、他の命令よりも遥かに複雑である。従って、実行時間と処理装置の資源を、他の命令よりも多く必要とする。そのような命令の例としては、浮動小数点命令、記憶装置からの読み込み/記憶装置への書き出し操作、データの移動命令等がある。
【0017】
ますます多くの計算機システムを、インターネット、文章作成、及びマルチメディアのアプリケーションで使うようになったので、時が経つにつれ、処理装置に、それらを支援する機能が追加されてきた。例えば、単一命令複数データ(SIMD)型の整数及び浮動小数点命令、並びに、ストリーミングSIMD拡張(SSE)のような命令は、特定のプログラムの仕事を実行するのに必要な命令の総数を減らす。このことにより、消費電力を減らすこともできる。このような命令がソフトウェアの性能を高速化できるのは、複数のデータ要素に並列に演算を行うことによる。その結果、広範な応用で性能を上げられる。応用は、映像の処理、発話の処理、及び画像や写真の処理を含む。SIMD命令の実装は、超小型処理装置や類似の論理回路で行われている。このような実装は、通常、多数の問題を孕んでいる。更に、SIMD演算は複雑なので、大抵は追加の回路が必要になる。追加の回路により、データを正しく処理して演算する。
【0018】
現在、少なくとも2つのパック化演算対象のデータ要素の各々を比べるSIMD命令は存在しない。本発明の1つの実施例で行うようなSIMDパック化比較命令が無いと、応用プログラムで同じ結果を得るために、多数の命令及びデータレジスタが必要になることがある。応用プログラムは、例えば文字列についての、解釈、圧縮及び復元、処理、並びに演算を行う。本願で開示する実施例では、「文字列」の比較と「列」の比較を、相互に交換可能なように参照する。しかし、本発明の実施例を、情報のいかなる列(例えば、文字の列、数値の列、又は他のデータの列)にも適用してよい。
【0019】
従って、本願発明の実施例による、少なくとも1つの文字列比較命令は、プログラムのオーバーヘッド及び必要な資源を減らせる。本願発明の実施例は、文字列を構文解析する演算を、SIMD関連のハードウェアを利用する算法として実装する方法を提供する。現在、SIMDレジスタにあるデータについて、文字列を構文解析する演算を行うことは、やや困難で手間がかかる。算法によっては、算術演算を実行する肝心の命令の数よりも、算術演算のためにデータを配置する命令に、より多くの数を必要とするほどである。本願発明の実施例による文字列比較演算の実施例を実装することにより、文字列を処理するために必要な命令の数を大幅に減らせる。
【0020】
本願発明の実施例は、文字列を比べる1つ以上の演算を実装するための命令を含む。文字列を比べる演算は、一般に、データの2つの列からのデータ要素を比較することに関する。この比較により、どのデータ要素が合致するかを判断する。別の変形例を、汎用の文字列比較算法について作ってもよい。この算法も後で開示する。一般化した意味では、文字列比較演算の1つの実施例を、2つのパック化演算対象中にある個々のデータ要素に適用する。2つのパック化演算対象は、データの2つの列を示す。この文字列比較演算の実施例を、次のように汎用的に示せる:
DEST1 <− SRC1 cmp SRC2;
1つのパック化したSIMDデータ演算対象について、この汎用演算を、各演算対象の各データ要素の位置に適用できる。
【0021】
上記の動作において、「DEST」と「SRC」は、対応するデータや動作の送信先と送信元を表す一般的な用語である。実施形態では、レジスタ、またはメモリ、または図示したものとは異なる名称や機能を有するその他の記憶領域により実施できる。例えば、一実施形態では、DEST1は一時的記憶レジスタやその他の記憶領域であり、SRC1とSRC2は送信先の第1と第2の記憶レジスタまたはその他の記憶領域である。他の実施形態では、SRC及びDEST記憶領域は同一記憶領域内(例えば、SIMDレジスタ)の異なるデータ記憶要素に対応する。
【0022】
さらに、一実施形態では、ストリング比較動作により、あるソースレジスタの各要素が他のソースレジスタの各要素と等しいかどうかのインジケータを生成し、そのインジケータをDEST1等のレジスタに記憶する。一実施形態では、インジケータはインデックス値である。他の実施形態では、インジケータはマスク値である。他の実施形態では、インジケータはその他のデータ構造やポインタを表す。
【0023】
図1Aはコンピュータシステムの一例を示すブロック図である。このコンピュータシステムはプロセッサを有する。このプロセッサは、本発明の一実施形態によるストリング比較動作の命令を実行する実行ユニットを含む。システム100は、ここに説明する実施形態のような、本発明により、データを処理するアルゴリズムを実行する論理回路を含む実行ユニットを利用する、プロセッサ102等のコンポーネントを含む。システム100は、カリフォルニア州サンタクララ市のインテルコーポレイションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(登録商標)、StrongARM(登録商標)に基づくプロセッシングシステムを表す。しかし、(他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックス等を含む)他のシステムを使うことも可能である。一実施形態では、サンプルシステム100は、ワシントン州レドモンド市のマイクロソフトコーポレーションのウィンドウズ(登録商標)オペレーティングシステムの一バージョンを実行するが、他のオペレーティングシステム(ユニックス、リナックス等)、組み込みソフトウェア、及び/またはグラフィカルユーザインターフェイス等を用いても良い。このように、本発明の実施形態は、ハードウェア回路とソフトウェアの特定の組み合わせには限定されない。
【0024】
実施形態はコンピュータシステムには限定されない。本発明の別の実施形態は、その他のデバイス、例えばハンドヘルドデバイスや組み込みアプリケーション等で利用することもできる。ハンドヘルドデバイスの例としては、セルラ電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタント(PDA)、ハンドヘルドPCなどがある。組み込みアプリケーションには、マイクロコントローラ、デジタルシグナルプロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、その他のオペランドにストリング比較演算を実行するシステムがある。さらに、複数のデータ(several data)に対して同時に命令を実行してマルチメディアアプリケーションの効率を向上させるアーキテクチャを組み込んだ。データのタイプとボリュームが大きくなるにつれ、コンピュータやそのプロセッサはより効率的な方法でデータを操作するように高機能化(enhanced)されねばならない。
【0025】
図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の要素は、本技術分野の当業者に周知である従来の機能を実行する。
【0026】
一実施形態では、プロセッサ102はレベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャによって、プロセッサ102は単一内部キャッシュを有しても、複数内部キャッシュレベルを有していてもよい。あるいは、他の実施形態では、キャッシュメモリはプロセッサ102の外部にあってもよい。他の実施形態では、具体的な実施形態及び必要性に応じて内部キャッシュと外部キャッシュを組み合わせてもよい。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、命令ポインタレジスタを含む様々なレジスタに相異なるタイプのデータを格納できる。
【0027】
プロセッサ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に結合されている。
【0028】
システム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デバイス、フラッシュメモリデバイス、その他の大容量ストレージデバイスである。
【0029】
システムの他の実施形態の場合、ストリング比較命令を含むアルゴリズムを実行する実行ユニットをシステムオンチップ(system on a chip)で利用できる。システムオンチップの一実施形態は、プロセッサ及びメモリである。かかるシステムのメモリはフラッシュメモリである。フラッシュメモリはプロセッサ及びその他のシステムコンポーネントと同じダイ(die)にあってもよい。また、他の論理ブロック、例えばメモリコントローラまたはグラフィックスコントローラ等がシステムオンチップ上にあってもよい。
【0030】
図1Bは、本発明の一実施形態の原理を化体するデータ処理システム140を示す。当業者には言うまでもなく、本発明の範囲から逸脱することなく、ここに説明する実施形態を別の処理システムで利用することもできる。
【0031】
コンピュータシステム140は、ストリング比較演算を含むSIMD演算を実行できるプロセッシングコア159を有する。一実施形態では、プロセッシングコア159は、任意タイプのアーキテクチャの処理ユニットを表し、CISC、RISC、VLIWなど各タイプのアーキテクチャを含むが、これらには限定されない。プロセッシングコア159は、1つまたは複数のプロセステクノロジーでの生産に適しており、機械読み取り可能媒体で十分に詳しく表せるので、生産が容易になる。
【0032】
プロセッシングコア159は、実行ユニット142、一組のレジスタファイル145、及びデコーダ144を有する。プロセッシングコア159は、この他の回路(図示せず)も含むが、この回路は本発明を理解するためには必要ない。実行ユニット142は、プロセッシングコア159が受け取った命令を実行するために使用する。実行ユニット142は、一般的なプロセッサ命令を認識するのに加え、パック化命令セット143の命令を認識して、パック化データフォーマットに演算を実行する。パック化命令セット143は、ストリング比較演算をサポートする命令を含み、他のパック化命令を含んでも良い。実行ユニット142は内部バスによりレジスタファイル145に結合している。レジスタファイル145は、データを含む情報を格納する、プロセッシングコア159上の記憶領域を表す。上記の通り、パック化データを記憶するのに用いる記憶領域は必須ではない。実行ゆn一途142はデコーダ144に結合している。デコーダ144は、プロセッシングコア159が受け取った命令を制御信号及び/またはマイクロコードエントリーポイント(microcode entry points)にデコードするために用いられる。実行ユニット142は、これらの制御信号及び/またはマイクロコードエントリーポイントに応じて適切な演算を実行する。
【0033】
プロセッシングコア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が含まれるが、これらには限定されない。
【0034】
データプロセッシングシステム140の一実施形態は、ストリング比較演算を含むSIMD演算を実行できる、モバイル、ネットワーク及び/またはワイヤレス通信およびプロセッシングコア159である。プロセッシングコア159は、様々なオーディオ、ビデオ、画像化、及び通信アルゴリズムでプログラムすることができる。これらのアルゴリズムには、例えば、ウォルシュ・アダマール変換、高速フーリエ変換、離散余弦変換(DCT)、これらのそれぞれの逆変換;色空間変換等の圧縮・解凍方法、ビデオエンコード動き予測、またはビデオデコード動き補償;パルスコード変調(PCM)等の変復調(MODEM)機能等が含まれる。
【0035】
図1Cは、SIMDストリング比較演算を実行できるデータ処理システムのさらに別の実施形態を示す。別の一実施形態によるデータプロセッシングシステム160は、メインプロセッサ166、SIMDコ・プロセッサ161、キャッシュメモリ167、及び入出力システム168を含む。入出力システム168は、任意的に、ワイヤレスインターフェイス169に結合している。SIMDコ・プロセッサ161は、ストリング比較演算を含むSIMD演算を実行できる。プロセッシングコア170は、1つまたは複数のプロセステクノロジーでの生産に適しており、機械読み取り可能媒体で十分に詳しく表せるので、プロセッシングコア170を含むデータプロセッシングシステム160の全部または一部の生産が容易になる。
【0036】
一実施形態では、SIMDコ・プロセッサ161は、実行ユニット162と一組のレジスタファイル164を有する。メインプロセッサ165の一実施形態は、実行ユニット162が実行するSIMDストリング比較命令を含む命令セット163の命令を認識するデコーダ165を有する。別の実施形態では、SIMDコ・プロセッサ161は、デコーダ165Bの少なくとも一部を有し、命令セット163の命令をデコードする。プロセッシングコア170は、この他の回路(図示せず)も含むが、この回路は本発明の実施形態を理解するためには必要ない。
【0037】
動作中、メインプロセッサ166は、キャッシュメモリ167や入出力システム168とのインターラクションを含む、一般的なタイプのデータ処理演算を制御するデータ処理命令ストリーム(stream of data processing instructions)を実行する。SIMDコ・プロセッサ命令はデータ処理命令ストリームの中に組み込まれている。メインプロセッサ166のデコーダ165は、SIMDコ・プロセッサ命令を、付随するSIMDコ・プロセッサ161が実行すべきタイプであるとして認識する。従って、メインプロセッサ166は、これらのSIMDコ・プロセッサ命令(または、SIMDコ・プロセッサ命令を表す制御信号)をコ・プロセッサバス166上に発行し、付随するSIMDコ・プロセッサはコ・プロセッサバス166からコ・プロセッサ命令を受け取る。この場合、SIMDコ・プロセッサ161は、それに宛てられたSIMDコ・プロセッサ命令を受け取り、実行する。
【0038】
SIMDコ・プロセッサ命令が処理するデータは、ワイヤレスインターフェイス169を介して受け取ってもよい。一例として、音声通信をデジタル信号の形式で受信して、SIMDコ・プロセッサ命令で処理して、その音声通信を表すデジタルオーディオサンプルを再生する。他の一例として、圧縮オーディオ及び/またはビデオをデジタルビットストリームの形式で受信して、SIMDコ・プロセッサ命令で処理して、そのデジタルオーディオサンプル及び/またはモーションビデオフレームを再生してもよい。プロセッシングコア170の一実施形態では、メインプロセッサ166とSIMDコ・プロセッサ161は単一のプロセッシングコア170に集積されている。プロセッシングコア170は、実行ユニット162、一組のレジスタファイル164、及びデコーダ165を有し、SIMDストリング比較命令を含む命令セット163の命令を認識する。
【0039】
図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がその演算を完了するのに必要なマイクロ演算を供給する。
【0040】
多数のマクロ命令は単一のマイクロ演算に変換されるが、他のマクロ命令はその演算を完全に完了するのに複数の(several)マイクロ演算を必要とする。一実施形態では、1つのマクロ命令を完了するのに5つ以上のマイクロ演算が必要であれば、デコーダ228はマイクロコードROM232にアクセスしてマクロ命令を実行する。一実施形態では、パック化ストリング比較命令を少数のマイクロ演算にデコードして、命令デコーダ228で処理する。他の実施形態では、演算を行うのに多数のマイクロ演算が必要な場合、パック化ストリング比較アルゴリズムをマイクロコードROM232内に格納することもできる。トレースキャッシュ230は、マイクロコードROM232のストリング比較アルゴリズムのマイクロコードシーケンスを読むための、正しいマイクロ命令ポインタを決定するエントリーポイントのプログラマブルロジックアレイ(PLA)である。マイクロコードROM232がカレントの(current)マクロ命令のマイクロ演算のシーケンス決定(sequencing)を終了すると、マシンのフロントエンド201は、トレースキャッシュ230からマイクロ演算のフェッチを再開する。
【0041】
一部のSIMDその他のマルチメディアタイプの命令は複雑な命令であると考えられる。浮動小数点関係の命令もほとんどが複雑な命令である。そこで、命令デコーダ228は複雑なマクロ命令が来ると(encounter)、マイクロコードROM232の適切な場所にアクセスして、そのマクロ命令のマイクロコードシーケンスを読み出す。そのマクロ命令を実行するのに必要な様々なマイクロ演算を、アウトオブオーダー(out-of-order)実行エンジン203に送り、適切な整数実行ユニット及び浮動小数点実行ユニットで実行する。
【0042】
アウトオブオーダー実行エンジン203は、マイクロ命令の実行準備をするところである。アウトオブオーダー実行論理回路は、多数のバッファを有し、マイクロ命令がパイプラインを下り、実行スケジューリングがなされるにつれ、実行を最適化するように、マイクロ命令のフローをスムースにして並べ替える。アロケータロジックは、各マイクロ演算を実行するために必要なマシンバッファとリソースをアロケートする。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリーにリネーム(rename)する。アロケータは、命令スケジューラであるメモリスケジューラ、高速スケジューラ202、低速・一般浮動小数点スケジューラ204、及び単純浮動小数点スケジューラ206の前にある、メモリ演算用と非メモリ演算用の2つのマイクロ演算キューの一方の各マイクロ演算にエントリーをアロケートする。マイクロ演算スケジューラ202、204、206は、マイクロ演算が依存する入力レジスタオペランドソースの準備状況(readiness)と、マイクロ演算がその演算を完了するのに必要とする実行リソースの利用可能性とに基づき、マイクロ演算がいつ実行できるか決定する。本実施形態の高速スケジューラ202は、メインクロックサイクルの半分ごとにスケジューリングをできるが、他のスケジューラはメインプロセッサクロックサイクルごとにしかスケジューリングができない。複数のスケジューラはディスパッチポートをアービトレーションしてマイクロ演算の実行をスケジューリングする。
【0043】
レジスタファイル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ビットの幅のオペランドを有するからである。
【0044】
実行ブロック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ビット幅のパック化データオペランドに演算をすることができる。
【0045】
本実施形態では、マイクロ演算スケジューラ202,204,206は、親のロード(load)の実行が終わる前に、ディペンデント演算(dependent operations)をディスパッチする。マイクロ演算はプロセッサ200においてスペキュレーティブ(speculatively)にスケジューリングされるので、プロセッサ200はメモリミスを処理するロジックも含む。データキャッシュにおいてデータロードがミスすると、パイプライン中には、データが一時的に正しくないディペンデント演算がある。正しくないデータを使う命令をリプレイメカニズムが追跡し、再実行する。ディペンデント演算のみをリプレイする必要があり、インディペンデント演算は完了することができる。プロセッサの一実施形態のスケジューラとリプレイメカニズムは、ストリング比較演算の命令シーケンスを捉えるように設計されている。
【0046】
「レジスタ」という用語は、オペランドを特定するマクロ命令の一部として使われる、オンボードプロセッサの記憶場所を言う。換言すると、ここでレジスタとは、プロセッサの外側から(プログラマーの視点から)見えるレジスタである。しかし、一実施形態のレジスタは、特定タイプの回路を意味していると限定すべきではない。むしろ、実施形態のレジスタは、データを記憶して供給し、本明細書に記載する機能を実行できるだけでよい。ここで説明したレジスタは、専用の物理的レジスタ、レジスタリネーミングを利用した動的割当ての物理的レジスタ、専用の物理的レジスタ及び動的割当の物理的レジスタの組み合わせなど、任意数の異なる技術を用いて、プロセッサ内の回路により実施することができる。一実施形態では、整数レジスタは32ビットの整数データを記憶する。一実施形態のレジスタファイルは、パック化データ用に8個のマルチメディアSIMDレジスタも含む。以下の説明では、レジスタは、カリフォルニア州サンタクララ市のインテルコーポレイションのMMXテクノロジーで実現された、マイクロプロセッサの64ビット幅MMX(登録商標)レジスタ(場合によっては「mm」レジスタとも呼ぶ)などの、パック化データを保持するように設計されたデータレジスタであるものとする。これらのMMXレジスタは、整数形式と浮動小数点形式とがあるが、SIMD命令やSSE命令をともなうパック化データ要素に利用できる。同様に、SSE2,SSE3,SSE4またはそれ以降(総称的に「SSEx」と呼ぶ)のテクノロジーに関する128ビット幅のXMMレジスタも、このようなパック化データオペランドを保持するために用いることができる。本実施形態では、パック化データや整数データを記憶する際、レジスタは2つのデータタイプを区別する必要はない。
【0047】
以下の図の実施例では、複数のデータオペランドを説明する。図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個のデータ要素に並行に演算することができる。
【0048】
一般的に、データ要素は、単一のレジスタや記憶場所(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つのパック化クアドワードデータ要素を含む。
【0049】
図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ビット、またはそれ以上のレジスタ長に拡張することができる。
【0050】
図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番目のビットである。一実施形態では、オペランドは定数でもよく、それが付随する命令によって変化しない。
【0051】
図3Dは、オペレーションエンコーディング(opcode)フォーマット360の一実施形態を示す。これは、32ビット以上であり、レジスタ・メモリオペランドのアドレッシングモードは、「IA-32 Intel Architecture Software Developer's Manual Volumne 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ビットのソース及びデスティネーションオペランドを特定するために用いられる。
【0052】
図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)によるレジスタ、レジスタからメモリへのアドレッシングが可能である。
【0053】
次に図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でエンコードしてもよい。
【0054】
一実施形態では、ストリング比較演算の結果が非ゼロであることを示すために、フィールドまたは「フラグ」を用いてもよい。実施形態によっては、ソース要素が無効であることを示すフラグや、ストリング比較演算の結果のLSBまたはMSBを示すフラグなどの他のフィールドを使ってもよい。
【0055】
図4は、本発明による、パック化データオペランドにストリング比較演算を実行するロジックの一実施形態を示すブロック図である。本発明の実施形態は、上記のような様々なタイプのオペランドで機能するように実施できる。一実施形態では、本発明によるストリング比較演算は、特定のデータタイプに作用する命令セットとして実施する。例えば、整数と浮動小数点を含む32ビットデータタイプの比較を実行するパック化ストリング比較命令を提供する。同様に、整数と浮動小数点を含む64ビットデータタイプの比較を実行するパック化ストリング比較命令を提供する。以下の説明と実施例により、データ要素が何を表しているかに関わらずデータ要素を比較する比較命令の動作を説明する。説明を簡単にするため、一部の実施例は、データ要素がテキストの言葉である1つまたは複数のストリング比較命令の実行を示す。
【0056】
一実施形態では、ストリング比較命令は、第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レジスタを用いる。
【0057】
一実施形態では、第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クアドワード幅のデータ要素をそれぞれ有する。本発明の実施形態は特定の長さのデータオペランドやデータセグメントに限定されず、各実施形態に適切なサイズを利用できる。
【0058】
オペランド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ビットを含む任意サイズの整数要素を含み得る。
【0059】
一実施形態では、すべてのデータ一のデータ要素は並行に処理される。他の実施形態では、データ要素位置の一部は同時に処理できる。一実施形態では、RESULTANT440は、オペランド410と420に格納された各データ要素間の比較の複数の結果により構成される。具体的には、一実施形態では、結果(RESULTANT)はオペランド410または420の一方のデータ要素数の2乗だけの比較結果を記憶してもよい。
【0060】
一実施形態では、RESULTANTは、オペランド410と420の有効なデータ要素の間の比較のみの比較結果を記憶する。一実施形態では、各オペランドのデータ要素は、明示的または黙示的に有効であると示され得る。例えば、一実施形態では、各オペランドデータ要素は、有効レジスタなどの他の記憶領域内に記憶される、有効ビットなどの有効性インジケータに対応する。一実施形態では、両方のオペランドの各要素の有効性ビットは、同じ有効レジスタに記憶される。しかし、他の実施形態では、1つのオペランドの有効性ビットは、第1の有効レジスタに記憶され、他のオペランドの有効性ビットは第2の有効レジスタに記憶される。有効な要素間でのみ比較を行うように、オペランドデータ要素を比較する前に、またはそれと共に、(例えば、対応する有効ビットをチェックすることにより)両方のデータ要素が有効であるか判断してもよい。
【0061】
一実施形態では、各オペランドの有効データ要素は、オペランドの一方または両方に記憶されたヌルまたは「ゼロ」フィールドの使用により黙示的に示され得る。例えば、一実施形態では、ヌルバイト(または他のサイズ)を要素に記憶して、ヌルバイトより重要な(significant)データ要素はすべて無効であり、一方、ヌルバイトより重要でないデータ要素はすべて有効であるので、他のオペランドの対応する有効なデータ要素と比較すべきことを示してもよい。さらに、一実施形態では、(上記の通り)1つのオペランドの有効データ要素を明示的に示し、一方、他のオペランドの有効データ要素をヌルフィールドを用いて黙示的に示しても良い。一実施形態では、有効データ要素は、1つ以上のソースオペランド内の有効なデータ要素またはサブエレメント(sub-elements)の数に対応するカウントにより示される。
【0062】
各オペランドの有効データ要素を示す方法にかかわらず、少なくとも1つの実施形態では、有効であると示された各オペランドのデータ要素を比較する。有効データ要素のみの比較は、様々な実施形態で複数の方法で実行できる。詳細かつ理解可能な説明をする目的では、2つのテキストストリングオペランド間で有効なデータ要素のみを比較する方法は、以下によりもっともよく概念的に説明できる。しかし、以下の説明は、テキストストリングオペランドの有効データ要素のみの比較を以下に概念的に説明または実施するかの一例に過ぎない。他の実施形態では、他の概念的説明や方法を用いて、有効なデータ要素をいかに比較するかを示す。
【0063】
一実施形態では、オペランドの有効なデータ要素数が(例えば、有効性レジスタの有効ビットや、最下位から始めて有効なバイト・ワードの数をカウントすることにより)明示的に示されているか、(例えば、オペランド内のヌルキャラクタにより)黙示的に示されているかにかかわらず、各オペランドの有効データ要素のみを互いに比較する。一実施形態では、有効性インジケータの集計と比較するデータ要素を、図5を参照して概念的に説明する。
【0064】
図5を参照して、一実施形態では、アレイ501と505は、第1のオペランドと第2のオペランドの各要素がそれぞれ有効であるかどうかを示すエントリーを含む。例えば、上記の例では、アレイ501は、第1のオペランドが対応する有効データ要素を含む各アレイ要素には「1」を含む。同様に、アレイ505は、第2のオペランドが対応する有効データ要素を含む各アレイ要素に「1」を含む。一実施形態では、アレイ501と505は、2つのオペランドにある各有効要素に対して、アレイ要素0から始まり1を含む。例えば、一実施形態では、第1のオペランドが4つの有効要素を含む場合、アレイ501は最初の4つのアレイ要素にのみ1を含み、アレイ501の他のアレイ要素はすべてゼロである。
【0065】
一実施形態では、アレイ501と505はサイズが16要素であり、2つの128ビットオペランドの16個のデータ要素を表し、各々はサイズが8ビット(1バイト)である。他の実施形態では、オペランドのデータ要素のサイズが16ビットであり、アレイ501と505は8要素のみを含む。他の実施形態では、アレイ501と505は、対応するオペランドのサイズに応じて大きくても小さくてもよい。
【0066】
一実施形態では、第1のオペランドの各データ要素を第2のオペランドの各データ要素と比較し、その結果をi×jアレイ510で表す。例えば、テキストストリングを表す第1のオペランドの第1のデータ要素を、例えば、他のテキストストリングを表す他のオペランドの各データ要素と比較し、アレイ510の第1の行内の各アレイ要素に記憶された「1」は、第1のオペランドの第1のデータ要素と第2のオペランドの各データ要素の間の一致に対応する。これは、アレイ510が完了するまで、第1のオペランドの各データ要素に対して繰り返される。
【0067】
一実施形態では、i×jエントリーの第2のアレイ515が生成され、有効なオペランドのデータ要素のみが等しいかどうかの表示を記憶する。例えば、一実施形態では、アレイ510の最初の行511の各エントリーを対応する有効なアレイ要素506及び有効なアレイ要素502と論理的にANDを取って、その結果をアレイ515の対応する要素516に配置する。AND演算は、アレイ510の各要素と、有効なアレイ501及び505の対応する要素との間で実行し、その結果をアレイ520の対応する要素に配置してもよい。
【0068】
一実施形態では、結果アレイ520は、一オペランドのデータ要素のうち他のオペランドのデータ要素と関係するものがあるか示す。例えば、結果アレイ520は、アレイ515の要素のペアをAND演算し、ANDのすべての結果をOR演算することにより、他のオペランドのデータ要素により決まる範囲内にデータ要素があるか示すビットを記憶することができる。
【0069】
図5は、少なくとも2つのパック化オペランドのデータ要素間の比較に関する様々なインジケータを記憶する結果アレイ520も示す。例えば、結果アレイ520は、アレイ515の対応する要素をOR演算することにより、2つのオペランド間に等しいデータ要素はあるかどうかを示すビットを記憶する。アレイ515のアレイ要素のどれかが、例えば、オペランドの有効なデータ要素間に一致するものがあることを示す「1」を含む場合、これは結果アレイ520に反映される。結果アレイ520の要素をOR演算して、オペランドの有効なデータ要素が等しいか判断することもできる。
【0070】
一実施形態では、アレイ内の隣接する「1」を検出することにより、結果アレイ520内の、2つのオペランドのデータ要素間の有効な一致の連続を検出する。一実施形態では、これは、連続する結果アレイ要素を一度にAND演算し、「0」を検出するまで一AND演算の結果と次の結果とをAND演算することにより、実現できる。他の実施形態では、他の論理を用いて2つのパック化演算のデータ要素の有効な一致の範囲を検出してもよい。
【0071】
一実施形態では、結果アレイ520は、対応する結果アレイエントリーに「1」を返すことにより、両方のオペランドの各データ要素が一致するか示すこともできる。すべてのエントリーが等しいか判断するため、結果アレイエントリーにXOR演算を実行してもよい。他の実施形態では、他の論理を用いて2つのオペランドの有効データ要素が等しいか判断してもよい。
【0072】
一実施形態では、データ要素のストリングがデータ要素の他のストリング内のどこかにあることを、テストストリングを他のストリングの同じサイズの部分と比較して、テストストリングと他のストリングのその部分との一致を結果アレイに示すことにより、検出できる。例えば、一実施形態では、第1のオペランドの3つのデータ要素に対応する3つのキャラクタのテストストリングを、第2のストリングの3つのデータ要素の第1のセットと比較する。一致を検出したら、その一致を結果アレイに反映させる。これは、一致に対応する3つの結果エントリーのグループに「1」を格納することにより行う。テストストリングを他のオペランドの次の3つのデータ要素と比較する。または、比較されるにつれてテストストリングが他のオペランドに沿って「スライド」するように、前のオペランドのデータ要素の2つと新しい第3のデータ要素を、テストストリングと比較してもよい。
【0073】
一実施形態では、アプリケーションに応じて、結果アレイのエントリーを反転、または否定してもよい。他の実施形態では、結果エントリーの一部のみを、例えば2つのオペランドのデータ要素間の有効な一致に対応するものだけを否定(negate)する。他の実施形態では、他の演算を結果アレイ520の結果エントリーに実行してもよい。例えば、実施形態によっては、結果アレイ520はマスク値として表される。他の実施形態では、結果アレイはインデックス値で表され、レジスタなどの記憶場所に記憶される。インデックスは、一実施形態では結果アレイのMSBのグループにより表され、他の実施形態ではアレイのLSBで表される。一実施形態では、インデックスは、設定されているLSBまたはMSBへのオフセット値により表される。マスクは、一実施形態ではゼロ拡張であり、他の実施形態ではバイト/ワードマスク、またはその他の粒度(granularity)である。
【0074】
様々な実施形態では、SIMDオペランドの各要素の比較する際の上記の各相違は、個々の命令として実行される。他の実施形態では、上記の相違は、命令に付随するフィールド(immediate fields)などの単一の命令の属性を変えることにより実行され得る。図6は、1つまたは複数の命令により実行される、2つまたはそれ以上のSIMDオペランドの各データ要素を比較する様々な動作を示す図である。一実施形態では、図6の動作により比較されるオペランドはテキストストリングである。他の実施形態では、オペランドはその他のデータ情報やデータである。
【0075】
図6を参照して、動作610において、第1のSIMDオペランド601と第2のSIMDオペランド605の各要素を互いに比較する。一実施形態では、一方のオペランドはXMMレジスタなどのレジスタに記憶され、他方のオペランドは他のXMMレジスタまたはメモリに記憶されている。一実施形態では、比較のタイプは、図6に示した動作を実行する命令に対応するイミーディエイトフィールド(immediate field)により制御される。例えば、一実施形態では、2ビットのイミーディエイトフィールド(例えば、IMM8[1:0])を用いて、比較するデータ要素が符号付きバイトか、符号付きワードか、符号無しバイトか、符号無しワードか示す。一実施形態では、比較結果によりi×jアレイ(例えば、BoolRes[i,j])、またはi×jアレイの一部ができる。
【0076】
動作613において、並行して、オペランド601と605がそれぞれ表すストリングの終わりを見つけて、オペランド601と605の各要素の有効性を判断する。一実施形態では、レジスタまたはメモリの記憶場所内の対応する1つまたは複数のビットを設定することにより、オペランド601と605の各要素の有効性を明示的に示す。一実施形態では、その1つまたは複数のビットは、オペランド601と605のLSBの位置から始まる連続した有効データ要素(例えば、バイト)の数に対応する。例えば、オペランドのサイズにもよるが、EAXレジスタやRAXレジスタなどのレジスタを用いて、第1のオペランドの各データ要素の有効性を示すビットを記憶する。同様に、オペランドのサイズによっては、EDXレジスタやRDXレジスタなどのレジスタを用いて、第2のオペランドの各データ要素の有効性を示すビットを記憶する。他の実施形態では、オペランド601と605の各要素の有効性を、本開示ですでに説明した手段により、黙示的に示しても良い。
【0077】
一実施形態では、動作615において、比較と有効性に関する情報を集約機能(aggregation function)により結合して、2つのオペランドの要素の比較結果を生成する。一実施形態では、集約機能を、2つのオペランドの要素の比較を実行する命令に付随するイミーディエイトフィールドにより決定する。例えば、一実施形態では、2つのオペランドのデータ要素が等しいか、2つのオペランドのデータ要素の範囲が等しいか、2つのオペランドの各データ要素が等しいか、オペランドの少なくともデータ要素の一部の並びが同じか、比較により示すかどうか、イミーディエイトフィールド(immediate field)が示す。
【0078】
動作620において、一実施形態では、(例えば、IntRes1に記憶された)集約機能の結果をネゲートする。一実施形態では、イミーディエイトフィールドのビット(例えば、IMM8[6:5])により、集約機能の結果に実行するネゲート機能のタイプを制御する。例えば、イミーディエイトフィールドは、集約結果をまったくネゲート(negate)しない、集約機能の結果をすべてネゲートする、オペランドの有効要素に対応する集約結果のみをネゲートすることを示してもよい。一実施形態では、ネゲート演算の結果をアレイ(例えば、IntRes2アレイ)に記憶する。
【0079】
一実施形態では、それぞれ動作625と630において、ネゲート演算により生成される結果のアレイをインデックス値またはマスク値に変換する。ネゲート演算結果をインデックスに変換する場合、イミーディエイトフィールドのビット(例えば、IMM8[6])により、比較結果のMSBまたはLSBをインデックスにエンコードするかどうか、その結果をレジスタ(例えば、ECXまたはRCX)に記憶するかどうか制御する。一実施形態では、ネゲート演算の結果をマスク値で表す場合、イミーディエイトフィールドのビット(例えば、IMM8[6])を用いて、マスクをゼロ延長(zero-extended)拡張するか、バイト(またはワード)に拡張するか制御する。
【0080】
このように、ストリング比較演算の実行方法を開示する。実施形態の例を説明し、添付した図面に示したが、言うまでもなく、かかる実施形態は本発明の単なる例示であって制約するものではなく、本開示を研究すれば当業者には様々な修正に想到するので、本発明は図示し説明した具体的な構成に限定はされない。本技術分野等では、成長が速く進歩が容易には予見できないので、本発明の原理や添付したクレームの範囲から逸脱することなく技術的な進歩を可能とすることにより容易になるので、開示の実施形態を構成と詳細において容易に修正できる。
【特許請求の範囲】
【請求項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に記載のプロセッサ。
【請求項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に記載のプロセッサ。
【図1A】
【図1B】
【図1C】
【図2】
【図3A】
【図3B】
【図3C】
【図3D】
【図3E】
【図3F】
【図4】
【図5】
【図6】
【図1B】
【図1C】
【図2】
【図3A】
【図3B】
【図3C】
【図3D】
【図3E】
【図3F】
【図4】
【図5】
【図6】
【公表番号】特表2010−504594(P2010−504594A)
【公表日】平成22年2月12日(2010.2.12)
【国際特許分類】
【出願番号】特願2009−529420(P2009−529420)
【出願日】平成19年9月21日(2007.9.21)
【国際出願番号】PCT/US2007/079234
【国際公開番号】WO2008/036945
【国際公開日】平成20年3月27日(2008.3.27)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.リナックス
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】
【公表日】平成22年2月12日(2010.2.12)
【国際特許分類】
【出願日】平成19年9月21日(2007.9.21)
【国際出願番号】PCT/US2007/079234
【国際公開番号】WO2008/036945
【国際公開日】平成20年3月27日(2008.3.27)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.リナックス
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】
[ Back to top ]