(57)【要約】  プロセッサは、分散キャッシュの第１のキャッシュ部に対応し、総数が当該プロセッサの論理プロセッサの総数より少ないキャッシュ側アドレス監視格納位置を有するキャッシュ側アドレス監視ユニットを備える。各キャッシュ側アドレス監視格納位置は、監視されるべきアドレスを格納する。コア側アドレス監視ユニットは、第１のコアに対応し、当該第１のコアの論理プロセッサの数と同数のコア側アドレス監視格納位置を有する。各コア側アドレス監視格納位置は、アドレス及び当該第１のコアの異なる対応する論理プロセッサに対する監視状態を格納する。キャッシュ側アドレス監視格納オーバーフローユニットは、第１のキャッシュ部に対応し、監視されるべきアドレスを格納するのに利用可能な未使用キャッシュ側アドレス監視格納位置がない場合にアドレス監視格納オーバーフローポリシを強制する。
2016532233.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
分散キャッシュの第１のキャッシュ部に対応し、前記プロセッサの複数の論理プロセッサの総数より少ない総数であって各々が監視されるべきアドレスを格納する複数のキャッシュ側アドレス監視格納位置を有するキャッシュ側アドレス監視ユニットと、
第１のコアに対応し、前記第１のコアの１つまたは複数の論理プロセッサの数と同数であって各々が監視されるべきアドレス及び前記第１のコアの異なる対応する論理プロセッサの監視状態を格納する複数のコア側アドレス監視格納位置を有するコア側アドレス監視ユニットと、
前記第１のキャッシュ部に対応し、監視されるべき追加のアドレスを格納するのに利用可能な未使用キャッシュ側アドレス監視格納位置がない場合にアドレス監視格納オーバーフローポリシを強制するキャッシュ側アドレス監視格納オーバーフローユニットと
を備える
プロセッサ。
【請求項２】
前記第１のコアに対応し、前記コア側アドレス監視ユニットに連結され、対応するコア側アドレス監視格納位置が、トリガの準備ができてトリガイベントが検出されたという監視状態を有する場合に、前記第１のコアの論理プロセッサをトリガするコア側トリガユニット
をさらに備える
請求項１に記載のプロセッサ。
【請求項３】
前記キャッシュ側アドレス監視ユニットに連結され、複数の異なる論理プロセッサからの同一の監視アドレスに対する複数の監視要求を、共通キャッシュ側アドレス監視格納位置に記録するキャッシュ側アドレス監視格納位置再利用ユニット
をさらに備える
請求項１または２に記載のプロセッサ。
【請求項４】
前記共通キャッシュ側アドレス監視格納位置は、前記同一の監視アドレスに対する前記複数の監視要求を提供した前記複数の異なる論理プロセッサを記録する構造を有する、
請求項３に記載のプロセッサ。
【請求項５】
前記プロセッサは、４０より多くのハードウェアスレッドを有し、
前記第１のキャッシュ部に対応する前記キャッシュ側アドレス監視ユニットの前記複数のキャッシュ側アドレス監視格納位置の前記総数は、少なくとも２０はあるが、前記４０より多くのハードウェアスレッドの総数より少ない、
請求項１から４の何れか一項に記載のプロセッサ。
【請求項６】
前記キャッシュ側アドレス監視ユニットの前記複数のキャッシュ側アドレス監視格納位置の前記総数は、前記複数のキャッシュ側アドレス監視格納位置のオーバーフローの確率が十万分の一以下となる前記プロセッサの前記複数の論理プロセッサの前記総数に対して十分である、
請求項１から５の何れか一項に記載のプロセッサ。
【請求項７】
監視されるべき第１のアドレスを示す命令に応答して、
前記キャッシュ側アドレス監視ユニットは、前記第１のアドレスを、キャッシュ側アドレス監視格納位置に格納し、
前記コア側アドレス監視ユニットは、前記第１のアドレスを、コア側アドレス監視格納位置に格納する、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項８】
前記複数の論理プロセッサは、複数のハードウェアスレッドを含む、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項９】
前記キャッシュ側アドレス監視格納オーバーフローユニットは、共有状態を用いるべく、複数の読み出しトランザクションを実行することを含む前記アドレス監視格納オーバーフローポリシを強制する、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項１０】
前記キャッシュ側アドレス監視格納オーバーフローユニットは、保留中の監視要求を有する可能性がある全てのコアへ複数の無効化要求を送信することを含む前記アドレス監視格納オーバーフローポリシを強制する、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項１１】
前記キャッシュ側アドレス監視格納オーバーフローユニットは、どのコアに保留中の監視要求を有する可能性があるかを判断するオーバーフロー構造をチェックする、
請求項１０に記載のプロセッサ。
【請求項１２】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続に連結され、かつ、キャッシュ部制御ユニットの第１のアドレス監視ユニット、コアインターフェースユニットの第２のアドレス監視ユニット、及び前記キャッシュ部制御ユニットのアドレス監視格納オーバーフローユニットを有するプロセッサと、
前記相互接続に連結されるダイナミックランダムアクセスメモリと、
前記相互接続に連結される無線通信デバイスと、
前記相互接続に連結される画像キャプチャデバイスと
を備え、
前記キャッシュ部制御ユニットの前記第１のアドレス監視ユニットは、分散キャッシュの第１のキャッシュ部に対応し、かつ、前記プロセッサの複数のハードウェアスレッドの総数より少ない総数であって各々が監視されるべきアドレスを格納する複数のアドレス監視格納位置を有し、
前記コアインターフェースユニットの前記第２のアドレス監視ユニットは、第１のコアに対応し、かつ、前記第１のコアの１つまたは複数のハードウェアスレッドの数と同数であって各々が監視されるべきアドレス及び前記第１のコアの異なる対応するハードウェアスレッドに対する監視状態を格納する、前記第２のアドレス監視ユニットの複数のアドレス監視格納位置を有し、
前記キャッシュ部制御ユニットの前記アドレス監視格納オーバーフローユニットは、前記第１のアドレス監視ユニットの全てのアドレス監視格納位置が用いられて監視要求に対してアドレスを格納するのに利用可能なものがない場合に、アドレス監視格納オーバーフローポリシを実施する、
システム。
【請求項１３】
前記アドレス監視格納オーバーフローユニットは、共有状態を用いるべく複数の読み出しトランザクションを実行すること及び保留中の監視要求を有する可能性がある全てのコアへ複数の無効化要求を送信することを含む前記アドレス監視格納オーバーフローポリシを実施する、
請求項１２に記載のシステム。
【請求項１４】
前記プロセッサは、４０より多くのハードウェアスレッドを有し、
前記第１のアドレス監視ユニットの前記複数のアドレス監視格納位置の前記総数は、少なくとも２０はあるが、前記プロセッサの前記４０より多くのハードウェアスレッドの前記総数より少ない、
請求項１２または１３に記載のシステム。
【請求項１５】
前記プロセッサは、複数の異なるハードウェアスレッドからの同一の監視アドレスに対する複数の監視要求を共通アドレス監視格納位置に記録する、前記キャッシュ部制御ユニットのアドレス監視格納位置再利用ユニットをさらに有する、
請求項１２または１３に記載のシステム。
【請求項１６】
プロセッサにおける方法であって、
アドレスを示し、かつ、マルチコアプロセッサの第１のコアの第１の論理プロセッサにおいて前記アドレスへの複数の書き込みに対して監視することを示す第１の命令を受信する段階と、
前記第１の命令に応答して、
前記第１のコアに対応し、かつ、数が前記第１のコアの複数の論理プロセッサの数に等しい複数のコア側アドレス監視格納位置の第１のコア側アドレス監視格納位置に、前記第１の命令によって示された前記アドレスを格納する段階と、
分散キャッシュの第１のキャッシュ部に対応し、かつ、総数が前記マルチコアプロセッサの複数の論理プロセッサの総数より少ない複数のキャッシュ側アドレス監視格納位置の第１のキャッシュ側アドレス監視格納位置に、前記第１の命令によって示された前記アドレスを格納する段階と、
監視状態を投機状態に変更する段階と
を備える
方法。
【請求項１７】
前記アドレスをまた示し、第２のコアの第２の論理プロセッサにおいて前記アドレスへの複数の書き込みに対して監視することを示す第２の命令を受信する段階と、
前記第２のコアのための前記アドレスに対する監視要求を前記第１のキャッシュ側アドレス監視格納位置に記録する段階と
をさらに備える
請求項１６に記載の方法。
【請求項１８】
前記第２のコアのための前記アドレスに対する前記監視要求を前記第１のキャッシュ側アドレス監視格納位置に記録する段階は、前記マルチコアプロセッサの各コアに対応する異なるビットを有するコアマスクにおけるビットを変更する段階を含む、
請求項１７に記載の方法。
【請求項１９】
第２のアドレスを示し、前記第１の論理プロセッサにおいて前記第２のアドレスへの複数の書き込みに対して監視することを示す第２の命令を受信する段階と、
前記第１のキャッシュ部に対応する前記複数のキャッシュ側アドレス監視格納位置の中に利用可能な複数のキャッシュ側アドレス監視格納位置がないことを判断する段階と、
キャッシュ側アドレス監視格納位置オーバーフローモードに入ることを決定する段階と
をさらに備える
請求項１６から１８の何れか一項に記載の方法。
【請求項２０】
前記キャッシュ側アドレス監視格納位置オーバーフローモードにある間は、
共有キャッシュコヒーレンシ状態を用いるべく、前記第１のキャッシュ部に対応する全ての読み出しトランザクションを実行する段階と、
前記第１のキャッシュ部に対応する複数の無効化要求を、１つまたは複数の保留中の監視要求を有する可能性がある、前記マルチコアプロセッサの全てのコアへ送信する段階と
をさらに備える
請求項１９に記載の方法。
【請求項２１】
前記第１の論理プロセッサにおいて前記アドレスを示す第２の命令を受信する段階と、
前記第２の命令に応答して、前記監視状態をトリガ待ち状態に変更する段階と
をさらに備える
請求項１６から２０の何れか一項に記載の方法。
【請求項２２】
請求項１６から２１の何れかに一項に記載の方法を実行するプロセッサ。
【請求項２３】
請求項１６から２１の何れか一項に記載の方法を実行するための手段を含むプロセッサ。
【請求項２４】
１つまたは複数の命令を格納する非一時的機械可読媒体を含む製造品であって、
前記１つまたは複数の命令は、機械により実行された場合、前記機械に請求項１６から２１の何れか一項に記載の方法を実行させるように動作可能である、
製造品。
【請求項２５】
相互接続、
前記相互接続に連結されるプロセッサ、
前記相互接続に連結される無線通信チップ、及び
前記相互接続に連結されるビデオカメラ
を備えるコンピュータシステムであって、
前記コンピュータシステムは、請求項１６から２１の何れか一項に記載の方法を実行する、
コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で説明される複数の実施形態は、複数のプロセッサに関する。特に、本明細書で説明される複数の実施形態は概して、アドレスへの書き込みに対して監視する命令を実行するように動作可能な複数のプロセッサに関する。
【背景技術】
【０００２】
半導体処理及びロジック設計の進歩は、複数のプロセッサ及び複数の他の集積回路デバイスに含まれ得るロジックの量の増加を可能にしていた。結果として、現在、多くのプロセッサは、単一集積回路またはダイ上にモノリシックに統合される複数から多数に及ぶコアを有する。複数のコアは一般に、複数のソフトウェアスレッドまたは複数の他の作業量が同時に実行されることを可能にするのに役に立ち、一般に実行スループットを増加させるのに役に立つ。
【０００３】
このような複数のコアプロセッサにおける１つの課題は、より高まる需要が、多くの場合、メモリからデータ及び／または複数の命令をキャッシュするのに用いられる複数のキャッシュに置かれる。ひとつには、そのような複数のキャッシュにおいてデータをアクセスするためのより高い相互接続帯域幅に対する需要が増え続ける傾向にある。複数のキャッシュに対する相互接続帯域幅を増加させるのに役に立つ１つの技術は、分散キャッシュを用いることを伴う。当該分散キャッシュは、複数の物理的個別または分散キャッシュスライス、もしくは複数の他のキャッシュ部を含み得る。そのような分散キャッシュは、共有相互接続を通して、キャッシュの複数の異なる分散部分への並行アクセスを可能にし得る。
【０００４】
そのような複数のコアプロセッサにおける別の課題は、共有メモリに対するスレッド同期を提供する能力である。複数のオペレーティングシステムは、一般的に共有メモリに対するスレッド同期を処理する複数のアイドリングループを実行する。例えば、複数のメモリ位置のセットを用いるいくつかのビジーループであってよい。第１のスレッドは、ループ内で待機して対応するメモリ位置をポーリングし得る。例として、メモリ位置は、当該第１のスレッドの作業キューを表し得、当該第１のスレッドは、実行可能な作業があるか否かを判断すべく、当該作業キューをポーリングし得る。共有メモリ構成において、ビジーループから出ることは、多くの場合、メモリ位置と関連付けられる状態変更に起因して発生する。これらの状態変更は一般的に、別のコンポーネント（例えば、別のスレッドまたはコア）によるメモリ位置への複数の書き込みによって、引き起こされる。例えば、別のスレッドまたはコアは、第１のスレッドによって実行される作業を提供するように、当該メモリ位置において作業キューへ書き込み得る。
【０００５】
複数の特定のプロセッサ（例えば、カリフォルニア州サンタクララ所在のインテル（登録商標）コーポレーションより入手可能なもの）は、共有メモリに対するスレッド同期を実現するＭＯＮＩＴＯＲ及びＭＷＡＩＴ命令を用いることができる。ハードウェアスレッドまたは他の論理プロセッサは、監視ユニットによって監視されるべきリニアアドレス範囲を設定し、当該監視ユニットに準備させまたは作動させるべく、ＭＯＮＩＴＯＲ命令を用いてよい。アドレスは、汎用レジスタを通して提供され得る。アドレス範囲は一般に、ライトバックキャッシング型である。監視ユニットは、当該監視ユニットをトリガするアドレス範囲内のアドレスへの複数の格納／書き込みを監視及び検出する。
【０００６】
ＭＷＡＩＴ命令は、プログラム順序に沿ってＭＯＮＩＴＯＲ命令に続いてよく、ハードウェアスレッドまたは他の論理プロセッサが命令実行を停止して実装依存状態に入ることを可能にするヒントとして、機能してよい。例えば、論理プロセッサは、低減電力消費状態に入り得る。論理プロセッサは、ＭＯＮＩＴＯＲ命令と関連付けられるクオリファイングイベントのセットのうちの１つが検出されるまで、その状態を保ち得る。先行のＭＯＮＩＴＯＲ命令によって準備されるアドレス範囲のアドレスへの書き込み／格納が、そのようなクオリファイングイベントの１つである。そのような複数の場合において、論理プロセッサは、当該状態から出てよく、プログラム順序に沿ってＭＷＡＩＴ命令に続く命令の実行を再開し得る。
【図面の簡単な説明】
【０００７】
本発明は、複数の実施形態を例示するのに用いられる以下の説明及び複数の添付の図面を参照することによって、最もよく理解されることができる。複数の図面は以下の通りである。
【図１】プロセッサの実施形態のブロック図である。
【図２】キャッシュエージェントの実施形態のブロック図である。
【図３】監視有限状態機械の実施形態の複数の状態を示す図である。
【図４】複数の監視要求が同一アドレスを示す場合、複数のハードウェアスレッド及び／またはコアに対する単一キャッシュ側アドレス監視格納位置を再利用するように動作可能なオーバーフロー回避ロジックの実施形態のブロック図である。
【図５】複数の古くなった／旧式のキャッシュ側アドレス監視格納位置をチェックすることによってオーバーフローモードを回避することを任意選択的に試みる段階、及びそのような複数の古くなった／旧式の格納位置が発見されない場合にはそのオーバーフローモードに入る段階を備える方法の実施形態のブロックフロー図である。
【図６】オーバーフロー構造の実施形態のブロック図である。
【図７Ａ】本発明の複数の実施形態に係る、例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【図７Ｂ】本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【図８Ａ】本発明の複数の実施形態に係る、オンダイ相互接続ネットワークとの接続及び自己のレベル２（Ｌ２）キャッシュローカルサブセットを有する単一プロセッサコアのブロック図である。
【図８Ｂ】本発明の複数の実施形態に係る図８Ａのプロセッサコアの一部の拡大図である。
【図９】本発明の複数の実施形態に係る、１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよいプロセッサのブロック図である。
【図１０】本発明の一実施形態に係るシステムのブロック図である。
【図１１】本発明の実施形態に係る第１のより具体的で例示的なシステムのブロック図である。
【図１２】本発明の実施形態に係る第２のより具体的で例示的なシステムのブロック図である。
【図１３】本発明の実施形態に係るＳｏＣのブロック図である。
【図１４】本発明の複数の実施形態に係る、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比させるブロック図である。
【発明を実施するための形態】
【０００８】
アドレスへの複数の書き込みを監視する命令をスケーラブルに実行する複数の方法、装置、及び複数のシステムは、本明細書に開示されている。以下の説明において、多数の具体的な詳細（例えば、複数の具体的な命令、複数の命令機能性、複数のプロセッサ構成、複数のマイクロアーキテクチャ詳細、複数の動作の複数のシーケンスなど）が記載される。しかしながら、複数の実施形態は、これら具体的な詳細を有することなく実施され得る。複数の他の例において、複数の周知の回路、複数の構造及び複数の技術は、説明の理解を不明瞭にすることを回避するために、詳細に示されていない。
【０００９】
図１は、プロセッサ１００の実施形態のブロック図である。当該プロセッサは、物理プロセッサ、集積回路、またはダイを表す。いくつかの実施形態において、当該プロセッサは、汎用プロセッサ（例えば、デスクトップ、ラップトップ、及び複数の同様のコンピュータに用いられる種類の汎用マイクロプロセッサ）であってよい。代替的に、当該プロセッサは、特定用途向けプロセッサであってよい。複数の適した特定用途向けプロセッサの複数の例は、複数のネットワークプロセッサ、複数の通信プロセッサ、複数の暗号プロセッサ、複数のグラフィックスプロセッサ、複数のコプロセッサ、複数の組み込みプロセッサ、複数のデジタルシグナルプロセッサ（ＤＳＰ）、及び複数のコントローラ（例えば、複数のマイクロコントローラ）を含むが、単にいくつかの例を挙げるためであって、それらに限定されない。プロセッサは、様々な複合命令セットコンピュータ（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピュータ（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、それらの様々なハイブリッド、または複数の全く他の種類のプロセッサのうちの何れかであってよい。
【００１０】
当該プロセッサは、複数のプロセッサコア１０２を有するマルチコアプロセッサである。示された例示的な実施形態において、当該プロセッサは、コア０  １０２−０からコア７  １０２−７を含む８つのコア（集合的には、複数のコア１０２）を有する。しかし、複数の他の実施形態において、当該プロセッサは、例えば、２から数百まで、多くの場合は、２から数十まで（例えば、約５から約百まで）、任意の他の所望の数のコアを有してよい。複数のコアの各々は、単一ハードウェアスレッドと複数のハードウェアスレッドとを有してよく、またはいくつかのコアが単一ハードウェアスレッドを有し得る一方で他の複数のコアが複数のハードウェアスレッドを有し得る。例えば、一例示的な実施形態において、複数のコアの各々は、少なくとも２つのハードウェアスレッドを有してよいが、本発明の範囲はそれに限定されない。
【００１１】
コアという用語は、多くの場合、集積回路上に配置され、個々のアーキテクチャ状態（例えば、実行状態）を維持できるロジックを指し、当該個々に維持されるアーキテクチャ状態は、複数の専用実行リソースと関連付けられる。対照的に、ハードウェアスレッドという用語は、多くの場合は、集積回路上に配置され、個々のアーキテクチャ状態を維持できるロジックを指し、当該個々に維持されるアーキテクチャ状態は、自己が用いる複数の実行リソースへのアクセスを共有する。複数の特定のリソースがアーキテクチャ状態によって共有され、複数の他のリソースが当該アーキテクチャ状態に対して専用される場合、コアとハードウェアスレッドとの間の境界線は明確でなくなる。しかしながら、コア及びハードウェアスレッドは、多くの場合、オペレーティングシステムからは複数の個々の処理素子または複数の論理プロセッサとして見なされる。オペレーティングシステムは一般に、複数のコア、複数のハードウェアスレッド、または複数の他の論理プロセッサまたは複数の処理素子の各々において個別に複数の動作をスケジューリングできる。言い換えれば、一実施形態において、複数の実行リソースが専用され、または共有され、もしくはそれらのいくつかの組み合わせであるか否かにかかわらず、処理素子または論理プロセッサは、ソフトウェアスレッド、オペレーティングシステム、アプリケーションのようなコード、または他のコードと個々に関連付けることができる任意のオンダイプロセッサロジックを表してよい。複数のハードウェアスレッド及び複数のコアに加えて、複数の論理プロセッサまたは複数の処理素子の複数の他の例は、複数のスレッドユニット、複数のスレッドスロット、複数の処理ユニット、複数のコンテキスト、及び／または状態を保持することとコードと個々に関連付けられることができる任意の他のロジックを含むが、それらに限定されない。
【００１２】
複数のコア１０２は、１つまたは複数のオンダイ相互接続１１２によって、一緒に連結される。相互接続は、複数のコアの間で複数のメッセージ及びデータを送信するのに用いられ得る。多くの異なる種類の相互接続が適することは理解されるであろう。一実施形態において、リング相互接続は用いられ得る。複数の代替的な実施形態において、メッシュ、トーラス、クロスバー、ハイパーキューブ、他の相互接続構造、または複数のそのような相互接続のハイブリッドもしくは組み合わせは、用いられ得る。
【００１３】
各コアは、例えば、１つまたは複数の下位レベルキャッシュ（図示せず）のようなローカル命令及び／またはデータストレージを含んでよい。例えば、各コアは、当該複数のコアに最も近い、対応する最下位レベルまたはレベル１（Ｌ１）キャッシュを含んでよく、かつ、当該複数のコアに次に最も近い、中位レベルまたはレベル２（Ｌ２）キャッシュを任意選択的に含んでよい。１つまたは複数の下位レベルキャッシュは、上位レベルキャッシュ（例えば、以下で説明される分散キャッシュ１０８）よりも、これらの対応する複数のコアに物理的に及び／または論理的に近いので、下位レベルとして称される。１つまたは複数のレベルのキャッシュの各々は、データ及び／または複数の命令をキャッシュし得る。
【００１４】
複数のコア１０２はまた、上位レベルの分散キャッシュ１０８を共有し得る。上位レベルの分散キャッシュは、複数の物理的分散メモリまたは当該キャッシュの複数の部分を表し得る。示された例示的な実施形態において、分散キャッシュは、複数（例えば、この場合は８）の物理的分散キャッシュ部１０８−０から１０８−７（集合的には、複数のキャッシュ部１０８）を含み、多くの場合、複数のキャッシュスライスとして称される。複数の他の実施形態において、分散キャッシュは、より少ないまたはより多くのキャッシュ部（例えば、プロセッサのコアの数と同数の分散キャッシュ部）を含んでよい。複数の分散キャッシュ部は、複数の異なるコア及び／またはスレッドによって共有されてよい。示されているように、各キャッシュ部は、それぞれのコアとより関連付けられてよく、及び／または任意選択的に物理的により近くダイ上にそれぞれのコアと共に配置（例えば、同一場所に配置）されてよい。例えば、キャッシュ部１０８―０は、複数の他のコアと比較して、コア０  １０２−０とより関連付けられてよく、及び／または物理的により近くダイ上にコア０  １０２−０と共に配置（例えば、同一場所に配置）されてよい。
【００１５】
いくつかの実施形態において、各キャッシュ部は、複数のメモリアドレスの相互に排他的または重複しない範囲に対応してよくまたはマッピングされてよい。例えば、キャッシュ部１０８―０は、関連第１のセットのアドレスを有してよく、キャッシュ部１０８―１は、異なる関連第２のセットのアドレスを有しよく、等など。複数のアドレス範囲は、様々な異なる態様（例えば、複数の異なるハッシュ関数または複数の他のアルゴリズムを用いること）により分散キャッシュの複数の異なるキャッシュ部の中に分割されまたは割り当てられ得る。いくつかの実施形態において、必須ではないが、上位レベルの共有キャッシュは、データ及び／または複数の命令を格納するように動作可能なラストレベルキャッシュ（ＬＬＣ）を表し得る。いくつかの実施形態において、分散キャッシュ（例えば、ＬＬＣ）は、必須ではないが、キャッシュ階層の全ての下位レベルキャッシュを包括してよく、またはキャッシュ階層の最上位レベルの次のレベルのキャッシュ（例えば、Ｌ２キャッシュ）を包括してよい。いくつかの実施形態において、複数のコアは、データ及び／または複数の命令について１つまたは複数の下位レベルキャッシュを最初にチェックし得る。１つまたは複数の下位レベルキャッシュにおいて探されているデータ及び／または複数の命令が発見されない場合、当該複数のコアは次に、上位レベルの共有分散キャッシュをチェックすることを進める。
【００１６】
示されているように、いくつかの実施形態において、コアインターフェース（Ｉ／Ｆ）ユニット１０４は、各々の対応するコア１０２に連結され得る。各コアインターフェースユニットはまた、相互接続１１２に連結されてよい。各コアインターフェースユニットは、対応するコアと複数の他のコアとの間、及び対応するコアと複数の分散キャッシュ部との間の中継ぎとして機能するように動作可能であってよい。さらに示されているように、いくつかの実施形態において、対応するキャッシュ制御ユニット１０６は、各キャッシュスライスまたは他の部分１０８に連結され得る。いくつかの実施形態において、各キャッシュ制御ユニットは、対応するキャッシュスライスと対応するコアとはおおよそ物理的に同一場所に配置されてよい。各キャッシュ制御ユニットは、相互接続１１２に連結されてよい。各キャッシュ制御ユニットは、対応する分散キャッシュ部に対してキャッシュコヒーレンシを提供することを制御及び支援するように動作可能であってよい。コアインターフェースユニット１０４及びキャッシュ制御ユニット１０６の各々の対応するペアは、対応するコア及び対応するキャッシュ部分を相互接続及び／または複数の他のコアに対してインターフェースするように動作可能なコア・キャッシュ部のインターフェースユニットを集合的に表し得る。複数のコアインターフェースユニット及び複数のキャッシュ制御ユニットは、ハードウェア（例えば、集積回路、複数の回路、複数のトランジスタなど）、ファームウェア（例えば、不揮発性メモリに格納される複数の命令）、ソフトウェア、またはそれらの組み合わせに実装されてよい。
【００１７】
プロセッサはまた、当該プロセッサを第１のメモリ（図示せず）に連結させる第１のキャッシュコヒーレンシアウェアメモリコントローラ１１０―１、及び当該プロセッサを第２のメモリ（図示せず）に連結させる第２のキャッシュコヒーレンシアウェアメモリコントローラ１１０―２を含む。いくつかの実施形態において、各キャッシュコヒーレンシアウェアメモリコントローラは、キャッシュコヒーレンシを実行するように動作可能なホームエージェントロジック、及びメモリと連携するように動作可能な第２のメモリコントローラロジックを含んでよい。簡潔化のために、本説明において、このようなホームエージェント及びメモリコントローラの複数の機能性は、キャッシュコヒーレンシアウェアメモリコントローラとして称される。複数の他の実施形態は、より少ないまたはより多くのキャッシュコヒーレンシアウェアメモリコントローラを含み得る。さらに、示された実施形態において、複数のキャッシュコヒーレンシアウェアメモリコントローラがオンダイまたはオンプロセッサである一方で、複数の他の実施形態においては、それらは、その代わりに、オフダイ、またはオフプロセッサ（例えば、１つまたは複数のチップセットコンポーネントとして）であり得る。
【００１８】
プロセッサがまた本明細書の様々な実施形態を理解するために必要ではない複数の他のコンポーネントを含み得ることは、理解されるであろう。例えば、プロセッサは、入力及び／または出力デバイスに対する１つまたは複数のインターフェース、システムインターフェース、ソケットツーソケット相互接続などを任意選択的に含み得る。上述されたように、複数の特定のプロセッサ（例えば、インテル（登録商標）コーポレーションから入手可能なもの）は、共有メモリに対するスレッド同期を実現するようにＭＯＮＩＴＯＲ及びＭＷＡＩＴ命令を用いることができる。ハードウェアスレッドまたは他の論理プロセッサは、監視ユニットによって監視されるべきリニアアドレス範囲を設定し、監視ユニットに準備させまたは作動させるように、ＭＯＮＩＴＯＲ命令を用いてよい。アドレスは、汎用レジスタ（例えば、ＥＡＸ）を通して提供され得る。アドレス範囲は一般に、ライトバックキャッシング型である。監視ユニットは、当該監視ユニットをトリガするアドレス範囲内のアドレスへの複数の格納／書き込みを監視及び検出する。複数の他の汎用レジスタ（例えば、ＥＣＸ及びＥＤＸ）は、監視ユニットへと他の情報を通信するのに用いられてよい。ＭＷＡＩＴ命令は、プログラム順序に沿ってＭＯＮＩＴＯＲ命令に続いてよく、ハードウェアスレッドまたは他の論理プロセッサが命令実行を停止して実装依存状態に入ることを可能にするヒントとして機能し得る。例えば、論理プロセッサは、スリープ状態、電力Ｃ状態（Ｃステート）、または他の低減電力消費状態に入り得る。論理プロセッサは、ＭＯＮＩＴＯＲ命令と関連付けられるクオリファイングイベントのセットのうちの１つが検出されるまでその状態を保ち得る。先行のＭＯＮＩＴＯＲ命令によって準備されたアドレス範囲のアドレスへの書き込み／格納は、そのようなクオリファイングイベントの１つである。複数のそのような場合において、論理プロセッサは、その状態から出てよく、プログラム順序に沿ってＭＷＡＩＴ命令に続く命令を実行することを再開し得る。複数の汎用レジスタ（例えば、ＥＡＸ及びＥＣＸ）は、監視ユニットへと他の情報（例えば、入るべき状態に関する情報）を通信するのに用いられ得る。
【００１９】
図２は、キャッシュエージェント２１６の実施形態のブロック図である。いくつかの実施形態において、キャッシュエージェントは、図１のプロセッサに用いられ得る。しかし、図２のキャッシュエージェントが図１のプロセッサと異なる複数のプロセッサと共に用いられ得ることが理解されたい。
【００２０】
キャッシュエージェント２１６は、コア２０２及びキャッシュ部２０８を含む。いくつかの実施形態において、コアは、マルチコアプロセッサの複数のコアのうちの１つであり得る。いくつかの実施形態において、キャッシュ部は、分散キャッシュの複数のキャッシュスライスまたは複数の他のキャッシュ部（例えば、分散ＬＬＣ）のうちの１つであってよい。キャッシュエージェントはまた、コアインターフェースユニット２０４及びキャッシュ部制御ユニット２０６を含む。コアは、コアインターフェースユニットを通して相互接続２１２に連結される。キャッシュ部は、キャッシュ部制御ユニットを通して相互接続に連結される。コアインターフェースユニットは、コアとキャッシュ部制御ユニットとの間に連結される。キャッシュ部制御ユニットは、コアインターフェースとキャッシュ部との間に連結される。コア、キャッシュ部、コアインターフェースユニット、及びキャッシュ部制御ユニットは図１の、対応して名付けられている複数のコンポーネントと任意選択的に同様、または同一であってよい。この特定の例において、コアは、第１のハードウェアスレッド２１８―１及び第２のハードウェアスレッド２１８―２を含むマルチスレッドコアであるが、本発明の範囲はそれに限定されない。複数の他の実施形態において、コアは、単一スレッドであること、あるいは２つより多くのハードウェアスレッドを有することのいずれであってよい。
【００２１】
キャッシュエージェント２１６は、１つまたは複数のアドレス（例えば、ＭＯＮＩＴＯＲ命令によって示されたアドレス範囲）への書き込みに対して監視するのに用いられる監視命令（例えば、ＭＯＮＩＴＯＲ命令）を実行するように動作可能な監視機構を含む。機構は、既存のキャッシュコヒーレンシ機構を利用またはレバレッジし得る（例えば、当該キャッシュコヒーレンシ機構を通して伝達されたアドレスへ書き込む意図の通信を利用し得る）。例示された実施形態において、監視機構は、キャッシュ側アドレス監視ユニット２２６、コア側アドレス監視ユニット２２０、コア側トリガユニット２３４、及びキャッシュ側格納オーバーフローユニット２３６を含む。本明細書で用いられているように、「コア側」という用語は、相互接続２１２の、コア２０２と同じ側上にあること、及び／またはコアと相互接続との間に配置されること、並びに／もしくはキャッシュ部よりも論理的にコアに近いことを指す。同様に、「キャッシュ側」という用語は、相互接続２１２の、キャッシュ部２０８と同じ側上にあること、及び／またはキャッシュ部と相互接続との間に配置されること、並びに／もしくはコアよりも論理的にキャッシュ部に近いことを指す。
【００２２】
示された実施形態において、必須ではないが、キャッシュ側アドレス監視ユニット２２６及びキャッシュ側格納オーバーフローユニット２３６は両方、キャッシュ部制御ユニット２０６に実装される。複数の他の実施形態において、これらのユニットの１つまたは複数は、個別のキャッシュ側コンポーネントとして実装されてよい（例えば、キャッシュ制御ユニット及び／またはキャッシュ部に連結される）。同様に、示された実施形態において、必須ではないが、コア側アドレス監視ユニット２２０及びコア側トリガユニット２３４は両方、コアインターフェースユニット２０４に実装される。複数の他の実施形態において、これらのユニットの１つまたは複数は、個別のコア側コンポーネントとして、実装され得る（例えば、コアインターフェースユニット及び／またはコアに連結される）。
【００２３】
キャッシュ側アドレス監視ユニット２２６は、分散キャッシュのスライスまたは他の部分であるキャッシュ部２０８に対応する。キャッシュ側アドレス監視ユニットは、複数の異なるキャッシュ側アドレス監視格納位置２２８を有する。示されているように、各キャッシュ側アドレス監視格納位置は、複数の書き込みに対して監視されるべきアドレス２３０を格納するのに用いられてよい。いくつかの実施形態において、各キャッシュ側アドレス監視格納位置はまた、アドレスに関するコアの表示（例えば、コア識別子、各異なるコアに対応する異なるビットを有するコアマスクなど）を格納し得る。例として、これら複数の格納位置は、ハードウェア実装テーブルにおける複数の異なるエントリを表し得る。示されたように、示された実施形態において、第１のキャッシュ側アドレス監視格納位置２２８―１から第Ｎのキャッシュ側アドレス監視格納位置２２８―Ｎがあってよく、Ｎは、特定の実装に対して適切な数であってよい。
【００２４】
いくつかの実施形態において、キャッシュ部に対応するキャッシュ側アドレス監視ユニットにおけるキャッシュ側アドレス監視格納位置の総数は、プロセッサ及び／またはプロセッサが実装されるソケットの、ハードウェアスレッド（または他の論理プロセッサ）の総数より少なくてよい。いくつかの実施形態において、各ハードウェアスレッド（または他の論理プロセッサ）は、単一アドレスまたは複数のアドレスの単一範囲を監視すべく、監視命令（例えば、ＭＯＮＩＴＯＲ命令）を用いるのに動作可能であってよい。いくつかの場合において、そのような監視命令を用いた後、ハードウェアスレッドは、スリープ状態に置かれてよく、または別の低減電力消費状態に置かれてよい。１つ可能なアプローチは、監視されるべきアドレスを格納するように、各ハードウェアスレッド（または他の論理プロセッサ）に対して複数のキャッシュ側アドレス監視格納位置２２８を十分に提供することであろう。しかし、分散キャッシュが用いられている場合、各アドレスは、単一の対応するキャッシュスライスまたは他のキャッシュ部に対してのみ、ハッシュし得、あるいはマッピングし得る。例えば、アドレスのハッシュは、特定のハッシュ関数に従って当該アドレスに対応する単一の対応するキャッシュスライスを選択し得る。従って、このような分散キャッシュが用いられている場合、概して非常に低い可能性ではあるが、複数のハードウェアスレッド（または複数の他の論理プロセッサ）の全てに対して監視されるべき複数のアドレスの全ては、全部、同一の単一キャッシュスライスにハッシュされ得、あるいはマッピングされ得る可能性がある。
【００２５】
そのような可能性を作るべく、１つ可能なアプローチは、プロセッサ及び／またはソケットの複数のハードウェアスレッド（または複数の他の論理プロセッサ）の総数に等しい数のキャッシュ側アドレス監視格納位置２２８を有する各キャッシュ部の提供であろう。例えば、各コアが２つのハードウェアスレッドを有するという８のコアのプロセッサにおいて、合計１６（すなわち、コアの数にコア毎のスレッドの数を乗算された数）のキャッシュ側アドレス監視格納位置は、当該８のキャッシュスライスの各々に対して提供され得る。例として、ハードウェアスレッドの総数に等しい数のエントリを有するハードウェア実装テーブルは、含まれ得る。いくつかの場合において、各格納位置は、対応するハードウェアスレッドに対する固定対応関係またはアサインメントを有し得る。これは、全てのハードウェアスレッドが監視されるべきアドレスを格納することを可能にし得、これら複数のアドレスの全てができる限り同一のキャッシュ部に対してマッピングし得る可能性を作り得て、従って、そのキャッシュ部に対してローカルに格納される必要となるであろう。そのようなアプローチは、最悪の事態のために本質的に設計している。最悪の事態は、一般に考えにくいが、仮に実際に発生してしまった場合に処理するための利用可能なアプローチがなかったので、これまで無視されることができなかったからである。
【００２６】
そのようなアプローチの１つの欠点は、ハードウェアスレッド（または他の論理プロセッサ）の数及び／またはキャッシュ部の数が増加する場合、比較的にスケーラブルではない傾向にある。ハードウェアスレッドの数の増加は、各キャッシュ部に対して必要とされる格納位置の数を増加させる。さらに、キャッシュ部の数の増加は、各追加のキャッシュ部に対してそのような格納位置の追加のセットを加えることを伴う。単にいくつかの例を挙げるが、複数のプロセッサは、３２のスレッド、３６のスレッド、４０のスレッド、５６のスレッド、１２８のスレッド、または２５６のスレッドより多くのスレッドを有し得る。そのような大きい数のスレッドが用いられる場合、ストレージの量が相当膨大となり得ることは、当業者には容易に分かることであろう。ストレージのそのような実質的な量は、プロセッサの製造コスト、ストレージの提供に必要とされるオンダイの面積の広さ、及び／または当該ストレージによって生じる電力消費を増加させる傾向にある。
【００２７】
もう１つのアプローチとして、いくつかの実施形態において、キャッシュ部２０８に対応するキャッシュ側アドレス監視ユニット２２６のキャッシュ側アドレス監視格納位置２２８の総数は、プロセッサ及び／またはソケットのハードウェアスレッド（または他の論理プロセッサ）の総数より少なくてよい。アドレス監視格納オーバーフローの可能性を完全に回避するのに厳密に必要とされる数より少ないアドレス監視格納位置があってよい。いくつかの実施形態において、各キャッシュ部は、自己と関連しており、オーバーフローを大抵の場合に回避するのに十分ではあるが、全ての例においてそのようなオーバーフローを完全に防ぐには不十分という数のアドレス監視格納位置を有してよい。いくつかの実施形態において、キャッシュ部毎のキャッシュ側アドレス監視格納位置の総数は、必要に応じてオーバーフローの確率が約十万分の一以下、約百万分の一以下、または約千万分の一以下となるようにプロセッサのハードウェアスレッドの総数に対して十分であり得る。いくつかの実施形態において、プロセッサは、約４０より多くのハードウェアスレッドを有してよく、キャッシュ部毎のキャッシュ側アドレス監視格納位置の総数は、４０より少なくてよい（例えば、約２０から約３８まで）。いくつかの実施形態において、プロセッサは、５０より多くのハードウェアスレッドを有してよく、キャッシュ部毎のキャッシュ側アドレス監視格納位置の総数は、約５０より少なくてよい（例えば、約２０から約４５まで、または約２５から約４０まで、もしくは、約３０から約４０まで）。いくつかの実施形態において、複数のキャッシュ側アドレス監視格納位置を複数の特定のハードウェアスレッドに指定するまたは割り当てる代わりに、複数の格納位置は、任意の特定のハードウェアスレッドに対応しなくてよいが、むしろ任意の格納位置は、任意のハードウェアスレッドによって用いられてよい。有利には、プロセッサ及び／またはソケットのハードウェアスレッド（または他の論理プロセッサ）の総数より少ない総数であってキャッシュ部に対応するキャッシュ側アドレス監視ユニットのキャッシュ側アドレス監視格納位置を用いることは、複数の監視命令（例えば、ＭＯＮＩＴＯＲ命令）を実行するよりスケーラブルなソリューションを提供するのに潜在的に役に立つ。しかしながら、本明細書に開示されている複数の実施形態が、ハードウェアスレッド及び／またはコアの数と関係なしに、並びに／もしくはストレージの総量が大きいかまたは小さいかにかかわらず、ユーティリティを有することは、理解されるであろう。再び図２を参照すれば、キャッシュエージェントは、コア２０２に対応するコア側アドレス監視ユニット２２０を含む。コア側アドレス監視ユニットは、対応するコアの１つまたは複数のハードウェアスレッドの数と同数のコア側アドレス監視格納位置を有する。示された実施形態において、第１のコア側アドレス監視格納位置２２１―１は、第１のハードウェアスレッド２１８―１に対して固定対応関係を有し、第２のコア側アドレス監視格納位置２２１―２は、第２のハードウェアスレッド２１８―２に対して固定対応関係を有する。複数の他の実施形態において、他の数のスレッド及び格納位置が用いられ得る。各コア側アドレス監視格納位置は、対応するコアの対応するハードウェアスレッド２１８―１，２１８―２に対して監視されるべきアドレス２２２―１，２２２―２を格納するように動作可能であってよい。そのような固定対応関係がある場合、格納位置にアドレスを格納することは、アドレスを対応するハードウェアスレッドと関連付け得る。複数の他の実施形態において、仮に複数の格納位置及び複数のハードウェアスレッドの間に固定対応関係がない場合、そうして各格納位置は、監視されるべきアドレスに対応するハードウェアスレッド（例えば、ハードウェアスレッド識別子）の表示を格納するのに用いられ得る。いくつかの実施形態において、各コア側アドレス監視格納位置はまた、対応するコアの対応するハードウェアスレッド２１８―１，２１８―２に対する監視状態２２４―１，２２４―２を格納するように動作可能であってよい。いくつかの実施形態において、各監視状態は、監視有限状態機械（ＦＳＭ）を表し得る。いくつかの実施形態において、ＭＯＮＩＴＯＲ命令である場合、本発明の範囲はこれに限定されないが、監視状態は、アイドリング状態、投機状態（例えば、監視ロード状態）、及びトリガ準備完了状態（例えば、トリガ待ち状態）のうち任意の１つであってよい。
【００２８】
いくつかの実施形態において、キャッシュ側アドレス監視ユニット２２６及びコア側アドレス監視ユニット２２０は、１つまたは複数のアドレス（例えば、ＭＯＮＩＴＯＲ命令によって示されたアドレス範囲のアドレス）への複数の書き込みに対して監視するように連携または一緒に作業し得る。複数の特定のコンセプトをさらに示すため、監視機構が如何にＭＯＮＩＴＯＲ及びＭＷＡＩＴ命令を実行し得るかの例を考慮する。第１のハードウェアスレッド２１８―１は、ＭＯＮＩＴＯＲ命令を実行し得る。ＭＯＮＩＴＯＲ命令は、書き込みに対して監視されるべきアドレスを示し得る。第１のハードウェアスレッドは、示された監視アドレスに対して対応するＭＯＮＩＴＯＲ要求を発行し得る。ＭＯＮＩＴＯＲ要求は、第１のコア側アドレス監視ユニット２２０に、示された監視アドレス２２２―１を第１のコア側アドレス監視格納位置２２１―１に格納させ得る。監視状態２２４―１は、投機状態または監視ロード状態に設定され得る。ＭＯＮＩＴＯＲ要求は、相互接続２１２上に、示された監視アドレスに対応するデータを格納すると想定される適切な分散キャッシュ部２０８へとルーティングされ得る。特定の示された監視アドレスに応じて、当該マッピングのために用いられるハッシュ関数または他のアルゴリズムに基づき、複数の分散キャッシュ部のうちの何れかであってよいことが留意されたい。キャッシュ側アドレス監視ユニットは、示された監視アドレスを、キャッシュ側アドレス監視格納位置２３０（例えば、位置２３０―１から２３０−Ｎのうち任意の利用可能な１つ）に格納してよい。第１のハードウェアスレッド２１８―１を有するコア２０２を識別するコア識別子はまた、コア識別子（ＩＤ）２３２として、キャッシュ側アドレス監視格納位置２３０に格納され得る。いくつかの実施形態において、コア識別子は、複数のコアのうちの１つを識別する複数のビットのセットであってよい。複数の他の実施形態において、単一格納位置が監視されている同一のアドレスに対して複数のコアによって共有され得るように、コアマスクは、任意選択的に用いられ得る。
【００２９】
第１のスレッド２１８―１はその次に、監視されているアドレスをまた示し得るＭＷＡＩＴ命令を実行し得る。第１のハードウェアスレッドは、示された監視アドレスに対して対応するＭＷＡＩＴ信号を発行し得る。ＭＷＡＩＴ信号に応答して、コア側アドレス監視ユニット２２０は、トリガ準備ができた状態（例えば、トリガ待ち状態）で監視状態２２４―１を設定し得る。第１のハードウェアスレッドは、例えば、スリープ状態または他の低減電力消費状態のような異なる状態に任意選択的に置かれ得る。代表的には、第１のスレッドは、当該スレッドがスリープすべきであって次にスリープする場合に、自己の状態をコンテキストに格納し得る。
【００３０】
続いて、示された監視アドレスへ書き込む意図がある場合（例えば、オーナシップ要求に対する読み出し、示された監視アドレスに関係しているスヌープの無効化、共有状態から排他的状態へと変更する当該アドレスと関連付けられる状態遷移など）、キャッシュ側アドレス監視ユニットは、そのような、アドレスへの書き込む意図を検出し得る。アドレスは、複数の自己の格納位置のうちの１つにおける複数のアドレスのうちの１つに一致し得る。格納位置に対応する１つまたは複数のコアは、例えば、キャッシュ側アドレス監視格納位置に格納されているコア識別子またはコアマスクによって、判断され得る。キャッシュ側アドレス監視ユニットは、示された監視アドレスを格納するのに用いられるキャッシュ側アドレス監視格納位置をクリアし得る。また、例えば、対応するコアに対するスヌープ無効化を送信することによって、対応するコアに信号を送ってもよい。キャッシュ側アドレス監視ユニットは、アドレスへ書き込む意図の通知を、選択的に、そのアドレスを監視していると分かっているそれら１つまたは複数のコアに対してのみ、（例えば、オーナシップまたはスヌープ無効化の要求を通じて）指図するのに役に立つ、一種の高度フィルタとして、機能してよい。これら複数の通知は、アドレスを監視している複数のコアのサブセットに選択的に提供される「複数のヒント」を表し得る。有利には、これは、アドレスを監視していない複数のコアへ通知することを回避するのに役に立ち得て、複数の偽のウェイクアップを回避するのに及び／または相互接続上のトラフィックを低減するのに役に立ち得る。
【００３１】
信号を送られたコアにおけるコア側アドレス監視ユニット２２０は、当該信号を受信し得、当該信号に（例えば、スヌープ無効化に）示されたアドレスを、自己の複数のコア側アドレス監視格納位置における複数の監視アドレスと比較し得る。当該信号のアドレスが、第１のハードウェアスレッド２１８―１に対応する第１のコア側監視アドレス格納位置２２１―１における監視アドレス２２２―１に一致することを判断し得る。コア側アドレス監視ユニットは、第１のハードウェアスレッドが監視されているアドレスに対応することを知り得る。コア側アドレス監視ユニットは、コア側トリガユニット２３４に、監視されているアドレスへ書き込む意図が観察されていることを信号にて知らせ得る。それは、第１のコア側アドレス監視格納位置をクリアし得て、監視状態２２４―１をアイドリング状態に変更し得る。コア側トリガユニットは、トリガ信号（例えば、警告、通知、またはウェイク信号）を、第１のハードウェアスレッドに提供するように動作可能であってよい。この実施形態において、コア側トリガユニットは、コア側にあり、ロジックを単純化するのに役に立ち得るが、キャッシュ側にもまた任意選択的に提供されてもよい。第１のハードウェアスレッドは、スリープ状態にあった場合は、ウェイクされ得る。
【００３２】
いくつかの実施形態において、キャッシュ側アドレス監視格納位置がオーバーフローし得る可能性がある。例えば、新たな監視要求は、キャッシュ側アドレス監視ユニットにおいて受信され得るが、キャッシュ側アドレス監視格納位置の全てが現在に使用されている場合があるので、新たな監視要求のアドレスを格納するための空き／利用可能なキャッシュ側アドレス監視格納位置がない。示されているように、いくつかの実施形態において、キャッシュ側アドレス監視ユニットは、キャッシュ部に対応するキャッシュ側アドレス監視格納オーバーフローユニット２３６に連結され得る。いくつかの実施形態において、キャッシュ側アドレス監視格納オーバーフローユニットは、新たな監視要求のアドレスを格納するのに利用可能な複数の空き／利用可能／未使用キャッシュ側アドレス監視格納位置がない場合に、アドレス監視格納オーバーフローポリシを強制または実施するように動作可能であってよい。
【００３３】
述べられたように、いくつかの実施形態において、コア側アドレス監視ユニットは、自己の対応するコアのハードウェアスレッドの数と同数のコア側アドレス監視格納位置を有し得る。同様に、いくつかの実施形態において、複数の他のコアのコア側アドレス監視ユニットは、これらの対応するコアのハードウェアスレッドの数と同数のコア側アドレス監視格納位置を有し得る。集合的には、これら複数のコア側アドレス監視格納位置は、プロセッサのハードウェアスレッド（または他の論理プロセッサ）の総数に及ぶコア側アドレス監視格納位置の１つのセットを表し得る。有利には、たとえキャッシュ側アドレス監視格納位置にオーバーフローが生じた場合であっても、コア側アドレス監視ユニットは、全てのハードウェアスレッド（または他の論理プロセッサ）に対して監視されているアドレスの全てを格納するのに十分なコア側アドレス監視格納位置を依然と有する。
【００３４】
図３は、ＭＯＮＩＴＯＲ命令及びＭＷＡＩＴ命令を実施するのに適した監視有限状態機械（ＦＳＭ）３４７の実施形態の複数の状態を示す図である。実行スレッドからアドレスに対する監視要求を受信すると、監視ＦＳＭは、アイドリング状態３４０から投機状態３４１へと遷移３４３を行い得る。アドレスに対応するデータを格納すべきキャッシュ部が当該アドレスに一致する書き込み要求を受信する場合、または実行スレッドから監視クリア要求が提供される場合、監視ＦＳＭが投機状態にある間に、当該監視ＦＳＭは、アイドリング状態３４０に戻すように遷移３４４を行い得る。別の監視要求が同一の実行スレッドから提供された場合、監視ＦＳＭは、投機状態３４１に戻すように遷移３４３を行い得、当該監視されたアドレスは、適切な場合は調整され得る。一方、投機状態３４１にある間にＭＷＡＩＴ要求が実行スレッドから提供される場合、監視ＦＳＭは、トリガ待ち状態３４２への遷移３４５を行い得る。投機状態は、たとえＭＷＡＩＴ要求を受信する前であっても、監視要求が受信されるときから複数のアドレスを追跡しながら、直近に監視されたアドレスに対してのみ複数の監視ウェイクイベントが送信されることを保証するのに役に立ち得る。監視ＦＳＭがトリガ待ち状態にある間に、アドレスに対応するデータを格納すべきキャッシュ部が、監視されているアドレスに一致する書き込み要求を受信する場合、監視ウェイクイベントは、実行スレッドへ送信され得る。一方、監視クリア要求は、監視ＦＳＭがトリガ待ち状態３４２にある間に、実行スレッドから提供され得る。このような場合、監視要求は、その実行スレッドに対して消去され得て、実行スレッドへ監視ウェイクイベントを送信する必要がない。しかし、これら２つの場合のいずれにおいても、監視ＦＳＭは、アイドリング状態３４０に戻す遷移３４６を行い得る。
【００３５】
図４は、複数の監視要求が同一アドレスを示している場合の複数のハードウェアスレッド及び／またはコアに対する単一キャッシュ側アドレス監視格納位置４２８を再利用するように動作可能なオーバーフロー回避ロジック４６０の実施形態のブロック図である。当該ロジックは、キャッシュ側アドレス監視格納位置４２８に連結されるキャッシュ側アドレス監視格納位置再利用ユニット４６４を含む。キャッシュ側アドレス監視格納位置再利用ユニットは、同一アドレスを示す複数の異なるハードウェアスレッド及び／またはコアから複数の監視要求４６２を受信し得る。１つ可能なアプローチは、複数の異なるキャッシュ側アドレス監視格納位置（例えば、ハードウェア実装テーブルの複数の異なるエントリ）におけるこの同一アドレスの複数の異なるコピーを格納することであろう。しかしながら、これは、複数またはいくつかの場合においては、多くのキャッシュ側アドレス監視格納位置を消費し得る。
【００３６】
もう１つのアプローチとして、いくつかの実施形態において、単一キャッシュ側アドレス監視格納位置４２８は、監視されるべきアドレス４３０を格納するのに用いられ得、複数の異なるハードウェアスレッドからの複数の監視要求を表し得る。いくつかの実施形態において、複数のコアを監視されるべきアドレスと関連付けることができる構造４３２はまた、キャッシュ側アドレス監視格納位置４２８に格納される。一例において、当該構造は、コアマスク構造４３２を含んでよい。コアマスクは、プロセッサのコアの総数と同数のビットを有し得、コアマスクの各ビットは、異なるコアに対して固定対応関係を有し得る。１つ可能な慣行によれば、各ビットは、対応するコアがアドレスに対して保留中の監視要求を有しないということを示す第１の値（例えば、バイナリ０へとクリアされる）、または対応するコアがアドレスに対して保留中の監視要求を有するということを示す第２の値（例えば、バイナリ１へと設定される）を有し得る。その逆の慣行もまた可能である。対応するコアのビットは、キャッシュ側アドレス監視格納位置に格納されているアドレスに対する監視要求が、そのコアから受信されていること、またはアドレスへの書き込みが観察されてコア側ロジックに報告された場合にクリアされていることを示すように、設定され得る。キャッシュ側アドレス監視格納位置がスレッド識別子にではなくアドレスによって追跡されることが留意されたい。有利には、このようにして、複数の異なるコアからの同一アドレスに対する複数の監視要求は、同一の単一キャッシュ側アドレス監視格納位置内に折り畳まれ得る。そのような、複数の異なるスレッド／コアからの複数の要求に対する格納位置の再利用は、キャッシュ側アドレス監視格納位置オーバーフローを回避するのに役に立ち得る。
【００３７】
上述されたように、いくつかの例において、キャッシュ側アドレス監視格納位置の限定される数をオーバーフローすることが可能である。いくつかの実施形態において、オーバーフローモードまたは複数のポリシのセットは、たとえオーバーフローのイベント中であっても、監視機構が正確に動作することを可能にするように、提供され得る。
【００３８】
図５は、複数の古くなった／旧式のキャッシュ側アドレス監視格納位置をチェックし、そのような複数の古くなった／旧式の格納位置が発見されない場合にはオーバーフローモードに入ることによって、オーバーフローモードを回避することを任意選択的に試みる方法５７０の実施形態のブロックフロー図である。いくつかの実施形態において、図５の複数の動作及び／または方法は、図１のプロセッサ及び／または図２のキャッシュエージェントによって、及び／またはそれらの内に、実行され得る。図１のプロセッサ及び／または図２のキャッシュエージェントに対して本明細書で説明されている複数のコンポーネント、複数の機能、及び複数の具体的で選択的な詳細はまた、図５の複数の動作及び／または方法に任意選択的に適用する。代替的に、図５の複数の動作及び／または方法は、同様のまたは異なるプロセッサ及び／またはキャッシュエージェントによって、及び／または、それらの内に実行され得る。さらに、図１のプロセッサ及び／または図２のキャッシュエージェントは、図５の複数の動作及び／または方法と同一の、同様の、または異なるものを実行し得る。
【００３９】
方法は、ブロック５７１で、受信された監視要求を処理する利用可能／未使用キャッシュ側アドレス監視格納位置がないことを判断する段階を任意選択的に含む。例えば、監視要求は、キャッシュ側アドレス監視ユニット（例えば、キャッシュ側アドレス監視ユニット２２６）において受信され得、キャッシュ側アドレス監視ユニットは、当該監視要求を処理する利用可能／未使用キャッシュ側アドレス監視格納位置がないことを判断し得る。例えば、キャッシュ側アドレス監視格納位置の全ては、監視されるべきアドレスを直ちに格納し得る。方法は、ブロック５７２で、古くなった／旧式のキャッシュ側アドレス監視格納位置が存在して新たに受信された監視要求を処理するのに用いられることができるか否かを判断する段階を任意選択的に含む。いくつかの実施形態において、キャッシュ側アドレス監視ユニットは、アドレスを有するエントリを選択して古くなった及び／または旧式か否かを判断し得る。例として、古くなった／旧式のアドレスは、依然と格納位置に格納されているが当該アドレスに対して現に有効な保留中の監視要求がないというアドレスを表し得る。例として、例えば、設定されているが準備されていないという監視に起因して、複数の偽の監視要求の場合があり得る。エントリは、エントリの時期に基づき、あるいは有効性の予測に基づき、ランダムに選択され得る。いくつかの実施形態において、格納位置が古くなった／旧式か否かをチェックすべく、キャッシュ側アドレス監視ユニットは、関連アドレスに対するスヌープ要求を、アドレスに対する複数の監視要求を有することを示された（例えば、格納位置に格納されているコア識別子またはコアマスクに基づいて判断された）１つまたは複数のコアへ送信し得る。スヌープ要求を受信するコアの１つまたは複数のコア側アドレス監視ユニットは、アドレスが格納されているか否かを判断するように、これらの複数の対応するコア側アドレス監視格納位置をチェックし得る。次に、１つまたは複数のコア側アドレス監視ユニットの各々は、アドレスが依然と有効（例えば、対応するコアからの有効な監視要求に依然と対応している）か否かを示す応答を、キャッシュ側アドレス監視ユニットへ送り返し得る。１つまたは複数のコア側アドレス監視ユニットからの複数の応答が、アドレスに対する任意の複数のそのような有効で依然と保留中の監視要求を示す場合、アドレス及び／または格納位置は次に、古くなった／旧式ではないと判断されてよい。そうでなければ、コア側アドレス監視ユニットがアドレスに対する有効で依然と保留中の監視要求を報告していない場合には、アドレス及び／または格納位置は次に、古くなった／旧式と判断され得る。いくつかの実施形態において、単一格納位置及び／またはアドレスのみが、そのようなアプローチを用いてチェックされ得る。代替的に、複数の格納位置及び／またはアドレスは、そのようなアプローチを用いてチェックされ得る。
【００４０】
図５を再び参照すると、ブロック５７２で新たに受信される監視要求を処理するのに用いられることができるそのような古くなった／旧式のキャッシュ側アドレス監視格納位置があると判断される場合（すなわち、ブロック５７２の「はい」がその判断である）、方法は次に、ブロック５７３へ任意選択的に進めてよい。ブロック５７３では、古くなった／旧式のキャッシュ側アドレス監視格納位置は、新たに受信された監視要求を処理するのに任意選択的に用いられ得る。有利には、この場合、オーバーフローモードは、古くなった／旧式の格納位置を利用することによってこの時点で回避され得る。
【００４１】
代替的に、ブロック５７２でそのような古くなった／旧式のキャッシュ側アドレス監視格納位置がないと判断される場合（すなわち、ブロック５７２の「いいえ」がその判断である）、方法は次に、ブロック５７４へ進めてよい。ブロック５７４では、方法は、オーバーフローモードに入り得る。オーバーフローモードに入ることは、複数のオーバーフローポリシを強制または実施することを含んでよい。オーバーフローモードにおいて、性能はいく分低下され得る。しかしながら、多くの場合、オーバーフローモードが実行されることはまれにしか必要とされなく、通常、オーバーフローの状況が緩和されるまでの比較的に短い期間においてのみ必要とされる。
【００４２】
一オーバーフローポリシとして、ブロック５７５では、方法は、共有キャッシュコヒーレンシ状態を用いるように、全ての読み出しトランザクションを実行する段階を含んでよい。概念的には、これは、全ての読み出しトランザクションを監視要求として取り扱うとされてよい。オーバーフローモードに入ると、キャッシュ側アドレス監視ユニットはもはや、専用ストレージで複数の監視要求／アドレスを追跡することができなくなる。従って、キャッシュラインの排他的コピーを有することが可能なコアがない。例えば、キャッシュ側アドレス監視ユニットによって受信された任意の読み出し動作は、共有状態応答で処理され得る。対応するアドレスへ書き込む意図が、スヌープまたはブロードキャストが当該アドレスをキャッシュしたかもしれない複数のコアの全てに提供されるであろうということを保証するのに、共有状態を用いるそのような読み出しトランザクションを実行することは、役に立ち得る。
【００４３】
別のオーバーフローポリシとして、ブロック５７６では、方法は、任意の無効化要求を、複数の保留中の監視要求を有する可能性のある全てのコアへ送信する段階を含む。いくつかの実施形態において、これは、任意の無効化要求が（例えば、所有の読み出し無効化要求またはスヌープ無効化要求などの検出を通じて）検出された場合、複数の保留中の監視要求を有する可能性がある、プロセッサの及び／または同一ソケット内の全てのコアのスヌープ無効化を含み得る。オーバーフローモードに入ると、キャッシュ側アドレス監視ユニットはもはや、専用ストレージで複数の監視要求／アドレスを追跡することができなくなる。従って、複数の保留中の監視要求を有する可能性がある全てのコアには、全ての無効化要求が通知されるはずである。スヌープは、そのような全てのコアの複数のコア側アドレス監視ユニットに到達し得、適切な場合は複数の監視トリガを、関連アドレスに対して有効な保留中の監視要求がある任意の複数のコアへ提供し得る。
【００４４】
プロセッサの全てのコアに通知することが厳密に要求されなく、むしろ、複数の保留中の監視要求を有する可能性のある全てのコアのみに通知する必要があることが留意されるべきである。いくつかの実施形態において、構造は、オーバーフローが発生する場合に複数の保留中の監視要求を有する可能性のある全てのコアを把握するのに任意選択的に用いられ得る。そのような構造の一例は、選択的なオーバーフロー構造である。オーバーフロー構造は、オーバーフローが発生した場合にどのコアが複数の保留中の監視要求を有する可能性があるかを示し得る。一例において、オーバーフロー構造は、プロセッサのコアの総数と同数のビットを有し得、各ビットは、異なる対応するコアに対して固定対応関係を有し得る。１つ可能な慣行によれば、各ビットは、オーバーフローが発生した場合に対応するコアが保留中の監視要求を有する可能性があるということを示す第１の値（例えば、バイナリワン（ｂｉｎａｒｙ  ｏｎｅ）へ設定される）を有し得、または、オーバーフローが発生した場合に対応するコアが保留中の監視要求を有する可能性がないということを示す第２の値（例えば、バイナリゼロ（ｂｉｎａｒｙ  ｚｅｒｏ）とクリアされる）を有し得る。
【００４５】
一実施形態において、自己によるオーバーフロー構造は、オーバーフローが発生した場合に複数の保留中の監視要求を有する可能性がある複数のコアの全てを反映し得る。例えば、オーバーフローが発生した場合、オーバーフロー構造は、複数のキャッシュ側アドレス監視格納位置に現に格納されている任意の１つまたは複数のアドレスに対応する全てのコアを反映するように変更され得る。別の実施形態において、複数のキャッシュ側アドレス監視格納位置と組み合わせたオーバーフロー構造は、オーバーフローが発生した場合に複数の保留中の監視要求を有する可能性がある複数のコアの全てを反映し得る。例えば、オーバーフローが発生した場合、キャッシュ側アドレス監視格納位置が新たに受信された監視要求によって上書きされまたは消費されるたびに、当該上書きされまたは消費された複数のアドレスと関連付けられる複数のコアは、オーバーフロー構造に反映され得る。すなわち、オーバーフロー構造は、複数の保留中の監視要求を有する可能性がある複数のコアに関する情報を得るように、格納素子が上書きされるたびに、更新され得る。そのような実施形態において、オーバーフローが発生した場合にどのコアが保留中の監視要求を有する可能性があるかに関する情報は、キャッシュ側アドレス監視格納位置及びオーバーフロー構造の間に分割される。
【００４６】
そのようなオーバーフロー構造または関連構造が用いられる実施形態において、いかなる受信された無効化要求も全てのコアへ送信することが必須ではない。むしろ単に、オーバーフローベクトル及び／または複数の格納位置によって複数の保留中の監視要求を有する可能性があることを示されたそれら複数のコアに送信する。いくつかのコアは、オーバーフローベクトル及び／または複数の格納位置において示されなくてよく、従って、オーバーフローが発生した場合にいかなる保留中の監視要求も有する可能性があるはずがない。従って、複数の無効化要求が送信される必要はない。しかしながら、そのようなオーバーフロー構造の使用は、選択的で必須ではない。
【００４７】
再び図５を参照すると、オーバーフローモードは、利用可能な格納位置がない限り、必要に応じてブロック５７５及び５７６を繰り返すことによって続いてよい。しかし、ブロック５７６で、オーバータイムの古くなった／旧式のアドレス及び／または複数の格納位置は、スヌーピングすることによって、またはそうでなければ、任意の無効化要求を、複数の保留中の監視要求を有する可能性がある全てのコアへ送信することによって、能動的に取り除かれ得る。複数のコア側アドレス監視ユニットがスヌープまたは無効化要求に対して有効で保留中の監視要求を有しない場合、それらは次にこれに関して報告し返し得、キャッシュ側アドレス監視ユニットにコアがアドレスを監視することに関知しないということを反映させる（例えば、コアマスクを更新する）こと、または、当該アドレスに関知する他のコアがない場合に当該格納位置をクリアすることを可能にし得る。様々な実施形態において、古くなった／旧式の格納位置の除去は、特定のアドレス、特定のキャッシュ部、特定のコアなどに基づいて実行され得る。オーバーフローマスクはまた、複数の古くなった／旧式の格納位置またはアドレスのクリーンアップを反映するように変更され得る。例えば、保留中の監視要求をもはや有しないコアは、オーバーフローマスクにおいてワン（ｏｎｅ）の代わりに、ゼロ（ｚｅｒｏ）へと更新され得る。このようにして、ブロック５７６における複数のスヌープまたは無効化要求は、ある時点でオーバーフローモードから出ることができるように、複数のオーバータイムの古くなった／旧式の格納素子またはアドレスをクリーンアップするのに役に立ち得る。ブロック５７７に示されているように、オーバーフローモードから抜け出られ得る。
【００４８】
これは、単に１つの例示的な実施形態である。この実施形態における多くの変形は、企図される。例えば、ブロック５７２における判断は、選択的で必須ではない。他の実施形態において、オーバーフローモードは、可能な古くなったエントリ／アドレスに対するチェックが無くても自動的に入られてよい。
【００４９】
図６は、オーバーフロー構造６８０の実施形態のブロック図である。オーバーフロー構造は、オーバーフローが発生した場合にどのコアが保留中の監視要求を有する可能性があるかを示すのに、単独か、またはキャッシュ側アドレス監視格納位置のセットとの組み合わせのどちらかが用いられ得る。この実施形態において、オーバーフロー構造は、各々がＮ＋１のコア（例えば、コア０からコアＮ）のうち異なる１つに対して固定対応関係を有する、Ｎ＋１のビットを含む。１つの可能な慣行によれば、各ビットは、オーバーフローが発生した場合に対応するコアが保留中の監視要求を有する可能性があるということを示す第１の値（例えば、バイナリワン（ｂｉｎａｒｙ  ｏｎｅ）へ設定される）を有し得、または、オーバーフローが発生した場合に対応するコアが保留中の監視要求を有する可能性がないということを示す第２の値（例えば、バイナリゼロ（ｂｉｎａｒｙ  ｚｅｒｏ）へクリアされる）を有し得る。例えば、図において、コア０に対応する最左ビットは、コア０が保留中の監視要求を有しないということを示すバイナリゼロ（すなわち、０）を有し、コア１に対応する次の最左ビットは、コア１が保留中の監視要求を有するということを示すバイナリワン（すなわち、１）を有し、コアＮに対応する最右ビットは、コアＮが保留中の監視要求を有しないということを示すバイナリゼロ（すなわち、０）を有する。これは単に適したオーバーフロー構造の１つ例示的な例である。複数の他の構造が同一または同様の種類の情報を伝達するのに用いられ得ることが理解されたい。例えば、別の実施形態において、複数の保留中の監視要求を有する複数のコアＩＤのリストは、構造などに格納され得る。
【００５０】
本明細書に開示されている複数の監視機構、及びそれらの複数のユニットまたはコンポーネントのうちの何れかは、ハードウェア（例えば、集積回路、複数のトランジスタまたは複数の他の回路素子など）、ファームウェア（例えば、ＲＯＭ、ＥＰＲＯＭ、フラッシュメモリ、または他の永続的もしくは不揮発性メモリ及びマイクロコード、複数のマイクロ命令、もしくはそれらに格納されている複数の他の下位レベル命令）、ソフトウェア（例えば、メモリに格納されている複数の上位レベル命令）、またはそれらの組み合わせ（例えば、１つまたは複数のファームウェア及び／またはソフトウェアと潜在的に組み合わせたハードウェア）に実装され得る。
【００５１】
図１、３、４及び６の何れかについて説明されている複数のコンポーネント、複数の機能、及び複数の詳細はまた、図２及び５の何れかに任意選択的に用いられ得る。さらに、本装置の何れかに対して本明細書で説明された複数のコンポーネント、複数の機能、及び複数の詳細はまた、本明細書で説明された方法の何れかにも任意選択的に用いられ得、複数の実施形態においてそのような装置によって及び／またはそれと共に、実行されることができる。［例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ］
【００５２】
複数のプロセッサコアは、複数の異なる目的で、複数の異なる態様により複数の異なるプロセッサに実装され得る。例えば、このような複数のコアの複数の実装は、１）汎用コンピューティング向け汎用インオーダコア、２）汎用コンピューティング向け高性能汎用アウトオブオーダコア、及び３）主にグラフィックス及び／またはサイエンティフィック（スループット）コンピューティング向けの特定用途向けコアを含んでよい。複数の異なるプロセッサの複数の実装は、１）１つまたは複数の汎用コンピューティング向け汎用インオーダコア及び／または汎用コンピューティング向け１つまたは複数の汎用アウトオブオーダコアを含むＣＰＵ、及び２）主にグラフィックス及び／またはサイエンティフィック（スループット）向けの１つまたは複数の特定用途向けコアを含むコプロセッサを含んでよい。そのような複数の異なるプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同一のパッケージ内で個別のダイ上のコプロセッサ、３）ＣＰＵと同一のダイ上のコプロセッサ（この場合、そのようなコプロセッサは、場合によっては統合グラフィックス及び／またはサイエンティフィック（スループット）ロジックのような特定用途向けロジック、または複数の特定用途向けコアと称される）、及び４）同一のダイ上で、説明されたＣＰＵ（場合によってはアプリケーションコアまたはアプリケーションプロセッサと称される）、上述したコプロセッサ及び追加的な機能性を含み得るシステムオンチップを含み得る、複数の異なるコンピュータシステムアーキテクチャをもたらす。複数の例示的なコアアーキテクチャが次に説明され、続いて、複数の例示的なプロセッサ及びコンピュータアーキテクチャが説明される。
［例示的なコアアーキテクチャ］［インオーダ及びアウトオブオーダコアのブロック図］
【００５３】
図７Ａは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図７Ｂは、本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図７Ａ−Ｂの複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、任意的追加の複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様について説明する。
【００５４】
図７Ａにおいて、プロセッサパイプライン７００は、フェッチ段階７０２、長さ復号段階７０４、復号段階７０６、配分段階７０８、リネーミング段階７１０、スケジューリング（ディスパッチまたは発行としても知られる）段階７１２、レジスタ読み出し／メモリ読み出し段階７１４、実行段階７１６、ライトバック／メモリ書き込み段階７１８、例外処理段階７２２及びコミット段階７２４を含む。
【００５５】
図７Ｂは、実行エンジンユニット７５０に連結されるフロントエンドユニット７３０を含むプロセッサコア７９０を示し、両方ともメモリユニット７７０に連結される。コア７９０は、縮小命令セットコンピュータ（ＲＩＳＣ）コア、複合命令セットコンピュータ（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは代替的なコア種類であってよい。また別の選択肢として、コア７９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどのような特定用途向けコアであってよい。
【００５６】
フロントエンドユニット７３０は、命令キャッシュユニット７３４に連結された分岐予測ユニット７３２を含み、命令キャッシュユニット７３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）７３６に連結され、ＴＬＢ７３６は、命令フェッチユニット７３８に連結され、命令フェッチユニット７３８は、復号ユニット７４０に連結される。復号ユニット７４０（またはデコーダ）は、複数の命令を復号し得、複数の元の命令から復号され、あるいは反映し、もしくは派生される、１つまたは複数のマイクロ動作、マイクロコードエントリポイント、マイクロ命令，他の命令、または他の制御信号の出力として生成し得る。復号ユニット７４０は、様々な異なる機構を用いて実装され得る。複数の適した機構の複数の例は、限定されるものではないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ（ＰＬＡ）、複数のマイクロコードリードオンリメモリ（ＲＯＭ）などを含む。一実施形態において、コア７９０は、マイクロコードＲＯＭまたは複数の特定のマイクロ命令に対するマイクロコードを（例えば、復号ユニット７４０に、またはそうでなければフロントエンドユニット７３０内に）格納する他の媒体を含む。復号ユニット７４０は、実行エンジンユニット７５０内のリネーム／アロケータユニット７５２に連結される。
【００５７】
実行エンジンユニット７５０は、リタイアメントユニット７５４及び１つまたは複数のスケジューラユニット７５６のセットに連結されたリネーム／アロケータユニット７５２を含む。スケジューラユニット７５６は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット７５６は、物理レジスタファイルユニット７５８に連結される。物理レジスタファイルユニット７５８の各々は、１つまたは複数の物理レジスタファイルを表し、それらのうちの複数の異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（例えば、実行される次の命令のアドレスである命令ポインタ）などのような、１つまたは複数の異なるデータ種類を格納する。一実施形態において、物理レジスタファイルユニット７５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これら複数のレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、及び複数の汎用レジスタを提供してよい。物理レジスタファイルユニット７５８は、リタイアメントユニット７５４と重なり、レジスタリネーミング及びアウトオブオーダ実行が（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いることにより、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いることにより、複数のレジスタのレジスタマップ及びプールを用いることにより、など）実装され得る様々な態様を示す。リタイアメントユニット７５４及び物理レジスタファイルユニット７５８は、実行クラスタ７６０に連結される。実行クラスタ７６０は、１つまたは複数の実行ユニット７６２のセット及び１つまたは複数のメモリアクセスユニット７６４のセットを含む。複数の実行ユニット７６２は、様々な動作（例えば、複数のシフト、加算、減算、乗算）及び様々な種類のデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）を実行し得る。いくつかの実施形態は、複数の具体的な関数または関数のセットに対する専用の多数の実行ユニットを含んでよい一方で、他の実施形態は、１つのみの実行ユニットまたは全ての関数を全てが実行する複数の実行ユニットを含んでよい。スケジューラユニット７５６、物理レジスタファイルユニット７５８及び実行クラスタ７６０は、複数として示される可能性があるが、その理由は、特定の実施形態は、複数の特定のデータ型／オペレーションに対して個別のパイプラインを生成するからである（例えば、各々がこれら自己のスケジューラユニット、物理レジスタファイルユニット及び／または実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン及び／またはメモリアクセスパイプライン、及び、個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット７６４を有する特定の実施形態が実装される）。複数の個別のパイプラインが用いられる場合、これらのパイプラインのうちの１つまたは複数がアウトオブオーダ発行／実行であり、残りがインオーダであってよいこともまた理解されるべきである。
【００５８】
メモリアクセスユニット７６４のセットは、データＴＬＢユニット７７２を含むメモリユニット７７０に連結され、データＴＬＢユニット７７２は、データキャッシュユニット７７４に連結され、データキャッシュユニット７７４は、レベル２（Ｌ２）キャッシュユニット７７６に連結される。例示的な一実施形態では、複数のメモリアクセスユニット７６４は、ロードユニット、ストアアドレスユニット及びストアデータユニットを含んでよく、これらの各々は、メモリユニット７７０内のデータＴＬＢユニット７７２に連結される。命令キャッシュユニット７３４は、メモリユニット７７０内のレベル２（Ｌ２）キャッシュユニット７７６に、さらに連結される。Ｌ２キャッシュユニット７７６は、１つまたは複数の他のレベルのキャッシュ、及び最終的にはメインメモリに連結される。
【００５９】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン７００を以下のとおり実装してもよい。１）命令フェッチ７３８が、フェッチ段階７０２及び長さ復号段階７０４を実行し、２）復号ユニット７４０が、復号段階７０６を実行し、３）リネーム／アロケータユニット７５２が、配分段階７０８及びリネーミング段階７１０を実行し、４）スケジューラユニット７５６が、スケジューリング段階７１２を実行し、５）物理レジスタファイルユニット７５８及びメモリユニット７７０が、レジスタ読み出し／メモリ読み出し段階７１４を実行し、実行クラスタ７６０が、実行段階７１６を実行し、６）メモリユニット７７０及び物理レジスタファイルユニット７５８が、ライトバック／メモリ書き込み段階７１８を実行し、７）様々な複数のユニットが、例外処理段階７２２に関与してもよく、かつ８）リタイアメントユニット７５４及び物理レジスタファイルユニット７５８が、コミット段階７２４を実行する。
【００６０】
コア７９０は、本明細書で説明される命令を含む１つまたは複数の命令セット（例えば、ｘ８６命令セット（複数のより新しいバージョンが追加されているいくつかの拡張を有する）カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスの（ＮＥＯＮのような任意の複数の追加的な拡張を有する）ＡＲＭ命令セット）をサポートしてよい。一実施形態において、コア７９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それによりパックドデータを用いて実行されるべき多くのマルチメディアアプリケーションによって用いられる複数の動作を可能とする。
【００６１】
コアは、マルチスレッディング（複数のオペレーションまたは複数のスレッドの２つ又はそれより多くの並列セットを実行すること）をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング（単一の物理コアが複数のスレッドのそれぞれに対して論理コアを提供することにより、物理コアが同時にマルチスレッディングをすること）またはそれらの組み合わせ（例えば、時分割フェッチ及び復号化、その後、インテル（登録商標）ハイパースレッディングテクノロジなどでの同時マルチスレッディング）を含む様々な態様で、マルチスレッディングをしてもよいことを理解されるべきである。
【００６２】
レジスタリネーミングを、アウトオブオーダ実行との関連で説明しているが、インオーダアーキテクチャにおいて、レジスタリネーミングが用いられてよいことは理解されるべきである。示されたプロセッサの実施形態は、個別の命令及びデータキャッシュユニット７３４／７７４、及び共有のＬ２キャッシュユニット７７６をまた含む一方で、複数の代替的な実施形態は、複数の命令及びデータの両方のために、例えば、レベル１（Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュのような単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュとコア及び／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、キャッシュの全ては、コア及び／またはプロセッサの外部にあってよい。［具体的な例示的インオーダコアアーキテクチャ］ 
【００６３】
図８Ａ−Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかのロジックブロック（同一の種類及び／または異なる種類の他の複数のコアを含む）のうちの１つであってもよい。複数のロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、いくつかの固定関数ロジック、メモリＩ／Ｏインターフェース及び他の必要なＩ／Ｏロジックと通信を行う。
【００６４】
図８Ａは、本発明の複数の実施形態に係る単一プロセッサコアのブロック図であり、オンダイ相互接続ネットワーク８０２との接続及びレベル２（Ｌ２）キャッシュローカルサブセット８０４と共に示される。一実施形態において、命令デコーダ８００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ８０６は、スカラ及びベクトルユニット内にキャッシュメモリに対する低レイテンシアクセスを可能にする。一実施形態において（設計の単純化のために）、スカラユニット８０８及びベクトルユニット８１０は、個別の複数のレジスタセット（それぞれ、複数のスカラレジスタ８１２及び複数のベクトルレジスタ８１４）を用い、これらの間で転送されるデータは、メモリに書き込まれ、次にレベル１（Ｌ１）キャッシュ８０６から再読み出しされるが、本発明の複数の代替的な実施形態は、異なるアプローチ（例えば、単一のレジスタセットを用い、または、データが書き込み及び再読み出しされることなく２つのレジスタファイル間で転送されることを可能とする通信パスを含む）を用いてもよい。
【００６５】
Ｌ２キャッシュローカルサブセット８０４は、１つのプロセッサコアあたり１つの個別のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、自己のＬ２キャッシュローカルサブセット８０４に対するダイレクトアクセスパスを有する。プロセッサコアに読み出されたデータは、自己のＬ２キャッシュサブセット８０４に格納され、迅速かつ、これら自己の複数のローカルＬ２キャッシュサブセットにアクセスする他の複数のプロセッサコアと並列に、アクセスされることができる。プロセッサコアにより書き込まれたデータは、自己のＬ２キャッシュサブセット８０４に格納され、必要な場合には、他の複数のサブセットからフラッシュされる。リングネットワークは、共有のデータに対するコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のＬ２キャッシュ及び他の複数のロジックブロックのようなエージェントにチップ内で互いに通信を行わせる。各リングデータパスは、一方向あたり１０１２ビット幅である。
【００６６】
図８Ｂは、本発明の複数の実施形態に係る図８Ａのプロセッサコアの一部の拡大図である。図８Ｂは、Ｌ１キャッシュ８０６のＬ１データキャッシュ８０６Ａ部分、並びに、ベクトルユニット８１０及び複数のベクトルレジスタ８１４に関するより細かな詳細を含む。具体的には、ベクトルユニット８１０は、１６ワイドベクトル処理ユニット（ＶＰＵ）（１６ワイドＡＬＵ８２８を参照）であり、１つまたは複数の整数、単精度浮動、及び倍精度浮動命令を実行する。ＶＰＵは、スウィズルユニット８２０による複数のレジスタ入力のスウィズル、数値変換ユニット８２２Ａ−Ｂによる数値変換、及び複製ユニット８２４によるメモリ入力に対する複製をサポートする。複数の書き込みマスクレジスタ８２６は、結果的な複数のベクトル書き込みを叙述することを可能にする。［統合メモリコントローラ及びグラフィックスを有するプロセッサ］
【００６７】
図９は、本発明の複数の実施形態に係るプロセッサ９００のブロック図であり、プロセッサ９００は、１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してもよい。図９の複数の実線のボックスは、単一のコア９０２Ａ、システムエージェント９１０、１つまたは複数のバスコントローラユニット９１６のセットを有するプロセッサ９００を示し、選択的に追加された複数の破線のボックスは、複数のコア９０２Ａ−Ｎを有する代替的なプロセッサ９００、システムエージェントユニット９１０内の１つまたは複数の統合メモリコントローラユニット９１４のセット及び特定用途向けロジック９０８を示す。
【００６８】
こうして、プロセッサ９００の異なる複数の実装は、１）（１つまたは複数のコアを含み得る）統合グラフィックス及び／またはサイエンティフィック（スループット）ロジックである特定用途向けロジック９０８、及び１つまたは複数の汎用コア（例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら２つの組み合わせ）である複数のコア９０２Ａ−Ｎを有するＣＰＵ、２）主にグラフィックス及び／またはサイエンティフィック（スループット）向けの多数の特定用途向けコアである複数のコア９０２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアである複数のコア９０２Ａ−Ｎを有するコプロセッサを含んでよい。このように、プロセッサ９００は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、（３０またはそれより多くのコアを含む）ハイスループット多数統合コア（ＭＩＣ）コプロセッサ、組み込みプロセッサなどのような汎用プロセッサ、コプロセッサまたは特定用途向けプロセッサであり得る。プロセッサは、１つまたは複数のチップ上に実装され得る。プロセッサ９００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳのような多数の処理技術の何れかを用いて、１つまたは複数の基板の一部であってよく、及び／またはその上に実装されてもよい。
【００６９】
メモリ階層は、複数のコア、１つまたは複数の共有キャッシュユニット９０６またはそのセット、及び複数の統合メモリコントローラユニット９１４のセットに連結される外部メモリ（図示せず）内に、１つまたは複数のレベルのキャッシュを含む。複数の共有キャッシュユニット９０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）または他の複数のレベルのキャッシュなどの１つまたは複数の中位レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）及び／またはそれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット９１２が、統合グラフィックスロジック９０８、複数の共有キャッシュユニット９０６のセット及びシステムエージェントユニット９１０／統合メモリコントローラユニット９１４を相互接続する一方、複数の代替的な実施形態においては、そのような複数のユニットを相互接続するための任意の数の周知技術を用いてよい。一実施形態において、コヒーレンシは、１つまたは複数のキャッシュユニット９０４及びコア９０２Ａ−Ｎの間に維持される。
【００７０】
いくつかの実施形態において、複数のコア９０２Ａ−Ｎのうちの１つまたは複数は、マルチスレッディングすることができる。システムエージェント９１０は、コア９０２Ａ−Ｎを調整及び作動するそれら複数のコンポーネントを含む。システムエージェントユニット９１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでよい。ＰＣＵは、複数のコア９０２Ａ−Ｎ及び統合グラフィックスロジック９０８の電力状態を調整するために必要なロジック及び複数のコンポーネントであってよく、またはこれらを含んでもよい。ディスプレイユニットは、１つまたは複数の外部接続ディスプレイを駆動するためのものである。
【００７１】
複数のコア９０２Ａ−Ｎは、アーキテクチャ命令セットに関して同種または異種であってもよく、すなわち、複数のコア９０２Ａ−Ｎのうちの２つまたはそれより多くは、同一の命令セットを実行可能であってよいが、他は、その命令セットまたは異なる命令セットのサブセットのみを実行可能であってもよい。［例示的なコンピュータアーキテクチャ］ 
【００７２】
図１０−１３は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野で既知の他の複数のシステム設計及び複数の構成はまた適切である。概して、本明細書で開示されるように、プロセッサ及び／または他の実行ロジックを組み込み可能な多様なシステムまたは電子デバイスが、概して適切である。
【００７３】
ここで図１０を参照すると、本発明の一実施形態に係るシステム１０００のブロック図が示される。システム１０００は、コントローラハブ１０２０に連結される１つまたは複数のプロセッサ１０１０、１０１５を含んでよい。一実施形態において、コントローラハブ１０２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）１０９０及び入力／出力ハブ（ＩＯＨ）１０５０（複数の別個のチップ上にあり得る）を含む。ＧＭＣＨ１０９０は、メモリコントローラ及びグラフィックスコントローラを含み、これらはメモリ１０４０及びコプロセッサ１０４５に連結される。ＩＯＨ１０５０は、入力／出力（Ｉ／Ｏ）デバイス１０６０をＧＭＣＨ１０９０に連結する。代替的に、メモリ及び複数のグラフィックスコントローラの一方または両方は、プロセッサ内に統合され（本明細書に説明されているように）、メモリ１０４０及びコプロセッサ１０４５は、プロセッサ１０１０及び単一のチップ内でＩＯＨ１０５０を有するコントローラハブ１０２０に直接に連結される。
【００７４】
複数の追加のプロセッサ１０１５の選択的な特性が、図１０に複数の破線で示される。各プロセッサ１０１０、１０１５は、本明細書で説明される複数の処理コアのうちの１つまたは複数を含んでもよく、プロセッサ９００のあるバージョンであってもよい。
【００７５】
メモリ１０４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）またはこれら２つの組み合わせであってよい。少なくとも１つの実施形態について、コントローラハブ１０２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、クイックパス相互接続（ＱＰＩ）のようなポイントツーポイントインターフェースまたは同様の接続１０９５を介して、プロセッサ１０１０、１０１５と通信を行う。
【００７６】
一実施形態において、コプロセッサ１０４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのような特定用途向けプロセッサである。一実施形態において、コントローラハブ１０２０は、統合グラフィックスアクセラレータを含んでもよい。
【００７７】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む、性能の測定基準の範囲の観点において、物理リソース１０１０、１０１５の間には様々な差異が存在し得る。
【００７８】
一実施形態において、プロセッサ１０１０は、一般的な種類の複数のデータ処理動作を制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてよい。プロセッサ１０１０は、これらの複数のコプロセッサ命令を、取り付けられたコプロセッサ１０４５によって実行されるべき種類のものと認識する。従って、プロセッサ１０１０は、これらの複数のコプロセッサ命令（または複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサバスまたは他の相互接続上で、コプロセッサ１０４５に対して発行する。コプロセッサ１０４５は、受信された複数のコプロセッサ命令を受け付けて実行する。
【００７９】
ここで、図１１を参照すると、本発明の実施形態に係る第１のより具体的な例示的システム１１００のブロック図が示される。図１１に示されるように、マルチプロセッサシステム１１００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１１５０を介して連結される第１のプロセッサ１１７０及び第２のプロセッサ１１８０を含む。プロセッサ１１７０及び１１８０の各々は、プロセッサ９００のあるバージョンであってよい。本発明の一実施形態において、プロセッサ１１７０及び１１８０は、それぞれプロセッサ１０１０及び１０１５であり、コプロセッサ１１３８は、コプロセッサ１０４５である。別の実施形態において、プロセッサ１１７０及び１１８０は、それぞれプロセッサ１０１０及びコプロセッサ１０４５である。
【００８０】
プロセッサ１１７０及び１１８０は、統合メモリコントローラ（ＩＭＣ）ユニット１１７２及び１１８２をそれぞれ含むものとして示される。プロセッサ１１７０はまた、自己のバスコントローラユニットの一部として、複数のポイントツーポイント（Ｐ−Ｐ）インターフェース１１７６及び１１７８をさらに含み、同様に、第２のプロセッサ１１８０は、複数のＰ−Ｐインターフェース１１８６及び１１８８を含む。複数のプロセッサ１１７０、１１８０は、複数のＰ−Ｐインターフェース回路１１７８、１１８８を用いたポイントツーポイント（Ｐ−Ｐ）インターフェース１１５０を介して、情報を交換してもよい。図１１に示されるように、ＩＭＣ１１７２及び１１８２は、複数のプロセッサをそれぞれのメモリ、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの部分となり得るメモリ１１３２及びメモリ１１３４に連結する。
【００８１】
複数のプロセッサ１１７０、１１８０の各々は、複数のポイントツーポイントインターフェース回路１１７６、１１９４、１１８６、１１９８を用いる個々のポイントツーポイントインターフェース１１５２、１１５４を介して、チップセット１１９０と情報を交換してよい。チップセット１１９０は、高性能インターフェース１１３９を介して、コプロセッサ１１３８と任意選択的に情報を交換し得る。一実施形態において、コプロセッサ１１３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどのような特定用途向けプロセッサである。
【００８２】
共有キャッシュ（図示せず）は、一方のプロセッサ内に含まれ、または両方のプロセッサの外側にあってよいが、プロセッサが低電力モード内に置かれた場合、一方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、Ｐ−Ｐ相互接続を介して複数のプロセッサに接続される。
【００８３】
チップセット１１９０は、インターフェース１１９６を介して、第１のバス１１１６に連結されてよい。一実施形態において、第１のバス１１１６は、周辺コンポーネント相互接続（ＰＣＩ）バス、または、ＰＣＩエクスプレスバスまたは別の第３世代Ｉ／Ｏ相互接続バスのようなバスであってよいが、本発明の範囲はそれに限定されない。
【００８４】
図１１に示されるように、様々なＩ／Ｏデバイス１１１４が、第１のバス１１１６を第２のバス１１２０に連結するバスブリッジ１１１８と共に、第１のバス１１１６に連結されてよい。一実施形態において、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックスアクセラレータもしくはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイまたは任意の他のプロセッサなどの１つまたは複数の追加のプロセッサ１１１５が、第１のバス１１１６に連結される。一実施形態において、第２のバス１１２０は、ローピンカウント（ＬＰＣ）バスであってよい。例えば、キーボード及び／またはマウス１１２２、通信デバイス１１２７、及びディスクドライブ、または複数の命令／コード及びデータ１１３０を含み得る他の大容量ストレージデバイスのような、ストレージユニット１１２８を含む様々なデバイスが、一実施形態においては、第２のバス１１２０に連結されてよい。さらに、オーディオＩ／Ｏ１１２４が、第２のバス１１２０に連結されてよい。複数の他のアーキテクチャが可能であることは留意されたい。例えば、図１１のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【００８５】
ここで、図１２を参照すると、本発明の実施形態に係る第２のより具体的な例示的システム１２００のブロック図が示される。図１１及び１２における同様の複数の素子には、同様の参照番号が付され、図１１の複数の特定の態様は、図１２の他の複数の態様の不明瞭を回避すべく、図１２では省略されている。
【００８６】
図１２は、複数のプロセッサ１１７０、１１８０は、それぞれ統合メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１１７２及び１１８２を含んでよいことを示す。こうして、ＣＬ１１７２、１１８２は、複数の統合メモリコントローラユニットを含み、かつ、Ｉ／Ｏ制御ロジックを含む。図１２は、メモリ１１３２、１１３４がＣＬ１１７２、１１８２に連結されるのみならず、複数のＩ／Ｏデバイス１２１４もまた制御ロジック１１７２、１１８２に連結されることを示す。複数のレガシＩ／Ｏデバイス１２１５は、チップセット１１９０に連結される。
【００８７】
ここで、図１３を参照すると、本発明の実施形態に係るＳｏＣ１３００のブロック図が示される。図９における同様の複数の素子には、同様の参照番号が付される。また、複数の破線のボックスは、複数のより高度なＳｏＣ上の複数の任意の機能である。図１３では、相互接続ユニット１３０２は、１つまたは複数のコア９０２Ａ―Ｎ及び共有キャッシュユニット９０６のセットを含むアプリケーションプロセッサ１３１０、システムエージェントユニット９１０、バスコントローラユニット９１６、統合メモリコントローラユニット９１４、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る１つまたは複数のコプロセッサ１３２０またはそのセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１３３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１３３２及び１つまたは複数の外部ディスプレイに連結するためのディスプレイユニット１３４０に連結される。一実施形態において、コプロセッサ１３２０は、特定用途向けプロセッサ、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサ、またはその他のようなものを含む。
【００８８】
本明細書に開示される複数の機構の複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせで実装されてよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び不揮発性メモリ及び／または複数の格納素子を含む）、少なくとも１つの入力デバイス及び少なくとも１つの出力デバイスを備えるプログラマブル複数のシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
【００８９】
図１１に示すコード１１３０のようなプログラムコードは、本明細書に説明される複数の関数を実行し、出力情報を生成するために、複数の入力命令に適用されてよい。出力情報は、１つまたは複数の出力デバイスに、既知の様式で適用されてよい。本願の複数の目的において、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
【００９０】
プログラムコードは、処理システムと通信を行うために、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリまたは機械言語で実装され得る。実際に、本明細書に説明されている複数の機構は、いかなる特定のプログラミング言語にも範囲限定されない。いかなる場合も、言語はコンパイラ型言語またはインタープリタ型言語であってよい。
【００９１】
少なくとも１つの実施形態の１つまたは複数の態様は、プロセッサ内の様々なロジックを表する機械可読媒体上に格納された複数の代表的命令により実装され、命令は、機械により読み出された場合、機械に本明細書で説明されているる複数の技術を実行するロジックを作成させ得る。「複数のＩＰコア」として知られるそのような複数の表現は、有形の機械可読媒体上に格納され、様々な顧客または製造施設に供給されて、実際にロジックまたはプロセッサを作り出す製造機械にロードされてよい。
【００９２】
そのような機械可読記憶媒体は、限定的ではないが、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、リライタブルコンパクトディスク（ＣＤ−ＲＷ）及び光磁気ディスクを含む任意の他の種類のディスク、リードオンリメモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、位相変化メモリ（ＰＣＭ）、磁気または光カードなどのランダムアクセスメモリ（ＲＡＭ）、または複数の電子的命令を格納するために適切な任意の他の種類の媒体などの記憶媒体を含む、機械またはデバイスによって製造もしくは形成される複数の物品の非一時的で有形の構成を含んでよい。従って、本発明の複数の実施形態はまた、非一時的で有形の機械可読媒体を含み、非一時的で有形の機械可読媒体は、複数の命令を含み、または本明細書で説明されている複数の構造、複数の回路、複数の装置、複数のプロセッサ及び／または複数のシステム機能を画定するハードウェア記述言語（ＨＤＬ）のような設計データを含む。そのような複数の実施形態はまた、複数のプログラム製品と称されてよい。［エミュレーション（バイナリトランスレーション、コードモーフィングなどを含む）］ 
【００９３】
いくつかの場合において、命令コンバータは、ソース命令セットからターゲット命令セットへ命令を変換するのに用いられてよい。例えば、命令コンバータは、命令をコアによって処理される１つまたは複数の他の命令に、トランスレート（例えば、スタティックバイナリトランスレーション、ダイナミックコンパイルを含むダイナミックバイナリトランスレーションを用いて）、モーフィング、エミュレート、あるいは変換してよい。命令コンバータはソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせに実装されてよい。命令コンバータは、プロセッサ上にあってもよく、プロセッサ外にあってもよく、または一部がプロセッサ上で一部がプロセッサ外にあってもよい。
【００９４】
図１４は、本発明の複数の実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比させるブロック図である。例示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェアまたはそれらの様々な組み合わせで実装されてもよい。図１４は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１４１６によってネイティブに実行され得るｘ８６バイナリコード１４０６を生成するために、ｘ８６コンパイラ１４０４を用いてコンパイルされ得る高水準言語１４０２のプログラムを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ１４１６は、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと実質的に同一の結果を実現すべく、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットの大部分、または（２）複数のアプリケーションのオブジェクトコードバージョン、もしくは少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサ上で動作することが想定された他のソフトウェアを互換可能に実行またはそうでなければ処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと実質的に複数の同一の関数を実行可能な任意のプロセッサを表す。ｘ８６コンパイラ１４０４は、追加のリンケージ処理の有無に関わらず、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１４１６上で実行可能なｘ８６バイナリコード１４０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１４は、少なくとも１つのｘ８６命令セットコア１４１４を有しないプロセッサ（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳの命令セットを実行及び／またはカリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブに実行され得る、代替的な命令セットバイナリコード１４１０を生成するべく、代替的な命令セットコンパイラ１４０８を用いてコンパイルされ得る高水準言語１４０２のプログラムを示す。命令コンバータ１４１２は、ｘ８６バイナリコード１４０６を、ｘ８６命令セットコアを有しないプロセッサ１４１４によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、このような変換ができる命令コンバータの製造は難しいので、代替的な命令セットバイナリコード１４１０と同一となる可能性は低いが、しかしながら変換されたコードは、一般的な動作を達成し、代替的な命令セットからの複数の命令により補完される。こうして、命令コンバータ１４１２は、エミュレーション、シミュレーションまたは任意の他の処理を介して、プロセッサまたはｘ８６命令セットプロセッサもしくはコアを有しない他の電子デバイスにｘ８６バイナリコード１４０６を実行させるソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせを表す。
【００９５】
説明及び特許請求の範囲で、「連結」及び／または「接続」という用語は、それらの複数の派生語と共に用いられてよい。これらの用語は、互いの類義語として意図されるものではないことは理解されるべきである。むしろ、複数の特定の実施形態において、「接続」は、２つまたはそれより多くの要素が、互いに直接物理的にまたは電気的に接触することを示すために用いられてよい。「連結」は、２つまたはそれより多くの素子が、直接物理的にまたは電気的に接触することを意味してよい。しかし、「連結」はまた、２つまたはそれより多くの素子が互いに直接接触しないものの、さらにまた互いに連動又は連携することを意味してよい。例えば、コアは、１つまたは複数の介在コンポーネントを通してキャッシュ部に連結され得る。複数の図において、複数の矢印は、複数の接続及び複数の連結を示すのに用いられる。
【００９６】
説明及び／または複数の請求項において、「ロジック」、「ユニット」、「モジュール」または「コンポーネント」という複数の用語は、用いられていてよい。これらはハードウェア、ファームウェア、ソフトウェア、またはそれらの様々な組み合わせを含んでよいことが理解されるであろう。これらの複数の例は、集積回路、複数の特定用途向け集積回路、複数のアナログ回路、複数のデジタル回路、複数のプログラミングされたロジックデバイス、複数の命令を含む複数のメモリデバイス等、及びそれらの複数の組み合わせを含む。いくつかの実施形態において、これらは、複数のトランジスタ及び／または複数のゲート及び／または複数の他の回路コンポーネントを含んでよい。
【００９７】
上述の説明では、複数の実施形態への十分な理解を提供すべく、複数の具体的な詳細が記載されている。しかし、複数の他の実施形態は、これら複数の具体的な詳細のうちのいくつかがなくても実施されてよい。本発明の範囲は、上で提供された複数の具体的な例によって決定されるものではなく、以下の特許請求の範囲によってのみ決定される。複数の他の例において、複数の周知の回路、複数の構造、複数のデバイス、及び複数の動作は、ブロック図形態に示され、または、説明の理解を不明瞭にすることを回避すべく詳細に示されていない。複数のコンポーネントが示されて説明されている複数の場合において、いくつかの例では、それらは代わりに単一コンポーネントとして一緒に統合され得る。単一コンポーネントが示されて説明されている複数の他の場合において、いくつかの例では、２つまたはそれより多くのコンポーネントに分離されてよい。
【００９８】
様々な動作及び方法が説明されている。複数の方法のうちのいくつかは、複数のフロー図において比較的基本的な形態で説明されているが、複数の動作は任意選択的に、追加されてよく、及び／または複数の方法から取り除かれてよい。さらに、複数のフロー図は、複数の例示的な実施形態例による複数の動作の特定の順序を示しているが、その特定の順序は例示的なものである。複数の代替的な実施形態は、異なる順序で複数の動作を任意選択的に実行すること、複数の特定の動作を組み合わせること、複数の特定の動作を重複することなどをし得る。
【００９９】
複数の特定の動作は、ハードウェアコンポーネントによって実行されてもよく、または当該複数の動作を実行する複数の命令を用いてプログラミングされた機械、回路、またはハードウェアコンポーネント（例えば、プロセッサ、プロセッサの部分、回路など）を生じさせ、及び／またはもたらすのに用いられ得る機械実行可能、または回路実行可能な複数の命令で具現化されてもよい。複数の動作はまた、ハードウェア及びソフトウェアの組み合わせによって任意選択的に実行されてよい。
【０１００】
いくつかの実施形態は、非一時的機械可読記憶媒体を含む製造品（例えば、コンピュータプログラム製品）を含む。非一時的機械可読記憶媒体は、一時的伝搬される信号を含まない。非一時的機械可読記憶媒体は、機械によって可読の形態で情報を格納する機構を含み得る。機械可読記憶媒体は、仮に機械によって実行されたとき及び／またはその場合、当該機械に本明細書に開示されている１つまたは複数の動作、方法、または技術を実行させる及び／またはもたらせるように動作可能な命令または複数の命令のシーケンスを格納していてよい。複数の適した機械の複数の例は、これらに限定されないが、複数のプロセッサ及び複数のコンピュータシステムまたはそのような複数のプロセッサを有する複数の他の電子デバイスを含む。様々な例として、非一時的機械可読記憶媒体は、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光データストレージデバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、位相変化メモリ、位相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等を含んでよい。
【０１０１】
本明細書を通して、「一実施形態」、「実施形態」、「１つまたは複数の実施形態」、「いくつかの実施形態」という言及は、例えば、特定の機能が、本発明の実施に含まれてもよいが、必ずしも必要とされるものではないことを示す。同様に、説明において、様々な複数の特徴は、場合によって、開示を簡素化し、様々な進歩的な複数の態様に対する理解を助けることを目的として、単一の実施形態において図またはそれらの説明の中で一緒にグループ化される。この開示の方法は、しかしながら、本発明が、各請求項で明確に記述されるよりも多くの機能を必要とするという意図を反映すると解釈されるものではない。  むしろ、以下の複数の請求項が反映するように、進歩的な複数の態様は、単一の開示された実施形態の全ての機能の一部にある。こうして、詳細な説明に続く複数の請求項が本発明の個別の実施形態として各々の自己の請求項と共に、この詳細な説明に明確に組み込まれている。［例示的な実施形態］
【０１０２】
以下の複数の例は、さらなる複数の実施形態に関する。複数の例における具体的事柄は、１つまたは複数の実施形態の何れかの箇所でも用いられ得る。
【０１０３】
第１実施例は、分散キャッシュの第１のキャッシュ部に対応し、プロセッサの論理プロセッサの総数より少ない総数のキャッシュ側アドレス監視格納位置を有するキャッシュ側アドレス監視ユニットを含むプロセッサである。各キャッシュ側アドレス監視格納位置は、監視されるべきアドレスを格納する。プロセッサはまた、第１のコアに対応し、第１のコアの１つまたは複数の論理プロセッサの数と同数のコア側アドレス監視格納位置を有するコア側アドレス監視ユニットを含む。各コア側アドレス監視格納位置は、監視されるべきアドレス及び第１のコアの異なる対応する論理プロセッサに対する監視状態を格納する。プロセッサはまた、第１のキャッシュ部に対応し、監視されるべき追加のアドレスを格納するのに利用可能な未使用キャッシュ側アドレス監視格納位置がない場合にアドレス監視格納オーバーフローポリシを強制するキャッシュ側アドレス監視格納オーバーフローユニットを含む。
【０１０４】
第２実施例は、任意の先行の例のプロセッサを含み、かつ、第１のコアに対応し、コア側アドレス監視ユニットに連結されるコア側トリガユニットを任意選択的に含む。コア側トリガユニットは、対応するコア側アドレス監視格納位置が、トリガの準備ができてトリガイベントが検出されたという監視状態を有する場合に第１のコアの論理プロセッサをトリガする。
【０１０５】
第３実施例は、任意の先行の例のプロセッサを含み、キャッシュ側アドレス監視ユニットに連結され、複数の異なる論理プロセッサからの同一の監視アドレスに対する複数の監視要求を、共通キャッシュ側アドレス監視格納位置に記録するキャッシュ側アドレス監視格納位置再利用ユニットを任意選択的に含む。
【０１０６】
第４実施例は、第３実施例のプロセッサを含み、共通キャッシュ側アドレス監視格納位置は、同一の監視アドレスに対して複数の監視要求を提供した複数の異なる論理プロセッサを記録する構造を含む。
【０１０７】
第５実施例は、任意の先行の例のプロセッサを含み、当該プロセッサは、４０より多くのハードウェアスレッドを有し、第１のキャッシュ部に対応するキャッシュ側アドレス監視ユニットのキャッシュ側アドレス監視格納位置の総数は、少なくとも２０のキャッシュ側アドレス監視格納位置はあるが、当該４０より多くのハードウェアスレッドの総数より少ない。
【０１０８】
第６実施例は、任意の先行の例のプロセッサを含み、キャッシュ側アドレス監視ユニットのキャッシュ側アドレス監視格納位置の総数は、複数のキャッシュ側アドレス監視格納位置のオーバーフローの確率が十万分の一以下となるプロセッサの論理プロセッサの総数に対して十分である。
【０１０９】
第７実施例は、任意の先行の例のプロセッサを含み、監視されるべき第１のアドレスを示す命令に応答して、キャッシュ側アドレス監視ユニットは、当該第１のアドレスをキャッシュ側アドレス監視格納位置に格納する。また、コア側アドレス監視ユニットは、コア側アドレス監視格納位置に当該第１のアドレスを格納する。
【０１１０】
第８実施例は、任意の先行の例のプロセッサを含み、複数の論理プロセッサは、複数のハードウェアスレッドである。
【０１１１】
第９実施例は、任意の先行の例のプロセッサを含み、キャッシュ側アドレス監視格納オーバーフローユニットは、共有状態を用いるべく複数の読み出しトランザクションを実行することを含むアドレス監視格納オーバーフローポリシを強制する。
【０１１２】
第１０実施例は、任意の先行の例のプロセッサを含み、キャッシュ側アドレス監視格納オーバーフローユニットは、保留中の監視要求を有する可能性のある全てのコアへ複数の無効化要求を送信することを含むアドレス監視格納オーバーフローポリシを強制する。
【０１１３】
第１１実施例は、第１０実施例のプロセッサを含み、キャッシュ側アドレス監視格納オーバーフローユニットは、どのコアが保留中の監視要求を有する可能性があるかを判断するオーバーフロー構造をチェックする。
【０１１４】
第１２実施例は、相互接続、及び当該相互接続に連結されるプロセッサを含む複数の命令を処理するシステムである。当該プロセッサは、分散キャッシュの第１のキャッシュ部に対応し、当該プロセッサのハードウェアスレッドの総数より少ない総数のアドレス監視格納位置を有する、キャッシュ部制御ユニットの第１のアドレス監視ユニットを含む。各アドレス監視格納位置は、監視されるべきアドレスを格納する。プロセッサはまた、第１のコアに対応し、第１のコアの１つまたは複数のハードウェアスレッドの数と同数のアドレス監視格納位置を有する、コアインターフェースユニットの第２のアドレス監視ユニットを含む。第２のアドレス監視ユニットの各アドレス監視格納位置は、監視されるべきアドレス及び第１のコアの異なる対応するハードウェアスレッドに対する監視状態を格納する。プロセッサは、第１のアドレス監視ユニットの全てのアドレス監視格納位置が用いられて監視要求に対するアドレスを格納するのに利用可能なものがない場合にアドレス監視格納オーバーフローポリシを実施する、キャッシュ部制御ユニットのアドレス監視格納オーバーフローユニットをさらに含む。システムはまた、相互接続に連結されるダイナミックランダムアクセスメモリ、相互接続に連結される無線通信デバイス、及び相互接続に連結される画像キャプチャデバイスを含む。
【０１１５】
第１３実施例は、第１２実施例のシステムを含み、アドレス監視格納オーバーフローユニットは、共有状態を用いる複数の読み出しトランザクションを実行すること、及び複数の無効化要求を、保留中の監視要求を有する可能性がある全てのコアへ送信することを含むアドレス監視格納オーバーフローポリシを実施する。
【０１１６】
第１４実施例は、第１２、１３実施例のうちの何れかのシステムを含み、当該プロセッサは、４０より多くのハードウェアスレッドを有し、第１のアドレス監視ユニットのアドレス監視格納位置の総数は、少なくとも２０はあるが、プロセッサの４０より多くのハードウェアスレッドの総数よりは少ない。
【０１１７】
第１５実施例は、第１２−１４実施例のうちの何れかのシステムを含み、当該プロセッサは、複数の異なるハードウェアスレッドからの同一の監視アドレスに対する複数の監視要求を共通アドレス監視格納位置に記録する、キャッシュ部制御ユニットのアドレス監視格納位置再利用ユニットをさらに含む。
【０１１８】
第１６実施例は、プロセッサにおける方法であり、当該方法は、アドレスを示し、かつ、マルチコアプロセッサの第１のコアの第１の論理プロセッサにおいて当該アドレスへの複数の書き込みに対して監視することを示す第１の命令を受信する段階を含む。第１の命令に応答して、方法は、第１の命令によって示されたアドレスを、第１のコアに対応する複数のコア側アドレス監視格納位置の第１のコア側アドレス監視格納位置に格納する段階を含む。複数のコア側アドレス監視格納位置の数は、第１のコアの論理プロセッサの数に等しい。方法はまた、第１の命令によって示されたアドレスを、分散キャッシュの第１のキャッシュ部に対応する複数のキャッシュ側アドレス監視格納位置の第１のキャッシュ側アドレス監視格納位置に格納する段階を含む。複数のキャッシュ側アドレス監視格納位置の総数は、マルチコアプロセッサの論理プロセッサの総数より少ない。方法は、監視状態を投機状態に変更する段階をさらに含む。
【０１１９】
第１７実施例は、第１６実施例の方法を含み、かつ、当該アドレスをまた示し、第２のコアの第２の論理プロセッサにおいて当該アドレスへの複数の書き込みに対して監視することを示す第２の命令を受信する段階、及び第２のコアに対してアドレスに対する監視要求を第１のキャッシュ側アドレス監視格納位置に記録する段階を任意選択的に含む。
【０１２０】
第１８実施例は、第１７実施例の方法を含み、第２のコアに対してアドレスに対する監視要求を、第１のキャッシュ側アドレス監視格納位置に記録する段階は、マルチコアプロセッサの各コアに対応する異なるビットを有するコアマスクにおいてビットを変更する段階を含む。
【０１２１】
第１９実施例は、先行の例の何れかの方法を含み、かつ、第２のアドレスを示し、第１の論理プロセッサにおいて当該第２のアドレスへの複数の書き込みに対して監視することを示す第２の命令を受信する段階、第１のキャッシュ部に対応する複数のキャッシュ側アドレス監視格納位置中に利用可能なキャッシュ側アドレス監視格納位置がないことを判断する段階、及びキャッシュ側アドレス監視格納位置オーバーフローモードに入ることを決定する段階を任意選択的に備える。
【０１２２】
第２０実施例は、第１９実施例の方法を含み、かつ、キャッシュ側アドレス監視格納位置オーバーフローモードにある際に、共有キャッシュコヒーレンシ状態を用いる第１のキャッシュ部に対応する全ての読み出しトランザクションを実行する段階、及び第１のキャッシュ部に対応する複数の無効化要求を、１つまたは複数の保留中の監視要求を有する可能性がある、マルチコアプロセッサの全てのコアへ送信する段階を任意選択的に含む。
【０１２３】
第２１実施例は、任意の先行の例の方法を含み、かつ、第１の論理プロセッサにおいてアドレスを示す第２の命令を受信する段階、及び当該第２の命令に応答して、監視状態をトリガ待ち状態に変更する段階を任意選択的に備える。
【０１２４】
第２２実施例は、第１６−２１実施例のうちの何れかの方法を実行するプロセッサまたは他の装置を含む。
【０１２５】
第２３実施例は、第１６−２１実施例のうちの何れかの方法を実行するための手段を含むプロセッサまたは他の装置を有する。
【０１２６】
第２４実施例は、第１６−２１実施例のうちの何れかの方法を実行するプロセッサを含み、当該プロセッサは、集積回路及び／またはロジック並びに／もしくはユニット、及び／またはコンポーネント並びに／もしくはモジュール、及び／または手段、またはそれらの任意の組み合わせを含む。
【０１２７】
第２５実施例は、仮に機械によって実行されたとき及び／またはその場合に、第１６−２１実施例のうちの何れかの方法を機械に実行させるように動作可能な１つまたは複数の命令を任意選択的に格納あるいは提供する非一時的機械可読媒体を任意選択的に含む。
【０１２８】
第２６実施例は、相互接続と、当該相互接続に連結されるプロセッサと、ＤＲＡＭ、グラフィックスチップ、無線通信チップ、位相変化メモリ、及びビデオカメラのうちの少なくとも１つとを有するコンピュータシステムを備え、当該少なくとも１つは、当該相互接続に連結され、プロセッサ及び／またはコンピュータシステムは、第１６−２１実施例のうちの何れかの方法を実行する。
【０１２９】
第２７実施例は、実質的に本明細書で説明されたような１つまたは複数の動作または任意の方法を実行するプロセッサまたは他の装置を含む。
【０１３０】
第２８実施例は、実質的に本明細書で説明されたような１つまたは複数の動作または任意の方法を実行するための手段を含むプロセッサまたは他の装置を含む。第２９実施例は、実質的に本明細書に開示されたような命令を実行するプロセッサまたは他の装置を含む。
【０１３１】
第３０実施例は、実質的に本明細書に開示されたような命令を実行するための手段を含むプロセッサまたは他の装置を有する。
【図１】
2016532233.tif 000003
【図２】
2016532233.tif 000004
【図３】
2016532233.tif 000005
【図４】
2016532233.tif 000006
【図５】
2016532233.tif 000007
【図６】
2016532233.tif 000008
【図７Ａ】
2016532233.tif 000009
【図７Ｂ】
2016532233.tif 000010
【図８Ａ】
2016532233.tif 000011
【図８Ｂ】
2016532233.tif 000012
【図９】
2016532233.tif 000013
【図１０】
2016532233.tif 000014
【図１１】
2016532233.tif 000015
【図１２】
2016532233.tif 000016
【図１３】
2016532233.tif 000017
【図１４】
2016532233.tif 000018
【手続補正書】
【提出日】平成28年3月24日(2016.3.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサであって、
分散キャッシュの第１のキャッシュ部に対応し、前記プロセッサの複数の論理プロセッサの総数より少ない総数であって各々が監視されるべきアドレスを格納する複数のキャッシュ側アドレス監視格納位置を有するキャッシュ側アドレス監視ユニットと、
第１のコアに対応し、前記第１のコアの１つまたは複数の論理プロセッサの数と同数であって各々が監視されるべきアドレス及び前記第１のコアの異なる対応する論理プロセッサの監視状態を格納する複数のコア側アドレス監視格納位置を有するコア側アドレス監視ユニットと、
前記第１のキャッシュ部に対応し、監視されるべき追加のアドレスを格納するのに利用可能な未使用キャッシュ側アドレス監視格納位置がない場合にアドレス監視格納オーバーフローポリシを強制するキャッシュ側アドレス監視格納オーバーフローユニットと
を備える
プロセッサ。
【請求項２】
前記第１のコアに対応し、前記コア側アドレス監視ユニットに連結され、対応するコア側アドレス監視格納位置が、トリガの準備ができてトリガイベントが検出されたという監視状態を有する場合に、前記第１のコアの論理プロセッサをトリガするコア側トリガユニット
をさらに備える
請求項１に記載のプロセッサ。
【請求項３】
前記キャッシュ側アドレス監視ユニットに連結され、複数の異なる論理プロセッサからの同一の監視アドレスに対する複数の監視要求を、共通キャッシュ側アドレス監視格納位置に記録するキャッシュ側アドレス監視格納位置再利用ユニット
をさらに備える
請求項１または２に記載のプロセッサ。
【請求項４】
前記共通キャッシュ側アドレス監視格納位置は、前記同一の監視アドレスに対する前記複数の監視要求を提供した前記複数の異なる論理プロセッサを記録する構造を有する、
請求項３に記載のプロセッサ。
【請求項５】
前記プロセッサは、４０より多くのハードウェアスレッドを有し、
前記第１のキャッシュ部に対応する前記キャッシュ側アドレス監視ユニットの前記複数のキャッシュ側アドレス監視格納位置の前記総数は、少なくとも２０はあるが、前記４０より多くのハードウェアスレッドの総数より少ない、
請求項１から４の何れか一項に記載のプロセッサ。
【請求項６】
前記キャッシュ側アドレス監視ユニットの前記複数のキャッシュ側アドレス監視格納位置の前記総数は、前記複数のキャッシュ側アドレス監視格納位置のオーバーフローの確率が十万分の一以下となる前記プロセッサの前記複数の論理プロセッサの前記総数に対して十分である、
請求項１から５の何れか一項に記載のプロセッサ。
【請求項７】
監視されるべき第１のアドレスを示す命令に応答して、
前記キャッシュ側アドレス監視ユニットは、前記第１のアドレスを、キャッシュ側アドレス監視格納位置に格納し、
前記コア側アドレス監視ユニットは、前記第１のアドレスを、コア側アドレス監視格納位置に格納する、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項８】
前記複数の論理プロセッサは、複数のハードウェアスレッドを含む、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項９】
前記キャッシュ側アドレス監視格納オーバーフローユニットは、共有状態を用いるべく、複数の読み出しトランザクションを実行することを含む前記アドレス監視格納オーバーフローポリシを強制する、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項１０】
前記キャッシュ側アドレス監視格納オーバーフローユニットは、保留中の監視要求を有する可能性がある全てのコアへ複数の無効化要求を送信することを含む前記アドレス監視格納オーバーフローポリシを強制する、
請求項１から６の何れか一項に記載のプロセッサ。
【請求項１１】
前記キャッシュ側アドレス監視格納オーバーフローユニットは、どのコアに保留中の監視要求を有する可能性があるかを判断するオーバーフロー構造をチェックする、
請求項１０に記載のプロセッサ。
【請求項１２】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続に連結され、かつ、キャッシュ部制御ユニットの第１のアドレス監視ユニット、コアインターフェースユニットの第２のアドレス監視ユニット、及び前記キャッシュ部制御ユニットのアドレス監視格納オーバーフローユニットを有するプロセッサと、
前記相互接続に連結されるダイナミックランダムアクセスメモリと、
前記相互接続に連結される無線通信デバイスと、
前記相互接続に連結される画像キャプチャデバイスと
を備え、
前記キャッシュ部制御ユニットの前記第１のアドレス監視ユニットは、分散キャッシュの第１のキャッシュ部に対応し、かつ、前記プロセッサの複数のハードウェアスレッドの総数より少ない総数であって各々が監視されるべきアドレスを格納する複数のアドレス監視格納位置を有し、
前記コアインターフェースユニットの前記第２のアドレス監視ユニットは、第１のコアに対応し、かつ、前記第１のコアの１つまたは複数のハードウェアスレッドの数と同数であって各々が監視されるべきアドレス及び前記第１のコアの異なる対応するハードウェアスレッドに対する監視状態を格納する、前記第２のアドレス監視ユニットの複数のアドレス監視格納位置を有し、
前記キャッシュ部制御ユニットの前記アドレス監視格納オーバーフローユニットは、前記第１のアドレス監視ユニットの全てのアドレス監視格納位置が用いられて監視要求に対してアドレスを格納するのに利用可能なものがない場合に、アドレス監視格納オーバーフローポリシを実施する、
システム。
【請求項１３】
前記アドレス監視格納オーバーフローユニットは、共有状態を用いるべく複数の読み出しトランザクションを実行すること及び保留中の監視要求を有する可能性がある全てのコアへ複数の無効化要求を送信することを含む前記アドレス監視格納オーバーフローポリシを実施する、
請求項１２に記載のシステム。
【請求項１４】
前記プロセッサは、４０より多くのハードウェアスレッドを有し、
前記第１のアドレス監視ユニットの前記複数のアドレス監視格納位置の前記総数は、少なくとも２０はあるが、前記プロセッサの前記４０より多くのハードウェアスレッドの前記総数より少ない、
請求項１２または１３に記載のシステム。
【請求項１５】
前記プロセッサは、複数の異なるハードウェアスレッドからの同一の監視アドレスに対する複数の監視要求を共通アドレス監視格納位置に記録する、前記キャッシュ部制御ユニットのアドレス監視格納位置再利用ユニットをさらに有する、
請求項１２または１３に記載のシステム。
【請求項１６】
プロセッサにおける方法であって、
アドレスを示し、かつ、マルチコアプロセッサの第１のコアの第１の論理プロセッサにおいて前記アドレスへの複数の書き込みに対して監視することを示す第１の命令を受信する段階と、
前記第１の命令に応答して、
前記第１のコアに対応し、かつ、数が前記第１のコアの複数の論理プロセッサの数に等しい複数のコア側アドレス監視格納位置の第１のコア側アドレス監視格納位置に、前記第１の命令によって示された前記アドレスを格納する段階と、
分散キャッシュの第１のキャッシュ部に対応し、かつ、総数が前記マルチコアプロセッサの複数の論理プロセッサの総数より少ない複数のキャッシュ側アドレス監視格納位置の第１のキャッシュ側アドレス監視格納位置に、前記第１の命令によって示された前記アドレスを格納する段階と、
監視状態を投機状態に変更する段階と
を備える
方法。
【請求項１７】
前記アドレスをまた示し、第２のコアの第２の論理プロセッサにおいて前記アドレスへの複数の書き込みに対して監視することを示す第２の命令を受信する段階と、
前記第２のコアのための前記アドレスに対する監視要求を前記第１のキャッシュ側アドレス監視格納位置に記録する段階と
をさらに備える
請求項１６に記載の方法。
【請求項１８】
前記第２のコアのための前記アドレスに対する前記監視要求を前記第１のキャッシュ側アドレス監視格納位置に記録する段階は、前記マルチコアプロセッサの各コアに対応する異なるビットを有するコアマスクにおけるビットを変更する段階を含む、
請求項１７に記載の方法。
【請求項１９】
第２のアドレスを示し、前記第１の論理プロセッサにおいて前記第２のアドレスへの複数の書き込みに対して監視することを示す第２の命令を受信する段階と、
前記第１のキャッシュ部に対応する前記複数のキャッシュ側アドレス監視格納位置の中に利用可能な複数のキャッシュ側アドレス監視格納位置がないことを判断する段階と、
キャッシュ側アドレス監視格納位置オーバーフローモードに入ることを決定する段階と
をさらに備える
請求項１６から１８の何れか一項に記載の方法。
【請求項２０】
前記キャッシュ側アドレス監視格納位置オーバーフローモードにある間は、
共有キャッシュコヒーレンシ状態を用いるべく、前記第１のキャッシュ部に対応する全ての読み出しトランザクションを実行する段階と、
前記第１のキャッシュ部に対応する複数の無効化要求を、１つまたは複数の保留中の監視要求を有する可能性がある、前記マルチコアプロセッサの全てのコアへ送信する段階と
をさらに備える
請求項１９に記載の方法。
【請求項２１】
前記第１の論理プロセッサにおいて前記アドレスを示す第２の命令を受信する段階と、
前記第２の命令に応答して、前記監視状態をトリガ待ち状態に変更する段階と
をさらに備える
請求項１６から２０の何れか一項に記載の方法。
【請求項２２】
請求項１６から２１の何れかに一項に記載の方法を実行するプロセッサ。
【請求項２３】
請求項１６から２１の何れか一項に記載の方法を実行するための手段を含むプロセッサ。
【請求項２４】
コンピュータにより実行されるプログラムであって、
前記コンピュータにより実行された場合、前記コンピュータに請求項１６から２１の何れか一項に記載の方法を実行させるように動作可能である１つまたは複数の命令を格納する
プログラム。
【請求項２５】
相互接続、
前記相互接続に連結されるプロセッサ、
前記相互接続に連結される無線通信チップ、及び
前記相互接続に連結されるビデオカメラ
を備えるコンピュータシステムであって、
前記コンピュータシステムは、請求項１６から２１の何れか一項に記載の方法を実行する、
コンピュータシステム。
【請求項２６】
請求項２４に記載のプログラムを格納するコンピュータ可読記憶媒体。
【国際調査報告】
2016532233.tif 000019
2016532233.tif 000020