(58)【調査した分野】(Int.Cl.,DB名)
前記実行ユニットが、前記命令に応答して、所与のパック結果データ要素に、前記第1ソースパックデータの前記第1の複数のパックデータ要素のうちのどれが、前記所与のパック結果データ要素に対応する前記第2ソースパックデータのパックデータ要素と等しいかを示す複数ビット比較マスクを格納する、請求項1に記載の装置。
前記実行ユニットが、前記命令に応答して、前記第1ソースパックデータおよび前記第2ソースパックデータの一方のパックデータ要素のサブセットのみと前記第1ソースパックデータおよび前記第2ソースパックデータの他方のパックデータ要素との前記比較の結果を示す複数ビット比較マスクを格納する、請求項1に記載の装置。
前記格納することが、前記第1ソースパックデータおよび前記第2ソースパックデータの一方のパックデータ要素のサブセットのみと前記第1ソースパックデータおよび前記第2ソースパックデータの他方のパックデータ要素との前記比較の結果を示す複数ビット比較マスクを格納することを含む、請求項8に記載の方法。
前記受信することが、第1の生物学的配列を表す前記第1ソースパックデータを示し、第2の生物学的配列を表す前記第2ソースパックデータを示す前記命令を受信することを含む、請求項8に記載の方法。
【発明を実施するための形態】
【0036】
以下の説明では、数多くの特定の細部が記載されている(例えば、特定の命令演算、パックデータフォーマット、マスクの種類、オペランドの指示方法、プロセッサ構成、マイクロアーキテクチャ細部、演算の順序等)。しかし、諸実施形態はこれらの特定の細部を備えずに実施されてもよい。他の例では、説明の理解を不明瞭にすることを回避するために、周知の回路、構造および技法は詳細に示していない。
【0037】
本明細書に開示されているのは、種々の複数データ要素対複数データ要素比較命令、命令を実行するためのプロセッサ、命令を処理または実行する際にプロセッサによって遂行される方法、ならびに命令を処理または実行するための1つ以上のプロセッサを組み込むシステムである。
図1は、1つ以上の複数データ要素対複数データ要素比較命令103を含む命令セット102を有するプロセッサ100の一実施形態のブロック図である。実施形態によっては、プロセッサは、汎用プロセッサ(例えば、デスクトップ、ラップトップ、および同様のコンピュータに使用される種類の汎用マイクロプロセッサ)であってよい。代替的に、プロセッサは専用プロセッサであってもよい。好適な専用プロセッサの例としては、以下のものに限定されるわけではないが、ほんの数例を挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(digital signal processor、DSP)、およびコントローラ(例えば、マイクロコントローラ)が挙げられる。プロセッサは、種々の複合命令セットコンピューティング(complex instruction set computing、CISC)プロセッサ、種々の縮小命令セットコンピューティング(reduced instruction set computing、RISC)プロセッサ、種々の超長命令語(very long instruction word、VLIW)プロセッサ、これらの種々のハイブリッド、または全く別の種類のプロセッサのいずれのものであってもよい。
【0038】
プロセッサは命令セットアーキテクチャ(instruction set architecture、ISA)101を有する。ISAは、プログラミングに関連するプロセッサのアーキテクチャの一部を表し、通例、プロセッサの、ネイティブ命令、アーキテクチャレジスタ、データ型、アドレス指定方式、メモリアーキテクチャ、および同様のものを含む。ISAは、ISAを実装するために選択される特定のプロセッサ設計技法を一般的に表すマイクロアーキテクチャとは区別される。
【0039】
ISAは、アーキテクチャ的に可視のレジスタ(例えば、アーキテクチャレジスタファイル)107を含む。アーキテクチャレジスタは本明細書において単にレジスタと呼ばれる場合もある。特に指定のない限りまたは明らかでない限り、アーキテクチャレジスタ、レジスタファイル、およびレジスタという表現は、本明細書において、ソフトウェアおよび/またはプログラマから可視のレジスタ、ならびに/あるいはオペランドを識別するべく汎用マクロ命令によって指定されるレジスタに言及するために用いられる。これらのレジスタは、所与のマイクロアーキテクチャのその他の非アーキテクチャレジスタまたはアーキテクチャ的に可視でないレジスタ(例えば、命令によって用いられる一時レジスタ、リオーダバッファ、リタイアメントレジスタ等)とは対照をなす。レジスタは一般的にオンダイのプロセッサ記憶位置を表す。図示のレジスタは、パックデータ、ベクトルデータ、またはSIMDデータを格納するように動作可能であるパックデータレジスタ108を含む。アーキテクチャレジスタは汎用レジスタ109を含んでもよく、汎用レジスタ109は、実施形態によっては、複数要素対複数要素比較命令によって任意追加的に指示され、ソースオペランドを提供する(例えば、データ要素のサブセットを示す、宛先内に含まれるべき比較結果を示すオフセットを提供する、等)。
【0040】
図示のISAは命令セット102を含む。命令セットの命令は、マイクロ命令またはマイクロ演算(例えば、マクロ命令をデコードする結果生じるもの)とは対照的に、マクロ命令(例えば、プロセッサに実行のために提供されるアセンブリ言語またはマシンレベル命令)を表す。命令セットは1つ以上の複数データ要素対複数データ要素比較命令103を含む。以下に、複数データ要素対複数データ要素比較命令の様々な実施形態をさらに開示する。実施形態によっては、命令103は1つ以上の全データ要素対全データ要素比較命令104を含んでよい。実施形態によっては、命令103は、1つ以上の指定サブセット対全体、または指定サブセット対指定サブセット比較命令105を含んでよい。実施形態によっては、命令103は、宛先内に格納させる比較の部分を選択する(例えば、選択までのオフセットを示す)ように動作可能な1つ以上の複数要素対複数要素比較命令を含んでよい。
【0041】
プロセッサは実行論理110も含む。実行論理は、命令セットの命令(例えば、複数データ要素対複数データ要素比較命令103)を実行または処理するように動作可能である。実施形態によっては、実行論理は、これらの命令を実行するための特定の論理(例えば、場合によってはファームウェアと組み合わせられる、特定の回路機構またはハードウェア)を含んでよい。
【0042】
図2は、複数データ要素対複数データ要素比較命令203の一実施形態を実行するように動作可能である実行ユニット210を有する命令処理装置200の一実施形態のブロック図である。実施形態によっては、命令処理装置はプロセッサであってよく、および/またはプロセッサ内に含まれてよい。例えば、実施形態によっては、命令処理装置は
図1のプロセッサであってよく、またはその中に含まれてもよい。代替的に、命令処理装置は、同様のプロセッサまたは異なるプロセッサ内に含まれてもよい。さらに、
図1のプロセッサは、同様の命令処理装置または異なる命令処理装置のいずれかを含んでもよい。
【0043】
装置200は複数データ要素対複数データ要素比較命令203を受信してよい。例えば、命令は、命令フェッチユニット、命令キュー、または同様のものから受信されてよい。複数データ要素対複数データ要素比較命令は、装置のISAの機械コード命令、アセンブリ言語命令、マクロ命令、または制御信号を表してよい。複数データ要素対複数データ要素比較命令は、(例えば、第1ソースパックデータレジスタ212内の)第1ソースパックデータ213を(例えば、1つ以上のフィールドまたは一連のビットを通じて)明示的に指定するか、または別の方法で指示してよく(例えば、暗黙的に示す)、(例えば、第2ソースパックデータレジスタ214内の)第2ソースパックデータ215を指定するかまたは別の方法で指示してよく、パックデータ結果217が格納されるデスティネーション記憶位置216を指定するかまたは別の方法で指示してよい(例えば、暗黙的に示す)。
【0044】
図示の命令処理装置は命令デコードユニットまたはデコーダ211を含む。デコーダは、比較的高レベルの機械コードあるいはアセンブリ言語命令またはマクロ命令を受信してデコードし、1つ以上の比較的低レベルのマイクロ命令、マイクロ演算、マイクロコード入口点、あるいは高レベル命令を反映する、表す、および/またはそれらから生成されるその他の比較的低レベルの命令または制御信号を出力してよい。1つ以上の低レベル命令または制御信号は、1つ以上の低レベル(例えば、回路レベルまたはハードウェアレベル)演算を通じて、高レベル命令を実施してよい。デコーダは、以下のものに限定されるわけではないが、マイクロコード・リードオンリーメモリ(read only memories、ROM)、ルックアップテーブル、ハードウェア実装、プログラム可能論理アレイ(programmable logic array、PLA)、および当該技術分野において周知のデコーダを実装するために用いられるその他の機構を含む、種々の異なる機構を用いて実装されてよい。
【0045】
他の実施形態では、命令エミュレータ、トランスレータ、モーフィングプログラム、インタプリタ、またはその他の命令変換論理が用いられてよい。様々な種類の命令変換論理が当技術分野において知られており、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせの形で実装されてよい。命令変換論理は命令を受信し、この命令を、1つ以上の対応する生成命令または制御信号にエミュレート、変換、モーフィング、解釈実行するか、または別の方法で変換してよい。他の実施形態では、命令変換論理およびデコーダの両方が用いられてよい。例えば、装置は、受信した機械コード命令を1つ以上の中間命令に変換するための命令変換論理、ならびに1つ以上の中間命令を、装置のネイティブハードウェア(例えば、実行ユニット)によって実行可能な1つ以上の低レベル命令または制御信号にデコードするためのデコーダを有してよい。命令変換論理の一部または全ては、命令処理装置の外部、例えば、独立したダイ上および/またはメモリ内等、に位置付けられてよい。
【0046】
装置200は一連のパックデータレジスタ208も含む。パックデータレジスタの各々は、パックデータ、ベクトルデータ、またはSIMDデータを格納するように動作可能であるオンダイの記憶位置を表してよい。実施形態によっては、第1ソースパックデータ213は第1ソースパックデータレジスタ212内に格納されてよく、第2ソースパックデータ215は第2ソースパックデータレジスタ214内に格納されてよく、パックデータ結果217は、第3パックデータレジスタであってよい、デスティネーション記憶位置216内に格納されてよい。代替的に、メモリ位置、またはその他の記憶位置がこれらのうちの1つ以上のために用いられてもよい。パックデータレジスタは、周知の技法を用い、種々のマイクロアーキテクチャで種々の方法で実装されてよく、いかなる特定の種類の回路にも限定されない。様々な種類のレジスタが好適である。好適な種類のレジスタの例としては、以下のものに限定されるわけではないが、専用物理レジスタ、レジスタリネーミングを用いる動的割り当て物理レジスタ、およびこれらの組み合わせが挙げられる。
【0047】
図2を再び参照すると、実行ユニット210はデコーダ211およびパックデータレジスタ208と結合される。例として、実行ユニットは、算術論理演算ユニット、算術および論理演算を遂行するためのデジタル回路、論理ユニット、データ要素を比較するための比較論理を含む実行ユニットまたは機能ユニット、あるいは同様のものを含んでよい。実行ユニットは、複数データ要素対複数データ要素比較命令203を表す、および/またはそれから生成される1つ以上のデコードされた、または別の方法で変換された命令または制御信号を受信してよい。命令は、第1の複数のパックデータ要素を含む第1ソースパックデータ213を指定するかまたは別の方法で指示し(例えば、第1パックデータレジスタ212を指定するかまたは別の方法で指示し)、第2の複数のパックデータ要素を含む第2ソースパックデータ215を指定するかまたは別の方法で指示し(例えば、第2パックデータレジスタ214を指定するかまたは別の方法で指示し)、デスティネーション記憶位置216を指定するかまたは別の方法で指示してよい。
【0048】
実行ユニットは、複数データ要素対複数データ要素比較命令203に応答して、および/またはその結果として、デスティネーション記憶位置216内にパックデータ結果217を格納するように動作可能である。実行ユニットおよび/または命令処理装置は、複数データ要素対複数データ要素比較命令203を実行し、命令に応答して(例えば、命令からデコードされるかまたは別の方法で生成される1つ以上の命令または制御信号に応答して)結果217を格納するように動作可能である特定または特別の論理(例えば、場合によってはファームウェアおよび/またはソフトウェアと組み合わせられる回路機構またはその他のハードウェア)を含んでよい。
【0049】
パックデータ結果217は複数のパック結果データ要素を含んでよい。実施形態によっては、パック結果データ要素の各々は複数ビット比較マスクを有してよい。例えば、実施形態によっては、パック結果データ要素の各々は、第2ソースパックデータ215のパックデータ要素の別個のものに対応してよい。実施形態によっては、パック結果データ要素の各々は、第1ソースパックデータの複数のパックデータ要素と、パック結果データ要素に対応する第2ソースのパックデータ要素との比較の結果を示す複数ビット比較マスクを含んでよい。実施形態によっては、パック結果データ要素の各々は、第2ソースパックデータ215の対応パックデータ要素に対応し、それについての比較結果を示す複数ビット比較マスクを含んでよい。実施形態によっては、各複数ビット比較マスクは、第2ソースパックデータ215の関連/対応パックデータ要素と比較される第1ソースパックデータ213の各対応パックデータ要素毎に異なる比較マスクビットを含んでよい。実施形態によっては、各比較マスクビットは、対応する比較の結果を指示してよい。実施形態によっては、各マスクは、第2ソースパックデータからの対応データ要素との一致がいくつあるのか、それらの一致が第1ソースパックデータ内のどのポジションで生じているのかを示す。
【0050】
実施形態によっては、所与のパック結果データ要素内の複数ビット比較マスクは、第1ソースパックデータ213のパックデータ要素のうちのどれが、その所与のパック結果データ要素に対応する第2ソースパックデータ215のパックデータ要素と等しいのかを指示してよい。実施形態によっては、比較は相当に関するものであってよく、各比較マスクビットは、比較されたデータ要素同士が等しいことを示すべく第1の2進値を有するか(例えば、1つの可能な規則に従って2進値の1に設定される)、または比較されたデータ要素同士が等しくないことを示すべく第2の2進値を有してよい(例えば、2進値のゼロにクリアされる)。他の実施形態では、他の比較(例えば、超過、未満、等)が任意選択的に用いられてよい。
【0051】
実施形態によっては、パックデータ結果は、第1ソースパックデータの全データ要素と第2ソースパックデータの全データ要素との比較の結果を指示してよい。他の実施形態では、パックデータ結果は、一方のソースパックデータのデータ要素のサブセットのみと、もう一方のソースパックデータのデータ要素の全て、またはサブセットのみのいずれかとの比較の結果を指示してよい。実施形態によっては、命令は、比較されるサブセットまたはサブセット同士を指定するかまたは別の方法で指示してよい。例えば、実施形態によっては、命令は、第1および/または第2ソースパックデータのサブセットのみに比較を限定して用いるために、例えば汎用レジスタ209の暗黙のレジスタ内の、第1サブセット218、および任意追加的に、例えば汎用レジスタ209の暗黙のレジスタ内の、第2サブセット219を任意追加的に明示的に指定するかまたは暗黙的に指示してよい。
【0052】
説明を不明瞭にすることを回避するために、比較的単純な命令処理装置200を示し、説明した。他の実施形態では、装置は、プロセッサに含まれる他の周知の構成要素を任意追加的に含んでもよい。このような構成要素の例としては、以下のものに限定されるわけではないが、分岐予測ユニット、命令フェッチユニット、命令およびデータキャッシュ、命令およびデータ・トランスレーション・ルックアサイド・バッファ、プリフェッチバッファ、マイクロ命令キュー、マイクロ命令シーケンサ、レジスタリネーミングユニット、命令スケジューリングユニット、バスインタフェースユニット、第2レベルまたはより高レベルのキャッシュ、リタイアメントユニット、プロセッサ内に含まれるその他の構成要素、ならびにこれらの種々の組み合わせが挙げられる。プロセッサ内の構成要素の組み合わせおよび構成は文字通り数多くの様々なものが存在し、実施形態はいかなる特定の組み合せまたは構成にも限定されない。諸実施形態は、複数のコアを有するプロセッサ、論理プロセッサ、または実行エンジンであって、それらのうち少なくとも1つは、本明細書に開示されている命令の一実施形態を実行するように動作可能な実行論理を有する実行エンジン内に含まれてよい。
【0053】
図3は、複数データ要素対複数データ要素比較命令の一実施形態を処理する方法325の一実施形態のブロックフロー図である。種々の実施形態において、本方法は、汎用、専用プロセッサ、あるいはその他の命令処理装置またはデジタル論理デバイスによって遂行されてよい。実施形態によっては、
図3の演算および/または方法は、
図1のプロセッサおよび/または
図2の装置によって、および/またはその内部で遂行されてよい。本明細書において
図1〜2のプロセッサおよび装置に関して記載されている構成要素、特徴、および特定の任意追加的な細部は、
図3の演算および/または方法にも必要に応じて適用される。代替的に、
図3の演算および/または方法が、同様のまたは完全に異なるプロセッサまたは装置によって、および/またはその内部で遂行されてもよい。さらに、
図1のプロセッサおよび/または
図2の装置が、
図3のものと同じであるか、類似しているか、またはそれとは完全に異なる演算および/または方法を遂行してよい。
【0054】
本方法は、ブロック326において、複数データ要素対複数データ要素比較命令を受信することを含む。種々の態様において、命令は、プロセッサ、命令処理装置、またはそれらの一部(例えば、命令フェッチユニット、デコーダ、命令コンバータ等)において受信されてよい。種々の態様において、命令は、オフダイソースから(例えば、主メモリ、ディスク、もしくは相互接続部から)、またはオンダイソースから(例えば、命令キャッシュから)受信されてよい。複数データ要素対複数データ要素比較命令は、第1の複数のパックデータ要素を有する第1ソースパックデータ、第2の複数のパックデータ要素を有する第2ソースパックデータ、およびデスティネーション記憶位置を指定するかまたは別の方法で指示してよい。
【0055】
ブロック327において、複数データ要素対複数データ要素比較命令に応答して、および/またはその結果として、複数のパック結果データ要素を含むパックデータ結果がデスティネーション記憶位置内に格納されてよい。典型的には、実行ユニット、命令処理装置、あるいは汎用または専用プロセッサが、命令によって指定された演算を遂行し、パックデータ結果を格納してよい。実施形態によってはパック結果データ要素の各々は、第2ソースパックデータのパックデータ要素の別個のものに対応してよい。実施形態によっては、パック結果データ要素の各々は複数ビット比較マスクを含んでよい。実施形態によっては、各複数ビット比較マスクは、パック結果データ要素に対応する第2ソースのパックデータ要素と比較された第1ソースパックデータの各対応パックデータ要素毎に異なるマスクビットを含んでよい。実施形態によっては、各マスクビットは、対応する比較の結果を指示してよい。同じ命令を任意追加的に処理し、および/または同じ装置内で任意追加的に遂行されてよい方法内に、
図2に関連して上述した他の任意追加的な細部が任意追加的に含まれてもよい。
【0056】
図示の方法は、アーキテクチャ的に可視の演算(例えば、ソフトウェアの視点から可視のもの)を伴う。他の実施形態では、本方法は1つ以上のマイクロアーキテクチャ演算を任意追加的に含んでよい。例として、命令がアウトオブオーダでフェッチ、デコード、場合によってはスケジュールされてよく、ソースオペランドがアクセスされてよく、実行論理が、命令を実施するべくマイクロアーキテクチャ演算を遂行するために使用可能にされてよく、実行論理がマイクロアーキテクチャ演算を遂行してよく、結果が任意追加的に元のプログラム順に並べ直されてよい、等である。様々なマイクロアーキテクチャ上の演算遂行方法が企図されている。例えば、実施形態によっては、例えば、
図9と関連して説明されるもの等の、比較マスクビットゼロ拡張演算、パック左シフト論理演算、および論理OR演算が任意追加的に遂行されてよい。他の実施形態では、これらのマイクロアーキテクチャ演算のいずれかが任意追加的に
図3の方法に追加されてよい。ただし、本方法はその他の異なるマイクロアーキテクチャ演算によって実装されてもよい。
【0057】
図4は、好適なパックデータフォーマットのいくつかの実施形態例を示すブロック図である。128ビットパックバイトフォーマット428は128ビット幅であり、図において最下位から最上位ビットポジションまでB1〜B16と標識されている16個の8ビット幅バイトデータ要素を含む。256ビットパックワードフォーマット429は256ビット幅であり、図において最下位から最上位ビットポジションまでW1〜W16と標識されている16個の16ビット幅ワードデータ要素を含む。256ビットフォーマットはページに収まるように2片に分割されて示されているが、全体のフォーマットは、実施形態によっては、単一の物理レジスタまたは論理レジスタ内に含まれてよい。これらはほんの数例の実例にすぎない。
【0058】
その他のパックデータフォーマットも好適である。例えば、他の好適な128ビットパックデータフォーマットとしては、128ビットパック16ビットワードフォーマットおよび128ビットパック32ビットダブルワードフォーマットがある。他の好適な256ビットパックデータフォーマットとしては、256ビットパック8ビットバイトフォーマットおよび256ビットパック32ビットダブルワードフォーマットがある。64ビット幅パックデータ8ビットバイトフォーマット等の、128ビットよりもより小さなパックデータフォーマットも好適である。512ビット幅またはそれを超える幅のパック8ビットバイト、16ビットワード、あるいは32ビットダブルワードフォーマット等の、256ビットよりも大きなパックデータフォーマットも好適である。一般的に、パックデータオペランド内のパックデータ要素の数は、パックデータオペランドのビット単位サイズをパックデータ要素のビット単位サイズで割ったものと等しい。
【0059】
図5は、複数データ要素対複数データ要素比較命令の一実施形態に応答して遂行されてよい複数データ要素対複数データ要素比較演算539の一実施形態を示すブロック図である。命令は、第1セットのN個のパックデータ要素540−1〜540−Nを含む第1ソースパックデータ513を指定するかまたは別の方法で指示してよく、第2セットのN個のパックデータ要素541−1〜541−Nを含む第2ソースパックデータ515を指定するかまたは別の方法で指示してよい。図示の例では、第1ソースパックデータ513において、1番目の最下位データ要素540−1が、値Aを表すデータを格納し、2番目のデータ要素540−2が、値Bを表すデータを格納し、3番目のデータ要素540−3が、値Cを表すデータを格納し、N番目の最上位データ要素540−Nが、値Bを表すデータを格納している。図示の例では、第2ソースパックデータ515において、1番目の最下位データ要素541−1が、値Bを表すデータを格納し、2番目のデータ要素541−2が、値Aを表すデータを格納し、3番目のデータ要素541−3が、値Bを表すデータを格納し、N番目の最上位データ要素541−Nが、値Aを表すデータを格納している。
【0060】
数Nは、ソースパックデータのビット単位サイズをパックデータ要素のビット単位サイズで割ったものと等しくてよい。通例、数Nは、多くの場合、約4から約64のオーダ、またはさらにより大きな数に及ぶ整数であってよい。Nの具体例としては、以下のものに限定されるわけではないが、4、8、16、32、および64がある。種々の実施形態において、ソースパックデータの幅は、64ビット、128ビット、256ビット、512ビット、またはさらにより大きな幅であってよい。ただし、本発明の範囲はこれらの幅のみに限定されない。種々の実施形態において、パックデータ要素の幅は、8ビットバイト、16ビットワード、または32ビットダブルワードであってよい。ただし、本発明の範囲はこれらの幅のみに限定されない。通例、命令がストリングおよび/またはテキスト素片比較に用いられる実施形態では、データ要素の幅は通例、8ビットバイトまたは16ビットワードのいずれかであってよい。これは、関心のあるほとんどの英数字値は8ビットバイトまたは少なくとも16ビットワードで表すことができるためである。ただし、所望の場合には、より大きな幅のフォーマット(例えば、32ビットダブルワードフォーマット)が用いられてもよい(例えば、他の演算との互換性のため、フォーマット変換を回避するため、効率性のため、等)。実施形態によっては、第1および第2ソースパックデータ内のデータ要素は符号付き整数または符号なし整数のいずれかであってよい。
【0061】
命令に応答して、プロセッサまたはその他の装置がパックデータ結果517を生成し、命令によって指定されるかまたは別の方法で指示されたデスティネーション記憶位置516内に格納するように動作可能であってよい。実施形態によっては、命令はプロセッサまたはその他の装置に、全データ要素−全データ要素比較マスク542を中間結果として生成させてよい。全体−全体比較マスク542は、第1ソースパックデータのN個のデータ要素の各々/全てと第2ソースパックデータのN個のデータ要素の各々/全てとの間で遂行されるN×N比較についてのN×N比較結果を含んでよい。すなわち、全要素対全要素比較が遂行されてよい。
【0062】
実施形態によっては、マスク内の各比較結果は、相当に関して比較されたデータ要素の比較の結果を指示してよく、各比較結果は、比較されたデータ要素同士が等しいことを示すために第1の2進値(例えば、2進値の1にセットされるかまたは論理的に真とされる)を有するか、あるいは比較されたデータ要素同士が等しくないことを示すために第2の2進値(例えば、2進値のゼロにクリアされるかまたは論理的に偽とされる)を有し得る単一ビットであってよい。その他の規則もあり得る。図示のように、第1ソースパックデータ513の1番目のデータ要素540−1(「A」の値を表す)と第2ソースパックデータ515の1番目のデータ要素541−1(「B」の値を表す)との比較については、これらの値は不等であるので、全体−全体比較マスクの上右隅内に2進値−0が示されている。対照的に、第1ソースパックデータ513の1番目のデータ要素540−1(「A」の値を表す)と第2ソースパックデータ515の2番目のデータ要素541−2(「A」の値を表す)との比較については、これらの値は等しいので、全体−全体比較マスク内のそのポジションの1つ左のポジションに2進値−1が示されている。一致値の連続が、全体−全体比較マスク内において、対角方向に沿った2進値−1群として現れており、対角方向のものを丸で囲んだセットによって示されている。全体−全体比較マスクは、一部の実施形態において任意追加的に生成されるマイクロアーキテクチャの態様であるが、他の実施形態においては生成を必要としない。むしろ、デスティネーション内の結果は、中間結果を用いずに生成され、格納されてもよい。
【0063】
図5を再び参照すると、実施形態によっては、デスティネーション記憶位置516内に格納されるパックデータ結果517は、N個のNビット比較マスクからなるセットを含んでよい。例えば、パックデータ結果は、一連のN個のパック結果データ要素544−1〜544−Nを含んでよい。実施形態によっては、N個のパック結果データ要素544−1〜544−Nの各々は、第2ソースパックデータ515のN個のパックデータ要素541−1〜541−Nのうちの、対応する相対ポジションにおける1つに対応してよい。例えば、1番目のパック結果データ要素544−1は第2ソースの1番目のパックデータ要素541−1に対応してよく、3番目のパック結果データ要素544−3は第2ソースの3番目のパックデータ要素541−3に対応してよく、以下同様である。実施形態によっては、N個のパック結果データ要素544の各々はNビット比較マスクを有してよい。実施形態によっては、各Nビット比較マスクは、第2ソースパックデータ515の対応パックデータ要素541に対応し、それについての比較結果を指示してよい。実施形態によっては、各Nビット比較マスクは、第2ソースパックデータ515の関連/対応パックデータ要素と比較される、(命令が、サブセットが比較されるべきであることを指示しているかどうかなど、命令に応じた)第1ソースパックデータ513のN個の異なる対応パックデータ要素の各々毎に、異なる比較マスクビットを含んでよい
【0064】
実施形態によっては、各比較マスクビットは対応する比較の結果を指示してよい(例えば、比較された値同士が等しければ2進値−1とされ、またはそれらが等しくなければ2進値−0とされる)。例えば、Nビット比較マスクのビットkは、第1ソースパックデータのk番目のデータ要素と、そのNビット比較マスク全体が対応する第2ソースパックデータのデータ要素との比較についての比較結果を表してよい。少なくとも概念的に、各マスクビットは、全体−全体比較マスク542の単一の列の一連のマスクビットを表してよい。例えば、1番目の結果パックデータ要素544−1は、値(右から左へ)「0,1,0,・・・1」を含み、この値は、第2ソース515の(Nビットマスクが対応する)1番目のデータ要素541−1内の値「B」は、第1ソースの1番目のデータ要素540−1内の値「A」とは等しくなく、第1ソースの2番目のデータ要素540−2内の値「B」とは等しく、第1ソースの3番目のデータ要素540−3内の値「C」とは等しくなく、第1ソースのN番目のデータ要素540−N内の値「B」とは等しいことを指示してよい。実施形態によっては、各マスクは、第2ソースパックデータの対応するデータ要素との一致がいくつあるのか、それらの一致は第1ソースパックデータ内のどのポジションで生じているのかを示す。
【0065】
図6は、命令の一実施形態に応答して、16ビットワード要素を有する128ビット幅パックソースに対して遂行されてよい比較演算639の一実施形態例を示すブロック図である。命令は、第1セットの8つのパック16ビットワードデータ要素640−1〜640−8を含む第1ソース128ビット幅パックデータ613を指定するかまたは別の方法で指示してよく、第2セットの8つのパック16ビットワードデータ要素641−1〜641−8を含む第2ソース128ビット幅パックデータ615を指定するかまたは別の方法で指示してよい。
【0066】
実施形態によっては、命令は、第1ソースパックデータのデータ要素のうちのいくつ(例えば、サブセット)が比較されるのかを示すための任意追加の第3ソース647(例えば、暗黙の汎用レジスタ)、および/または第2ソースパックデータのデータ要素のうちのいくつ(例えば、サブセット)が比較されるのかを示すための任意追加の第4ソース648(例えば、暗黙の汎用レジスタ)を任意追加的に指定するかまたは別の方法で指示してよい。代替的に、この情報を提供するために、命令の1つ以上の即値が用いられてもよい。図示の例では、第3ソース647は、第1ソースパックデータの8つのデータ要素のうちの最下位の5つのみが比較されることを規定し、第4ソース648は、第2ソースパックデータの8つのデータ要素全てが比較されることを規定している。ただし、これは単なる1つの実例にすぎない。
【0067】
命令に応答して、プロセッサまたはその他の装置が、パックデータ結果617を生成し、命令によって指定されるかまたはその他の方法で指示されたデスティネーション記憶位置616内に格納するように動作可能であってよい。第3ソース647および/または第4ソース648によって1つ以上のサブセットが指示される一部の実施形態では、命令は、プロセッサまたはその他の装置に全有効データ要素−全有効データ要素比較マスク642を中間結果として生成させてよい。全有効−全有効比較マスク642は、第3および第4ソース内の値に応じて遂行される比較のサブセットについての比較結果を含んでよい。この特定例では、40個の比較結果(すなわち、8×5)が生成される。実施形態によっては、比較が遂行されない比較マスクのビット(例えば、第1ソースの最上位の3つのデータ要素のためのもの)は所定の値に強制設定されてよく、例えば図において「F0」によって示されているように2進値−0に強制設定されてよい。
【0068】
実施形態によっては、デスティネーション記憶位置616内に格納されるパックデータ結果617は一連の8つの8ビット比較マスクを含んでよい。例えば、パックデータ結果は一連の8つのパック結果データ要素644−1〜644−Nを含んでよい。実施形態によっては、これらの8つのパック結果データ要素644の各々は、第2ソースパックデータ615の8つのパックデータ要素641のうちの、対応する相対ポジション内の1つに対応してよい。実施形態によっては、8つのパック結果データ要素644の各々は8ビット比較マスクを有してよい。実施形態によっては、各8ビット比較マスクは第2ソースパックデータ615の対応パックデータ要素641に対応し、それについての比較結果を指示してよい。実施形態によっては、各8ビット比較マスクは、第2ソースパックデータ615の関連/対応パックデータ要素と比較される、(例えば、第3ソース内の値に応じた)第1ソースパックデータ613の8つの異なる対応パックデータ要素の各有効なもの毎に、異なる比較マスクビットを含んでよい。8ビットのうちの他のものは強制設定(例えばF0)ビットであってよい。上述同様に、少なくとも概念的に、各8ビットマスクはマスク642の単一の列の一連のマスクビットを表してよい。
【0069】
図7は、命令の一実施形態に応答して、8ビットバイト要素を有する128ビット幅パックソースに対して遂行されてよい比較演算739の一実施形態例を示すブロック図である。命令は、第1セットの16個のパック8ビットバイトデータ要素740−1〜740−16を含む第1ソース128ビット幅パックデータ713を指定するかまたは別の方法で指示してよく、第2セットの16個のパック8ビットバイトデータ要素741−1〜741−16を含む第2ソース128ビット幅パックデータ715を指定するかまたは別の方法で指示してよい。
【0070】
実施形態によっては、命令は、第1ソースパックデータのデータ要素のうちのいくつ(例えば、サブセット)が比較されるのかを示すための任意追加の第3ソース747(例えば、暗黙の汎用レジスタ)を任意追加的に指定するかまたは別の方法で指示してよく、および/または命令は、第2ソースパックデータのデータ要素のうちのいくつ(例えば、サブセット)が比較されるのかを示すための任意追加の第4ソース748(例えば、暗黙の汎用レジスタ)を任意追加的に指定するかまたは別の方法で指示してよい。図示の例では、第3ソース747は、第1ソースパックデータの16個のデータ要素のうちの最下位の14個のみが比較されることを規定し、第4ソース748は、第2ソースパックデータの16個のデータ要素のうちの最下位の15個のみが比較されることを規定している。ただし、これは単なる1つの実例にすぎない。他の実施形態では、最上位または中間範囲が任意選択的に用いられてもよい。これらの値は、番号、ポジション、インデックス、中間範囲など等の、様々な方法で指定されてよい。
【0071】
命令に応答して、プロセッサまたはその他の装置が、パックデータ結果717を生成し、命令によって指定されるかまたはその他の方法で指示されたデスティネーション記憶位置716内に格納するように動作可能であってよい。第3ソース747および/または第4ソース748によって1つ以上のサブセットが指示される一部の実施形態では、命令はプロセッサまたはその他の装置に全有効データ要素−全有効データ要素比較マスク742を中間結果として生成させてよい。これは上述のものと同様であってもよく、または異なってもよい。
【0072】
実施形態によっては、パックデータ結果717は一連の16個の16ビット比較マスクを含んでよい。例えば、パックデータ結果は一連の16個のパック結果データ要素744−1〜744−16を含んでよい。実施形態によっては、デスティネーション記憶位置は、第1および第2ソースパックデータの各々の2倍の幅がある、256ビットレジスタまたはその他の記憶位置を表してよい。実施形態によっては、暗黙のデスティネーションレジスタが用いられてよい。他の実施形態では、デスティネーションレジスタは、例えば、インテルアーキテクチャベクトル拡張(Vector Extensions、VEX)コード体系を用いて指定されてよい。別の選択物として、2つの128ビットレジスタまたはその他の記憶位置が任意追加的に用いられてもよい。実施形態によっては、これらの16個のパック結果データ要素744の各々は、第2ソースパックデータ715の16個のパックデータ要素741のうちの、対応する相対ポジション内の1つに対応してよい。実施形態によっては、16個のパック結果データ要素744の各々は16ビット比較マスクを有してよい。実施形態によっては、各16ビット比較マスクは第2ソースパックデータ715の対応パックデータ要素741に対応し、それについての比較結果を指示してよい。実施形態によっては、各16ビット比較マスクは、(例えば、第4ソース内の値に応じた)第2ソースパックデータ715の関連/対応パックデータ要素の各有効なものと比較される、(例えば、第3ソース内の値に応じた)第1ソースパックデータ713の16個の異なる対応パックデータ要素の各有効なもの毎に、異なる比較マスクビットを含んでよい。16ビットのうちの他のものは強制設定(例えばF0)ビットであってよい。
【0073】
さらに別の実施形態が企図されている。例えば、実施形態によっては、第1ソースパックデータは8つの8ビットパックデータ要素を有してよく、第2ソースパックデータは8つの8ビットパックデータ要素を有してよく、パックデータ結果は8つの8ビットパック結果データ要素を有してよい。さらに別の実施形態では、第1ソースパックデータは32個の8ビットパックデータ要素を有してよく、第2ソースパックデータは32個の8ビットパックデータ要素を有してよく、パックデータ結果は32個の32ビットパック結果データ要素を有してよい。すなわち、実施形態によっては、各ソースオペランド内に存在するソースデータ要素と同数のマスクがデスティネーション内に存在してよく、各マスクは、各ソースオペランド内に存在するソースデータ要素と同数のビットを有してよい。
【0074】
一態様では、以下の擬似コードが
図7の命令の演算を表してよい。この擬似コードにおいて、EAXおよびEDXはそれぞれ、第1および第2ソースのサブセットを示すために用いられる暗黙の汎用レジスタである。
Bound1 = Min (16, EAX);
Bound2 = Min (16, EDX);
For (j = 0; j < 16; j ++ ) {
Dest [255:0] <− 0;
For (k = 0; k < 16; k ++) {
If (j < Bound1 && k < Bound2) Bitplane[k][j] <− (src1[j] equal src2[k]) ? 1 : 0;
Else Bitplane[k][j] <−0;
Dest[16*k+j:16*k] <− Dest[16*k+j:16*k] | (bitplane[k][j]<<j);
}
}
【0075】
図8は、命令が、パックデータ結果818内に報告するべき比較マスクのサブセットを選択するためにオフセット850を指定または示すように動作可能である、命令の一実施形態に応答して、8ビットバイト要素を有する128ビット幅パックソースに対して遂行されてよい比較演算839の一実施形態例を示すブロック図である。本演算は、
図7について示され、説明されているものと同様であり、
図7について説明されている任意追加の細部および態様は
図8の実施形態に任意追加的に用いられてよい。説明を不明瞭にすることを回避するために、任意追加の類似点は繰り返さず、異なるまたは追加の態様を説明する。
【0076】
図7におけるように、第1および第2ソースの各々は128ビット幅であり、16個の8ビットバイトデータ要素を各々含む。これらのオペランドの全体対全体比較は256ビットの比較ビット(すなわち、16×16)を生じさせるであろう。一態様では、これは、本明細書の他の箇所で説明されるように、16個の16ビット比較マスクとして整理されてよい。
【0077】
実施形態によっては、例えば、256ビットレジスタまたはその他の記憶位置の代わりに128ビットレジスタまたはその他の記憶位置を用いるために、命令は任意追加のオフセット850を任意追加的に指定するかまたは別の方法で指示してよい。実施形態によっては、オフセットは、ソースオペランド、または命令の即値によって(例えば、暗黙のレジスタを通じて)、あるいは別の方法で指定されてよい。実施形態によっては、オフセットは、完全な全体対全体比較結果のうちの、結果パックデータ内に報告するべきサブセットまたは部分を選択してよい。実施形態によっては、オフセットは起点を指示してよい。例えば、それは、パックデータ結果内に含めるべき最初の比較マスクを指示してよい。図示の実施形態例に示されているように、オフセットは、最初の2つの比較マスクは飛ばし、結果内に報告しないことを指定するために、2の値を指示してよい。図示のように、この2のオフセットに基づき、パックデータ結果818は、16個のあり得る16ビット比較マスクのうちの3番目の744−3から10番目の744−10を格納してよい。実施形態によっては、3番目の16ビット比較マスク744−3は第2ソースの3番目のパックデータ要素741−3に対応してよく、10番目の16ビット比較マスク744−10は第2ソースの10番目のパックデータ要素741−10に対応してよい。実施形態によっては、デスティネーションは暗黙のレジスタである。ただし、これは必須ではない。
【0078】
図9は、諸実施形態を実装するために任意追加的に用いられてよいマイクロアーキテクチャアプローチの一実施形態を示すブロック図である。実行論理910の一部が示されている。実行論理は全有効−全有効要素比較論理960を含む。全有効−全有効要素比較論理は、全ての有効要素を全ての他の有効要素と比較するように動作可能である。これらの比較は、並列に、順次に、あるいは一部は並列および一部は順次に行われてよい。これらの比較の各々は、例えば、パック比較命令において遂行される比較に用いられるものと同様の、実質的に従来の比較論理を用いて行われてよい。全有効−全有効要素比較論理は全有効−全有効比較マスク942を生成してよい。例として、マスク942のその部分は
図6のマスク642の2つの右端の列を表してよい。全有効−全有効要素比較論理は全有効−全有効比較マスク生成論理の一実施形態を表してもよい。
【0079】
実行論理は、比較論理960と結合されるマスクビットゼロ拡張論理962も含む。マスクビットゼロ拡張論理は、全有効−全有効要素比較マスク942の単一ビット比較結果の各々をゼロ拡張するように動作可能であってよい。図示のように、8ビットマスクを最終的に生成するこの場合には、実施形態によっては、より上位の7ビットの各々の中にゼロが埋められてよい。これで、マスク942からの単一ビットマスクビットが最下位ビットを占め、より上位のビットは全てゼロとなる。
【0080】
実行論理は、マスクビットゼロ拡張論理962と結合される左シフト論理マスクビット整列論理964も含む。左シフト論理マスクビット整列論理は、ゼロ拡張されたマスクビットを左に論理シフトさせるように動作可能であってよい。図示のように、実施形態によっては、ゼロ拡張されたマスクビットは、整列の達成を助けるために、異なるシフト量、左に論理シフトされてよい。特に、第1行は7ビット左に論理シフトされてよく、第2行は6ビット、第3行は5ビット、第4行は4ビット、第5行は3ビット、以下同様である。シフトされた要素は、シフトアウトされた全ビットの分、最下位側でゼロ拡張されてよい。これは、結果マスクのためのマスクビットの整列の達成を助ける。
【0081】
実行論理は、左シフト論理マスクビット整列論理964と結合される列OR論理966も含む。列OR論理は、整列論理964からの、左に論理シフトされ、整列された要素の列の論理和をとるように動作可能であってよい。この列OR演算は、列内の異なる行の各々からの単一マスクのビットの全てを、この場合では8ビットマスクである単一の結果データ要素内の、それらの現在の整列ポジション内に結合してよい。この演算は、元の比較マスク942の列内のセットになったマスクビットを、異なる比較結果マスクデータ要素内に効果的に「転置する」。
【0082】
これは好適なマイクロアーキテクチャの単なる1つの実例にすぎないことを理解されたい。他の実施形態は、同様のデータ処理または再配列を達成するために他の演算を用いてもよい。例えば、行列転置型の演算が任意選択的に遂行されてもよく、またはビットが、意図された位置に単に送られてもよい。
【0083】
本明細書に開示されている命令は汎用比較命令である。当業者は、これらの命令の、様々な目的/アルゴリズムのための種々の利用法を考案するであろう。実施形態によっては、本明細書に開示されている命令は、2つのテキストパターンのサブパターン関係の特定の迅速化を助けるために用いられてよい。
【0084】
有利には、本明細書に開示されている命令の諸実施形態は、少なくとも場合によっては、当技術分野において周知の他の命令よりもサブパターン検出のために比較的有用となり得る。さらに詳しく説明するために、一実施例について考えることが役に立ち得る。以上において
図6に関して示され、説明された実施形態について考える。この実施形態では、このデータの場合、(1)ポジション1における長さ3の1つのプリフィックス一致、(2)ポジション5における長さ3の1つの中間辞一致、(3)ポジション7における長さ1の1つのプリフィックス一致、および(4)長さ1の追加の非プリフィックス一致がある。もし、同じデータがSSE4.2命令PCMPESTRMによって処理されるならば、検出される一致はもっと少なくなるであろう。例えば、PCMPESTRMは、ポジション7における長さ1の1つのプリフィックス一致を検出するのみであり得る。PCMPESTMが(1)のサブパターンを検出することができるようになるには、src2が1だけシフトされ、レジスタ内にリロードされ、新たなPCMESTRM命令を実行することが必要となり得る。PCMPESTMが(2)のサブパターンを検出することができるようになるには、src1が1バイトシフトされ、リロードされ、新たなPCMESTRM命令が実行されることが必要となり得る。より一般的には、mバイトであるneedle、およびnバイトであるレジスタ内のhaystack、ただし、m<n、の場合には、PCMPESTRMは、(1)ポジション0〜n−m−1におけるmバイト一致、(2)ポジションn−m〜n−1において、それぞれm−1..1の長さのサブプリフィックス一致のみを検出し得る。対照的に、本明細書において示され、説明されている種々の実施形態は、より多くの、および実施形態によっては、全てのあり得る組み合わせを検出することができる。その結果、本明細書に開示されている命令の諸実施形態は、当技術分野において周知の種々の異なるパターンおよび/またはサブパターン検出アルゴリズムの速度および効率を高める助けとなり得る。実施形態によっては、本明細書に開示されている命令は、分子および/または生物学的配列を比較するために用いられてよい。このような配列の例としては、以下のものに限定されるわけではないが、DNA配列、RNA配列、タンパク質配列、アミノ酸配列、ヌクレオチド配列、および同様のものが挙げられる。タンパク質、DNA、RNA、およびその他のこうしたシークエンシングは一般的に、大量の計算を要するタスクになる傾向がある。このような配列は多くの場合、アミノ酸またはヌクレオチドの標的または参照DNA/RNA/タンパク質配列/断片/キーワードに対して遺伝子配列データベースまたはライブラリを探索することを伴う。データベース内の何百万個もの既知の配列に対する遺伝子断片/キーワードの整列は通常、入力パターンと保存された配列との空間的関係を発見することから開始する。所与のサイズの入力パターンは典型的にはアルファベットのサブパターンの一群として扱われる。アルファベットのサブパターンは「needle」を表してよい。これらのアルファベットは、本明細書に開示されている命令の第1ソースパックデータ内に含まれてよい。データベース/ライブラリの各部分は、第2ソースパックデータオペランド内の命令の各インスタンス内に含まれてよい。
【0085】
ライブラリまたはデータベースは、haystack内でneedleを捜し出そうと試みるアルゴリズムの一部として探索されている「haystack」を表してよい。命令の各インスタンスは、needleを発見しようとhaystack全体が探索されるまで、同じneedle、およびhaystackの各部分を用いてよい。各保存配列に対する入力の一致および非一致サブパターンに基づいて、所与の空間的整列関係の整列得点が評価される。配列整列ツールが比較の結果を、DNA/RNAおよびその他のアミノ酸配列の膨大な群の間の機能、構造および進化を評価する一部として用いてよい。一態様では、整列ツールは、ほんの数個のアルファベットのサブパターンを根幹として整列得点を評価してよい。二重入れ子ループは、バイト粒度等の特定の粒度における2次元探索空間を網羅し得る。有利には、本明細書に開示されている命令は、このような探索/シークエンシングを大幅に迅速化する助けとなり得る。例えば、
図7の命令と同様の命令は入れ子ループ構造を16×16のオーダで縮小する助けとなり得、
図8の命令と同様の命令は入れ子ループ構造を16×8のオーダで縮小する助けとなり得ると目下考えられている。
【0086】
本明細書に開示されている命令は、演算コードすなわちオペコードを含む命令フォーマットを有してよい。オペコードは、遂行されるべき命令および/または演算を特定するように動作可能である複数のビットまたは1つ以上のフィールドを表してよい。命令フォーマットは1つ以上のソース指定子、およびデスティネーション指定子を含んでもよい。例として、これらの指定子の各々は、レジスタ、メモリ位置、またはその他の記憶位置のアドレスを指定するためのビットまたは1つ以上のフィールドを含んでよい。他の実施形態では、明示的指定子の代わりに、ソースまたはデスティネーションは代わりに命令に対して暗黙的であってよい。他の実施形態では、ソースレジスタまたはその他のソース記憶位置内で指定される情報は、代わりに命令の即値を通じて指定されてよい。
【0087】
図10は、パックデータレジスタ1008の好適なセットの一実施形態例のブロック図である。図示のパックデータレジスタは32個の512ビットパックデータまたはベクトルレジスタを含む。これらの32個の512ビットレジスタはZMM0〜ZMM31と標識されている。図示の実施形態では、これらのレジスタの下位16個、すなわちZMM0〜ZMM15、の下位順の256ビットは、YMM0〜YMM15と標識されたそれぞれの256ビットパックデータまたはベクトルレジスタにエイリアスされるかまたは重ね合わせられる。ただし、これは必須ではない。同様に、図示の実施形態では、YMM0〜YMM15の下位順の128ビットは、XMM0〜XMM1と標識されたそれぞれの128ビットパックデータまたはベクトルレジスタにエイリアスされるかまたは重ね合わせられる。ただし、これも必須ではない。512ビットレジスタZMM0〜ZMM31は、512ビットパックデータ、256ビットパックデータ、または128ビットパックデータを保持するように動作可能である。256ビットレジスタYMM0〜YMM15は、256ビットパックデータ、または128ビットパックデータを保持するように動作可能である。128ビットレジスタXMM0〜XMM1は、128ビットパックデータを保持するように動作可能である。レジスタの各々は、パック浮動小数点データまたはパック整数データのいずれかを格納するために用いられてよい。8ビットバイトデータ、16ビットワードデータ、32ビットダブルワードまたは単精度浮動小数点データ、ならびに64ビットクワッドワードまたは倍精度浮動小数点データを少なくとも含む各種のデータ要素サイズがサポートされる。パックデータレジスタの代替実施形態は、異なる数のレジスタ、異なるサイズのレジスタを含んでよく、より大きなレジスタをより小さなレジスタにエイリアスしてもよく、またはエイリアスしなくてもよい。
【0088】
命令セットは1つ以上の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、遂行される演算(オペコード)、およびその演算が遂行される対象のオペランド(単数または複数)を指定するための種々のフィールド(ビットの数、ビットの位置)を定義する。一部の命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義を通じてさらに分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの種々のサブセットを有するように定義され(含まれるフィールドは通常、同じ順序であるが、含まれるフィールドが少なくなっているため、少なくとも一部は異なるビットポジションを有する)、および/または異なって解釈される所与のフィールドを有するように定義されてよい。それゆえ、ISAの各命令は、所与の命令フォーマットを用いて(および、定義されている場合には、その命令フォーマットの命令テンプレートのうちの所与のもので)表現され、演算およびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、そのオペコードを指定するためのオペコードフィールド、ならびにオペランド(ソース1/デスティネーションおよびソース2)を選択するためのオペランドフィールドを含む命令フォーマットとを有し、命令ストリーム内にこのADD命令が出現すると、オペランドフィールド内に、特定のオペランドを選択する特定の内容を有することになる。高度ベクトル拡張(Advanced Vector Extensions、AVX)(AVX1およびAVX2)と呼ばれ、ベクトル拡張(VEX)コード体系を用いるSIMD拡張のセットが発売および/または公開されている(例えば、インテル(登録商標)64およびIA−32アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル(Intel(R) 64 and IA−32 Architectures Software Developers Manual)、2011年10月参照、およびインテル(登録商標)高度ベクトル拡張プログラミング・レファレンス(Intel(R) Advanced Vector Extensions Programming Reference)、2011年6月参照)。
【0089】
例示的な命令フォーマット 本明細書に記載されている命令(単数または複数)の諸実施形態は各種のフォーマットで具体化されてよい。追加的に、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。命令(単数または複数)の諸実施形態はこのようなシステム、アーキテクチャ、およびパイプライン上で実行されてよい。ただし、詳述されているものに限定されるわけではない。
【0090】
VEX命令フォーマット VEXエンコーディングは、命令が、2つを超えるオペランドを有することを可能にし、SIMDベクトルレジスタが128ビットよりも長くなることを可能にする。VEXプリフィックスの利用は3オペランド(またはそれより多数)構文を提供する。例えば、以前の2オペランド命令は、ソースオペランドを上書きする、A=A+B等の演算を遂行した。VEXプリフィックスの利用は、オペランドがA=B+C等の非破壊的演算を遂行することを可能にする。
【0091】
図11Aは、VEXプリフィックス1102、実オペコードフィールド1130、Mod R/Mバイト1140、SIBバイト1150、変位フィールド1162、およびIMM8 1172を含む例示的なAVX命令フォーマットを示す。
図11Bは、
図11Aからのどのフィールドが完全オペコードフィールド1174および基本演算フィールド1142を構成するのかを示す。
図11Cは、
図11Aからのどのフィールドがレジスタインデックスフィールド1144を構成するのかを示す。
【0092】
VEXプリフィックス(バイト0〜2)1102は3バイト形式でエンコードされる。1番目のバイトはフォーマットフィールド1140(VEXバイト0、ビット[7:0])であり、このフィールドは明示的C4バイト値(C4命令フォーマットを識別するために用いられる固有値)を包含する。2〜3番目のバイト(VEXバイト1〜2)は、特定の機能を提供する多数のビットフィールドを含む。具体的には、REXフィールド1105(VEXバイト1、ビット[7〜5])が、VEX.Rビットフィールド(VEXバイト1、ビット[7]−R)、VEX.Xビットフィールド(VEXバイト1、ビット[6]−X)、およびVEX.Bビットフィールド(VEXバイト1、ビット[5]−B)からなる。命令のその他のフィールドは、当技術分野において周知の通りのレジスタインデックスの下位の3つのビット(rrr、xxx、およびbbb)をエンコードし、そのため、VEX.R、VEX.X、およびVEX.Bを加えることによってRrrr、Xxxx、およびBbbbが形成されてよい。オペコードマップフィールド1115(VEXバイト1、ビット[4:0]−mmmmm)は、暗黙の先頭オペコードバイトをエンコードするための内容を含む。Wフィールド1164(VEXバイト2、ビット[7]−W)は表記VEX.Wによって表され、命令によって異なる機能を提供する。VEX.vvvv 1120(VEXバイト2、ビット[6:3]−vvvv)の役割は以下のものを含んでよい:1)VEX.vvvvは、反転(1の補数)形式で指定される、第1ソースレジスタオペランドをエンコードし、2つ以上のソースオペランドを有する命令に有効である、2)VEX.vvvvは、一定のベクトルシフトのために1の補数の形式で指定される、デスティネーションレジスタオペランドをエンコードする、または3)VEX.vvvvはどのオペランドもエンコードせず、フィールドは確保され、1111bを包含しなくてはならない。VEX.L 1168サイズフィールド(VEXバイト2、ビット[2]−L)=0であれば、それは128ビットベクトルを指示し、VEX.L = 1であれば、それは256ビットベクトルを示す。プリフィックスエンコーディングフィールド1125(VEXバイト2、ビット[1:0]−pp)は基本演算フィールドに追加ビットを提供する。
【0093】
実オペコードフィールド1130(バイト3)はオペコードバイトとしても知られる。オペコードの一部はこのフィールド内で指定される。
【0094】
MOD R/Mフィールド1140(バイト4)は、MODフィールド1142(ビット[7〜6])、Regフィールド1144(ビット[5〜3])、およびR/Mフィールド1146(ビット[2〜0])を含む。Regフィールド1144の役割は以下のものを含んでよい:デスティネーションレジスタオペランドまたはソースレジスタオペランド(Rrrrのrrr)のいずれかをエンコードする、あるいはオペコード拡張として扱われ、いずれの命令オペランドのエンコードにも用いられない。R/Mフィールド1146の役割は以下のものを含んでよい:メモリアドレスを参照する命令オペランドをエンコードする、あるいはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードする。
【0095】
スケール、インデックス、ベース(Scale、Index、Base、SIB)−スケールフィールド1150(バイト5)の内容は、メモリアドレス生成に用いられるSS 1152(ビット[7〜6])を含む。SIB.xxx 1154(ビット[5〜3])およびSIB.bbb 1156(ビット[2〜0])の内容は、レジスタインデックスXxxxおよびBbbbに関して先に言及された。
【0096】
変位フィールド1162および即値フィールド(IMM8)1172はアドレスデータを包含する。
【0097】
汎用ベクトル対応命令フォーマット ベクトル対応命令フォーマットとは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル演算に特化した特定のフィールドが存在する)。ベクトル対応命令フォーマットを通じてベクトルおよびスカラ演算の両方がサポートされる実施形態が記載されているが、代替実施形態はベクトル対応命令フォーマットのベクトル演算のみを用いる。
【0098】
図12A〜12Bは、本発明の諸実施形態に係る汎用ベクトル対応命令フォーマットおよびその命令テンプレートを示すブロック図である。
図12Aは、本発明の諸実施形態に係る汎用ベクトル対応命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図であり、一方、
図12Bは、本発明の諸実施形態に係る汎用ベクトル対応命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。具体的には、クラスAおよびクラスB命令テンプレートが定義される汎用ベクトル対応命令フォーマット1200はどちらも非メモリアクセス1205命令テンプレートおよびメモリアクセス1220命令テンプレートを含む。ベクトル対応命令フォーマットの文脈における用語、汎用は、いかなる特定の命令セットにも束縛されない命令フォーマットを指す。
【0099】
ベクトル対応命令フォーマットが以下のものをサポートする本発明の諸実施形態が記載されている:32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)を有する64バイトベクトルオペランド長(またはサイズ)(およびそれゆえ、64バイトベクトルが、16個のダブルワードサイズ要素、または代替的に、8個のクワッドワードサイズ要素のいずれかからなる)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する64バイトベクトルオペランド長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(またはサイズ)を有する32バイトベクトルオペランド長(またはサイズ)、ならびに32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(またはサイズ)を有する16バイトベクトルオペランド長(またはサイズ)。しかし、代替実施形態は、より大きな、より小さな、または異なるデータ要素幅(例えば、128ビット(16バイト)データ要素幅)を有する、より大きな、より小さな、および/または異なるベクトルオペランドサイズ(例えば、256バイトベクトルオペランド)をサポートしてもよい。
【0100】
図12AにおけるクラスA命令テンプレートは以下のものを含む:1)非メモリアクセス1205命令テンプレート内には、非メモリアクセス、完全丸め制御型演算1210命令テンプレート、および非メモリアクセス、データ変形型演算1215命令テンプレートが示され、2)メモリアクセス1220命令テンプレート内には、メモリアクセス、一時性1225命令テンプレート、およびメモリアクセス、非一時性1230命令テンプレートが示されている。
図12BにおけるクラスB命令テンプレートは以下のものを含む:1)非メモリアクセス1205命令テンプレート内には、非メモリアクセス、書き込みマスク制御、部分丸め制御型演算1212命令テンプレート、および非メモリアクセス、書き込みマスク制御、vsize型演算1217命令テンプレートが示され;2)メモリアクセス1220命令テンプレート内には、メモリアクセス、書き込みマスク制御1227命令テンプレートが示されている。
【0101】
汎用ベクトル対応命令フォーマット1200は、
図12A〜12Bに示されている順に以下に列挙する以下のフィールドを含む。
【0102】
フォーマットフィールド1240−このフィールド内の特定値(命令フォーマット識別子の値)はベクトル対応命令フォーマットを一意に特定し、それゆえ、命令ストリーム内におけるベクトル対応命令フォーマットの命令の出現を特定する。そのため、このフィールドは、汎用ベクトル対応命令フォーマットのみを有する命令セットには必要ないという意味で、任意追加的なものである。
【0103】
基本演算フィールド1242−その内容は各種の基本演算を識別する。
【0104】
レジスタインデックスフィールド1244−その内容は、ソースおよびデスティネーションオペランドがレジスタ内またはメモリ内にある場合には、ソースおよびデスティネーションオペランドの位置を、直接またはアドレス生成を通じて、指定する。これらは、P×Q(例えば32×512、16×128、32×1024、64×1024)レジスタファイルからN個のレジスタを選択するために十分な数のビットを含む。一実施形態では、Nが最大で3つのソースおよび1つのデスティネーションレジスタとなり得るが、代替実施形態はより多数またはより少数のソースおよびデスティネーションレジスタをサポートしてもよい(例えば、最大で2つのソースをサポートしてもよい、ただし、これらのソースのうちの1つはデスティネーションの役割も果たす、最大で3つのソースをサポートしてもよい、ただし、これらのソースのうちの1つ方はデスティネーションの役割も果たす、および最大で2つのソースおよび1つのデスティネーションをサポートしてもよい)。
【0105】
修飾子フィールド1246−その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の出現を、メモリアクセスを指定しないものと識別する。すなわち、非メモリアクセス1205命令テンプレートとメモリアクセス1220命令テンプレートとを識別する。メモリアクセス演算はメモリ階層に対して読み込みおよび/または書き込みを行い(場合によっては、レジスタ内の値を用いてソースおよび/またはデスティネーションアドレスを指定する)、一方、非メモリアクセス演算はそれを行わない(例えば、ソースおよびデスティネーションはレジスタである)。一実施形態では、このフィールドは、メモリアドレス計算を遂行するための3つの異なる方法の間の選択も行うが、代替実施形態は、メモリアドレス計算を遂行するためのより多数の、より少数の、または異なる方法をサポートしてもよい。
【0106】
拡大演算フィールド1250−その内容は、基本演算に加えて様々な演算のうちのどれが遂行されるべきであるのかを識別する。このフィールドは文脈依存性である。本発明の一実施形態では、このフィールドは、クラスフィールド1268、アルファフィールド1252、およびベータフィールド1254に分割される。拡大演算フィールド1250は、共通グループの演算が、2つ、3つ、または4つの命令ではなく、単一の命令内で遂行されることを可能にする。
【0107】
スケール(scale)フィールド1260−その内容は、メモリアドレス生成のための(例えば、2
scale * インデックス + 基底、を用いるアドレス生成のための)インデックスフィールドの内容のスケーリングを可能にする。
【0108】
変位フィールド1262A−その内容は、メモリアドレス生成の一部として(例えば、2
scale *インデックス + 基底 + 変位、を用いるアドレス生成のために)用いられる。
【0109】
変位係数フィールド1262B(変位フィールド1262Aが変位係数フィールド1262Bの真上に並置されているのは、一方または他方が用いられること指示していることに留意されたい)−その内容は、アドレス生成の一部として(例えば、2
scale * インデックス + 基底 + スケーリングされた変位、を用いるアドレス生成のために)用いられる。それは、メモリアクセスのサイズ(N)−ここで、Nはメモリアクセス内のバイト数である−によってスケーリングされる変位係数を指定する。冗長な下位ビットは無視され、したがって、実効アドレスを計算する際に用いられるべき最終変位を生成するために、変位係数フィールドの内容にはメモリオペランド合計サイズ(N)が乗算される。Nの値は、プロセッサハードウェアによって実行時に完全オペコードフィールド1274(本明細書において後述)およびデータ操作フィールド1254Cに基づいて求められる。変位フィールド1262Aおよび変位係数フィールド1262Bは、それらは非メモリアクセス1205命令テンプレートには用いられず、および/または別の実施形態は2つのうちの1つのみを実装するかどちらも実装しない場合があるという意味において、任意追加的なものである。
【0110】
データ要素幅フィールド1264−その内容は、多数のデータ要素幅のうちのいずれが用いられるべきであるのかを識別する(一部の実施形態では全ての命令のため、他の実施形態では命令の一部のみのため)。このフィールドは、1つのデータ要素幅のみがサポートされ、かつ/またはデータ要素幅はオペコードの何らかの態様を用いてサポートされている場合には、それは必要ないという意味において、任意追加的なものである。
【0111】
書き込みマスクフィールド1270−その内容は、データ要素ポジション毎に、デスティネーションベクトルオペランド内のそのデータ要素ポジションは基本演算および拡大演算の結果を反映するのかどうかを制御する。クラスA命令テンプレートはマージ書き込みマスキングをサポートし、一方、クラスB命令テンプレートはマージおよびゼロ化書き込みマスキングの両方をサポートする。マージの際、ベクトルマスクは、デスティネーション内の要素の任意のセットが、(基本演算および拡大演算によって指定された)いかなる演算の実行中にも更新されないように保護されることを可能にし、別の一実施形態では、対応するマスクビットが0を有する場合には、デスティネーションの各要素の古い値を保存する。対照的に、ゼロ化ベクトルマスクは、デスティネーション内の要素の任意のセットが、(基本演算および拡大演算によって指定された)あらゆる演算の実行中にゼロ化されることを可能にし、一実施形態では、対応するマスクビットが0の値を有する場合には、デスティネーションの要素が0にセットされる。この機能性のサブセットは、遂行される演算のベクトル長(すなわち、変更される要素の、最初から最後のものまでのスパン)を制御する機能である。ただし、変更される要素が連続している必要はない。それゆえ、書き込みマスクフィールド1270は、ロード、格納、算術、論理等を含む、部分ベクトル演算を可能にする。書き込みマスクフィールド1270の内容が、多数の書き込みマスクレジスタのうちの、用いられるべき書き込みマスクを包含する1つを選択する(およびそれゆえ、書き込みマスクフィールド1270の内容が、遂行されるべきそのマスキングを間接的に特定する)本発明の実施形態が記載されているが、代替実施形態は、その代わりにまたはそれに加えて、書き込みマスクフィールド1270の内容が、遂行されるべきマスキングを直接指定することを可能にする。
【0112】
即値フィールド1272−その内容は即値の指定を可能にする。このフィールドは、即値をサポートしない汎用ベクトル対応フォーマットの実装時にはそれは存在しない、および即値を用いない命令内にはそれは存在しないという意味において、任意追加的なものである。
【0113】
クラスフィールド1268−その内容は異なるクラスの命令の間の識別をする。
図12A〜12Bを参照すると、このフィールドの内容はクラスAおよびクラスB命令の間の選択を行う。
図12A〜12Bでは、フィールド内に特定値が存在することを示すために、角の丸いマス目が用いられている(例えば、
図12A〜12Bにおいて、それぞれ、クラスフィールド1268のためのクラスA 1268AおよびクラスB 1268B)。
【0114】
クラスAの命令テンプレート クラスAの非メモリアクセス1205命令テンプレートの場合には、アルファフィールド1252はRSフィールド1252Aとして解釈される。RSフィールド1252Aの内容は、各種の拡大演算型のいずれのものが遂行されるべきであるのかを識別する(例えば、丸め1252A.1およびデータ変形1252A.2が、非メモリアクセス、丸め型演算1210、および非メモリアクセス、データ変形型演算1215命令テンプレートのためにそれぞれ指定されている)。一方、ベータフィールド1254は、指定された型の演算のいずれが遂行されるべきであるのかを識別する。非メモリアクセス1205命令テンプレート内には、スケールフィールド1260、変位フィールド1262A、および変位スケールフィールド1262Bは存在しない。
【0115】
非メモリアクセス命令テンプレート−完全丸め制御型演算
【0116】
非メモリアクセス完全丸め制御型演算1210命令テンプレートでは、ベータフィールド1254は丸め制御フィールド1254Aとして解釈される。丸め制御フィールド1254Aの内容(単数または複数)は静的丸めを提供する。記載されている本発明の実施形態では、丸め制御フィールド1254Aは、全浮動小数点例外抑制(suppress all floating point exceptions、SAE)フィールド1256および丸め演算制御フィールド1258を含むが、代替実施形態は、これらのコンセプトを両方ともサポートしてよく、それらを同じフィールド内にエンコードしてよく、あるいはこれらのコンセプト/フィールドの一方または他方のみを有してよい(例えば、丸め演算制御フィールド1258のみを有してよい)。
【0117】
SAEフィールド1256−その内容は、例外事象報告を無効にするかまたはしないかを識別する。SAEフィールド1256の内容が、抑制が有効であることを示す場合には、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない。
【0118】
丸め演算制御フィールド1258−その内容は、一群の丸め演算(例えば、切り上げ、切り捨て、ゼロ方向への丸めおよび最近接数への丸め)のうちいずれのものを遂行するべきなのかを識別する。それゆえ、丸め演算制御フィールド1258は命令毎の丸めモードの変更を可能にする。プロセッサが、丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、丸め演算制御フィールド1258の内容がそのレジスタ値をオーバライドする。
【0119】
非メモリアクセス命令テンプレート−データ変形型演算
【0120】
非メモリアクセスデータ変形型演算1215命令テンプレートでは、ベータフィールド1254はデータ変形フィールド1254Bとして解釈される。データ変形フィールド1254Bの内容は、多数のデータ変形のうちのいずれのものが遂行されるべきであるのかを識別する(例えば、データ変形なし、スウィズル(swizzle)、ブロードキャスト)。
【0121】
クラスAのメモリアクセス1220命令テンプレートの場合には、アルファフィールド1252はエビクションヒントフィールド1252Bとして解釈される。エビクションヒントフィールド1252Bの内容は、エビクションヒントのいずれのものが用いられるべきであるのかを識別する(
図12Aでは、一時性1252B.1および非一時性1252B.2が、メモリアクセス、一時性1225命令テンプレートおよび、メモリアクセス、非一時性1230命令テンプレートのためにそれぞれ指定されている)。一方、ベータフィールド1254はデータ操作フィールド1254Cとして解釈される。データ操作フィールド1254Cの内容は、多数のデータ操作演算(基本命令としても知られる)のいずれのものが遂行されるべきであるのかを識別する(例えば、操作なし、ブロードキャスト、ソースの上方変換、および宛先の下方変換)。メモリアクセス1220命令テンプレートは、スケールフィールド1260、ならびに任意追加的に、変位フィールド1262Aまたは変位スケールフィールド1262Bを含む。
【0122】
ベクトルメモリ命令は、変換支援を受けて、メモリからのベクトルロードおよびそこへのベクトル格納を遂行する。標準ベクトル命令と同様に、ベクトルメモリ命令はデータ要素式の方法でデータをメモリから/へ転送する。実際に転送される要素は、書き込みマスクとして選択されているベクトルマスクの内容によって決定される。
【0123】
メモリアクセス命令テンプレート−一時性
【0124】
一時性データは、キャッシングの恩恵を受けるのに足るほど早く再使用される可能性が高いデータである。ただし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む、異なる方法でそれを実装してもよい。
【0125】
メモリアクセス命令テンプレート−非一時性
【0126】
非一時性データは、一次キャッシュ内へのキャッシングの恩恵を受けるのに足るほど早く再使用される可能性が低いデータであり、エビクションを優先させなければならない。ただし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む、異なる方法でそれを実装してもよい。
【0127】
クラスBの命令テンプレート クラスBの命令テンプレートの場合には、アルファフィールド1252は書き込みマスク制御(Z)フィールド1252Cとして解釈される。書き込みマスク制御(Z)フィールド1252Cの内容は、書き込みマスクフィールド1270によって制御される書き込みマスキングはマージであるべきなのかまたはゼロ化であるべきなのかを識別する。
【0128】
クラスBの非メモリアクセス1205命令テンプレートの場合には、ベータフィールド1254の一部はRLフィールド1257Aとして解釈される。RLフィールド1257Aの内容は、各種の拡大演算型のいずれのものが遂行されるべきであるのかを識別する(例えば、丸め1257A.1およびベクトル長(VSIZE)1257A.2が、非メモリアクセス、書き込みマスク制御、部分丸め制御型演算1212命令テンプレート、および非メモリアクセス、書き込みマスク制御、VSIZE型演算1217命令テンプレートのためにそれぞれ指定されている)。一方、ベータフィールド1254の残りのものは、指定された型の演算のいずれが遂行されるべきであるのかを識別する。非メモリアクセス1205命令テンプレート内には、スケールフィールド1260、変位フィールド1262A、および変位スケールフィールド1262Bは存在しない。
【0129】
非メモリアクセス、書き込みマスク制御、部分丸め制御型演算1212命令テンプレートでは、ベータフィールド1254の残りのものは丸め演算フィールド1259Aとして解釈され、例外事象報告は無効にされる(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない)。
【0130】
丸め演算制御フィールド1259A−丸め演算制御フィールド1258と全く同じように、その内容は、一群の丸め演算(例えば、切り上げ、切り捨て、ゼロ方向への丸めおよび最近接数への丸め)のうちいずれのものを遂行するべきなのかを識別する。それゆえ、丸め演算制御フィールド1259Aは命令毎の丸めモードの変更を可能にする。プロセッサが、丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、丸め演算制御フィールド1258の内容がそのレジスタ値をオーバライドする。
【0131】
非メモリアクセス、書き込みマスク制御、VSIZE型演算1217命令テンプレートでは、ベータフィールド1254の残りのものはベクトル長フィールド1259Bとして解釈される。ベクトル長フィールド1259Bの内容は、多数のデータベクトル長のいずれのもので遂行されるべきであるのかを識別する(例えば、128、256、または512バイト)。
【0132】
クラスBのメモリアクセス1220命令テンプレートの場合には、ベータフィールド1254の一部はブロードキャストフィールド1257Bとして解釈される。ブロードキャストフィールド1257Bの内容は、ブロードキャスト型データ操作演算が遂行されるべきであるのか否かを識別する。一方、ベータフィールド1254の残りのものはベクトル長フィールド1259Bとして解釈される。メモリアクセス1220命令テンプレートは、スケールフィールド1260、ならびに任意追加的に、変位フィールド1262Aまたは変位スケールフィールド1262Bを含む。
【0133】
汎用ベクトル対応命令フォーマット1200に関しては、フォーマットフィールド1240、基本演算フィールド1242、およびデータ要素幅フィールド1264を含む完全オペコードフィールド1274が示されている。完全オペコードフィールド1274がこれらのフィールドの全てを含む一実施形態が示されているが、それらを全てはサポートしていない実施形態では、完全オペコードフィールド1274は、これらのフィールドの全てよりも少ないフィールドを含む。完全オペコードフィールド1274は演算コード(オペコード)を提供する。
【0134】
拡大演算フィールド1250、データ要素幅フィールド1264、および書き込みマスクフィールド1270は、これらの特徴を汎用ベクトル対応命令フォーマットの命令毎に指定することを可能にする。
【0135】
書き込みマスクフィールドとデータ要素幅フィールドの組み合わせは、それらは、種々のデータ要素幅に基づいてマスクを適用することを可能にするという点で、型付き命令を作り出す。
【0136】
クラスAおよびクラスB内に含まれる種々の命令テンプレートは様々な状況で有益である。本発明の一部の実施形態では、各プロセッサまたはプロセッサ内の各コアによって、サポートされるのはクラスAのみ、クラスB、または両クラスであり得る。例えば、汎用コンピューティング向きの高性能汎用アウトオブオーダコアはクラスBのみをサポートしてよく、主としてグラフィックスおよび/または科学(スループット)コンピューティング向きのコアはクラスAのみをサポートしてよく、両者向きのコアは両者をサポートしてよい(無論、両クラスからのテンプレートおよび命令の何らかの混合、ただし両クラスの全てのテンプレートおよび命令ではない、を有するコアは本発明の範囲である)。同様に、単一のプロセッサが、複数のコアであって、それらの全てが、同じクラスをサポートするかまたはコアによって異なるクラスをサポートする、複数のコアを含んでよい。例えば、独立したグラフィックスおよび汎用コアを備えるプロセッサでは、主としてグラフィックスおよび/または科学コンピューティング向きのグラフィックスコアのうちの1つはクラスAのみをサポートしてよく、一方、汎用コアのうちの1つ以上は、クラスBのみをサポートする汎用コンピューティング向きのアウトオブオーダ実行およびレジスタリネーミングを備える高性能汎用コアであってよい。独立グラフィックスコアを有しない別のプロセッサは、クラスAおよびクラスBを両方サポートするもう1つの汎用インオーダまたはアウトオブオーダコアを含んでよい。無論、本発明の異なる実施形態では、一方のクラスからの特徴が他方のクラス内に実装されてもよい。高レベル言語で書かれたプログラムは、以下のものを含む、様々な実行可能形式に変換されるであろう(例えば、実行時にコンパイルされるかまたは静的にコンパイルされる):1)実行用ターゲットプロセッサによってサポートされているクラス(単数または複数)の命令のみを有する形式、あるいは2)全クラスの命令の種々の組み合わせを用いて書かれた代替ルーチンを有し、制御フローコードであって、そのコードを現在実行しているプロセッサによってサポートされている命令に基づいて実行するべきルーチンを選択する制御フローコードを有する形式。
【0137】
例示的な特定的ベクトル対応命令フォーマット
図13Aは、本発明の諸実施形態に係る例示的な特定的ベクトル対応命令フォーマットを示すブロック図である。
図13Aは特定的ベクトル対応命令フォーマット1300を示す。特定的ベクトル対応命令フォーマット1300は、それがフィールドの位置、サイズ、解釈、および順序、ならびにそれらのフィールドの一部の値を指定するという意味において、特定的である。特定的ベクトル対応命令フォーマット1300は、x86命令セットを拡張するために用いられてよく、それゆえ、フィールドの一部は、既存のx86命令セットおよびその拡張(例えば、AVX)において用いられているものと同様または同じである。このフォーマットは、拡張を備えた既存のx86命令セットのプリフィックスエンコーディングフィールド、実オペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと一致したままである。
図13Aのフィールドが対応する
図12Aおよび12Bのフィールドが示されている。
【0138】
本発明の諸実施形態は、例示の目的のために汎用ベクトル対応命令フォーマット1200の文脈において特定的ベクトル対応命令フォーマット1300を参照して説明されているが、本発明は、特に断りのない限り、特定的ベクトル対応命令フォーマット1300に限定されるわけではないことを理解されたい。例えば、汎用ベクトル対応命令フォーマット1200は種々のフィールドのために種々の可能なサイズを企図しているが、一方で、特定的ベクトル対応命令フォーマット1300は特定のサイズのフィールドを有するように示されている。具体例として、特定的ベクトル対応命令フォーマット1300においてデータ要素幅フィールド1264は1ビットフィールドとして示されているが、本発明はそのように限定されるわけではない(すなわち、汎用ベクトル対応命令フォーマット1200はデータ要素幅フィールド1264のその他のサイズを企図している)。
【0139】
汎用ベクトル対応命令フォーマット1200は、
図13Aに示されている順に以下に列挙する以下のフィールドを含む。
【0140】
EVEXプリフィックス(バイト0〜3)1302−4バイト形式でエンコードされる。
【0141】
フォーマットフィールド1240(EVEXバイト0、ビット[7:0])−1番目のバイト(EVEXバイト0)はフォーマットフィールド1240であり、それは0x62(本発明の一実施形態においてベクトル対応命令フォーマットを識別するために用いられる固有値)を包含する。
【0142】
2〜4番目のバイト(EVEXバイト1〜3)は、特定の機能を提供する多数のビットフィールドを含む。
【0143】
REXフィールド1305(EVEXバイト1、ビット[7〜5])−EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、および1257BEXバイト1、ビット[5]−B)からなる。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能性を提供し、1の補数の形式を用いてエンコードされる、すなわちZMM0は1111Bとエンコードされ、ZMM15は0000Bとエンコードされる。命令のその他のフィールドは、当技術分野において周知の通りのレジスタインデックスの下位3ビット(rrr、xxx、およびbbb)をエンコードし、そのため、EVEX.R、EVEX.X、およびEVEX.Bを加えることによってRrrr、Xxxx、およびBbbbが形成されてよい。
【0144】
REX'フィールド1310−これはREX'フィールド1310の1番目の部分であり、拡張32レジスタセットの上位16個または下位16個のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の一実施形態では、このビットは、以下に指示されている他のものとともに、(周知のx86 32ビットモードで、)実オペコードバイトが62であるBOUND命令と区別するために、ビット反転フォーマットで格納されるが、MOD R/Mフィールド(後述)内では、MODフィールド内に11の値を受け入れない。本発明の代替実施形態は、これと、以下に指示されているその他のビットとを反転フォーマットで格納しない。下位16個のレジスタをエンコードするためには1の値が用いられる。換言すると、EVEX.R'、EVEX.R、および他のフィールドからの他のRRRを組み合わせることによって、R'Rrrr が形成される。
【0145】
オペコードマップフィールド1315(EVEXバイト1、ビット[3:0]−mmmm)−その内容は暗黙の先頭オペコードバイト(0F、0F 38、または0F 3)をエンコードする。
【0146】
データ要素幅フィールド1264(EVEXバイト2、ビット[7]-W)−表記EVEX.Wによって表される。EVEX.Wは、データ型の粒度(サイズ)を定義するために用いられる(32ビットデータ要素または64ビットデータ要素のいずれか)。
【0147】
EVEX.vvvv 1320(EVEX.バイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は以下のものを含んでよい:1)EVEX.vvvvは、反転(1の補数)形式で指定される、第1ソースレジスタオペランドをエンコードし、2つ以上のソースオペランドを有する命令に有効である、2)EVEX.vvvvは、一定のベクトルシフトのために1の補数の形式で指定される、デスティネーションレジスタオペランドをエンコードする、または3)EVEX.vvvvはどのオペランドもエンコードせず、フィールドは確保され、1111bを包含しなくてはならない。それゆえ、EVEX.vvvvフィールド1320は、反転(1の補数)形式で格納された第1ソースレジスタ指定子の4つの下位ビットをエンコードする。命令によっては、指定子サイズを32個のレジスタに拡張するために、追加の異なるEVEXビットフィールドが用いられる。
【0148】
EVEX.U 1268クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U = 0であれば、それはクラスAまたはEVEX.U0を指示し、EVEX.U = 1であれば、それはクラスBまたはEVEX.U1を示す。
【0149】
プリフィックスエンコーディングフィールド1325(EVEXバイト2、ビット[1:0]−pp)−基本演算フィールドに追加ビットを提供する。EVEXプリフィックスフォーマットのレガシーSSE命令へのサポートを提供すること加えて、これはSIMDプリフィックスを短縮する利点も有する(SIMDプリフィックスを表現するためにバイトを必要とする代わりに、EVEXプリフィックスは2ビットのみを必要とする)。一実施形態では、SIMDプリフィックス(66H、F2H、F3H)を用いるレガシーSSE命令をレガシーフォーマットおよびEVEXプリフィックスフォーマットの両方でサポートするために、これらのレガシーSIMDプリフィックスはSIMDプリフィックスエンコーディングフィールド内にエンコードされ、デコーダのPLAに提供される前に実行時にレガシーSIMDプリフィックスに展開される(それにより、PLAは、変更を行うことなく、これらのレガシー命令のレガシーフォーマットおよびEVEXフォーマットの両方を実行することができる)。より新しい命令はEVEXプリフィックスエンコーディングフィールドの内容をオペコード拡張として直接用いることができるであろうが、一部の実施形態は一貫性のために同様の方法で展開し、ただし、異なる意味がこれらのレガシーSIMDプリフィックスによって指定されることを可能にする。代替実施形態は、2ビットSIMDプリフィックスエンコーディングをサポートするようにPLAを設計し直してよく、それゆえ、展開を必要としない。
【0150】
アルファフィールド1252(EVEXバイト3、ビット[7]−EH;EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御(write mask control)、およびEVEX.Nとしても知られる;αによっても示されている)−上述のように、このフィールドは文脈依存性である。
【0151】
ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS、EVEX.s
2−0、EVEX.r
2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる;βββによっても示されている)−上述のように、このフィールドは文脈依存性である。
【0152】
REX'フィールド1310−これはREX'フィールドの残りであり、拡張32レジスタセットの上位16または下位16個のいずれかをエンコードするために用いられてよいEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットはビット反転フォーマットで格納される。下位16個のレジスタをエンコードするためには1の値が用いられる。換言すると、EVEX.V'、EVEX.vvvvを組み合わせることによってV'VVVVが形成される。
【0153】
書き込みマスクフィールド1270(EVEXバイト3、ビット[2:0]−kkk)−その内容は、上述のように、書き込みマスクレジスタ内のレジスタのインデックスを指定する。本発明の一実施形態では、特定値EVEX.kkk=000は、書き込みマスクを特定の命令のために用いないことを暗に示す特別な動作を有する(これは、ハード的に全て1にセットされる書き込みマスク、またはマスキングハードウェアをバイパスするハードウェアの利用を含む種々の方法で実装され得る)。
【0154】
実オペコードフィールド1330(バイト4)はオペコードバイトとしても知られる。オペコードの一部はこのフィールド内で指定される。
【0155】
MOD R/Mフィールド1340(バイト5)は、MODフィールド1342、Regフィールド1344、およびR/Mフィールド1346を含む。上述のように、MODフィールド1342の内容はメモリアクセス演算と非メモリアクセス演算とを識別する。Regフィールド1344の役割は2つの状況にまとめることができる:デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードする、あるいはオペコード拡張として扱われ、いずれの命令オペランドのエンコードにも用いられない。R/Mフィールド1346の役割は以下のものを含んでよい:メモリアドレスを参照する命令オペランドをエンコードする、あるいはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードする。
【0156】
スケール、インデックス、ベース(SIB)バイト(バイト6)−上述のように、スケールフィールド1260の内容はメモリアドレス生成のために用いられる。SIB.xxx 1354およびSIB.bbb 1356−これらのフィールドの内容はレジスタインデックスXxxxおよびBbbbに関して先に言及された。
【0157】
変位フィールド1262A(バイト7〜10)−MODフィールド1342が10を包含するときには、バイト7〜10は変位フィールド1262Aとなり、それはレガシー32ビット変位(disp32)と同じように動作し、バイト粒度で動作する。
【0158】
変位係数フィールド1262B(バイト7)−MODフィールド1342が01を包含するときには、バイト7は変位係数フィールド1262Bとなる。このフィールドの位置は、バイト粒度で動作する、レガシーx86命令セット8ビット変位(disp8)のものと同じである。disp8は符号拡張されるので、それは−128〜127バイトのオフセットしかアドレス指定することができない。64バイトキャッシュラインに関して言うと、disp8は、4つの実際に有用な値、−128、−64、0、および64、にしかセットすることができない8ビットを用いる。より大きな範囲がしばしば必要となるため、disp32が用いられる。しかし、disp32は4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド1262Bはdisp8の再解釈である。変位係数フィールド1262Bを用いる場合、実際の変位は、変位係数フィールドの内容にメモリオペランドアクセスのサイズ(N)を乗算することによって求められる。この種の変位はdisp8*Nと呼ばれる。これは平均命令長を縮小する(単一のバイトが変位に用いられるが、より広い範囲を有する)。このような圧縮変位は、有効変位はメモリアクセスの粒度の倍数であり、したがって、アドレスオフセットの冗長な下位ビットはエンコードする必要がないとの仮定に基づいている。換言すると、変位係数フィールド1262Bがレガシーx86命令セット8ビット変位の代わりとなる。それゆえ、変位係数フィールド1262Bは、disp8がdisp8*Nにオーバロードされることのみを除き、x86命令セット8ビット変位と同じようにエンコードされる(そのため、ModRM/SIBエンコーディング規則に変更はない)。換言すると、エンコーディング規則またはエンコーディング長に変更はなく、ハードウェアによる変位値の解釈にのみ変更がある(これは、バイト単位のアドレスオフセットを得るためにメモリオペランドのサイズによって変位をスケーリングすることを必要とする)。
【0159】
即値フィールド1272は上述のように動作する。
【0160】
完全オペコードフィールド
図13Bは、本発明の一実施形態に係る完全オペコードフィールド1274を構成する特定的ベクトル対応命令フォーマット1300のフィールドを示すブロック図である。具体的には、完全オペコードフィールド1274は、フォーマットフィールド1240、基本演算フィールド1242、およびデータ要素幅(W)フィールド1264を含む。基本演算フィールド1242は、プリフィックスエンコーディングフィールド1325、オペコードマップフィールド1315、および実オペコードフィールド1330を含む。
【0161】
レジスタインデックスフィールド
図13Cは、本発明の一実施形態に係るレジスタインデックスフィールド1244を構成する特定的ベクトル対応命令フォーマット1300のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1244は、REXフィールド1305、REX'フィールド1310、MODR/M.regフィールド1344、MODR/M.r/mフィールド1346、VVVVフィールド1320、xxxフィールド1354、およびbbbフィールド1356を含む。
【0162】
拡大演算フィールド
図13Dは、本発明の一実施形態に係る拡大演算フィールド1250を構成する特定的ベクトル対応命令フォーマット1300のフィールドを示すブロック図である。クラス(U)フィールド1268が0を包含するときには、それはEVEX.U0(クラスA 1268A)を意味し、それが1を包含するときには、それはEVEX.U1(クラスB 1268B)を意味する。U=0かつMODフィールド1342が11を包含する(非メモリアクセス演算を意味する)ときには、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)はrsフィールド1252Aとして解釈される。rsフィールド1252Aが1(丸め1252A.1)を包含するときには、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は丸め制御フィールド1254Aとして解釈される。丸め制御フィールド1254Aは、1ビットSAEフィールド1256および2ビット丸め演算フィールド1258を含む。rsフィールド1252Aが0(データ変形1252A.2)を包含するときには、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は3ビットデータ変形フィールド1254Bとして解釈される。U=0かつMODフィールド1342が00、01、または10を包含する(メモリアクセス演算を意味する)ときには、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)はエビクションヒント(eviction hint、EH)フィールド1252Bとして解釈され、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は3ビットデータ操作フィールド1254Cとして解釈される。
【0163】
U=1のときには、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)は書き込みマスク制御(Z)フィールド1252Cとして解釈される。U=1かつMODフィールド1342が11を包含する(非メモリアクセス演算を意味する)ときには、ベータフィールド1254の一部(EVEXバイト3、ビット[4]−S
0)はRLフィールド1257Aとして解釈され、それが1(丸め1257A.1)を包含するときには、ベータフィールド1254の残りのもの(EVEXバイト3、ビット[6〜5]−S
2−1)は丸め演算フィールド1259Aとして解釈される。一方、RLフィールド1257Aが0(VSIZE 1257.A2)を包含するときには、ベータフィールド1254(EVEXバイト3、ビット[6〜5]−S
2−1)の残りのものはベクトル長フィールド1259B(EVEXバイト3、ビット[6〜5]−L
1−0)として解釈される。U=1かつMODフィールド1342が00、01、または10を包含する(メモリアクセス演算を意味する)ときには、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)はベクトル長フィールド1259B(EVEXバイト3、ビット[6〜5]−L
1−0)およびブロードキャストフィールド1257B(EVEXバイト3、ビット[4]−B)として解釈される。
【0164】
例示的なレジスタアーキテクチャ
図14は、本発明の一実施形態に係るレジスタアーキテクチャ1400のブロック図である。図示の実施形態では、512ビット幅である32個のベクトルレジスタ1410があり、これらのレジスタはzmm0〜zmm31として参照される。下位16個のzmmレジスタの下位順256ビットはレジスタymm0〜16に重ね合わせられる。下位16個のzmmレジスタの下位順128ビット(ymmレジスタの下位順128ビット)はレジスタxmm0〜15に重ね合わせられる。以下の表に示されているように、特定的ベクトル対応命令フォーマット1300は、これらの重ね合わせられたレジスタファイル上で演算を行う。
【表1】
【0165】
換言すると、ベクトル長フィールド1259Bは、最大長と、各々直前の長さの半分である1つ以上の他のより短い長さとの間で選択を行い、ベクトル長フィールド1259Bを備えない命令テンプレートは最大ベクトル長で演算を行う。さらに、一実施形態では、特定的ベクトル対応命令フォーマット1300のクラスB命令テンプレートは、パックまたはスカラ単/倍精度浮動小数点データおよびパックまたはスカラ整数データに対して演算を行う。スカラ演算は、zmm/ymm/xmmレジスタ内の最下位データ要素ポジションに対して遂行される演算であり、上位のデータ要素ポジションは実施形態に依存して命令の前の状態と同じままに残されるかまたはゼロ化される。
【0166】
書き込みマスクレジスタ1415−図示の実施形態では、各々64ビットのサイズである、8つの書き込みマスクレジスタ(k0〜k7)が存在する。代替実施形態では、書き込みマスクレジスタ1415は16ビットのサイズである。上述のように、本発明の一実施形態では、ベクトルマスクレジスタk0は書き込みマスクとして用いることができない。k0を通常示すであろうエンコーディングが書き込みマスクのために用いられる場合には、それは0xFFFFのハードワイヤード書き込みマスクを選択し、その命令のために書き込みマスキングを効果的に無効にする。
【0167】
汎用レジスタ1425−図示の実施形態では、メモリオペランドをアドレス指定するための既存のx86アドレス指定方式とともに用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、名前RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15によって参照される。
【0168】
MMXパック整数フラットレジスタファイル1450がエイリアスされる、スカラ浮動小数点スタックレジスタファイル(x87スタック)1445−図示の実施形態では、x87スタックは、x87命令セット拡張を用いて32/64/80ビット浮動小数点データに対してスカラ浮動小数点演算を遂行するために用いられる8要素スタックである。一方、MMXレジスタは、64ビットパック整数データに対して演算を遂行するため、ならびにMMXおよびXMMレジスタの間で遂行される一部の演算用にオペランドを保持するために用いられる。
【0169】
本発明の代替実施形態は、より幅の広いまたは狭いレジスタを用いてもよい。加えて、本発明の代替実施形態は、より多数の、より少数の、または異なるレジスタファイルおよびレジスタを用いてもよい。
【0170】
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ プロセッサコアは、種々の方法で、種々の目的のために、種々のプロセッサ内に実装されてよい。例えば、このようなコアの実装は以下のものを含んでよい:1)汎用コンピューティング向きの汎用インオーダコア、2)汎用コンピューティング向きの高性能汎用アウトオブオーダコア、3)主としてグラフィックスおよび/または科学(スループット)コンピューティング向きの専用コア。種々のプロセッサの実装は以下のものを含んでよい:1)汎用コンピューティング向きの1つ以上の汎用インオーダコアおよび/または汎用コンピューティング向きの1つ以上の汎用アウトオブオーダコアを含むCPU、ならびに2)主としてグラフィックスおよび/または科学(スループット)向きの1つ以上の専用コアを含むコプロセッサ。こうした種々のプロセッサは、以下のものを含んでよい、種々のコンピュータシステムアーキテクチャをもたらす:1)CPUから独立したチップ上のコプロセッサ、2)CPUと同じパッケージ内の独立したダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合には、このようなコプロセッサは、時として、統合グラフィックスおよび/または科学(スループット)論理等の、専用論理、あるいは専用コアと呼ばれる)、ならびに4)上述のCPU(時として、アプリケーションコア(単数または複数)またはアプリケーションプロセッサ(単数または複数)と呼ばれる)、上述のコプロセッサ、および追加の機能性を同じダイ上に含んでよい1チップ上のシステム。次に、例示的なコアアーキテクチャを説明し、その後、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
【0171】
例示的なコアアーキテクチャインオーダおよびアウトオブオーダコアブロック図
図15Aは、本発明の諸実施形態に係る例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
図15Bは、本発明の諸実施形態に係るプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
図15A〜15Bにおける実線の囲み線はインオーダパイプラインおよびインオーダコアを示し、一方、破線の囲み線の任意の追加はレジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであることを考慮し、アウトオブオーダの態様を説明する。
【0172】
図15Aでは、プロセッサパイプライン1500が、フェッチステージ1502、長さデコードステージ1504、デコードステージ1506、割り当てステージ1508、リネームステージ1510、スケジューリング(配付または発行としても知られる)ステージ1512、レジスタ読み出し/メモリ読み出しステージ1514、実行ステージ1516、書き戻し/メモリ書き込みステージ1518、例外処理ステージ1522、および完遂ステージ1524を含む。
【0173】
図15Bは、実行エンジンユニット1550と結合されるフロントエンドユニット1530を含むプロセッサコア1590を示し、両者ともメモリユニット1570と結合されている。コア1590は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドあるいは代替的なコア形式であってよい。さらに別の選択物として、コア1590は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(general purpose computing graphics processing unit、GPGPU)コア、グラフィックスコア、あるいは同様のもの等の、専用コアであってよい。
【0174】
フロントエンドユニット1530は、命令キャッシュユニット1534と結合される分岐予測ユニット1532を含み、命令キャッシュユニット1534は命令トランスレーションルックアサイドバッファ(translation lookaside buffer、TLB)1536と結合され、命令トランスレーションルックアサイドバッファ1536は命令フェッチユニット1538と結合され、命令フェッチユニット1538はデコードユニット1540と結合される。デコードユニット1540(またはデコーダ)は命令をデコードし、元の命令からデコードされるか、または別の方法でそれを反映するか、もしくはそれから生成される、1つ以上のマイクロ演算、マイクロコード入口点、マイクロ命令、その他の命令、またはその他の制御信号を出力として生成してよい。デコードユニット1540は種々の異なる機構を用いて実装され得る。好適な機構の例としては、以下のものに限定されるわけではないが、ルックアップテーブル、ハードウェア実装、プログラム可能論理アレイ(PLA)、マイクロコード・リードオンリーメモリ(ROM)等が挙げられる。一実施形態では、コア1590は、特定のマクロ命令のためのマイクロコードを格納するマイクロコードROMまたはその他の媒体を(例えば、デコードユニット1540内、または別の方法でフロントエンドユニット1530内部に)含む。デコードユニット1540は実行エンジンユニット1550内のリネーム/アロケータユニット1552と結合される。
【0175】
実行エンジンユニット1550は、リタイアメントユニット1554および一連の1つ以上のスケジューラユニット(単数または複数)1556と結合されるリネーム/アロケータユニット1552を含む。スケジューラユニット(単数または複数)1556は、リザベーションステーション、中央命令ウィンドウ等を含む、任意の数の種々のスケジューラを表す。スケジューラユニット(単数または複数)1556は物理レジスタファイル(単数または複数)ユニット(単数または複数)1558と結合される。物理レジスタファイル(単数または複数)ユニット1558の各々は1つ以上の物理レジスタファイルを表す。物理レジスタファイルはそれぞれ、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)など等の、1つ以上の異なるデータ型を格納する。一実施形態では、物理レジスタファイル(単数または複数)ユニット1558は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供してよい。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る種々の方法を示すために(例えば、リオーダバッファ(単数または複数)ならびにリタイアメントレジスタファイル(単数または複数)を用いる方法、将来のファイル(単数または複数)、履歴バッファ(単数または複数)、およびリタイアメントレジスタファイル(単数または複数)を用いる方法、レジスタマップおよびレジスタのプールを用いる方法等)、物理レジスタファイル(単数または複数)ユニット(単数または複数)1558はリタイアメントユニット1554によってオーバラップされている。リタイアメントユニット1554および物理レジスタファイル(単数または複数)ユニット(単数または複数)1558は実行クラスタ(単数または複数)1560と結合される。実行クラスタ(単数または複数)1560は、一連の1つ以上の実行ユニット1562および一連の1つ以上のメモリアクセスユニット1564を含む。実行ユニット1562は種々の演算(例えば、シフト、加算、減算、乗算)を種々の型のデータ(例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して遂行してよい。
一部の実施形態は特定の機能または機能セット専用の多数の実行ユニットを含んでよく、一方、他の実施形態は、全てが全機能を遂行する唯一の実行ユニットまたは複数の実行ユニットを含んでよい。スケジューラユニット(単数または複数)1556、物理レジスタファイル(単数または複数)ユニット(単数または複数)1558、および実行クラスタ(単数または複数)1560は、場合により複数あるように示されている。これは、一部の実施形態は、一部の型のデータ/演算用に独立したパイプラインを作成するためである(例えば、独自のスケジューラユニット、物理レジスタファイル(単数または複数)ユニット、および/または実行クラスタを各々有するスカラ整数パイプライン、スカラ浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインである−ならびに、独立したメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット(単数または複数)1564を有する特定の実施形態が実装される)。独立パイプラインが用いられる場合、これらのパイプラインのうちの1つ以上はアウトオブオーダ発行/実行であり、残りのものはインオーダであってよいことも理解されたい。
【0176】
一連のメモリアクセスユニット1564はメモリユニット1570と結合される。メモリユニット1570は、レベル2(L2)キャッシュユニット1576と結合されるデータキャッシュユニット1574と結合されるデータTLBユニット1572を含む。1つの例示的な実施形態では、メモリアクセスユニット1564は、メモリユニット1570内のデータTLBユニット1572と各々結合される、ロードユニット、アドレス格納ユニット、およびデータ格納ユニットを含んでよい。命令キャッシュユニット1534はメモリユニット1570内のレベル2(L2)キャッシュユニット1576とさらに結合される。L2キャッシュユニット1576は1つ以上の他のレベルのキャッシュと結合され、最終的に主メモリと結合される。
【0177】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは以下のようにパイプライン1500を実装し得る:1)命令フェッチ1538がフェッチおよび長さデコードステージ1502および1504を遂行する、2)デコードユニット1540がデコードステージ1506を遂行する、3)リネーム/アロケータユニット1552が割り当てステージ1508およびリネームステージ1510を遂行する、4)スケジューラユニット(単数または複数)1556がスケジュールステージ1512を遂行する、5)物理レジスタファイル(単数または複数)ユニット(単数または複数)1558およびメモリユニット1570がレジスタ読み出し/メモリ読み出しステージ1514を遂行し、実行クラスタ1560が実行ステージ1516を遂行する、6)メモリユニット1570および物理レジスタファイル(単数または複数)ユニット(単数または複数)1558が書き戻し/メモリ書き込みステージ1518を遂行する、7)種々のユニットが例外処理ステージ1522に関わり得る、ならびに8)リタイアメントユニット1554および物理レジスタファイル(単数または複数)ユニット(単数または複数)1558が完遂ステージ1524を遂行する。
【0178】
コア1590は、本明細書に記載されている命令(単数または複数)を含む、1つ以上の命令セット(例えば、x86命令セット(より新しいバージョンに追加されたいくつかの拡張を含む)、サニーベール(Sunnyvale)、CAのミップス・テクノロジーズ(MIPS Technologies)のMIPS命令セット、サニーベール、CAのARMホールディングス(ARM Holdings)のARM命令セット(NEON等の任意追加の拡張を含む))をサポートしてよい。一実施形態では、コア1590は、パックデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするための論理を含み、それにより、多くのマルチメディアアプリケーションによって用いられる演算を、パックデータを用いて遂行することを可能にする。
【0179】
コアはマルチスレッド(演算またはスレッドの2つ以上の並列セットを実行する)をサポートしてよく、タイムスライスマルチスレッド、同時マルチスレッド(単一の物理コアが、その物理コアが同時にマルチスレッド化しているスレッドの各々のための論理コアを提供する)、あるいはそれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディング技術におけるもの等のタイムスライスフェッチおよびデコードとその後の同時マルチスレッド)を含む、種々の方法でそれを行ってよいことを理解されたい。
【0180】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて用いられてもよいことを理解されたい。プロセッサの図示の実施形態は、独立した命令およびデータキャッシュユニット1534/1574および共有L2キャッシュユニット1576も含むが、代替実施形態は、例えば、レベル1(Level 1、L1)内部キャッシュ、または複数のレベルの内部キャッシュ等の、命令およびデータの双方のための単一の内部キャッシュを有してもよい。実施形態によっては、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、キャッシュは全てコアおよび/またはプロセッサの外部にあってもよい。
【0181】
具体的な例示的インオーダコアアーキテクチャ
図16A〜16Bは、インオーダコアアーキテクチャであって、このコアはチップ内のいくつかの(同じ種類および/または異なる種類の他のコアを含む)論理ブロックの1つになるであろう、より特定的な例示的インオーダコアアーキテクチャのブロック図を示す。論理ブロックは、用途に応じて、何らかの固定機能論理、メモリI/Oインタフェース、およびその他の必要なI/O論理を用い、高帯域幅相互接続ネットワーク(例えば、環状ネットワーク)を通じて通信する。
【0182】
図16Aは、本発明の諸実施形態に係る、シングルプロセッサコアのブロック図であって、その、オンダイ相互接続ネットワーク1602への接続、およびその、レベル2(L2)キャッシュのローカルサブセット1604を伴うブロック図である。一実施形態では、命令デコーダ1600が、パックデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1606が、スカラおよびベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態では(設計を単純にするために)、スカラユニット1608およびベクトルユニット1610が、独立したレジスタセット(それぞれ、スカラレジスタ1612およびベクトルレジスタ1614)を用い、それらの間で転送されたデータはメモリに書き込まれ、その後、レベル1(L1)キャッシュ1606から読み戻されるが、本発明の代替実施形態は異なるアプローチを用いてもよい(例えば、単一のレジスタセットを用いるか、またはデータを、書き込みおよび読み戻しせずに、2つのレジスタファイルの間で転送することを可能にする通信経路を含む)。
【0183】
L2キャッシュ1604のローカルサブセットは、プロセッサコア毎に1つずつ、独立したローカルサブセットに分割された大域的L2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1604のそれ自身のローカルサブセットへの直接アクセス経路を有する。プロセッサコアによって読み込まれたデータはそのL2キャッシュサブセット1604内に格納され、他のプロセッサコアがそれら自身のローカルL2キャッシュサブセットにアクセスするのと並列に、迅速にアクセスすることができる。プロセッサコアによって書き出されたデータは、必要に応じて、それ自身のL2キャッシュサブセット1604内に格納され、他のサブセットからフラッシュされる。環状ネットワークは共有データのためのコヒーレンシを確実にする。環状ネットワークは双方向性であり、プロセッサコア、L2キャッシュおよびその他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にする。各環状データ経路は方向毎に1012ビット幅である。
【0184】
図16Bは、本発明の諸実施形態に係る
図16Aにおけるプロセッサコアの一部の拡大図である。
図16Bは、L1キャッシュ1606のL1データキャッシュ1606A部分、ならびにベクトルユニット1610およびベクトルレジスタ1614に関するさらなる詳細を含む。具体的には、ベクトルユニット1610は、整数、単精度浮動小数、および倍精度浮動小数命令のうちの1つ以上を実行する、16幅ベクトル処理ユニット(vector processing unit、VPU)(16幅ALU 1628参照)である。VPUは、スウィズルユニット1620によるレジスタ入力のスウィズル、数値変換ユニット1622A〜Bによる数値変換、および複製ユニット1624によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ1626は、結果として生じるベクトル書き込みの叙述を可能にする。
【0185】
統合メモリコントローラおよびグラフィックスを備えるプロセッサ
図17は、本発明の諸実施形態に係る、1つを超えるコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよいプロセッサ1700のブロック図である。
図17における実線の囲み線は、単一のコア1702A、システムエージェント1710、一連の1つ以上のバスコントローラユニット1716を備えるプロセッサ1700を示し、一方、破線の囲み線の任意の追加は、複数のコア1702A〜N、システムエージェントユニット1710内の一連の1つ以上の統合メモリコントローラユニット(単数または複数)1714、および専用論理1708を備える代替プロセッサ1700を示す。
【0186】
それゆえ、プロセッサ1700の種々の実装には以下のものがあり得る:1)専用論理1708が統合グラフィックスおよび/または科学(スループット)論理(1つ以上のコアを含んでよい)であり、コア1702A〜Nが1つ以上の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その2つの組み合わせ)である、CPU、2)コア1702A〜Nが、主としてグラフィックスおよび/または科学(スループット)向けの多数の専用コアである、コプロセッサ、ならびに3)コア1702A〜Nが多数の汎用インオーダコアである、コプロセッサ。それゆえ、プロセッサ1700は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループット・メニー・インテグレーテッド・コア(many integrated core、MIC)コプロセッサ(30個以上のコアを含む)、組み込みプロセッサ、または同様のもの等の、汎用プロセッサ、コプロセッサまたは専用プロセッサであってよい。プロセッサは1つ以上のチップ上に実装されてよい。プロセッサ1700は、例えば、BiCMOS、CMOS、またはNMOS等の、多数の製造技術の任意のものを用いた1つ以上の基板の一部であってよく、および/またはその上に実装されてよい。
【0187】
メモリ階層は、コア内部の1つ以上のレベルのキャッシュ、一連の1つ以上の共有キャッシュユニット1706、および一連の統合メモリコントローラユニット1714と結合される外部メモリ(不図示)を含む。一連の共有キャッシュユニット1706は、レベル2(L2)、レベル3(L3)、レベル4(L4)、またはその他のレベルのキャッシュ等の、1つ以上の中間レベルキャッシュ、ラストレベルキャッシュ(last level cache、LLC)、および/またはこれらの組み合わせを含んでよい。一実施形態では、環状ベースの相互接続ユニット1712が、統合グラフィックス論理1708、一連の共有キャッシュユニット1706、およびシステムエージェントユニット1710/統合メモリコントローラユニット(単数または複数)1714を相互接続するが、代替実施形態は、このようなユニットを相互接続するための周知の技法をいくつ用いてもよい。一実施形態では、1つ以上のキャッシュユニット1706とコア1702−A〜Nとの間においてコヒーレンシが維持される。
【0188】
実施形態によっては、コア1702A〜Nのうちの1つ以上はマルチスレッドの能力を有する。システムエージェント1710は、コア1702A〜Nを調整および操作するそれらの構成要素を含む。システムエージェントユニット1710は、例えば、出力調整装置(power control unit、PCU)および表示ユニットを含んでよい。PCUは、コア1702A〜Nおよび統合グラフィックス論理1708の電力状態の調整に必要な論理および構成要素であるか、またはそれらを含んでよい。表示ユニットは、1つ以上の外部接続ディスプレイを駆動するためのものである。
【0189】
コア1702A〜Nはアーキテクチャ命令セットに関して同種または異種であってよい。すなわち、コア1702A〜Nのうちの2つ以上は同じ命令セットを実行する能力を有してよく、一方、その他のものはその命令セットのサブセットのみまたは異なる命令セットを実行する能力を有してよい。
【0190】
例示的なコンピュータアーキテクチャ
図18〜21は例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(digital signal processor、DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および種々のその他の電子デバイス用の当技術分野において周知のその他のシステム設計および構成も好適である。概して、本明細書に開示されている通りのプロセッサおよび/またはその他の実行論理を組み込む能力を有する多様なシステムまたは電子デバイスが一般的に好適である。
【0191】
次に
図18を参照すると、図示されているのは、本発明の一実施形態に係るシステム1800のブロック図である。システム1800は、コントローラハブ1820と結合される、1つ以上のプロセッサ1810、1815を含んでよい。一実施形態では、コントローラハブ1820は、グラフィックスメモリコントローラハブ(graphics memory controller hub、GMCH)1890および入力/出力ハブ(Input/Output Hub、IOH)1850(独立したチップ上にあってよい)を含む。GMCH 1890は、メモリ1840およびコプロセッサ1845が結合されるメモリコントローラおよびグラフィックスコントローラを含む。IOH 1850が入力/出力(I/O)デバイス1860をGMCH 1890に結合する。代替的に、メモリコントローラおよびグラフィックスコントローラの一方または両方は(本明細書に記載されているように)プロセッサ内部に統合され、メモリ1840およびコプロセッサ1845は、プロセッサ1810と、IOH 1850を備える単一のチップ内のコントローラハブ1820とに直接結合される。
【0192】
図18では、追加プロセッサ1815の任意追加性が破線で表されている。各プロセッサ1810、1815は、本明細書に記載されている処理コアのうちの1つ以上を含んでよく、プロセッサ1700をいくらか変形したものであってよい。
【0193】
メモリ1840は、例えば、ダイナミック・ランダムアクセスメモリ(DRAM)、相変化メモリ(phase change memory、PCM)、またはその2つの組み合わせであってよい。少なくとも1つの実施形態のために、コントローラハブ1820は、フロントサイドバス(frontside bus、FSB)等のマルチドロップバス、クイックパスインターコネクト(QuickPath Interconnect、QPI)等のポイント・ツー・ポイント・インタフェース、または同様の接続1895を介してプロセッサ(単数または複数)1810、1815と通信する。
【0194】
一実施形態では、コプロセッサ1845は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサである。一実施形態では、コントローラハブ1820は統合グラフィックスアクセラレータを含んでよい。
【0195】
物理資源1810、1815の間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性、および同様のものを含む様々な利点のメトリクスに関して、種々の相違がある。
【0196】
一実施形態では、プロセッサ1810は、一般型のデータ処理演算制御する命令を実行する。命令内にはコプロセッサ命令が組み込まれていてよい。プロセッサ1810は、これらのコプロセッサ命令を、付加コプロセッサ1845によって実行するべきである型のものであると認識する。それに応じて、プロセッサ1810は、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサバスまたはその他の相互接続部上においてコプロセッサ1845へと発する。コプロセッサ(単数または複数)1845は、受信されたコプロセッサ命令を受け付け、実行する。
【0197】
次に
図19を参照すると、図示されているのは、本発明の一実施形態に係る第1のより特定的な例示的システム1900のブロック図である。
図19に示されているように、多重プロセッサシステム1900はポイント・ツー・ポイント相互接続システムであり、ポイント・ツー・ポイント相互接続1950を介して結合される第1プロセッサ1970および第2プロセッサ1980を含む。プロセッサ1970および1980の各々はプロセッサ1700をいくらか変形したものであってよい。本発明の一実施形態では、プロセッサ1970および1980はそれぞれプロセッサ1810および1815であり、一方、コプロセッサ1938はコプロセッサ1845である。別の実施形態では、プロセッサ1970および1980はそれぞれプロセッサ1810およびコプロセッサ1845である。
【0198】
プロセッサ1970および1980は、統合メモリコントローラ(IMC)ユニット1972および1982をそれぞれ含んで示されている。プロセッサ1970はそのバスコントローラユニットの一部としてポイント・ツー・ポイント(point−to−point、P−P)インタフェース1976および1978も含み、同様に、第2プロセッサ1980はP−Pインタフェース1986および1988を含む。プロセッサ1970、1980は、P−Pインタフェース回路1978、1988を用い、ポイント・ツー・ポイント(P−P)インタフェース1950を介して情報を交換してよい。
図19に示されるように、IMC1972および1982はプロセッサをそれぞれのメモリ、すなわちメモリ1932およびメモリ1934、に結合する。それぞれのメモリは、それぞれのプロセッサにローカルに付加された主メモリの一部あってよい。
【0199】
プロセッサ1970、1980は各々、ポイント・ツー・ポイント・インタフェース回路1976、1994、1986、1998を用い、個々のP−Pインタフェース1952、1954を介してチップセット1990と情報を交換してよい。チップセット1990は、高性能インタフェース1939を介してコプロセッサ1938と情報を任意追加的に交換してよい。一実施形態では、コプロセッサ1938は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサである。
【0200】
共有キャッシュ(不図示)がどちらかのプロセッサ内に含まれるか、または両プロセッサの外部に、P−P相互接続を介してプロセッサとなお接続されて含まれてよく、それにより、プロセッサが低電力モードに置かれると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてよい。
【0201】
チップセット1990はインタフェース1996を介して第1バス1916と結合されてよい。一実施形態では、第1バス1916は、周辺装置相互接続(Peripheral Component Interconnect、PCI)バス、あるいはPCIエクスプレスバスまたは別の第3世代I/O相互接続バス等のバスであってよい。ただし、本発明の範囲はそのように限定されるわけではない。
【0202】
図19に示されるように、種々のI/Oデバイス1914が、第1バス1916を第2バス1920に結合するバスブリッジ1918とともに、第1バス1916に結合されてよい。一実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールド・プログラマブル・ゲート・アレイ、あるいは任意の他のプロセッサ等の、1つ以上の追加プロセッサ(単数または複数)1915が第1バス1916に結合される。一実施形態では、第2バス1920はローピンカウント(low pin count、LPC)バスであってよい。一実施形態では、例えば、キーボードおよび/またはマウス1922、通信デバイス1927、ならびに命令/コードおよびデータ1930を含んでよいディスクドライブまたはその他の大容量記憶デバイス等の記憶ユニット1928を含む、種々のデバイスが第2バス1920に結合されてよい。さらに、オーディオI/O1924が第2バス1920に結合されてよい。その他のアーキテクチャがあり得ることに留意されたい。例えば、
図19のポイント・ツー・ポイント・アーキテクチャの代わりに、システムがマルチドロップバスまたはその他のこうしたアーキテクチャを実装してよい。
【0203】
次に
図20を参照すると、図示されているのは、本発明の一実施形態に係る第2のより特定的な例示的システム2000のブロック図である。
図19および20における同様の要素は同様の参照番号を有し、
図19の一部の態様は、
図20の他の態様を不明瞭にすることを回避するために、
図20から省かれている。
【0204】
図20は、プロセッサ1970、1980は統合メモリおよびI/O制御論理(control logic、「CL」)1972および1982それぞれを含んでよいことを示している。それゆえ、CL1972、1982は統合メモリコントローラユニットを含み、I/O制御論理を含む。
図20は、メモリ1932、1934がCL1972、1982と結合されることだけではなく、I/Oデバイス2014が制御論理1972、1982と結合されることも示している。レガシーI/Oデバイス2015がチップセット1990と結合されている。
【0205】
次に
図21を参照すると、示されているのは、本発明の一実施形態に係るSoC 2100のブロック図である。
図17における同様の要素は同様の参照番号を有する。さらに、破線の囲み線は、より高度のSoC上の任意追加の特徴である。
図21では、相互接続ユニット(単数または複数)2102が以下のものと結合されている:一連の1つ以上のコア1702A〜N、および共有キャッシュユニット(単数または複数)1706を含むアプリケーションプロセッサ2110;システムエージェントユニット1710;バスコントローラユニット(単数または複数)1716;統合メモリコントローラユニット(単数または複数)1714;統合グラフィックス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含んでよい一連の1つ以上のコプロセッサ2120;スタティック・ランダムアクセスメモリ(static random access memory、SRAM)ユニット2130;直接メモリアクセス(direct memory access、DMA)ユニット2132;および1つ以上の外部ディスプレイと結合するための表示ユニット2140。一実施形態では、コプロセッサ(単数または複数)2120は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサを含む。
【0206】
本明細書に開示されている機構の諸実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはこうした実装アプローチの組み合わせの形で実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性および不揮発性メモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、ならびに少なくとも1つの出力デバイスを含むプログラム可能システム上で実行するコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0207】
本明細書に記載されている機能を遂行し、出力情報を生成するための命令を入力するために、
図19に示されているコード1930等のプログラムコードが適用されてよい。出力情報は既知の方法で1つ以上の出力デバイスに適用されてよい。この適用の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(application specific integrated circuit、ASIC)、またはマイクロプロセッサ等の、プロセッサを有する任意のシステムを含む。
【0208】
プログラムコードは、処理システムと通信するために、高レベル手続き形またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、所望の場合には、アセンブリまたは機械言語で実装されてもよい。実際には、本明細書に記載されている機構はいかなる特定のプログラミング言語にも範囲を限定されない。いずれにせよ、言語はコンパイラ型またはインタプリタ型言語であってよい。
【0209】
少なくとも1つの実施形態の1つ以上の態様は、機械によって読み込まれると、本明細書に記載されている技法を遂行するための論理を機械に作らせる、プロセッサ内の種々の論理を代表する機械可読媒体上に格納された代表命令によって実装されてよい。「IPコア」としても知られるこのような代表は、有形の機械可読媒体上に格納され、論理またはプロセッサを実際に作る製作機械内にロードするために種々の顧客または製造工場に供給されてよい。
【0210】
このような機械可読記憶媒体としては、限定されるわけではないが、ハードディスク;フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク・リードオンリーメモリ(compact disk read−only memories、CD−ROM)、コンパクトディスクリライタブル(compact disk rewritable、CD−RW)、および磁気光ディスクを含む任意の他の種類のディスク;リードオンリーメモリ(ROM)、ダイナミック・ランダムアクセスメモリ(DRAM)、スタティック・ランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラム可能リードオンリーメモリ(erasable programmable read−only memories、EPROM)、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ(electrically erasable programmable read−only memories、EEPROM)、相変化メモリ(PCM)等の半導体デバイス;磁気または光カード;あるいは電子命令の格納に適した任意の他の種類の媒体を含む記憶媒体等の、機械またはデバイスによって製造または形成される非一時的な有形の物品の機構が挙げられる。
【0211】
したがって、本発明の諸実施形態は、本明細書に記載されている構造、回路、装置、プロセッサおよび/またはシステムの特徴を定義する、ハードウェア記述言語(Hardware Description Language、HDL)等の、命令を包含するかまたは設計データを包含する非一時的な有形の機械可読媒体も含む。このような実施形態はプログラム製品と呼ばれてもよい。
【0212】
エミュレーション(バイナリトランスレーション、コードモーフィング等を含む) 場合によっては、命令をソース命令セットからターゲット命令セットに変換するために、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアによって処理されるべき1つ以上の他の命令に変換するか(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて)、モーフィングするか、エミュレートするか、または別の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせの形で実装されてよい。命令コンバータは、プロセッサ上、プロセッサ外、あるいは一部プロセッサ上および一部プロセッサ外にあってよい。
【0213】
図22は、本発明の諸実施形態に係る、ソース命令セット内の2進命令をターゲット命令セット内の2進命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示の実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェア、あるいはこれらの種々の組み合わせの形で実装されてもよい。
図22は、少なくとも1つのx86命令セットコアを備えるプロセッサ2216によってネイティブに実行され得るx86 2進コード2206を生成するために、高レベル言語2202のプログラムが、x86コンパイラ2204を用いてコンパイルされてよいことを示している。少なくとも1つのx86命令セットコアを備えるプロセッサ2216は、少なくとも1つのx86命令セットコアを備えるインテルプロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットの相当の部分、あるいは(2)少なくとも1つのx86命令セットコアを備えるインテルプロセッサ上で走ることを目的としたアプリケーションまたはその他のソフトウェアの目的コードバージョンを、互換的に実行するかまたは別の方法でを処理することによって、少なくとも1つのx86命令セットコアを備えるインテルプロセッサと実質的に同じ機能を遂行することができる任意のプロセッサを表す。x86コンパイラ2204は、追加の連係処理を用いて、または用いずに、少なくとも1つのx86命令セットコアを備えるプロセッサ2216上で実行することができるx86 2進コード2206(例えば、目的コード)を生成するように動作可能であるコンパイラを表す。
同様に、
図22は、少なくとも1つのx86命令セットコアを備えないプロセッサ2214(例えば、サニーベール、CAのミップス・テクノロジーズのMIPS命令セットを実行し、かつ/またはサニーベール、CAのARMホールディングスのARM命令セットを実行するコアを備えるプロセッサ)によってネイティブに実行され得る代替命令セット2進コード2210を生成するために、高レベル言語2202のプログラムが、代替の命令セットコンパイラ2208を用いてコンパイルされてよいことを示している。命令コンバータ2212は、x86 2進コード2206を、x86命令セットコアを備えないプロセッサ2214によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは代替命令セット2進コード2210と同じにはなりにくい。なぜなら、この能力を有する命令コンバータは製作が難しいからである。しかし、変換されたコードは一般的な演算を果たし、代替命令セットからの命令で構成されることになる。それゆえ、命令コンバータ2212は、エミュレーション、シミュレーションまたは任意の他のプロセスを通じて、x86命令セットプロセッサまたはコアを有しないプロセッサまたはその他の電子デバイスがx86 2進コード2206を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【0214】
図4〜9のいずれかについて説明されている構成要素、特徴、および細部は、
図1〜3のいずれかにおいて任意追加的に用いられてもよい。
図4のフォーマットは、本明細書に開示されている命令または実施形態のいずれのものによって用いられてもよい。
図10のレジスタは、本明細書に開示されている命令または実施形態のいずれのものによって用いられてもよい。さらに、本明細書に記載されている、いずれの装置に関する構成要素、特徴、および細部も、諸実施形態においてこうした装置によっておよび/またはそれを用いて遂行され得る、本明細書に記載されているあらゆる方法において同様に任意追加的に用いられ得る。
【0215】
実施形態例 以下の例はさらなる実施形態に関連する。各例における特質は1つ以上の実施形態のどこかに用いられ得る。
【0216】
例1は命令処理装置である。装置は複数のパックデータレジスタを含む。装置は、パックデータレジスタと結合される実行ユニットであって、この実行ユニットは、第1の複数のパックデータ要素を含む第1ソースパックデータ、第2の複数のパックデータ要素を含む第2ソースパックデータ、およびデスティネーション記憶位置を示す複数要素対複数要素比較命令に応答して、複数のパック結果データ要素を含むパックデータ結果をデスティネーション記憶位置内に格納するように動作可能である、実行ユニットも含む。結果データ要素の各々は第2ソースパックデータのデータ要素の別個のものに対応し、結果データ要素の各々は、結果データ要素に対応する第2ソースパックデータのデータ要素と比較された第1ソースパックデータの各対応するデータ要素毎に異なる比較マスクビットを含む複数ビット比較マスクを含み、各比較マスクビットは、対応する比較の結果を示す。
【0217】
例2は例1の主題を含み、任意追加的に、実行ユニットが、命令に応答して、第1ソースパックデータの全データ要素と第2ソースパックデータの全データ要素との比較の結果を示すパックデータ結果を格納する。
【0218】
例3は例1の主題を含み、任意追加的に、実行ユニットが、命令に応答して、所与のパック結果データ要素内に、第1ソースパックデータのパックデータ要素のうちのどれが、所与のパック結果データ要素に対応する第2ソースのパックデータ要素と等しいのかを示す複数ビット比較マスクを格納する。
【0219】
例4は例1〜3のいずれか1つの主題を含み、任意追加的に、第1ソースパックデータがN個のパックデータ要素を有し、第2ソースパックデータがN個のパックデータ要素を有し、実行ユニットが、命令に応答して、N個のNビットパック結果データ要素を含むパックデータ結果を格納する。
【0220】
例5は例4の主題を含み、任意追加的に、第1ソースパックデータが8個の8ビットパックデータ要素を有し、第2ソースパックデータが8個の8ビットパックデータ要素を有し、実行ユニットが、命令に応答して、8個の8ビットパック結果データ要素を含むパックデータ結果を格納する。
【0221】
例6は例4の主題を含み、任意追加的に、第1ソースパックデータが16個の8ビットパックデータ要素を有し、第2ソースパックデータが16個の8ビットパックデータ要素を有し、実行ユニットが、命令に応答して、16個の16ビットパック結果データ要素を含むパックデータ結果を格納する。
【0222】
例7は例4の主題を含み、任意追加的に、第1ソースパックデータが32個の8ビットパックデータ要素を有し、第2ソースパックデータが32個の8ビットパックデータ要素を有し、実行ユニットが、命令に応答して、32個の32ビットパック結果データ要素を含むパックデータ結果を格納する。
【0223】
例8は例1〜3のいずれか1つの主題を含み、任意追加的に、第1ソースパックデータがN個のパックデータ要素を有し、第2ソースパックデータがN個のパックデータ要素を有し、命令がオフセットを指示し、実行ユニットが、命令に応答してN/2個のNビットパック結果データ要素を含むパックデータ結果を格納し、N/2個のNビットパック結果データ要素のうちの最下位のものが、オフセットによって指示される第2ソースのパックデータ要素に対応する。
【0224】
例9は例1〜3のいずれかの主題を含み、任意追加的に、実行ユニットが、命令に応答して、複数ビット比較マスクを含むパック結果データ要素を格納し、複数ビット比較マスクにおいて、各マスクビットは、第1ソースパックデータの対応パックデータ要素が、パック結果データ要素に対応する第2ソースのパックデータ要素と等しいことを示すための2進値の1の値、および第1ソースパックデータの対応パックデータ要素が、パック結果データ要素に対応する第2ソースのパックデータ要素と等しくないことを示すための2進値の0の値を有する。
【0225】
例10は例1〜3のいずれか1つの主題を含み、任意追加的に、実行ユニットが、命令に応答して、第1および第2ソースパックデータの一方のデータ要素のサブセットのみと第1および第2ソースパックデータのもう一方のデータ要素との比較の結果を示す複数ビット比較マスクを格納する。
【0226】
例11は例1〜3のいずれかの主題を含み、任意追加的に、命令が、比較される第1および第2ソースパックデータの一方のデータ要素のサブセットを示す。
【0227】
例12は例1〜3のいずれかの主題を含み、任意追加的に、命令がデスティネーション記憶位置を暗黙的に示す。
【0228】
例13は命令処理方法である。方法は、複数要素対複数要素比較命令を受信することであって、複数要素対複数要素比較命令は、第1の複数のパックデータ要素を有する第1ソースパックデータ、第2の複数のパックデータ要素を有する第2ソースパックデータ、およびデスティネーション記憶位置を示す、複数要素対複数要素比較命令を受信することを含む。方法は、複数要素対複数要素比較命令に応答して、複数のパック結果データ要素を含むパックデータ結果をデスティネーション記憶位置内に格納することも含む。パック結果データ要素の各々は第2ソースパックデータのパックデータ要素の個別のものに対応し、パック結果データ要素の各々は、比較の結果を示すために、パック結果データ要素に対応する第2ソースのパックデータ要素と比較された、第1ソースパックデータの各対応パックデータ要素毎に異なるマスクビットを含む複数ビット比較マスクを含む。
【0229】
例14は例13の主題を含み、任意追加的に、格納が、第1ソースパックデータの全データ要素と第2ソースパックデータの全データ要素との比較結果を示すパックデータ結果を格納することを含む。
【0230】
例15は例13の主題を含み、任意追加的に、受信が、N個のパックデータ要素を有する第1ソースパックデータ、およびN個のパックデータ要素を有する第2ソースパックデータを示す命令を受信することを含み、格納が、N個のNビットパック結果データ要素を含むパックデータ結果を格納することを含む。
【0231】
例16は例15の主題を含み、任意追加的に、受信が、16個の8ビットパックデータ要素を有する第1ソースパックデータ、および16個の8ビットパックデータ要素を有する第2ソースパックデータを示す命令を受信することを含み、格納が、16個の16ビットパック結果データ要素を含むパックデータ結果を格納することを含む。
【0232】
例17は例13の主題を含み、任意追加的に、受信が、N個のパックデータ要素を有する第1ソースパックデータを指示し、N個のパックデータ要素を有する第2ソースパックデータを指示し、オフセットを示す命令を受信することを含み、格納が、N/2個のNビットパック結果データ要素を含むパックデータ結果を格納することを含み、N/2個のNビットパック結果データ要素のうちの最下位のものは、オフセットによって指示される第2ソースのパックデータ要素に対応する。
【0233】
例18は例13のいずれかの主題を含み、任意追加的に、受信が、N個のパックデータ要素を有する第1ソースパックデータを指示し、N個のパックデータ要素を有する第2ソースパックデータを指示し、オフセットを示す命令を受信することを含み、格納が、N/2個のNビットパック結果データ要素を含むパックデータ結果を格納することを含み、N/2個のNビットパック結果データ要素のうちの最下位のものは、オフセットによって指示される第2ソースのパックデータ要素に対応する。
【0234】
例19は例13のいずれかの主題を含み、任意追加的に、受信が、第1の生物学的配列を表す第1ソースパックデータを指示し、第2の生物学的配列を表す第2ソースパックデータを示す命令を受信することを含む。
【0235】
例20は命令処理システムである。システムは相互接続部を含む。システムは、相互接続部と結合されるプロセッサも含む。システムは、相互接続部と結合されるダイナミック・ランダムアクセスメモリ(DRAM)であって、このDRAMは複数要素対複数要素比較命令を格納し、この命令は、第1の複数のパックデータ要素を含む第1ソースパックデータ、第2の複数のパックデータ要素を含む第2ソースパックデータ、およびデスティネーション記憶位置を示す、DRAMも含む。命令は、プロセッサによって実行されると、プロセッサに、複数のパック結果データ要素を含むパックデータ結果をデスティネーション記憶位置内に格納することであって、パック結果データ要素の各々は第2ソースパックデータのパックデータ要素の別個のものに対応する、格納すること、を含む演算を遂行させるように動作可能である。パック結果データ要素の各々は、第1ソースパックデータの複数のパックデータ要素と、パック結果データ要素に対応する第2ソースのパックデータ要素との比較の結果を示す複数ビット比較マスクを含む。
【0236】
例21は例20の主題を含み、任意追加的に、命令が、プロセッサによって実行されると、プロセッサに、第1ソースパックデータの全パックデータ要素と第2ソースパックデータの全データ要素との比較の結果を示すパックデータ結果を格納させるように動作可能である。
【0237】
例22は例20〜21のいずれかの主題を含み、任意追加的に、命令が、N個のパックデータ要素を有する第1ソースパックデータ、およびN個のパックデータ要素を有する第2ソースパックデータを指示し、命令が、プロセッサによって実行されると、プロセッサに、N個のNビットパック結果データ要素を含むパックデータ結果を格納させるように動作可能である。
【0238】
例23は、命令を提供するための物品である。物品は、命令を格納する非一時的機械可読記憶媒体を含む。物品は、命令は、第1の複数のパックデータ要素を有する第1ソースパックデータ、第2の複数のパックデータ要素を有する第2ソースパックデータ、およびデスティネーション記憶位置を指示し、命令は、機械によって実行されると、機械に、複数のパック結果データ要素を含むパックデータ結果をデスティネーション記憶位置内に格納することであって、パック結果データ要素の各々は第2ソースパックデータのパックデータ要素の個別のものに対応し、パック結果データ要素の各々は複数ビット比較マスクを含み、各複数ビット比較マスクは、第1ソースパックデータの複数のパックデータ要素と、複数ビット比較マスクを有するパック結果データ要素に対応する第2ソースのパックデータ要素との比較の結果を示す、格納すること、を含む演算を遂行させるように動作可能であること、も含む。
【0239】
例24は例23の主題を含み、任意追加的に、命令が、N個のパックデータ要素を有する第1ソースパックデータ、およびN個のパックデータ要素を有する第2ソースパックデータを指示し、命令が、機械によって実行されると、機械に、N個のNビットパック結果データ要素を含むパックデータ結果を格納させるように動作可能である。
【0240】
例25は例23〜24の主題を含み、任意追加的に、非一時的機械可読記憶媒体が、不揮発性メモリ、DRAM、およびCD−ROMのうちの1つを含み、命令が、機械によって実行されると、機械に、第1ソースパックデータの全パックデータ要素の中のどれが第2ソースパックデータの全データ要素の中のどれと等しいのかを示すパックデータ結果を格納させるように動作可能である。
【0241】
例26は、例13〜19のいずれか1つの方法を遂行するための装置を含む。
【0242】
例27は、例13〜19のいずれか1つの方法を遂行する手段を含む装置を含む。
【0243】
例28は、例13〜19のいずれか1つの方法を遂行するためのデコード手段および実行手段を含む装置を含む。
【0244】
例29は、機械によって実行されると、機械に、例13〜19のいずれか1つの方法を遂行させる命令を格納する機械可読記憶媒体を含む。
【0245】
例30は、実質的に本明細書に記載されている通りの方法を遂行するための装置を含む。
【0246】
例31は、実質的に本明細書に記載されている通りの命令を実行するための装置を含む。
【0247】
例32は、実質的に本明細書に記載されている通りの方法を遂行する手段を含む装置を含む。
【0248】
明細書および請求項では、用語「結合される(coupled)」および/または「接続される(connected)」がそれらの派生語とともに用いられている。これらの用語は互いに同義語として意図されているのではないことを理解されたい。むしろ、特定の実施形態では、「接続される」は、2つ以上の要素が互いに物理的または電気的に直接接触していることを示すために用いられていてよい。「結合される」は、2つ以上の要素が物理的または電気的に接触していることを意味してよい。しかし、「結合される」は、2つ以上の要素が互いに直接接触してはいないが、それでもなお互いに協働または相互作用することを意味する場合もある。例えば、実行ユニットが1つ以上の介在構成要素を通じてレジスタまたはデコーダと結合されてよい。図では、接続および結合を示すために矢印が用いられている。
【0249】
明細書および請求項では、用語「論理」が用いられている。本明細書で用いるとき、論理は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの種々の組み合わせを含んでよい。論理の例としては、集積回路機構、特定用途向け集積回路、アナログ回路、デジタル回路、プログラム化論理デバイス、命令を含むメモリデバイス、等が挙げられる。実施形態によっては、ハードウェア論理は、場合によっては他の回路機構構成要素を伴うトランジスタおよび/またはゲートを含んでよい。
【0250】
上述の説明では、諸実施形態の完全な理解を提供するために特定の細部が説明された。しかし、他の実施形態は、これらの特定の細部の一部を用いずに実施されてもよい。本発明の範囲は、以上に提供されている具体例によって定まるのではなく、添付の請求項によってのみ定まる。図面に示され、本明細書に記載されているものと同等関係のものは全て実施形態の範囲に含まれる。他の例では、説明の理解を不明瞭にすることを回避するために、周知の回路、構造、デバイス、および演算がブロック図の形式で、または細部を有せずに示されている。複数の構成要素が示され、説明されている一部の例では、それらはまとめて単一の構成要素に統合されてもよい。単一の構成要素が示され、説明されている場合、一部の例では、この単一の構成要素は2つ以上の構成要素に分離されてもよい。
【0251】
種々の演算および方法が説明されている。フロー図では、方法の一部は比較的基本的な形で記載されているが、演算が方法に任意に追加されてもよく、および/またはそれらから削除されてもよい。加えて、フロー図は実施形態例に係る演算の特定の順序を示しているが、その特定の順序は例示的なものである。代替実施形態は、必要に応じて、異なる順序で演算を遂行する、一部の演算を組み合わせる、一部の演算を重複させるなどしてよい。
【0252】
一部の演算は、ハードウェア構成要素によって遂行され得るか、あるいは機械実行可能または回路実行可能命令であって、演算を遂行する命令をプログラムされた機械、回路、またはハードウェア構成要素(例えば、プロセッサ、プロセッサの一部、回路、等)を生じさせ、および/またはもたらすべく用いられ得る、機械実行可能または回路実行可能命令の形で具体化され得る。演算は任意選択的にハードウェアおよびソフトウェアの組み合わせによって遂行されてもよい。プロセッサ、機械、回路、またはハードウェアが、命令を実行および/または処理し、命令に応答した結果を格納するように動作可能である特定または特別の回路機構あるいはその他の論理(例えば、場合によってはファームウェアおよび/またはソフトウェアと組み合わせられるハードウェア)を含んでもよい。
【0253】
一部の実施形態は、機械可読媒体を含む物品(例えば、コンピュータプログラム製品)を含む。媒体は、機械によって読み取り可能である形式で情報を提供する、例えば格納する、機構を含んでよい。機械可読媒体は、機械によって実行されると、および/または実行された時に、本明細書に開示されている1つ以上の演算、方法、または技法を機械に遂行させ、ならびに/あるいはそれらを遂行する機械をもたらすように動作可能である命令または命令列を提供するか、またはそれらをその上に格納させてよい。機械可読媒体は、本明細書に開示されている命令の実施形態のうちの1つ以上を提供してよい、例えば格納してよい。
【0254】
実施形態によっては、機械可読媒体は有形かつ/または非一時的機械可読記憶媒体を含んでよい。例えば、有形かつ/または非一時的機械可読記憶媒体としては、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、光学式データ記憶デバイス、CD−ROM、磁気ディスク、磁気光ディスク、リードオンリーメモリ(ROM)、プログラム可能ROM(PROM)、消去可能プログラム可能ROM(EPROM)、電気的消去可能プログラム可能ROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス、または同様のものが挙げられる。非一時的機械可読記憶媒体は一時的な伝播信号からなるものではない。別の実施形態では、機械可読媒体は、一時的機械可読通信媒体、例えば、搬送波、赤外線信号、デジタル信号、または同様のもの等の、電気的、光学的、音響的またはその他の形態の伝播信号、を含んでよい。
【0255】
好適な機械の例としては、以下のものに限定されるわけではないが、汎用プロセッサ、専用プロセッサ、命令処理装置、デジタル論理回路、集積回路、および同様のものが挙げられる。好適な機械のさらに別の例としては、このようなプロセッサ、命令処理装置、デジタル論理回路、または集積回路を組み込むコンピューティングデバイスおよびその他の電子デバイスが挙げられる。このようなコンピューティングデバイスおよび電子デバイスの例としては、以下のものに限定されるわけではないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータおよびスイッチ)、携帯インターネットデバイス(Mobile Internet device、MID)、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラが挙げられる。
【0256】
本明細書全体にわたる、例えば、「一実施形態(one embodiment)」、「一実施形態(an embodiment)」、「1つ以上の実施形態(one or more embodiments)」、「一部の実施形態(some embodiments)」への言及は、特定の特徴が本発明の実施に含まれ得るが、必ずしも含まれることを必須とされるわけではないことを示す。同様に、本明細書では、開示の合理化および種々の本発明の態様の理解の助けを目的として、種々の特徴が時として単一の実施形態、図、またはその説明内にまとめてグループ化されている。しかし、この開示方法は、本発明は、各請求項において明示的に列挙されているよりも多くの特徴を必要とするという意図を反映するものと解釈してはならない。むしろ、添付の請求項が反映している通り、本発明の態様は、単一の開示実施形態の全ての特徴よりも少ない特徴に存する。それゆえ、発明を実施するための形態に続く請求項は、本明細書において、この発明を実施するための形態に明示的に組み込まれており、各請求項は本発明の独立した実施形態として自立している。