(57)【特許請求の範囲】
【請求項１】
複数のプロセッサ要素と、
ソフトウェアスレッドのユーザレベルの分岐命令を実行する第１のプロセッサ要素と
を備え、前記第１のプロセッサ要素は、
前記ユーザレベルの分岐命令を復号するデコーダであって、前記ユーザレベルの分岐命令は、少なくとも１つの命令アドレスを示す、デコーダと、
前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成するユーザレベルのスレッド分岐モジュールと
を含み、
前記複数のプロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を実行し、前記複数のプロセッサ要素のそれぞれは、
前記対応するユーザレベルの同期及び終了命令を復号するデコーダと、
前記対応するユーザレベルの同期及び終了命令が復号されたことに応答して、ユーザレベルの同期スレッド終了モジュールが中に含まれる、前記対応するプロセッサ要素に、
さらなる命令の実行を中止させ、
前記複数のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行するまで待機させ、
前記複数のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行した後に、前記第１のプロセッサ要素上で実行される前記ソフトウェアスレッドの第２の命令へ制御を移行させる
ユーザレベルの同期スレッド終了モジュールと
を含む、
プロセッサ。
【請求項２】
それぞれのユーザレベルの同期スレッド終了モジュールは、前記対応するユーザレベルの同期及び終了命令が復号されたことに応答して、１つ又は複数のフラグに関連付けられた１つ又は複数のエラー状態のインジケーションを前記第１のプロセッサ要素に伝達する、
請求項１に記載のプロセッサ。
【請求項３】
複数のプロセッサ要素と、
ソフトウェアスレッドのユーザレベルの分岐命令を実行する第１のプロセッサ要素と
を備え、前記第１のプロセッサ要素は、
前記ユーザレベルの分岐命令を復号するデコーダであって、前記ユーザレベルの分岐命令は、少なくとも１つの命令アドレスを示す、デコーダと、
前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成するユーザレベルのスレッド分岐モジュールと
を含み、
前記第１のプロセッサ要素は、元のプログラム順序のアーキテクチャ状態に対してアウトオブオーダに実行されたはずの命令の結果をコミットするコミットユニットを有し、前記複数のプロセッサ要素のそれぞれはコミットユニットを有していない、
プロセッサ。
【請求項４】
前記デコーダは、単一の命令アドレスを示す前記ユーザレベルの分岐命令を復号し、前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、前記単一の命令アドレスを格納する、
請求項１から３の何れか一項に記載のプロセッサ。
【請求項５】
前記デコーダは、複数の異なる命令アドレスを示す前記ユーザレベルの分岐命令を復号し、前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、前記複数の異なる命令アドレスのうちの別々の１つを格納する、
請求項１から３の何れか一項に記載のプロセッサ。
【請求項６】
前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記第１のプロセッサ要素のアーキテクチャ状態のコピーを前記複数のプロセッサ要素のそれぞれに提供する、
請求項１から５の何れか一項に記載のプロセッサ。
【請求項７】
前記アーキテクチャ状態の前記コピーを前記複数のプロセッサ要素のそれぞれに提供することは、前記複数のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のメモリ位置のそれぞれに、前記アーキテクチャ状態のコピーを格納することを含む、
請求項６に記載のプロセッサ。
【請求項８】
前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、管理上のシステムソフトウェアから介入されることなく、前記命令を並列に実行するよう前記複数のプロセッサ要素のそれぞれを構成する、
請求項１から７の何れか一項に記載のプロセッサ。
【請求項９】
前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記第１のプロセッサ要素に、
前記ソフトウェアスレッドの命令実行を中止させ、
同期バリアで待機させる、
請求項１から８の何れか一項に記載のプロセッサ。
【請求項１０】
前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記第１のプロセッサ要素に、前記ソフトウェアスレッドの命令実行を中止させることはない、
請求項３に記載のプロセッサ。
【請求項１１】
前記第１のプロセッサ要素は、前記複数のプロセッサ要素のそれぞれよりも低い平均命令実行レイテンシを有する、
請求項１から１０のいずれか一項に記載のプロセッサ。
【請求項１２】
前記第１のプロセッサ要素は、前記複数のプロセッサ要素それぞれのマイクロアーキテクチャに比べて、命令実行がよりアウトオブオーダであるマイクロアーキテクチャを有する、
請求項１から１１のいずれか一項に記載のプロセッサ。
【請求項１３】
前記ユーザレベルのスレッド分岐モジュールは、前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のうちの少なくとも２０個のそれぞれを、前記命令を並列に実行するように構成し、前記複数のプロセッサ要素のうちの前記少なくとも２０個は全て、単一のデコーダを共有する、
請求項１から１２のいずれか一項に記載のプロセッサ。
【請求項１４】
プロセッサにおける方法であって、
第１のプロセッサ要素において、ソフトウェアスレッドのユーザレベルの分岐命令を受信する段階であって、前記ユーザレベルの分岐命令は少なくとも１つの命令アドレスを示す、段階と、
前記ユーザレベルの分岐命令に応答して、前記第１のプロセッサ要素を用いて、複数の追加のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する段階であって、前記複数の追加のプロセッサ要素のそれぞれは、前記ユーザレベルの分岐命令により示された前記少なくとも１つの命令アドレスのうちのある命令アドレスにおいて命令を実行し始める、段階と、
前記複数の追加のプロセッサ要素のそれぞれが、対応するユーザレベルの同期及び終了命令の実行に応答して、
さらなる命令の実行を中止する段階と、
前記複数の追加のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行するまで待機する段階と、
前記複数の追加のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行した後に、前記ソフトウェアスレッドの第２の命令へ制御を移行する段階と
を備える
方法。
【請求項１５】
プロセッサにおける方法であって、
第１のプロセッサ要素において、ソフトウェアスレッドのユーザレベルの分岐命令を受信する段階であって、前記ユーザレベルの分岐命令は少なくとも１つの命令アドレスを示す、段階と、
前記ユーザレベルの分岐命令に応答して、前記第１のプロセッサ要素を用いて、複数の追加のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する段階であって、前記複数の追加のプロセッサ要素のそれぞれは、前記ユーザレベルの分岐命令により示された前記少なくとも１つの命令アドレスのうちのある命令アドレスにおいて命令を実行し始める、段階と
を備え、
前記第１のプロセッサ要素は、元のプログラム順序のアーキテクチャ状態に対してアウトオブオーダに実行されたはずの命令の結果をコミットするコミットユニットを有し、前記複数の追加のプロセッサ要素のそれぞれはコミットユニットを有していない
方法。
【請求項１６】
受信する段階は、単一の命令アドレスを示す前記ユーザレベルの分岐命令を受信する段階を含み、構成する段階は、前記複数の追加のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、前記単一の命令アドレスを格納する段階を含む、
請求項１４または１５に記載の方法。
【請求項１７】
受信する段階は、複数の命令アドレスを示す前記ユーザレベルの分岐命令を受信する段階を含み、構成する段階は、前記複数の追加のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のプログラムカウンタのうちの別々の１つに、前記複数の命令アドレスのそれぞれを格納する段階を含む、
請求項１４または１５に記載の方法。
【請求項１８】
構成する段階は、前記複数の追加のプロセッサ要素それぞれのために、前記第１のプロセッサ要素のアーキテクチャ状態のコピーを格納する段階を含む、
請求項１４から１７の何れか一項に記載の方法。
【請求項１９】
構成する段階は、前記第１のプロセッサ要素が前記複数の追加のプロセッサ要素のそれぞれを、管理上のシステムソフトウェアから介入されることなく、前記命令を並列に実行するよう構成する段階を含み、さらに、
前記第１のプロセッサ要素において、命令をアウトオブオーダで実行する段階と、
前記複数の追加のプロセッサ要素のそれぞれにおいて、命令を順番に実行する段階と
を含む、
請求項１４から１８の何れか一項に記載の方法。
【請求項２０】
請求項１４から１９のいずれか一項に記載の方法を実行するよう動作する
プロセッサ。
【請求項２１】
請求項１４から１９のいずれか一項に記載の方法を実行するための手段を備える
プロセッサ。
【請求項２２】
請求項１４から１９のいずれか一項に記載の方法をプロセッサに実行させる
プログラム。
【請求項２３】
相互接続と、前記相互接続に結合された請求項１から１３のいずれか一項に記載のプロセッサと、前記相互接続に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）とを備える、
電子デバイス。
【請求項２４】
複数のプロセッサ要素と、
ソフトウェアスレッドのユーザレベルの分岐命令を実行する第１のプロセッサ要素と
を備え、前記第１のプロセッサ要素は、
前記ユーザレベルの分岐命令を復号するための手段であって、前記ユーザレベルの分岐命令は少なくとも１つの命令アドレスを示す、手段と、
前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する手段と
を含み、
前記複数のプロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を実行し、前記複数のプロセッサ要素のそれぞれは、
前記対応するユーザレベルの同期及び終了命令を復号する手段と、
前記対応するユーザレベルの同期及び終了命令が復号されたことに応答して、ユーザレベルの同期スレッド終了のための手段が中に含まれる、前記対応するプロセッサ要素に、
さらなる命令の実行を中止させ、
前記複数のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行するまで待機させ、
前記複数のプロセッサ要素のそれぞれが前記対応するユーザレベルの同期及び終了命令を実行した後に、前記第１のプロセッサ要素上で実行される前記ソフトウェアスレッドの第２の命令へ制御を移行させる
ユーザレベルの同期スレッド終了のための手段と
を含む、
プロセッサ。
【請求項２５】
複数のプロセッサ要素と、
ソフトウェアスレッドのユーザレベルの分岐命令を実行する第１のプロセッサ要素と
を備え、前記第１のプロセッサ要素は、
前記ユーザレベルの分岐命令を復号するための手段であって、前記ユーザレベルの分岐命令は少なくとも１つの命令アドレスを示す、手段と、
前記ユーザレベルの分岐命令が復号されたことに応答して、前記複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する手段と
を含み、
前記第１のプロセッサ要素は、元のプログラム順序のアーキテクチャ状態に対してアウトオブオーダに実行されたはずの命令の結果をコミットするコミットユニットを有し、前記複数のプロセッサ要素のそれぞれはコミットユニットを有していない、
プロセッサ。
【請求項２６】
請求項２２に記載のプログラムを格納する、
コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で説明される実施形態は、概してプロセッサに関する。具体的には、本明細書で説明される実施形態は、概してプロセッサ内の並列処理に関する。
【背景技術】
【０００２】
１つ又は複数のプロセッサを有するコンピュータシステム及び他の電子デバイスの性能を向上させるのに用いられている手法の１つが、並列処理である。並列処理は一般に、１つより多くのハードウェアスレッド、コア、中央処理装置、プロセッサ、あるいはプログラム又は複数のスレッドを実行する他のプロセッサ要素を同時に使用することを意味する。並列処理は、プログラムを並列に実行するそのようなプロセッサ要素がより多く存在するので、プログラムをより速く実行することを可能にするのに役立つことができる。
【図面の簡単な説明】
【０００３】
本発明は、以下の説明と、実施形態を示すのに用いられる添付図面とを参照することで、最も良く理解され得る。その図面は以下の通りである。
【図１】プロセッサの実施形態のブロック図である。
【図２】ユーザレベルの分岐命令の実施形態と、複数のユーザレベルの同期及び終了命令の実施形態とを用いて実装された分岐結合の論理構成に関する例を示す図である。
【図３】スレッドに同期バリアで待機させるよう動作するユーザレベルの分岐命令の実施形態を用いた、分岐結合コードのブロック図である。
【図４】ユーザレベルの分岐命令と、スレッドに同期バリアで待機させるよう動作する別個のユーザレベルの同期及び結合命令との実施形態を用いた、分岐結合コードのブロック図である。
【図５】好適な一対の同種のプロセッサ要素に関する、例示的な実施形態のブロック図である。
【図６】好適な一対の異種のプロセッサ要素に関する、例示的な実施形態のブロック図である。
【図７】ユーザレベルの分岐命令の実施形態を実行するプロセッサに関する、例示的な実施形態のブロック図である。
【図８】ユーザレベルの同期及び終了命令の実施形態を実行するプロセッサに関する、例示的な実施形態のブロック図である。
【図９Ａ】インオーダパイプラインの実施形態と、レジスタリネーミング・アウトオブオーダ発行／実行パイプラインの実施形態とを示すブロック図である。
【図９Ｂ】実行エンジンユニットに結合されたフロントエンドユニットを含み、実行エンジンユニット及びフロントエンドユニットの両方がメモリユニットに結合されたプロセッサコアの実施形態のブロック図である。
【図１０Ａ】オンダイ相互接続ネットワークへの接続に加え、レベル２（Ｌ２）キャッシュのローカルサブセットを有する単一のプロセッサコアに関する実施形態のブロック図である。
【図１０Ｂ】図１０Ａのプロセッサコアの一部を拡大して見た実施形態のブロック図である。
【図１１】１つより多くのコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサに関する実施形態のブロック図である。
【図１２】コンピュータアーキテクチャの第１の実施形態に関するブロック図である。
【図１３】コンピュータアーキテクチャの第２の実施形態に関するブロック図である。
【図１４】コンピュータアーキテクチャの第３の実施形態に関するブロック図である。
【図１５】コンピュータアーキテクチャの第４の実施形態に関するブロック図である。
【図１６】本発明の実施形態に従って、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換する、ソフトウェア命令変換器の使用に関するブロック図である。
【発明を実施するための形態】
【０００４】
ユーザレベルの分岐命令（例えば、ユーザレベルの分岐命令、ユーザレベルの分岐及び同期結合命令）、ユーザレベルの同期及び終了命令、ユーザレベルの同期及び終了命令、これらの命令を実行又は遂行するプロセッサ、これらの命令を実行又は遂行するときにプロセッサにより実行される方法、及び、これらの命令を実行又は遂行する１つ又は複数のプロセッサを組み込むシステムが、本明細書に開示される。以下の説明では、多くの具体的な詳細が明記される（例えば、具体的な命令オペレーション、プロセッサ構成、マイクロアーキテクチャの詳細、オペレーションの順序など）。しかし、これらの具体的な詳細を用いずに、実施形態は実施されてよい。他の例では、よく知られた回路、構造、及び手法は、本明細書の理解をあいまいにしないように、詳細に示されてはいない。
【０００５】
図１は、プロセッサ１００の実施形態のブロック図である。いくつかの実施形態では、プロセッサは、汎用プロセッサ（例えば、デスクトップ、ラップトップ、スマートフォン、又は他のコンピュータに用いられるタイプの汎用マイクロプロセッサ又は中央処理装置（ＣＰＵ））であってよい。あるいは、プロセッサは専用プロセッサであってもよい。好適な専用プロセッサの例には、限定されないが、グラフィックスプロセッサ、コプロセッサ、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、及びコントローラ（例えば、マイクロコントローラ）が含まれる。プロセッサは、様々な複合命令セット計算（ＣＩＳＣ）アーキテクチャ、縮小命令セット計算（ＲＩＳＣ）アーキテクチャ、超長命令語（ＶＬＩＷ）アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのいずれかを有することができ、あるいは異なるアーキテクチャの組み合わせを有することもできる。
【０００６】
プロセッサは、第１のプロセッサ要素１０２と、複数の追加のプロセッサ要素１１４とを有する。第１のプロセッサ要素及び追加のプロセッサ要素は、１つ又は複数のバス又は他の相互接続１１２（例えば、１つ又は複数のリング、トーラス、メッシュなど）により共に接続されてよく、又はそうでなければ結合されてよい。示されるように、複数の追加のプロセッサ要素は、第１の追加のプロセッサ要素１１４−１から第Ｎの追加のプロセッサ要素１１４−Ｎまでを含むことができる。追加のプロセッサ要素の数は、特定の実装に適切な任意の必要な数を表すことができる。例として、追加のプロセッサ要素の数は、２個から数百個程度の範囲、又はいくつかの場合では１０個から約２００個の範囲、又はいくつかの場合では２０個から約２００個の範囲、又はいくつかの場合では１０個より多く、２０個より多く、又は３０個より多くてよいが、本発明の範囲はそのように限定されてはいない。１つの例として、約４０個から約２００個の範囲であってよいが、これは必須ではない。いくつかの実施形態では、第１のプロセッサ要素１０２、及び追加のプロセッサ要素１１４のそれぞれは、単一の集積回路ダイ又は他の半導体基板上に全て配置されてよい。あるいは、追加のプロセッサ要素１１４のうちのいくつか又は全ては、第１のプロセッサ要素とは異なるダイ又は他の半導体基板上に任意に配置されてもよく、第１のプロセッサ要素と同じ集積回路パッケージ内に任意に含まれてもよい。いくつかの実施形態では、追加のプロセッサ要素１１４は、一般にドライバ、ミドルウェアなどを通してのみアクセスされ得るグラフィックスカード、ＧＰＧＰＵ、又は他のそのような別個のデバイスを表さなくてよい。
【０００７】
第１のプロセッサ要素１０２と追加のプロセッサ要素１１４のそれぞれとに好適なプロセッサ要素の例には、限定されないが、コア、ハードウェアスレッド、スレッドユニット、スレッドスロット、コンテキスト又はアーキテクチャ状態及びプログラムカウンタ（当技術分野において命令ポインタとも呼ばれる）を格納するよう動作するロジック、状態を格納しコードに別個に関連付けられるよう動作するロジック、及び他の論理プロセッサが含まれる。コアという用語は、集積回路上に位置し、独立したアーキテクチャ状態（例えば実行状態）を維持することができるロジックを指すのに用いられることが多く、ロジック内でアーキテクチャ状態が専用の実行リソース及び特定の他のリソースに関連付けられる。これに対して、ハードウェアスレッドという用語は、集積回路上に位置し、独立したアーキテクチャ状態を維持することができるロジックを指すのに用いられることが多く、ロジック内でアーキテクチャ状態が実行リソース又は特定の他のリソースへのアクセスを共有する。いくつかの実行リソース又は特定の他のリソースが、２つ又はそれより多くのアーキテクチャ状態に共有され、他の実行リソース又は特定の他のリソースが、１つのアーキテクチャ状態に特化されている場合、コアという用語及びハードウェアスレッドという用語のそのような用法の間の境界線はあいまいな場合がある。それにもかかわらず、コア、ハードウェアスレッド、及び他のプロセッサ要素は、ソフトウェアによって、個々の論理プロセッサ又はプロセッサ要素とみなされることが多い。概して、スレッド、プロセッサ、又はワークロードは、コア、ハードウェアスレッド、又は他のプロセッサ要素のそれぞれにスケジューリングされてよく、またコア、ハードウェアスレッド、又は他のプロセッサ要素のそれぞれに別個に関連付けられてよい。
【０００８】
第１のプロセッサ要素１０２は命令セット１０４を有する。複数の追加のプロセッサ要素１１４のそれぞれも、対応する命令セット１１６を有する。第１のプロセッサ要素の命令セット１０４は、追加のプロセッサ要素それぞれの命令セット１１６と同じであってよく、又はそれとは異なってもよい（例えば、いくつかの重複する命令及びいくつかの重複しない命令を有することができる）。命令セットは、それぞれのプロセッサ要素の命令セットアーキテクチャ（ＩＳＡ）の一部であり、プロセッサ要素が実行するよう動作するネイティブな命令を含む。命令セットの命令は、マクロ命令、機械レベルの命令、又はアセンブリ言語命令を表すことがある。
【０００９】
第１のプロセッサ要素の命令セット１０４には、ユーザレベルの分岐命令１０６が含まれる。いくつかの実施形態では、ユーザレベルの分岐命令１０６は、同期及び結合機能を省くことができる（例えば、同期及び結合機能は、別個のユーザレベルの同期及び結合命令、又はそのような機能を実装する複数の他の命令により提供されてよい）。他の実施形態では、命令１０６は、同期及び結合機能を組み込むユーザレベルの分岐及び同期結合命令であってよい。追加のプロセッサ要素それぞれの命令セット１１６には、ユーザレベルの同期及び終了命令１１８が含まれる。ユーザレベルの分岐命令及びユーザレベルの同期及び終了命令は、非特権レベル又はユーザレベルの実行で実行されてよいユーザレベルの命令である。命令セットのそれぞれには、１つ又は複数の非ユーザレベルの命令又は特権命令（不図示）も任意に含まれてよく、これらの命令は、非特権レベル又はユーザレベルの実行で実行されなくてよい。むしろ、非ユーザレベルの命令又は特権命令は、非ユーザレベル又は少なくとも部分的に特権レベルの実行（例えばリング０）でのみ実行されてよく、これらの命令は、オペレーティングシステム、ハイパーバイザ、仮想マシンマネージャ、あるいは他の特権エンティティ又は管理エンティティに確保されてよい。
【００１０】
いくつかの実施形態では、ユーザレベルの分岐命令１０６及びユーザレベルの同期及び終了命令１１８は、ユーザが分岐及び結合の論理構成をユーザレベルのアプリケーション又はソフトウェアに実装することを可能にしてよい。分岐及び結合の論理構成では、ソフトウェアの所与の部分（例えば、所与のソフトウェアスレッド）の実行は、ソフトウェアの複数の並列実行（例えば、複数のデータ並列ワークロード又は並列ソフトウェアスレッド）に分岐（ブランチ又はフォーク）することができ、続いて、これらの複数の並列実行は終了又はイールド（ｙｉｅｌｄ）してマージ又は結合することができ、その後、ソフトウェアの所与の部分（例えば、所与のソフトウェアスレッド）の実行は再開することができる。いくつかの実施形態では、ユーザレベルの分岐命令１０６は、複数の追加のプロセッサ要素１１４のそれぞれで並列に実行されるソフトウェアの部分の開始場所を指定する、区別する、又はそうでなければ示すよう動作することができ、ユーザレベルの同期及び終了命令１１８は、ソフトウェアの部分の終了場所を指定する、区別する、又はそうでなければ示すよう動作することができる。
【００１１】
第１のプロセッサ要素は、第１の復号ユニット１０８を有することができる。ユーザレベルの分岐命令は、第１の復号ユニット１０８に提供されてよい。第１の復号ユニットは、ユーザレベルの分岐命令を復号するよう動作することができる。いくつかの実施形態では、ユーザレベルの分岐命令は、少なくとも１つの命令アドレスを明示的に指定する、又はそうでなければ示すことができる。いくつかの実施形態では、命令は、追加のプロセッサ要素のそれぞれで並列に実行されるコードの部分の最初の命令又は開始命令を表す単一の命令アドレスを指定する、又はそうでなければ示すことができ、その命令部分で、追加のプロセッサ要素のそれぞれは開始する。他の実施形態では、命令は、複数の潜在的に／任意に異なる命令アドレスを指定することができ（例えば、それぞれが命令アドレスのベクトル値を有する１つ又は複数のベクトルレジスタを指定することができる）、その命令アドレスは、追加のプロセッサ要素のうちの別々の１つにより、それぞれ用いられ得る（例えば、各プロセッサ要素は異なる命令アドレスにおいて、データ並列ワークロードの異なる部分で並列に働き始めることができる）。第１のプロセッサ要素は、復号ユニットに結合されるユーザレベルのスレッド分岐モジュール１１０も有することができる。ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令を実行又は実装する１つ又は複数の実行ユニット又は他の実行ロジックを表すことができる。いくつかの実施形態では、ユーザレベルのスレッド分岐モジュール１１０は、プログラム制御フローに分岐（ブランチ又はフォーク）を生じさせるユーザレベルの分岐命令１０６に応答することができる（例えば、ユーザレベルの分岐命令が復号されたことに応答する、及び／又は、ユーザレベルの分岐命令から復号されるか、そうでなければユーザレベルの分岐命令から生成される１つ又は複数の制御信号に応答する）。いくつかの実施形態では、ユーザレベルのスレッド分岐モジュール１１０は、ユーザレベルの分岐命令に応答して、複数の追加のプロセッサ要素１１４のそれぞれを、命令のセット又はソフトウェアの一部を並列に実行するように構成するよう動作することができるか、そうでなければ、複数の追加のプロセッサ要素１１４のそれぞれにそうさせるよう動作することができる。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、ユーザレベルの分岐命令１０６により示される少なくとも１つの命令アドレスの１つにおいて、実行を開始するよう構成されてよく、そうでなければ、実行を開始するようにさせられてよい。前述したように、いくつかの実施形態では、命令は単一のアドレスを示すことができ、他の実施形態では、複数の潜在的に／任意に異なるアドレス（例えば、１つ又は複数のベクトル値のアドレス）を示すことができる。いくつかの実施形態では、ユーザレベルの分岐命令は、固定（ｓｔａｔｉｃ  ｏｒ  ｆｉｘｅｄ）数の追加のプロセッサ要素を暗黙に示すことができる（例えば、利用可能な追加のプロセッサ要素の全てが用いられてよい）。あるいは、ユーザレベルの分岐命令は、自由に選択できる数の追加のプロセッサ要素を明示的に指定するか、そうでなければ示すことがで��、その数は動的に割り当てられてよい（例えば、追加のプロセッサ要素の総数のうち１つ又は複数は、並列ソフトウェアを実行するのに用いられなくてよい）。
【００１２】
複数の追加のプロセッサ要素１１４のそれぞれは、ユーザレベルの同期及び終了命令１１８を実行するよう動作することができる。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、ユーザレベルの同期及び終了命令を復号する対応した復号ユニット１２０を有することができる。いくつかの実施形態では、追加のプロセッサ要素１１４のそれぞれは、対応する復号ユニット１２０に結合した対応するユーザレベルの同期スレッド終了モジュール１２２を有することができる。ユーザレベルの各同期スレッド終了モジュール１２２は、ユーザレベルの同期及び終了命令１１８を実行又は実装する１つ又は複数の実行ユニット又は他の実行ロジックを表すことができる。いくつかの実施形態では、ユーザレベルの各同期スレッド終了モジュール１２２は、ユーザレベルの同期及び終了命令１１８に応答して（例えば、命令が復号されたことに応答して、及び／又は、命令から復号されるか、そうでなければ命令から生成される１つ又は複数の制御信号に応答して）、プログラム制御フローの同期結合又は同期マージに備えて、対応するプロセッサ要素（当該モジュールはそこに含まれる）を、対応するスレッド又は実行の同期終了を実行するように構成するよう動作することができるか、そうでなければ、対応するプロセッサ要素にそうさせるよう動作することができる。いくつかの実施形態では、各プロセッサ要素１１４は、ユーザレベルの同期及び終了命令１１８を実行する場合、第１のプロセッサ要素上で実行されるソフトウェアスレッド又はソフトウェアの他の部分に戻る同期制御フロー及び同期バリアの両方を実装することができる。いくつかの実施形態では、各プロセッサ要素１１４は、ユーザレベルの同期及び終了命令を実行する場合、追加命令の実行を中止して、他の追加のプロセッサ要素１１４のそれぞれが対応するユーザレベルの同期及び終了命令を実行する（例えば、同期バリアに到達する）まで、（例えば、同期バリアにおいて）待機することができる。次に、いくつかの実施形態では、追加のプロセッサ要素の全てが、その対応するユーザレベルの同期及び終了命令を実行した場合、プログラム制御フローの結合又はマージが実行されてよく、また制御フローは、第１のプロセッサ要素１０２上で実行されるソフトウェアの部分にある適切な命令に戻ることができる。１つの態様では、追加のプロセッサ要素上の並列実行は全て終えることができ、実行は第１のプロセッサ要素上でだけ継続することができる。
【００１３】
有利には、ユーザレベルの分岐命令、並びにユーザレベルの同期及び終了命令は、ユーザ、プログラマ、又はコンパイラが、分岐及び結合の論理構成又はユーザレベルのアプリケーションのセマンティックスを明示的にプログラムする又は実装することを可能にできるユーザレベルのアーキテクチャメカニズムを表すことができる。分岐及び結合の論理構成は、オペレーティングシステム（又は他の管理上のシステムソフトウェア）に管理されたスレッドへのシステムコールを含むソフトウェアの実行時間で定義される必要はなく、このことは、一般に、（例えば、メッセージングなどに起因する）高いオーバーヘッドを有する傾向があり、その結果、一般に、比較的大きいワークロード、又は並列に実行されているコードの部分（例えば、粗粒度の並列処理）に実際には限定される傾向がある。むしろ、これらのユーザレベルの分岐命令並びにユーザレベルの同期及び終了命令を用いることで、分岐及び結合を実行するために、オペレーティングシステム又は他の管理上のシステムソフトウェアが介入する必要性はなくてよく、及び／又はそれに従う必要性はなくてよい。
【００１４】
さらに、いくつかの実施形態では、追加のプロセッサ要素上で実行される並列実行（例えば、並列ソフトウェアスレッド）は、オペレーティングシステム又は他の管理上のシステムソフトウェアによって直接管理されなくてもよい。１つの態様では、追加のプロセッサ要素上で実行される並列実行（例えば、並列ソフトウェアスレッド）は、オペレーティングシステム又は他の管理上のシステムソフトウェアには任意に見えなくてよく、又は少なくとも実質的に見えなくてもよい（例えば、これらの並列実行が追加のプロセッサ要素上で実行されていることを、ＯＳは認識しなくてもよい）。それに対し、いくつかの実施形態では、第１のプロセッサ要素上で実行される、ユーザレベルの分岐命令１０６を有したスレッド又はソフトウェアの部分は、管理上のシステムソフトウェア（例えば、オペレーティングシステムのスレッドスケジューラモジュール）によって、第１のプロセッサ要素１０２上にスケジューリングされた可能性があり、管理上のシステムソフトウェアには見えてよく、管理上のシステムソフトウェアによって管理されてよい。結果として、ユーザレベルの分岐命令並びにユーザレベルの同期及び終了命令は、そのような並列実行に一般に予想されるオーバーヘッドの量を削減するのに役立つことができる。１つの態様では、ユーザレベルの分岐命令及びユーザレベルの同期及び終了命令は、代わりにオペレーティングシステム（又は他の管理上のシステムソフトウェア）へのコールによるソフトウェア実行時間を介して、スレッドがスケジューリングされて管理されるならば、概して有用であろうと考えられるよりも小さいワークロード又はコードの部分を並列で効率的に実行する（例えば、より細かい粒度の並列処理）のに、任意に／潜在的に用いられてよい。
【００１５】
プロセッサ１００の詳細な例示的な実施形態が示され説明されたが、様々な代替的な実施形態も考えられる。いくつかの実施形態では、プロセッサは、ユーザレベルの分岐命令を実行することができるが、ユーザレベルの同期及び終了命令を任意に実装しなくてもよい。例えば、プロセッサは、ユーザレベルの分岐命令１０６を含む命令セットを有する第１のプロセッサ要素１０２を任意に有してよいが、追加のプロセッサ要素１１４は、説明されたユーザレベルの同期及び終了命令１１８を省いた命令セットを有してよい。他の実施形態では、プロセッサは、ユーザレベルの同期及び終了命令を実装してよいが、ユーザレベルの分岐命令を任意に実装しなくてもよい。例えば、プロセッサは、説明されたユーザレベルの同期及び終了命令１１８を含む命令セットを有する追加のプロセッサ要素１１４を任意に有してよいが、第１のプロセッサ要素１０２は、説明されたユーザレベルの分岐命令１０６を任意に省いた命令セットを有してよい。いくつかの実施形態では、ユーザレベルの同期及び終了命令の代わりに、ユーザレベルの終了命令が、同期機能又は能力を用いずに任意に実装されてよい。例えば、別個の（例えば、異なるオペコードを有する）命令が同期機能を実装するのに用いられてよく、また同期能力を省いたユーザレベルの終了命令と組み合わせて用いられてよい。他の変形形態が、本開示の利益を得る当業者には明らかであろう。
【００１６】
説明をあいまいにしないために、簡略化されたプロセッサ１００が示され説明された。しかし、プロセッサは他のコンポーネントを任意に含むことができる。例えば、様々な異なる実施形態が、図９Ａ〜図１１のいずれかについて示され説明されるコンポーネントの様々な異なる組み合わせ及び構成を含むことができる。プロセッサのコンポーネントの全てが、動作することを可能にするために、共に接続又は結合されてよい。
【００１７】
図２は、ユーザレベルの分岐命令２０６の実施形態、及びユーザレベルの複数の同期及び終了命令２１８の実施形態を用いて実装される分岐結合の論理構成２３０に関する例を示す図である。分岐結合の論理構成はマスターソフトウェアスレッド２３２を含み、これは、第１のプロセッサ要素（例えば、第１のプロセッサ要素１０２）上で実行されてよい。マスターソフトウェアスレッドは、ユーザレベルの分岐命令２０６を含む。いくつかの実施形態では、ユーザレベルの分岐命令は、少なくとも１つのアドレス（例えば、命令のセットの開始命令のアドレスであり、これは、複数の追加のプロセッサ要素のそれぞれにおいて並列に実行される）を明示的に指定することができる、又はそうでなければ示すことができる。例えば、様々な実施形態では、ユーザレベルの分岐命令は、少なくとも１つのアドレスを明示的に指定する、又はそうでなければ示す（例えば、少なくとも１つのオフセットを当該アドレスに提供する、又はそうでなければ当該アドレスを示す）少なくとも１つの値を有するレジスタ（例えば、アーキテクチャ上の汎用レジスタ）を明示的に指定するフィールドを有してよく、少なくとも１つのアドレスを明示的に指定する、又はそうでなければ示す少なくとも１つの値を有するメモリ位置を明示的に指定し、少なくとも１つのアドレスを明示的に指定する、又はそうでなければ示す少なくとも１つの値を有するレジスタを暗黙に示すフィールドを有してよく、あるいは、少なくとも１つのアドレスを明示的に指定する、又はそうでなければ示す少なくとも１つの値を提供する即値を有する。
【００１８】
ユーザレベルの分岐命令２０６は（例えば、第１のプロセッサ要素により）実行された場合、第１のプロセッサ要素に、複数の追加のプロセッサ要素（例えば、追加のプロセッサ要素１１４）のうちの別々の１つのそれぞれで、複数のヘルパーソフトウェアスレッド２３６の実行を並列に開始できるプログラム制御フローに分岐（ブランチ又はフォーク）２３４を生成させ、スケジューリングさせ、そうでなければ構成させることができ、又はそうでなければ分岐２３４を生じさせることができる。
複数のヘルパーソフトウェアスレッドは、第１のヘルパーソフトウェアスレッド２３６−１から第Ｎのヘルパーソフトウェアスレッド２３６−Ｎまでを含むことができ、ヘルパーソフトウェアスレッドの数は、特定の実装に適切な任意の必要な数であってよい（例えば、２個から約１００個の場合がある）。例として、ヘルパーソフトウェアスレッドは、多くの異なるタイプのプロシージャ又はワークロード、例えば、グラフィックス、オーディオ、信号処理、科学計算、トランザクション、データベース処理、あるいは様々な他のプロシージャ又はワークロードなどを表すことができる。いくつかの実施形態では、ヘルパーソフトウェアスレッドのそれぞれは、ユーザレベルの分岐命令により示される単一の命令アドレスにおいて、同じ命令２３５の異なる対応するインスタンスを実行することで開始することができる。例えば、ユーザレベルの分岐命令は、対応するヘルパーソフトウェアスレッド２３６を実行するのに用いられている複数の追加のプロセッサ要素のうちの別々の１つにそれぞれ対応することができる複数のプログラムカウンタ（例えばレジスタ）のそれぞれに、同じ命令アドレスが格納されるようにさせることができる。プログラムカウンタは、当技術分野において、命令ポインタとしても知られている。あるいは、異なる命令アドレスは命令により示されてよく、異なる命令アドレスはプログラムカウンタに格納されてよく、異なる対応する命令は異なるプロセッサ要素により最初に実行されてよい。各ヘルパーソフトウェアスレッドが、その対応する開始命令２３５を実行した後に、これらのヘルパーソフトウェアスレッドは、異なる順序の命令を任意に／潜在的に実行することができる（例えば、異なる分岐を取ることができる、異なるようにジャンプする又は動き回ることができる、異なるプロシージャコールを行うことができるなど）。有利には、これらの並列ヘルパーソフトウェアスレッドは、データスループット及び／又は性能を高めるのに役立つことができる。例えば、並列ヘルパーソフトウェアスレッドのそれぞれは、並列化可能又はスレッド化可能なワークロード、例えば、グラフィックスワークロード、科学計算ワークロードなどの異なる部分を処理することができる。ワークロード全体に関連した全てのタスクを順に実行する必要があるマスタースレッドではなく、並列ヘルパーソフトウェアスレッドが、ワークロード全体の異なる部分を少なくとも部分的に並列に実行することができる。
【００１９】
ある時点で、ヘルパーソフトウェアスレッド２３６のうち１つを並列に実行している各プロセッサ要素は、ユーザレベルの同期及び終了命令２１８の対応するインスタンスを実行することができる。例えば、第１のヘルパーソフトウェアスレッドは、第１のユーザレベルの同期及び終了命令２１８−１を含むことができ、第Ｎのヘルパーソフトウェアスレッドは、第Ｎのユーザレベルの同期及び終了命令２１８−Ｎを含むことができる。これらのユーザレベルの同期及び終了命令は、異なるヘルパーソフトウェアスレッドが実行される様々な方法（例えば、分岐、ジャンプなど）に部分的に依存して、異なる時間に実行されてよい。いくつかの実施形態では、ユーザレベルの同期及び終了命令２１８は、同期バリア２３８を構成するよう動作してよく、そうでなければ同期バリア２３８を生じさせるよう動作してよい。いくつかの実施形態では、プロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令２１８の実行に応答して、対応するヘルパーソフトウェアスレッド２３６のさらなる命令実行を中止することができ、またヘルパーソフトウェアスレッド２３６を実行するのに用いられているその他のプロセッサ要素の全てが、その対応するユーザレベルの同期及び終了命令２１８を実行するまで、同期バリア２３８で待機することができる（例えば、対応するプログラムカウンタは進まなくてよい）。次に、その他のプロセッサ要素の全てが、その対応するユーザレベルの同期及び終了命令２１８を実行した場合、最後に実行されたユーザレベルの同期及び終了命令２１８は、制御フローにおいて、並列ヘルパーソフトウェアスレッド２３６の実行を終わらせ、マスタースレッド２３２の適切な結合アドレスにおいて命令２４２を継続して実行させることができる同期マージ又は同期結合２４０を生じさせることができる。
【００２０】
図３は、実行を中止し、暗黙の同期バリア３３８で待機するようマスタースレッド３３２を構成するよう動作する、又はそうでなければマスタースレッド３３２にそうさせるよう動作するユーザレベルの分岐及び同期結合命令３０６の実施形態を含む分岐結合コード３３０のブロック図である。マスタースレッド３３２は、第１のプロセッサ要素（例えば、プロセッサ要素１０２）上で動作することができる。マスタースレッドは、ユーザレベルの分岐及び同期結合命令３０６を含む。ユーザレベルの分岐及び同期結合命令は、実行されると、複数の並列ヘルパーソフトウェアスレッド３３６がそれぞれ、複数の追加のプロセッサ要素（例えば、追加のプロセッサ要素１１４）のうちの別々の１つで動作するよう開始され得る制御フローに分岐（ブランチ又はフォーク）３３４を構成することができ、又はそうでなければ分岐（ブランチ又はフォーク）３３４を生じさせることができる。この実施形態では、ユーザレベルの分岐及び同期結合命令はまた、実行されると、マスターソフトウェアスレッド３３２を実行するプロセッサ要素を、マスターソフトウェアスレッド３３２のさらなる命令の実行を中止し、暗黙の同期バリア３３８での待機をさらに実行し、その後、プロセッサ要素ユーザレベルの分岐及び同期結合命令（例えば、元のプログラム順序で、ユーザレベルの分岐及び同期結合命令３０６の直後に続く命令３５０）により決定される命令アドレスで結合を行うよう構成することができ、又は、そうでなければマスターソフトウェアスレッド３３２を実行するプロセッサ要素にそうさせることができる。
【００２１】
いくつかの実施形態では、ユーザレベルの分岐及び同期結合命令は単一の命令アドレスを示すことができ、並列ヘルパーソフトウェアスレッド３３６のそれぞれは、同じ命令３３５の対応するインスタンスで実行を開始することができ、その対応するインスタンスは、ユーザレベルの分岐命令３０６により指定されるか、そうでなければ示される単一の命令アドレスに位置する。並列ヘルパーソフトウェアスレッドのそれぞれは、次に、（例えば、異なる分岐、ジャンプ、プロシージャコールなどに起因して）潜在的に異なるさらなる命令のセットを実行することができる。あるいは、ユーザレベルの分岐命令は、複数の潜在的に／任意に異なる命令アドレスを示すことができ、並列ヘルパーソフトウェアスレッドのそれぞれは、任意に／潜在的に異なる命令アドレスで実行を開始することができる。最終的に、並列ヘルパーソフトウェアスレッドのそれぞれは、通常異なる時間で、ユーザレベルの同期及び終了命令３１８の対応するインスタンスを実行することができる。プロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を実行する場合、対応するヘルパーソフトウェアスレッドのさらなる命令の実行を中止することができ、さらなる実行は、マスターソフトウェアスレッド３３２により監視されている同じ暗黙の同期バリア３３８で待機することができる。その他の並列ヘルパーソフトウェアスレッドのそれぞれが全て、その対応するユーザレベルの同期及び終了命令を実行した場合、その対応するユーザレベルの同期及び終了命令を実行する最後のプロセッサ要素は、適切な結合アドレス（例えば、ユーザレベルの分岐及び同期結合命令により決定される結合命令アドレス）に戻る制御フローにマージ又は結合３４０を構成することができる、又はそうでなければそれを生じさせることができる。並列ヘルパーソフトウェアスレッドのそれぞれの実行は、終了することができる。再開されるマスターソフトウェアスレッド３３２＊の実行は、マスタースレッドのユーザレベルの分岐及び同期結合命令の直後に続く命令３５０を用いて継続することができる。この実施形態において、暗黙という用語は、暗黙の同期バリアに用いられるが、それは、当該同期バリアが、明示的な同期バリアを作成するのに用いられている別個の命令の代わりに、ユーザレベルの分岐及び同期結合命令にとっては暗黙であるか、又は本来備わっているからである。
【００２２】
図４は、ユーザレベルの分岐命令４０６と、マスタースレッド４３２を、実行を中止し、明示的な同期バリア４３８で待機するよう構成すべく動作する、又はそうでなければマスタースレッド４３２にそうさせるよう動作する、別個のユーザレベルの同期及び結合命令４５２との実施形態を含む分岐結合コード４３０のブロック図である。
【００２３】
マスタースレッド４３２は、第１のプロセッサ要素（例えば、プロセッサ要素１０２）上で動作することができる。マスタースレッドは、ユーザレベルの分岐命令４０６を含む。ユーザレベルの分岐命令は、実行されると、複数の並列ヘルパーソフトウェアスレッド４３６がそれぞれ、複数の追加のプロセッサ要素（例えば、追加のプロセッサ要素１１４）のうちの別々の１つで動作するよう開始され得る制御フローに分岐（ブランチ又はフォーク）４３４を構成することができる、又はそうでなければ分岐（ブランチ又はフォーク）４３４を生じさせることができる。この実施形態では、ユーザレベルの分岐命令４０６は、実行されると、マスターソフトウェアスレッド４３２を実行しているプロセッサ要素にさらなる命令の実行を中止させることも、同期バリアで待機させることもしない。むしろ、プロセッサ要素は、マスタースレッドにおいて元のプログラム順序でユーザレベルの分岐命令４０６の直後にある命令４５０を含むマスターソフトウェアスレッドの１つ又は複数のさらなる命令を継続して実行することができる。
【００２４】
マスターソフトウェアスレッドは、ユーザレベルの同期及び結合命令４５２も含むことができる。ユーザレベルの同期及び結合命令は、実行されると、マスターソフトウェアスレッドを実行するプロセッサ要素を、マスターソフトウェアスレッドのさらなる命令の実行を中止し、再開される実行のために、明示的な同期バリア４３８で待機するよう構成すべく動作することができる、又はそうでなければマスターソフトウェアスレッドを実行するプロセッサ要素にそうさせるよう動作することができる。いくつかの実施形態では、ユーザレベルの同期及び結合命令４５２は、ユーザレベルの分岐命令４０６と異なるオペコードを有することができる。いくつかの実施形態では、ユーザレベルの同期及び結合命令４５２は、ユーザレベルの同期及び終了命令４１８と同じオペコードを有することができる。他の実施形態では、ユーザレベルの同期及び結合命令４５２は、ユーザレベルの同期及び終了命令４１８と異なるオペコードを有することができる。
【００２５】
いくつかの実施形態では、ユーザレベルの分岐命令は、単一の命令アドレスを任意に示すことができ、並列ヘルパーソフトウェアスレッド４３６のそれぞれは、同じ命令４３５の対応するインスタンスで実行を開始することができ、その対応するインスタンスは、ユーザレベルの分岐命令４０６により指定されるか、そうでなければ示される単一の命令アドレスに位置する。並列ヘルパーソフトウェアスレッドのそれぞれは、次に、（例えば、異なる分岐、ジャンプ、プロシージャコールなどに起因して）潜在的に異なるさらなる命令のセットを実行することができる。あるいは、ユーザレベルの分岐命令は、複数の潜在的に／任意に異なる命令アドレスを示すことができ、並列ヘルパーソフトウェアスレッドのそれぞれは、任意に／潜在的に異なる命令アドレスで実行を開始することができる。最終的に、並列ヘルパーソフトウェアスレッドのそれぞれは、通常異なる時間で、ユーザレベルの同期及び終了命令４１８の対応するインスタンスを実行することができる。プロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を実行する場合、対応するヘルパーソフトウェアスレッドのさらなる命令の実行を中止することができ、さらなる実行は、ユーザレベルの同期及び結合命令４５２に起因して、マスターソフトウェアスレッド４３２により監視されている同じ明示的な同期バリア４３８で待機することができる。その他の並列ヘルパーソフトウェアスレッドのそれぞれが全て、その対応するユーザレベルの同期及び終了命令を実行した場合、その対応するユーザレベルの同期及び終了命令を実行する最後のプロセッサ要素は、制御フローに同期マージ又は同期結合４４０を構成することができる、又はそうでなければそれを生じさせることができる。並列ヘルパーソフトウェアスレッドのそれぞれの実行は、終了することができる。再開されるマスターソフトウェアスレッド４３２＊の実行は、例えば、マスタースレッドにおいて元のプログラム順序でユーザレベルの同期及び結合命令４５２の直後に続く命令４５４など、ユーザレベルの同期及び結合命令により決定される適切な結合アドレスにおいて命令を継続することができる。
【００２６】
前述したように、第１のプロセッサ要素（例えば、第１のプロセッサ要素１０２）は、ユーザレベルの分岐命令（例えば、ユーザレベルの分岐命令１０６）の実施形態を実行することができ、複数の追加のプロセッサ要素（例えば、追加のプロセッサ要素１１４）のそれぞれは、ユーザレベルの同期及び終了命令（例えば、ユーザレベルの同期及び終了命令１１８）の実施形態を実行することができる。いくつかの実施形態では、同種のプロセッサ要素が、第１のプロセッサ要素と、追加のプロセッサ要素のそれぞれとに用いられてよい。他の実施形態では、第１のプロセッサ要素は、追加のプロセッサ要素のそれぞれと比べて、異種又は異なる設計を有することができる。
【００２７】
図５は、ユーザレベルの分岐命令を含むシリアルスレッドを実行するのに適した第１のプロセッサ要素５０２と、ユーザレベルの同期及び終了命令を含む複数の並列スレッドのうちの１つを実行するのに適した追加のプロセッサ要素５１４とを含む、一対の同種のプロセッサ要素５６０に関する例示的な実施形態のブロック図である。一対の同種のプロセッサ要素は、実質的に同一であってよい。例えば、同種のプロセッサ要素のそれぞれは、同一の設計を用いたコア、ハードウェア、スレッドなどであってよい。いくつかの実施形態では、第１のプロセッサ要素及び追加のプロセッサ要素の両方は、同じ命令セット５０４を有することができ、第１のプロセッサ要素及び追加のプロセッサ要素の両方は、アーキテクチャ機能５６２（例えば、アーキテクチャレジスタ、データタイプなど）の同じセットを有することができ、また第１のプロセッサ要素及び追加のプロセッサ要素の両方は、同じマイクロアーキテクチャ５６４を有することができる。
【００２８】
あるいは、同種のプロセッサ要素を用いるのではなく、異種のプロセッサ要素を用いることに利点がある場合がある。例えば、シリアルスレッドを実行するプロセッサ要素とは異なるように、並列スレッドを実行するプロセッサ要素を設計又は最適化することが有利である場合がある。図６は、ユーザレベルの分岐命令を含むシリアルスレッドを実行するのに適した第１のプロセッサ要素６０２と、ユーザレベルの同期及び終了命令を含む複数の並列スレッドのうちの１つを実行するのに適した追加のプロセッサ要素６１４とを含む、一対の異種のプロセッサ要素６６８に関する例示的な実施形態のブロック図である。
【００２９】
異種のプロセッサ要素は、異なる実施形態の様々な点で異なっていてよい。示されるように、いくつかの実施形態では、第１のプロセッサ要素の命令セット６０４は、追加のプロセッサ要素の命令セット６１６と任意に異なっていてよい。例えば、両方の命令セットは重複する命令６７０のセットを含むことができるが、第１のプロセッサ要素の命令セットは、追加のプロセッサ要素の命令セット６１６に含まれていない１つ又は複数の重複しない命令６７１を任意に含むことができる、及び／又は、追加のプロセッサ要素の命令セットは、第１のプロセッサ要素の命令セット６０４に含まれていない１つ又は複数の重複しない命令６７２のセットを任意に含むことができる。１つの例として、いくつかの実施形態では、追加のプロセッサ要素６１４（すなわち、並列スレッド及びユーザレベルの同期及び終了命令を実行するもの）は任意に、ユーザレベル又は非特権レベルの実行特権のみに専用であってよい。そのような実施形態では、追加のプロセッサ要素は、第１のプロセッサ要素の命令セットに含まれる全ての特権レベル又は非ユーザレベルの命令を任意に省くことができる。他の実施形態では、命令セットは、様々な点で異なっていてよい。例えば、並列スレッドを対象とした所与のタイプのコードを実行するのに必要ではない命令はいずれも、追加のプロセッサ要素の命令セットから任意に省かれてよい。
【００３０】
示されるように、いくつかの実施形態では、第１のプロセッサ要素のマイクロアーキテクチャ６６４は、追加のプロセッサ要素のマイクロアーキテクチャ６７４と任意に異なっていてよい。例えば、いくつかの実施形態では、第１のプロセッサ要素のマイクロアーキテクチャは、命令実行レイテンシの削減を重視するよう任意に設計されてよく、追加のプロセッサ要素のマイクロアーキテクチャは、実行レイテンシの削減をあまり重視せず、むしろスループットの増加を重視するよう任意に設計されてよい。例えば、レイテンシを削減するために、アウトオブオーダ実行及び／又は他の精巧なメカニズムが任意に利用されてよい。しかし、アウトオブオーダ実行リソース及び他のそのような精巧なリソースは、最大並列スループットを実現するプロセッサを設計する能力と競合しやすい場合がある。例えば、各コアが、アウトオブオーダ及び／又は他の精巧なリソースを収容するには比較的大きい場合、そのようなリソースを省いたより小さいコアの数と比較して、これらのより大きいコアのより少数が、同じサイズのダイ上に合致することができる場合がある。代わりに、より小さいコアのより多くがダイ上に含まれていた場合、より多くのスレッドを実行することで、これらのスレッドのそれぞれがより高いレイテンシを有していても、より高いスループットが実現される場合がある。そのようなスレッドが多く存在する場合、スレッドを実行状態にしておくことが、個々のスレッドのレイテンシを削減させるよりも重要になる。また、アウトオブオーダ実行リソースは、同じスループットに対してより多くの電力を消費しやすい場合がある。
【００３１】
したがって、いくつかの実施形態では、第１のプロセッサ要素のマイクロアーキテクチャは任意に、アウトオブオーダ実行のマイクロアーキテクチャであってよく、追加のプロセッサ要素のマイクロアーキテクチャは任意に、インオーダのマイクロアーキテクチャ、実質的にインオーダのマイクロアーキテクチャ、又は少なくとも第１のプロセッサ要素のマイクロアーキテクチャより著しくインオーダのマイクロアーキテクチャであってよい。いくつかの実施形態では、第１のプロセッサ要素のマイクロアーキテクチャは、１つ又は複数のアウトオブオーダ実行リソース６７５を含むことができ、追加のプロセッサ要素のマイクロアーキテクチャは、そのようなアウトオブオーダ実行リソースを任意に省く（６７７）ことができる。そのようなアウトオブオーダリソースの例には、限定されないが、リザベーションステーション、命令バッファ、又は、命令をその入力オペランドが利用可能になるまで格納する他の命令キュー、命令を実行ユニットにアウトオブオーダで発行するアウトオブオーダ発行ユニット、命令を並べ替えてその結果を元のプログラム順序に戻すリオーダバッファ又は他の命令バッファ又はキュー、及びアウトオブオーダで実行された命令の結果を元のプログラム順序のアーキテクチャ状態にコミットするコミットユニットが含まれる。様々な実施形態では、第１のプロセッサ要素（すなわち、ユーザレベルの分岐命令を実行するもの）はコミットユニットを有することができるが、追加のプロセッサ要素（すなわち、ユーザレベルの同期及び終了命令を実行するもの）はそれを有していなくてもよく、及び／又は、第１のプロセッサ要素はリオーダバッファを有することができるが、追加のプロセッサ要素はそれを有していなくてもよく、及び／又は、第１のプロセッサ要素はリザベーションステーションを有することができるが、追加のプロセッサ要素はそれを有していなくてもよい。いくつかの実施形態では、第１のプロセッサ要素は比較的低い平均命令実行レイテンシを有することができ、追加のプロセッサ要素は比較的高い平均命令実行レイテンシを有することができる。
【００３２】
別の例として、いくつかの実施形態では、ユーザレベルの分岐命令（例えば、マスタースレッド）を有する１つのタイプのコードを実行するのに必要とされる、又はそうするのに比較的役立つが、ユーザレベルの同期及び終了命令（例えば、並列ヘルパースレッドのうちの１つ）を有する別のタイプのコードを実行するのに必要とされず、そうするのにそれほど役立つものでもない、１つ又は複数のマイクロアーキテクチャリソースは、第１のプロセッサ要素６０２に任意に含まれてよいが、追加のプロセッサ要素６１４から任意に省かれてよい。いくつかの実施形態では、異なるタイプのコード又はオブジェクトは、第１のプロセッサ要素を対象としてよく、それに応じて追加のプロセッサ要素及びそのマイクロアーキテクチャは異なってよい。いくつかの実施形態では、追加のプロセッサ要素のマイクロアーキテクチャは、簡略化されたスレッド相互依存及び／又は順序化リソース６７８を任意に含むことができ、これは第１のプロセッサ要素のマイクロアーキテクチャのスレッド相互依存及び／又は順序化リソース６７６に対して任意に簡略化されてよい。１つの態様では、第１のプロセッサ要素及び追加のプロセッサ要素の両方は、共有メモリにアクセスすることに関連した順序化ルールに従う必要があり得るが、追加のプロセッサ要素はインオーダであるか、アウトオブオーダの第１のプロセッサ要素より少なくともインオーダであり得るので、そのような共有メモリアクセスの順序化ルールを実施する追加のプロセッサ要素内のメカニズムは、簡略化されてよい。換言すれば、アウトオブオーダの第１のプロセッサ要素で必要となることが多い複雑性は、インオーダ又はよりインオーダの追加のプロセッサ要素から任意に省かれてよい。例えば、メモリアクセスフェンス命令（例えば、ストアフェンス命令、ロードフェンス命令、メモリフェンス命令など）を実装するメカニズムは、追加のプロセッサ要素では、第１のプロセッサ要素のメカニズムに対して任意に簡略化されてよい。他の実施形態では、第１のプロセッサ要素のマイクロアーキテクチャに含まれる他のマイクロアーキテクチャリソースは、並列コード（例えば、並列ヘルパースレッド）がこれらのリソースを必要としない、又はこれらのリソースを有することでそれほど大きな利益を得ない場合、追加のプロセッサ要素のマイクロアーキテクチャから任意に省かれてよい。
【００３３】
別の例として、いくつかの実施形態では、追加のプロセッサ要素（例えば、追加のプロセッサ要素６１４を含む）は、第１のプロセッサ要素６０２により共有されないリソースを共有することができ、及び／又は追加のプロセッサ要素（例えば、追加のプロセッサ要素６１４を含む）は、第１のプロセッサ要素６０２より大きな程度でリソースを共有することができる。１つの例として、いくつかの実施形態では、より多数の追加のプロセッサ要素６１４がデコーダを共有することができ、より少数の第１のプロセッサ要素６０２がデコーダを共有することができる。例えば、様々な実施形態では、１個から約１０個、又は１個から約５個の第１のプロセッサ要素６０２がデコーダを共有することができ、１０個から３００個、又は２０個から３００個、又は５０個から３００個の追加のプロセッサ要素６１４がデコーダを共有することができる。いくつかの実施形態では、追加のプロセッサ要素６１４は復号された命令のキャッシュを利用することができ、通常、追加のプロセッサ要素がほとんどの場合に同じ又は類似の命令を実行することができるので、復号された命令はキャッシュにすでに存在することがあり、そのため、より異種のコードを実行する第１のプロセッサ要素に概して有用であろうと考えられるよりも多数の追加のプロセッサ要素によってデコーダが利用されてよい。
【００３４】
別の例として、いくつかの実施形態では、より多数の追加のプロセッサ要素６１４が最下位レベルのキャッシュ又はレベル１（Ｌ１）キャッシュを共有することができ、このキャッシュは、最下位レベルのキャッシュ又はレベル１（Ｌ１）キャッシュを共有する複数の第１のプロセッサ要素又は要素６０２と比較して、実行ユニットに最も近い。例えば、様々な実施形態では、１個から８個、又は１個から４個の第１のプロセッサ要素６０２がＬ１キャッシュを共有することができ、１０個を超える、又は２０個を超える追加のプロセッサ要素がＬ１キャッシュを共有することができる。
【００３５】
図７は、ユーザレベルの分岐命令７０６の実施形態を実行するプロセッサ７００に関する、例示的な実施形態のブロック図である。プロセッサは，第１のプロセッサ要素７０２と、第１の追加のプロセッサ要素７１４−１から第Ｎの追加のプロセッサ要素７１４−Ｎまでを含む複数の追加のプロセッサ要素７１４とを含む。第１のプロセッサ要素は、命令フェッチユニット７８１を有する。フェッチユニットは、第１のプロセッサ要素のプログラムカウンタ７８３からの、フェッチする次の命令のインジケーションに基づいて、例えばメモリからユーザレベルの分岐命令をフェッチすることができる。ユーザレベルの分岐命令は、マクロ命令、アセンブリ言語命令、機械語命令、あるいは第１のプロセッサ要素の命令セットの他の命令又は制御信号を表すことができる。いくつかの実施形態では、ユーザレベルの分岐命令は、少なくとも１つの命令アドレスを（例えば、１つ又は複数のフィールド、又は一連のビットによって）明示的に指定する、又はそうでなければ示す（例えば、暗黙に示す）ことができる。前述した命令アドレスを示す様々な方法が好適である。
【００３６】
フェッチユニットは、ユーザレベルの分岐命令を復号ユニット７０８に提供することができる。復号ユニットは、ユーザレベルの分岐命令を復号することができる。復号ユニットは、１つ又は複数の比較的低水準の命令又は制御信号（例えば、１つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、復号された命令又は制御信号など）を出力することができ、それらが、比較的高水準のユーザレベルの分岐命令を反映する、表す、及び／又は比較的高水準のユーザレベルの分岐命令から得られる。いくつかの実施形態では、復号ユニットは、ユーザレベルの分岐命令を受信する１つ又は複数の入力機構（例えば、ポート、相互接続、インタフェース）と、そこに結合され、ユーザレベルの分岐命令を認識して復号する命令認識及び復号ロジックと、そこに結合され、低水準の命令又は制御信号を出力する１つ又は複数の出力機構（例えば、ポート、相互接続、インタフェース）とを含むことができる。復号ユニットは、様々な異なるメカニズムを用いて実装されてよく、それらのメカニズムには、限定されないが、マイクロコードリードオンリメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、及び復号ユニットを実装するのに適した他のメカニズムが含まれる。
【００３７】
ユーザレベルのスレッド分岐モジュール７１０が、復号ユニット７０８に結合される。ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令を実行又は実装する１つ又は複数の実行ユニットを表すことができる。ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令を表す、及び／又はユーザレベルの分岐命令から得られる、１つ又は複数の復号された命令、あるいはそうでなければ変換された命令又は制御信号を受信することができる。ユーザレベルのスレッド分岐モジュール及び／又はプロセッサは、（例えば、ユーザレベルの分岐命令から復号された１つ又は複数の命令又は制御信号に応答して）ユーザレベルの分岐命令を実行するよう動作する具体的なロジック又は特定のロジック（例えば、トランジスタ、集積回路、あるいはファームウェア（例えば、不揮発性メモリに格納された命令）及び／又はソフトウェアと組み合わされる可能性のある他のハードウェア）を含むことができる。ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令に応答して、及び／又はその結果として（例えば、命令から復号された１つ又は複数の命令又は制御信号に応答して）、複数の追加のプロセッサ要素７１４のそれぞれを、ユーザレベルの分岐命令により示される１つ又は複数の命令アドレスから始めて、命令を並列に実行するよう構成すべく動作してよい。
【００３８】
いくつかの実施形態では、命令に応答するユーザレベルのスレッド分岐モジュールは、第１のプロセッサ要素、及び追加のプロセッサ要素それぞれの両方にアクセス可能な１つ又は複数の記憶位置７８５に、１つ又は複数の命令アドレス７８６を格納することができる。示されるように、いくつかの実施形態では、命令アドレス７８６−１から７８６−Ｎは、並列処理に用いられる追加のプロセッサ要素７１４−１から７１４−Ｎのそれぞれのために任意に格納されてよい。前述したように、いくつかの実施形態では、同じ単一のアドレスが追加のプロセッサ要素それぞれのために格納されてよく、他の実施形態では、潜在的に／任意に異なる命令アドレス（例えば、ベクトルレジスタの異なるデータ要素からのもの）が追加のプロセッサ要素それぞれのために格納されてよい。追加のプロセッサ要素のそれぞれは、１つ又は複数の命令アドレス７８６にアクセスして、その命令アドレスから並列処理を始めることができる。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、この命令アドレスを、対応するプログラムカウンタ又は命令ポインタにコピー又は格納することができる。あるいは、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令に応答して、このアドレスを直接、プログラムカウンタ又は命令ポインタのそれぞれに格納するよう動作することができる。
【００３９】
第１のプロセッサ要素は、アーキテクチャ状態７８４も有する。いくつかの実施形態では、アーキテクチャ状態７８４は、１つ又は複数のアーキテクチャレジスタ、例えば、汎用レジスタ、パックドデータレジスタ、浮動小数点レジスタ、ステータスレジスタなどのコンテンツ又は値を、可能性として第１のプロセッサ要素の他のアーキテクチャ状態と共に含むことができる。いくつかの実施形態では、命令に応答するユーザレベルのスレッド分岐モジュールは、アーキテクチャ状態７８４の一部又は全ての１つ又は複数のコピーを、アーキテクチャ状態７８７として、１つ又は複数の記憶位置７８５に格納することができる。１つの実施形態では、アーキテクチャ状態は、前述したように、プロセッサのアーキテクチャレジスタの１つ又は複数のセットの値又はコンテンツを含むことができる。示されるように、いくつかの実施形態では、アーキテクチャ状態７８７−１から７８７−Ｎの異なる対応したコピーが、並列処理に用いられる追加のプロセッサ要素７１４−１から７１４−Ｎのそれぞれのために任意に格納されてよい。続いて、追加のプロセッサ要素のそれぞれは、アーキテクチャ状態の１つ又は複数のセットにアクセスして、そのアーキテクチャ状態を並列処理に用いることができる。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、このアーキテクチャ状態を、追加のプロセッサ要素のそれぞれに対応するローカルストレージ、例えば、アーキテクチャレジスタの複製セット、１つ又は複数のキャッシュ（例えば、レジスタキャッシュ）、あるいは他のローカルストレージデバイスなどに、任意にコピー又は格納することができる。
【００４０】
別の実施形態には、別のタイプの記憶位置７８５が好適である。好適な記憶位置の例には、限定されないが、第１のプロセッサ要素の１つ又は複数のレジスタ、追加のプロセッサ要素の１つ又は複数のレジスタ、第１のプロセッサ要素と追加のプロセッサ要素のそれぞれとによって共有されるメモリのメモリ位置など、及びこれらの組み合わせが含まれる。いくつかの実施形態では、記憶位置は、第１のプロセッサ要素と追加のプロセッサ要素のそれぞれとによって共有され、並列処理制御データ構造体を実装するのに用いられる、ユーザがアドレス可能なメモリ空間の１つ又は複数のメモリ位置を表すことができる。いくつかの実施形態では、この並列処理制御データ構造体は、オペレーティングシステムにより用いられるプロシージャコールスタックから分かれている。いくつかの実施形態では、この並列処理制御データ構造体は、第１のプロセッサ要素、及び追加のプロセッサ要素それぞれの両方にアクセス可能であってよく、第１のプロセッサ要素と追加のプロセッサ要素のそれぞれとの間で、特定の実装に必要な様々な異なるタイプの制御及びデータを受け渡すのに用いられてよい。あるいは、様々な他のタイプの記憶位置が、代わりに任意に用いられてもよい。
【００４１】
いくつかの実施形態では、１つ又は複数の命令アドレス、及びアーキテクチャ状態の１つ又は複数のセットが格納された後に、ユーザレベルのスレッド分岐モジュールが、命令に応答して、追加のプロセッサ要素のそれぞれを起動（ａｃｔｉｖａｔｅ  ｏｒ  ｉｎｉｔｉａｔｅ）し、並列処理を始めるために１つ又は複数の制御信号を送信することができる。あるいは、他の実施形態では、この追加のオペレーションは、他の基準（例えば、プログラムカウンタ又は記憶位置７８５にプログラムされている値、記憶位置７８５にプログラムされているアーキテクチャ状態など）に基づいて推測され得るので、任意に省かれてもよい。いくつかの実施形態では、これらの追加のプロセッサ要素を起動して並列処理を実行するために、オペレーティングシステムからの創出を必要としなくてよく、またオペレーティングシステムに従う必要もなくてよい。
【００４２】
いくつかの実施形態では、ユーザレベルの分岐命令は任意に、スレッドに同期バリアを課してもよく、又は第１のプロセッサ要素に他のコード実行を課してもよいが、これは必須ではない（例えば、別個のユーザレベルの同期及び結合命令が任意に用いられてよい）。示されるように、そのような実施形態では、第１のプロセッサ要素は、同期結合モジュール７８２を任意に含むことができる。同期結合モジュールは、復号ユニットに結合されてよい。いくつかの実施形態では、ユーザレベルの分岐命令に応答して、同期結合モジュールは、プログラムカウンタ７８３をフリーズする、又はそうでなければプログラムカウンタにインクリメントを中止させるよう動作することができる。これにより、スレッド及び／又は第１のプロセッサ要素によるさらなる命令の実行を中止させることができる。示されるように、同期結合モジュールは、同期バリア機構７８８に結合されてよい。複数の追加のプロセッサ要素もそれぞれ、同期バリア機構に結合されてよい。追加のプロセッサ要素のそれぞれは、ユーザレベルの同期及び終了命令を実行する場合、同期バリア機構内の対応する状態を更新することができる。１つの例として、同期バリア機構は、追加のプロセッサ要素のうちの１つが、そのユーザレベルの同期及び終了命令を実行するたびに、インクリメントされるかデクリメントされるカウンタであってよい。別の例として、同期バリア機構は、追加のプロセッサ要素のそれぞれに対して対応する異なるビットを有するレジスタを含むことができ、対応するビットは、追加のプロセッサ要素のそれぞれがそのユーザレベルの同期及び終了命令を実行する場合、特定の実装に必要なようにセットされるかクリアされてよい。同期結合モジュール７８２は、同期バリア機構内の状態を監視することができ、追加のプロセッサ要素の全てがその対応するユーザレベルの同期及び終了命令を実行したことを状態が示す場合、プログラムカウンタ７８３にインクリメントを再開させることができる。次にフェッチユニットはさらなる命令をフェッチすることができ、この命令は、スレッド、又はコードの他の部分が第１のプロセッサ要素により継続して実行されるので、復号され実行されてよい。
【００４３】
図８は、ユーザレベルの同期及び終了命令８１８の実施形態を実行するプロセッサ８００に関する、例示的な実施形態のブロック図である。プロセッサは、ユーザレベルの同期及び終了命令を実行する追加のプロセッサ要素８１４を含む。プロセッサは、（例えば、限定されるものではないが、ユーザレベルの同期及び終了命令（例えば、命令７０６）を先に実行した可能性がある）第１のプロセッサ要素８０２も含む。追加のプロセッサ要素は、追加のプロセッサ要素のプログラムカウンタ８８３からの、フェッチする次の命令のインジケーションに基づいて、（例えば、メモリから）ユーザレベルの同期及び終了命令をフェッチすることができる命令フェッチユニット８８１を有する。ユーザレベルの同期及び終了命令は、マクロ命令、アセンブリ言語命令、機械語命令、あるいは追加のプロセッサ要素の命令セットの他の命令又は制御信号を表すことができる。
【００４４】
フェッチユニットは、ユーザレベルの同期及び終了命令を復号ユニット８０８に提供することができる。復号ユニットは、ユーザレベルの同期及び終了命令８１８を復号することができる。復号ユニットは、１つ又は複数の比較的低水準の命令又は制御信号（例えば、１つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、復号された命令又は制御信号など）を出力することができ、それらが、比較的高水準のユーザレベルの同期及び終了命令を反映する、表す、及び／又は比較的高水準のユーザレベルの分岐命令から得られる。復号ユニットは、本明細書で説明される他のデコーダと同じ手法を用いて実装されてよい。
【００４５】
ユーザレベルの同期スレッド終了ユニット、つまりモジュール８９０が、復号ユニット８０８の出力に結合される。ユーザレベルの同期スレッド終了モジュールは、ユーザレベルの同期及び終了命令を実行又は実装する１つ又は複数の実行ユニットを表すことができる。ユーザレベルの同期スレッド終了モジュールは、ユーザレベルの同期及び終了命令を表す、及び／又はユーザレベルの同期及び終了命令から得られる、１つ又は複数の復号された命令、あるいはそうでなければ変換された命令又は制御信号を受信することができる。ユーザレベルの同期スレッド終了モジュール及び／又はプロセッサは、（例えば、ユーザレベルの同期及び終了命令から復号された１つ又は複数の命令又は制御信号に応答して）ユーザレベルの同期及び終了命令を実行するよう動作する具体的なロジック又は特定のロジック（例えば、トランジスタ、集積回路、あるいはファームウェア（例えば、不揮発性メモリに格納された命令）及び／又はソフトウェアと組み合わされる可能性のある他のハードウェア）を含むことができる。ユーザレベルの同期スレッド終了モジュールは、ユーザレベルの同期及び終了命令に応答して及び／又はその結果として（例えば、命令から復号された１つ又は複数の命令又は制御信号に応答して）、さらなる命令の実行を中止し、また他の全ての追加のプロセッサ要素（例えば、同じユーザレベルの分岐命令によって開始されたもの）が、その対応するユーザレベルの同期及び終了命令を実行するまで、及び／又は同期バリアに到達するまで、同期バリアにおいて待機する追加のプロセッサ要素を構成する、それを生じさせる、又はそうでなければそれをもたらすよう動作することができる。いくつかの実施形態では、これは、さらなる命令がフェッチされることも処理されることもないように、プログラムカウンタをフリーズ又は停止させるために、信号８９１をプログラムカウンタ８８３に送信する、又はそうでなければ提供する同期スレッド終了モジュールを含むことができる。いくつかの実施形態では、これは、追加のプロセッサ要素がそのユーザレベルの同期及び結合命令を実行していること、及び／又は同期バリアに到達したことを示すために、信号８９２を任意の同期バリア機構８８８に送信する、又はそうでなければ提供する同期スレッド終了モジュールを含むことができる。前述したように、バリア機構を実装する異なる方法が可能であり、その方法には、例えば、追加のプロセッサ要素の異なるいくつかに異なるビットを有するレジスタ、インクリメント又はデクリメントするカウンタなどがある。
【００４６】
いくつかの実施形態では、追加のプロセッサ要素が、所与のユーザレベルの分岐命令により起動された、同期バリアに到達する全ての追加のプロセッサ要素のうちの最後である場合、ユーザレベルの同期スレッド終了モジュールは、追加のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行した後に、第１のプロセッサ要素上のスレッドに制御を戻すよう動作することができる。例えば、いくつかの実施形態では、バリアに到達する最後の追加のプロセッサ要素の同期スレッド終了モジュールは、追加のプロセッサ要素の全てがバリアに到達したこと、結合が完了し、第１のプロセッサ要素上のスレッド実行が再開することを示すために、信号８９３を第１のプロセッサ要素に任意に送信する、又はそうでなければ提供することができる。他の実施形態では、第１のプロセッサ要素は任意に、同期バリア内の状態を監視することができる、又は起動された追加のプロセッサ要素の全てが同期バリアに到達したときに、同期バリアから信号を受信することができる。
【００４７】
追加のプロセッサ要素は、アーキテクチャ状態８８４を有することができる。アーキテクチャ状態は、前述したアーキテクチャ状態のタイプ、例えば、汎用レジスタ、パックドデータレジスタ、浮動小数点レジスタ、ステータスレジスタ、命令ポインタなどを含むことができる。示されるように、いくつかの実施形態では、アーキテクチャ状態は、１つ又は複数のいわゆるスティッキーフラグ（例えば、スティッキーエラーフラグ）８９４を含むことができる。例として、これらのスティッキーフラグは、スティッキー浮動小数点状態フラグ、又は、例えば、ゼロ除算フラグ、無効演算フラグ、デノーマルフラグなどのエラーフラグを含むことができる。１つの具体例として、スティッキーフラグは、ｘ８６プロセッサのＭＸＣＳＲレジスタ内にスティッキー浮動小数点エラーフラグを含むことができる。これらのフラグは、セットされると、可能性のあるエラー状態が十分に調査され、適切であれば解決されるまで、一般にクリアされることはないという、比較的スティッキーな意味である。スティッキーフラグは、キャリーフラグ、オーバーフローフラグ、ゼロフラグ、及び他の算術フラグのような非スティッキーフラグと対比される。
【００４８】
いくつかの実施形態では、ユーザレベルの同期スレッド終了モジュールは、ユーザレベルの同期及び終了命令に応答して、エラー状態情報、及び／又は追加のプロセッサ要素が直面した１つ又は複数のエラー状態のインジケーションを第１のプロセッサ要素に伝達するよう動作することができる。いくつかの実施形態では、エラー状態情報は、スティッキーフラグ８９４のうちの１つ又は複数に関連付けられてよく、及び／又はそれらのフラグを含むか又は示してもよい。そのようなスティッキーフラグ又はエラー状態情報を第１のプロセッサ要素に伝達すること、又は示すことは、第１のプロセッサ要素がスティッキーフラグ又は他のエラー状態情報を解析し、必要に応じて適切な対応を取ることを可能にするのに役立つことができる。このエラー状態情報は、異なる実施形態では異なる方法で伝達されてよく、また示されてもよい。いくつかの実施形態では、追加のプロセッサ要素のそれぞれは、そのような情報の別個のセットを第１のプロセッサ要素に伝達することができる。他の実施形態では、そのような情報をマージしたセット又は組み合わせたセットが、第１のプロセッサ要素に伝達されてよい。１つの例として、追加のプロセッサ要素のそれぞれがその同期及び終了命令を実行するとき、追加のプロセッサ要素のそれぞれは、このエラー状態情報を第１のプロセッサ要素に直接伝達できる。典型的には、第１のプロセッサ要素は、その対応するアーキテクチャレジスタにエラー状態情報を取り込み、次に当該情報を適宜処理することができる。
【００４９】
別の例として、追加のプロセッサ要素のそれぞれがその同期及び終了命令を実行すると、追加のプロセッサ要素のそれぞれは、追加のプロセッサ要素及び第１のプロセッサ要素にアクセス可能な記憶位置８８５に、このエラー状態情報を信号８９７で知らせる、又はそうでなければ伝達することができる。異なるタイプの記憶位置が異なる実施形態に好適である。好適な記憶位置の例には、限定されないが、追加のプロセッサ要素の１つ又は複数のレジスタ、第１のプロセッサ要素の１つ又は複数のレジスタ、第１のプロセッサ要素と追加のプロセッサ要素とによって共有されるメモリの１つ又は複数のメモリ位置など、及びこれらの組み合わせが含まれる。いくつかの実施形態では、記憶位置は、第１のプロセッサ要素と追加のプロセッサ要素のそれぞれとによって共有され、並列処理制御データ構造体を実装するのに用いられる、ユーザがアドレス可能なメモリ空間の１つ又は複数のメモリ位置を表すことができる。いくつかの実施形態では、この並列処理制御データ構造体は、オペレーティングシステムにより用いられるプロシージャコールスタックから分かれていてよい。いくつかの実施形態では、この並列処理制御データ構造体は、第１のプロセッサ要素、及び追加のプロセッサ要素それぞれの両方にアクセス可能であってよく、第１のプロセッサ要素と追加のプロセッサ要素のそれぞれとの間で、特定の実装に必要な様々な異なるタイプの制御及びデータを受け渡すのに用いられてよい。あるいは、様々な他のタイプの記憶位置が、代わりに任意に用いられてもよい。
【００５０】
このエラー状態情報の別個のセットが追加のプロセッサ要素それぞれの記憶位置８８５に格納されてよく、あるいは、このエラー状態情報を組み合わせた又はマージした単一のセットが記憶位置に保持され格納されてもよい。例えば、エラー状態情報をマージした又は組み合わせたセットは、所与のスティッキーエラー状態フラグが追加のプロセッサ要素のいずれかにセットされた場合、所与のスティッキーエラー状態フラグをセットすることができる。換言すれば、累積エラー状態情報の単一のセットが、追加のプロセッサ要素のいずれかの任意のエラー状態を表しながら保持されてよく、この累積エラー状態情報の単一のセットは、第１のプロセッサ要素に伝達されてよい。これらは、ほんのいくつかの説明のための実例である。エラー状態情報を伝達する他の方法も考えられる。いくつかの実施形態では、ユーザレベルの同期及び結合命令に応答する追加のプロセッサ要素は、記憶位置８８５、例えば、共有のユーザメモリ空間などに実行の結果８９６を保存又は格納することもできる。
［例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ］
【００５１】
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサに実装されてよい。例えば、そのようなコアの実装は、１）汎用計算を対象とした汎用インオーダコア、２）汎用計算を対象とした高性能汎用アウトオブオーダコア、３）グラフィックス及び／又は科学（スループット）計算を主に対象とした専用コアを含んでよい。異なるプロセッサの実装には、１）汎用計算を対象とした１つ又は複数の汎用インオーダコア、及び／又は、汎用計算を対象とした１つ又は複数の汎用アウトオブオーダコアを含むＣＰＵ、並びに２）グラフィックス及び／又は科学（スループット）を主に対象とした１つ又は複数の専用コアを含むコプロセッサが含まれてよい。そのような異なるプロセッサによって異なるコンピュータシステムアーキテクチャがもたらされ、そこには次のものが含まれる。つまり、１）ＣＰＵとは別個のチップに搭載されたコプロセッサ、２）ＣＰＵと同じパッケージ内の別個のダイに搭載されたコプロセッサ、３）ＣＰＵと同じダイに搭載されたコプロセッサ（この場合、そのようなコプロセッサは統合グラフィックスロジック及び／又は科学（スループット）ロジックなどの専用ロジック、又は専用コアと呼ばれることがある）、及び４）説明されたＣＰＵ（アプリケーションコア又はアプリケーションプロセッサと呼ばれることがある）、上述のコプロセッサ、及び追加機能を同じダイ上に含み得るシステムオンチップである。例示的なコアアーキテクチャが次に説明され、その後に、例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。
［例示的なコアアーキテクチャ］
［インオーダコア及びアウトオブオーダコアのブロック図］
【００５２】
図９Ａは、本発明の実施形態に従い、例示的なインオーダパイプライン及び例示的なレジスタリネーミング・アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図９Ｂは、本発明の実施形態に従い、プロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング・アウトオブオーダ発行／実行アーキテクチャコアとの両方を示すブロック図である。図９Ａ〜図９Ｂの実線枠は、インオーダパイプライン及びインオーダコアを示し、任意追加の破線枠は、レジスタリネーミング・アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様はアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【００５３】
図９Ａにおいて、プロセッサパイプライン９００は、フェッチステージ９０２、レングス復号ステージ９０４、復号ステージ９０６、割り当てステージ９０８、リネーミングステージ９１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ９１２、レジスタ読み出し／メモリ読み出しステージ９１４、実行ステージ９１６、ライトバック／メモリ書き込みステージ９１８、例外処理ステージ９２２、及びコミットステージ９２４を含む。
【００５４】
図９Ｂは、実行エンジンユニット９５０に結合されたフロントエンドユニット９３０を含むプロセッサコア９９０を示し、両方ともメモリユニット９７０に結合されている。コア９９０は、縮小命令セット計算（ＲＩＳＣ）コア、複合命令セット計算（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、あるいはハイブリッド又は代替的なコアタイプであってよい。さらに別の選択肢として、コア９９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどの専用コアであってもよい。
【００５５】
フロントエンドユニット９３０は、命令キャッシュユニット９３４に結合された分岐予測ユニット９３２を含み、命令キャッシュユニット９３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）９３６に結合され、命令トランスレーションルックアサイドバッファ（ＴＬＢ）９３６は命令フェッチユニット９３８に結合され、命令フェッチユニット９３８は復号ユニット９４０に結合されている。復号ユニット９４０（又はデコーダ）は、複数の命令を復号し、１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成し得る。これらは、元の命令から復号され、又は別の方法で元の命令を反映し、又は元の命令から導出される。復号ユニット９４０は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）などが含まれる。１つの実施形態では、コア９９０は、特定のマクロ命令用のマイクロコードを（例えば、復号ユニット９４０の中に、そうでなければフロントエンドユニット９３０内に）格納するマイクロコードＲＯＭ又は他の媒体を含む。復号ユニット９４０は、実行エンジンユニット９５０内のリネーム／アロケータユニット９５２に結合されている。
【００５６】
実行エンジンユニット９５０は、リタイアメントユニット９５４と、１つ又は複数のスケジューラユニット９５６のセットとに結合されたリネーム／アロケータユニット９５２を含む。スケジューラユニット９５６は、リザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット９５６は、物理レジスタファイルユニット９５８に結合されている。物理レジスタファイルユニット９５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、そのそれぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）など、１つ又は複数の異なるデータタイプを格納する。１つの実施形態では、物理レジスタファイルユニット９５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット９５８は、リタイアメントユニット９５４が重ねられており、レジスタリネーミング及びアウトオブオーダ実行が（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、並びにレジスタマップ及びレジスタのプールを用いるなどして）実装され得る様々な方法を示す。リタイアメントユニット９５４及び物理レジスタファイルユニット９５８は、実行クラスタ９６０に結合されている。実行クラスタ９６０は、１つ又は複数の実行ユニット９６２のセットと、１つ又は複数のメモリアクセスユニット９６４のセットとを含む。実行ユニット９６２は、様々な演算（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に実行してよい。いくつかの実施形態は、特定の機能又は機能のセットに専用の複数の実行ユニットを含んでよく、他の実施形態は、１つのみの実行ユニット、又は全ての機能を全てが実行する複数の実行ユニットを含んでもよい。特定の実施形態は、特定のタイプのデータ／オペレーションに対して別個のパイプラインを形成するので、スケジューラユニット９５６、物理レジスタファイルユニット９５８、及び実行クラスタ９６０は、可能性として複数であると示されている（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプラインはそれぞれ、独自のスケジューラユニット、物理レジスタファイルユニット、及び／又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット９６４を有する特定の実施形態が実装される）。別個のパイプラインが用いられる場合、これらのパイプラインのうち１つ又は複数がアウトオブオーダ発行／実行であってよく、残りがインオーダであってもよいことも理解されるべきである。
【００５７】
メモリアクセスユニット９６４のセットがメモリユニット９７０に結合され、メモリユニット９７０は、レベル２（Ｌ２）キャッシュユニット９７６に結合されたデータキャッシュユニット９７４に結合されたデータＴＬＢユニット９７２を含む。１つの例示的な実施形態において、メモリアクセスユニット９６４は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらのそれぞれはメモリユニット９７０内のデータＴＬＢユニット９７２に結合されている。命令キャッシュユニット９３４は、メモリユニット９７０内のレベル２（Ｌ２）キャッシュユニット９７６にさらに結合される。Ｌ２キャッシュユニット９７６は、１つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【００５８】
例として、例示的なレジスタリネーミング・アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン９００を以下のように実装してよい。すなわち、１）命令フェッチ９３８がフェッチステージ９０２及びレングス復号ステージ９０４を実行する。２）復号ユニット９４０が復号ステージ９０６を実行する。３）リネーム／アロケータユニット９５２が割り当てステージ９０８及びリネーミングステージ９１０を実行する。４）スケジューラユニット９５６がスケジュールステージ９１２を実行する。５）物理レジスタファイルユニット９５８及びメモリユニット９７０がレジスタ読み出し／メモリ読み出しステージ９１４を実行する。実行クラスタ９６０が実行ステージ９１６を実行する。６）メモリユニット９７０及び物理レジスタファイルユニット９５８がライトバック／メモリ書き込みステージ９１８を実行する。７）様々なユニットが例外処理ステージ９２２に関与し得る。８）リタイアメントユニット９５４及び物理レジスタファイルユニット９５８がコミットステージ９２４を実行する。
【００５９】
コア９９０は、本明細書で説明される命令を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加された、いくつかの拡張を有する）、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州、サニーベール）のＭＩＰＳ命令セット、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（カリフォルニア州、サニーベール）のＡＲＭ命令セット（ＮＥＯＮなどの任意の追加拡張を有する））をサポートしてよい。１つの実施形態では、コア９９０はパックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、これにより、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
【００６０】
コアはマルチスレッディング（オペレーション又はスレッドからなる２つ又はそれより多くの並列セットを実行）をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング（物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して、単一の物理コアが論理コアを提供する）、又はこれらの組み合わせ（例えば、タイムスライスフェッチ及び復号、並びにそれ以降のＩｎｔｅｌ（登録商標）ハイパースレッディング・テクノロジーなどの同時マルチスレッディング）を含む様々な方法でサポートしてよいことが理解されるべきである。
【００６１】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことが理解されるべきである。示されたプロセッサの実施形態はまた、別々の命令キャッシュユニット９３４とデータキャッシュユニット９７４、並びに共有Ｌ２キャッシュユニット９７６を含むが、代替的な実施形態は、命令及びデータの両方に対して、例えばレベル１（Ｌ１）内部キャッシュ又は複数のレベルの内部キャッシュなど、単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュ及び外部キャッシュの組み合わせを含んでよく、外部キャッシュはコア及び／又はプロセッサの外部に存在する。あるいは、全てのキャッシュが、コア及び／又はプロセッサの外部にあってもよい。
［具体的な例示的インオーダコアアーキテクチャ］
【００６２】
図１０Ａ〜図１０Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプ及び／又は異なるタイプの他のコアを含む）の１つになるであろう。論理ブロックは、用途に応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を通じて、何らかの固定機能ロジック、メモリＩ／Ｏインタフェース、及び他の必要なＩ／Ｏロジックと通信する。
【００６３】
図１０Ａは、本発明の実施形態による、オンダイ相互接続ネットワーク１００２への接続に加え、レベル２（Ｌ２）キャッシュのローカルサブセット１００４を有する単一のプロセッサコアのブロック図である。１つの実施形態では、命令デコーダ１０００はパックドデータ命令セット拡張を用いてｘ８６命令セットをサポートする。Ｌ１キャッシュ１００６によって、キャッシュメモリからスカラユニット及びベクトルユニットへの低レイテンシアクセスが可能となる。１つの実施形態では、（設計を簡略化するために）スカラユニット１００８及びベクトルユニット１０１０が、別々のレジスタセット（それぞれ、複数のスカラレジスタ１０１２及び複数のベクトルレジスタ１０１４）を用い、これらの間で転送されるデータはメモリに書き込まれ、その後、レベル１（Ｌ１）キャッシュ１００６から読み戻されるが、本発明の代替的な実施形態は、異なる手法を用いてよい（例えば、単一のレジスタセットを用いる、又は書き込み及び読み戻しを行うことなく、２つのレジスタファイル間でのデータ転送を可能にする通信経路を含む）。
【００６４】
Ｌ２キャッシュのローカルサブセット１００４は、別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部であり、プロセッサコアごとに１つである。各プロセッサコアは、独自のＬ２キャッシュのローカルサブセット１００４に直接アクセスする経路を有する。プロセッサコアにより読み出されたデータは、Ｌ２キャッシュのサブセット１００４に格納され、他のプロセッサコアが独自のローカルＬ２キャッシュのサブセットにアクセスするのと並行して、高速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、独自のＬ２キャッシュのサブセット１００４に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向性であり、プロセッサコア、Ｌ２キャッシュ、及び他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータ経路は、一方向当たり１０１２ビット幅である。
【００６５】
図１０Ｂは、本発明の実施形態による図１０Ａのプロセッサコアの一部に関する拡大図である。図１０Ｂは、Ｌ１キャッシュ１００４の一部であるＬ１データキャッシュ１００６Ａと、ベクトルユニット１０１０及びベクトルレジスタ１０１４に関するより詳細とを含む。具体的には、ベクトルユニット１０１０は１６幅のベクトル処理ユニット（ＶＰＵ）（１６幅のＡＬＵ１０２８を参照）であり、整数命令、単精度浮動小数点命令、及び倍精度浮動小数点命令のうち１つ又は複数を実行する。ＶＰＵは、スウィズルユニット１０２０を用いたレジスタ入力のスウィズル処理、数値変換ユニット１０２２Ａ〜１０２２Ｂを用いた数値変換、並びに複製ユニット１０２４を用いたメモリ入力の複製をサポートする。書き込みマスクレジスタ１０２６は、結果として生じるベクトル書き込みをプレディケートする（ｐｒｅｄｉｃａｔｉｎｇ）ことを可能にする。
［統合メモリコントローラ及びグラフィックスを有するプロセッサ］
【００６６】
図１１は、本発明の実施形態に従って、１つより多くのコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサ１１００のブロック図である。図１１の実線枠は、単一のコア１１０２Ａ、システムエージェント１１１０、１つ又は複数のバスコントローラユニット１１１６のセットを有するプロセッサ１１００を示し、任意追加の破線枠は、複数のコア１１０２Ａ〜１１０２Ｎ、システムエージェントユニット１１１０内にある１つ又は複数の統合メモリコントローラユニット１１１４のセット、及び専用ロジック１１０８を有する代替のプロセッサ１１００を示す。
【００６７】
したがって、プロセッサ１１００の異なる実装は、１）専用ロジック１１０８が統合グラフィックス及び／又は科学（スループット）ロジック（１つ又は複数のコアを含んでよい）であり、コア１１０２Ａ〜１１０２Ｎが１つ又は複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、その２つの組み合わせ）であるＣＰＵ、２）コア１１０２Ａ〜１１０２Ｎが、グラフィックス及び／又は科学（スループット）を主に対象とした多数の専用コアであるコプロセッサ、並びに３）コア１１０２Ａ〜１１０２Ｎが多数の汎用インオーダコアであるコプロセッサを含んでよい。したがって、プロセッサ１１００は汎用プロセッサ、コプロセッサであってよく、あるいは専用プロセッサ、例えばネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットの多数統合コア（ＭＩＣ）コプロセッサ（３０個又はそれより多くのコアを含む）、組み込みプロセッサなどであってもよい。プロセッサは、１つ又は複数のチップ上に実装されてよい。プロセッサ１１００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳなどの多数のプロセス技術のいずれかを用いる１つ又は複数の基板の一部であってよく、及び／又は当該基板上に実装されてもよい。
【００６８】
メモリ階層は、コア内にある１つ又は複数のレベルのキャッシュと、共有キャッシュユニット１１０６のセットあるいは１つ又は複数の共有キャッシュユニット１１０６と、統合メモリコントローラユニット１１１４のセットに結合された外部メモリ（不図示）とを含む。共有キャッシュユニット１１０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他のレベルのキャッシュなど、１つ又は複数の中間レベルのキャッシュ、又は他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、及び／又はこれらの組み合わせを含んでよい。１つの実施形態では、リングベースの相互接続ユニット１１１２が、統合グラフィックスロジック１１０８、共有キャッシュユニット１１０６のセット、及びシステムエージェントユニット１１１０／統合メモリコントローラユニット１１１４を相互接続するが、代替的な実施形態は、このようなユニットを相互接続するのに任意の数の周知手法を用いてよい。１つの実施形態では、１つ又は複数のキャッシュユニット１１０６と、コア１１０２Ａ〜１１０２Ｎとの間でコヒーレンシが維持される。
【００６９】
いくつかの実施形態では、コア１１０２Ａ〜１１０２Ｎのうち１つ又は複数がマルチスレッディング可能である。システムエージェント１１１０は、コア１１０２Ａ〜１１０２Ｎを調整し動作させるこうしたコンポーネントを含む。システムエージェントユニット１１１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでよい。ＰＣＵは、コア１１０２Ａ〜１１０２Ｎ及び統合グラフィックスロジック１１０８の電力状態を管理するのに必要なロジック及びコンポーネントであってよく、又は当該ロジック及び当該コンポーネントを含んでもよい。ディスプレイユニットは、外部接続された１つ又は複数のディスプレイを駆動するためのものである。
【００７０】
コア１１０２Ａ〜１１０２Ｎは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア１１０２Ａ〜１１０２Ｎのうち２つ又はそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセット又は別の命令セットだけを実行することが可能であってもよい。
［例示的なコンピュータアーキテクチャ］
【００７１】
図１２〜図１５は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ型ＰＣ、デスクトップ型ＰＣ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルド型デバイス、及び様々な他の電子デバイス向けの当技術分野において知られる他のシステム設計及び構成も適している。概して、本明細書に開示されるプロセッサ及び／又は他の実行ロジックを組み込むことが可能である多様なシステム又は電子デバイスが一般に適している。
【００７２】
ここで図１２を参照すると、本発明の１つの実施形態によるシステム１２００のブロック図が示されている。システム１２００は、１つ又は複数のプロセッサ１２１０、１２１５を含んでよく、これらはコントローラハブ１２２０に結合されている。１つの実施形態では、コントローラハブ１２２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）１２９０と、入力／出力ハブ（ＩＯＨ）１２５０（これは別個のチップ上にあってよい）とを含む。ＧＭＣＨ１２９０は、メモリ及びグラフィックスコントローラを含み、これらにメモリ１２４０及びコプロセッサ１２４５が結合されている。ＩＯＨ１２５０は入力／出力（Ｉ／Ｏ）デバイス１２６０をＧＭＣＨ１２９０に結合する。あるいは、メモリ及びグラフィックスコントローラの一方又は両方が、（本明細書で説明されるように）プロセッサ内に統合され、メモリ１２４０及びコプロセッサ１２４５は、プロセッサ１２１０と、ＩＯＨ１２５０と共に単一チップに入ったコントローラハブ１２２０とに直接結合される。
【００７３】
任意的な性質の追加のプロセッサ１２１５は、図１２に破線で示されている。各プロセッサ１２１０、１２１５は、本明細書で説明される処理コアのうち１つ又は複数を含んでよく、何らかのバージョンのプロセッサ１１００であってよい。
【００７４】
メモリ１２４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、又はこの２つの組み合わせであってよい。少なくとも１つの実施形態では、コントローラハブ１２２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ）などのポイントツーポイントインタフェース、又は同種の接続１２９５を介してプロセッサ１２１０、１２１５と通信する。
【００７５】
１つの実施形態では、コプロセッサ１２４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどの専用プロセッサである。１つの実施形態では、コントローラハブ１２２０は統合グラフィックスアクセラレータを含んでよい。
【００７６】
物理リソース１２１０と１２１５との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性などを含む広範な価値基準に関して、様々な差異が存在し得る。
【００７７】
１つの実施形態では、プロセッサ１２１０は、一般的タイプのデータ処理オペレーションを制御する命令を実行する。この命令内にコプロセッサ命令が組み込まれてもよい。プロセッサ１２１０は、これらのコプロセッサ命令を、付属のコプロセッサ１２４５が実行すべきタイプの命令であると認識する。したがって、プロセッサ１２１０は、これらのコプロセッサ命令（又はコプロセッサ命令を表す制御信号）をコプロセッサバス又は他の相互接続を使ってコプロセッサ１２４５に発行する。コプロセッサ１２４５は、受信したコプロセッサ命令を受け付けて実行する。
【００７８】
ここで図１３を参照すると、本発明の実施形態による、より詳細な第１の例示的なシステム１３００のブロック図が示されている。図１３に示されるように、マルチプロセッサシステム１３００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１３５０を介して結合される第１のプロセッサ１３７０と、第２のプロセッサ１３８０とを含む。プロセッサ１３７０及び１３８０のそれぞれは、何らかのバージョンのプロセッサ１１００であってよい。本発明の１つの実施形態では、プロセッサ１３７０及び１３８０はそれぞれ、プロセッサ１２１０及び１２１５であり、コプロセッサ１３３８はコプロセッサ１２４５である。別の実施形態では、プロセッサ１３７０及び１３８０はそれぞれ、プロセッサ１２１０及びコプロセッサ１２４５である。
【００７９】
プロセッサ１３７０及び１３８０は、統合メモリコントローラ（ＩＭＣ）ユニット１３７２及び１３８２をそれぞれ含んで示されている。プロセッサ１３７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１３７６及び１３７８を含み、同様に第２のプロセッサ１３８０はＰ−Ｐインタフェース１３８６及び１３８８を含む。プロセッサ１３７０、１３８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース１３５０を介し、Ｐ−Ｐインタフェース回路１３７８、１３８８を用いて情報を交換してよい。図１３に示されるように、ＩＭＣ１３７２及び１３８２は、プロセッサをそれぞれのメモリ、すなわちメモリ１３３２及びメモリ１３３４に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【００８０】
プロセッサ１３７０、１３８０はそれぞれ、個々のＰ−Ｐインタフェース１３５２、１３５４を介し、ポイントツーポイントインタフェース回路１３７６、１３９４、１３８６、１３９８を用いてチップセット１３９０と情報を交換してよい。チップセット１３９０は、高性能インタフェース１３３９を介してコプロセッサ１３３８と任意に情報を交換してよい。１つの実施形態では、コプロセッサ１３３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどの専用プロセッサである。
【００８１】
共有キャッシュ（不図示）がどちらかのプロセッサに含まれても、又は両方のプロセッサの外部に含まれてもよく、さらにＰ−Ｐ相互接続を介してこれらのプロセッサに接続されてもよい。これにより、プロセッサが低電力モードに入っている場合に、どちらかのプロセッサ又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【００８２】
チップセット１３９０は、インタフェース１３９６を介して第１のバス１３１６に結合されてよい。１つの実施形態では、第１のバス１３１６は、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バス、あるいはＰＣＩエクスプレスバス又は別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されてはいない。
【００８３】
図１３に示されるように、第１のバス１３１６を第２のバス１３２０に結合するバスブリッジ１３１８と共に、様々なＩ／Ｏデバイス１３１４が第１のバス１３１６に結合されてよい。１つの実施形態では、１つ又は複数の追加のプロセッサ１３１５が第１のバス１３１６に結合される。追加のプロセッサとは、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックスアクセラレータ、又はデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、又はその他のプロセッサなどである。１つの実施形態では、第２のバス１３２０はローピンカウント（ＬＰＣ）バスであってよい。様々なデバイスが第２のバス１３２０に結合されてよく、１つの実施形態では、そのようなデバイスには例えば、キーボード及び／又はマウス１３２２、通信デバイス１３２７、及びストレージユニット１３２８が含まれ、ストレージユニットには、命令／コード及びデータ１３３０を含み得るディスクドライブ又は他の大容量ストレージデバイスなどがある。さらに、オーディオＩ／Ｏ１３２４が第２のバス１３２０に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図１３のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装してよい。
【００８４】
ここで図１４を参照すると、本発明の実施形態による、より詳細な第２の例示的なシステム１４００のブロック図が示されている。図１３及び図１４内の同様の要素は同様の参照番号を有しており、図１３の特定の態様が、図１４の他の態様をあいまいにしないように、図１４から省略されている。
【００８５】
図１４は、プロセッサ１３７０、１３８０が、統合メモリを含み、またＩ／Ｏ制御ロジック（「ＣＬ」）１３７２及び１３８２をそれぞれ含んでよいことを示す。したがって、ＣＬ１３７２、１３８２は統合メモリコントローラユニットを含み、且つＩ／Ｏ制御ロジックを含む。図１４は、メモリ１３３２、１３３４だけがＣＬ１３７２、１３８２に結合されているのでなく、Ｉ／Ｏデバイス１４１４もまた、制御ロジック１３７２、１３８２に結合されていることを示している。レガシＩ／Ｏデバイス１４１５がチップセット１３９０に結合されている。
【００８６】
ここで図１５を参照すると、本発明の実施形態によるＳｏＣ１５００のブロック図が示されている。図１１の同種の要素は、同様の参照番号を有している。また、破線枠は、より高度なＳｏＣにおける任意の機能である。図１５において、相互接続ユニット１５０２が、１つ又は複数のコア１１０２Ａ〜１１０２Ｎ及び共有キャッシュユニット１１０６のセットを含むアプリケーションプロセッサ１５１０と、システムエージェントユニット１１１０と、バスコントローラユニット１１１６と、統合メモリコントローラユニット１１１４と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及び映像プロセッサを含み得るコプロセッサ１５２０のセットあるいは１つ又は複数のコプロセッサ１５２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１５３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット１５３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット１５４０とに結合されている。１つの実施形態では、コプロセッサ１５２０は専用プロセッサを含み、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサなどがある。
【００８７】
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の実施形態は、少なくとも１つのプロセッサと、ストレージシステム（揮発性メモリ及び不揮発性メモリ、及び／又は記憶素子を含む）と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを有するプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
【００８８】
図１３に示されるコード１３３０などのプログラムコードは、本明細書で説明される機能を実行し、出力情報を生成する命令を入力するのに適用されてよい。出力情報は、１つ又は複数の出力デバイスに既知の方法で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【００８９】
プログラムコードは、処理システムと通信すべく、高水準の手続き型又はオブジェクト指向型プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械語で実装されてよい。実際には、本明細書で説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されない。どのような場合でも、言語はコンパイラ型言語又はインタプリタ型言語であってよい。
【００９０】
少なくとも１つの実施形態の１つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された典型的な命令により実装されてよく、当該命令は、機械により読み出された場合、本明細書で説明される手法を実行すべく機械にロジックを作成させる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体（「テープ」）に格納され、ロジック又はプロセッサを実際に作成する製造装置にロードすべく、様々な顧客又は製造施設に供給されてよい。
【００９１】
そのような機械可読記憶媒体は、限定されることなく、機械又は装置により製造される又は形成される非一時的な有形の構成の物品を含んでよく、そのような物品には、ハードディスクや、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク・リードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク・リライタブル（ＣＤ−ＲＷ）、及び光磁気ディスクを含むその他のタイプのディスク、半導体デバイスとして、例えば、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）やスタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）など、磁気カード又は光カード、又は電子命令を格納するのに適したその他のタイプの媒体などの記憶媒体を含む。
【００９２】
したがって、本発明の実施形態はまた、命令を含んだ、又はハードウェア記述言語（ＨＤＬ）などの設計データを含んだ非一時的な有形の機械可読媒体を含む。ＨＤＬは、本明細書で説明される構造、回路、装置、プロセッサ、及び／又はシステム機能を定義する。そのような実施形態はまた、プログラム製品と呼ばれ得る。
［エミュレーション（バイナリ変換、コードモーフィングなどを含む）］
【００９３】
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するのに命令変換器が用いられてよい。例えば命令変換器は、ある命令を、コアによって処理される１つ又は複数の他の命令に翻訳（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）、モーフィング、エミュレーション、又は別の方法で変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサ上にあっても、プロセッサ外にあっても、又は一部がプロセッサ上にあり且つ一部がプロセッサ外にあってもよい。
【００９４】
図１６は、本発明の実施形態に従って、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。図示された実施形態では、命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてもよい。図１６は、高水準言語１６０２のプログラムがｘ８６コンパイラ１６０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１６１６によってネイティブに実行され得るｘ８６バイナリコード１６０６を生成し得ることを示す。少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１６１６は、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ結果を実現するために、（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの大部分、又は（２）少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサ上で動作することを目的としたオブジェクトコード形式のアプリケーション又は他のソフトウェアを、互換的に実行する、又は別の方法で処理することで、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。ｘ８６コンパイラ１６０４は、追加のリンケージ処理をしてもしなくても、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１６１６上で実行され得るｘ８６バイナリコード１６０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図１６は、高水準言語１６０２のプログラムが、別の命令セットコンパイラ１６０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載しないプロセッサ１６１４（例えば、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州、サニーベール）のＭＩＰＳ命令セットを実行するコア、及び／又は、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（カリフォルニア州、サニーベール）のＡＲＭ命令セットを実行するコアを搭載したプロセッサ）によりネイティブに実行され得る別の命令セットバイナリコード１６１０を生成し得ることを示す。命令変換器１６１２は、ｘ８６バイナリコード１６０６を、ｘ８６命令セットコアを搭載しないプロセッサ１６１４によりネイティブに実行され得るコードに変換するのに用いられる。この変換されたコードは、別の命令セットバイナリコード１６１０と同じになる可能性は低い。なぜなら、これが実現できる命令変換器を作るのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、別の命令セットの命令で構成される。したがって、命令変換器１６１２は、エミュレーション、シミュレーション、又はその他の処理を通じて、ｘ８６命令セットプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスがｘ８６バイナリコード１６０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【００９５】
図２〜図６のいずれかについて説明された構成要素、機能、及び詳細は、図１、図７、及び図８のいずれにも任意に適用されてよい。さらに、装置のいずれかについて説明された構成要素、機能、及び詳細は、方法のいずれにも任意に適用されてよく、これらの構成要素、機能、及び詳細は、実施形態において、そのような装置により実行されてよく、及び／又はそのような装置を用いて実行されてよい。本明細書で説明されたプロセッサのいずれも、本明細書で開示されたコンピュータシステム（例えば、図１２〜図１５）のいずれかに含まれてよい。いくつかの実施形態では、コンピュータシステムは、相互接続、相互接続に結合されたプロセッサ、及び相互接続に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含むことができる。あるいは、ＤＲＡＭの代わりに、リフレッシュされる必要がない他のタイプの揮発性メモリが用いられてよく、又はフラッシュメモリが用いられてよい。
【００９６】
本明細書及び特許請求の範囲において、「結合」及び／又は「接続」という用語が、それらの派生語と共に、用いられたことがある。これらの用語は、互いの同義語であるとは意図されていない。むしろ、実施形態において、「接続」は、２つ又はそれより多くの要素が、互いに直接に物理的接触及び／又は電気的接触していることを示すのに用いられてよい。「結合」は、２つ又はそれより多くの要素が、互いに直接に物理的接触及び／又は電気的接触をしていることを意味することができる。しかし、「結合」は、２つ又はそれより多くの要素が互いに直接に接触していないが、それでもまだ互いに協同している、又は相互作用していることも意味することができる。例えば、復号ユニットは、スレッドスケジューラモジュール及び／又は同期モジュールと、間にある１つ又は複数のユニット、モジュール、又は他の構成要素を介して結合されてよい。図において、矢印は、接続及び結合を示すのに用いられている。
【００９７】
明細書及び／又は特許請求の範囲において、「ロジック」、「ユニット」、「モジュール」、又は「コンポーネント」という用語が用いられたことがある。これらの用語のそれぞれは、ハードウェア、ファームウェア、ソフトウェア、又はこれらの様々な組み合わせを指すのに用いられてよい。例示的な実施形態において、これらの用語のそれぞれは、集積回路、特定用途向け集積回路、アナログ回路、デジタル回路、プログラム式論理デバイス、命令を含んだメモリデバイスなど、及びこれらの様々な組み合わせを指すことができる。いくつかの実施形態では、これらは、少なくともいくつかのハードウェア（例えば、トランジスタ、ゲート、他の回路コンポーネントなど）を含むことができる。
【００９８】
「及び／又は」という用語が用いられたことがある。本明細書で用いられる場合、「及び／又は」という用語は、一方又は他方、あるいは両方を意味する（例えば、Ａ及び／又はＢは、Ａ又はＢ、あるいはＡ及びＢの両方を意味する）。
【００９９】
上記の説明では、実施形態の完全な理解を提供するために、具体的な詳細が明記された。しかし、これらの具体的な詳細のいくつかを用いずに、他の実施形態が実施されてよい。本発明の範囲は、上述した具体例によって決定されるのではなく、以下の特許請求の範囲のみによって決定される。他の例では、よく知られた回路、構造、デバイス、及びオペレーションは、本明細書の理解をあいまいにしないために、ブロック図の形態で、及び／又は詳細を用いずに示されている。適切とみなされる場合、参照番号又は参照番号の末尾部分が、図の間で、対応する要素又は類似の要素を示すために繰り返されており、これらの要素は、別に明記される場合、又は別の方法ではっきりと明らかである場合を除いて、類似の特徴又は同じ特徴を任意に有することができる。
【０１００】
特定のオペレーションがハードウェア要素により実行されてよく、あるいは機械実行可能命令又は回路実行可能命令で具現化されてよく、これらは、オペレーションを実行する命令でプログラムされた機械、回路、又はハードウェア要素（例えば、プロセッサ、プロセッサの一部、回路など）を生じさせる、及び／又はもたらすのに用いられてよい。これらのオペレーションは、ハードウェアとソフトウェアとの組み合わせでも、任意に実行されてよい。プロセッサ、機械、回路、又はハードウェアは、特定の回路又は特殊な回路を含むことができ、あるいは他のロジック（例えば、ファームウェア及び／又はソフトウェアと組み合わされる可能性のあるハードウェア）が、命令を実行及び／又は処理し、命令に応答して結果を格納するよう動作する。
【０１０１】
いくつかの実施形態は、機械可読媒体を含む製造品（例えば、コンピュータプログラム製品）を含む。この媒体は、機械が可読な形態で情報を提供する、例えば格納するメカニズムを含むことができる。機械可読媒体は、機械により実行された場合、及び／又は機械により実行されたとき、本明細書に開示される１つ又は複数のオペレーション、方法、又は手法を実行する機械を、機械に実行させる及び／又はもたらすようにさせるよう動作する命令又は一連の命令を提供してよく、又は機械可読媒体上に格納させてよい。
【０１０２】
いくつかの実施形態では、機械可読媒体は、非一時的機械可読記憶媒体を含むことができる。例えば、非一時的機械可読記憶媒体には、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光データストレージデバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイスなどが含まれてよい。非一時的機械可読記憶媒体は、一時的に伝搬される信号から構成されない。いくつかの実施形態では、記憶媒体は、固形物を含む有形の媒体を含むことができる。
【０１０３】
好適な機械の例には、限定されないが、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路などが含まれる。好適な機械のさらに他の例には、プロセッサ、デジタル論理回路、又は集積回路を含んだ、コンピュータシステム又は他の電子デバイスが含まれる。そのようなコンピュータシステム又は電子デバイスの例には、限定されないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータ及びスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラが含まれる。
【０１０４】
本明細書全体にわたる、例えば「１つの実施形態」、「ある実施形態」、「１つ又は複数の実施形態」、「いくつかの実施形態」への言及は、特定の特徴が本発明の実施に含まれてよいが、必ずしも含まれる必要がないことを示している。同様に、本明細書では、本開示を簡素化する目的及び様々な発明的側面の理解を助ける目的で、様々な特徴が、単一の実施形態、図、又はそれらの説明に共にグループ化されることがある。しかし、開示される本方法は、本発明が各請求項に明確に記載されるよりも多くの特徴を必要とするという意図を反映していると解釈されるべきではない。むしろ、以下の特許請求の範囲が反映するように、発明的側面は、開示された単一の実施形態の全ての特徴より少なくなっている。したがって、詳細な説明に続く特許請求の範囲は、本明細書により、この詳細な説明に明確に組み込まれており、各請求項は、本発明の別個の実施形態として独立している。
［例示的な実施形態］
【０１０５】
以下の例は、さらなる実施形態に関する。これらの例の詳細は、１つ又は複数の実施形態のどこでも用いられてよい。
【０１０６】
例１は、複数のプロセッサ要素と、ソフトウェアスレッドのユーザレベルの分岐命令を実行する第１のプロセッサ要素とを含む、プロセッサ又は他の装置である。第１のプロセッサ要素は、ユーザレベルの分岐命令を復号するデコーダを含む。ユーザレベルの分岐命令は、少なくとも１つの命令アドレスを示す。第１のプロセッサ要素は、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成するユーザレベルのスレッド分岐モジュールも含む。
【０１０７】
例２は例１に記載のプロセッサを含み、ここで、デコーダは、単一の命令アドレスを任意に示すユーザレベルの分岐命令を復号し、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、任意の単一の命令アドレスを格納する。
【０１０８】
例３は例１に記載のプロセッサを含み、ここで、デコーダは、複数の異なる命令アドレスを任意に示すユーザレベルの分岐命令を復号し、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、複数の異なる命令アドレスのうちの別々の１つを任意に格納する。
【０１０９】
例４は、例１から３のいずれか１つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、第１のプロセッサ要素のアーキテクチャ状態のコピーを複数のプロセッサ要素のそれぞれに任意に提供する。
【０１１０】
例５は例４に記載のプロセッサを含み、ここで、アーキテクチャ状態のコピーを複数のプロセッサ要素のそれぞれに提供することは、複数のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のメモリ位置のそれぞれに、アーキテクチャ状態のコピーを格納することを任意に含む。
【０１１１】
例６は、例１から５のいずれか１つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のそれぞれを、管理上のシステムソフトウェアから任意に介入されることなく、命令を並列に実行するよう構成する。
【０１１２】
例７は、例１から６のいずれか１つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、第１のプロセッサ要素に任意に、ソフトウェアスレッドの命令の実行を中止させ、同期バリアにおいて任意に待機させる。
【０１１３】
例８は、例１から６のいずれか１つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは任意に、ユーザレベルの分岐命令が復号されたことに応答して、第１のプロセッサ要素に、ソフトウェアスレッドの命令の実行を中止させることはない。
【０１１４】
例９は、例１から８のいずれか１つに記載のプロセッサを含み、ここで、複数のプロセッサ要素のそれぞれは対応するユーザレベルの同期及び終了命令を実行し、複数のプロセッサ要素のそれぞれは、対応するユーザレベルの同期及び終了命令を復号するデコーダを含み、ユーザレベルの同期スレッド終了モジュールは、対応するユーザレベルの同期及び終了命令が復号されたことに応答して、ユーザレベルの同期スレッド終了モジュールが中に含まれる、対応するプロセッサ要素に、さらなる命令の実行を中止させ、複数のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行するまで待機させ、複数のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行した後に、第１のプロセッサ要素上で実行されるソフトウェアスレッドの第２の命令へ制御を移行させる。
【０１１５】
例１０は例９に記載のプロセッサを含み、ここで、それぞれのユーザレベルの同期スレッド終了モジュールは、対応するユーザレベルの同期及び終了命令が復号されたことに応答して、１つ又は複数のフラグに関連付けられた１つ又は複数のエラー状態のインジケーションを第１のプロセッサ要素に任意に伝達する。
【０１１６】
例１１は、例１から１０のいずれか１つに記載のプロセッサを含み、ここで、第１のプロセッサ要素は、複数のプロセッサ要素それぞれの命令セットにも含まれる命令を含む命令セットを任意に有する。
【０１１７】
例１２は、例１から１１のいずれか１つに記載のプロセッサを含み、ここで、第１のプロセッサ要素は、複数のプロセッサ要素のそれぞれよりも低い平均命令実行レイテンシを任意に有する。
【０１１８】
例１３は、例１から１１のいずれか１つに記載のプロセッサを含み、ここで、第１のプロセッサ要素は、複数のプロセッサ要素それぞれのマイクロアーキテクチャと比べて、命令実行がよりアウトオブオーダであるマイクロアーキテクチャを任意に有する。
【０１１９】
例１４は、例１から１１のいずれか１つに記載のプロセッサを含み、ここで、第１のプロセッサ要素は、元のプログラム順序のアーキテクチャ状態に対してアウトオブオーダで実行されたはずの命令の結果をコミットするコミットユニットを任意に有し、複数のプロセッサ要素のそれぞれはコミットユニットを有していない。
【０１２０】
例１５は、例１から１１のいずれか１つに記載のプロセッサを含み、ここで、ユーザレベルのスレッド分岐モジュールは、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のうちの任意で少なくとも２０個のそれぞれに、命令を並列に実行するよう構成し、複数のプロセッサ要素の少なくとも２０個は全て、単一のデコーダを共有する。
【０１２１】
例１６は、例１から１１のいずれか１つに記載のプロセッサを含み、分岐を予測する分岐予測ユニットと、分岐予測ユニットに結合され、ユーザレベルの分岐命令を含む命令をプリフェッチする命令プリフェッチユニットと、命令プリフェッチユニットに結合され、命令を格納するレベル１（Ｌ１）命令キャッシュと、データを格納するＬ１データキャッシュと、データ及び命令を格納するレベル２（Ｌ２）キャッシュと、復号ユニット、Ｌ１命令キャッシュ、及びＬ２キャッシュに結合され、ユーザレベルの分岐命令をＬ１命令キャッシュ及びＬ２キャッシュのうちの１つからフェッチし、ユーザレベルの分岐命令を復号ユニットに提供する命令フェッチユニットと、レジスタをリネームするレジスタリネームユニットと、実行のためにユーザレベルの分岐命令から復号された１つ又は複数のオペレーションをスケジューリングするスケジューラと、コミットユニットとをさらに含む。
【０１２２】
例１７は、第１のプロセッサ要素において、ソフトウェアスレッドのユーザレベルの分岐命令を受信する段階を含む、プロセッサにおける方法である。ユーザレベルの分岐命令は、少なくとも１つの命令アドレスを示す。本方法は、ユーザレベルの分岐命令に応答して、第１のプロセッサ要素を用いて、複数の追加のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成する段階も含む。複数の追加のプロセッサ要素のそれぞれは、ユーザレベルの分岐命令により示された少なくとも１つの命令アドレスのうちのある命令アドレスにおいて、命令を実行し始める。
【０１２３】
例１８は例１７に記載の方法を含み、ここで、受信する段階は、単一の命令アドレスを示すユーザレベルの分岐命令を受信する段階を含み、構成する段階は、複数の追加のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のプログラムカウンタのそれぞれに、単一の命令アドレスを格納する段階を含む。
【０１２４】
例１９は例１７に記載の方法を含み、ここで、受信する段階は、複数の命令アドレスを示すユーザレベルの分岐命令を受信する段階を含み、構成する段階は、複数の追加のプロセッサ要素のうちの別々の１つにそれぞれ対応する複数のプログラムカウンタのうちの別々の１つに、複数の命令アドレスのそれぞれを格納する段階を含む。
【０１２５】
例２０は、例１７から１９のいずれか１つに記載の方法を含み、ここで、構成する段階は、複数の追加のプロセッサ要素それぞれのために、第１のプロセッサ要素のアーキテクチャ状態のコピーを格納する段階を含む。
【０１２６】
例２１は、例１７から２０のいずれか１つに記載の方法を含み、ここで、構成する段階は、複数の追加のプロセッサ要素のそれぞれを、管理上のシステムソフトウェアから介入されることなく、命令を並列に実行するよう構成する第１のプロセッサ要素を含む。
【０１２７】
例２２は、例１７から２１のいずれか１つに記載の方法を含み、第１のプロセッサ要素が、ユーザレベルの分岐命令の実行に応答して、ソフトウェアスレッドの命令実行を中止し、同期バリアにおいて待機する段階をさらに含む。
【０１２８】
例２３は、例１７から２２のいずれか１つに記載の方法を含み、複数の追加のプロセッサ要素のそれぞれが、対応するユーザレベルの同期及び終了命令の実行に応答して、さらなる命令の実行を中止する段階と、複数の追加のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行するまで待機する段階と、複数の追加のプロセッサ要素のそれぞれが対応するユーザレベルの同期及び終了命令を実行した後に、ソフトウェアスレッドの第２の命令へ制御を移行する段階とをさらに含む。
【０１２９】
例２４は例２３に記載の方法を含み、複数の追加のプロセッサ要素のそれぞれが、対応するユーザレベルの同期及び終了命令の実行に応答して、エラー状態情報を第１のプロセッサ要素に伝達する段階をさらに含む。
【０１３０】
例２５は、例１７から２４のいずれか１つに記載の方法を含み、複数の追加のプロセッサ要素のそれぞれが、第１のプロセッサ要素の命令セットに含まれる命令を復号する段階をさらに含む。
【０１３１】
例２６は、例１７から２５のいずれか１つに記載の方法を含み、第１のプロセッサ要素において命令をアウトオブオーダで実行する段階と、複数の追加のプロセッサ要素のそれぞれにおいて命令を順番に実行する段階とをさらに含む。
【０１３２】
例２７は、相互接続と相互接続に結合されたプロセッサとを含んだ、命令を処理するコンピュータシステム又は他のシステムであり、プロセッサは、複数のプロセッサ要素と、ソフトウェアスレッドのユーザレベルの分岐命令を実行する第１のプロセッサ要素とを含み、ユーザレベルの分岐命令は少なくとも１つの命令アドレスを示し、第１のプロセッサ要素は、ユーザレベルの分岐命令に応答して、複数のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成し、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）は相互接続に結合され、少なくとも１つのユーザレベルの分岐命令を含むコードを格納する。
【０１３３】
例２８は例２７に記載のシステムを含み、ここで、第１のプロセッサ要素は、複数のプロセッサ要素それぞれのマイクロアーキテクチャに比べて、命令実行がよりアウトオブオーダであるマイクロアーキテクチャを有し、第１のプロセッサ要素は、ユーザレベルの分岐命令が復号されたことに応答して、複数のプロセッサ要素のうちの少なくとも２０個のそれぞれを、命令を並列に実行するよう構成する。
【０１３４】
例２９は、非一時的機械可読記憶媒体を含む製造品であり、非一時的機械可読記憶媒体はユーザレベルの分岐命令を格納し、ユーザレベルの分岐命令は少なくとも１つの命令アドレスを示し、ユーザレベルの分岐命令は、プロセッサの第１のプロセッサ要素により実行された場合、ユーザレベルの分岐命令に応答して、プロセッサの複数の追加のプロセッサ要素のそれぞれを、命令を並列に実行するよう構成することを含むオペレーションを第１のプロセッサ要素に実行させ、複数の追加のプロセッサ要素のそれぞれは、ユーザレベルの分岐命令により示された少なくとも１つの命令アドレスのうちのある命令アドレスにおいて命令を実行し始め、複数の追加のプロセッサ要素のそれぞれは、第１のプロセッサ要素のアウトオブオーダ命令実行パイプラインよりも多くのインオーダ命令実行パイプラインを有する。
【０１３５】
例３０は例２９に記載の製造品を含み、実行された場合に、複数の追加のプロセッサ要素のうちのある追加のプロセッサ要素が、さらなる命令の実行を中止すること、及び複数の追加のプロセッサ要素のそれぞれが同期バリアに到達するまで、同期バリアにおいて待機することを含むオペレーションを、追加のプロセッサ要素に実行させるという、ユーザレベルの同期及び終了命令をさらに含む。
【０１３６】
例３１は、例１７から２６のいずれか１つに記載の方法を実行するよう働く又は動作するプロセッサ又は他の装置である。
【０１３７】
例３２は、例１７から２６のいずれか１つに記載の方法を実行するための手段を含むプロセッサ又は他の装置である。
【０１３８】
例３３は、例１７から２６のいずれか１つに記載の方法を実行するためのモジュール、及び／又はユニット、及び／又はロジック、及び／又は回路、及び／又は手段の任意の組み合わせを含むプロセッサである。
【０１３９】
例３４は、任意の非一時的機械可読媒体を含む製造品であり、当該非一時的機械可読媒体は、プロセッサ、コンピュータシステム、電子デバイス、又は他の機械により実行された場合、及び／又は実行された時、例１７から２１のいずれか１つに記載の方法を機械に実行させるよう動作する命令を任意に格納する、又はそうでなければ提供する。
【０１４０】
例３５は、バス又は他の相互接続を含むコンピュータシステム又は他の電子デバイスであり、例１から１６のいずれか１つに記載のプロセッサは相互接続に結合され、任意のダイナミックランダムアクセスメモリ（ＤＲＡＭ）、任意のスタティックＲＡＭ、任意のフラッシュメモリ、任意のグラフィックスコントローラ又はチップ、任意のビデオカード、任意の無線通信チップ、任意の無線送受信機、任意の移動体通信用グローバルシステム（ＧＳＭ（登録商標））アンテナ、任意のコプロセッサ（例えば、ＣＩＳＣコプロセッサ）、任意のオーディオデバイス、任意のオーディオ入力デバイス、任意のオーディオ出力デバイス、任意のビデオ入力デバイス（例えば、ビデオカメラ）、任意のネットワークインタフェース、任意の通信インタフェース、任意の永続性メモリ（例えば、任意の相変化メモリ、メモリスタなど）、及びこれらの組み合わせから選択される１つ又は複数のコンポーネントが相互接続に結合される。
【０１４１】
例３６は、実質的に本明細書で説明されたような任意のユーザレベルの分岐命令を実行する（例えば、当該命令を実行するコンポーネントを有する、又は当該命令を実行するよう動作する）プロセッサ又は他の装置である。
【０１４２】
例３７は、実質的に本明細書に説明されたような任意のユーザレベルの同期及び終了命令を実行する（例えば、当該命令を実行するコンポーネントを有する、又は当該命令を実行するよう動作する）プロセッサ又は他の装置である。
【０１４３】
例３８は、第１の命令セットの命令を復号する復号ユニットを有するプロセッサを含む、コンピュータシステム又は他の電子デバイスである。プロセッサは、１つ又は複数の実行ユニットも有する。電子デバイスは、プロセッサに結合されたストレージデバイスも含む。ストレージデバイスは第１の命令を格納し、第１の命令は、実質的に本明細書に開示された命令（例えば、ユーザレベルの分岐命令、又はユーザレベルの同期及び結合命令）のいずれであってもよく、第２の命令セットからのものでもよい。ストレージデバイスは、第１の命令を第１の命令セットの１つ又は複数の命令に変換する命令も格納する。第１の命令セットの１つ又は複数の命令は、プロセッサにより実行された場合、第１の命令により指定されたオペレーションをプロセッサに実行させる。
【０１４４】
例３９は、実質的に本明細書で説明されたプロセッサ又は他の装置である。
【０１４５】
例４０は、実質的に本明細書で説明された任意の方法を実行するよう動作するプロセッサ又は他の装置である。
【図１】
0006708335.tif 000002
【図２】
0006708335.tif 000003
【図３】
0006708335.tif 000004
【図４】
0006708335.tif 000005
【図５】
0006708335.tif 000006
【図６】
0006708335.tif 000007
【図７】
0006708335.tif 000008
【図８】
0006708335.tif 000009
【図９Ａ】
0006708335.tif 000010
【図９Ｂ】
0006708335.tif 000011
【図１０Ａ】
0006708335.tif 000012
【図１０Ｂ】
0006708335.tif 000013
【図１１】
0006708335.tif 000014
【図１２】
0006708335.tif 000015
【図１３】
0006708335.tif 000016
【図１４】
0006708335.tif 000017
【図１５】
0006708335.tif 000018
【図１６】
0006708335.tif 000019