(57)【特許請求の範囲】
【請求項１】
プロセッサが実行する方法であって、
範囲インデックスのセットのアドレスを指定する単一の範囲変更命令をデコードする段階と、
範囲インデックスの前記セットへのアクセスをロックする段階と、
範囲サイズを決定するために、範囲インデックスの前記セットを読み込む段階と、
前記範囲サイズと、前記単一の範囲変更命令に対応する範囲変更を行うのに十分なサイズとを比較する段階と、
前記範囲サイズが、前記範囲変更を行うのに少なくとも十分な前記サイズである場合、前記範囲変更を実行し、範囲インデックスの前記セットのうち、１つ又は複数の変更された範囲インデックスを格納する段階と、
前記単一の範囲変更命令の完了に応答して、範囲インデックスの前記セットへのアクセスをロック解除する段階と
を備える
方法。
【請求項２】
前記範囲サイズが、前記範囲変更を行うのに十分な前記サイズより小さい場合、エラー信号をセットする段階をさらに備える、
請求項１に記載の方法。
【請求項３】
前記範囲変更は、前記単一の範囲変更命令に応答して、範囲インデックスの前記セットの第１のインデックスをアトミックに増分する段階を含む、
請求項１又は２に記載の方法。
【請求項４】
前記単一の範囲変更命令はさらにソースオペランドを指定し、前記範囲変更は、前記ソースオペランドの値を範囲インデックスの前記セットの第１のインデックスにアトミックに加算することを含む、
請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記範囲変更は、前記単一の範囲変更命令に応答して、範囲インデックスの前記セットの第２のインデックスをアトミックに減分することを含む、
請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記単一の範囲変更命令はさらにソースオペランドを指定し、前記範囲変更は、前記ソースオペランドの値を、範囲インデックスの前記セットの第２のインデックスからアトミックに減算することを含む、
請求項１から５のいずれか一項に記載の方法。
【請求項７】
プロセッサであって、
範囲インデックスのセットを格納するキャッシュメモリと、
前記プロセッサが実行するための第１の命令をデコードするデコードステージであって、前記第１の命令は範囲インデックスの前記セットのアドレスを指定する、デコードステージと、
デコードされた前記第１の命令に応答して、
範囲インデックスの前記セットへのアクセスをロックし、
範囲サイズを決定するために、範囲インデックスの前記セットを読み込み、
前記範囲サイズと、前記第１の命令に対応する範囲変更を行うのに十分なサイズとを比較し、
前記範囲サイズが、前記範囲変更を行うのに少なくとも十分な前記サイズである場合、前記範囲変更を行い、範囲インデックスの前記セットのうち、１つ又は複数の変更された範囲インデックスを格納し、
前記範囲サイズが、前記範囲変更を行うのに十分な前記サイズより小さい場合、エラー信号を第１の値にセットし、
前記第１の命令の完了に応答して、範囲インデックスの前記セットへのアクセスをロック解除する
１つ又は複数の実行ユニットと
を備える
プロセッサ。
【請求項８】
前記範囲変更は、前記第１の命令に応答して、範囲インデックスの前記セットの第１のインデックスをアトミックに増分することを含む、
請求項７に記載のプロセッサ。
【請求項９】
前記第１の命令はさらにソースオペランドを指定し、前記範囲変更は、前記ソースオペランドの値を範囲インデックスの前記セットの第１のインデックスにアトミックに加算することを含む、
請求項７又は８に記載のプロセッサ。
【請求項１０】
前記範囲変更は、前記第１の命令に応答して、範囲インデックスの前記セットの第２のインデックスをアトミックに減分することを含む、
請求項７から９のいずれか一項に記載のプロセッサ。
【請求項１１】
前記第１の命令はさらにソースオペランドを指定し、前記範囲変更は、前記ソースオペランドの値を、範囲インデックスの前記セットの第２のインデックスからアトミックに減算することを含む、
請求項７から１０のいずれか一項に記載のプロセッサ。
【請求項１２】
前記１つ又は複数の実行ユニットはさらに、デコードされた前記第１の命令に応答して、
前記範囲サイズが、前記範囲変更を行うのに少なくとも十分な前記サイズである場合、エラー信号を第２の値にセットする、
請求項７から１１のいずれか一項に記載のプロセッサ。
【請求項１３】
前記エラー信号は、プロセッサのゼロフラグレジスタにセットされる、
請求項１２に記載のプロセッサ。
【請求項１４】
前記第１の値は１であり、前記第２の値は０である、
請求項１３に記載のプロセッサ。
【請求項１５】
範囲インデックスの前記セットは、ＮＥＸＴ及びＥＮＤという２つの３２ビットインデックスを含む、
請求項７から１４のいずれか一項に記載のプロセッサ。
【請求項１６】
範囲インデックスの前記セットは、ＮＥＸＴ及びＥＮＤという２つの６４ビットインデックスを含む、
請求項７から１４のいずれか一項に記載のプロセッサ。
【請求項１７】
プロセッサにおいてアトミックな範囲演算を提供する装置であって、前記装置は、範囲インデックスのセットのアドレスを指定する第１のプロセッサ命令に応答して、
範囲インデックスの前記セットへのアクセスをロックし、
範囲サイズを決定するために、範囲インデックスの前記セットを読み込み、
前記範囲サイズと、前記第１のプロセッサ命令に対応する範囲変更を行うのに十分なサイズとを比較し、
前記範囲サイズが、前記範囲変更を行うのに少なくとも十分な前記サイズである場合、前記範囲変更を行い、範囲インデックスの前記セットのうち、１つ又は複数の変更された範囲インデックスを格納し、
前記範囲サイズが、前記範囲変更を行うのに十分な前記サイズより小さい場合、エラー信号を第１の値にセットし、
前記第１のプロセッサ命令の完了に応答して、範囲インデックスの前記セットへのアクセスをロック解除する
実行ロジックを含む、
装置。
【請求項１８】
前記範囲変更は、前記第１のプロセッサ命令に応答して、範囲インデックスの前記セットの第１のインデックスをアトミックに増分することを含む、
請求項１７に記載の装置。
【請求項１９】
前記第１のプロセッサ命令はさらにソースオペランドを指定し、前記範囲変更は、前記ソースオペランドの値を範囲インデックスの前記セットの第１のインデックスにアトミックに加算することを含む、
請求項１７又は１８に記載の装置。
【請求項２０】
前記範囲変更は、前記第１のプロセッサ命令に応答して、範囲インデックスの前記セットの第２のインデックスをアトミックに減分することを含む、
請求項１７から１９のいずれか一項に記載の装置。
【請求項２１】
前記第１のプロセッサ命令はさらにソースオペランドを指定し、前記範囲変更は、前記ソースオペランドの値を、範囲インデックスの前記セットの第２のインデックスからアトミックに減算することを含む、
請求項１７から２０のいずれか一項に記載の装置。
【請求項２２】
範囲インデックスの前記セットは、ＮＥＸＴ及びＥＮＤという２つの３２ビットインデックスを含む、
請求項１７から２１のいずれか一項に記載の装置。
【請求項２３】
範囲インデックスの前記セットは、ＮＥＸＴ及びＥＮＤという２つの６４ビットインデックスを含む、
請求項１７から２１のいずれか一項に記載の装置。
【請求項２４】
範囲インデックスのセットを格納する外部メモリと、
プロセッサと
を備える処理システムであって、
前記プロセッサは、
前記プロセッサが実行するための第１の命令をデコードするデコードステージであって、前記第１の命令は範囲インデックスの前記セットのアドレスを指定する、デコードステージと、
１つ又は複数の実行ユニットと
を含み、
前記１つ又は複数の実行ユニットは、デコードされた前記第１の命令に応答して、
範囲インデックスの前記セットへのアクセスをロックし、
範囲サイズを決定するために、範囲インデックスの前記セットを読み込み、
前記範囲サイズと、前記第１の命令に対応する範囲変更を行うのに十分なサイズとを比較し、
前記範囲サイズが、前記範囲変更を行うのに少なくとも十分な前記サイズである場合、前記範囲変更を行い、範囲インデックスの前記セットのうち、１つ又は複数の変更された範囲インデックスを格納し、
前記範囲サイズが、前記範囲変更を行うのに十分な前記サイズより小さい場合、エラー信号を第１の値にセットし、
前記第１の命令の完了に応答して、範囲インデックスの前記セットへのアクセスをロック解除する、
処理システム。
【請求項２５】
前記範囲変更は、前記第１の命令に応答して、範囲インデックスの前記セットの第１のインデックスをアトミックに増分することを含む、
請求項２４に記載の処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、処理ロジック、マイクロプロセッサ、及び、プロセッサ又は他の処理ロジックにより実行されると、読み込み動作、記憶動作、論理演算、数学的演算、又は他の関数演算を行う関連命令セットアーキテクチャの分野に関する。具体的には、本開示は、アトミックな範囲演算を提供する命令及びロジックに関する。
【背景技術】
【０００２】
マルチプロセッシングでは、プロセッサ又は論理プロセッサは、実行可能命令からなる複数のスレッドを同時に又は並列に実行するために、マルチスレッディングロジックを利用することができる。並列プログラミングの最も一般的な形態の１つは、単一プログラム複数データ（ＳＰＭＤ）として知られている。ＳＰＭＤは並列処理を実現するのに利用される技術であり、その技術では、結果をより速く取得するために、タスクが分割され、異なる入力を有する複数のプロセッサ（又は論理プロセッサ）上で同時に実行される。複数の独立したプロセッサ（又は論理プロセッサ）は、同じプログラムを独立した実行ポイントで同時に実行することができる。
【０００３】
ＳＰＭＤが単一命令複数データ（ＳＩＭＤ）と異なるのは、ＳＩＭＤが異なるデータに対して課している命令ごとのロックステップではなく、ＳＰＭＤは、関数の複数のインスタンスを呼び出すため、又はループの複数のイタレーションを複数のプロセッサ（又は論理プロセッサ）上で並列に実行するために用いられ得るという点である。これら２つの形態の並列プログラミングは、互いに排他的ではない。例えば、ＳＰＭＤプログラムは、ＳＩＭＤ命令も利用することができる。
【０００４】
実際に、現在のコンピュータでは、最大の複合効果を求めて、多くの並列モードを同時に利用することが可能な場合がある。分散メモリプログラムが、多数のノード上で実行されることがある。各ノードは、メモリを共有したコンピュータであり、複数のプロセッサ（又は論理プロセッサ）で並列に実行されてよい。各プロセッサ内では、ＳＩＭＤのベクトル命令が、最大の単一ＣＰＵ速度を求めて、スーパースカラ方式の命令実行（通常、ＣＰＵがトランスペアレントに処理する）、パイプライン方式、及び複数の並列機能ユニットを用いることができる。
【０００５】
これらの様々な形態の並列処理が一緒に利用されると、個々のＳＰＭＤタスクを実行するのに必要な処理時間は削減され得るが、例えば、タスクを分割し、そのタスクに複数のプロセッサ（又は論理プロセッサ）を割り当て、共有メモリを通じて通信するといったリアルタイムの同期を行うのに必要な処理時間が、より重要なオーバーヘッド上の課題になり、このために、そうでなければ非常に多くの形態の並列処理を同時に利用することで予想される性能向上が制限され得る。
【０００６】
今日まで、これらの課題、潜在的な性能制限の問題、リアルタイムの複雑さに取り組む解決手法は、十分に調査されてこなかった。
【図面の簡単な説明】
【０００７】
本発明は、添付図面の図に例として示されているのであって、限定として示されているのではない。
【０００８】
【図１Ａ】アトミックな範囲演算を提供する命令を実行するシステムに関する、１つの実施形態のブロック図である。
【０００９】
【図１Ｂ】アトミックな範囲演算を提供する命令を実行するシステムに関する、別の実施形態のブロック図である。
【００１０】
【図１Ｃ】アトミックな範囲演算を提供する命令を実行するシステムに関する、別の実施形態のブロック図である。
【００１１】
【図２】アトミックな範囲演算を提供する命令を実行するプロセッサに関する、１つの実施形態のブロック図である。
【００１２】
【図３Ａ】１つの実施形態によるパックドデータタイプを示す。
【００１３】
【図３Ｂ】１つの実施形態によるパックドデータタイプを示す。
【００１４】
【図３Ｃ】１つの実施形態によるパックドデータタイプを示す。
【００１５】
【図３Ｄ】１つの実施形態によるアトミックな範囲演算を提供する命令エンコーディングを示す。
【００１６】
【図３Ｅ】別の実施形態によるアトミックな範囲演算を提供する命令エンコーディングを示す。
【００１７】
【図３Ｆ】別の実施形態によるアトミックな範囲演算を提供する命令エンコーディングを示す。
【００１８】
【図３Ｇ】別の実施形態によるアトミックな範囲演算を提供する命令エンコーディングを示す。
【００１９】
【図３Ｈ】別の実施形態によるアトミックな範囲演算を提供する命令エンコーディングを示す。
【００２０】
【図４Ａ】アトミックな範囲演算を提供する命令及びロジックを有するプロセッサのマイクロアーキテクチャに関する、１つの実施形態の諸要素を示す。
【００２１】
【図４Ｂ】アトミックな範囲演算を提供する命令及びロジックを有するプロセッサのマイクロアーキテクチャに関する、別の実施形態の諸要素を示す。
【００２２】
【図５】アトミックな範囲演算を提供する命令及びロジックを有するプロセッサに関する、１つの実施形態のブロック図である。
【００２３】
【図６】アトミックな範囲演算を提供する命令及びロジックを有するコンピュータシステムに関する、１つの実施形態のブロック図である。
【００２４】
【図７】アトミックな範囲演算を提供する命令及びロジックを有するコンピュータシステムに関する、別の実施形態のブロック図である。
【００２５】
【図８】アトミックな範囲演算を提供する命令及びロジックを有するコンピュータシステムに関する、別の実施形態のブロック図である。
【００２６】
【図９】アトミックな範囲演算を提供する命令及びロジックを有するシステムオンチップに関する、１つの実施形態のブロック図である。
【００２７】
【図１０】アトミックな範囲演算を提供する命令及びロジックを有するプロセッサに関する、実施形態のブロック図である。
【００２８】
【図１１】アトミックな範囲演算を提供する命令及びロジックを有するＩＰコア開発システムに関する、１つの実施形態のブロック図である。
【００２９】
【図１２】アトミックな範囲演算を提供する命令及びロジックをサポートするアーキテクチャエミュレーションシステムの１つの実施形態を示す。
【００３０】
【図１３】アトミックな範囲演算を提供する命令を変換するシステムの１つの実施形態を示す。
【００３１】
【図１４】アトミックな範囲演算を提供する命令を用いるためのプロセッサ装置ロジックの実施形態を示す。
【００３２】
【図１５】アトミックな範囲演算を提供する命令を用いるためのプロセッサ装置ロジックの代替の実施形態を示す。
【００３３】
【図１６】アトミックな範囲演算を提供する命令を用いるためのプロセッサ装置ロジックの別の代替の実施形態を示す。
【００３４】
【図１７】アトミックな範囲演算を提供する命令を用いるためのプロセッサ装置ロジックの別の代替の実施形態を示す。
【００３５】
【図１８Ａ】アトミックな範囲演算を提供する命令を実行するプロセスに関する、１つの実施形態のフロー図を示す。
【００３６】
【図１８Ｂ】アトミックな範囲演算を提供する命令を実行するプロセスに関する、代替の実施形態のフロー図を示す。
【００３７】
【図１９Ａ】アトミックな範囲演算を提供する命令を実行するプロセスに関する、別の代替の実施形態のフロー図を示す。
【００３８】
【図１９Ｂ】アトミックな範囲演算を提供する命令を実行するプロセスに関する、別の代替の実施形態のフロー図を示す。
【発明を実施するための形態】
【００３９】
以下の説明では、プロセッサ、コンピュータシステム、又は他の処理装置内で、あるいはこれらに関連して、アトミックな範囲演算を提供する命令及び処理ロジックが開示される。
【００４０】
いくつかの実施形態では、本明細書に開示される命令及びロジックは、マルチプロセッシングシステムにおいてアトミックな範囲演算を提供する。いくつかの実施形態では、アトミックな範囲変更命令が、範囲インデックスのセットのアドレスを指定する。命令は、範囲インデックスのセットへのアクセスをロックし、範囲サイズをチェックするために範囲インデックスを読み込む。範囲サイズは、範囲変更を行うのに十分なサイズと比較される。範囲サイズが範囲変更を行うのに十分である場合、範囲変更が行われ、範囲インデックスのセットのうち、１つ又は複数の変更された範囲インデックスがメモリに戻され格納される。そうではなく、範囲サイズが上記範囲変更を行うのに十分ではない場合、エラー信号がセットされてよい。例えば、エラー信号は、レジスタにセットされる戻り値を含むことができる。いくつかの実施形態では、エラー信号は、プロセッサの条件コードレジスタ又はフラグレジスタ（例えば、ゼロフラグ）にセットされてよい。範囲インデックスのセットへのアクセスは、アトミックな範囲変更命令の完了に応答して、ロック解除される。したがって、そのようなアトミックな範囲変更命令の読み出し、条件変更、書き込みオペレーションは、システムの全ての観察者には、瞬時に行われているように見える。いくつかの実施形態では、範囲は、ＮＥＸＴ及びＥＮＤという一対の６４ビットインデックスをメモリ内に含むことができる。いくつかの代替の実施形態では、範囲は、ＮＥＸＴ及びＥＮＤという一対の３２ビット（又は１６ビット）インデックスをメモリ内に含むことができる。実施形態には、アトミックにＮＥＸＴを増分（インクリメント）する命令、アトミックにＮＥＸＴに加算する命令、アトミックにＥＮＤを減分（デクリメント）する命令、及び／又はアトミックにＥＮＤから減算する命令が含まれてよい。
【００４１】
例えば、範囲［ＮＥＸＴ，ＥＮＤ）には、ＮＥＸＴからＥＮＤ−１までのインデックスが含まれる。ＮＥＸＴがＥＮＤ以上である場合、範囲［ＮＥＸＴ，ＥＮＤ）は空である。範囲［ＮＥＸＴ，ＥＮＤ）のサイズは、ＥＮＤがＮＥＸＴより大きい場合、ＥＮＤ−ＮＥＸＴに等しい。１以上のサイズを有する範囲が、アトミックにＮＥＸＴを増分する命令（ＩＮＣ  ＮＥＸＴ）、又はアトミックにＥＮＤを減分する命令（ＤＥＣ  ＥＮＤ）を実行するのに十分である。範囲のサイズがＸ以上であれば、アトミックにＮＥＸＴにＸを加算する命令（ＡＤＤ  ＮＥＸＴ）、又はアトミックにＥＮＤからＸを減算する命令（ＳＵＢ  ＥＮＤ）を実行するのに十分である。
【００４２】
ＳＰＭＤ処理は、タスクを分割し、機能の複数のインスタンス（例えば、ベジェ曲線、ベジェサーフェス、データベース検索／更新など）を呼び出す、又は複数のプロセッサ（又は論理プロセッサ）上でループの複数のイタレーションを並列に実行するマルチプロセッシングシステムにおいて、アトミックな範囲演算を用いることができることが理解されよう。これらの複数のプロセッサ（例えば、プロセッサコア、論理プロセッサ、ハードウェアスレッドなど）が一般的なキャッシュメモリへのアクセスを共有する場合、アトミックな範囲演算を用いることによる同期（例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信）によって、協同するＳＰＭＤプロセッサ（又は論理プロセッサ）の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされる。
【００４３】
以下の説明では、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、実行可能メカニズムなどの多くの具体的な詳細が、本発明の実施形態のより完全な理解を提供するために明記されている。しかし、そのような具体的な詳細がなくても、本発明は実施できることが、当業者には理解されよう。さらに、本発明の実施形態を不必要にあいまいにしないように、いくつかのよく知られた構造、回路などは詳細に示されていない。
【００４４】
以下の実施形態はプロセッサに関して説明されているが、他のタイプの集積回路及びロジックデバイスには他の実施形態が適用可能である。本発明の実施形態に関する類似の技術及び教示は、他のタイプの回路又は半導体デバイスに適用することができ、当該回路又は半導体デバイスは、より高いパイプラインスループット及び性能の向上によって恩恵を受けることができる。本発明の実施形態の教示は、データ操作を行うあらゆるプロセッサ又は機械に適用可能である。しかし、本発明は５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、又は１６ビットのデータ操作を行うプロセッサ又は機械に限定されず、本発明は、データの操作又は管理が行われるあらゆるプロセッサ及び機械に適用することができる。さらに、以下の説明は複数の例を提供しており、添付図面は例示を目的として様々な例を示している。しかし、これらの例は、本発明の実施形態に関する全ての可能性のある実装を網羅的に列挙して提供するのではなく、単に本発明の実施形態の例を提供することを意図しているので、限定的な意味において解釈されるべきではない。
【００４５】
以下の例は、実行ユニット及びロジック回路との関連で命令の処理及び分配を説明するが、本発明の他の実施形態は、機械により行われると、本発明の少なくとも１つの実施形態と一致する機能を機械に行わせる機械可読で有形の媒体に格納されたデータ及び／又は命令によって実現され得る。１つの実施形態では、本発明の実施形態に関連付けられる機能は、機械実行可能命令で具現化される。命令は、命令でプログラムされる汎用プロセッサ又は専用プロセッサに、本発明の段階を行わせるのに用いることができる。本発明の実施形態は、本発明の実施形態による１つ又は複数のオペレーションを行うために、コンピュータ（又は他の電子デバイス）をプログラムするのに用いることができる命令を格納した機械可読媒体又はコンピュータ可読媒体を含み得るコンピュータプログラム製品又はソフトウェアとして提供されてよい。あるいは、本発明の実施形態の複数の段階は、当該段階を行うための固定機能ロジックを含む特定のハードウェアコンポーネントによって、又はプログラムされたコンピュータコンポーネント及び固定機能ハードウェアコンポーネントの任意の組み合わせによって、行われることもある。
【００４６】
本発明の実施形態を行うロジックをプログラムするのに用いられる命令は、ＤＲＡＭ、キャッシュ、フラッシュメモリ、又は他のストレージなど、システム内のメモリの中に格納することができる。さらに、命令は、ネットワークを介して、又は他のコンピュータ可読媒体によって配信することができる。したがって、機械可読媒体は、機械（例えば、コンピュータ）が可読な形態で、情報を格納又は送信するためのあらゆるメカニズムを含むことができ、当該メカニズムには、限定されないが、フロッピー（登録商標）ディスケット、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、及び光磁気ディスク、並びに、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、磁気カード又は光カード、フラッシュメモリ、あるいは、電気、光、音波、又は他の形態の伝搬信号（例えば、搬送波、赤外線信号、デジタル信号など）を介してインターネット上で情報の送信に用いられる有形の機械可読ストレージが含まれる。したがって、コンピュータ可読媒体には、機械（例えば、コンピュータ）が可読な形態で電子命令又は電子情報を格納又は送信するのに適した、あらゆるタイプの有形の機械可読媒体が含まれる。
【００４７】
設計は、作成からシミュレーション、製造まで様々なステージを経ることもある。設計を表すデータは、複数の形式で設計を表すことができる。まず、シミュレーションで役立つように、ハードウェア記述言語又は別の機能記述言語を用いて、ハードウェアを表すことができる。さらに、ロジック及び／又はトランジスタゲートを用いた回路レベルのモデルを、設計プロセスのいくつかのステージで作り出すことができる。さらに、大部分の設計が、どこかのステージにおいて、ハードウェアモデルで様々なデバイスの物理配置を表すデータレベルに到達する。従来の半導体製造技術が用いられる場合には、ハードウェアモデルを表すデータは、集積回路を製造するのに用いられるマスクの異なるマスクレイヤ上に様々な特徴が存在する又は存在しないことを指定するデータであってよい。設計のあらゆる表現において、データは、あらゆる形態の機械可読媒体に格納されてよい。メモリ、あるいはディスクなどの磁気ストレージ又は光ストレージは、光波又は電波を介して送信された情報を格納する機械可読媒体であってよく、光波又は電波は、そのような情報を送信するよう変調される、又は別の方法で生成される。コード又は設計を示す、あるいはそれを搬送する電気搬送波が、電気信号のコピー、バッファリング、再送信が行われるという程度まで送信されると、新たなコピーが作られる。したがって、通信事業者又はネットワーク事業者は、搬送波にエンコードされた情報などの物品を、有形の機械可読媒体に少なくとも一時的に格納して、本発明の実施形態の技術を具現化することができる。
【００４８】
現代のプロセッサでは、複数の異なる実行ユニットが、様々なコード及び命令を処理して実行するのに用いられる。命令によっては、より高速で完了するものもあれば、完了に多くのクロックサイクルを必要とし得るものもあるなど、全ての命令が等しく作成されているわけではない。命令のスループットが高速になればなるほど、プロセッサの全体的な性能もそれだけ良くなる。したがって、多くの命令を可能な限り高速で実行させることが有利であろう。しかし、複雑さがより増して、実行時間及びプロセッサリソースに関してより多くを必要とする特定の命令が存在する。例えば、浮動小数点命令、ロード／ストア演算、データ移動などがある。
【００４９】
より多くのコンピュータシステムがインターネット、テキスト、及びマルチメディアアプリケーションで用いられるにつれ、追加のプロセッササポートが徐々に導入されている。１つの実施形態では、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み処理及び例外処理、並びに外部入力及び出力（Ｉ／Ｏ）を含む１つ又は複数のコンピュータアーキテクチャに、命令セットが関連付けられてよい。
【００５０】
１つの実施形態では、命令セットアーキテクチャ（ＩＳＡ）は１つ又は複数のマイクロアーキテクチャで実装されてよく、マイクロアーキテクチャには１つ又は複数の命令セットを実装するのに用いられるプロセッサロジック及び回路が含まれる。代替の実施形態は、マイクロコード、拡張マイクロコード又はマイクロコードアシスト、ハイパーバイザ、バイナリ変換、ハードウェア、再コンパイルなどによって、ＩＳＡを実装することができる。したがって、異なるマイクロアーキテクチャを有するプロセッサが、共通の命令セットの少なくとも一部を共有することができる。例えば、Ｉｎｔｅｌ（登録商標）のＰｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）のＣｏｒｅ （商標）プロセッサ、及びＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，Ｉｎｃ．（カリフォルニア州、サニーベール）のプロセッサは、ほぼ同一バージョンのｘ８６命令セット（より新しいバージョンに追加された、いくつかの拡張を有する）を実装するが、異なる内部設計を有する。同様に、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ．、ＭＩＰＳなどの他のプロセッサ開発会社、あるいはこれらのライセンス先又は採用者が設計したプロセッサは、共通の命令セットの少なくとも一部を共有することができるが、異なるプロセッサ設計を含むこともできる。例えば、ＩＳＡの同じレジスタアーキテクチャは、異なる方法で、異なるマイクロアーキテクチャに、新たな技術又はよく知られた技術を用いて実装することができ、専用物理レジスタ、レジスタリネーミングメカニズムを用いる（例えば、レジスタエイリアステーブル（ＲＡＴ）、リオーダバッファ（ＲＯＢ）及びリタイアメントレジスタファイルを用いる）１つ又は複数の動的に割り当てられる物理レジスタを含む。１つの実施形態では、レジスタは１つ又は複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、又は他のレジスタセットを含んでよく、それらは、ソフトウェアプログラマがアドレス指定可能であってもなくてもよい。
【００５１】
１つの実施形態では、命令は１つ又は複数の命令フォーマットを含むことができる。１つの実施形態では、命令フォーマットは、とりわけ、行われるべき演算、及びその演算が行われるオペランドを指定する様々なフィールド（ビットの数、ビットの位置など）を示すことができる。いくつかの命令フォーマットは、命令テンプレート（又はサブフォーマット）によって、さらに分割され定義されることもある。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するよう定義されてよく、及び／又は異なるように解釈された所与のフィールドを有するよう定義されてもよい。１つの実施形態では、命令は命令フォーマットを用いて（及び、定義されている場合は、命令フォーマットの命令テンプレートのうち所与の１つで）表され、演算及びその演算が処理するオペランドを指定又は示す。
【００５２】
科学アプリケーション、財務アプリケーション、自動ベクトル化された汎用アプリケーション、ＲＭＳ（認識、マイニング、及び合成）アプリケーション、並びに視覚アプリケーション及びマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィックス、画像処理、映像圧縮／解凍、音声認識アルゴリズム、オーディオ操作）は、同じ演算が多数のデータ項目に対して行われることを必要とし得る。１つの実施形態では、単一命令複数データ（ＳＩＭＤ）は、複数のデータ要素に対して１つの演算をプロセッサに行わせる命令のタイプを指す。ＳＩＭＤ技術は、レジスタ内のビットを複数の固定サイズ又は可変サイズのデータ要素に論理的に分割できるプロセッサに用いることができ、各データ要素は別個の値を表す。例えば、１つの実施形態では、６４ビットレジスタ内のビットは、４つの別個の１６ビットデータ要素を含むソースオペランドとして編成することができ、各データ要素は別個の１６ビット値を表す。このタイプのデータは、「パックド」データタイプ、又は「ベクトル」データタイプと呼ばれることもあり、このデータタイプのオペランドは、パックドデータオペランド又はベクトルオペランドと呼ばれる。１つの実施形態では、パックドデータ項目又はベクトルは、単一のレジスタ内に格納された一連のパックドデータ要素であってよく、パックドデータオペランド又はベクトルオペランドは、ＳＩＭＤ命令（あるいは、「パックドデータ命令」又は「ベクトル命令」）のソースオペランド又はデスティネーションオペランドであってよい。１つの実施形態では、ＳＩＭＤ命令は、２つのソースベクトルオペランドに対して行われる単一のベクトル演算を指定し、同じ又は異なるサイズのデスティネーションベクトルオペランド（結果ベクトルオペランドとも呼ばれる）を、同じ又は異なる数のデータ要素を用いて、同じ又は異なるデータ要素の順序で生成する。
【００５３】
ｘ８６命令、ＭＭＸ（商標）命令、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、ＳＳＥ３命令、ＳＳＥ４．１命令、及びＳＳＥ４．２命令を含む命令セットを有するＩｎｔｅｌ（登録商標）のＣｏｒｅ （商標）プロセッサ、ベクトル浮動小数点（ＶＦＰ）命令及び／又はＮＥＯＮ命令を含む命令セットを有するＡＲＭのＣｏｒｔｅｘ（登録商標）ファミリのプロセッサなどのＡＲＭプロセッサ、並びに中国科学院の計算技術研究所（ＩＣＴ）が開発した龍芯（Ｌｏｏｎｇｓｏｎ）ファミリのプロセッサなどＭＩＰＳプロセッサにより採用された技術などのＳＩＭＤ技術は、アプリケーション性能において著しい向上を可能にした（Ｃｏｒｅ （商標）及びＭＭＸ（商標）は、Ｉｎｔｅｌ（登録商標）Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア州、サンタクララ）の登録商標又は商標である）。
【００５４】
１つの実施形態では、デスティネーション及びソースレジスタ／データは、対応するデータ又は演算のソース及びデスティネーションを表す一般名称である。いくつかの実施形態では、これらは、レジスタ、メモリ、又は示されたもの以外の他の名称又は機能を有する他のストレージ領域により実装されてもよい。例えば、１つの実施形態では、「ＤＥＳＴ１」が一時的なストレージレジスタ又は他のストレージ領域であってよく、「ＳＲＣ１」及び「ＳＲＣ２」が、第１及び第２のソースストレージレジスタ又は他のストレージ領域であってよい、などである。他の実施形態では、ＳＲＣストレージ領域及びＤＥＳＴストレージ領域のうち２つ又はそれより多くが、同じストレージ領域内（例えば、ＳＩＭＤレジスタ）の異なるデータストレージエレメントに対応してよい。１つの実施形態では、複数のソースレジスタのうち１つが、例えば、第１のソースデータ及び第２のソースデータに対して行われた演算結果をデスティネーションレジスタとして機能する２つのソースレジスタのうちの１つに書き戻すことによって、デスティネーションレジスタとしても動作してよい。
【００５５】
図１Ａは、本発明の１つの実施形態による命令を実行する実行ユニットを含むプロセッサと共に形成された、例示的なコンピュータシステムのブロック図である。システム１００は、本明細書で説明される実施形態などにおいて、本発明に従って、プロセスデータ用のアルゴリズムを実行するロジックを含んだ実行ユニットを利用するプロセッサ１０２などのコンポーネントを含む。システム１００は、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア、サンタクララ）から入手可能なＰｅｎｔｉｕｍ（登録商標）ＩＩＩ、Ｐｅｎｔｉｕｍ（登録商標）４、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（商標）、及び／又はＳｔｒｏｎｇＡＲＭ（商標）マイクロプロセッサに基づく処理システムを代表するものであるが、他のシステム（他のマイクロプロセッサを有するＰＣ、エンジニアリングワークステーション、セットトップボックスなどを含む）が用いられてもよい。１つの実施形態では、例示のシステム１００は、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ（ワシントン州、レドモンド）から入手可能なＷｉｎｄｏｗｓ（登録商標）版のオペレーティングシステムを実行することができるが、他のオペレーティングシステム（例えば、ＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標））、組込みソフトウェア、及び／又はグラフィカルユーザインタフェースが用いられてもよい。したがって、本発明の実施形態は、ハードウェア回路、及びソフトウェアのいかなる具体的な組み合わせにも限定されてはいない。
【００５６】
実施形態はコンピュータシステムに限定されてはいない。本発明の代替の実施形態は、ハンドヘルドデバイス及び組込みアプリケーションなどの他のデバイスにおいて用いられ得る。ハンドヘルドデバイスのいくつかの例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末（ＰＤＡ）、及びハンドヘルドＰＣが含まれる。組込みアプリケーションには、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、又は少なくとも１つの実施形態に従って１つ又は複数の命令を実行することができる任意の他のシステムが含まれ得る。
【００５７】
図１Ａは、本発明の１つの実施形態による少なくとも１つの命令を実行するアルゴリズムを実行する１つ又は複数の実行ユニット１０８を含んだプロセッサ１０２と共に形成される、コンピュータシステム１００のブロック図である。１つの実施形態は、単一プロセッサのデスクトップ又はサーバシステムとの関連で説明することができるが、代替の実施形態は、マルチプロセッサシステムに含まれ得る。システム１００は、「ハブ」システムアーキテクチャの例である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０２を含む。プロセッサ１０２は、例えば、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、又は、デジタル信号プロセッサなどのその他のプロセッサデバイスであり得る。プロセッサ１０２は、プロセッサ１０２とシステム１００内の他のコンポーネントとの間でデータ信号を送信することができるプロセッサバス１１０に結合される。システム１００の諸要素は、当技術分野に詳しい者によく知られた従来の機能を実行する。
【００５８】
１つの実施形態では、プロセッサ１０２はレベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。あるいは、別の実施形態では、キャッシュメモリはプロセッサ１０２の外部に存在することもできる。他の実施形態は、特定の実装及び必要に応じて、内部キャッシュ及び外部キャッシュの両方の組み合わせを含むこともできる。レジスタファイル１０６は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに、異なるタイプのデータを格納することができる。
【００５９】
整数及び浮動小数点演算を実行するロジックを含む実行ユニット１０８も、プロセッサ１０２内に存在する。プロセッサ１０２は、特定のマクロ命令用のマイクロコードを格納するマイクロコード（ｕｃｏｄｅ）ＲＯＭも含む。１つの実施形態では、実行ユニット１０８はパックド命令セット１０９を処理するロジックを含む。命令を実行する関連回路と共に、パックド命令セット１０９を汎用プロセッサ１０２の命令セットに含めることで、多くのマルチメディアアプリケーションにより用いられる演算は、汎用プロセッサ１０２内のパックドデータを用いて実行されてよい。したがって、多くのマルチメディアアプリケーションは、パックドデータに演算を実行するために、プロセッサのデータバスの全幅を用いることで、より効率的に加速され実行され得る。これにより、１つ又は複数の演算を一度に１つのデータ要素に対して実行するために、より小さいユニットのデータをプロセッサのデータバス全体にわたって転送する必要性を排除することができる。
【００６０】
実行ユニット１０８の代替の実施形態も、マイクロコントローラ、組込みプロセッサ、グラフィックスデバイス、ＤＳＰ、及び他のタイプのロジック回路に用いられ得る。システム１００はメモリ１２０を含む。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、又は他のメモリデバイスであり得る。メモリ１２０は、プロセッサ１０２が実行できるデータ信号で表される命令及び／又はデータを格納することができる。
【００６１】
システムロジックチップ１１６が、プロセッサバス１１０及びメモリ１２０に結合される。例示された実施形態のシステムロジックチップ１１６はメモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６と通信することができる。ＭＣＨ１１６は、命令及びデータのストレージ用に、並びにグラフィックスコマンド、データ、及びテクスチャのストレージ用に、高帯域幅のメモリパス１１８をメモリ１２０に提供する。ＭＣＨ１１６は、プロセッサ１０２、メモリ１２０、及びシステム１００内の他のコンポーネントの間でデータ信号を送信し、プロセッサバス１１０、メモリ１２０、及びシステムＩ／Ｏ１２２の間でデータ信号を橋渡しする。いくつかの実施形態では、システムロジックチップ１１６は、グラフィックスコントローラ１１２に結合するためのグラフィックスポートを提供することができる。ＭＣＨ１１６は、メモリインタフェース１１８を通じてメモリ１２０に結合される。グラフィックスカード１１２は、加速式グラフィックスポート（ＡＧＰ）相互接続１１４を通じてＭＣＨ１１６に結合される。
【００６２】
システム１００は、独自のハブインタフェースバス１２２を用いて、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に結合する。ＩＣＨ１３０は、ローカルＩ／Ｏバスを介して、いくつかのＩ／Ｏデバイスに直接接続を提供する。ローカルＩ／Ｏバスは、メモリ１２０、チップセット、及びプロセッサ１０２に周辺機器を接続するための高速Ｉ／Ｏバスである。いくつかの例には、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線送受信機１２６、データストレージ１２４、ユーザ入力及びキーボードインタフェースを含むレガシＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）などのシリアル拡張ポート、並びにネットワークコントローラ１３４がある。データストレージデバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス、又は他の大容量ストレージデバイスを含むことができる。
【００６３】
システムの別の実施形態では、１つの実施形態による命令が、システムオンチップと共に用いられ得る。システムオンチップの１つの実施形態は、プロセッサ及びメモリを備える。そのような１つのシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステムコンポーネントと同じダイ上に位置することができる。さらに、メモリコントローラ又はグラフィックスコントローラなどの他のロジックブロックも、システムオンチップ上に位置することができる。
【００６４】
図１Ｂは、本発明の１つの実施形態の原理を実装するデータ処理システム１４０を示す。本明細書に説明される実施形態は、本発明の実施形態の範囲から逸脱することなく、代替の処理システムと共に用いられ得ることが、当業者には容易に理解されよう。
【００６５】
コンピュータシステム１４０は、１つの実施形態による少なくとも１つの命令を実行可能な処理コア１５９を備える。１つの実施形態では、処理コア１５９は、限定されないが、ＣＩＳＣ、ＲＩＳＣ、又はＶＬＩＷタイプのアーキテクチャを含むあらゆるタイプのアーキテクチャの処理ユニットを表す。処理コア１５９はまた、１つ又は複数のプロセス技術で製造するのに適している場合があり、十分な詳細さで機械可読媒体上に表されることで、上記製造を容易にするのに適している場合がある。
【００６６】
処理コア１５９は、実行ユニット１４２、レジスタファイル１４５のセット、及びデコーダ１４４を含む。処理コア１５９は、本発明の実施形態を理解するのに必須ではない追加の回路（不図示）も含む。実行ユニット１４２は、処理コア１５９が受信した命令を実行するのに用いられる。通常のプロセッサ命令を実行することに加えて、実行ユニット１４２は、パックドデータフォーマットで演算を実行するために、パックド命令セット１４３内の命令を実行することができる。パックド命令セット１４３は、本発明の実施形態を実行するための命令、及び他のパックド命令を含む。実行ユニット１４２は、内部バスでレジスタファイル１４５に結合される。レジスタファイル１４５は、データを含む情報を格納するための、処理コア１５９上のストレージ領域を表す。前述したように、パックドデータの格納に用いられるストレージ領域は、不可欠ではないことが理解される。実行ユニット１４２はデコーダ１４４に結合される。デコーダ１４４は、処理コア１５９が受信した命令を、制御信号及び／又はマイクロコードエントリポイントにデコードするのに用いられる。これらの制御信号及び／又はマイクロコードエントリポイントに応答して、実行ユニット１４２は適切な演算を実行する。１つの実施形態では、デコーダは命令のオペコードを解釈するのに用いられ、それにより、命令内に示された対応するデータに対してどの演算が行われるべきかが示されることになる。
【００６７】
処理コア１５９は、様々な他のシステムデバイスと通信するためにバス１４１に結合され、これらのシステムデバイスには、限定されないが、例えば、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）制御１４６、スタティックランダムアクセスメモリ（ＳＲＡＭ）制御１４７、バーストフラッシュメモリインタフェース１４８、パーソナルコンピュータメモリカード国際協会（ＰＣＭＣＩＡ）／コンパクトフラッシュ（登録商標）（ＣＦ）カード制御１４９、液晶ディスプレイ（ＬＣＤ）制御１５０、ダイレクトメモリアクセス（ＤＭＡ）コントローラ１５１、及び代替のバスマスタインタフェース１５２が含まれてよい。１つの実施形態では、データ処理システム１４０は、Ｉ／Ｏバス１５３を介して様々なＩ／Ｏデバイスと通信するためのＩ／Ｏブリッジ１５４も備えることができる。そのようなＩ／Ｏデバイスは、限定されないが、例えば、汎用非同期送受信機（ＵＡＲＴ）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７、及びＩ／Ｏ拡張インタフェース１５８を含むことができる。
【００６８】
データ処理システム１４０の１つの実施形態は、モバイル通信、ネットワーク通信、及び／又は無線通信、並びにテキスト文字列比較演算を含むＳＩＭＤ演算を実行可能な処理コア１５９を提供する。処理コア１５９は、様々なオーディオアルゴリズム、ビデオアルゴリズム、イメージングアルゴリズム、及び通信アルゴリズムを用いてプログラムされてよく、これらのアルゴリズムには、ウォルシュ・アダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、及びこれらのそれぞれの逆変換などの離散変換、色空間変換、ビデオエンコード動き推定又はビデオデコード動き補償などの圧縮／解凍技術、並びにパルス符号変調（ＰＣＭ）などの変調／復調（ＭＯＤＥＭ）機能が含まれる。
【００６９】
図１Ｃは、アトミックな範囲演算を提供する命令を実行することが可能な、データ処理システムの別の代替の実施形態を示す。１つの代替の実施形態において、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、及び入出力システム１６８を含むことができる。入出力システム１６８はオプションとして、無線インタフェース１６９に結合されてよい。ＳＩＭＤコプロセッサ１６１は、１つの実施形態による命令を含むオペレーションを実行可能である。処理コア１７０は、１つ又は複数のプロセス技術で製造するのに適している場合があり、十分な詳細さで機械可読媒体上に表されることで、処理コア１７０を含むデータ処理システム１６０の全て又は一部の製造を容易にするのに適している場合がある。
【００７０】
１つの実施形態では、ＳＩＭＤコプロセッサ１６１は、実行ユニット１６２及びレジスタファイルのセット１６４を含む。メインプロセッサ１６６の１つの実施形態は、実行ユニット１６２が実行するための１つの実施形態による命令を含む命令セット１６３の命令を認識するデコーダ１６５を含む。代替の実施形態では、ＳＩＭＤコプロセッサ１６１は、命令セット１６３の命令をデコードするデコーダ１６５Ｂの少なくとも一部も含む。処理コア１７０は、本発明の実施形態を理解するのに必須ではない追加の回路（不図示）も含む。
【００７１】
演算の際に、メインプロセッサ１６６は、キャッシュメモリ１６７及び入出力システム１６８とのやり取りを含む一般的なタイプのデータ処理操作を制御する一連のデータ処理命令を実行する。ＳＩＭＤコプロセッサ命令は、一連のデータ処理命令内に組み込まれている。メインプロセッサ１６６のデコーダ１６５は、これらのＳＩＭＤコプロセッサ命令を、付属のＳＩＭＤコプロセッサ１６１が実行すべきタイプのものであると認識する。したがって、メインプロセッサ１６６は、これらのＳＩＭＤコプロセッサ命令（又は、ＳＩＭＤコプロセッサ命令を表す制御信号）をコプロセッサバス１７１上に発行し、そこからＳＩＭＤコプロセッサ命令が任意の付属のＳＩＭＤコプロセッサにより受信される。この場合、ＳＩＭＤコプロセッサ１６１は、ＳＩＭＤコプロセッサ１６１を対象とした、あらゆる受信済みのＳＩＭＤコプロセッサ命令を受け付けて実行する。
【００７２】
データは、ＳＩＭＤコプロセッサ命令による処理のために、無線インタフェース１６９を介して受信されてよい。１つの例では、音声通信がデジタル信号の形態で受信されてよく、デジタル信号は、音声通信を表すデジタルオーディオサンプルを再生成するために、ＳＩＭＤコプロセッサ命令により処理されてよい。別の例では、圧縮されたオーディオ及び／又はビデオが、デジタルビットストリームの形態で受信されてよく、デジタルビットストリームは、オーディオサンプル及び／又は動画フレームを再生成するために、ＳＩＭＤコプロセッサ命令により処理されてよい。処理コア１７０の１つの実施形態では、メインプロセッサ１６６及びＳＩＭＤコプロセッサ１６１は、実行ユニット１６２、レジスタファイル１６４のセット、１つの実施形態による命令を含む命令セット１６３の命令を認識するデコーダ１６５を含む単一の処理コア１７０に統合される。
【００７３】
図２は、本発明の１つの実施形態による命令を実行するロジック回路を含むプロセッサ２００に関するマイクロアーキテクチャのブロック図である。いくつかの実施形態では、１つの実施形態による命令が、バイト、ワード、ダブルワード、クワッドワードなどのサイズ、並びに単精度及び倍精度の整数及び浮動小数点データタイプなどのデータタイプを有するデータ要素を処理するために実装され得る。１つの実施形態では、インオーダフロントエンド２０１は、実行される命令をフェッチして、プロセッサパイプラインにおいて後で用いられるよう当該命令を準備するプロセッサ２００の一部である。フロントエンド２０１は、いくつかのユニットを含むことができる。１つの実施形態では、命令プリフェッチャ２２６は、メモリから命令をフェッチし、当該命令を命令デコーダ２２８に提供し、次に命令デコーダは当該命令をデコード又は解釈する。例えば、１つの実施形態では、デコーダは、受信した命令を機械が実行できる「マイクロ命令」又は「マイクロオペレーション」と呼ばれる（マイクロｏｐ又はｕｏｐとも呼ばれる）１つ又は複数のオペレーションにデコードする。他の実施形態では、デコーダは、１つの実施形態によるオペレーションを実行するために、命令をマイクロアーキテクチャにより用いられるオペコード並びに対応するデータ及び制御フィールドにパースする。１つの実施形態では、トレースキャッシュ２３０はデコードされたｕｏｐを取得し、実行のためにそれらをプログラム順の並びに整理するか、ｕｏｐキュー２３４においてトレースする。トレースキャッシュ２３０が複雑な命令に遭遇すると、マイクロコードＲＯＭ２３２は、オペレーションを完了するのに必要なｕｏｐを提供する。
【００７４】
いくつかの命令は単一のマイクロｏｐに変換され、他の命令は全オペレーションを完了するのにいくつかのマイクロｏｐを必要とする。１つの実施形態では、命令を完了するのに４つより多くのマイクロｏｐを必要とする場合、デコーダ２２８はマイクロコードＲＯＭ２３２にアクセスして命令を実行する。１つの実施形態では、命令は、命令デコーダ２２８で処理するために、少数のマイクロｏｐにデコードされ得る。別の実施形態では、オペレーションを実現するのに多数のマイクロｏｐが必要となる場合、命令はマイクロコードＲＯＭ２３２の中に格納され得る。トレースキャッシュ２３０とは、１つの実施形態による１つ又は複数の命令を完了するマイクロコードシーケンスをマイクロコードＲＯＭ２３２から読み出すための正しいマイクロ命令ポインタを決定するエントリポイントプログラマブルロジックアレイ（ＰＬＡ）を指す。マイクロコードＲＯＭ２３２が、命令用のマイクロｏｐを順番に並べ終えた後に、機械のフロントエンド２０１は、トレースキャッシュ２３０からマイクロｏｐをフェッチすることを再開する。
【００７５】
アウトオブオーダ実行エンジン２０３は、命令が実行のために準備される場所である。アウトオブオーダ実行ロジックは複数のバッファを有し、実行のために命令がパイプラインを下り、スケジューリングされるときに性能を最適化するよう、命令のフローを滑らかにし並べ替える。アロケータロジックは、各ｕｏｐが実行するために必要な機械バッファ及びリソースを割り当てる。レジスタリネーミングロジックは、ロジックレジスタをレジスタファイルのエントリ上にリネームする。アロケータはまた、メモリスケジューラ、高速スケジューラ２０２、低速／汎用浮動小数点スケジューラ２０４、及び簡易浮動小数点スケジューラ２０６といった命令スケジューラの前段にある、１つはメモリ演算用、もう１つは非メモリ演算用となる２つのｕｏｐキューの一方に、ｕｏｐごとのエントリを割り当てる。ｕｏｐスケジューラ２０２、２０４、２０６は、これらのスケジューラが依存する入力レジスタのオペランドソースの準備状況と、ｕｏｐがそのオペレーションを完了するのに必要な実行リソースの可用性とに基づいて、ｕｏｐがいつ実行の準備ができるかを決定する。１つの実施形態の高速スケジューラ２０２は、メインクロックサイクルの各半周期においてスケジューリングすることができ、その他のスケジューラは、メインプロセッサのクロックサイクルごとに一度だけスケジューリングすることができる。スケジューラは、実行のためにｕｏｐをスケジューリングするよう、ディスパッチポートを調整する。
【００７６】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６と、実行ブロック２１１内の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４との間に位置する。別個のレジスタファイル２０８、２１０がそれぞれ、整数演算用及び浮動小数点演算用に存在する。１つの実施形態の各レジスタファイル２０８、２１０には、レジスタファイルにまだ書き込まれていない完了したばかりの結果を、新たに依存するｕｏｐにバイパス又は転送することができるバイパスネットワークも含まれる。整数レジスタファイル２０８及び浮動小数点レジスタファイル２１０は、他方とデータを通信することもできる。１つの実施形態では、整数レジスタファイル２０８は２つの別個のレジスタファイルに分割され、一方のレジスタファイルはデータの下位３２ビット用、もう一方のレジスタファイルがデータの上位３２ビット用である。１つの実施形態の浮動小数点レジスタファイル２１０が１２８ビット幅のエントリを有するのは、通常、浮動小数点命令が６４ビットから１２８ビットまでの幅のオペランドを有するからである。
【００７７】
実行ブロック２１１は、実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含み、ここで命令が実際に実行される。この部分には、マイクロ命令が実行に必要とする、整数データオペランド値及び浮動小数点データオペランド値を格納するレジスタファイル２０８、２１０が含まれる。１つの実施形態のプロセッサ２００は複数の実行ユニット、すなわち、アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４から構成される。１つの実施形態では、浮動小数点実行ブロック２２２、２２４は、浮動小数点演算、ＭＭＸ演算、ＳＩＭＤ演算、及びＳＳＥ演算、又は他の演算を実行する。１つの実施形態の浮動小数点ＡＬＵ２２２は、除算マイクロｏｐ、平方根マイクロｏｐ、及び剰余マイクロｏｐを実行する６４ビット×６４ビットの浮動小数点除算器を含む。本発明の実施形態では、浮動小数点値を含む命令は、浮動小数点ハードウェアで処理されてよい。１つの実施形態では、ＡＬＵ演算は、高速ＡＬＵ実行ユニット２１６、２１８を使う。１つの実施形態の高速ＡＬＵ２１６、２１８は、クロックサイクル半分の実効レイテンシで高速演算を実行することができる。１つの実施形態では、大部分の複雑な整数演算は低速ＡＬＵ２２０を使うが、それは、低速ＡＬＵ２２０が、乗算器、シフト、フラグロジック、及び分岐処理など、長レイテンシタイプの演算用の整数実行ハードウェアを含むからである。メモリロード／ストア演算は、ＡＧＵ２１２、２１４により実行される。１つの実施形態では、整数ＡＬＵ２１６、２１８、２２０は、６４ビットデータオペランドで整数演算を実行するという状況で説明される。代替の実施形態では、ＡＬＵ２１６、２１８、２２０は、１６ビット、３２ビット、１２８ビット、２５６ビットなどを含む様々なデータビットをサポートするよう実装され得る。同様に、浮動小数点ユニット２２２、２２４は、様々な幅のビットを有する様々なオペランドをサポートするよう実装され得る。１つの実施形態では、浮動小数点ユニット２２２、２２４は、１２８ビット幅のパックドデータオペランドをＳＩＭＤ命令及びマルチメディア命令と共に処理し得る。
【００７８】
１つの実施形態では、ｕｏｐスケジューラ２０２、２０４、２０６は、親ロードが実行を終了する前に、依存演算をディスパッチする。ｕｏｐは、プロセッサ２００において投機的にスケジューリングされ実行されるので、プロセッサ２００はメモリミスを処理するロジックも含む。データロードがデータキャッシュで失敗した場合、一時的に不正確なデータのままスケジューラを離れたインフライトの依存演算がパイプラインに存在する可能性がある。やり直しメカニズムが、不正確なデータを用いる命令を追跡して再実行する。依存演算だけがやり直される必要があり、独立演算は完了することが可能である。
【００７９】
「レジスタ」という用語は、オペランドを識別する命令の一部として用いられるオンボードプロセッサのストレージ位置を指すことができる。換言すれば、レジスタは、（プログラマの視点で）プロセッサの外側から使用可能なレジスタであってよい。しかし、実施形態のレジスタは、特定のタイプの回路に意味が限定されるべきではない。むしろ、実施形態のレジスタはデータを格納し提供すること、及び本明細書で説明される機能を実行することが可能である。本明細書で説明されるレジスタは、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとの組み合わせなどの任意の数の異なる技術を用いて、プロセッサ内の回路により実装され得る。１つの実施形態では、整数レジスタが３２ビット整数データを格納する。１つの実施形態のレジスタファイルはまた、パックドデータ用の８つのマルチメディアＳＩＭＤレジスタを含む。以下の議論では、レジスタは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア州、サンタクララ）のＭＭＸ技術を用いて可能となるマイクロプロセッサの６４ビット幅のＭＭＸ（商標）レジスタ（いくつかの例では、「ｍｍ」レジスタとも呼ばれる）など、パックドデータを保持するよう設計されたデータレジスタであると理解される。これらのＭＭＸレジスタは、整数及び浮動小数点の両方の形態で利用可能であり、ＳＩＭＤ命令及びＳＳＥ命令に付随するパックドデータ要素を用いて動作し得る。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、又はそれ以降（「ＳＳＥｘ」と総称して呼ばれる）の技術に関する１２８ビット幅のＸＭＭレジスタも、そのようなパックドデータオペランドを保持するのに用いられ得る。１つの実施形態では、パックドデータ及び整数データを格納するときに、レジスタは、その２つのデータタイプを区別する必要はない。１つの実施形態では、整数及び浮動小数点は、同じレジスタファイルに含まれているか、異なるレジスタファイルに含まれているかのいずれかである。さらに、１つの実施形態では、浮動小数点データ及び整数データは、異なるレジスタに格納されても、同じレジスタに格納されてもよい。
【００８０】
以下の図の例では、複数のデータオペランドが説明される。図３Ａは、本発明の１つの実施形態によるマルチメディアレジスタにおいて、様々なパックドデータタイプの表現を示す。図３Ａは、１２８ビット幅オペランド用のパックドバイト３１０、パックドワード３２０、及びパックドダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。この例のパックドバイトフォーマット３１０は１２８ビット長であり、１６個のパックドバイトデータ要素を含む。バイトは、ここでは８ビットのデータと定義される。バイトデータ要素ごとの情報は、バイト０ではビット７〜ビット０に、バイト１ではビット１５〜ビット８に、バイト２ではビット２３〜ビット１６に、そして最後にバイト１５ではビット１２０〜ビット１２７に格納される。したがって、全ての利用可能なビットがレジスタで用いられる。このストレージ構成で、プロセッサのストレージ効率が増加する。また、１６個のデータ要素にアクセスして、今では、１つの演算が１６個のデータ要素に対して並列に実行され得る。
【００８１】
一般に、データ要素とは、単一のレジスタ又はメモリ位置に同じ長さの他のデータ要素と共に格納される個々のデータである。ＳＳＥｘ技術に関するパックドデータシーケンスでは、ＸＭＭレジスタに格納されるデータ要素の数は、１２８ビットを個々のデータ要素のビット長で除算したものである。同様に、ＭＭＸ及びＳＳＥ技術に関するパックドデータシーケンスでは、ＭＭＸレジスタに格納されるデータ要素の数は、６４ビットを個々のデータ要素のビット長で除算したものである。図３Ａに示されるデータタイプは１２８ビット長であるが、本発明の実施形態は、６４ビット幅、２５６ビット幅、５１２ビット幅、又は他のサイズのオペランドでも動作し得る。この例のパックドワードフォーマット３２０は１２８ビット長であり、８個のパックドワードデータ要素を含む。各パックドワードは１６ビットの情報を含む。図３Ａのパックドダブルワードフォーマット３３０は１２８ビット長であり、４個のパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は３２ビットの情報を含む。パックドクワッドワードは１２８ビット長であり、２個のパックドクワッドワードデータ要素を含む。
【００８２】
図３Ｂは、代替のレジスタ内のデータストレージフォーマットを示す。各パックドデータは、１つより多くの独立データ要素を含み得る。３つのパックドデータフォーマットである、パックドハーフ３４１、パックドシングル３４２、及びパックドダブル３４３が示される。パックドハーフ３４１、パックドシングル３４２、及びパックドダブル３４３の１つの実施形態には、固定小数点のデータ要素が含まれる。代替の実施形態では、パックドハーフ３４１、パックドシングル３４２、及びパックドダブル３４３のうち１つ又は複数は、浮動小数点のデータ要素を含むことができる。パックドハーフ３４１の１つの代替の実施形態は１２８ビット長であり、８個の１６ビットデータ要素を含む。パックドシングル３４２の１つの実施形態は１２８ビット長であり、４個の３２ビットデータ要素を含む。パックドダブル３４３の１つの実施形態は１２８ビット長であり、２個の６４ビットデータ要素を含む。そのようなパックドデータフォーマットはさらに、他のレジスタ長、例えば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、５１２ビット、又はそれより多くに拡張されてもよいことが理解されよう。
【００８３】
図３Ｃは、本発明の１つの実施形態によるマルチメディアレジスタにおいて、様々な符号付き及び符号なしのパックドデータタイプの表現を示す。符号なしパックドバイト表現３４４が、ＳＩＭＤレジスタにおける符号なしパックドバイトのストレージを示す。バイトデータ要素ごとの情報は、バイト０ではビット７〜ビット０に、バイト１ではビット１５〜ビット８に、バイト２ではビット２３〜ビット１６になど、そして最後にバイト１５ではビット１２０〜ビット１２７に格納される。したがって、全ての利用可能なビットがレジスタで用いられる。このストレージ構成で、プロセッサのストレージ効率が増加し得る。また、１６個のデータ要素にアクセスして、今では、１つの演算が１６個のデータ要素に対して並列方式で実行され得る。符号付きパックドバイト表現３４５が、符号付きパックドバイトのストレージを示す。各バイトデータ要素の８番目のビットは符号標識であることに留意されたい。符号なしパックドワード表現３４６は、ワード７〜ワード０がどのようにＳＩＭＤレジスタに格納されるかを示す。符号付きパックドワード表現３４７は、符号なしパックドワードレジスタ内表現３４６に類似している。各ワードデータ要素の１６番目のビットは符号標識であることに留意されたい。符号なしパックドダブルワード表現３４８は、ダブルワードデータ要素がどのように格納されるかを示す。符号付きパックドダブルワード表現３４９は、符号なしパックドダブルワードレジスタ内表現３４８に類似している。必要な符号ビットは、各ダブルワードデータ要素の３２番目のビットであることに留意されたい。
【００８４】
図３Ｄは、３２ビット又はそれより多くのビットを有するオペレーションエンコーディング（オペコード）フォーマット３６０と、レジスタ／メモリオペランドのアドレス指定モードに関する１つの実施形態を表現したものであり、これらは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア州、サンタクララ）のワールドワイドウェブ（ｗｗｗ）ｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／から入手可能な、「Ｉｎｔｅｌ（登録商標）６４及びＩＡ−３２  Ｉｎｔｅｌ（登録商標）アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル（２Ａ及び２Ｂの合体版）：命令セットリファレンスＡ−Ｚ」に説明されるオペコードフォーマットのタイプに対応する。１つの実施形態では、命令はフィールド３６１及び３６２のうち１つ又は複数によってエンコードされてよい。１つの命令当たり２つまでのオペランド位置が識別されてよく、それらには２つまでのソースオペランド識別子３６４及び３６５が含まれる。１つの実施形態では、デスティネーションオペランド識別子３６６はソースオペランド識別子３６４と同じであるが、他の実施形態ではこれらは異なる。代替の実施形態では、デスティネーションオペランド識別子３６６はソースオペランド識別子３６５と同じであるが、他の実施形態ではこれらは異なる。１つの実施形態では、ソースオペランド識別子３６４及び３６５により識別されるソースオペランドのうち１つが、命令の結果で上書きされるが、他の実施形態では、識別子３６４はソースレジスタ要素に対応し、識別子３６５はデスティネーションレジスタ要素に対応する。１つの実施形態では、オペランド識別子３６４及び３６５は、３２ビット又は６４ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いられてもよい。
【００８５】
図３Ｅは、別の代替のオペレーションエンコーディング（オペコード）フォーマット３７０の表現であり、４０ビット又はそれより多くのビットを有する。オペコードフォーマット３７０はオペコードフォーマット３６０に対応し、オプションのプリフィックスバイト３７８を有する。１つの実施形態による命令は、フィールド３７８、３７１、及び３７２のうち１つ又は複数によってエンコードされてよい。１つの命令当たり２つまでのオペランド位置が、ソースオペランド識別子３７４及び３７５、並びにプリフィックスバイト３７８によって識別されてよい。１つの実施形態では、プリフィックスバイト３７８は、３２ビット又は６４ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いられてもよい。１つの実施形態では、デスティネーションオペランド識別子３７６はソースオペランド識別子３７４と同じであるが、他の実施形態ではこれらは異なる。代替の実施形態では、デスティネーションオペランド識別子３７６はソースオペランド識別子３７５と同じであるが、他の実施形態ではこれらは異なる。１つの実施形態では、命令は、オペランド識別子３７４及び３７５により識別されるオペランドのうち１つ又は複数を処理し、オペランド識別子３７４及び３７５により識別される１つ又は複数のオペランドは命令の結果によって上書きされるが、他の実施形態では、識別子３７４及び３７５により識別されたオペランドは、別のレジスタ内の別のデータ要素に書き込まれる。オペコードフォーマット３６０及び３７０は、ＭＯＤフィールド３６３及び３７３、並びにオプションのスケール・インデックス・ベース・バイト及び変位バイトにより部分的に指定される、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。
【００８６】
次に図３Ｆを参照すると、いくつかの代替の実施形態では、６４ビット（又は１２８ビット、又は２５６ビット、又は５１２ビット、又はそれより多くのビット）の単一命令複数データ（ＳＩＭＤ）算術演算が、コプロセッサデータ処理（ＣＤＰ）命令によって実行されてよい。オペレーションエンコーディング（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２及び３８９を有するそのようなＣＤＰ命令の１つを表す。代替の実施形態では、そのタイプのＣＤＰ命令演算は、フィールド３８３、３８４、３８７、及び３８８のうち１つ又は複数によってエンコードされてよい。１つの命令当たり３つまでのオペランド位置が識別されてよく、それらには２つまでのソースオペランド識別子３８５及び３９０、並びに１つのデスティネーションオペランド識別子３８６が含まれる。コプロセッサの１つの実施形態は、８ビット値、１６ビット値、３２ビット値、及び６４ビット値を処理することができる。１つの実施形態では、命令は整数データ要素に対して実行される。いくつかの実施形態では、命令は、条件フィールド３８１を用いて、条件付きで実行されてよい。いくつかの実施形態では、ソースデータサイズがフィールド３８３によりエンコードされてよい。いくつかの実施形態では、ゼロ（Ｚ）、ネガティブ（Ｎ）、キャリー（Ｃ）、及びオーバーフロー（Ｖ）の検出が、ＳＩＭＤフィールド上で行われ得る。いくつかの命令では、そのタイプのサチュレーションは、フィールド３８４によりエンコードされてよい。
【００８７】
次に参照する図３Ｇは、別の実施形態によるアトミックな範囲演算を提供する、別の代替のオペレーションエンコーディング（オペコード）フォーマット３９７の表現であり、Ｉｎｔｅｌ  Ｃｏｒｐ．（カリフォルニア州、サンタクララ）のワールドワイドウェブ（ｗｗｗ）ｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／から入手可能な、「Ｉｎｔｅｌ（登録商標）アドバンスト・ベクトル・エクステンション・プログラミング・リファレンス」に説明されるオペコードフォーマットのタイプに対応する。
【００８８】
最初のｘ８６命令セットは、様々なフォーマットのアドレスシラブル、及び第１の「オペコード」バイトから存在が知られていた追加のバイトに含まれる即値オペランドを有する、１バイトのオペコードを規定した。さらに、特定のバイト値が存在し、そのバイト値はオペコードに対する修飾子として確保された（修飾子は、命令の前に配置する必要があったので、プリフィックスと呼ばれる）。元のパレットの２５６個のオペコードバイト（これらの特殊なプリフィックス値を含む）が使い尽くされた場合、新たなセットの２５６個のオペコードに逃れる手段として、単一のバイトが充てられた。ベクトル命令（例えば、ＳＩＭＤ）が追加されたとき、より多くのオペコードの必要性が生まれ、プリフィックスを用いて拡張した場合でさえ、「２バイト」のオペコードマップも不十分であった。このため、２バイトに加えてオプションのプリフィックスを識別子として用いる追加のマップに、新たな命令が追加された。
【００８９】
さらに、６４ビットモードの追加のレジスタを助けるために、追加のプリフィックス（「ＲＥＸ」と呼ばれる）が、プリフィックスとオペコード（及び、オペコードの決定に必要なあらゆるエスケープバイト）との間に用いられてもよい。１つの実施形態では、ＲＥＸは、６４ビットモードの追加のレジスタを用いることを示す４つの「ペイロード」ビットを有することができる。他の実施形態では、「ペイロード」ビットは、４つより少ない、又は４つより多いビットを有してもよい。少なくとも１つの命令セットの一般的なフォーマット（概ね、フォーマット３６０及び／又はフォーマット３７０に対応する）が、以下のフォーマットによって一般的に示される。つまり、［ｐｒｅｆｉｘｅｓ］  ［ｒｅｘ］  ｅｓｃａｐｅ  ［ｅｓｃａｐｅ２］  ｏｐｃｏｄｅ  ｍｏｄｒｍ（など）である。
【００９０】
オペコードフォーマット３９７はオペコードフォーマット３７０に対応し、大部分の他の一般的に用いられるレガシ命令プリフィックスバイト及びエスケープコードに取って代わるオプションのＶＥＸプリフィックスバイト３９１（１つの実施形態では、１６進のＣ４から始まる）を有する。例えば、下記のものは、命令をエンコードする２つのフィールドを用いる実施形態を示し、これは、第２のエスケープコードが元の命令に存在する場合、又はＲＥＸフィールド内の追加のビット（例えば、ＸＢフィールド及びＷフィールド）を用いる必要がある場合に用いられてよい。下記のものが示す実施形態では、レガシのエスケープが新たなエスケープ値で表され、レガシのプリフィックスが「ペイロード」バイトの一部として十分に圧縮され、レガシのプリフィックスが再利用されて今後の拡張に利用可能であり、第２のエスケープコードは「マップ」フィールドに圧縮されて、今後のマップ又は特徴空間が利用可能であり、新たな機能が追加される（例えば、ベクトル長の拡大、追加のソースレジスタ指定子）。
【表１】
0006703707.tif 000002
【００９１】
１つの実施形態による命令は、フィールド３９１及び３９２のうち１つ又は複数によりエンコードされてよい。１つの命令当たり４つまでのオペランド位置が、ソースオペランド識別子３７４及び３７５と組み合わせて、またオプションのスケール・インデックス・ベース（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５と組み合わせて、フィールド３９１により識別されてよい。１つの実施形態では、ＶＥＸプリフィックスバイト３９１が、３２ビット又は６４ビットのソースオペランド及びデスティネーションオペランド、及び／又は、１２８ビット又は２５６ビットのＳＩＭＤレジスタ又はメモリオペランドを識別するのに用いられてよい。１つの実施形態では、オペコードフォーマット３９７により提供される機能は、オペコードフォーマット３７０と共に冗長であってよいが、他の実施形態ではこれらは異なる。オペコードフォーマット３７０及び３９７は、ＭＯＤフィールド３７３、並びにオプションの（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５により部分的に指定される、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。
【００９２】
次に参照する図３Ｈは、別の実施形態によるアトミックな範囲演算を提供する、別の代替のオペレーションエンコーディング（オペコード）フォーマット３９８の表現である。オペコードフォーマット３９８は、オペコードフォーマット３７０及び３９７に対応し、大部分の他の一般的に用いられるレガシ命令プリフィックスバイト及びエスケープコードに取って代わり、追加の機能を提供する、オプションのＥＶＥＸプリフィックスバイト３９６（１つの実施形態では、１６進の６２から始まる）を有する。１つの実施形態による命令は、フィールド３９６及び３９２のうち１つ又は複数によりエンコードされてよい。１つの命令当たり４つまでのオペランド位置及び１つのマスクが、ソースオペランド識別子３７４及び３７５と組み合わせて、またオプションのスケール・インデックス・ベース（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５と組み合わせて、フィールド３９６により識別されてよい。１つの実施形態では、ＥＶＥＸプリフィックスバイト３９６が、３２ビット又は６４ビットのソースオペランド及びデスティネーションオペランド、及び／又は、１２８ビット、２５６ビット、又は５１２ビットのＳＩＭＤレジスタ又はメモリオペランドを識別するのに用いられてよい。１つの実施形態では、オペコードフォーマット３９８により提供される機能は、オペコードフォーマット３７０又は３９７と共に冗長であってよいが、他の実施形態ではこれらは異なる。オペコードフォーマット３９８は、ＭＯＤフィールド３７３、並びにオプションの（ＳＩＢ）識別子３９３、オプションの変位識別子３９４、及びオプションの即値バイト３９５により部分的に指定される、マスクを用いた、レジスタ・ツー・レジスタのアドレス指定、メモリ・ツー・レジスタのアドレス指定、レジスタ・バイ・メモリのアドレス指定、レジスタ・バイ・レジスタのアドレス指定、レジスタ・バイ・即値のアドレス指定、レジスタ・ツー・メモリのアドレス指定を可能にする。少なくとも１つの命令セットの一般的なフォーマット（概ね、フォーマット３６０及び／又はフォーマット３７０に対応する）が、以下のフォーマットによって一般的に示される。つまり、ｅｖｅｘ１  ＲＸＢｍｍｍｍｍ  ＷｖｖｖＬｐｐ  ｅｖｅｘ４  ｏｐｃｏｄｅ  ｍｏｄｒｍ  ［ｓｉｂ］  ［ｄｉｓｐ］  ［ｉｍｍ］である。
【００９３】
１つの実施形態では、ＥＶＥＸフォーマット３９８に従ってエンコードされる命令は、例えば、ユーザ設定可能なマスクレジスタ、又は追加のオペランド、あるいは１２８ビット、２５６ビット、又は５１２ビットのベクトルレジスタ、又は選択対象となるさらに大きいレジスタの中から選択したものなど、追加の新たな機能を用いて、アトミックな範囲演算を提供するのに用いられ得る追加の「ペイロード」ビットを有することができる。例えば、ＶＥＸフォーマット３９７は、マスクのない命令に用いられてよく、ＥＶＥＸフォーマット３９８は、明確なユーザ設定可能なマスクを有する命令に用いられてよい。さらに、ＶＥＸフォーマット３９７は、１２８ビット又は２５６ビットのベクトルレジスタを用いる命令に用いられてよく、ＥＶＥＸフォーマット３９８は、１２８ビット、２５６ビット、５１２ビット、又はより大きいビット（又はより小さいビット）のベクトルレジスタを用いる命令に用いられてよい。
【００９４】
アトミックな範囲演算を提供する例示的な命令又はコマンドが、以下の例によって示される。
【表２】
0006703707.tif 000003
【００９５】
いくつかの実施形態における上記の例示のアトミックな範囲命令では、範囲は、ＮＥＸＴ及びＥＮＤという一対のインデックスをメモリ内に含むことができる。いくつかの実施形態では、範囲は、一対の６４ビットインデックスをメモリ内に含むことができる。いくつかの代替の実施形態では、範囲は、一対の３２ビット（又は１６ビット）インデックスをメモリ内に含むことができる。例示の実施形態は、アトミックにＮＥＸＴを増分する命令（例えば、ＩＮＣ  ＮＥＸＴ）、アトミックにＮＥＸＴに加算する命令（例えば、ＡＤＤ  ＮＥＸＴ）、アトミックにＥＮＤを減分する命令（例えば、ＤＥＣ  ＥＮＤ）、及び／又はアトミックにＥＮＤから減算する命令（例えば、ＳＵＢ  ＥＮＤ）、並びに範囲をキャッシュメモリにプリフェッチする命令を含むことができる。
【００９６】
例えば、２つの整数であるＮＥＸＴ及びＥＮＤにより、メモリに指定される範囲［ＮＥＸＴ，ＥＮＤ）には、ＮＥＸＴからＥＮＤ−１までのインデックスが含まれる。ＮＥＸＴがＥＮＤ以上である場合、範囲［ＮＥＸＴ，ＥＮＤ）は空である。範囲［ＮＥＸＴ，ＥＮＤ）のサイズは、ＥＮＤがＮＥＸＴより大きい場合、ＥＮＤ−ＮＥＸＴに等しい。１以上のサイズを有する範囲が、アトミックにＮＥＸＴを増分する命令（例えば、ＩＮＣ  ＮＥＸＴ）、又はアトミックにＥＮＤを減分する命令（例えば、ＤＥＣ  ＥＮＤ）を実行するのに十分である。範囲のサイズがＸ以上であれば、アトミックにＮＥＸＴにＸを加算する命令（例えば、ＡＤＤ  ＮＥＸＴ）、又はアトミックにＥＮＤからＸを減算する命令（例えば、ＳＵＢ  ＥＮＤ）を実行するのに十分である。
【００９７】
ＳＰＭＤ処理は、タスクを分割し、機能の複数のインスタンス（例えば、ベジェ曲線、ベジェサーフェス、データベース検索／更新など）を呼び出す、又は複数のプロセッサ（又は論理プロセッサ）上でループの複数のイタレーションを並列に実行するマルチプロセッシングシステムにおいて、上記の例示のアトミックな範囲命令を用いることができることが理解されよう。これらの複数のプロセッサ（例えば、プロセッサコア、論理プロセッサ、ハードウェアスレッドなど）が一般的なキャッシュメモリへのアクセスを共有する場合、アトミックな範囲演算を用いることによる同期（例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信）によって、協同するＳＰＭＤプロセッサ（又は論理プロセッサ）の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされる。
【００９８】
図４Ａは、本発明の少なくとも１つの実施形態による、インオーダパイプライン、及びレジスタリネーミングステージ、アウトオブオーダ発行／実行パイプラインを示すブロック図である。図４Ｂは、本発明の少なくとも１つの実施形態によるプロセッサに含まれる、インオーダアーキテクチャコア、及びレジスタリネーミングロジック、アウトオブオーダ発行／実行ロジックを示すブロック図である。図４Ａの実線枠はインオーダパイプラインを示し、破線枠はレジスタリネーミング、アウトオブオーダ発行／実行パイプラインを示す。同様に、図４Ｂの実線枠はインオーダアーキテクチャロジックを示し、破線枠はレジスタリネーミングロジック及びアウトオブオーダ発行／実行ロジックを示す。
【００９９】
図４Ａにおいて、プロセッサパイプライン４００には、フェッチステージ４０２、レングスデコードステージ４０４、デコードステージ４０６、割り当てステージ４０８、リネーミングステージ４１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ４１２、レジスタ読み出し／メモリ読み出しステージ４１４、実行ステージ４１６、ライトバック／メモリ書き込みステージ４１８、例外処理ステージ４２２、及びコミットステージ４２４が含まれる。
【０１００】
図４Ｂにおいて、矢印は、２つ又はそれより多くのユニットの間の結合を示し、矢印の方向は、これらのユニット間のデータフローの方向を示す。図４Ｂは、実行エンジンユニット４５０に結合されたフロントエンドユニット４３０を含むプロセッサコア４９０を示し、実行エンジンユニット４５０及びフロントエンドユニット４３０は両方ともメモリユニット４７０に結合される。
【０１０１】
コア４９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、あるいはハイブリッド又は代替のコアタイプであってよい。さらに別のオプションとして、コア４９０は、例えば、ネットワークコア又は通信コア、圧縮エンジン、グラフィックスコアなどの専用コアであってもよい。
【０１０２】
フロントエンドユニット４３０には、命令キャッシュユニット４３４に結合された分岐予測ユニット４３２が含まれ、命令キャッシュユニット４３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）４３６に結合され、ＴＬＢ４３６は命令フェッチユニット４３８に結合され、命令フェッチユニット４３８はデコードユニット４４０に結合される。デコードユニット又はデコーダは命令をデコードし、１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができ、これらは元の命令からデコードされる、あるいは別の方法で元の命令を反映する、又は元の命令から派生する。デコーダは、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）などが含まれる。命令キャッシュユニット４３４はさらに、メモリユニット４７０内のレベル２（Ｌ２）キャッシュユニット４７６に結合される。デコードユニット４４０は、実行エンジンユニット４５０内のリネーム／アロケータユニット４５２に結合される。
【０１０３】
実行エンジンユニット４５０には、リタイアメントユニット４５４と、１つ又は複数のスケジューラユニット４５６のセットとに結合された、リネーム／アロケータユニット４５２が含まれる。スケジューラユニット４５６は任意の数の異なるスケジューラを表し、リザベーションステーション、中央命令ウィンドウなどを含む。スケジューラユニット４５６は、物理レジスタファイルユニット４５８に結合される。それぞれの物理レジスタファイルユニット４５８は１つ又は複数の物理レジスタファイルを表し、その異なる複数の物理レジスタファイルが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点などの１つ又は複数の異なるデータタイプ、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）などを格納する。物理レジスタファイルユニット４５８は、リタイアメントユニット４５４が重ねられており、レジスタリネーミング及びアウトオブオーダ実行が（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、レジスタマップ及びレジスタのプールを用いるなどして）実装され得る様々な方法を示す。概して、アーキテクチャレジスタは、プロセッサの外側から、又はプログラマの視点から可視である。レジスタは、いかなる既知の特定のタイプの回路にも限定されない。本明細書で説明されるようなデータを格納し提供できる限りにおいて、様々な異なるタイプのレジスタが適している。好適なレジスタの例には、限定されないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとの組み合わせなどが含まれる。リタイアメントユニット４５４及び物理レジスタファイルユニット４５８は、実行クラスタ４６０に結合される。実行クラスタ４６０には、１つ又は複数の実行ユニット４６２のセット及び１つ又は複数のメモリアクセスユニット４６４のセットが含まれる。実行ユニット４６２は、様々な演算（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行することができる。いくつかの実施形態は、特定の機能又は機能のセットに専用の多くの実行ユニットを含むことができるが、他の実施形態は、１つの実行ユニットだけ、又は全ての機能を全てが実行する複数の実行ユニットを含んでもよい。スケジューラユニット４５６、物理レジスタファイルユニット４５８、及び実行クラスタ４６０は、場合によっては複数であるとして示されており、それは、特定の実施形態が特定のタイプのデータ／演算用に別個のパイプラインを作成するからである（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプラインであり、それぞれ独自のスケジューラユニット、物理レジスタファイルユニット、及び／又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタだけがメモリアクセスユニット４６４を有する特定の実施形態が実装される）。別個のパイプラインが用いられる場合、これらのパイプラインのうち１つ又は複数がアウトオブオーダ発行／実行であってよく、その他がインオーダであってよいことも理解されたい。
【０１０４】
メモリアクセスユニット４６４のセットはメモリユニット４７０に結合され、メモリユニット４７０には、レベル２（Ｌ２）キャッシュユニット４７６に結合されたデータキャッシュユニット４７４に結合されたデータＴＬＢユニット４７２が含まれる。例示的な１つの実施形態において、メモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、ストアデータユニットを含むことができ、それぞれがメモリユニット４７０内のデータＴＬＢユニット４７２に結合される。Ｌ２キャッシュユニット４７６は、１つ又は複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
【０１０５】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアのアーキテクチャは、以下のようにパイプライン４００を実装することができる。１）命令フェッチ４３８はフェッチステージ４０２及びレングスデコードステージ４０４を実行する。２）デコードユニット４４０はデコードステージ４０６を実行する。３）リネーム／アロケータユニット４５２は割り当てステージ４０８及びリネーミングステージ４１０を実行する。４）スケジューラユニット４５６はスケジューリングステージ４１２を実行する。５）物理レジスタファイルユニット４５８及びメモリユニット４７０はレジスタ読み出し／メモリ読み出しステージ４１４を実行し、実行クラスタ４６０は実行ステージ４１６を実行する。６）メモリユニット４７０及び物理レジスタファイルユニット４５８はライトバック／メモリ書き込みステージ４１８を実行する。７）様々なユニットが例外処理ステージ４２２に関与することができる。８）リタイアメントユニット４５４及び物理レジスタファイルユニット４５８はコミットステージ４２４を実行する。
【０１０６】
コア４９０は、１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加された、いくつかの拡張を有する）、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州、サニーベール）のＭＩＰＳ命令セット、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（カリフォルニア州、サニーベール）のＡＲＭ命令セット（ＮＥＯＮなどのオプションの追加拡張を有する））をサポートすることができる。
【０１０７】
コアはマルチスレッディング（２つ又はそれより多くの並列セットの演算又はスレッドを実行すること）をサポートすることができ、タイムスライスマルチスレッディング、同時マルチスレッディング（この場合、物理的コアが同時にマルチスレッディングするスレッドごとに、単一の物理的コアが論理コアを提供する）、又はこれらの組み合わせ（例えば、Ｉｎｔｅｌ（登録商標）ハイパースレッディングテクノロジに見られるような、タイムスライスフェッチ及びデコード、並びにその後の同時マルチスレッディング）を含む様々な方法でマルチスレッディングを行うことができることを理解されたい。
【０１０８】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことを理解されたい。示されたプロセッサの実施形態は、別個の命令キャッシュユニット４３４及びデータキャッシュユニット４７４、並びに共有のＬ２キャッシュユニット４７６も含むが、代替の実施形態は、命令及びデータの両方に対して、例えば、レベル１（Ｌ１）内部キャッシュなどの単一の内部キャッシュ、又は複数レベルの内部キャッシュなどを有してよい。いくつかの実施形態では、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、全てのキャッシュがコア及び／又はプロセッサの外部にあってもよい。
【０１０９】
図５は、本発明の実施形態による、統合メモリコントローラ及び統合グラフィックスを有するシングルコアプロセッサ及びマルチコアプロセッサ５００のブロック図である。図５の実線枠は、シングルコア５０２Ａ、システムエージェント５１０、１つ又は複数のバスコントローラユニット５１６のセットを有するプロセッサ５００を示し、オプション追加の破線枠は、複数のコア５０２Ａ〜Ｎ、システムエージェントユニット５１０内の１つ又は複数の統合メモリコントローラユニット５１４のセット、統合グラフィックスロジック５０８を有する代替のプロセッサ５００を示す。
【０１１０】
メモリ階層には、コア内の１つ又は複数のレベルのキャッシュ、共有キャッシュユニット５０６のセットあるいは１つ又は複数の共有キャッシュユニット５０６、及び統合メモリコントローラユニット５１４のセットに結合された外部メモリ（不図示）が含まれる。共有キャッシュユニット５０６のセットには、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他のレベルのキャッシュなどの１つ又は複数の中間レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、及び／又はこれらの組み合わせが含まれてよい。１つの実施形態では、リングベースの相互接続ユニット５１２が、統合グラフィックスロジック５０８、共有キャッシュユニット５０６のセット、システムエージェントユニット５１０を相互接続するが、代替の実施形態は、そのようなユニットの相互接続のために任意の数のよく知られた技術を用いてよい。
【０１１１】
いくつかの実施形態では、コア５０２Ａ〜Ｎのうち１つ又は複数は、マルチスレッディングが可能である。システムエージェント５１０には、コア５０２Ａ〜Ｎを調整し動作させるそれらのコンポーネントが含まれる。システムエージェントユニット５１０には、例えば、出力制御ユニット（ＰＣＵ）及びディスプレイユニットが含まれてよい。ＰＣＵは、コア５０２Ａ〜Ｎ及び統合グラフィックスロジック５０８の電力状態を管理するのに必要なロジック及びコンポーネントであってよく、又はこれらを含んでよい。ディスプレイユニットは、外部接続された１つ又は複数のディスプレイを駆動するためのものである。
【０１１２】
コア５０２Ａ〜Ｎは、アーキテクチャ及び／又は命令セットに関して、同種であっても異種であってもよい。例えば、コア５０２Ａ〜Ｎのうちいくつかはインオーダ型であってよく、他のものはアウトオブオーダ型である。別の例として、コア５０２Ａ〜Ｎのうち２つ又はそれより多くは同じ命令セットを実行することができてよく、他のものは当該命令セットのサブセットだけ又は異なる命令セットを実行することができてよい。
【０１１３】
プロセッサは、Ｃｏｒｅ （商標）ｉ３、ｉ５、ｉ７、２  Ｄｕｏ、及びＱｕａｄ、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（商標）、ＸＳｃａｌｅ（商標）、又はＳｔｒｏｎｇＡＲＭ（商標）プロセッサなどの汎用プロセッサであってよく、これらはＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ（カリフォルニア州、サンタクララ）から入手可能である。あるいは、プロセッサは、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ、ＭＩＰＳなどの別の会社のものであってもよい。プロセッサは、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、組込みプロセッサなどの専用プロセッサであってもよい。プロセッサは、１つ又は複数のチップに実装されてよい。プロセッサ５００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳなどの多数のプロセス技術のうちいずれかを用いる１つ又は複数の基板の一部であってよく、及び／又は当該基板上に実装されてよい。
【０１１４】
図６〜図８は、プロセッサ５００を含むのに適した例示的なシステムであり、図９は、複数のコア５０２のうち１つ又は複数を含むことができる例示的なシステムオンチップ（ＳｏＣ）である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための、当技術分野で知られた他のシステム設計及びシステム構成も好適である。一般に、本明細書に開示されるプロセッサ及び／又は他の実行ロジックを組み込むことができる多様なシステム又は電子デバイスが、概ね好適である。
【０１１５】
ここで図６を参照すると、本発明の１つの実施形態によるシステム６００のブロック図が示されている。システム６００は、１つ又は複数のプロセッサ６１０、６１５を含むことができ、これらはグラフィックスメモリコントローラハブ（ＧＭＣＨ）６２０に結合される。オプション的な性質の追加のプロセッサ６１５は、図６では破線で示されている。
【０１１６】
各プロセッサ６１０、６１５は、プロセッサ５００の何らかのバージョンであってよい。しかし、統合グラフィックスロジック及び統合メモリ制御ユニットがプロセッサ６１０、６１５の中に存在する可能性は低いことに留意されたい。図６は、ＧＭＣＨ６２０がメモリ６４０に結合されてよいことを示し、メモリ６４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）であってよい。ＤＲＡＭは、少なくとも１つの実施形態では、不揮発性キャッシュと関連付けられてよい。
【０１１７】
ＧＭＣＨ６２０はチップセットであっても、チップセットの一部であってもよい。ＧＭＣＨ６２０は、プロセッサ６１０、６１５と通信することができ、プロセッサ６１０、６１５とメモリ６４０との間のやり取りを制御することができる。ＧＭＣＨ６２０は、プロセッサ６１０、６１５とシステム６００の他の要素との間のアクセラレーテッドバスインタフェースとして動作することもできる。少なくとも１つの実施形態では、ＧＭＣＨ６２０は、フロントサイドバス（ＦＳＢ）６９５などのマルチドロップバスを介して、プロセッサ６１０、６１５と通信する。
【０１１８】
さらに、ＧＭＣＨ６２０はディスプレイ６４５（フラットパネルディスプレイなど）に結合される。ＧＭＣＨ６２０は、統合グラフィックスアクセラレータを含むことができる。ＧＭＣＨ６２０はさらに、入力／出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に結合され、ＩＣＨ６５０は、様々な周辺デバイスをシステム６００に結合するのに用いられてよい。例えば、図６の実施形態には、外部グラフィックスデバイス６６０が示されており、これは、別の周辺デバイス６７０と共にＩＣＨ６５０に結合された別個のグラフィックスデバイスであってよい。
【０１１９】
あるいは、追加のプロセッサ又は異なるプロセッサもシステム６００に存在してよい。例えば、追加のプロセッサ６１５には、プロセッサ６１０と同じ追加のプロセッサ、プロセッサ６１０に対して異種又は非対称の追加のプロセッサ、アクセラレータ（例えば、グラフィックスアクセラレータ、又はデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、又はその他のプロセッサが含まれてよい。物理リソース６１０と６１５との間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱特性、電力消費特性などを含む様々な価値基準に関して、様々な差異が存在し得る。これらの差異は、プロセッサ６１０と６１５との間の非対称性及び異種性として、効果的に現れ得る。少なくとも１つの実施形態では、様々なプロセッサ６１０、６１５は同じダイパッケージの中に存在することができる。
【０１２０】
ここで図７を参照すると、本発明のある実施形態による第２のシステム７００のブロック図が示されている。図７に示されるように、マルチプロセッサシステム７００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続７５０を介して結合された第１のプロセッサ７７０及び第２のプロセッサ７８０を含む。プロセッサ７７０及び７８０のそれぞれは、プロセッサ６１０及び６１５のうち１つ又は複数と同じように、プロセッサ５００の何らかのバージョンであってよい。
【０１２１】
２つのプロセッサ７７０、７８０だけで示されているが、本発明の範囲はそのように限定されてはいないことを理解されたい。他の実施形態では、１つ又は複数の追加のプロセッサが所与のプロセッサ内に存在することができる。
【０１２２】
プロセッサ７７０及び７８０はそれぞれ、統合メモリコントローラユニット７７２及び７８２を含んで示されている。プロセッサ７７０は、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース７７６及び７７８も含み、同様に第２のプロセッサ７８０はＰ−Ｐインタフェース７８６及び７８８を含む。プロセッサ７７０、７８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース７５０を介し、Ｐ−Ｐインタフェース回路７７８、７８８を用いて、情報を交換することができる。図７に示されるように、ＩＭＣ７７２及び７８２はプロセッサをそれぞれのメモリ、すなわちメモリ７３２及びメモリ７３４に結合し、これらのメモリはそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【０１２３】
プロセッサ７７０、７８０はそれぞれ、個々のＰ−Ｐインタフェース７５２、７５４を介し、ポイントツーポイントインタフェース回路７７６、７９４、７８６、７９８を用いて、チップセット７９０と情報を交換することができる。チップセット７９０は、高性能グラフィックスインタフェース７３９を介し、高性能グラフィックス回路７３８と情報を交換することもできる。
【０１２４】
共有キャッシュ（不図示）がどちらかのプロセッサに含まれても、両方のプロセッサの外側にあってもよいが、Ｐ−Ｐ相互接続を介してプロセッサに接続されており、その結果、プロセッサが低電力モードに置かれた場合に、どちらかのプロセッサ又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【０１２５】
チップセット７９０は、インタフェース７９６を介して第１のバス７１６に結合されてよい。１つの実施形態では、第１のバス７１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、あるいはＰＣＩエクスプレスバス又は別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されてはいない。
【０１２６】
図７に示されるように、様々なＩ／Ｏデバイス７１４が、第１のバス７１６を第２のバス７２０に結合するバスブリッジ７１８と共に、第１のバス７１６に結合されてよい。１つの実施形態では、第２のバス７２０はローピンカウント（ＬＰＣ）バスであってよい。１つの実施形態では、様々なデバイスが第２のバス７２０に結合されてよく、それらのデバイスには、例えば、キーボード及び／又はマウス７２２、通信デバイス７２７、並びに命令／コード及びデータ７３０を含むことができるディスクドライブ又は他の大容量ストレージデバイスなどのストレージユニット７２８が含まれる。さらに、オーディオＩ／Ｏ７２４が第２のバス７２０に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、システムは、図７のポイントツーポイントアーキテクチャの代わりに、マルチドロップバス又は他のそのようなアーキテクチャを実装することができる。
【０１２７】
ここで図８を参照すると、本発明のある実施形態による第３のシステム８００のブロック図が示されている。図７及び図８の同様の要素は同様の参照符号を有しており、図７の特定の態様が図８から省略されているのは、図８の他の態様を不明瞭にしないためである。
【０１２８】
図８は、プロセッサ８７０、８８０がそれぞれ、統合メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）８７２及び８８２を含み得ることを示す。少なくとも１つの実施形態では、ＣＬ８７２、８８２は、図５及び図７に関して上述されたような統合メモリコントローラユニットを含むことができる。さらに、ＣＬ８７２、８８２はＩ／Ｏ制御ロジックも含むことができる。図８は、メモリ８３２、８３４だけがＣＬ８７２、８８２に結合されるのではなく、Ｉ／Ｏデバイス８１４も制御ロジック８７２、８８２に結合されることを示している。レガシＩ／Ｏデバイス８１５がチップセット８９０に結合される。
【０１２９】
ここで図９を参照すると、本発明のある実施形態によるＳｏＣ９００のブロック図が示されている。図５の類似の要素は、同様の参照符号を有する。また、破線枠は、より高度なＳｏＣに関するオプション機能である。図９では、相互接続ユニット９０２が、１つ又は複数のコア５０２Ａ〜Ｎのセット及び共有キャッシュユニット５０６を含むアプリケーションプロセッサ９１０と、システムエージェントユニット５１０と、バスコントローラユニット５１６と、統合メモリコントローラユニット５１４と、統合グラフィックスロジック５０８を含むことができる１つ又は複数のメディアプロセッサ９２０のセットと、スチルカメラ機能及び／又はビデオカメラ機能を提供するためのイメージプロセッサ９２４と、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ９２６と、ビデオエンコード／デコードアクセラレーションを提供するためのビデオプロセッサ９２８と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット９３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット９３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット９４０とに結合される。
【０１３０】
図１０は、中央処理装置（ＣＰＵ）及びグラフィックス処理ユニット（ＧＰＵ）を含むプロセッサを示し、これらは、１つの実施形態による少なくとも１つの命令を実行することができる。１つの実施形態では、少なくとも１つの実施形態によるオペレーションを実行する命令が、ＣＰＵにより実行され得る。別の実施形態では、命令はＧＰＵにより実行され得る。さらに別の実施形態では、命令は、ＧＰＵ及びＣＰＵにより実行されるオペレーションの組み合わせによって実行されてよい。例えば、１つの実施形態では、１つの実施形態による命令が、ＧＰＵ上で実行されるために受信されデコードされてよい。しかし、デコードされた命令内の１つ又は複数のオペレーションはＣＰＵにより実行されてよく、その結果は、命令の最終リタイアメントのためにＧＰＵに返されてよい。逆に、いくつかの実施形態では、ＣＰＵは一次プロセッサとして動作してよく、ＧＰＵはコプロセッサとして動作してよい。
【０１３１】
いくつかの実施形態では、高度に並列化されたスループットの高いプロセッサから恩恵を受ける命令はＧＰＵにより実行されてよく、深くパイプライン化されたアーキテクチャから恩恵を受けるプロセッサの性能から恩恵を受ける命令はＣＰＵにより実行されてよい。例えば、グラフィックス、科学アプリケーション、財務アプリケーション、及び他の並列ワークロードは、ＧＰＵの性能から恩恵を受けてよく、それに応じて実行されてよいが、オペレーティングシステムのカーネル又はアプリケーションコードなどのよりシーケンシャルなアプリケーションは、ＣＰＵにより好適であってよい。
【０１３２】
図１０において、プロセッサ１０００には、ＣＰＵ１００５、ＧＰＵ１０１０、イメージプロセッサ１０１５、ビデオプロセッサ１０２０、ＵＳＢコントローラ１０２５、ＵＡＲＴコントローラ１０３０、ＳＰＩ／ＳＤＩＯコントローラ１０３５、ディスプレイデバイス１０４０、高精細度マルチメディアインタフェース（ＨＤＭＩ（登録商標））コントローラ１０４５、ＭＩＰＩコントローラ１０５０、フラッシュメモリコントローラ１０５５、デュアルデータレート（ＤＤＲ）コントローラ１０６０、セキュリティエンジン１０６５、及びＩ２Ｓ／Ｉ２Ｃ（Ｉｎｔｅｇｒａｔｅｄ  Ｉｎｔｅｒｃｈｉｐ  Ｓｏｕｎｄ／Ｉｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）インタフェース１０７０が含まれる。他のロジック及び回路が図１０のプロセッサに含まれてよく、それらには、より多くのＣＰＵ又はＧＰＵ、及び他のペリフェラルインタフェースコントローラが含まれる。
【０１３３】
少なくとも１つの実施形態の１つ又は複数の態様が、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的なデータによって実装されてよく、そのデータは、機械により読み出されると、本明細書で説明される技術を実行するロジックを機械に作らせる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体（「テープ」）に格納され、実際にロジック又はプロセッサを作る製造機械に読み込むために、様々な顧客又は製造施設に供給されてよい。例えば、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ．が開発したＣｏｒｔｅｘ（商標）ファミリのプロセッサなどのＩＰコア、及び中国科学院の計算技術研究所（ＩＣＴ）が開発した龍芯（Ｌｏｏｎｇｓｏｎ）のＩＰコアが、Ｔｅｘａｓ  Ｉｎｓｔｒｕｍｅｎｔｓ、Ｑｕａｌｃｏｍｍ、Ａｐｐｌｅ、又はＳａｍｓｕｎｇなどの様々な顧客又はライセンス先に販売又はライセンス供与されてよく、これらの顧客又はライセンス先によって製造されたプロセッサに実装されてよい。
【０１３４】
図１１は、１つの実施形態によるＩＰコアの開発を説明するブロック図を示す。ストレージ１１３０には、シミュレーションソフトウェア１１２０、及び／又は、ハードウェア又はソフトウェアモデル１１１０が含まれる。１つの実施形態では、ＩＰコア設計を表すデータは、メモリ１１４０（例えば、ハードディスク）、有線接続１１５０（例えば、インターネット）、又は無線接続１１６０を介してストレージ１１３０に提供され得る。シミュレーションツール及びモデルにより生成されるＩＰコア情報は次に、少なくとも１つの実施形態による少なくとも１つの命令を実行するＩＰコアがサードパーティにより製造され得る製造施設に送信され得る。
【０１３５】
いくつかの実施形態では、１つ又は複数の命令は、第１のタイプ又はアーキテクチャ（例えば、ｘ８６）に対応し、異なるタイプ又はアーキテクチャのプロセッサ（例えば、ＡＲＭ）上で変換又はエミュレートされてよい。したがって、１つの実施形態によれば、命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵ、あるいは他のプロセッサタイプ又はアーキテクチャを含む任意のプロセッサ又はプロセッサタイプ上で実行されてよい。
【０１３６】
図１２は、１つの実施形態に従って、第１のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされるかを示す。図１２において、プログラム１２０５は、１つの実施形態による命令として、同じ機能又は実質的に同じ機能を実行することができるいくつかの命令を含む。しかし、プログラム１２０５の命令は、プロセッサ１２１５と異なる又は非互換であるタイプ及び／又はフォーマットのものであってよく、このことは、プログラム１２０５内のタイプの命令を、プロセッサ１２１５がネイティブに実行できなくてもよいことを意味する。しかし、エミュレーションロジック１２１０を用いて、プログラム１２０５の命令は、プロセッサ１２１５がネイティブに実行できる命令に変換される。１つの実施形態では、エミュレーションロジックはハードウェアで具現化される。別の実施形態では、エミュレーションロジックは、プログラム１２０５の命令タイプをプロセッサ１２１５がネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体で具現化される。他の実施形態では、エミュレーションロジックは、固定機能のハードウェア又はプログラマブルなハードウェアと、有形の機械可読媒体に格納されたプログラムとの組み合わせである。１つの実施形態では、プロセッサはエミュレーションロジックを含み、他の実施形態では、エミュレーションロジックはプロセッサの外側に存在して、サードパーティにより提供される。１つの実施形態では、プロセッサは、プロセッサに含まれる又はプロセッサに関連付けられるマイクロコード又はファームウェアを実行することで、ソフトウェアを含む有形の機械可読媒体で具現化されたエミュレーションロジックを読み込むことができる。
【０１３７】
図１３は、本発明の実施形態による、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。示された実施形態では、命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてもよい。図１３は、高水準言語１３０２のプログラムがｘ８６コンパイラ１３０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１３１６がネイティブに実行できるｘ８６バイナリコード１３０６を生成できることを示す。少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１３１６は、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ結果を実現するために、（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの大部分、又は（２）少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサ上で動作させることを目的としたオブジェクトコード形式のアプリケーション又は他のソフトウェアを、互換的に実行する、又は別の方法で処理することで、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。ｘ８６コンパイラ１３０４は、追加のリンケージ処理があってもなくても、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１３１６上で実行され得るｘ８６バイナリコード１３０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図１３は、高水準言語１３０２のプログラムが、別の命令セットコンパイラ１３０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載しないプロセッサ１３１４（例えば、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州、サニーベール）のＭＩＰＳ命令セットを実行するコア、及び／又は、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（カリフォルニア州、サニーベール）のＡＲＭ命令セットを実行するコアを搭載したプロセッサ）がネイティブに実行できる別の命令セットバイナリコード１３１０を生成できることを示す。命令変換器１３１２は、ｘ８６バイナリコード１３０６を、ｘ８６命令セットコアを搭載しないプロセッサ１３１４がネイティブに実行できるコードに変換するのに用いられる。この変換されたコードは、別の命令セットバイナリコード１３１０と同じである可能性は低い。なぜなら、これが実現できる命令変換器を作るのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、別の命令セットの命令で構成される。したがって、命令変換器１３１２は、エミュレーション、シミュレーション、又はその他の処理を通じて、ｘ８６命令セットプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスがｘ８６バイナリコード１３０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【０１３８】
マルチプロセッシングでは、ＳＰＭＤ処理を利用するプロセッサ又は論理プロセッサは、タスクを分割し、機能の複数のインスタンス（例えば、ベジェ曲線、ベジェサーフェス、データベース検索／更新など）を呼び出す、又は複数のプロセッサ（又は論理プロセッサ）上でループの複数のイタレーションを並列に実行するマルチプロセッシングシステムにおいて、アトミックな範囲演算を用いることができることが理解されよう。アトミックな範囲演算の実施形態には、アトミックにＮＥＸＴを増分する命令、アトミックにＮＥＸＴにＸを加算する命令、アトミックにＥＮＤを減分する命令、及び／又はアトミックにＥＮＤからＸを減算する命令が含まれてよい。複数のプロセッサ（例えば、プロセッサコア、論理プロセッサ、ハードウェアスレッドなど）が一般的なメモリ及び／又はキャッシュメモリへのアクセスを共有する場合、アトミックな範囲演算を用いることによる同期（例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信）によって、協同するＳＰＭＤプロセッサ（又は論理プロセッサ）の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされる。
【０１３９】
いくつかの実施形態では、範囲は、ＮＥＸＴ及びＥＮＤという一対の６４ビットインデックスをメモリ内に含むことができる。いくつかの代替の実施形態では、範囲は、ＮＥＸＴ及びＥＮＤという一対の３２ビット（又は１６ビット）インデックスをメモリ内に含むことができる。例えば、範囲［ＮＥＸＴ，ＥＮＤ）は、ＮＥＸＴからＥＮＤ−１までのインデックスを含むよう定義される。次に、範囲［ＮＥＸＴ，ＥＮＤ）のサイズは、ＥＮＤがＮＥＸＴより大きい場合、ＥＮＤ−ＮＥＸＴに等しい。ＮＥＸＴがＥＮＤ以上である場合、範囲［ＮＥＸＴ，ＥＮＤ）は空である。１以上のサイズを有する範囲が、アトミックにＮＥＸＴを増分する命令（ＩＮＣ  ＮＥＸＴ）、又はアトミックにＥＮＤを減分する命令（ＤＥＣ  ＥＮＤ）を実行するのに十分である。範囲のサイズがＸ以上であれば、アトミックにＮＥＸＴにＸを加算する命令（ＡＤＤ  ＮＥＸＴ）、又はアトミックにＥＮＤからＸを減算する命令（ＳＵＢ  ＥＮＤ）を実行するのに十分である。
【０１４０】
図１４は、アトミックな範囲演算を提供する命令を用いるための、プロセッサ装置のＩＮＣ  ＮＥＸＴロジック１４０１に関する実施形態を示す。範囲インデックスである１４２０及び１４３０のセット１４１０が、メモリ及び／又はキャッシュメモリに格納されている。ＩＮＣ  ＮＥＸＴ命令に応答して、範囲インデックス１４２０及び１４３０のセット１４１０のアドレスを指定して、範囲インデックス１４２０及び１４３０のセット１４１０へのアクセスがロックされる。範囲インデックス１４２０及び１４３０のセット１４１０は、範囲サイズを決定するために、（例えば、メモリ又はキャッシュメモリから）読み込まれる。コンパレータ１４４０は、範囲サイズが、ＩＮＣ  ＮＥＸＴ命令に従って範囲変更を行うのに、少なくとも十分なサイズであるかを判定する。コンパレータ１４４０の結果は、コンパレータ１４４０の結果が１である場合に、ＩＮＣ  ＮＥＸＴ命令に従って範囲変更を行う加算器１４５０により、ＮＥＸＴインデックス１４２０に加算される。次に、範囲インデックス１４２５及び１４３０のセット１４１０のうち、１つ又は複数の変更された範囲インデックスは、メモリ及び／又はキャッシュメモリに戻され格納されてよい。いくつかの実施形態では、未変更のＥＮＤインデックス（又は未変更のＮＥＸＴインデックス）は、メモリ及び／又はキャッシュメモリに戻され格納されることはないが、いくつかの代替の実施形態では、セット１４１０の両方のインデックスが読み込まれ、それらのインデックスがＩＮＣ  ＮＥＸＴ命令により変更されているかにかかわらず、メモリ及び／又はキャッシュメモリに戻され格納される。オプションとして、範囲サイズがＩＮＣ  ＮＥＸＴ命令に従って範囲変更を行うのに不十分である場合、エラー信号１４６０をセットするために、コンパレータ１４４０の結果は反転される。いくつかの代替の実施形態では、オプションのエラー信号１４６０は、異なる方法で異なる値にセットされてよい。いくつかの実施形態では、オプションのエラー信号１４６０は、プロセッサのレジスタ（例えば、条件コードレジスタ又はフラグレジスタ）に保存されてよい。ＩＮＣ  ＮＥＸＴ命令の完了に応答して、範囲インデックス１４２５及び１４３０のセット１４１０へのアクセスはロック解除される。したがって、そのようなアトミックな範囲変更命令の読み出し、条件変更、書き込みオペレーションは、システムの全ての観察者には、瞬時に行われているように見える。
【０１４１】
図１５は、アトミックな範囲演算を提供する命令を用いるための、プロセッサ装置のＡＤＤ  ＮＥＸＴロジック１５０１に関する代替の実施形態を示す。範囲インデックスである１５２０及び１５３０のセット１５１０が、メモリ及び／又はキャッシュメモリに格納されている。ＡＤＤ  ＮＥＸＴ命令に応答して、範囲インデックス１５２０及び１５３０のセット１５１０のアドレスを指定して、範囲インデックス１５２０及び１５３０のセット１５１０へのアクセスがロックされる。範囲インデックス１５２０及び１５３０のセット１５１０は、範囲サイズを決定するために、（例えば、メモリ又はキャッシュメモリから）読み込まれる。オペランドＸは、加算器１５５０によりＮＥＸＴインデックス１５２０に加算される。コンパレータ１５４０は、範囲サイズが、ＡＤＤ  ＮＥＸＴ命令に従って範囲変更を行うのに、少なくとも十分なサイズであるかを判定する。コンパレータ１５４０の結果は、コンパレータ１５４０の結果が１である場合に、ＡＤＤ  ＮＥＸＴ命令に従って範囲変更を行う加算器１５５０の結果を、マルチプレクサ１５５５を通して選択するのに用いられる。次に、範囲インデックス１５２５及び１５３０のセット１５１０のうち、１つ又は複数の変更された範囲インデックスは、メモリ及び／又はキャッシュメモリに戻され格納されてよい。いくつかの実施形態では、未変更のＥＮＤインデックス（又は未変更のＮＥＸＴインデックス）は、メモリ及び／又はキャッシュメモリに戻され格納されることはないが、いくつかの代替の実施形態では、セット１５１０の両方のインデックスが読み込まれ、それらのインデックスがＡＤＤ  ＮＥＸＴ命令により変更されているかにかかわらず、メモリ及び／又はキャッシュメモリに戻され格納される。オプションとして、範囲サイズがＡＤＤ  ＮＥＸＴ命令に従って範囲変更を行うのに不十分である場合、エラー信号１５６０をセットするために、コンパレータ１５４０の結果は反転される。いくつかの代替の実施形態では、オプションのエラー信号１５６０は、異なる方法で異なる値にセットされてよい。いくつかの実施形態では、オプションのエラー信号１５６０は、プロセッサのレジスタ（例えば、条件コードレジスタ又はフラグレジスタ）に保存されてよい。ＡＤＤ  ＮＥＸＴ命令の完了に応答して、範囲インデックス１５２５及び１５３０のセット１５１０へのアクセスはロック解除される。
【０１４２】
図１６は、アトミックな範囲演算を提供する命令を用いるためのプロセッサ装置のＤＥＣ  ＥＮＤロジック１６０１に関する別の代替の実施形態を示す。範囲インデックスである１６２０及び１６３０のセット１６１０が、メモリ及び／又はキャッシュメモリに格納されている。ＤＥＣ  ＥＮＤ命令に応答して、範囲インデックス１６２０及び１６３０のセット１６１０のアドレスを指定して、範囲インデックス１６２０及び１６３０のセット１６１０へのアクセスがロックされる。範囲インデックス１６２０及び１６３０のセット１６１０は、範囲サイズを決定するために、（例えば、メモリ又はキャッシュメモリから）読み込まれる。コンパレータ１６４０は、範囲サイズが、ＤＥＣ  ＥＮＤ命令に従って範囲変更を行うのに、少なくとも十分なサイズであるかを判定する。コンパレータ１６４０の結果は、コンパレータ１６４０の結果が１である場合に、ＤＥＣ  ＥＮＤ命令に従って範囲変更を行う減算器１６５０により、ＥＮＤインデックス１６３０から減算される。次に、範囲インデックス１６２０及び１６３５のセット１６１０のうち、１つ又は複数の変更された範囲インデックスは、メモリ及び／又はキャッシュメモリに戻され格納されてよい。いくつかの実施形態では、未変更のＮＥＸＴインデックス（又は未変更のＥＮＤインデックス）は、メモリ及び／又はキャッシュメモリに戻され格納されることはないが、いくつかの代替の実施形態では、セット１６１０の両方のインデックスが読み込まれ、それらのインデックスがＳＵＢ  ＥＮＤ命令により変更されているかにかかわらず、メモリ及び／又はキャッシュメモリに戻され格納される。オプションとして、範囲サイズがＤＥＣ  ＥＮＤ命令に従って範囲変更を行うのに不十分である場合、エラー信号１６６０をセットするために、コンパレータ１６４０の結果は反転される。いくつかの代替の実施形態では、オプションのエラー信号１６６０は、異なる方法で異なる値にセットされてよい。いくつかの実施形態では、オプションのエラー信号１６６０は、プロセッサのレジスタ（例えば、条件コードレジスタ又はフラグレジスタ）に保存されてよい。ＤＥＣ  ＥＮＤ命令の完了に応答して、範囲インデックス１６２０及び１６３５のセット１６１０へのアクセスはロック解除される。
【０１４３】
図１７は、アトミックな範囲演算を提供する命令を用いるためのプロセッサ装置のＳＵＢ  ＥＮＤロジック１７０１に関する別の代替の実施形態を示す。範囲インデックスである１７２０及び１７３０のセット１７１０が、メモリ及び／又はキャッシュメモリに格納されている。ＳＵＢ  ＥＮＤ命令に応答して、範囲インデックス１７２０及び１７３０のセット１７１０のアドレスを指定して、範囲インデックス１７２０及び１７３０のセット１７１０へのアクセスがロックされる。範囲インデックス１７２０及び１７３０のセット１７１０は、範囲サイズを決定するために、（例えば、メモリ又はキャッシュメモリから）読み込まれる。オペランドＸは、減算器１７５０によりＥＮＤインデックス１７３０から減算される。コンパレータ１７４０は、範囲サイズが、ＳＵＢ  ＥＮＤ命令に従って範囲変更を行うのに、少なくとも十分なサイズであるかを判定する。コンパレータ１７４０の結果は、コンパレータ１７４０の結果が１である場合に、ＳＵＢ  ＥＮＤ命令に従って範囲変更を行う減算器１７５０の結果を、マルチプレクサ１７５５を通して選択するのに用いられる。次に、範囲インデックス１７２０及び１７３５のセット１７１０のうち、１つ又は複数の変更された範囲インデックスは、メモリ及び／又はキャッシュメモリに戻され格納されてよい。いくつかの実施形態では、未変更のＮＥＸＴインデックス（又は未変更のＥＮＤインデックス）は、メモリ及び／又はキャッシュメモリに戻され格納されることはないが、いくつかの代替の実施形態では、セット１７１０の両方のインデックスが読み込まれ、それらのインデックスがＳＵＢ  ＥＮＤ命令により変更されているかにかかわらず、メモリ及び／又はキャッシュメモリに戻され格納される。オプションとして、範囲サイズがＳＵＢ  ＥＮＤ命令に従って範囲変更を行うのに不十分である場合、エラー信号１７６０をセットするために、コンパレータ１７４０の結果は反転される。いくつかの代替の実施形態では、オプションのエラー信号１７６０は、異なる方法で異なる値にセットされてよい。いくつかの実施形態では、オプションのエラー信号１７６０は、プロセッサのレジスタ（例えば、条件コードレジスタ又はフラグレジスタ）に保存されてよい。ＳＵＢ  ＥＮＤ命令の完了に応答して、範囲インデックス１７２０及び１７３５のセット１７１０へのアクセスはロック解除される。
【０１４４】
したがって、そのようなアトミックな範囲変更命令の読み出し、条件変更、書き込みオペレーションは、システムの全ての観察者には、瞬時に行われているように見える。複数のプロセッサ（例えば、プロセッサコア、論理プロセッサ、ハードウェアスレッドなど）が一般的なメモリ及び／又はキャッシュメモリへのアクセスを共有する場合、アトミックな範囲演算を用いることによる同期（例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信）によって、協同するＳＰＭＤプロセッサ（又は論理プロセッサ）の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされる。
【０１４５】
図１８Ａは、アトミックな範囲演算を提供する命令を実行するプロセス１８０１に関する、１つの実施形態のフロー図を示す。プロセス１８０１及び本明細書に開示される他のプロセスは、専用ハードウェア、あるいは汎用機械又は専用機械又は両方の組み合わせにより実行可能なソフトウェア又はファームウェアの演算コードを含むことができる処理ブロックにより実行される。
【０１４６】
プロセス１８０１の処理ブロック１８１０では、アトミックにＮＥＸＴを増分する命令（ＩＮＣ  ＮＥＸＴ）がデコードされる。ＩＮＣ  ＮＥＸＴ命令の実施形態は、メモリ及び／又はキャッシュメモリ内のＮＥＸＴ及びＥＮＤ（例えば、１４２０及び１４３０）という範囲インデックスのセットのアドレスを指定することができる。処理ブロック１８２０では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスが、ＩＮＣ  ＮＥＸＴ命令に応答してロックされる。処理ブロック１８３０では、範囲サイズを決定するために、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットが（例えば、メモリ又はキャッシュメモリから）読み込まれる。処理ブロック１８３５では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットにより表される範囲が空であるかどうかが判定される。空である場合、処理ブロック１８８０において、エラー信号フラグがセットされ、ＮＥＸＴ及びＥＮＤという範囲インデックスの値はＩＮＣ  ＮＥＸＴ命令により変更されず、処理ブロック１８９０において、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスがロック解除される。いくつかの実施形態では、エラー信号フラグはオプションとして、プロセッサのレジスタ（例えば、条件コードレジスタ、又はゼロフラグレジスタなどのフラグレジスタ）に保存されてよい。
【０１４７】
そうではなく、処理ブロック１８３５において、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットにより表される範囲が空ではないと判定された場合、範囲サイズはＩＮＣ  ＮＥＸＴ命令に従って範囲変更を行うのに十分であり、処理は処理ブロック１８４０に進む。処理ブロック１８４０では、範囲インデックスのＮＥＸＴが増分される。処理ブロック１８５０では、エラー信号フラグがクリアされる。処理ブロック１８６０では、範囲インデックスのＮＥＸＴが、メモリ及び／又はキャッシュメモリに戻され格納される。いくつかの実施形態では、未変更の範囲インデックスであるＥＮＤは、メモリ及び／又はキャッシュメモリに戻されて格納されることはないが、いくつかの代替の実施形態では、処理ブロック１８７０において、未変更の範囲インデックスであるＥＮＤも、メモリ及び／又はキャッシュメモリに戻され格納されてよい。プロセス１８０１のいくつかの代替の実施形態では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットの両方のインデックスが読み込まれ、それらがＩＮＣ  ＮＥＸＴ命令により変更されたかにかかわらず、メモリ及び／又はキャッシュメモリに戻され格納されてよい。処理ブロック１８９０では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスが、ＩＮＣ  ＮＥＸＴ命令の完了に応答してロック解除される。こうして、プロセス１８０１の実施形態を通して示されるように、アトミックな命令のＩＮＣ  ＮＥＸＴが実現される。
【０１４８】
特定の順序で実行されるとして示される処理ブロックは、プロセス１８０１のいくつかの代替の実施形態、及び本明細書に開示される他のプロセスにおいて、可能であれば、別の順序で、又は同時に、又は互いに並列して実行されてもよいことが理解されよう。
【０１４９】
図１８Ｂは、アトミックな範囲演算を提供する命令を実行するプロセス１８０２の代替の実施形態に関するフロー図を示す。プロセス１８０２の処理ブロック１８１２では、アトミックにＮＥＸＴにＸを加算する命令（ＡＤＤ  ＮＥＸＴ）がデコードされる。ＡＤＤ  ＮＥＸＴ命令の実施形態は、メモリ及び／又はキャッシュメモリ内のＮＥＸＴ及びＥＮＤ（例えば、１５２０及び１５３０）という範囲インデックスのセットのアドレス、並びにソースオペランドＸのアドレスを指定することができる。処理ブロック１８２０では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスが、ＡＤＤ  ＮＥＸＴ命令に応答してロックされる。処理ブロック１８３０では、範囲サイズを決定するために、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットが（例えば、メモリ又はキャッシュメモリから）読み込まれる。処理ブロック１８３７では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットにより表される範囲が、Ｘより小さいかどうかが判定される。Ｘより小さい場合、処理ブロック１８８０において、エラー信号フラグがセットされ、ＮＥＸＴ及びＥＮＤという範囲インデックスの値はＡＤＤ  ＮＥＸＴ命令により変更されず、処理ブロック１８９０において、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスがロック解除される。いくつかの実施形態では、エラー信号フラグはオプションとして、プロセッサのレジスタ（例えば、条件コードレジスタ、又はゼロフラグレジスタなどのフラグレジスタ）に保存されてよい。いくつかの代替の実施形態では、エラー信号フラグはオプションとして、何らかの他の位置（例えば、スタック）に保存されてよい。
【０１５０】
そうではなく、処理ブロック１８３７において、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットにより表される範囲がＸより小さいサイズではないと判定された場合、範囲サイズはＡＤＤ  ＮＥＸＴ命令に従って範囲変更を行うのに十分であり、処理は処理ブロック１８４２に進む。処理ブロック１８４２において、値Ｘが範囲インデックスのＮＥＸＴに加算される。処理ブロック１８５０では、エラー信号フラグがクリアされる。処理ブロック１８６０では、範囲インデックスのＮＥＸＴが、メモリ及び／又はキャッシュメモリに戻され格納される。いくつかの実施形態では、未変更の範囲インデックスであるＥＮＤは、メモリ及び／又はキャッシュメモリに戻されて格納されることはないが、いくつかの代替の実施形態では、処理ブロック１８７０において、未変更の範囲インデックスであるＥＮＤも、メモリ及び／又はキャッシュメモリに戻され格納されてよい。プロセス１８０２のいくつかの代替の実施形態では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットの両方のインデックスが読み込まれ、それらがＡＤＤ  ＮＥＸＴ命令により変更されたかにかかわらず、メモリ及び／又はキャッシュメモリに戻され格納されてよい。処理ブロック１８９０では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスが、ＡＤＤ  ＮＥＸＴ命令の完了に応答してロック解除される。こうして、プロセス１８０２の実施形態を通して示されるように、アトミックな命令のＡＤＤ  ＮＥＸＴが実現される。
【０１５１】
特定の順序で実行されるように示される処理ブロックは、プロセス１８０２及び開示される本明細書の他のプロセスに関するいくつかの代替の実施形態において、可能であれば、別の順序で、又は同時に、又は互いに並列に実行されてもよいことが理解されよう。
【０１５２】
図１９Ａは、アトミックな範囲演算を提供する命令を実行するプロセス１９０１の別の代替の実施形態に関するフロー図を示す。プロセス１９０１の処理ブロック１９１０では、アトミックにＥＮＤを減分する命令（ＤＥＣ  ＥＮＤ）がデコードされる。ＤＥＣ  ＥＮＤ命令の実施形態は、メモリ及び／又はキャッシュメモリ内のＮＥＸＴ及びＥＮＤ（例えば、１６２０及び１６３０）という範囲インデックスのセットのアドレスを指定することができる。処理ブロック１９２０では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスが、ＤＥＣ  ＥＮＤ命令に応答してロックされる。処理ブロック１９３０では、範囲サイズを決定するために、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットが（例えば、メモリ又はキャッシュメモリから）読み込まれる。処理ブロック１９３５では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットにより表される範囲が空であるかどうかが判定される。空である場合、処理ブロック１９８０において、エラー信号フラグがセットされ、ＮＥＸＴ及びＥＮＤという範囲インデックスの値はＤＥＣ  ＥＮＤ命令により変更されず、処理ブロック１９９０において、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスがロック解除される。いくつかの実施形態では、エラー信号フラグはオプションとして、プロセッサのレジスタ（例えば、条件コードレジスタ、又はゼロフラグレジスタなどのフラグレジスタ）に保存されてよい。
【０１５３】
そうではなく、処理ブロック１９３５において、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットにより表される範囲が空ではないと判定された場合、範囲サイズはＤＥＣ  ＥＮＤ命令に従って範囲変更を行うのに十分であり、処理は処理ブロック１９４０に進む。処理ブロック１９４０では、範囲インデックスのＮＥＸＴが増分される。処理ブロック１９５０では、エラー信号フラグがクリアされる。いくつかの実施形態では、未変更の範囲インデックスであるＮＥＸＴは、メモリ及び／又はキャッシュメモリに戻されて格納されることはないが、いくつかの代替の実施形態では、処理ブロック１９６０において、未変更の範囲インデックスであるＮＥＸＴも、メモリ及び／又はキャッシュメモリに戻され格納されてよい。処理ブロック１９７０では、範囲インデックスのＥＮＤが、メモリ及び／又はキャッシュメモリに戻され格納される。プロセス１９０１のいくつかの代替の実施形態では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットの両方のインデックスが読み込まれ、それらがＤＥＣ  ＥＮＤ命令により変更されたかにかかわらず、メモリ及び／又はキャッシュメモリに戻され格納されてよい。処理ブロック１９９０では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスが、ＤＥＣ  ＥＮＤ命令の完了に応答してロック解除される。こうして、プロセス１９０１の実施形態を通して示されるように、アトミックな命令のＤＥＣ  ＥＮＤが実現される。
【０１５４】
特定の順序で実行されるとして示される処理ブロックは、プロセス１９０１のいくつかの代替の実施形態、及び本明細書に開示される他のプロセスにおいて、可能であれば、別の順序で、又は同時に、又は互いに並列して実行されてもよいことが理解されよう。
【０１５５】
図１９Ｂは、アトミックな範囲演算を提供する命令を実行するプロセス１９０２の別の代替の実施形態に関するフロー図を示す。プロセス１９０２の処理ブロック１９１２では、アトミックにＥＮＤからＸを減算する命令（ＳＵＢ  ＥＮＤ）がデコードされる。ＳＵＢ  ＥＮＤ命令の実施形態は、メモリ及び／又はキャッシュメモリ内のＮＥＸＴ及びＥＮＤ（例えば、１７２０及び１７３０）という範囲インデックスのセットのアドレス、並びにソースオペランドＸのアドレスを指定することができる。処理ブロック１９２０では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスが、ＳＵＢ  ＥＮＤ命令に応答してロックされる。処理ブロック１９３０では、範囲サイズを決定するために、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットが（例えば、メモリ又はキャッシュメモリから）読み込まれる。処理ブロック１９３７では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットにより表される範囲が、Ｘより小さいかどうかが判定される。Ｘより小さい場合、処理ブロック１９８０において、エラー信号フラグがセットされ、ＮＥＸＴ及びＥＮＤという範囲インデックスの値はＳＵＢ  ＥＮＤ命令により変更されず、処理ブロック１９９０において、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスがロック解除される。いくつかの実施形態では、エラー信号フラグはオプションとして、プロセッサのレジスタ（例えば、条件コードレジスタ、又はゼロフラグレジスタなどのフラグレジスタ）に保存されてよい。いくつかの代替の実施形態では、エラー信号フラグはオプションとして、何らかの他の位置（例えば、スタック）に保存されてよい。
【０１５６】
そうではなく、処理ブロック１９３７において、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットにより表される範囲がＸより小さいサイズではないと判定された場合、範囲サイズはＳＵＢ  ＥＮＤ命令に従って範囲変更を行うのに十分であり、処理は処理ブロック１９４２に進む。処理ブロック１９４２において、値Ｘが範囲インデックスのＥＮＤから減算される。処理ブロック１９５０では、エラー信号フラグがクリアされる。いくつかの実施形態では、未変更の範囲インデックスであるＮＥＸＴは、メモリ及び／又はキャッシュメモリに戻されて格納されることはないが、いくつかの代替の実施形態では、処理ブロック１９６０において、未変更の範囲インデックスであるＮＥＸＴも、メモリ及び／又はキャッシュメモリに戻され格納されてよい。処理ブロック１９７０では、範囲インデックスのＥＮＤが、メモリ及び／又はキャッシュメモリに戻され格納される。プロセス１９０２のいくつかの代替の実施形態では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットの両方のインデックスが読み込まれ、それらがＳＵＢ  ＥＮＤ命令により変更されたかにかかわらず、メモリ及び／又はキャッシュメモリに戻され格納されてよい。処理ブロック１９９０では、ＮＥＸＴ及びＥＮＤという範囲インデックスのセットへのアクセスが、ＳＵＢ  ＥＮＤ命令の完了に応答してロック解除される。こうして、プロセス１９０２の実施形態を通して示されるように、アトミックな命令のＳＵＢ  ＥＮＤが実現される。
【０１５７】
特定の順序で実行されるとして示される処理ブロックは、プロセス１９０２のいくつかの代替の実施形態、及び本明細書に開示される他のプロセスにおいて、可能であれば、別の順序で、又は同時に、又は互いに並列して実行されてもよいことが理解される。
【０１５８】
ＳＰＭＤ処理を利用するプロセッサは、タスクを分割し、機能の複数のインスタンスを呼び出す、又は一般的なメモリ及び／又はキャッシュメモリへのアクセスを共有する複数のプロセッサ（又は論理プロセッサ）上で、ループの複数のイタレーションを並列に実行するマルチプロセッシングシステムにおいて、アトミックな範囲演算を用いることができる。アトミックな範囲演算を用いることによる同期（例えば、タスクの分割、複数のプロセッサへのタスクインデックスの割り当て、共有メモリを通じた通信）によって、協同するＳＰＭＤプロセッサ（又は論理プロセッサ）の間にタスク又は作業項目を割り当てる際のプログラミング性及び効率の向上がもたらされることが理解されよう。
【０１５９】
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性メモリ及び不揮発性メモリ及び／又はストレージエレメントを含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
【０１６０】
プログラムコードは、本明細書に説明される機能を実行して出力情報を生成する入力命令に適用されてよい。出力情報は、１つ又は複数の出力デバイスに、既知の方式で適用されてよい。この応用の目的のために、処理システムには、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサなどのプロセッサを有するあらゆるシステムが含まれる。
【０１６１】
プログラムコードは、処理システムと通信するために、高水準の手続き型プログラミング言語、又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語又は機械語で実施されてもよい。実際に、本明細書に説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されてはいない。いかなる場合にも、言語は、コンパイラ型言語又はインタープリタ型言語であってよい。
【０１６２】
少なくとも１つの実施形態の１つ又は複数の態様が、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的な命令によって実装されてよく、その命令は機械により読み出されると、本明細書で説明される技術を実行するロジックを機械に作らせる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体に格納され、実際にロジック又はプロセッサを作る製造機械に読み込むために、様々な顧客又は製造施設に供給されてよい。
【０１６３】
そのような機械可読記憶媒体には、機械又は装置により製造又は形成される非一時的な有形の構成の物品が含まれてよく、そのような物品には、ハードディスクや、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、及び光磁気ディスクを含むその他のタイプのディスク、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）やスタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）などの半導体デバイス、磁気カード又は光カード、あるいは電子命令を格納するのに適したその他のタイプの媒体などの記憶媒体が、限定されることなく含まれる。
【０１６４】
したがって、本発明の実施形態には、命令を含む又はハードウェア記述言語（ＨＤＬ）などの設計データを含む非一時な有形の機械可読媒体も含まれ、ＨＤＬは、本明細書で説明される構造、回路、装置、プロセッサ、及び／又はシステム機能を定義する。そのような実施形態は、プログラム製品とも呼ばれる場合がある。
【０１６５】
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するのに、命令変換器が用いられてよい。例えば、命令変換器は、命令をコアにより処理される１つ又は複数の他の命令に、変換（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）、変形、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサに搭載されても、プロセッサの外部にあっても、又は一部がプロセッサに搭載され一部がプロセッサの外部にあってもよい。
【０１６６】
こうして、少なくとも１つの実施形態による１つ又は複数の命令を実行する技術が開示される。特定の例示的な実施形態が説明され、添付図面に示されたが、そのような実施形態は、広範な発明の単に例示であって広範な発明に限定を加えるものではないこと、本開示を検討すると、当業者には様々な他の変更が見出され得るので、示され説明された特定の解釈及び構成に本発明は限定されないことを理解されたい。このような、成長が速く、さらなる進歩が容易に予見できない技術領域では、開示された実施形態は、技術的進歩を可能にすることで容易になるような構成及び詳細において、本開示の原理又は添付の特許請求の範囲から逸脱することなく、容易に変更可能であり得る。
【図１Ａ】
0006703707.tif 000004
【図１Ｂ】
0006703707.tif 000005
【図１Ｃ】
0006703707.tif 000006
【図２】
0006703707.tif 000007
【図３Ａ】
0006703707.tif 000008
【図３Ｂ】
0006703707.tif 000009
【図３Ｃ】
0006703707.tif 000010
【図３Ｄ】
0006703707.tif 000011
【図３Ｅ】
0006703707.tif 000012
【図３Ｆ】
0006703707.tif 000013
【図３Ｇ】
0006703707.tif 000014
【図３Ｈ】
0006703707.tif 000015
【図４Ａ】
0006703707.tif 000016
【図４Ｂ】
0006703707.tif 000017
【図５】
0006703707.tif 000018
【図６】
0006703707.tif 000019
【図７】
0006703707.tif 000020
【図８】
0006703707.tif 000021
【図９】
0006703707.tif 000022
【図１０】
0006703707.tif 000023
【図１１】
0006703707.tif 000024
【図１２】
0006703707.tif 000025
【図１３】
0006703707.tif 000026
【図１４】
0006703707.tif 000027
【図１５】
0006703707.tif 000028
【図１６】
0006703707.tif 000029
【図１７】
0006703707.tif 000030
【図１８Ａ】
0006703707.tif 000031
【図１８Ｂ】
0006703707.tif 000032
【図１９Ａ】
0006703707.tif 000033
【図１９Ｂ】
0006703707.tif 000034