本明細書に開示するのは、データ要素選択・統合命令と、この命令を実行するプロセッサと、上記命令を処理すなわち実行するときにこのプロセッサにより行われる方法と、1または複数のプロセッサを組み込んで上記命令を処理すなわち実行するシステムである。以下の説明の中で、多くの具体的な詳細(例えば具体的な命令操作、データ形式、プロセッサ構成、詳細なマイクロアーキテクチャ、操作順など)について述べる。しかし、これらの具体的な詳細を用いないで複数の実施形態を実践してもよい。他の例では、説明の理解を妨げないよう、既知の回路、構造、および技術の詳細は省略している。
図1は、データ要素選択・統合命令102の一実施形態を実行可能なプロセッサ100の一実施形態のブロック図である。一部の実施形態では、このプロセッサは汎用プロセッサでよい(例えば、汎用の超小型プロセッサすなわち中央演算装置(CPU)で、デスクトップ型コンピュータ、ノート型コンピュータ、または他のコンピュータに使用される種類のものでよい)。一側面では、このプロセッサは、ネットワークとパケットの両方あるいは片方と関連する処理が組み込まれたチップ搭載型システムの汎用のコアを表してもよい。一側面では、データ要素選択・統合命令によって、汎用プロセッサすなわちコアはネットワーク処理とパケット処理の両方あるいは片方をより効率的に実行できるようになる。あるいは、このプロセッサは専用のプロセッサでもよい。適切な専用プロセッサとしては、例えば、ネットワークプロセッサ、通信プロセッサ、パケットプロセッサ、内蔵型パケット処理エンジン、切り替えチップ、データ平面プロセッサ、暗号プロセッサ、画像プロセッサ、コプロセッサ、内蔵型プロセッサ、デジタル信号プロセッサ(DSP)、および制御器(例えば超小型御器)などがあるがこれらに限定されない。プロセッサは任意の種々の複合命令セットコンピューティング(CISC)アーキテクチャ、縮小命令セットコンピューティング(RISC)アーキテクチャ、極長命令語(VLIW)アーキテクチャ、複合アーキテクチャ、他の種類のアーキテクチャを有していてもよく、あるいは異なるアーキテクチャを組み合わせて有していてもよい(例えば、別々のコアが別々のアーキテクチャを有していてもよい)。
操作中、プロセッサ100はデータ要素選択・統合命令102を受け取ってもよい。例えば、この命令はインターコネクトされたメモリから受け取ってもよい。この命令は、マクロ命令、アセンブリ言語命令、機械コード命令、または他の命令を表してもよく、あるいはプロセッサの命令セットの制御信号を表してもよい。一部の実施形態では、データ要素選択・統合命令は、複数のデータ要素を有する第1のソースパックデータ・オペランド112を(例えば1または複数の領域または一組のビットで)明示的に特定、(例えば暗黙的に)表示、あるいは有していてもよい。一部の実施形態では、データ要素選択・統合命令は、対応する複数のマスク要素を有する第2のソースオペランド104を(例えば1または複数の領域または一組のビットで)明示的に特定、(例えば暗黙的に)表示、あるいは(例えば即値として)有していてもよい。ここに説明する実施形態では、第2のソースオペランド104は命令の即値を含み、いくつか例を挙げれば、4ビット即値(imm4)、8ビット即値(imm8)、16ビット即値(imm16)、あるいは32ビット即値(imm32)などがある。この即値はマスク要素としてマスクビットを有していてもよい。未マスクの各マスクビットは第1の値(例えば、ある潜在的規約によれば二値の「1」)を有していてもよく、既マスクのマスクビットは第2の異なる値(例えば、ある潜在的規約によれば二値の「0」)を有していてもよい。他の実施形態によれば、第2のソースオペランド104は必要に応じてソースパックデータ操作マスク116でもよく、必要に応じてこれを一組のパックデータ操作マスクレジスタ118に記憶してもよい。さらに別の実施形態によれば、第2のソースオペランド104を必要に応じて一組の汎用レジスタ119に記憶してもよい。さらに別の実施形態によれば、第2のソースオペランド104は必要に応じて第2のソースパックデータ・オペランドでもよく、必要に応じてこれを一組のパックデータレジスタ110に記憶してもよい。またこの命令で、結果パックデータ・オペランド114の宛先記憶位置を特定すなわち表示してもよい。一実施例として、命令はオペランドのレジスタ場所、メモリ場所、または他の記憶装置場所を特定するソースオペランド特定領域および/または宛先オペランド特定領域を有していてもよい。あるいは必要に応じて、これらのオペランドの1または複数は命令に暗黙的でもよい(例えば、命令の識別コードに暗黙的でもよい)。
再び図1を参照すると、プロセッサは復号ユニットすなわちデコーダ106を備える。この復号ユニットはデータ要素選択・統合命令を受け取って復号してもよい。復号ユニットは1または複数の比較的下位の命令または制御信号(例えば、1または複数のマイクロ命令、マイクロオペレーション、マイクロコード入力点、復号された命令または制御信号など)を出力してもよく、これらは比較的上位のデータ要素選択・統合命令を反映・表現するか、それから派生する。一部の実施形態では、復号ユニットはデータ要素選択・統合命令を受け取る1または複数の入力構造(例えばポート、インターコネクト、インタフェース)と、それに連結されデータ要素選択・統合命令を認識し復号する命令認識・復号論理回路と、それに連結され下位の命令または制御信号を出力する1または複数の出力構造(例えば、ポート、インターコネクト、インタフェース)を備えてもよい。復号ユニットは種々の異なる機構を用いて実装してもよく、そのような機構には、例えばマイクロコード読み取り専用メモリ(ROM)、参照テーブル、ハードウェア実装、プログラム可能論理回路アレイ(PLA)、および当業分野で知られている復号装置の実装に用いられている他の機構などがあるがこれらに限定されない。
一部の実施形態では、復号ユニットに直接設けられたデータ要素選択・統合命令の代わりに、必要に応じて命令エミュレータ、変換プログラム、変形プログラム、インタープリタ、または他の命令変換モジュールを用いてもよい。様々な種類の命令変換モジュールが当業分野で知られており、ソフトウェア、ハードウェア、ファームウェア、あるいはそれらの組み合わせに実装してもよい。一部の実施形態では、命令変換モジュールをプロセッサ以外、例えば独立したダイおよび/またはメモリなど(例えば、静的、動的、または実行時模倣モジュールとして)に配置してもよい。例えば、命令変換モジュールはデータ要素選択・統合命令を受け取り、これを第1の命令セットとし、これを模倣、変換、変形、解釈、または他の方法で1または複数の対応する中間命令または制御信号に変換してもよく、これが第2の別の命令セットでもよい。第2の命令セットの1または複数の中間命令または制御信号を復号ユニット(例えば復号ユニット106)に提供してもよく、復号ユニットはそれらを、プロセッサのネイティブハードウェア(例えば1または複数の実行ユニット)で実行可能な1または複数の下位の命令または制御信号に復号してもよい1または複数。
再び図1を参照すると、プロセッサ100は一組のパックデータレジスタ110も備える。一部の実施形態では、プロセッサは一組の汎用レジスタ119を備えてもよい。一部の実施形態では、プロセッサは必要に応じて一組のパックデータ操作マスクレジスタ118も備える。これらのレジスタの各々が、データを記憶するダイ搭載記憶装置場所を表してもよい。例えばパックデータレジスタの各々は、パックデータ、ベクトルデータ、または単一命令・複数データ(SIMD)データを記憶してもよい。これらのレジスタは、ソフトウェアおよび/またはプログラマーには可視であるアーキテクチャ上で可視すなわち構造的レジスタを表してもよく、および/あるいはプロセッサの命令セットの命令で表示されてオペランドを識別するレジスタである。これらの構造的レジスタは、所与のマイクロアーキテクチャ内の他の非構造的レジスタ(例えば、一時レジスタ、再要求バッファ、リタイヤメントレジスタなど)と対比される。これらのレジスタは、よく知られた技術を用いて異なるマイクロアーキテクチャの異なる方法で実装してもよく、いかなる特定の種類の設計にも限定されない。適切な種類のレジスタの例は、専用物理レジスタ、レジスタ名称変更を用いて動的に割り当てられた物理レジスタ、およびその組み合わせなどだが、これらに限定されない。
一部の実施形態では、第1のソースパックデータ・オペランド112は、必要に応じてパックデータレジスタに記憶してもよく、結果パックデータ・オペランド114が記憶される宛先記憶位置は、同じパックデータレジスタでも、あるいは異なるパックデータレジスタのどちらでもよい。あるいは必要に応じて、これらのオペランドの1または複数に、複数のメモリ場所または他の複数の記憶装置場所を用いてもよい。一部の実施形態では、結果パックデータ・オペランド114の宛先記憶位置として、必要に応じてソースパックデータ・オペランド(例えば第1のソースパックデータ・オペランド112)に用いられるパックデータレジスタを再度用いてもよい。例えば、単一のソース・宛先レジスタをソースパックデータ・オペランドおよび結果パックデータ・オペランドの両方に使用することが、暗黙的すなわち黙示的に理解されてもよい。
再び図1を参照すると、実行ユニット108は復号ユニット106およびパックデータレジスタ110に連結されている。この実行ユニットは、1または複数の復号済あるいは別の変換済みの命令または制御信号を受け取ってもよい。この命令または制御信号はデータ要素選択・統合命令を表し、および/あるいはそれから派生したものである。実行ユニットは、複数のマスク要素を有する第1のソースパックデータ・オペランド112および第2のソースオペランド104(例えば即値104)も受け取ってもよい。実行ユニットは、データ要素選択・統合命令に応じておよび/またはその結果として(例えば命令から復号された1または複数の命令または制御信号に応じて)、結果パックデータ・オペランド114を命令が示す宛先記憶位置に記憶してもよい。一部の実施形態では、結果パックデータ・オペランド114は、即値104または他の第2のソースオペランド104の未マスクのマスク要素に対応し、結果パックデータ・オペランド114の一部に統合された第1のソースパックデータ・オペランド112の全てのデータ要素を含んでもよい。一部の実施形態では、結果パックデータ・オペランドは、第1のソースパックデータ・オペランドの内、第2のソースオペランドの既マスクのマスク要素に対応する全データ要素を除外してもよい。一部の実施形態では、第1のソースパックデータ・オペランドの未マスクのデータ要素は、結果パックデータ・オペランドの最下位部に統合してもよい。他の実施形態では、第1のソースパックデータ・オペランドの未マスクのデータ要素は、結果パックデータ・オペランドの最上位部に統合してもよい。一部の実施形態では、結果パックデータ・オペランドは図3〜5に示し説明したものの何れでもよい。但し本発明の範囲はそのように限定されない。
一部の実施形態では、未マスクのデータ要素の結果パックデータ・オペランドへの統合は、命令(例えば、命令の識別コード)に黙示的および/あるいは固定されていてよく、明示的に特定および/または定められていなくてもよい。例えば、命令はオペコードを有していてもよく、このオペコードは、未マスクのデータ要素が結果パックデータ・オペランドに統合されることを表示、すなわち特定する。すなわち、オペコードおよび/または命令は、具体的には未マスクのデータ要素を結果パックデータ・オペランドに統合するのに特化していてもよい。そのような専用および/または固定および/または暗黙的な機能をオペコードおよび/または命令に用いることにより、可変命令(例えば、完全並べ替えまたは順序変更命令)と共に使用する明示的制御(例えば明示的制御領域)を生成し使用する必要がない。一側面では、第1のソースパックデータ・オペランドのデータ要素および第2のソースオペランドのマスク要素がどのような具体的な配列にあろうとも、未マスクのデータ要素を結果パックデータ・オペランドに統合してよい。
有利なことに、データ要素選択・統合命令/操作によってデータ要素のサブセットを選択し、単一命令の実行の領域内で圧縮することができる。この圧縮操作は、後続処理のためにソースデータ要素から選択したサブセットのみ追加処理したい実施形態に有利である。一実施例として、最初のパケット復号の後、次のパケットのために、特定の浮動バイト(例えば、ソースアドレスおよび宛先アドレスならびにソースポートおよび宛先ポートを規定する4タプル)だけ選択・統合してもよく、そのようにするとこれらのパケットが同一の処理の流れに属していることを素早く確認することができる。他の一例として、比較的情報量が多いソースデータ要素(例えばパケット)のサブセットだけ選択し統合すると、これらの比較的情報量が多いバイトにハッシュ、チェックサム、または他の暗号関数を実行することができる。この方法では、暗号関数は、選択されないことがある比較的情報量が少ないデータ要素に実行する必要がない。他の考えられる使用法の一つには画像データのサブサンプリングがある。他の使用法は本発明の恩恵を受ける当業者には明らかである。1つの命令を用いて望ましいソースデータ要素を選択し、選択したソースデータ要素を追加の命令で統合することもできる(例えば、1または複数の命令で全てのオペランドを移動し、1または複数の命令でマスク化論理操作を実行したりできる)。しかし、とりわけデータ要素が多数の場合、単一のデータ要素選択・統合命令は、上記のような複数あるいは場合によっては多数の命令を含むソフトウェア実装の性能を向上させる一助となり得る。
上記の実行ユニットおよび/またはプロセッサは、特定の論理回路(例えばトランジスタ、集積回路、または潜在的にファームウェア(例えば不揮発性メモリに記憶された命令)および/またはソフトウェア)と組み合わせられている他のハードウェア)を備えてもよく、この論理回路はデータ要素選択・統合命令に応答しておよび/またはその命令の結果として、(例えば、データ要素選択・統合命令から復号した1または複数の命令または制御信号に応答して)データ要素選択・統合命令を実行し、その結果を記憶することができる。例えば、実行ユニットは数値論理回路ユニット、論理回路ユニットなどを備えてもよい。一部の実施形態では、実行ユニットは、ソースオペランドを受け取る1または複数の入力構造(例えばポート、インターコネクト、インタフェース)と、それと連結されていてソースオペランドを受け取って処理し結果オペランドを生成する回路または論理回路と、それと連結されていて結果オペランドを出力する1または複数の出力構造(例えば、ポート、インターコネクト、インタフェース)を備えてもよい。一部の実施形態では、ソースオペランドを処理し結果オペランドを生成する上記回路または論理回路は、必要に応じてデータ要素選択・経路設定論理回路を備えてもよい。例えば、データ要素を選択するマルチプレクサや選択したデータ要素を転送するインターコネクトがある。
説明を分かりやすくするため、比較的単純なプロセッサを図示して説明してきた。しかし、プロセッサは必要に応じて他のよく知られているプロセッサ要素を備えてもよい。そのような要素の潜在的実施例には以下のものがあるがこれらに限定されない。すなわち、汎用レジスタ、状態レジスタ(フラッグレジスタと呼ばれることがある)、システム制御レジスタ、命令取得ユニット、先取りバッファ、1次以上のキャッシュ(例えば、レベル1(L1)命令キャッシュ、L1データキャッシュ、およびL2データ/命令キャッシュ)、命令変換参照バッファ(TLB)、データTLB、分岐予測ユニット、アウトオブオーダー実行ユニット(例えば、命令スケジューリング部、レジスタ名称変更および/または割り当てユニット、命令振り分けユニット、再要求バッファ(ROB)、リザベーションステーション、メモリ要求バッファ、リタイヤメントユニットなど)、バスインタフェースユニット、アドレス生成ユニット、デバッグユニット、性能監視ユニット、電源管理ユニット、プロセッサに含まれる他の構成要素、およびこれらの種々の組み合わせがある。そのような構成要素は、種々の異なる適切な組み合わせでおよび/または当業分野で知られている構成で連結してよい。実施形態は、知られているそのような組み合わせすなわち構成のどれにも限定されない。さらに、実施形態を、少なくとも1つがデータ要素選択・統合命令を実行するよう機能する複数のコアを有するプロセッサに設けてもよい。
図2は、データ要素選択・統合命令の一実施形態を実行するプロセッサの方法220の一実施形態の流れ図である。一部の実施形態では、方法220を図1のプロセッサ100あるいはその内部で実行してもよい。プロセッサ100に関して本明細書に記載した構成要素、機能、および特定の任意選択の細部を、必要に応じて方法220に適用する。あるいは方法220を、類似または異なるプロセッサあるいは他の装置で、あるいはその内部で実行してもよい。さらにプロセッサ100は、方法220の方法と同じまたは類似の、または異なる方法を実行してもよい。
この方法はブロック221でデータ要素選択・統合命令を受け取ることを含む。様々な側面において、プロセッサまたはその一部(例えば、命令取得ユニット、復号ユニット、バスインタフェースユニットなど)で命令を受け取ってもよい。様々な側面において、命令は、プロセッサの外部のおよび/またはダイに搭載されていない供給源(例えば、メモリ、インターコネクトなど)から、あるいはプロセッサ内のおよび/またはダイに搭載の供給源(例えば、命令キャッシュ、命令待ち行列など)から受け取ってもよい。データ要素選択・統合命令は複数のデータ要素を有する第1のソースパックデータ・オペランドを特定、表示、あるいは有していてもよく、複数のマスク要素を有する第2のソースオペランドを特定、表示、あるいは有していてもよい。第2のソースオペランドの各マスク要素は第1のソースパックデータ・オペランドの異なるデータ要素に対応していてもよい(例えば、オペランド内の同じビット位置、同じ相対位置にあってもよい)。
結果パックデータ・オペランドは、ブロック222でデータ要素選択・統合命令に応答しておよび/またはその結果として宛先記憶位置に記憶されてもよい。この宛先記憶位置をデータ要素選択・統合命令が特定すなわち表示してもよい。一部の実施形態では、結果パックデータ・オペランドは、第2のソースオペランドの未マスクのマスク要素に対応し、結果パックデータ・オペランドの一部に統合された第1のソースパックデータ・オペランドの全てのデータ要素を含んでもよい。
説明した方法はアーキテクチャ上の操作(例えば、ソフトウェアから可視の操作)を含む。他の実施形態によれば、本方法は必要に応じて1または複数のマイクロアーキテクチャ上の操作を含む。例えば、命令を取得、復号、アウトオブオーダー的に予定してもよく、ソースオペランドにアクセスしてもよく、実行ユニットはマイクロアーキテクチャ上の操作を実行してこの命令を実行してもよい。一部の実施形態では、命令を実行するマイクロアーキテクチャ上の操作は、必要に応じてビットマスクの各ビットを第1のソースパックデータ・オペランドのデータ要素と同じ大きさに拡張し、拡張されたデータ要素マスクおよび第1のソースパックデータ・オペランドに論理的操作(例えば論理的AND)を実行する。ただしこれは必須ではない。
図3は、データ要素選択・統合命令の一実施形態に応じて実行してもよいデータ要素選択・統合操作330の一実施形態を説明するブロック図である。この命令は、複数のパックデータ要素E0〜ENを有する第1のソースパックデータ・オペランド312を(例えば1または複数の領域または一組のビットの中で)明示的に特定、(例えば暗黙的に)表示、あるいは有していてもよい。
第1のソースパックデータ・オペランド312内のデータ要素E0〜ENの数は変化してもよい。通常、データ要素E0〜ENの数は、第1のソースパックデータ・オペランドのビット数を1つのデータ要素(例えばE0)のビット数で分った数と同じでよい。種々の実施形態によれば、第1のソースパックデータ・オペランドの大きさすなわちビット幅は64ビット、128ビット、256ビット、512ビット、あるいは1024ビットでもよい。ただし本発明の範囲はそのように限定されない。一部の実施形態では、各データ要素(例えばE0)の大きさすなわちビット幅は8ビット、16ビット、32ビット、あるいは64ビットでもよい。ただし本発明の範囲はそのように限定されない。代表的実施例をいくつか挙げると、128ビットパック8ビットバイト形式は8ビットバイトデータ要素を16個、128ビットパック16ビットデータ要素形式は16ビットデータ要素を8個、256ビットパックバイト形式は8ビットバイトデータ要素を32個、256ビットパック16ビットデータ要素形式は16ビットデータ要素を16個、および256ビットパック32ビットデータ要素形式は32ビットデータ要素を8個含んでもよい。一部の実施形態では、データ要素選択・統合操作の最大効率を得るべく、第1のソースパックデータ・オペランドには、少なくとも8個、少なくとも16個、あるいは16個より多い(例えば32個、64個など)データ要素E0〜ENが存在し得る。
一部の実施形態では、命令は第1のソースパックデータ・オペランドのデータ要素の大きさすなわちビット幅を示す1または複数のビットおよび/または領域の組を有していてもよい。例えば、2ビット領域はデータ要素の4つの異なる大きさを示す4つの異なる値(例えば、8ビットには00、16ビットには01、32ビットには10、および64ビットには11)を有していてもよい。他の実施形態では、第1のソースパックデータ・オペランドのデータ要素の大きさすなわちビット幅を、必要に応じてレジスタ(例えばモードレジスタ)内で特定、あるいは表示してもよい。例えば、モードレジスタ内の第1の値は、パックデータレジスタのデータ要素を8ビットバイト要素であると解釈することを示し、モードレジスタ内の第2の値は、パックデータレジスタのデータ要素を16ビットデータ要素であると解釈することを示してもよい。
また命令は、対応する複数のマスク要素M0〜MNを有する第2のソースオペランド304を、(例えば1または複数の領域または一組のビットで)明示的に特定、(例えば暗黙的に)表示、あるいは(例えば即値として)有していてもよい。第2のソースオペランドは、第1のソースパックデータ・オペランドの各対応する異なるデータ要素(E)に対し異なるマスク要素(M)を有していてもよい。第2のソースオペランドの各マスク要素(M)は、第1のソースパックデータ・オペランドの異なるデータ要素(E)に対応していてもよい(例えば、オペランド内の同じビット位置、同じ相対位置にあってもよい)。例えばE0はM0に、E1はM1にという様に対応していてもよい。これは、対応するデータ要素およびマスク要素がオペランド内の相対的に対応する位置にある場合に都合がよいことが多い。但しこれは必須では無く、必要に応じて他の対応のための規約を用いてもよい。
一部の実施形態では、各マスク要素は単一マスクビットでもよい。あるいは必要に応じて、各マスク要素に2ビット以上も用いてもよい。例えば各マスク要素は、第1のソースパックデータ・オペランド内の各対応するデータ要素と同じビット数を有していてもよい(例えば、8ビット、16ビット、32ビットなど)。実際上、マスクビットとして認識されるがデータ要素(例えば最上位または最下位ビット)に含まれている単一ビットを含む具体的実装について望ましい場合、マスク要素にどのようなビット数も用いられ得る。一部の実施形態によれば、第2のソースオペランドはビットマスクオペランドを表してもよく、マスクビットをマスク要素として有していてもよい。そのようなビットマスクオペランドを異なる実施形態において異なる方法で提供してもよい。一部の実施形態によれば、第2のソースビットマスクオペランドは命令の即値を表してもよい。他の実施形態によれば、第2のソースビットマスクオペランドはパックデータ操作マスクレジスタ(例えば、レジスタ118および/または918の1つ)に記憶してもよい。さらに別の実施形態によれば、第2のソースビットマスクオペランドは汎用レジスタ(例えばレジスタ119の1つ)に記憶してもよい。あるいは、ビットマスクオペランドの代わりに、第2のソースオペランドはパックデータ要素マスクオペランドを表してもよく、データ要素をマスク要素として有していてもよい。例えば、第2のソースパックデータ要素マスクオペランドはパックデータレジスタ(例えば、パックデータレジスタ110および/または810の1つ)に記憶してもよい。
各マスク要素は、第1のソースパックデータ・オペランドの対応するデータ要素を結果パックデータ・オペランドに出現させるか否か、条件付きで制御すなわちマスク処理することができる。このマスク処理はデータ要素の粒度ごとに実行され、各異なるデータ要素をマスクするかあるいはマスクせず他から分離および/または切り離すようにする。未マスクの各マスク要素は第1の値(例えば、ある潜在的規約によれば値「1」)を有し、対応するデータ要素を選択して結果パックデータ・オペランド314のデータ要素の統合すなわちグループ化された組に含めてもよく、既マスクの各マスク要素は第2の異なる値(例えば、ある潜在的規約によれば値「0」)を有し、対応するデータ要素を結果パックデータ・オペランドのデータ要素の統合すなわちグループ化された組から除外してもよい。この説明はこの規約に当てはまる。対応するデータ要素をこの統合された組から選択あるいは除外する値に対して種々の他の規約が可能である。
データ要素選択・統合命令/操作に応答して、結果パックデータ・オペランド314を(例えば実行ユニット308で)生成させ、宛先記憶位置に記憶することができる。この宛先記憶位置は、命令が特定あるいは表示してもよい。一部の実施形態では、宛先記憶位置はパックデータレジスタでも、メモリ場所でも、あるいは他の記憶装置場所でもよい。一部の実施形態によれば、結果パックデータ・オペランド314は、第2のソースオペランド304の未マスクのマスク要素に対応し、結果パックデータ・オペランド314の一部に統合された第1のソースパックデータ・オペランド312の全てのデータ要素を含んでもよい。本説明に用いた規約によれば、既マスクのマスク要素は値「0」を有し、未マスクのマスク要素は値「1」を有する。ただし本発明の範囲はそのように限定されない。説明した実施例では、データ要素E1、E2、E3、およびE5は未マスクのマスク要素M1、M2、M3、およびM5に対応し、データ要素E0、E4、およびENは既マスクのマスク要素M0、M4、およびMNに対応する。図示のように、一部の実施形態によれば、未マスクのすなわち選択されたデータ要素(例えばE1、E2、E3、およびE5)は、統合・選択されたすなわち未マスクのデータ要素の組として結果パックデータ・オペランドの最下位部に統合され、第1のソースパックデータ・オペランド内で見える順序すなわち配置順序と同じ順序で出現すなわち配置されてもよい。あるいは、未マスクのすなわち選択されたデータ要素は、必要に応じて結果パックデータ・オペランドの最上位桁に統合され、第1のソースパックデータ・オペランド内で見える順序すなわち配置順序と同じ順序で出現すなわち配置されてもよい。これを実現するために考えられる種々の方法には、未マスクのすなわち選択されたデータ要素の適切な位置への経路設定、移動、再配置、複写、あるいは記憶などがある。
結果パックデータ・オペランド内では、統合された未マスクのデータ要素(例えばE1、E2、E3、およびE5)は既マスクのデータ要素(例えばE0、E4、およびEN)を全て省いてもよい。すなわち、統合された未マスクのデータ要素の間には、いかなる既マスクのデータ要素も配置されていなくてよい。例えば、第1のソースオペランドの中でE4はE3とE5の間に配置されているが、結果パックデータ・オペランドの中ではE5とE3は統合されて互いに隣同士にあり、その間にE4は配置されていない。つまり、既マスクのデータ要素が間に分散した未マスクのデータ要素のサブセットは統合すなわち圧縮され、結果オペランドの最下位部または最上位部に記憶される。一部の実施形態によれば、既マスクのデータ要素(例えばE0、E4、およびEN)は単に廃棄すなわち消去してもよく、必ずしも上記宛先記憶位置に移動する必要はない。そのような場合、および統合された未マスクのデータ要素が結果オペランドの最下位部に記憶されたとき、未マスクのデータ要素の全数を記憶するのに必要なビットより上位のビットに、必要に応じて所定の値を記憶してもよい。例えば説明に図示したように、これらのビットすなわちデータ要素は、必要に応じて結果パックデータ・オペランドでは「0」でもよい。他の方法として、これらのビットに「0」を記憶するのではなく、既存のビットすなわちデータを変えずに残すこともできる。これはメモリ帯域幅アクセスを減らす。プロセッサは統合されるデータ要素の数を知り、それによって統合後の要素の範囲を知ってもよい。さらに別の方法として、他の実施形態によれば、既マスクのデータ要素(例えばE0、E4、およびEN)は、必要に応じて統合された未マスクのデータ要素の記憶に使用しない結果パックデータ・オペランドの別の部分に経路を設定、移動、複写、あるいは記憶してもよい。
一部の実施形態では、結果の中に統合された未マスクのデータ要素の数を示す値を、必要に応じて命令に応答して(例えば汎用のまたは他のレジスタに)記憶してもよい。例えば図4では、必要に応じて8を示す値を記憶して、8つの未マスクのデータ要素が結果内に統合されていることを示してもよい。この方法によれば、結果内の統合された未マスクのデータ要素の数だけアクセスすればよく、この数を別途計算する必要がない。ただしこれは任意であって必須ではない。この側面を本明細書に開示した他の実施形態(例えば図1〜5)で使用してもよい。
図4は、ビットマスクおよび統合操作430によるバイト選択の具体的な一例示的実施形態を説明するブロック図であって、ビットマスクと統合命令によるバイト選択の一実施形態に応じて実行してもよい。図4の例示的操作には図3のより一般化した操作と類似点がある。説明を分かりやすくするため、先ず図4の例示的操作の異なる特徴事項および/または追加の特徴事項を説明し、図3のより一般化した操作に関連する任意の類似すなわち共通の全ての特徴事項および詳細は繰り返さない。しかし当然のことだが、先に説明した図3のより一般化した操作の特徴事項および詳細を、必要に応じて図4の例示的操作に適用してもよい。ただし、断りがある、あるいは明らかである場合(例えばビットマスクではなくデータ要素マスクに関連する場合など)を除く。
この例示的実施形態によれば、命令は、16個の8ビットバイトデータ要素B0〜B15を有する第1の128ビットソースパックバイトオペランド412を特定、表示、あるいは有する。これは単なる一例である。他の実施形態はもっと狭い(例えば64ビット)オペランドあるいはもっと広い(例えば256ビット、512ビット、1024ビット)オペランドのどちらかを有していてもよく、他の大きさのデータ要素(例えば16ビットデータ要素、32ビットデータ要素、64ビットデータ要素など)を有していてもよい。
図4の例示的実施形態によれば、命令は、16個のマスクビットを有する第2の16ビットソースビットマスクオペランド404を特定、表示、あるいは有していてもよい。これらのビットの各々は、オペランド内の同じ相対位置にある第1のソースパックバイトオペランドのバイト(例えば、説明の中で垂直に整列したデータ要素)に対応する。各未マスクのマスクビットは第1の値(例えば、可能な一規約によれば二値の「1」。説明はこれを採用している)を有していてもよく、各既マスクのマスクビットは第2の異なる値(例えば、説明に採用の規約によれば二値の「0」)を有していてもよい。具体的には、説明の実施例では、これらのビットの値は、右側の最下位端から左側の最上位端まで[0011101010001101]である。これはビット値の組の単なる一例である。この実施例によれば、バイトB0、B1、B5、B7、B9、B10、B11、およびB14は既マスクのバイトであり、バイトB2、B3、B4、B6、B8、B12、B13、およびB15は未マスクのバイトである。当然のことだが、他の実施形態はもっと狭いあるいは広いビットマスクオペランドのどちらかを使用してもよい(例えば、別のソースパックデータ・オペランドでは各データ要素に対して1ビット)。
データ要素マスク(例えばバイトマスク)と比較してビットマスクの考えられる利点の一つは、マスクの移送および/または利用に関連する資源の利用/消費を削減し易いことである。削減を見込める資源利用/消費の潜在的種類の代表例は、具体的な実装にもよるが、メモリバス、中央演算装置(CPU)、画像処理部(GPU)、チップ搭載システム(SoC)インターコネクト、ネットワークインタフェース、汎用入力バスおよび/または出力(I/O)バス、キャッシュポート帯域幅、プロセッサ再要求バッファ、読み込みバッファ、メモリ結合バッファ、キャッシュライン、物理メモリと仮想メモリなどに関連するものであるがこれらに限定されない。
一部の実施形態では、第2の16ビットソースビットマスクオペランド404は命令の即値を表してもよい。例えば、16マスクビットは必要に応じて16ビット、20ビット、32ビット、または他の大きさの即値に記憶してもよい。一部の実施形態によれば、即値のマスクビットは実行時に決定してもよい(例えばパケットプロトコル復号器で後述するように、あるいは実行時コンパイラで決定してもよい)。他の実施形態では、第2の16ビットソースビットマスクオペランドは必要に応じてパックデータ操作マスクレジスタ(例えば、レジスタ118および/または918の1つ)に記憶してもよい。一側面では、パックデータ操作マスクレジスタは第一にプレディケーション関数専用でもよい。一側面では、プロセッサの命令セットの他の命令は、パックデータ操作マスクレジスタをプレディケーション関数オペランドとして示して、パックデータ操作(例えば、パック乗算操作、パック加算操作、パック回転操作、パック比較操作など)をプレディケーションしてもよい。さらに別の実施形態によれば、第2の16ビットソースビットマスクオペランドは必要に応じて汎用レジスタ(例えばレジスタ119の1つ)に記憶してもよい。
結果パックデータ・オペランド414は(例えば実行ユニット408で)生成してもよく、命令/操作に応答して宛先記憶位置に記憶してもよい。一部の実施形態によれば、結果パックデータ・オペランドは、第2のソースビットマスクオペランド404の未マスクのマスクビットに対応し、結果パックデータ・オペランド414の一部に統合された第1のソースパックバイトオペランド412の全てのデータ要素を含んでもよい。図示のように、未マスクのバイト(例えば、B2、B3、B4、B6、B8、B12、B13、およびB15)は、結果パックデータ・オペランドの最下位部(例えば、最下位の8バイト)に統合してもよい。全ての未マスクのバイト(例えばこの場合最上位の8バイト)の記憶に不要な結果パックデータ・オペランドの最上位のバイトは、必要に応じて所定の値を有していてもよい(例えば、全て「0」にする)。もう一つの選択肢として、これらのビットに「0」を記憶するのではなく、既存のビットすなわちデータのまま残すことができる。この方法はメモリ帯域幅アクセスの削減が容易になる。プロセッサは統合されるデータ要素の数を知り、それによって統合後の要素の範囲を知ってもよい。あるいは、未マスクのバイトを必要に応じて結果パックデータ・オペランドの最上位部あるいは他の部分に統合してもよい。ここに説明する実施形態では、既マスクのバイト(例えば、B0、B1、B5、B7、B9、B10、B11、およびB14)は結果パックデータ・オペランドから省いてもよい。あるいは、他の実施形態では、既マスクのバイトを必要に応じて統合し、未マスクのバイトの記憶に使用しない結果パックデータ・オペランドの他の部分に記憶してもよい。
図5は、バイトマスクオペランドと統合操作530によるバイト選択の具体的な一例示的実施形態を説明するブロック図である。このバイトマスクオペランドと統合操作530は、ビットマスクと統合命令によるバイト選択の一実施形態に応じて実行してもよい。図5の例示的操作には図3のより一般化した操作と特定の類似点がある。説明を分かりやすくするため、図5の例示的操作の異なる特徴事項および/または追加の特徴事項を先ず説明し、図3のより一般化した操作に関連した任意の類似的すなわち共通の特徴事項と詳細については、その全てを繰り返すことはしない。しかし、当然のことだが、上述の図3のより一般化した操作の特徴事項と詳細を必要に応じて図5の例示的操作に適用してもよい。ただし、断りがある、あるいは明らかである場合(例えば、バイトマスクではなくビットマスクに関連するなど)を除く。
この例示的実施形態によれば、命令は、8ビットバイトデータ要素を16個有する第1の128ビットソースパックバイトオペランド512を特定、表示、あるいは有する。他の実施形態は上述のように、より狭い(例えば64ビット)またはより広い(例えば256ビット、512ビット、1024ビット)オペランドのどちらかを有していてもよく、他の大きさのデータ要素(例えば16ビットデータ要素、32ビットデータ要素、64ビットデータ要素など)を有していてもよい。
この例示的実施形態によれば、命令は、マスクバイトを16個有する第2の128ビットソースパックバイトマスクオペランド504を特定、表示、あるいは有する。これらのマスクバイトの各々は、オペランド内の同じ相対位置(例えば、説明で垂直方向に揃えて図示した同じビット位置)にある第1のソースパックバイトオペランドのバイトに対応する。各未マスクのマスクバイトは第1の値(例えば、説明に用いたある潜在的規約によれば全て「1」の[11111111])を有していてもよく、各既マスクのマスクビットは第2の異なる値(例えば、説明に用いたある潜在的規約によれば全て「0」の[00000000])を有していてもよい。説明の実施例によれば、第1のソースパックバイトオペランドのビット[7:0]の最下位バイトおよびビット[127:120]の最上位のバイトは既マスクのバイトであり、ビット[15:8]と[23:16]のバイトは未マスクのバイトである。一部の実施形態によれば、第2の128ビットソースバイトマスクオペランド504は、必要に応じてパックデータレジスタ(例えば、レジスタ110および/または810の1つ)に記憶してもよい。あるいは、必要に応じてメモリ場所または他の記憶装置場所を用いてもよい。
結果パックデータ・オペランド514を(例えば実行ユニット508で)生成し、命令/操作に応答して宛先記憶位置に記憶してもよい。一部の実施形態によれば、結果パックデータ・オペランドは、第2のソースバイトマスクオペランド504の未マスクのマスクバイトに対応し、結果パックデータ・オペランド514の一部に統合された第1のソースパックバイトオペランド512の全てのデータ要素を含んでもよい。図示のように、ビット[15:8]と[23:16]の未マスクのバイトは、結果パックデータ・オペランドの最下位部に統合してもよい。全ての未マスクのバイトの記憶に不要な結果パックデータ・オペランドの最上位のバイトは、必要に応じて所定の値を有していてもよい(例えば全て「0」にする)。あるいは、未マスクのバイトは、必要に応じて結果パックデータ・オペランドの最上位部または他の部分に統合してもよい。ここに説明する実施形態によれば、結果パックデータ・オペランドは既マスクのバイトを全て除外すなわち省いてもよい。あるいは、既マスクのバイトは必要に応じて統合し、未マスクのバイトの記憶に使用しない結果パックデータ・オペランドの他の部分に記憶してもよい。
本明細書に開示されたデータ要素選択・統合命令は汎用命令であり、種々の異なる目的に使用することができる。これらの命令を単独であるいは他の命令と組み合わせて使用して、具体的なアプリケーション、アルゴリズム、またはコードに便利な種々の異なる方法でデータ要素を選択および統合してもよい。これらの命令の考えられる一つの使用法は、ネットワークパケットのデータ要素を選択し統合することである。例えば、ネットワークパケットのデータフロー用のソースおよび宛先アドレスならびにソースおよび宛先ポートを定義する4タプルのデータ要素を表すパケットのフローデータ要素を抽出してもよい。これらのフロー要素の抽出は、例えばコンテクスト参照の実行などネットワーク利用時の種々の異なる目的に便利な場合がある。パケット処理および/またはネットワーク利用に伴う種々の他の使用法には、1または複数のヘッダーチェックサムの目的のためのパケットの様々な部分の選択と統合、部分電子署名の計算、ARPキャッシュ、パケット切り替えまたは他の転送、選別、内容に基づく負荷分散、パケットの内容の検索、パケット分類、および用途に合わせたネットワーク構築などがあるがこれらに限定されない。別の一側面では、これらの命令をネットワーク構築または他の用途に用いて、暗号関数(例えば、ハッシュ、チェックサムなど)へ入力するデータ要素(例えば、比較的情報量が多いデータ要素)を選択し統合してもよい。さらに別のこれら命令の潜在的使用法は、画像データの二段抽出用のデータ要素を選択し統合することである。さらに別の使用法は、拡張マークアップ言語(XML)処理、データベースアプリケーション、画像処理、および圧縮処理の速度向上である。本発明の恩恵を受ける当業者には、種々の他の用途は明らかである。特定の概念をさらに説明するため、ネットワークパケットの処理にデータ要素選択・統合命令602を用いる詳細な実施例を挙げる。但し、本発明の範囲はこれに限定されない。
図6は、プロセッサ600の一例示的実施形態のブロック図であり、一部の実施形態によるデータ要素選択・統合命令602を用いてネットワークパケットのデータ要素を処理する方法を示している。本プロセッサはプロトコル復号器662を備える。このプロトコル復号器はネットワークパケットを(例えばネットワークインタフェースから)受け取るために連結されている。プロトコル復号器はこれらのネットワークパケットのネットワークプロトコルを復号する。これは従来の方法で実施してもよい。一部の実施形態によれば、プロトコル復号器はソフトウェアモジュールとして実装してもよい(例えば、プロセッサの外にあるメモリに記憶する)。そのようなプロトコル復号器モジュールは、より多種多様のプロトコルをさらに柔軟に復号するために使用されることが多い。他の実施形態では、プロトコル復号器はダイおよび/またはプロセッサに搭載されたハードウェアに実装してもよい。例えば、ハードウェアプロトコル復号器は、必要に応じて比較的一般的に使用されるプロトコル用に装備してもよい。
再び図6を参照すると、プロトコル復号器は第1のパケット660−1を受け取ってもよい。プロトコル復号器は第1のパケットのプロトコルを厳密に復号すなわち決定してもよい。プロトコル復号の出力は全ての関連する階層(例えばTCP/IPV4)のプロトコルの決定である。これを元に、プロトコル復号器はマスクを生成する。例えば、プロトコル復号器は即値ビットマスク604(例えば即値104に類似)を生成して復号ユニット606に提供してもよい。即値ビットマスクまたは他のマスクで、同じフローのおよび/または同じネットワークプロトコルを第1のパケットとして使用する対象パケットの特定のデータ要素を選択してもよい。
その後、同じフローまたは接続の第2のパケット660−2をプロトコル復号器で受け取ってもよい。プロトコル復号器すなわちヘッダ抽出構成要素または他の構成要素(図示せず)は、第2のパケットのヘッダの少なくとも一部をパックデータ・オペランド612として受け取ってもよい。パックデータ・オペランド612は第2のパケットヘッダーの複数のパックデータ要素を有していてもよい。上述のようにオペランドは一組のパックデータレジスタ610に記憶してもよい。
パックデータ・オペランド612を示すデータ要素選択・統合命令602を、復号ユニット606が受け取ってもよい。また復号ユニットはマスク(例えば即値ビットマスク604)を受け取ってもよい。復号ユニットは命令を上述のように復号し、実行ユニット608を制御してソースパックデータ・オペランド612とマスクを用いるデータ要素選択・統合操作を実行、結果パックデータ・オペランド614を記憶できるようにする。結果パックデータ・オペランドは第2のパケットのヘッダの統合された選択/未マスクデータ要素を有していてもよい。
第2のパケットのヘッダのどの特定データ要素が選択されるかは具体的な実装によって決まる。一部の実施形態によれば、フローバイトすなわち要素を選択、統合してもよい。例えば、プロトコル復号器はプロトコル復号に基づいて第2のパケットのヘッダ内にあるフローバイトの位置(例えば、TCP/IPソース/宛先アドレスとソース/宛先ポート番号)を知ることができる。プロトコル復号器はマスクを生成して(例えば、フローバイトの各々には未マスクのマスク要素を、および他のバイトには既マスクのマスク要素を生成して)、これらのフローバイトを未マスクにすなわち選択するようにしてもよい。これらのフローバイトを抽出、統合して他の操作を容易にしてもよい。例えば、他の構成要素664がこれらのフローバイトを用いてRSS検索などにコンテクスト参照を実行してもよい。これにより、パケット処理中の演算的に高価な操作になり易いフロー抽出速度を上げてもよい。他の実施形態では、プロトコルバイトすなわち他の要素を選択、統合してもよい。この方法により後続パケットのプロトコルを迅速に試験することができるようにし、上記のような厳格なプロトコル復号を行う必要をなくしてもよい。さらに別の実施形態によれば、第2のパケットヘッダー内の対象の他のバイトすなわちデータ要素を選択、統合してもよい。例えば、ヘッダの比較的情報量の多い要素を抽出したら、他の構成要素664例えば暗号化モジュールでこの比較的情報量の多い要素にハッシュまたは他の暗号化操作を実行してもよい。
図7Aは、データ要素選択・統合命令702Aの第1の実施形態のブロック図である。この命令は操作コードすなわちオペコード740Aを含む。このオペコードは、実行する命令および/または操作(例えばデータ要素選択・統合操作)を特定可能な複数のビットすなわち1または複数の領域を示してもよい。命令は、第1のソースパックデータ・オペランドを指定する第1のソースパックデータ・オペランド指定子742Aを含んでもよい。命令は必要に応じて、結果パックデータ・オペランドを記憶する宛先記憶位置を指定する宛先指定子744Aを含んでもよい。例えば、これらの指定子(742A、744A)の各々は一組のビットすなわち1または複数の領域を備えて、関連するオペランド用のレジスタ、メモリ場所、または他の記憶装置場所のアドレスを明示的に特定してもよい。あるいは、別の実施形態によれば、指定子の1または複数は必要に応じて命令に黙示的(例えば、オペコードに黙示的)でもよい。例えば命令が、明示的に特定する必要がないソースおよび/または宛先として黙示的固定レジスタを有していてもよい。他の実施例として、一部の実施形態では、宛先指定子744Aの代わりに、第1のソースパックデータ・オペランドに使用される同じレジスタまたは他の記憶装置場所を、必要に応じて宛先記憶位置として黙示的に用いてもよい。例えば命令が、別々のソース指定子742Aおよび宛先指定子744Aを1つのソース/宛先指定子で置換し、この1つのソース/宛先指定子でレジスタまたは他の記憶装置場所を指定し、これらを先ずソースオペランドとして使用し、その後結果オペランドの記憶に使用してもよい。この実施形態によれば、命令は即値704も有するソースビットマスクオペランドを提供する。一部の実施形態によれば、命令は必要に応じてデータ要素サイズ指定子746Aを有する、第1のソースパックデータ・オペランドのデータ要素量を特定あるいは少なくとも表示してもよい。データ要素サイズ指定子は1または複数のビットすなわち領域を含んでもよい。
図7Bは、データ要素選択・統合命令702Bの第2の実施形態のブロック図である。この命令は、操作コードすなわちオペコード740B、第1のソースパックデータ・オペランド指定子742B、任意選択の宛先指定子744B、および任意選択のデータ要素サイズ指定子746Bを含む。これらの各々は、命令702Aの対応する名称の構成要素と同じでもあるいは類似でもよく、同じ変更要素や代替要素があってもよい。この実施形態によれば、即値704の代わりに、命令702Bは必要に応じてパックデータ操作マスク指定子748を含む。このパックデータ操作マスク指定子はパックデータ操作マスクレジスタを特定してもよい。あるいは、パックデータ操作マスクレジスタを暗黙的に表示してもよい。
図7Cは、データ要素選択・統合命令702Cの第3の実施形態のブロック図である。この命令は、操作コードすなわちオペコード740C、第1のソースパックデータ・オペランド指定子742C、任意選択の宛先指定子744C、および任意選択のデータ要素サイズ指定子746Cを含む。これらの各々は、命令702Aの対応する名称の構成要素と同じでもあるいは類似でもよく、同じ変更要素や代替要素があってもよい。この実施形態によれば、即値704および/またはパックデータ操作マスク指定子748の代わりに、命令702Cは必要に応じて第2のソースパックデータ・オペランド指定子750を含む。第2のソースパックデータ・オペランド指定子750は、第2のソースパックデータレジスタまたは他のパックデータ・オペランド記憶装置場所を明示的に特定し、ここにパックデータ要素マスクを記憶してもよい。あるいは、必要に応じて黙示的記憶装置場所をパックデータ要素マスクに用いてもよい。
言うまでもないことだが、これらは適切な命令を説明するいくつかの単なる例示的実施形態である。別の実施形態は指定子のサブセットを備えるか、別の指定子または領域を追加してもよい。また、説明した領域の順序/配置は必須ではなく、これらの領域を様々に配列し直してもよい。さらに、領域は連続したビット配列を含む必要はなく、むしろ不連続なすなわち離散したビットなどを含んでもよい。一部の領域は重なり合うことがあってもよい。一部の実施形態では、命令形式は本明細書のどこかで説明した命令形式(例えば、VEXまたはEVEXコード化形式すなわち命令形式)を有していてもよい。但し、本発明の範囲はこれらに限定されない。
図8は、適切な一組のパックデータレジスタ810の例示的実施形態のブロック図である。このパックデータレジスタはZMM0〜ZMM31と表示された32個の512ビットパックデータレジスタを含む。ここで説明する実施形態によれば、下位16個のレジスタすなわちZMM0〜ZMM15の下位256ビットに、YMM0〜YMM15と表示されたそれぞれ256ビットパックデータレジスタがエイリアスすなわち重ね合わせられているが、これは必須ではない。同様に、ここに説明する実施形態では、レジスタYMM0〜YMM15の下位128ビットに、XMM0〜XMM15と表示されたそれぞれ128ビットパックデータレジスタがエイリアスすなわち重ね合わせられているが、これも必須ではない。512ビットレジスタZMM0〜ZMM31は、512ビットパックデータ、256ビットパックデータ、または128ビットパックデータを保持することができる。256ビットレジスタYMM0〜YMM15は256ビットパックデータまたは128ビットパックデータを保持することができる。128ビットレジスタXMM0〜XMM15は128ビットパックデータを保持することができる。一部の実施形態では、各レジスタを用いてパック浮動小数点データまたはパック整数データを記憶してもよい。種々のデータ要素量に対応しており、少なくとも8ビットバイトデータ、16ビットワードデータ、32ビット倍長語、32ビット単精度浮動小数点データ、64ビット4倍長語、および64ビット倍精度浮動小数点データが含まれる。別の実施形態によれば、いろいろな数のレジスタおよび/または種々の大きさのレジスタを用いてもよい。さらに別の実施形態によれば、レジスタは大きいレジスタを小さいレジスタにエイリアスして使用してもあるいはしなくてもよく、および/またはレジスタを用いて浮動小数点データを記憶してもしなくてもよい。
図9は、適切な一組のパックデータ操作マスクレジスタ918の例示的実施形態のブロック図である。ここに説明する実施形態では、この組は表示がk0からk7の8個のレジスタを含む。別の実施形態は8個未満(例えば2つ、4つの、6つなど)のレジスタを含んでもよく、あるいは8個を越える(例えば16、32などの)レジスタを含んでもよい。これらの各レジスタを用いてパックデータ操作マスクを記憶してもよい。ここに説明する実施形態では各レジスタは64ビットである。別の実施形態によれば、レジスタ長は64ビットより大きくてもよく(例えば80ビット、128ビットなど)、あるいは64ビットより小さくてもよい(例えば8ビット、16ビット、32ビットなど)。レジスタは既知の技術を用いて種々の方法で実装してよく、何らかの知られている特定の種類の回路に限定されない。適切なレジスタの例には、専用物理レジスタ、レジスタ名称変更を用いて動的に割り当てられた物理レジスタ、およびそれらの組み合わせがあるが、これらに限定されない。
一部の実施形態では、パックデータ操作マスクレジスタ918は、(例えば、データ要素粒度でパックデータ操作をプレディケーションする)プレディケーション専用の独立した一組の専用の構造的レジスタでもよい。一部の実施形態では、この命令で命令書式の複数ビットすなわち1または複数の領域にパックデータ操作マスクレジスタを符号化すなわち特定してもよく、これらのビットすなわち領域は他の種類のレジスタ(例えば、パックデータレジスタ、汎用レジスタなど)の符号化すなわち特定に用いるものとは別でもよい。例えば、この命令は、8つのパックデータ操作マスクレジスタk0〜k7のうちの任意の1つを、3つのビット(例えば3ビット領域)を用いて符号化すなわち特定してもよい。別の一部の実施形態では、もっと少ないあるいは多いパックデータ操作マスクレジスタがあれば、それぞれもっと少ないあるいは多いビットを用いてもよい。特定の一実装によれば、マスク化パックデータ操作をプレディケーションするプレディケーションオペランドに、パックデータ操作マスクレジスタk1〜k7(k0以外)だけを当ててもよい。レジスタk0を通常のソースまたは宛先レジスタとして用い、プレディケーションオペランドとして符号化しなくてもよい(例えば、もしk0が特定されたら、k0は「マスクなし」符号化を有する)。ただし、これは必須ではない。
図10は、パックデータ操作マスクレジスタ1018の一例示的実施形態を説明する略図であり、パックデータ操作マスクとして用いるおよび/またはパックデータ長とデータ要素長に応じてマスク処理するために用いられるビット数を示している。説明の例示的実施形態のパックデータ操作マスクレジスタは64ビット幅であるが、これは必須ではない。パックデータ長とデータ要素長の組み合わせにより、64ビットの全てをマスク処理用のパックデータ操作マスクとして使用しても、あるいはそのサブセットだけを使用してもよい。一般に、要素単位マスク制御ビットを1つ使用する場合、マスク処理に使用するパックデータ操作マスクレジスタのビット数は、ビット数のパックデータ長をビット数のパックデータ要素長で割ったものに等しい。ここに説明する実施形態では、レジスタの最下位部をマスク用に用いてもよい。ただしこれは必須ではない。別の実施形態によれば、必要に応じて最上位部あるいは他の部分を使用してもよい。
例示的コアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ プロセッサコアは、異なる目的に合わせ、異なる方法で、異なるプロセッサに実装してもよい。例えば、そのような実装用のコアは、1)一般演算用の汎用インオーダーコア、2)一般演算用の高性能汎用アウトオブオーダーコア、3)画像および/または科学的(高速)演算を第1目的とする専用コアでもよい。種々のプロセッサの実装には、1)一般演算用の汎用インオーダーコアを1または複数および/または一般演算用の高性能汎用アウトオブオーダーコアを1または複数備えるCPU、および2)画像および/または科学的(高速)演算を第1目的とする専用コアを1または複数備えるコプロセッサでもよい。そのような種々のプロセッサが種々のコンピュータシステム アーキテクチャになってもよく、それは次のようなものでもよい。1)CPUとは別のチップに搭載されたコプロセッサ、2)CPUと同じパッケージ内の別のダイに搭載されたコプロセッサ、3)CPUと同じダイに搭載されたコプロセッサ(この場合、そのようなコプロセッサは専用論理回路と呼ばれることがあり、例えば組込型の画像および/または科学(高速)論理回路あるいは特殊用途のコアなどがある)、および4)チップに搭載され、同じダイに上記CPU(アプリケーションコアまたはアプリケーションプロセッサと呼ばれる)と、上記コプロセッサと、追加機能とを備えてもよいシステムが含まれる。例示的コアアーキテクチャを以下に説明し、その後例示的プロセッサおよびコンピュータアーキテクチャを説明する。
例示的コアアーキテクチャ インオーダーおよびアウトオブオーダーコアブロック図 図11Aは、本発明の実施形態による例示的インオーダー・パイプラインと例示的レジスタ名称変更アウトオブオーダー発行/実行パイプラインの両方を説明するブロック図である。図11Bは、本発明の実施形態によるプロセッサに設けられるインオーダーアーキテクチャコアと、例示的レジスタ名称変更アウトオブオーダー発行/実行アーキテクチャコアの一例示的実施形態の両方を説明するブロック図である。図11A、Bの実線で示す箱はインオーダー・パイプラインおよびインオーダーコアを説明し、任意選択で追加する点線で示す箱はレジスタ名称変更アウトオブオーダー発行/実行パイプラインおよびコアを説明している。このインオーダー側面はアウトオブオーダー側面の一部であることから、アウトオブオーダー側面について述べる。
図11Aでは、プロセッサパイプライン1100は、取得段1102、長さ復号段1104、復号段1106、割り当て段1108、名称変更段1110、スケジューリング(別名、振り分けまたは発行)段1112、レジスタ読み込み/メモリ読み込み段1114、実行段1116、書き戻し/メモリ書き込み段1118、例外処理段1122、およびコミット段1124を備える。
図11Bはプロセッサコア1190を示す。プロセッサコア1190は前段部1130を備え、これが実行エンジン部1150に連結されており、2つともメモリ部1170に連結されている。コア1190は少命令セット演算(RISC)コアでも、複雑命令セット演算(CISC)コアでも、極長命令語(VLIW)コアでも、あるいは複合コアあるいは別のコア類でもよい。さらに別の選択肢として、コア1190は専用コアでもよく、例えばネットワークすなわち通信コア、圧縮エンジン、コプロセッサコア、一般演算画像処理部(GPGPU)コア、画像コアなどでもよい。
前段部1130は分岐予測部1132を備え、これが命令キャッシュ部1134に連結され、これが命令変換参照バッファ(TLB)1136に連結され、これが命令取得部1138に連結され、これが復号ユニット1140に連結されている。復号ユニット1140(すなわち復号器)は命令を復号し、出力としてマイクロオペレーション、マイクロコード入力点、マイクロ命令、他の命令、または他の制御信号の1または複数を生成してもよく、これらはソース命令から復号され、表示され、あるいはそれらから派生する。復号ユニット1140は種々の異なる機構を用いて実装してもよい。適切な機構の例には、参照テーブル、ハードウェア実装、プログラム可能論理回路アレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)などがあるがこれらに限定されない。一実施形態によれば、コア1190はマイクロコードROMまたは他の媒体を備え、特定のマクロ命令用のマイクロコードを(例えば復号ユニット1140または前段部1130に)記憶する。復号ユニット1140は実行エンジン部1150の名称変更/割り付け部1152に連結されている。
実行エンジン部1150は名称変更/割り付け部1152を備え、これがリタイヤメント部1154および一組の1または複数のスケジュール管理部1156に連結されている。スケジュール管理部1156は、予約ステーション、中央命令ウィンドウなどを含む任意の数の種々のスケジュール管理部を表す。スケジュール管理部1156は物理レジスタファイル部1158に連結されている。各物理レジスタファイル部1158は1または複数の物理レジスタファイルを表し、それらの異なる1つ1つは1種以上の型のデータを記憶する。そのようなデータ型には、例えばスカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、次に実行する命令のアドレスである命令ポインター)などがある。一実施形態によれば、物理レジスタファイル部1158はベクトルレジスタ部、書き込みマスクレジスタ部、およびスカラーレジスタ部を備える。これらのレジスタ部は、構造的ベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供してもよい。レジスタ名称変更とアウトオブオーダー実行を実装してもよい種々の方法(例えば、再要求バッファとリタイヤメントレジスタファイルを用いる方法、将来ファイルと履歴ファイルとリタイヤメントレジスタファイルを用いる方法、およびレジスタマップとレジスタのプールを用いる方法など)を説明するため、物理レジスタファイル部1158はリタイヤメント部1154に重ねられている。リタイヤメント部1154および物理レジスタファイル部1158は実行クラスター1160に連結されている。実行クラスター1160は一組の1または複数の実行ユニット1162および一組の1または複数のメモリアクセス部1164を備える。実行ユニット1162は種々の操作(例えば、桁送り、加算、引き算、かけ算)を種々の型のデータ(例えば、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行してもよい。一部の実施形態は特定の機能または複数機能の組を実行することに特化した複数の実行ユニットを備えてもよく、他の実施形態は全ての機能を全て実行する実行ユニットをただ1つまたは複数備えてもよい。スケジュール管理部1156、物理レジスタファイル部1158、および実行クラスター1160は複数ある場合があるように図示されている。その理由は、特定の実施形態では特定の型のデータ/操作用に別々のパイプラインを作るからである(例えば、スカラー整数パイプライン、スカラー浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/または各々独自のスケジュール管理部、物理レジスタファイル部、および/または実行クラスターを有するメモリアクセスパイプラインなど。また、別のメモリアクセスパイプラインの場合なら、特定の実施形態はこのパイプラインの実行クラスターだけがメモリアクセス部1164を有するように実装される)。当然のことだが、別々のパイプラインを使用する場合、これらのパイプラインの1または複数がアウトオブオーダー発行/実行で、残りはインオーダーでもよい。
一組のメモリアクセス部1164はメモリ部1170に連結されており、データTLB部1172を備え、これがデータキャッシュ部1174に連結され、これがレベル2(L2)キャッシュ部1176に連結されている。一例示的実施形態によれば、メモリアクセス部1164は、読み込み部、記憶アドレス部、および記憶データ部を備え、各々がメモリ部1170のデータTLB部1172に連結されていてもよい。命令キャッシュ部1134はさらにメモリ部1170のレベル2(L2)キャッシュ部1176に連結されている。L2キャッシュ部1176は1または複数の他のレベルのキャッシュに連結され、最終的に主メモリに連結されている。
例えば、例示的レジスタ名称変更、アウトオブオーダー発行/実行コアアーキテクチャは以下のようにパイプライン1100を実装してもよい。すなわち、1)命令取得部1138が取得段1102および長さ復号段1104を実行し、2)復号ユニット1140が復号段1106を実行し、3)名称変更/割り付け部1152が割り当て段1108および名称変更段1110を実行し、4)スケジュール管理部1156がスケジュール段1112を実行し、5)物理レジスタファイル部1158およびメモリ部1170がレジスタ読み込み/メモリ読み込み段1114を実行し、実行クラスター1160が実行段1116を実行し、6)メモリ部1170および物理レジスタファイル部1158が書き戻し/メモリ書き込み段1118を実行し、7)種々の処理部が例外処理段1122に関連し、および8)リタイヤメント部1154および物理レジスタファイル部1158がコミット段1124を実行する。
コア1190は、本明細書に記載の命令を含め1または複数の命令セット(例えば、x86命令セット(いくつかの新しいバージョンの拡張子が追加されている)、MIPS Technologies of Sunnyvale社(カリフォルニア州)のMIPS命令セット、ARM Holdings of Sunnyvale社(カリフォルニア州)のARM命令セット(任意でNEONなどの拡張子付き)に対応してもよい。一実施形態によれば、コア1190はパックデータ命令セット拡張子(例えば、AVX1、AVX2)に対応した論理回路を備え、そうすることによってマルチメディアアプリケーションで使用される複数の操作をパックデータで実行できるようにしてもよい。
当然だが、コアはマルチスレッディング(操作またはスレッドの組を2つ以上並行して実行する処理)に対応してもよく、それを種々の方法で実行してもよい。そのような方法には、時間分割マルチスレッディング、同時マルチスレッディング(1つの物理コアが複数スレッドの各々に論理コアを提供し、物理コアが同時にマルチスレッディング処理を行う)、あるいはそれらの組み合わせ(例えば時間分割取得と復号の後、Intel(登録商標)社のHyperthreading technologyなどで同時マルチスレッディング)などがある。
レジスタ名称変更をアウトオブオーダー実行の文脈で説明するが、当然だが、このレジスタ名称変更はインオーダーアーキテクチャで使用してもよい。本プロセッサについてここに説明する実施形態は独立した命令キャッシュ部1134およびデータキャッシュ部1174および共用のL2キャッシュ部1176も備え、別の実施形態は命令とデータの両方に内部キャッシュを1つ、例えばレベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュなどを有していてもよい。一部の実施形態では、本システムは内部キャッシュとコアおよび/またはプロセッサの外にある外部キャッシュの組み合わせを備えてもよい。あるいは、キャッシュの全てがコアおよび/またはプロセッサの外にあってもよい。
具体的な例示的インオーダーコアアーキテクチャ
図12A、Bは、より具体的な例示的インオーダーコアアーキテクチャのブロック図を説明している。そのコアは1つのチップ内の複数の論理回路ブロック(同じ種類および/または異なる種類の他のコアを含む論理回路ブロック)の1つとなる。これらの論理回路ブロックは高帯域幅インターコネクトネットワーク(例えばリングネットワーク)を介していくつかの固定機能論理回路、メモリI/Oインタフェース、および他の必要なI/O論理回路と通信する。これはアプリケーションによって決まる。
図12Aは、本発明の実施形態による、単一プロセッサコアならびにダイ搭載型インターコネクトネットワーク1202との接続、およびそのレベル2(L2)キャッシュ1204のローカルサブセットのブロック図である。一実施形態によれば、命令復号器1200はパックデータ命令セット拡張子が付いたx86命令セットに対応する。L1キャッシュ1206によってキャッシュメモリのスカラー部およびベクトル部へのアクセスの待ち時間が短くなる。(設計を単純にする)一実施形態によれば、スカラー部1208およびベクトル部1210は別々のレジスタ組(それぞれスカラーレジスタ1212およびベクトルレジスタ1214)を使用し、それらの間を搬送されるデータはメモリに書き込まれた後に1次(L1)キャッシュ1206に読み戻されるが、本発明の別の実施形態は異なる方法を用いてもよい(例えば、単一レジスタ組を使用または通信経路を装備してデータを2つのレジスタファイル間で書き込みも読み戻しもせずに搬送するようにする)。
L2キャッシュ1204のローカルサブセットは大域L2キャッシュの一部であり、この大域L2キャッシュはプロセッサコア1つに1つずつ複数の独立したローカル部に分割されている。各プロセッサコアは、それぞれのL2キャッシュ1204のローカル部に直接アクセスする経路がある。プロセッサコアが読み込んだデータはそれぞれのL2キャッシュサブセット1204に記憶され、このデータに他のプロセッサコアがそのローカルL2キャッシュサブセットにアクセスしながら並行して迅速にアクセスすることができる。プロセッサコアが書き込んだデータはそのL2キャッシュサブセット1204に記憶され、必要に応じてこのデータは他のサブセットから消去される。リングネットワークによって共用データの一貫性が確保される。このリングネットワークは双方向性で、それによりプロセッサコア、L2キャッシュ、および他の論理回路ブロックなどのエージェントが互いにチップ内で通信することができる。各リングデータ経路は1方向あたり1012ビット幅である。
図12Bは、本発明の実施形態による図12Aのプロセッサコアの一部の拡大図である。図12BはL1キャッシュ1204の一部であるL1データキャッシュ1206Aを備えるとともに、ベクトル部1210とベクトルレジスタ1214に関してさらに詳細に説明している。具体的には、ベクトル部1210は16幅のベクトル処理部(VPU)(16幅ALU1228を参照)であり、整数、単精度浮動小数点、および倍精度浮動小数点命令の1または複数を実行する。VPUは、スイズル部1220によるレジスタ入力のスイズル処理、数値変換部1222A、Bによる数値変換、および複製部1224によるメモリ入力の複製に対応する。マスクレジスタ1226の書き込みにより、処理後のベクトルの書き込みをプレディケーションできる。
組込型メモリ制御器と画像処理機能を備えるプロセッサ 図13は本発明の実施形態によるプロセッサ1300のブロック図である。プロセッサ1300は2つ以上のコアを有していてもよく、組込型メモリ制御器を有していてもよく、組込型画像処理機能を有していてもよい。図13の実線で示す箱はプロセッサ1300を説明しており、単一コア1302A、システムエージェント部1310、一組の1または複数のバス制御部1316を備える。点線で示す箱は必要であれば付加する別のプロセッサ1300を説明しており、複数のコア1302A〜N、システムエージェント部1310内の一組の1または複数の組込型メモリ制御部1314、および専用の論理回路1308を備える。
その結果、プロセッサ1300の異なる実装は、1)組込型の画像処理機能および/または科学(高速処理)論理回路である専用論理回路1308を有するCPU(1または複数のコアを備えてもよい)、および1または複数の汎用コアであるコア1302A〜N(例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、この2つの組み合わせ)、2)組込型の画像処理機能および/または科学(高速処理)論理回路を第1目的とする多数の専用のコアであるコア1302A〜Nを有するコプロセッサ、および3)多数の汎用インオーダーコアであるコア1302A〜Nを有するコプロセッサを備えてもよい。すなわち、プロセッサ1300は汎用プロセッサでも、コプロセッサでも、あるいは専用のプロセッサでもよく、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、画像プロセッサ、GPGPU(汎用画像処理部)、高処理能力多数コア(30以上のコア)組込型(MIC)コプロセッサ、内蔵プロセッサなどがある。プロセッサは1または複数のチップに実装してもよい。プロセッサ1300は、BiCMOS、CMOS、またはNMOSなど任意数の処理技術を用い、1または複数の基板の一部でもよくおよび/または例えば1または複数の基板に実装してもよい。
メモリの階層は、コア内の1または複数のレベルのキャッシュ、一組または1または複数の共有キャッシュ部1306、および組込型メモリ制御部1314の組に連結された外部メモリ(図示せず)を備える。共有キャッシュ部1306の組は、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなど1または複数の中間レベルのキャッシュ、最終レベルのキャッシュ(LLC)、および/またはそれらの組み合わせを備えてもよい。一実施形態によれば、リングによるインターコネクト部1312が、組込型画像論理回路1308、一組の共有キャッシュ部1306、およびシステムエージェント部1310/組込型メモリ制御部1314を相互に接続しているが、別の実施形態では、任意の数の既知の技術をそのような複数部のインターコネクトに用いてもよい。一実施形態によれば、一貫性は1または複数のキャッシュ部1306とコア1302A〜Nの間で維持される。
一部の実施形態では、1または複数のコア1302A〜Nはマルチスレッディング処理を実行することができる。システムエージェント部1310はコア1302A〜Nを連携・操作する構成要素を備える。システムエージェント部1310は、例えば電源制御部(PCU)および表示部を備えてもよい。PCUはコア1302A〜Nおよび組込型画像論理1308の電源状態の調整に必要な論理回路および構成要素でもよく、あるいはそのような構成要素を備えてもよい。表示部は1または複数の外部接続された表示器の駆動用である。
コア1302A〜Nはアーキテクチャ命令セットの観点で同種環境でも異種環境でもよい。すなわち、コア1302A〜Nの2つ以上は同じ命令セットを実行できてもよく、他のコアはその命令セットの一部だけまたは異なる命令セットだけを実行できてもよい。
例示的コンピュータキテクチャ 図14〜17は例示的コンピュータキテクチャのブロック図である。以下の当業分野で知られている他のシステム設計および構成も適切である。ノート型PC、机上型PC、手持ち型PC、携帯情報端末、産業用ワークステーション、サーバー、ネットワーク装置、ネットワークハブ、スイッチ、内蔵プロセッサ、デジタル信号プロセッサ(DSP)、画像装置、ビデオゲーム装置、家庭用通信端末、小型制御器、携帯電話、携帯メディアプレーヤー、手持ち装置、および種々の他の電子器機。一般に、本明細書に開示されたプロセッサおよび/または他の実行論理を取り込むことができる多種多様なシステムまたは電子器機一般に適切である。
ここで図14を参照すると、図示されているのは本発明の一実施形態によるシステム1400ブロック図である。このシステム1400は、制御器ハブ1420に連結された1または複数のプロセッサ1410、1415を備えてもよい。一実施形態によれば、制御器ハブ1420は画像メモリ制御器ハブ(GMCH)1490および入出力ハブ(IOH)1450(これらは別々のチップにあってもよい)を備え、GMCH1490はメモリ1440およびコプロセッサ1445に連結されたメモリおよび画像制御器を備え、IOH1450は入出力(I/O)装置1460をMCH1490に連結している。あるいは、メモリと画像制御器の一方または両方をプロセッサに(本明細書に記載のように)組み込んでもよく、メモリ1440とコプロセッサ1445は、プロセッサ1410とIOH1450を有する単一チップの制御器ハブ1420に直接連結されている。
図14には、任意選択の追加プロセッサ1415を点線で示す。各プロセッサ1410、1415は本明細書に記載の1または複数の処理コアを備えても、プロセッサ1300の一部のバージョンでもよい。
メモリ1440は例えば動的ランダムアクセスメモリ(DRAM)でも、相変化メモリ(PCM)でも、または2つの組み合わせでもよい。少なくとも一方の実施形態では、制御器ハブ1420は、フロントサイドバス(FSB)などのマルチドロップバス、クイックパスインターコネクト(QPI:QuickPath Interconnect)などの2点間インタフェース、または類似の接続1495を介してプロセッサ1410、1415と通信する。
一実施形態によれば、コプロセッサ1445は専用のプロセッサであり、例えば、高速処理MICプロセッサ、ネットワークすなわち通信プロセッサ、圧縮エンジン、画像プロセッサ、GPGPU、内蔵プロセッサなどがある。一実施形態によれば、制御器ハブ1420は組込型画像加速装置を備えてもよい。
物理リソース1410と1415の間には、構造、細部構造、温度、電力消費特性など一連の利点計量に関していろいろな違いがある。
一実施形態によれば、プロセッサ1410は、一般的な種類のデータ処理操作を制御する命令を実行する。この命令に組み込まれているのはコプロセッサ命令でもよい。プロセッサ1410はこれらのコプロセッサ命令を、付属のコプロセッサ1445で実行すべき種類のものであると認識する。したがって、プロセッサ1410はこれらのコプロセッサ命令(あるいはコプロセッサ命令を表す制御信号)をコプロセッサ1445に繋がるコプロセッサバスまたは他のインターコネクトに発行する。コプロセッサ1445はコプロセッサ命令を受け入れ、受け取った命令を実行する。
ここで図15を参照すると、ブロック図に示されているのは、本発明の一実施形態によるさらに具体的な第1の例示的システム1500である。図15に示すように、多重プロセッサシステム1500は2点間インターコネクトシステムであり、2点間インターコネクト1550で連結された第1のプロセッサ1570と第2のプロセッサ1580を備える。プロセッサ1570と1580の各々はプロセッサ1300の特定のバージョンでよい。本発明の一実施形態によれば、プロセッサ1570と1580はそれぞれプロセッサ1410と1415であり、コプロセッサ1538はコプロセッサ1445である。他の実施形態では、プロセッサ1570と1580はそれぞれプロセッサ1410とコプロセッサ1445である。
プロセッサ1570と1580は、それぞれ組込型メモリ制御器(IMC)部1572と1582を備えるように図示されている。プロセッサ1570はそのバス制御部2点間(P−P)インタフェース1576と1578の一部も含み、同様に第2のプロセッサ1580はP−Pインタフェース1586と1588を含む。プロセッサ1570、1580は、P−Pインタフェース回路1578、1588を用いる2点間(P−P)インタフェース1550を介して情報を交換してもよい。図15に示すように、IMC1572と1582はプロセッサをそれぞれのメモリすなわちメモリ1532とメモリ1534に連結しており、これらはそれぞれのプロセッサに局所的に取り付けられた主メモリの一部でもよい。
プロセッサ1570、1580はそれぞれ、2点間インタフェース回路1576、1594、1586、1598を用いる個々のP−Pインタフェース1552、1554を介して、チップ組1590と情報を交換してもよい。チップ組1590は必要に応じて高性能インタフェース1539を介してコプロセッサ1538と情報を交換してもよい。一実施形態によれば、コプロセッサ1538は専用のプロセッサ、例えば、高速処理MICプロセッサ、ネットワークすなわち通信プロセッサ、圧縮エンジン、画像プロセッサ、GPGPU、内蔵プロセッサなどである。
プロセッサかあるいは2つのプロセッサの外部に、共有キャッシュ(図示せず)を設け、さらにこれをプロセッサとP−Pインターコネクトで接続してもよい。そのようにすると、プロセッサが低電力モードになった場合に、プロセッサの局所キャッシュ情報の片方または両方を共有キャッシュに記憶することができる。
チップ組1590を第1のバス1516にインタフェース1596を介して連結してもよい。一実施形態によれば、第1のバス1516は周辺構成要素インターコネクト(PCI)バスでも、あるいはPCIエクスプレス(PCI Express)バスまたは他の第3世代I/Oインターコネクトバスなどのバスでもよい。ただし、本発明の範囲はそれらに限定されない。
図15に示すように、第1のバス1516を第2のバス1520に連結しているバスブリッジ1518と共に、種々のI/O装置1514を第1のバス1516に連結してもよい。一実施形態によれば、第1のバス1516には1または複数の追加のプロセッサ1515、例えばコプロセッサ、高速処理用MICプロセッサ、GPGPU、加速装置(例えば、画像加速装置またはデジタル信号処理(DSP)部)、領域プログラム可能アレイ、または任意の他のプロセッサが連結される。一実施形態によれば、第2のバス1520はロウピンコンタクト(LPC)バスでもよい。
一実施形態によれば種々の装置を第2のバス1520に連結することができ、そのようなものには例えば、キーボードおよび/またはマウス1522、通信装置1527、および記憶装置1528があり、記憶装置には例えば、ハードディスク駆動装置または他の大容量記憶装置があり、ここに命令/コードおよびデータ1530を収めてもよい。さらに、音声I/O1524を第2のバス1520に連結してもよい。なお、他のアーキテクチャも可能である。例えば、図15の2点間アーキテクチャの代わりに、システムがマルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
ここで図16を参照すると、図示されているのは本発明の一実施形態によるさらに具体的な第2の例示的システム1600のブロック図である。図15、16の類似の要素は同じ参照番号を持ち、図15の特定の側面は図16から省いて図16の他の側面が分かりにくくならないようにした。
図16は、プロセッサ1570、1580がそれぞれ組込型メモリおよびI/O制御論理回路(「CL」)1582と1572を備えてもよいことを説明している。すなわち、CL1572、1582は組込型メモリ制御部を備え、I/O制御論理回路を備える。図16は、メモリ1532、1534だけがCL1572、1582に連結されているのではなく、I/O装置1614も制御論理回路1572、1582に連結されていることを説明している。レガシーI/O装置1615がチップ組1590に連結されている。
ここで図17を参照すると、図示されているのは本発明の一実施形態によるSoC1700のブロック図である。図13の類似要素は同じ参照番号を有する。また、点線で示す箱はさらに上級のSoCに関するオプション機能である。図17では、インターコネクト部1702が以下の要素に連結されている。すなわち、一組の1または複数のコア202A〜Nおよび共有キャッシュ部1306を備えるアプリケーションプロセッサ1710と、システムエージェント部1310と、バス制御部1316と、組込型メモリ制御部1314と、組込型画像論理下位と画像プロセッサと音声プロセッサと画像プロセッサを備えてもよい一組すなわち1または複数のコプロセッサ1720と、静的ランダムアクセスメモリ(SRAM)部1730と、触接メモリアクセス(DMA)部1732と、1または複数の外部表示装置に連結するための表示部1740とに連結されている。一実施形態によれば、コプロセッサ1720は専用のプロセッサを備える。例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高速処理MICプロセッサ、内蔵プロセッサなどを備える。
本明細書に開示された機構の実施形態ハードウェア、ソフトウェア、ファームウェア、またはそのような実装方法を組み合わせて実装することができる。本発明の実施形態はプログラム可能なシステムで実行するコンピュータプログラムまたはプログラムコードとして実装してもよく、このプログラム可能なシステムは、少なくとも1つのプロセッサ、記憶装置システム(例えば揮発性および不揮発性メモリおよび/または記憶装置)、少なくとも1つの入力装置、および少なくとも1つの出力装置を備える。
図15に説明したコード1530のようなプログラムコードを入力命令に適用して本明細書に記載の機能を実行し、出力情報を生成してもよい。出力情報は知られている方法で1または複数の出力装置に適用してもよい。本用途の目的の場合、処理システムはプロセッサを有する任意のシステムを含み、このプロセッサには例えばデジタル信号プロセッサ(DSP)、超小型制御器、特定用途向け集積回路(ASIC)、または超小型プロセッサなどがある。
プログラムコードを高次の手続き型またはオブジェクト指向のプログラム言語に実装して処理システムと通信してもよい。プログラムコードは、必要に応じてアセンブリ言語または機械語に実装してもよい。実際、本明細書に記載の機構は何らかの特定のプログラム言語の範囲に限定されない。どのような場合も、これらの言語はコンパイルされたすなわち解釈された言語でよい。
少なくとも1つの実施形態の1または複数の側面を機械可読媒体に種々の論理を表す代表的な命令で記憶し、プロセッサに実装してもよい。機械がこれを読み取ると、その機械は論理を組み立てて本明細書に記載の技術を実行する。「IPコア」として知られているそのような表現を機械可読有形媒体に記憶し、種々の顧客または製造施設に提供して製造機械に読み込んで、論理回路またはプロセッサを実際に作ってもよい。
機械で読み取り可能なそのような記憶媒体には、機械または装置で製造すなわち形成した有形の持続的配列の品物を無制限に含んでもよい。そのような品物には以下のような記憶媒体がある。すなわち、ハードディスク、任意の他の種類のディスク(フロッピー(登録商標)ディスク、光ディスク、小型ディスク読み取り専用メモリ(CD−ROM)、小型ディスク読み書き可能ディスク(CD−RW)、および磁気光ディスクなど)、半導体デバイス、例えば読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、例えば動的ランダムアクセスメモリ(DRAM)、静的ランダムアクセスメモリ(SRAM)、消去可能プログラム可能読み取り専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気または光カード、任意の他の種類の媒体であって電子命令の記憶に適切なものがある。
したがって、本発明の実施形態は、命令あるいは設計データを収容した有形の機械可読持続性媒体も含み、そのようなデータには例えばハードウェア記述言語(HDL)があり、この記述言語が構造、回路、器機、プロセッサおよび/または本明細書に記載のシステムの特徴事項を規定している。そのような実施形態はプログラム製品と呼んでもよい。
エミュレーション(二値変換、コード変形など) いくつかの例では、命令変換器を用いてソース命令の組の命令を対象の命令の組に変換してもよい。例えばこの命令変換器は、ある命令を、コアで処理する1または複数の他の命令に(例えば静的二値変換、動的編集を含む動的二値変換を用いて)翻訳、変形、模倣、または変換してもよい。命令変換器はソフトウェア、ハードウェア、ファームウェア、またはそれらを組み合わせて実装してもよい。命令変換器はプロセッサにあってもプロセッサの外にあっても、あるいは一部がプロセッサに一部がプロセッサの外にあってもよい。
図18は、本発明の実施形態によるソース命令の一組の二値命令を対象の命令セットの二値命令に変換するソフトウェア命令変換器の使用を対比したブロック図である。ここに説明する実施形態の命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器はソフトウェア、ファームウェア、ハードウェア、またはそれらの種々の組み合わせで実装してもよい。図18には高次の言語1802のプログラムが示されており、x86コンパイラ1804を用いてこのプログラムをコンパイルして、少なくとも1つのx86命令セットコア1816を有するプロセッサでネイティブに実行してもよいx86二値コード1806を生成させる。少なくとも1つのx86命令セットコア1816を有するプロセッサは、少なくとも1つのx86命令セットコアを有するインテル社プロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表し、(1)インテル社x86命令セットコアの命令セットの大部分または(2)少なくとも1つのx86命令セットコアを有するインテル社プロセッサで動作させることを目標としたアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを矛盾なく実行すなわち処理することによって、少なくとも1つのx86命令セットコアを有するインテル社プロセッサと実質的に同じ結果を実現する。x86コンパイラ1804は、少なくとも1つのx86命令セットコア1816を有するプロセッサが追加の連結処理を用いてあるいは用いないで実行可能なx86二値コード1806(例えばオブジェクトコード)を生成することができるコンパイラを表す。同様に、図18は、高次の言語1802で書かれたプログラムを示し、このプログラムを別の命令セットコンパイラ1808を用いてコンパイルして別の命令セット二値コード1810を生成し、それを少なくとも1つのx86命令セットコア1814を持たないプロセッサでネイティブに実行してもよい(例えば、MIPS Technologies社(カリフォルニア州、サニーベイル)のMIPS命令セットを実行するコア、および/あるいはARM Holdings(カリフォルニア州、サニーベイル)のARM命令セットを実行するコアを有するプロセッサで実行してもよい)。x86二値コード1806を、命令変換器1812を用いてx86命令セットコア1814を持たないプロセッサでネイティブに実行してもよいコードに変換する。この変換されたコードは別の命令セット二値コード1810と同じになり難い。同じにできる命令変換器は製作困難であるからである。しかし、この変換されたコードは一般的な操作を実行でき、別の命令セットの命令で作られている。すなわち、命令変換器1812は、エミュレーション、模倣、または任意の他の処理によってx86命令セットプロセッサすなわちコアを持たないプロセッサまたは他の電子器機がx86二値コード1806を実行可能にするソフトウェア、ファームウェア、ハードウェア、あるいはそれらの組み合わせを表す。
図3〜10のいずれかについて説明した構成要素、特徴事項、および詳細を、必要に応じて図1、2のどれに適用してもよい。さらに、いずれかの装置について説明した構成要素、特徴事項、および詳細を必要に応じて何らかの方法に適用し、上記のような装置が複数の実施形態で実行してもよく、および/あるいは上記のような装置を用いて実行してもよい。本明細書に記載されたどのプロセッサが本明細書に開示されたどのコンピュータシステムに含まれてもよい。一側面では、このシステムをネットワーク器機、例えばスイッチ、ルーター、他のネットワーク器機(例えば、ファイヤーウォール、スニファーなど)として用い、本明細書に開示された命令の利点をパケット処理に活かしてもよい。但し、本発明の範囲はそのように限定されない。一部の実施形態では、この命令は本明細書に開示された命令形式の特徴事項または細部を有していてもよい。ただしこれは必須ではない。
本明細書および特許請求の範囲では、「連結された」および/または「接続された」ならびにその派生語を用いてきた。これらの用語は互いに同義語を意味しない。そうではなく、一部の実施形態では、「接続された」を用いて2つ以上の部品が物理的および/または電気的に互いに直接接続していることを示してもよい。「連結された」で2つ以上の部品が物理的および/または電気的に直接的に互いに接触していることを意味してもよい。しかし、「連結された」には、2つ以上の要素が互いに直接的に接触していないが、それでも連携してあるいは相互に作用し合っていることを意味する場合がある。例えば、実行ユニットはレジスタおよび/または復号ユニットと1または複数の介在構成要素を介して連結されていてもよい。図では、矢印を用いて接続および連結を示している。
「および/または」を使用してきた。本明細書に使用したように、「および/または」はどちらか一方あるいは両方を意味する(例えばAおよび/またはBは、AまたはB、あるいはAとBの両方を意味する)。
上記の説明の中で、実施形態が十分に理解されるよう具体的な細部を説明してきた。しかし、これらの具体的な細部のいくつかを欠く他の実施形態を実践してもよい。本発明の範囲は上記の具体的な実施例で決定されるのではなく、添付の特許請求の範囲によってのみ決定される。また説明が誤解されないよう、よく知られている回路、構造、装置、および操作をブロック図の形態でおよび/あるいは詳細を省いて示している。適切なら、複数の図の間で参照番号または参照番号の終端部を繰り返して、必要に応じて類似あるいは同じ特徴事項を有していてもよい対応要素または類似要素を示してもよい。ただし別途規定されている場合あるいは明らかな場合はその限りではない。
特定の操作はハードウェア要素で実行してもよく、あるいは機械あるいは回路で実行可能な命令で具現してもよく、これを用いることによって、その操作を実行する命令でプログラムされた機械、回路、またはハードウェア要素(例えばプロセッサ、プロセッサの一部、回路など)を作ってもおよび/あるいは結果的にそのようなものになってもよい。操作は必要に応じてハードウェアとソフトウェアを組み合わせて実行してもよい。プロセッサ、機械、回路、またはハードウェアは、命令に応答して命令を実行および/ならびに処理し結果を記憶することができる具体的すなわち特定の回路または他の論理回路(例えばファームウェアおよび/またはソフトウェアと接続可能なハードウェア)を備えてもよい。
一部の実施形態は、機械可読媒体を含む製造品(例えばコンピュータプログラム製品)を備える。この媒体はある機構を備え、機械で読み取ることができる形式の情報を提供、例えば記憶していてもよい。機械可読媒体は命令または一連の命令を提供してもよくあるいはそれ自体に記憶していてもよく、これらの命令が機械で実行されたときおよび/あるいはもし実行されると、この機械は本明細書に開示された操作、方法、または技術の1または複数を実行することができ、および/あるいは結果的に実行する。
一部の実施形態では、機械で読み取り可能な媒体は機械で読み取り可能な持続性記憶媒体を含んでもよい。例えば、機械で読み取り可能な持続性記憶媒体は、フロッピー(登録商標)ディスク、光記憶媒体、光ディスク、光データ記憶装置、CD−ROM、磁気ディスク、光磁気ディスク、読み出し専用メモリ(ROM)、プログラム可能ROM(PROM)、消去可能・プログラム可能ROM(EPROM)、電気的に消去可能・プログラム可能ROM(EEPROM)、タンダムアクセスメモリ(RAM)、静的RAM(SRAM)、動的RAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶装置材料、不揮発性メモリ、不揮発性データ記憶装置、持続性メモリ、持続性データ記憶装置などを含んでもよい。機械で読み取り可能な持続性記憶媒体は一過性の伝播信号で構成されない。一部の実施形態では、記憶媒体は固形物を含む有形媒体を含んでもよい。
適切な機械の実施例は、汎用プロセッサ、専用のプロセッサ、デジタル論理回路、集積回路などを備えるがこれらに限定されない。適切な機械のさらに他の実施例は、プロセッサ、デジタル論理回路、または集積回路を備えるコンピュータシステムまたは他の電子器機を備える。そのようなコンピュータシステムまたは電子器機の実施例は、デスクトップ型コンピュータ、ラップトップ型コンピュータ、ノート型コンピュータ、タブレット型コンピュータ、ネットブック、スマートフォン、携帯電話、サーバー、ネットワーク器機(例えばルーターおよびスイッチ)、携帯インターネット器機(MID)、メディアプレーヤー、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲーム制御器を含むが、それらに限定されない。
本明細書の中で「ある実施形態」、「一実施形態」、「1または複数の実施形態」、「一部の実施形態」などを参照して具体的な特徴事項を本発明の実践に含めてもよいことを示してきたが、これは必ずしも必要ではない。同様に説明の中で本開示を円滑にし、種々の発明的側面の理解を進めるため、1つの実施形態、図、またはその説明の中の種々の特徴事項を場合によっては一つにまとめた。しかしこの開示方法から本発明には特許請求の範囲に記載した以上の特徴事項が必要であると理解してはいけない。そうではなく、添付の特許請求の範囲に示すように、発明的側面は開示された1つの実施形態の全ての特徴事項より少ないことにある。すなわち、詳細の説明に続く特許請求の範囲は詳細の説明に明らかに包含され、各請求項は本発明の個々の実施形態として独立している。
例示的実施形態 以下の実施例はさらに複数の実施形態に関連する。これらの実施例の細部を1または複数の実施形態のどこに用いてもよい。
実施例1は、複数のパックデータレジスタおよびデータ要素選択・統合命令を復号する復号ユニットを備えるプロセッサである。このデータ要素選択・統合命令は、複数のデータ要素を有する第1のソースパックデータ・オペランドと、複数のマスク要素を有する第2のソースオペランドとを有する。第2のソースオペランドの各マスク要素は第1のソースパックデータ・オペランドの同じ相対位置にある異なるデータ要素に対応する。プロセッサは復号ユニットに連結された実行ユニットも備える。実行ユニットは、データ要素選択・統合命令に応答して、結果パックデータ・オペランドをデータ要素選択・統合命令によって表示される宛先記憶位置に記憶する。結果パックデータ・オペランドは、第2のソースオペランドの未マスクのマスク要素に対応し、結果パックデータ・オペランドの一部に統合された第1のソースパックデータ・オペランドの全てのデータ要素を含む。
実施例2は実施例1のプロセッサを含み、上記復号ユニットは、マスク要素を有する第2のソースオペランドとして即値を有する命令を復号する、マスク要素はマスクビットである。
実施例3は実施例1のプロセッサを含み、上記復号ユニットは、プロセッサの一組のパックデータ操作マスクレジスタの内の任意のパックデータ操作マスクレジスタである第2のソースオペランドを有する命令を復号する。また必要に応じて、プロセッサの命令セットの他の複数の命令は、一組のパックデータ操作マスクレジスタのレジスタを特定してプレディケーションオペランドを提供する。
実施例4は実施例1のプロセッサを含み、上記復号ユニットは、マスクビットである複数のマスク要素を有する第2のソースオペランドを有する命令を復号。
実施例5は実施例1のプロセッサを含み、上記復号ユニットは、パックデータ・オペランドである第2のソースオペランドを有する命令を復号する、上記マスク要素はマスクデータ要素になる。
実施例6は実施例1のプロセッサを含み、上記実行ユニットは上記命令に応答して、結果パックデータ・オペランドの最下位部に第1のソースパックデータ・オペランドと同じ順序で統合されている前記全てのデータ要素を含む結果パックデータ・オペランドを記憶する。
実施例7は実施例1のプロセッサを含み、上記実行ユニットは命令に応答して、結果パックデータ・オペランドの最上位部に第1のソースパックデータ・オペランドと同じ順序で統合されている前記全てのデータ要素を含む結果パックデータ・オペランドを記憶する。
実施例8は実施例1のプロセッサを含み、上記実行ユニットは命令に応答して、第2のソースオペランドの既マスクのマスク要素に対応する第1のソースパックデータ・オペランドの全てのデータ要素を除外する統合されたデータ要素を有する結果パックデータ・オペランドを記憶する。また必要に応じて、第1のソースパックデータ・オペランドは、未マスクのマスク要素に対応するデータ要素間の既マスクのマスク要素に対応する少なくとも1つのデータ要素を有する。
実施例9は実施例1〜8のいずれか1つのプロセッサを含み、上記復号ユニットは、第1のソースパックデータ・オペランドのデータ要素の大きさを表示する1または複数のビットを有する命令を復号する。
実施例10は実施例1〜8のいずれか1つのプロセッサを含み、上記復号ユニットは、少なくとも128ビットのビット幅を有する、必要に応じて複数の8ビットデータ要素および複数の16ビットデータ要素から選択した複数のデータ要素を有する第1のソースパックデータ・オペランドを有する命令を復号する。また必要に応じて、宛先記憶位置はプロセッサのパックデータレジスタを含む。
実施例11は実施例1〜8のいずれか1つのプロセッサを含み、上記復号ユニットは、第2のソースオペランドの未マスクのマスク要素に対応する第1のソースパックデータ・オペランドの前記全てのデータ要素が、第1のソースパックデータ・オペランド内のデータ要素のいかなる特定の配列にも、第2のソースオペランド内のマスク要素のいかなる特定の配列にもかかわらずに結果パックデータ・オペランドの一部に統合されることを表示するオペコードを有する命令を復号する。
実施例12は実施例1〜8のいずれか1つのプロセッサを含み、このプロセッサは汎用プロセッサを含む。また必要に応じて、上記宛先記憶位置はプロセッサのパックデータレジスタを含む。
実施例13はデータ要素選択・統合命令を受け取る工程を含むプロセッサ内の方法である。データ要素選択・統合命令は、複数のデータ要素を有する第1のソースパックデータ・オペランドと複数のマスク要素を有する第2のソースオペランドを有する。第2のソースオペランドの各マスク要素は第1のソースパックデータ・オペランドの同じ相対位置にある異なるデータ要素に対応する。本方法は、データ要素選択・統合命令に応答して結果パックデータ・オペランドを宛先記憶位置に記憶する工程も含む。この宛先記憶位置は、データ要素選択・統合命令によって表示される。結果パックデータ・オペランドは、第2のソースオペランドの未マスクのマスク要素に対応し、結果パックデータ・オペランドの一部に統合された第1のソースパックデータ・オペランドの全てのデータ要素を含む。
実施例14は実施例13の方法を含み、受け取る工程は、マスク要素を有する第2のソースオペランドとして即値を有する命令を受け取る工程を含む。
実施例15は実施例13の方法を含み、受け取る工程は、プレディケーションに使用する一組の専用のパックデータ操作マスクレジスタの内の任意のパックデータ操作マスクレジスタである第2のソースオペランドを有する命令を受け取る工程を含む。
実施例16は実施例13の方法を含み、この方法は、マスク要素としてマスクビットを有する第2のソースオペランドにアクセスする工程をさらに含む。
実施例17は実施例13の方法を含み、受け取る工程は、第1のソースパックデータ・オペランドのデータ要素の大きさを表示する1または複数のビットを有する命令を受け取る工程を含む。
実施例18は実施例13の方法を含み、受け取る工程は、少なくとも128ビットを有し、必要に応じて8ビットデータ要素および16ビットデータ要素の一方であるデータ要素を含む第1のソースパックデータ・オペランドを表示する命令を受け取る工程を含む。また必要に応じて、記憶する工程は、結果パックデータ・オペランドの最下位部に第1のソースパックデータ・オペランド内に出現する順序と同じ順序で統合された前記全てのデータ要素を有する結果パックデータ・オペランドを記憶する工程を含む。
実施例19は実施例13の方法を含み、この方法は、ネットワークからパケットを受け取る工程と、そのパケットの一部を第1のソースパックデータ・オペランドとして記憶する工程をさらに含む。この方法は必要に応じて、パケットのプロトコルを復号する工程と、必要に応じてパケットのプロトコルの復号に基づきパケットの一部のフローバイトの位置を決定する工程をさらに含んでもよい。本方法は必要に応じて、各フローバイトに対する第2のソースオペランドに未マスクのマスク要素を記憶する工程と、上記パケットの一部の他のバイトに対する第2のソースオペランドに既マスクの要素を記憶する工程をさらに含んでもよい。
実施例20は実施例13の方法を含み、第1のソースパックデータ・オペランドはネットワークから受け取ったパケット由来のデータ要素を有する。必要に応じて本方法は、結果パックデータ・オペランドの統合されたデータ要素に対して暗号化操作を実行する工程を含んでもよい。
実施例21はインターコネクトと、インターコネクトに連結されたプロセッサを含む命令を処理するシステムである。このプロセッサは、複数のデータ要素を有する第1のソースパックデータ・オペランドを有するデータ要素選択・統合命令を受け取る。この命令は、複数のマスク要素を有する第2のソースオペランドを有する。第2のソースオペランドの各マスク要素は第1のソースパックデータ・オペランドの同じ相対位置にある異なるデータ要素に対応する。この命令は宛先記憶位置を表示することにもなっている。プロセッサはこの命令に応答して、結果パックデータ・オペランドを宛先記憶位置に記憶する。結果パックデータ・オペランドは、第2のソースオペランドの未マスクのマスク要素に対応し、結果パックデータ・オペランドの一部に統合された第1のソースパックデータ・オペランドの全てのデータ要素を含む。本システムは、インターコネクトに連結された動的ランダムアクセスメモリ(DRAM)も備える。DRAMは一組のプロトコル復号命令を記憶しており、この一組の命令がプロセッサで実行されると、プロセッサは、第1のネットワークパケットのプロトコルを復号することと、第2のソースオペランドを生成させて、第1のソースパックデータ・オペランドに記憶されている第2のネットワークパケットのヘッダの少なくとも一部のフロー要素を未マスクにし、非フロー要素を既マスクにすることを含む操作を実行する。
実施例22は実施例21のシステムを含み、第2のソースオペランドは即値を含む。
実施例23は機械で読み取り可能な持続性記憶媒体を含む製造品である。この機械で読み取り可能な持続性記憶媒体はデータ要素選択・統合命令を記憶している。この命令は、複数のデータ要素を有する第1のソースパックデータ・オペランドと複数のマスク要素を有する第2のソースオペランドを有する。第2のソースオペランドの各マスク要素は、第1のソースパックデータ・オペランドの同じ相対位置の異なるデータ要素に対応する。この命令は宛先記憶位置を表示する。この命令が機械で実行されると、機械は、結果パックデータ・オペランドを宛先記憶位置に記憶することを含む操作を実行する。結果パックデータ・オペランドは、第2のソースオペランドの未マスクのマスク要素に対応し、結果パックデータ・オペランドの一部に統合された第1のソースパックデータ・オペランドの全てのデータ要素を含む。
実施例24は実施例23の製造品を含み、第2のソースオペランドは、プレディケーションに使用する一組の専用のパックデータ操作マスクレジスタの内の任意のパックデータ操作マスクレジスタである。
実施例25は実施例13〜20のいずれか1つの方法を実行するように作動するプロセッサまたは他の装置である。
実施例26は、実施例13〜20のいずれか1つの方法を実行する手段を含むプロセッサまたは他の装置である。
実施例27は、実施例13〜20のいずれか1つの方法を実行するモジュールを含むプロセッサまたは他の装置である。
実施例28は、実施例13〜20の任意の1つの方法を実行するモジュールおよび/または構成単位および/または論理回路および/または回路および/または手段の任意の組み合わせを含むプロセッサである。
実施例29は、機械可読持続性媒体を任意に含む製造品であり、本製造品は必要に応じて命令を記憶あるいは供給し、この命令がプロセッサ、コンピュータシステム、電子機器、または他の機械で実行されると、機械が実施例13〜20のいずれか1つの方法を実行するように作動する。
実施例30は、バスまたは他のインターコネクトと、このインターコネクトに連結された実施例1〜12のいずれか1つのプロセッサと、このインターコネクトに連結された、動的ランダムアクセスメモリ(DRAM)、ネットワークインタフェース、画像チップ、無線通信チップ、移動通信用大域システム(GSM(登録商標))アンテナ、相変化メモリ、および動画カメラから選択される少なくとも1つの構成要素とを含むコンピュータシステム、他の電子機器、または他の装置である。
実施例31は実質的に本明細書に記載のプロセッサまたは他の装置である。
実施例32は実質的に本明細書に記載のいずれかの方法を実行するように作動するプロセッサまたは他の装置である。
実施例33は実質的に本明細書に記載のいずれかのデータ要素選択・圧縮命令を実行するように作動するプロセッサまたは他の装置である。
実施例34は第1の命令セットの命令を復号する復号ユニットを含むプロセッサまたは他の装置である。この復号ユニットは、第1の命令をエミュレートする第1の命令セットの1または複数の命令を受け取る。第1の命令は、実質的に本明細書に開示されたいずれのデータ要素選択・圧縮命令であってもよく、第2の異なる命令セットとなるものである。このプロセッサまたは他の装置は、第1の命令セットの1または複数の命令を実行する復号ユニットに連結された1または複数の実行ユニットを含む。この1または複数の実行ユニットは、第1の命令セットの1または複数の命令に応答して結果を宛先記憶位置に記憶する。この結果は実質的に本明細書に開示されたデータ要素選択・圧縮命令のいずれの結果を含んでもよい。
実施例35は第1の命令セットの命令を復号する復号ユニットを有するプロセッサを含むコンピュータシステムまた他の電子機器である。このプロセッサは1または複数の実行ユニットも有する。この電子機器はプロセッサに連結された記憶装置も含む。この記憶装置は第1の命令を記憶する、この第1の命令は実質的に本明細書に開示されたいずれのデータ要素選択・圧縮命令であってもよく、第2の異なる命令セットとなるものである。記憶装置は、第1の命令を第1の命令セットの1または複数の命令に変換する命令を記憶することにもなっている。第1の命令セットの1または複数の命令がプロセッサで実行されたと、プロセッサが結果を宛先記憶位置に記憶するようになっている。この結果は実質的に本明細書に開示されたデータ要素選択・圧縮命令のいずれの結果を含んでもよい。