(57)【要約】  コンピュータシステム（１００）で能動的に同期を取る方法においては、所与のメモリリソース（３１４Ａ〜３１４Ｄ）に排他アクセスをリクエストするプロセッサ（１８Ａ、１８Ｂ）を含む。このリクエストは、所与のメモリリソースに関連づけられる１つ以上のアドレスを含む。さらに、該方法において、リクエスト中のアドレスの各々を複数のアドレスセットの各アドレスと比較するステップを含む。アドレスセット中の各アドレスは、リクエスタが排他アクセスを有するそれぞれのメモリリソースに対応する。加えて、１つ以上のアドレスのいずれかのアドレスが、複数のアドレスセットのいずれかのアドレスとマッチングすることに応答して、該方法において、このマッチングアドレスを含むセットに関連付けられるカウント値（２３３）を返すステップを含む。このカウント値は、マッチングアドレスに対して競合しているリクエスタの数を示す。
2009506436.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ（１８Ａ、１８Ｂ）が実行する方法であって、前記プロセッサが、
所与のメモリリソースへの排他アクセスをリクエストし、前記リクエストは前記所与のメモリリソースに関連づけられる１つ以上のアドレスを含むものであり、
前記１つ以上のアドレスの各々を、複数のアドレスセットの各アドレスと比較し、前記複数のアドレスセットの各アドレスは、リクエスタが排他アクセスを許可しているそれぞれのメモリリソースに対応しており、かつ、
前記１つ以上のアドレスのいずれかのアドレスが前記複数のアドレスセットのいずれかのアドレスとマッチングしていることに応答して、前記マッチングアドレスに関連付けられるカウント値を返し、前記カウント値は前記マッチングアドレスに対して競合しているリクエスタの数を示すものである、方法。
【請求項２】
前記１つ以上のアドレスのいずれも前記複数のアドレスセットのいずれにもマッチングしないことに応答して、パスカウント値ゼロを返すステップをさらに含む、請求項１記載の方法。
【請求項３】
別のプロセッサが別のメモリリソースへの排他アクセスを有しているかどうかを判断するように、前記カウント値を用いるステップをさらに含む、請求項１記載の方法。
【請求項４】
排他アクセスのリクエストでは、ＬＯＣＫプレフィックスを有する１つ以上のロックされたメモリリファレンス命令を実行し、前記ＬＯＣＫプレフィックスにより、前記ロックされたメモリリファレンス命令に関連づけられるアドレスが、命令のデコードにおいて１つ以上のインジケーションビットでマーキングされる、請求項１記載の方法。
【請求項５】
排他アクセスのリクエストでは、さらに、前記所与のメモリリソースの１つ以上のアドレスの各々を、前記複数のアドレスセットの各々と比較させるＡＣＱＵＩＲＥ命令を実行する、請求項４記載の方法。
【請求項６】
前記ロックされたメモリリファレンス命令に関連づけられる前記アドレスをプロセッサバッファに記憶し、前記ＡＣＱＵＩＲＥ命令の実行に応答して、前記プロセッサバッファの前記全てのアドレスを比較のために送信する、請求項４記載の方法。
【請求項７】
１つ以上のメモリ（３１４Ａ〜３１４Ｄ）に結合された、互いに連結された１つ以上のプロセッサ（１８Ａ、１８Ｂ）を含み、前記プロセッサの各々は所与のメモリリソースへの排他アクセスをリクエストするために、命令を実行するように構成されており、前記リクエストは前記所与のメモリリソースに関連づけられる１つ以上のアドレスを含むものであって、
前記一つ以上のアドレスの各々を複数のアドレスセットの各アドレスと比較するように結合されたアービトレーションユニット（２３０）を含み、前記複数のアドレスセットの各アドレスは、リクエスタが排他アクセスを許可されたそれぞれのメモリリソースに対応しており、
前記アービトレーションユニットは、前記複数のアドレスセットのうちのいずれかのアドレスが前記１つ以上のアドレスのいずれかのアドレスとマッチングすることに応答して、前記マッチングアドレスを含む前記セットに関連するカウント値（２３３）を返すように構成されており、前記カウント値は前記マッチングアドレスに対して競合しているリクエスタの数を示す、コンピュータシステム。
【請求項８】
前記アービトレーションユニットはさらに、前記複数のアドレスセットのうちのいずれのアドレスも前記１つ以上のアドレスとマッチングしないことに応答して、パスカウント値ゼロを返すように構成されている、請求項７記載のコンピュータシステム。
【請求項９】
前記１つ以上のプロセッサの各々はさらに、別のプロセッサが別のメモリリソースへの排他アクセスを有しているかを判断するために、前記カウント値を使用するように構成されている、請求項７記載のコンピュータシステム。
【請求項１０】
前記１つ以上のプロセッサの各々はさらに、
ＬＯＣＫプレフィックスを有する１つ以上のメモリリファレンス命令を実行するように構成されており、前記ＬＯＣＫプレフィックスは、前記ロックされたメモリリファレンス命令に関連づけられるアドレスを、命令のデコードにおいて１つ以上のインジケーションビットでマーキングされるようにし、
前記所与のメモリリソースの１つ以上のアドレスの各々を、前記複数のアドレスセットの各々と比較させるＡＣＱＵＩＲＥ命令を実行する用に構成される、請求項７記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロプロセッサに関し、より詳細には、マルチプロセッサシステムのプロセッサ間でのプロセスの同期をとる技術に関する。
【背景技術】
【０００２】
最新のマイクロプロセッサ性能はこの１０年で着実かつ飛躍的に向上している。性能が向上することで動作周波数が増加し、さらに、深いパイプライン方式として周知の技術が非常に向上する。概して、深いパイプライン方式とは、多数のステージを備え、それぞれのステージで処理量を小さくする命令パイプラインを使用することを指す。これにより、パイプライン全体の実行速度をより高速化することが可能となる。このような技術は本業界では非常に有用である。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、周波数の増加ならびに深いパイプライン方式に対しては、いくつかの難点がある。
例えば、高速動作においては、クロックスキューおよび電力消費は著しい。このため、システムレベルの熱収支ポイントに課せられる物理的制約ならびにクロックスクリューを維持することが一層困難となり、このような技術の実用限界が真近に迫っていることが示されている。したがって、業界では、他の技術を用いて性能向上に努めている。性能を向上させる技術の１つのタイプに、マルチコアプロセッサ、より一般的には、マルチプロセッシングの使用が挙げられる。
【０００４】
コンピューティングシステムは、ますます多くのプロセッサ（例えば、プロセッサコア）を使用したマルチプロセッシングスキームを使用しているので、同一メモリデータを干渉するあるいは競うリクエスタ数は、従来のプロセス同期法が適さなくなるまでに増加するおそれがある。例えば、少数のプロセッサがリソースを競っている場合は、構造をロックするだけでコードのクリティカルセクションに適切な性能を与えることができる。例えば、メモリ位置上算術演算をロックすることでも十分となるであろう。マルチプロセッシングのスケールが大きくなるにつれて、このようなプリミティブの効率は低くなる。このために、より進化したプロセッサは、単一メモリ位置をアトミックにアップデートするハードウェア同期プリミティブ（例えば、CMPXCHG、CMPXCHG8、およびCMPXCHG16B)を含む命令セットを追加している。しかし、このようなハードウェアプリミティブが、高性能のプロセッサカウント数が大きいマルチプロセッサに要求される類いの性能を提供し得ないような領域に入りつつある。
【０００５】
多くの従来のプロセッサは、楽観的モデルに基づく同期技術を使用している。つまり、マルチプロセッサ環境で動作する場合、このような従来のプロセッサは、干渉が検出されなくなるまで同期コードを繰返し再実行することで同期を得ることが出来るという想定のもとで動作するように設計されている。このようなタイプの同期は特に、多くのプロセッサが同じ同期イベントを行っているときに時間を無駄にしてしまうおそれがある。その理由は、一度に進行できるのは、１つのプロセッサだけだからである。このため、従来とは異なる同期技術が望ましい。
【課題を解決するための手段】
【０００６】
コンピュータシステムで能動的に同期をとる方法の各種実施形態が開示されている。一実施形態では、該方法は、所与のメモリリソースに排他的アクセスをリクエストするプロセッサを有する。このリクエストは、所与のメモリリソースに関連づけられる１以上のアドレスを含み得る。さらに、該方法では、リクエストのアドレスの各々を、複数のアドレスセットの各アドレスと比較するステップを含む。アドレスセットの各アドレスは、リクエスタが排他アクセスを与えらそれぞれのメモリリソースに対応し得る。加えて、１以上のアドレスのうちいずれかのアドレスが、別の１つのあるいは複数のプロセッサにすでに与えられている複数のアドレスセットのいずれかのアドレスと一致すること、つまりマッチングに応答して、該方法では、マッチングアドレスを含むセットに関連づけられるカウント値を返すステップを含む。このカウント値は、マッチングアドレスに対して競合しているリクエスタの数を示す。特定の一実施形態において、該方法は、複数のアドレスセットのいずれかのアドレスとマッチングする１以上のアドレスがないことに応答して、パスカウント値ゼロを返すステップを含む。
【０００７】
別の実施形態では、コンピュータシステムは、１以上のメモリと結合可能で互いに連結された１つ以上のプロセッサを含む。プロセッサの各々は、所与のメモリリソースへの排他アクセスをリクエストする命令を実行する。このリクエストには、所与のメモリリソースに関連づけられる１以上のアドレスを含んでもよい。さらに、このコンピュータシステムは、リクエスト中のアドレスの各々を複数のアドレスセット中の各アドレスと比較する、同期アービターユニットを含む。
複数のアドレスセット中の各アドレスは、リクエスタが排他アクセスを行うそれぞれのメモリリソースに対応する。同期アービターユニットは、１以上のアドレスのうちのいずれかのアドレスが、複数のアドレスセットのいずれかのアドレスとマッチングすることに応答して、このマッチングアドレスを含むセットと関連づけられるカウント値を返す。このカウント値は、マッチングアドレスに対して競合しているリクエスタの数を示す。
【発明を実施するための最良の形態】
【０００８】
本発明は、様々な改良を行い、また、他の形態で実施することができるが、ここに説明されている特定の実施例は、例示として示さたものであり、以下にその詳細を記載する。しかし当然のことながら、ここに示した特定の実施例は、本発明を開示されている特定の形態に限定するものではなく、むしろ本発明は添付の請求項によって規定されている発明の範疇に属する全ての改良、等価物、及び変形例をカバーするものである。さらに、本明細書において用いられる「できる"may"」という用語は、許可的な意味合い（つまり、そのような可能性を持つ、または可能である）に用いられ、強制的な意味合いではない（つまり、must；しなければいけない）ことに注意すべきである。高性能の同期法をソフトウェアに構築することができるように、高度同期機構(advanced synchronization facility)と呼ばれる一連の命令を使用してもよい。この機構は、非ブロック同期、ウェイトフリー(WaitFree)同期、トランザクショナルメモリの構築をサポートし、これに加えて、このような方法の構築に一般的に使用される、様々な形式の比較およびスワッププリミティブの構築をサポートすることができる。この機構により、非常に様々な同期プリミティブを（ソフトウェアに）構築することができる。
【０００９】
さらに、この高度同期機構により、ソフトウェアは非常に様々な同期の種類のプログラミングをすることが可能となり得る。各種の同期においては、正常終了に必要とされたキャッシュライン、エラー（failure)がコントロールフローをリダイレクトすることができるシーケンスポイント、正常なクリティカルセクションの実行がなされたデータ変更セクション、および、他のシステムのほかの部位に対して正常終了が可視化されて命令シーケンス全体がアトミックすなわち不可分であると見えるようにするシーケンスポイントを、直接特定することができる。
【００１０】
従って、高度同期機構の機能によって、クリティカルセクションに関する書き込み許可が実質的に他のプロセッサ／コアから実質的に同時に見えるようにして、マルチキャッシュラインを取得および解放することが可能となる。このプロセスはリニアライジングとも称される。取得後に、他のいずれかの関連部がマルチキャッシュラインのいずれかに対する何らかの変更の検出が可能となる前に、いくつかの変更を実行することができる。取得および解放の間において、いずれのプロセッサも、これら同じラインの操作許可（例えば、書込み許可）がなされることはない。従来、同様の方法は、関連するラインにハイパートランスポート（TM)ソースダン（Source Done）メッセージを送ることなくなされることになり、これにより同時アクセスを防いでいた。しかしながら、これらのソリューションでは、デッドロックおよび／またはライブロックあるいはタイムアウトを引き起こしてしまう。従って、高度同期機構を実装可能なプロセッサおよびプロセッサコアを含んだコンピュータシステムを以下に説明する。
【００１１】
図１に、コンピュータシステム１００の実施形態を示す。コンピュータシステム１００は、いくつかの処理ノード３１２Ａ、３１２Ｂ、３１２Ｃおよび３１２Ｄを含む。各々の処理ノード３１２Ａ〜３１２Ｄは、各々のそれぞれの処理ノード３１２Ａ〜３１２Ｄに含まれるメモリコントローラ３１６Ａ〜３１６Ｄを介して、それぞれのメモリ３１４Ａ〜３１４Ｄに結合される。さらに、処理ノード３１２Ａ〜３１２Ｄは、処理ノード３１２Ａ〜３１２Ｄ間の通信に使用されるインターフェースロジック（ＩＦ）を含む。例えば、処理ノード３１２Ａは、処理ノード３１２Ｂとの通信用にインターフェースロジック３１８Ａを、処理ノード３１２Ｃとの通信用にインターフェースロジック３１８Ｂを、さらに別の処理ノード（図示せず）との通信用に第３インターフェースロジック３１８Ｃを含む。同様に、処理ノード３１２Ｂは、インターフェースロジック３１８Ｄ、３１８Ｅ、および３１８Ｆを、処理ノード３１２Ｃは、インターフェースロジック３１８Ｇ、３１８Ｈ、および３１８Ｉを、および、処理ノード３１２Ｄは、インターフェースロジック３１８Ｊ、３１８Ｋおよび３１８Ｌを含む。
処理ノード３１２Ｄは、インターフェースロジック３１８Ｌを介して複数の入力／出力デバイス（例えば、デバイス３２０Ａ〜３２０Ｂをデイジーチェーン構造で）との通信のために結合されている。他の処理ノードは、他のＩ／Ｏデバイスと同様の形式で通信することができる。各プロセッサは、システムの他のプロセッサと関連付けられるメモリとアクセスするためにこのインターフェースを使用してもよい。参照符号の後に文字が付いたコンポーネントは、概して、必要に応じて符号のみで参照される点に留意されたい。例えば、一般的に処理ノードを指す場合には、処理ノード３１２が用いられる。
【００１２】
処理ノード３１２は、処理ノード間通信のためにパケットベースリンクを実装する。例示の実施形態では、このリンクは、一方向のラインセットとして実装される（例えば、ライン３２４Ａは処理ノード３１２Ａから処理ノード３１２Ｂへのパケット送信に、ライン３２４Ｂは処理ノード３１２Ｂから３１２Ａへのパケット通信に使用される）。その他のラインセット３２４Ｃ〜３２４Ｈは、図１に示すその他の処理ノード間のパケット送信用に使用される。概して、それぞれのラインセット３２４は、１以上のデータライン、このデータラインに対応する１以上のクロックライン、および、伝送されるパケットの種類を示した１以上のコントロールラインを含んでもよい。
このリンクは、処理ノード間の通信にキャッシュコヒーレントな方式で、あるいは、処理ノードとＩ／Ｏデバイス間（あるいは、ＰＣＩバスやＩＳＡバスなどの従来構造のＩ／Ｏバスへのバスブリッジ）の通信に、非コヒーレントな方式で動作することができる。さらに、このリンクは、図示しているような（例えば、３２０Ａおよび３２０Ｂ）Ｉ／Ｏデバイス間にデイジーチェーン構造を用いて、非コヒーレントな方式で動作してもよい。例示の実施形態では、このリンクは、コヒーレントなハイパートランスポートTMリンクあるいは非コヒーレントなハイパートランスポートTMリンク、として実装してもよい点に留意されたい。ただしこれに限らず、他の実施形態では他のリンクが可能である。
【００１３】
Ｉ／Ｏデバイス３２０Ａ〜３２０Ｂは任意の適切なＩ／Ｏデバイスであってもよい。例えば、Ｉ／Ｏデバイス３２０Ａ〜３２０Ｂとしては、デバイスを結合可能な（例えば、インターフェースカードやモデム）他のコンピュータシステムとの通信用デバイスを挙げることができる。さらに、Ｉ／Ｏデバイス３２０Ａ〜３２０Ｂとしては、ビデオアクセレータ、オーディオカード、ハードまたはフロッピィディスクドライブコントローラ、ＳＣＳＩ（スモールコンピュータシステムインターフェース）アダプタ、サウンドカード、およびＧＰＩＢ、フィールドバスインターフェースカードなどの様々なデータ取得カードなどを挙げることができる。“Ｉ／Ｏデバイス”という用語、および“周辺デバイス”という用語は、本明細書では同義語であるものとする。
【００１４】
メモリ３１４Ａ〜３１４Ｄは、任意の適切なメモリデバイスを備えることができる。例えば、メモリ３１４Ａ〜３１４Ｄは、１つ以上のRAMBUS DRAM(RDRAM)、同期DRAM（SDRAM)、DDR SDRAM、スタティックRAMなどを備えてもよい。コンピュータシステム３００のメモリアドレス空間は、メモリ３１４Ａ〜３１４Ｄに分割されている。各処理ノード３１２Ａ〜３１２Ｄは、アドレスとメモリ３１４Ａ〜３１４Ｄとの対応関係、すなわち、特定のアドレスについてメモリ要求を転送すべき処理ノード３１２Ａ〜３１２Ｄの決定に用いるメモリマップを備えていてもよい。メモリコントローラ３１６Ａ〜３１６Ｄは、メモリ３１４Ａ〜３１４Ｄとインタフェースをとるための制御回路を備えてもよい。さらに、メモリコントローラ３１６Ａ〜３１６Ｄは、メモリ要求をキューに記憶するための要求キューを備えていてもよい。メモリ３１４Ａ〜３１４Ｄは、先に説明した機能を実装するために、プロセッサにより実行可能なコードを記憶してもよい。
【００１５】
１つの処理ノードから別の処理ノードへ送信されるパケットは、１以上の中間ノードを通過し得る点に留意されたい。例えば、図１に示すように、処理ノード３１２Ａによって処理ノード３１２Ｄに送信されるパケットは、処理ノード３１２Ｂか処理ノード３１２Ｃのいずれかを通過し得る。適切なルーティングアルゴリズムであれば、どのようなものでも使用することができる。コンピュータシステム１００の別の実施形態では、処理ノードの数が、図１に示した実施形態よりも上下してもよい。一般に、パケットは、ノード間のライン３２４を伝わる１つ以上のビットタイムで送信され得る。ビットタイムは、対応するクロックラインを伝わるクロック信号の立ち上がりまたは立ち下がりとすることができる。パケットには、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシを維持するためのプローブパケット、プローブおよびコマンドに応答する応答パケットなどを含むことができる。
【００１６】
一実施形態では、処理ノード３１２はさらに、（図２に示すように）１つ以上のプロセッサコアを備えてもよい。各ノードのプロセッサコアは、キャッシュコヒーレントな方式で動作するインターナルパケットベースリンクを介して通信し得る点に留意されたい。さらに、プロセッサコアおよび処理ノード３１２は、任意の、あるいは全てのメモリ３１４を共有するように構成することができる点に留意されたい。
【００１７】
一実施形態では、１つ以上のプロセッサコアは、ｘ８６アーキテクチャを実装し得るが、他のアーキテクチャも可能であり、考察される。このため、各種プロセッサコアの各々の命令デコーダロジックは、ＬＯＣＫプレフィックスを使用する命令をマークするように構成され得る。さらに、以下に詳述しているように、プロセッサコアロジックは、ＬＯＣＫされた命令に関連づけられるマーカを識別可能なハードウェア（図２に示す）を含んでもよい。このハードウェアにより、ＬＯＣＫ命令が使用できるようになり、これにより、高度同期機構の一部としてコードのクリティカルセクションが識別される。
【００１８】
１つ以上のプロセッサが同時に同じメモリリファレンス（例えば、コードのクリティカルセクション）にアクセスしようとすることで生じる干渉効果を減らすために、高度同期機構およびそれに関連するハードウェアをコンピュータシステム１００に実装してもよい。以下にさらに詳しく記載しているように、この高度同期機構は新たな命令を用いてもよく、さらに、キャッシュコヒーレントの構成において相互接続され得る同期アービターなどのハードウェアを使用してもよい。
図２に示しているように、同期アービター２３０は、任意の処理ノード３１２のノースブリッジユニット２９０に結合される。これにより、同期アービターは各ノードの高度同期機構のトランザクションに関連づけられる明示的アドレスの検出が可能となる。この同期アービターは、相互接続ネットワークのコヒーレントドメイン内であればどこにでも配置することができる。図面では１つの同期アービターが示されているが、システムが複数のバーチャルマシンを支援するように構成され、さらに、これらのバーチャルマシンがいずれの現実の物理メモリとも共有しない場合、複数の同期アービターは、いくつかのアービターにわたって同期ロードを分散するように構成することができる。
【００１９】
“クリティカルセクション”という言い回しは、本明細書にわたって使用される点に留意されたい。“クリティカルセクション”とは、高度同期機構において使用されるコードのセクションのことであり、ＬＯＣＫプレフィックス、ＡＣＱＵＩＲＥ命令、およびこのクリティカルセクションを終了するＲＥＬＥＡＳＥ命令でマークされた１つ以上のメモリ参照命令を含むことができる。一実施形態では、各クリティカルセクションは４つの段階からなる。１）クリティカルセクションにおいて求められるキャッシュラインのアドレスを特定する（例えば、クリティカルセクションに入る）、２）これらのキャッシュラインを取得するためのメカニズムを経る、３）クリティカルセクションのデータをアトミックに変更する、４）キャッシュラインをシステムに解放する。特に、クリティカルセクションコードは、関連のオブザーバによってアトミックに実行されることになる。この第１段階をスペシフィケーション段階(specification phase)と呼び、一方で第３段階はアトミック段階(atomic phase)と呼ぶことが多い。
【００２０】
様々な実施品において、ソフトウェアは、単純な算術オペレーションの実行時に例外が生じない限り、クリティカルセクションのデータを読出し変更する間のデータに“単純な”算術論理操作を実行することができる。データを操作することでクリティカルセクションの内部に例外が生じれば、そのクリティカルセクションのアトミック性(atomicit)つまり一体性が保証されないおそれがある。クリティカルセクションのソフトウェアはアトミック性の不具合を検出し、これらを適切に処理する必要がある。これについて以下に詳述する。
【００２１】
一般に、高度同期機構はウィークメモリモデル(weakened memory model)を利用し、キャッシャブルデータ上でのみ実行してもよい。このウィークメモリモデルにより、高度同期機構は、クリティカルセクションの実行前に様々なプロセッサとメモリバッファとが空き状態となるのを待つことによるプロセッササイクルの無駄を回避することができる。しかし、ソフトウェアが標準のＰＣストロングメモリ(strong memory)モデルを要求する場合、ソフトウェアは、ＲＥＬＥＡＳＥ命令の直前にＬＦＥＮＳＥ命令、ＳＦＥＮＳＥ命令、あるいはＭＦＥＮＳＥ命令を挿入し、標準ＰＣのメモリの順序付けを保証するようにしてもよい。アンキャッシャブルデータへアクセスできるようにキャッシャブル同期を使用する場合、キャッシャブル同期データが他のいずれかのプロセッサでグローバルに可視状態になる前に最後のＬＯＣＫされたストアとＲＥＬＥＡＳＥ命令との間のＳＦＥＮＳＥ命令によって、アンキャッシャブルデータが全体的に可視状態であるということが保証される。これにより、パフォーマンス低下を最小限にしながら、アンキャッシャブルアクセスとキャッシャブルアクセスとのオーバーラップを最大にすることができる。
【００２２】
各種実施形態では、インターフェースロジック３１８Ａ〜３１８Ｌは、リンクからパケットを受信し、リンクに送信されるパケットをバッファリングする各種バッファを備えてもよい。コンピュータシステム１００は、パケット送信用に任意の適切なフロー制御メカニズムを用いることができる。インターフェースロジック３１８Ａ〜３１８Ｌに加えて、各処理ノードは、それぞれのバッファインターフェースユニット（ＢＩＵ）２２０（図２に示す）を含む。これにより、能動的に同期可能となる機能が与えられる。例えば、以下にさらに記載にしているように、ＢＩＵ２２０は、高度同期イベントに関連付けられるこれらの特定のアドレスに関して構成され、さらに、ＡＣＱＵＩＲＥ命令の実行に応答してこれらのアドレスを同期アービター２３０に送信するように構成することができる。さらに、ＢＩＵ２２０は、同期アービター２３０から受信した応答が、そのアドレスが干渉されていることを示しているか否かを確認するように構成することができる。この応答が、アドレスが干渉されていることを示しているか否かに応じて、ＢＩＵ２２０は、プロセッサコア１８のレジスタにエラーカウント値（failure count value）を送信することで、および同期アービター２３０に完了メッセージを送信することで、あるいは、干渉されていないと保証されているときにはクリティカルセクションの実行を可能にすることで、リクエスティングプロセッサコアに不具合を知らせ、そして同期アービター２３０への終了メッセージの送信を待つ。
【００２３】
図２は、図１の処理ノード３１２Ａと同期アービター２３０の実施形態のさらに詳細な態様を例示したブロック図である。図２を参照すると、処理ノード３１２Ａはプロセッサコア１８Ａと１８ｎとを含む。ｎは任意の数のプロセッサコアを表す。プロセッサコアは様々な実施形態において実質的に同じものとすることができるので、プロセッサコア１８Ａの詳細な態様だけを以下に記載する。図示しているように、プロセッサコア１８Ａおよび１８ｎは、バスインターフェースユニット２２０に結合されている。このバスインターフェースユニットはノースブリッジユニット２９０に結合されており、これはメモリコントローラ３１６Ａ、ハイパートランスポートTMインターフェースロジック３１８Ａ〜３１８Ｃ、および、一方向のリンクペア３２４Ｉ〜３２４Ｊを介して同期化アービター２３０に結合されている。
【００２４】
プロセッサコア１８Ａは、命令を実行するように構成されたハードウェアを含む。より詳細には、多くのプロセッサにとっては一般的であるように、プロセッサコア１８は、１つ以上の命令実行パイプラインを含み、これには、多数のパイプラインステージ、キャッシュストレージおよびコントロール、およびアドレス変換メカニズム（簡素化のために、関連する部分だけを図示する）を含む。したがって、図示しているように、プロセッサコア１８Ａはレベル１（Ｌ１）命令キャッシュ、プレフェッチロジック、および分岐予測ロジックを含む。これらのブロックは命令キャッシュと密結合されているので、これらをまとめてブロック２５０として図示している。
さらに、プロセッサコア１８Ａは、Ｌ１データキャッシュ２０７を含む。さらに、プロセッサコア１８Ａは、命令デコーダ２５５を含み、命令ディスパッチおよび制御ユニット２５７は、命令デコーダから命令を受信し、スケジューラ２５９にオペレーションをディスパッチするように結合されてもよい。さらに、命令ディスパッチおよび制御ユニット２５７は、マイクロコードリード読出し専用メモリ（ＭＲＯＭ）（図示せず）に結合できる。スケジューラ２５９は、命令ディスパッチおよび制御ユニット２５７からディスパッチしたオペレーションを受信し、実行ユニット２６０にオペレーションを発行するように結合されてもよい。様々な実装品では、実行ユニット２６０は、任意の数の整数実行ユニットと浮動小数点演算ユニットとを含んでもよい。さらに、プロセッサコア１８ＡはＴＬＢ２０６とロード／ストアユニット２７０を含む。他の実施形態では、（図示していないが）オンチップＬ２キャッシュがあってもよい。
【００２５】
命令デコーダ２５５は、デコード命令をオペレーションにデコードするように構成されており、ＭＲＯＭに格納されているオペレーションを用いて、間接的に、あるいは直接的にデコードすることができる。命令デコーダ２５５は、特定の命令を、実行ユニット２６０で実行可能なオペレーションにデコードする。単純な命令は単一のオペレーションに対応し、別の実施形態では、さらに複雑な命令は複数のオペレーションに対応するようにできる。一実施形態では、命令デコーダ２５５は、命令を同時にデコードするために、複数のデコーダ（図示せず）を含んでもよい。各命令は、命令が最初にＭＲＯＭに送信されるかどうかに応じて、複数のステージで位置合せされて、一連の制御値にデコードされる。これらの制御値は、命令ストリーム内で、オペランドアドレス情報および命令に含まれ得るディスプレイスメントデータまたは即値（immediate data）データとともに、命令ディスパッチおよび制御ユニット２５７にルーティングされる。以下にさらに記載しているように、メモリ参照命令がＬＯＣＫプレフィックスを含む場合は、命令デコーダはマーキングされたアドレスを識別することができる。
【００２６】
ロード／ストアユニット２７０は、実行ユニット２６０とデータキャッシュ２０７との間のインターフェースを取るように構成され得る。一実施形態では、ロード／ストアユニット２７０は、未処理のロードおよびストアのためにデータとアドレス情報を記憶するいくつかの記憶場所を有するロード／ストアバッファを備え得る。このため、例示の実施形態は、ＬＳ１２０５、リニア(linear)ＬＳ２  ２０９、物理ＬＳ２  ２１０、およびデータストレージ２１１を含み得る。さらに、プロセッサコア１８Ａは、マーカロジック２０８、およびマーカビット２１３を含む。
【００２７】
一実施形態では、クリティカルセクションは、確定的方法か楽観的方法の一方で処理されてもよい。高度同期機構の構成に基づいて、また、クリティカルセクションプレディクタの状態に基づいて実行モードを選択することができる。これについては以下にさらに詳細を記載する。各種の実施形態では、入出力基本システム（ＢＩＯＳ）、オペレーティングシステム（ＯＳ）、または、仮想メモリマネージャ（ＶＭＭ）のどれかが高度同期機構の動作モードを構成してもよい。確定的実行モードで動作する場合、ロックされたメモリ参照命令により特定されるアドレスはバンドルアップされて同期アービター２３０にまとめて送られ、干渉に対しての検査がなされる。キャッシュラインデータが取得され、（許可されれば）クリティカルセクションが実行される。これに対して、楽観的方法で動作する場合、干渉はないものと想定し、（同期アービター２３０をバイパスすることで）クリティカルセクションが実行される。さらに、他のいずれかのプロセッサがこのクリティカルセクションを干渉していれば、この干渉が検出されることになる。次いで、プロセッサはＡＣＱＵＩＲＥ命令に戻り、アトミック段階から離れて制御フローをリダイレクトする。
【００２８】
高度同期機構は、確定的モードを実装するために同期アービター２３０を使用してもよい。上述のように、同期アービター２３０は同期リクエストに関連した物理アドレスを全て検査してアドレスセットをパス（blessと称されることもある）またはアドレスセットをエラー（つまり、拒絶）とする。この検査は、他のいずれかのプロセッサコアあるいはリクエスタが動作しているか、またはその動作中にこれらのアドレスをリクエストしたかに基づいてなされる。そのため、同期アービター２３０は、ソフトウェアを、能動的に干渉を回避するように構築することも可能である。同期アービターによって干渉が検出される場合、同期アービター２３０は、リクエスティングプロセッサコアに、一意的な番号（例えば、カウント値２３３）を有したエラーステータスによりリクエストに応答するようにしてもよい。一実施形態においては、このカウントは、リクエストされているメモリリソースに対して競合しているリクエスタの数を示す。ソフトウェアは、この数を用いることで、その後のクリティカルセクションを介したデータ経路における干渉を能動的に回避するように、クリティカルセクションアクセスが行われることになる他のリソースを選択することが可能である。
【００２９】
従って、図２に示すように、同期アービター２３０は多数のエントリを含むストレージ２３２を含む。エントリの各々は、動作中のリクエストの物理アドレスを１つ以上記憶することができる。一実施形態では、各エントリは、単一の６４バイトのリクエストとして運ばれる物理アドレスを８つまで記憶することができる。さらに、同期アービターエントリは、エントリ中の全てのアドレスに対応するカウント値２３３を含む。上述のように、このカウント値は、クリティカルセクションのいずれかのアドレスに対して競合しているリクエスタ（例えば、干渉）の数を示す。同期アービター２３０がアドレスセットを受信すると、同期アービター２３０内の比較ユニット２３１は、このセット中の各アドレスとストレージ２３２中の全アドレスとの間でマッチングがあるかをチェックする。マッチングがなければ、同期アービター２３０は、パスカウント値(a passing count value)を返すことでパスレスポンスを発行し、これらのアドレスをストレージ２３２に記憶するように構成される。一実施形態では、このパスカウント値は０であるが、これに限らず適切なカウント値を用いることができる。しかし、マッチングアドレスがあれば、同期アービタ２３０は、このマッチングアドレスを含むアドレスセットに関連するカウント値２３３を増加し、次にこのカウント値をエラーレスポンスの一部として返す。比較ユニット２３１は、所望に応じて、様々な方法で実装される構造だけを比較することができる。加えて、別の実施形態では、ストレージ２３２に記憶される各アドレスは、それぞれのカウントに関連する。そのため、このカウント値は、クリティカルセクションのそれぞれのアドレスの１つに対して競合しているリクエスタ（つまり、干渉）の数を示す。
【００３０】
例示の実施形態では、バスインターフェースユニット（ＢＩＵ）２２０は、カウント比較回路２２１、ロックされたラインバッファ（ＬＬＢ）２２２、およびプレディクタ２２３を備える。さらに、ＢＩＵ２２０は、接続されている様々なコンポーネントからのトランザクションを送受信する各種の別の回路を備えることもできるが、このような回路は明瞭化のために省略されている。そのため、ＢＩＵ２２０は、ＡＣＱＵＩＲＥ命令の実行に応答して、クリティカルセクションに関連するアドレスセットをＬＬＢ２２２から同期アービター２３０に送信するように構成することができる。加えて、比較回路２２１は、同期アービター２３０から返されるカウント値を比較し、このカウントがパスカウント値（例えば、ゼロ）か、エラーカウント値かどうかをチェックするように構成することもできる。ＳＢＢ２２は任意のタイプのストレージ構造を用いて実装することができる。例えば、ＳＢＢは、所望に応じて、既存のメモリアドレスバッファ（ＭＡＢ）の一部であってもよいし、分離されてもよい。
【００３１】
上述したように、プロセッサコア１８が確定的同期モードで動作中であれば、クリティカルセクションに関連するアドレスは、ＬＯＣＫプレフィックスを用いて、命令をデコードする間にマーキングされてもよい。より詳細には、高度同期コードシーケンスに明らかに入っているメモリリファレンスは、適切なＭＯＶ命令でＬＯＣＫプレフィックスを使用することで、注釈付けされる。ＬＯＣＫed Ｌｏａｄ命令の形式は以下のとおりである。
LOCK MOVx reg,[B+I*s+DISP]
より詳細には、通常のメモリ読出し命令は、ＬＯＣＫプレフィックスを添付することで特別にされる。これにより、アドレスがＬ１キャッシュ（および、ＴＬＢ２０６）を通過する際に、ＢＩＵ２２０に関連のマーキングされた物理アドレスをＬＬＢ２２２に集めさせるようにする。さらに、書込み許可（ReadS, :not ReadM or Read）なくラインにアクセス（キャッシュミスの場合に）するように、メモリアクセスストレングス(strength)が低下する。Ｌｏａｄ命令は、ＡＣＱＵＩＲＥ命令が同期アービター２３０から戻るまで、ＬＳ２からリタイアできない。
【００３２】
ＢＩＵ２２０から（同期アービター２３０）へのリクエストがレスポンス待ちの間、ＬＬＢ２２２は、インバリデートになっているプローブセマンティックを待ち、１つ（あるいは、それ以上）のプローブが発生すれば、同期アービター２３０が正常であってもＡＣＱＵＩＲＥ命令はエラーにされる。ＬＯＣＫプレフィックスは、キャッシュやバスをいずれも特にロックせず、メモリベースのＭＯＶｅ命令に便利なマーカを単に付加するに過ぎない。そのため、命令をレジスタするＬＯＣＫｅｄ ＭＯＶ（他の形態では、ＬＯＣＫｅｄ Ｌｏａｄとも称される）は、データキャッシュパイプラインの下流へと通常は処理される。
【００３３】
従って、アドレス変換において、各リニアアドレスは、ＬＳ２  ２０９のリニアアドレス部に記憶される。対応する物理アドレスはＴＬＢ２０６中と物理ＬＳ  ２１０内とに記憶され、一方で、対応するデータはデータキャッシュ２０７とデータＬＳ２  ２１１とに記憶される。マーカロジック２０８は、付加的マーカビット２１３をデコードし生成する間に生成されるＬＯＣＫプレフィックスマーカを検出する。これにより、このようなアドレスの各々を、クリティカルセクションのパーティシパント(participant)としてマーキングする。データキャッシュでミスするＬＯＣＫed Ｌｏａｄはいずれも、Read-to-Shareアクセス セマンティックのメモリ階層を通じてそのキャッシュラインデータをフェッチさせるが、この特定のメモリリソースへの書込み許可はチャックされる。
【００３４】
上述のように、プロセッサコア１８が確定的同期モードで動作すれば、クリティカルセクションに関連するアドレスは、ＬＯＣＫプレフィックスを用いて、命令のデコード中にマーキングされる。より詳細には、高度同期コードシーケンスに明らかに入っているメモリプレフェッチリファレンスは、適切なＰＲＥＦＥＴＣＨＷ命令でＬＯＣＫプレフィックスを使用することで、注釈付けされる。このようなタイプのＬＯＣＫed Ｌｏａｄ命令の形式は以下のとおりである。
LOCK PREFETCHW [B+I*s+DISP]
従って、通常のメモリＰＲＥＦＥＴＣＨＷ命令は、ＬＯＣＫプレフィックスを添付することて特別にされる。これにより、アドレスがＬ１キャッシュ（および、ＴＬＢ２０６）を通過する際に、ＢＩＵ２２０に、関連のマーキングされた物理アドレスをＬＬＢ２２２に集めさせるようにする。さらに、メモリアクセスストレングスを低下させて、現実のＤＲＡＭがラインにアクセスするのを回避するようにさせる。ＰＲＥＦＥＴＣＨＷ命令は、ＡＣＱＵＩＲＥ命令が同期アービター２３０から戻るまで、ＬＳ２からリタイアできない。これらの命令は、クリティカルセクションに入っている（パーティシパントとなっている）キャッシュラインに接触するように用いられ、従って、このクリティカルセクションで必要な他のデータに接触するために、データ（例えば、ポインタ）を必要とする。
スペシフィケーション段階の終わりでは、ＡＣＱＵＩＲＥ命令は、ＢＩＵ２２０に、クリティカルセクションに対する全てのメモリリファレンスアドレスがＬＬＢ２２２に記録されることを通知するように用いられる。
【００３５】
このＡＣＱＵＩＲＥ命令は、以下の形式をとる。
ACQUIRE reg, imm8
このＡＣＱＵＩＲＥ命令は、ＬＯＣＫされたメモリリファレンス命令の数がＡＣＱＵＩＲＥ命令の即値値(immediate value)に等しいかどうかチェックする。このチェックがエラーであれば、ＡＣＱＵＩＲＥ命令はエラーコードとともに命令を終了する。そうでなければ、ＡＣＱＵＩＲＥ命令は、ＢＩＵ２２０に、ＬＬＢ２２２に記憶された全アドレスを同期アービター２３０に送信させる。
この命令は、データパス上ではメモリリファレンス命令のように”見える”。そのため、同期アービター２３０から返されるカウント値は、全てのラインが干渉なしでアクセスできることを確認（あるいは、否定）するように用いることができる。１つの仮想マシンに対して、あるいは１つのシステムに対しては１つの同期アービタ−２３０しかないので、この“ロード”命令にはアドレスは必要でない。ＡＣＱＵＩＲＥ命令で特定されるレジスタは、プロセッサコア１８の宛先レジスタである。
【００３６】
一実施形態では、ＬＯＣＫされたロードオペレーションのセマンティックは、ＰＲＯＢＥの位置を監視するプローブを含み得る。ある位置に対して、ある１つのＰＲＯＢＥが検出されれば、ＬＳ１あるいはＬＳ２キューは、読出しの完了を待たずにエラーステータスを返す。ＬＯＣＫされたロードの数がマイクロアーキテクチャの限界を越えれば、汎用エラー（＃ＧＰ：general-purpose fault）が生成される。ＡＣＱＵＩＲＥ命令がエラーになれば、ＬＯＣＫされたロード数はゼロにリセットされることになる。アドレスが、Write Backメモリタイプでなければ、この命令はページエラー（＃ＰＦ：page fault）か＃ＧＰエラーを生成するか、あるいは、ＡＣＱＵＩＲＥ命令がエラーにされる（その後起きる場合）。
【００３７】
いくつかのクリティカルセクションは、（データの変更がある場合に）どのような変更が適切であるか推定するように、多数の算術および制御フローデシジョンを含むようにしてもよい。しかし、ソフトウェアは、これらのタイプの命令が決して実際の例外を引き起こさないように調整しなければならない。一実施形態では、算術およびメモリレファレンス命令は、ＳＳＥレジスタ（ＸＭＭ）か汎用レジスタ（例えば、ＥＡＸなど）、あるいはＭＭＸかｘ８７レジスタのいずれかで処理され得る。
【００３８】
上記に記載したように、同期アービター２３０は、リクエストをまとめてパスするか、リクエストをまとめてエラーにする。同期アービターがリクエストをエラーにすれば、ＢＩＵ２２０へのレスポンスは、ゼロビットがセットされた（例えば、ＲＦＬＡＧＳ．ＺＦ）状態で、“同期アービターFail-to-ACQUIRE”と称される。上述のように、同期アービター２３０から返されるレスポンスは、干渉の数を示すカウント値２３３を含むことができる。ソフトウェアはこのカウント値を使用して、上述のように、今後の干渉を減らすようにしてもよい。同期アービター２３０からのカウント値２３３は、プロセッサコア１８内の汎用レジスタ(図示せず）に運ばれ、条件コードをセットするために使用することもできる。同期アービター２３０がリクエストをパスすれば、ＢＩＵ２２０へのレスポンスは、パスカウント値（例えば、ゼロ)を含むことができる。
【００３９】
一実施形態では、同期アービターアドレスストレージ２３２がフル状態であれば、リクエストは、マイナス１（−１）などの負のカウント値で返される。これにより、プロセッサコアで実行中のソフトウェアには、システム中のオーバーロードを判断し、しばらくの間、ソフトウェアが同期アービター２３０へのリクエストを停止できる手段が与えられる。例えば、ソフトウェアは、何か他のものをスケジューリングしてもよいし、あるいは、単に再び同期の試行を行う前の時間を無駄にするだけとしてもよい。
【００４０】
カウントがゼロであれば（同期アービター２３０が何ら干渉を検出しないことを意味する）、プロセッサコア１８は、アトミック段階で命令を実行し、所望に応じてキャッシュラインのデータを操作する。データ操作が完了すると、ＲＥＬＥＡＳＥ命令が実行され、クリティカルセクションの終了が知らせられる。一実施形態では、このＲＥＬＥＡＳＥ命令により、ＲＥＬＥＡＳＥメッセージを同期アービター２３０へ送信することで、変更された全てのデータが実質的に同時に可視状態になる。これにより、関連するキャッシュラインがシステムに解放される。
【００４１】
上述のように、クリティカルコードセクションは、ＬＯＣＫプレフィックスを備えた１以上のメモリレファレンス命令を含む。この後に、ＡＣＱＵＩＲＥ命令が続く。加えて、このＡＣＱＵＩＲＥ命令の後に条件付きジャンプ命令が続き、これにより、同期アービター２３０がFail-to-Acquireコードを供給するなら、あるいは、キャッシュラインの取得前にインバリデートになっているプローブが検出されれば、コードはクリティカルセクションを終了することができる。ある実施品では、この条件付きジャンプ命令後に解放命令が続く。２種類のクリティカルセクションを例証するために、以下に２つのアセンブリ言語のクリティカルコードセクションを示す。以下のコードセグメントは、説明目的で使用する例に過ぎない点に留意されたい。他の実施形態も可能であり、考察される。
【００４２】
以下の第１の例示コードセグメントは、二重リンクされたリストで素子を除去することを例示しており、これはＲＥＬＥＡＳＥ命令を用いてなされる。
// Concurrency Queue Version
// p is in RAX
LOCK MOVD A,[RAX+next] // a = p->next
LOCK MOVD B,[RAX+prev] // b = p->prev
LOCK MOVD C,[A+next]   // c = a->prev
LOCK MOVD D,[B+next]   // d = b->next
ACQUIRE reg
JNZ fails
MOVD [A+next],D  // a->prev= d
MOVD [B+prev],C  // b->prev = c
MOVD [RAX+next],0  // p->next = NULL
MOVD [RAX+prev],0 // p->prev = NULL
RELEASE
【００４３】
以下の例示コードセグメントは、二重リンクされたリストに素子を挿入することを例示しており、これはＲＥＬＥＡＳＥ命令を用いてなされる。
// Concurrency Queue Version
// q is in RAX 
// p is in RSI
LOCK MOVD    S,[RAX+next]      // s = q->next
LOCK PREFETCHW [RSI+prev]  // touch p->prev
LOCK PREFETCHW [RSI+next]  // touch p->next
LOCK PREFETCHW [S+next]    // touch s->next
ACQUIRE reg 
JNZ fails
MOVD [RAX+next],RSI           // q->next = p
MOVD [S+prev],RSI             // s->prev = p
MOVD [RSI+next],S               // p->next = s
MOVD [RSI+prev],RAX     // p->prev = q
RELEASE
【００４４】
一実施形態では、高度同期機構は、"Fail-to-ACQUIRE"と"Fail-to-REQUESTOR"の２種類のエラーをサポートする。Fail-to-ACQUIREエラーは、ＡＣＱＵＩＲＥ命令をゼロビットがセットされた（例えば、ＲＦＬＡＧＳ．ＺＦ）状態で完了させる。これにより、後続の条件付きジャンプ命令は、アトミック段階のダメージ誘発命令を避けて制御フローをリダイレクトできる。ゼロビットがセットされた（例えば、、ＲＦＬＡＧＳ．ＺＦ)状態の同期アービターのFail-to-ACQUIREは、１つの種類のFail-to-ACQUIREエラーである。プロセッサのFail-to-ACQUIREは別の種類のエラーである。一実施形態では、クリティカルセクションの実行中、プロセッサコアは、メモリトランザクションを監視することで通信することができる。これらの監視は、実行プロセッサコアのＡＣＱＵＩＲＥ命令で可視状態になる。より詳細には、クリティカルセクションに求められるアドレスの収集開始と同期アービター２３０のレスポンス間の時間において、プロセッサコア１８は、コヒーレントインバリデーションプローブ（例えば、インバリデートになっているプローブ）に対するこれらのアドレスを全て監視する。ラインのいずれかが無効にされていれば、同期アービター２３０からのレスポンスは無視され、ＡＣＵＩＲＥ命令はゼロビットにセットされた（例えば、ＲＦＬＡＧＳ．ＺＦ）状態でエラーにされる。
【００４５】
このFail-to-REQUESTORエラーは、干渉のチェックがなされ、同期アービター２３０によってパスされたラインでキャッシュヒットがあれば、ＰＲＯＢＥとして送信される。リクエスティングプロセッサが、高度同期機構のクリティカルセクションを現在処理している場合、Fail-to-REQUESTORレスポンスは、このリクエスティングプロセッサをFail-to-ACQUIREにする。あるいは、Fail-to-REQUESTORレスポンスは、リクエスティングプロセッサがクリティカルセクションを処理していなければ、リクエスティングプロセッサのＢＩＵに、そのメモリリクエストを再リクエストさせるようにする。そのため、ＢＩＵ２２０は、同期アービター２３０からパス通知を取得する前に、インバリデートになっているプローブの受信に応答して、Fail-to-ACQUIREとするように構成してもよい。
【００４６】
クリティカルセクションのアドレスを取得すると、すでにアドレスが同期アービター２３０によってパスされているプロセッサコア１８は、メモリレファレンス命令がアトミック段階で処理されると、排他アクセス（例えば、書込み許可）用の各キャッシュラインを取得する。パスしたキャッシュラインが到着すると、プロセッサコア１８はこのキャッシュラインを保持し、Fail-to-REQUESTORレスポンスでコヒーレントインバリデーションプローブに応答することによって、他のプロセッサコアにこのラインを使わせないようにする、つまりスティールする。Fail-to-REQUESTORは、ネガティブアクナレッジメント（ＮＡＫ）とも称されることに留意されたい。
【００４７】
上述のように、プロセッサがFail-to-REQUESTOR を受信し、これが高度同期命令シーケンスに入っている場合、その命令シーケンスはＡＣＱＵＩＲＥ命令においてエラーにされてしまう。この場合、後続の条件付きジャンプ命令が行われ、クリティカルセクション中の、メモリレファレンス命令のダメージ誘発部分を避けることができる。しかし、プロセッサがFail-to-REQUESTORを受信し、これが高度同期命令シーケンスに入っていない場合、リクエスティングプロセッサのＢＩＵは、もとのメモリトランザクションを単に再リクエストするだけである。したがって、Fail-to-REQUESTORを送信し、パスしたクリティカルセクションで次のコヒーレントインバリデーションが到着する間の経過時間は、同期アービターのブレッシングが保証された状態で、プロセッサの進行を可能とする。プロセッサの進行が保証されると、高度同期機構を既存の同期メカニズムよりも実効的なものにすることができる。したがって、クリティカルセクションとインターフェースメモリリファレンスは両方とも、必ず実行される（例えば、ライブロックにもデッドロックにもならない）。
【００４８】
上述のように、高度同期機構に入っているプロセッサのパフォーマンスは、クリティカルセクションプレディクタ２２３を用いて最適化することができる。まず、クリティカルセクションの実行中に干渉が起きないことを予測して、プレディクタ２２３をセットしてもよい。この方法では、プロセッサコア１８は同期アービター２３０を実際に使用しない。代わりに、プロセッサコア１８はＬＯＣＫされたメモリリファレンスを記録し、干渉を検出すべく、これらのメモリリファレンスをコヒーレントインバリデーションプローブに対してチェックする。いずれかの干渉が検出される前にクリティカルセクションが終了する場合は、クリティカルセクションのアクティビティは、関連する第三者(interested third party)のいずれにも見られてはおらず、アトミックに実行がなされたかのように実行が行われたことになる。このような特性により、高度同期機構を、いずれの競合も検出されない場合に、既存の同期メカニズムと競合するプロセッササイクルにすることができる。
【００４９】
より詳細には、干渉が検出される場合、プロセッサコア１８はＡＣＱＵＩＲＥ命令に対してエラーステータスを生成する。また、後続の条件付き分岐はクリティカルセクションから制御のフローをリダイレクトし、確定的モードを予測するようにプレディクタをリセットする。次のクリティカルセクションが検出される場合、デコーダは、干渉が起こりうることを予測する。さらに、デコーダは、同期アービター２３０を使って（可能であれば）、クリティカルセクションを処理することになる。
【００５０】
一実施形態では、ミスアラインとなっているデータアイテム（misaligned data item）が現実のクリティカルセクションに入っていないキャッシュラインにスパンが及ばない限り、高度同期機構は、これらのミスアラインとなったデータアイテム上で動作する。接触する全てのキャッシュラインがクリティカルセクションエントリの一部と判断される限り、ソフトウェアは自由に同期アイテムをキャッシュラインの境界に広げることができる。データアイテムがキャッシュラインを同期通信の一部ではない別のキャッシュラインにスパンが及ぶ場合、プロセッサは、アトミック性の不具合を検出せず、また、アトミック性の欠如を知らせない。
【００５１】
さらに、クリティカルセクションデータへのアクセスは、そのデータがメインメモリにあるかどうかに依存する。クリティカルセクションに求められるラインの全ては、クリティカルセクションに入る前に接触され、また、このクリティカルセクションに入る前に、ＬＯＣＫed ＬｏａｄあるいはＬＯＣＫされたＰＲＥＦＥＴＣＨＷ命令を実行するときに、アクセス権に関する問題(access rights issue)やページフォールトに関する問題(page-faulting issue)が検出され得る。いずれかのリードイン(lead-in)アドレスがエラーになると、後続のＡＣＱＵＩＲＥ命令はエラーにされる。クリティカルセクションに入った後、いずれかの命令が例外を生じさせれば、プロセッサはＡＣＱＵＩＲＥ命令においてエラーを生じさせ、後続の条件付きジャンプにおいて、クリティカルセクションを避けてコントロールをリダイレクトする。
【００５２】
一実施形態では、プロセッサコア１８のデコーダが割込みしなければならない場合、プロセッサコアのデコーダは、ＡＣＱＵＩＲＥ命令がゼロビットにセットされた（例えば、RFLAGS.ZF）状態でエラーになるように調整し、ＡＣＱＵＩＲＥ命令において割込みを行う。
【００５３】
同期アービター２３０がハイパートランスポートＴＭ構成でノースブリッジの実装品に接続されている実施形態では、同期アービター２３０は、他のコンポーネントが有していない、所定の、および／またはリザーブされたノードＩＤを割り当てられる。この割り当ては、例えばＢＩＯＳによってブート時間に行われる。加えて、上記の実施形態では、カウント値は６４ビット値として返されるが、これに限らず他の値も考察される。
【００５４】
図３は、図１および図２に示すコンピュータシステムの実施形態の動作を説明したフローチャートである。図１〜３を集合的に参照すると、ブロック４０５において、クリティカルセクションの一部として現在のところ動作あるいはアクセスされているキャッシュラインのアドレスは、リスト（例えば、ＬＬＢ２２２）に保持されている。例えば、同期アービター２３０はクリティカルセクションに対応するアドレスをセットでアドレスストレージ２３２のエントリに記憶する。一実施形態では、アドレスストレージ２３２の各エントリはさらに、ストレージ２３２に記憶されている全体のアドレスセットに関連するカウント値を記憶する。上述のように、カウンタ値は、セット中のアドレスのいずれかに対する競合（つまり、干渉）の数を示す。別の実施形態では、同期アービター２３０は、各エントリに多数のカウント値を記憶する。よって、エントリ中の各アドレスは関連のアドレス値を有する。
【００５５】
高度同期機構を実装しているプロセッサあるいはプロセッサコアが１以上のキャッシュラインへの排他アクセスをリクエストする場合、このリクエストは、クリティカルコードセクションの形式でなされる。例えば、上述のように、アトミックな方法で命令を確実に完了するために（全ての外部オブザーバによって見られるときに））、クリティカルセクションはＬＯＣＫされたＭＯＶ命令を使用してもよく、この後にＡＣＱＵＩＲＥ命令とＲＥＬＥＡＳＥ命令とが続く（ブロック４１５）。したがって、リクエストされたアドレスセットは、干渉のチェックがなされる。一実施形態では、このアドレスセットは、アドレスストレージ２３２内の全アドレスと比較される（ブロック４２０）。上述した実施形態では、ＬＯＣＫされたＭＯＶ命令により、アドレスがマーキングされる。このマーキングは、ＢＩＵ２２０に、マーキングされた各アドレスをＬＬＢ２２２に記憶させる。ＡＣＱＵＩＲＥ命令は、ＢＩＵ２２０に、６４バイトの物理アドレスデータを運ぶアンキャッシャブルライトの形式で、同期アービター２３０に、ＬＬＢ２２２中の全体のアドレスセットを送信させる。同期アービター２３０はこのアドレスセットをストレージ２３２の全てのアドレスと比較する。
【００５６】
いずれかのアドレスにマッチングがあれば（ブロック４２５）、マッチングアドレス関連するカウント値は増加され（ブロック４５５）、新たなカウント値が、６４バイトのレスポンスデータを運ぶアンキャッシャブルライトへのエラーレスポンスとして、返される（ブロック４６０）。加えて、同期アービター２３０は、エラーが生じるとアドレスセットを破棄する。ＢＩＵ２２０はエラーカウント値を、条件付きフラッグもセットする、リクエスティングプロセッサ／コアのレジスタに送る。この結果、リクエスティングプロセッサ／コアは、後続のオペレーションで別のメモリリソースセットを選択し、（ブロック４６５）次に同期をとるときに干渉を回避するように、このカウント値を使用してもよい。動作はブロック４１５で上述したように進行する。
【００５７】
ブロック４２５に戻ると、ストレージ２３２にマッチングアドレスがなければ、同期アービター２３０はパスカウント値（例えば、ゼロ）をＢＩＵ２２０に返す（ブロック４３０）。加えて、同期アービター２３０はストレージ２３２のエントリにアドレスセットを記憶する（ブロック４３５）。ＢＩＵ２２０はＡＣＱＵＩＲＥ命令で特定された、リクエスティングプロセッサ／コアレジスタへパスカウント値を送る。このため、このリクエスティングプロセッサ／コアは、リクエストされたアドレスにおいてデータを操作するか、データ上で動作する（ブロック４４０）。動作が完了していなければ（ブロック４４５）、ＢＩＵ２２０は同期アービター２３０への完了メッセージを送信するのが遅くなる。ＲＥＬＥＡＳＥ命令が実行されるときなど、クリティカルセクションにおいて動作が完了すると、ＢＩＵ２２０は同期アービター２３０に完了メッセージを送信する。完了メッセージを受信すると、同期アービター２３０はストレージ２３２から対応するアドレスをフラッシュする。この結果、これらのアドレスをシステムに解放し（ブロック４５０）別のプロセッサ／コアがこれらのアドレスを使用する。加えて、ロード／ストアユニット２７０は、リタイアしたクリティカルセクション中の全ての命令に対するデータキャッシュをアップデートする。
【００５８】
上述のように、クリティカルセクションのプロセッシングにおいて、クリティカルセクションのアドレスでコヒーレンシーインバリデーションプローブがヒットすれば、そのプローブに対する応答は、クリティカルセクションのプロセッシングのステータス（つまり、キャッシュラインがすでに取得済みであるかどうか）に応じて決まる。図４は、コヒーレンシーインバリデーションプローブを受信したときの図１および図２の実施形態の動作を記載したフローチャートである。
【００５９】
図１〜図４を集合的に参照すると、図４のブロック５０５において、プローブは、ロードストアユニット２７０のクリティカルセクションアドレスで受信され、ヒットする。リクエストされたラインがすでに正常に取得できていれば（ブロック５１０）、（例えば、同期アービター２３０がパスカウント値を送った後に、コヒーレンシーインバリデーションプローブ受信され、ストレージ２３２にこのアドレスセットが記憶される）、ＢＩＵ２２０はこのプローブへのレスポンスとして、Failure-to-Requestorレスポンスを送る（ブロック５１５）。リクエスティングプロセッサコアにおいては、 プロセッサコアがクリティカルセクションで動作していたなら、Failure-to-Requestor レスポンスはＡＣＱＵＩＲＥ命令をエラーにし、そうでなければ、アドレスをリトライさせる必要がある。
【００６０】
ブロック５１０に戻ると、リクエストされたラインが取得されていれば、プロセッサコアは、同期アービター２３０から受信したいずれのカウント値も無視してもよい（ブロック５２０）。ロード／ストアユニット２７０は、命令ディスパッチおよび制御ユニット２５７に、プローブヒット（例えば、Ｐｒｂヒット信号）があること、よって、Failure-to-Acquireがあることを知らせる。そのため、ＡＣＱＵＩＲＥ命令は、上述のように、エラーにされる。そのため、ＡＣＱＵＩＲＥ命令は、外部オブザーバに対しては、単にエラーになる。
【００６１】
上述のコンピュータシステムは、１つ以上のプロセッサコアを含む処理ノードを含むが、別の実施形態では、高度同期機構および関連のハードウェアを所望に応じて、スタンドアローン型プロセッサや、処理ノードとスタンドアローン型プロセッサの組合せを用いて実装してもよいことが考察される。このような実施形態では、各スタンドアローン型プロセッサは、上述のハードウェアの全てあるいは一部を含み、また、高度同期機構の一部である命令を実行することが可能である。プロセッサおよびプロセッサコアという用語は、相違点が具体的に列記されている場合を除いて、同義語のように用いられる。
【００６２】
これまでに説明した機能を実装するコードおよび／またはデータは、コンピュータアクセシブル／リーダブル可能な媒体にも提供される。概して、コンピュータアクセシブル／リーダブル媒体は、命令および／あるいはデータをコンピュータに提供するために使用する間に、コンピュータによってアクセス可能ないずれの媒体を含み得る。例えば、コンピュータアクセシブル媒体としては、次のようなストレージ媒体、つまり、例えば、（固定式あるいはリムーバブル式の）ディスク、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＷなどの磁気媒体や光学媒体、ＲＡＭ（例えば、同期型ダイナミックＲＡＭ（ＳＤＲＡＭ）、Ｒａｍｂｕｓ  Ｄｒａｍ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、など）、ＲＯＭ、フラッシュメモリなどの揮発性あるいは非揮発性メモリ媒体、、ユニバーサルシリアルバス（ＵＳＢ）インターフェースなどの周辺インターフェースを介してアクセス可能な非揮発性メモリ（例えば、フラッシュメモリ）が挙げられ、さらに、送信媒体を介してアクセス可能な媒体、あるいは、ネットワークおよび／あるいは無線リンクなどの通信媒体を介して伝達される電気、電磁気あるいはデジタル信号などの信号、が挙げられる。
【００６３】
上述の実施形態は、非常に詳細に記載されているが、上記の開示を完全に理解すれば、当業者にとっては様々な変形および変更が明らかになるであろう。添付した請求項は、これらの全ての変形および変更を包含するものと解釈される。
【産業上の利用可能性】
【００６４】
本発明は、一般にマイクロプロセッサに適用可能である。
【図面の簡単な説明】
【００６５】
【図１】コンピュータシステムの一実施形態のブロック図。
【図２】図１の処理ノードの実施形態の更なる詳細を示したブロック図。
【図３】図１および図２に示すコンピュータシステムの一実施形態の動作を説明したフロー図。
【図４】コヒーレンシーインバリデーションブローブの受信に応答して図１および図２に示すコンピュータシステムの一実施形態の動作を説明したフロー図。
【図１】
2009506436.tif 000003
【図２】
2009506436.tif 000004
【図３】
2009506436.tif 000005
【図４】
2009506436.tif 000006
【手続補正書】
【提出日】平成19年9月6日(2007.9.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサ（１８Ａ、１８Ｂ）が実行する方法であって、前記プロセッサが、
所与のメモリリソースへの排他アクセスをリクエストし、前記リクエストは前記所与のメモリリソースに関連づけられる１つ以上のアドレスを含むものであり、
前記１つ以上のアドレスの各々を、複数のアドレスセットの各アドレスと比較し、前記複数のアドレスセットの各アドレスは、リクエスタが排他アクセスを許可しているそれぞれのメモリリソースに対応しており、かつ、
前記１つ以上のアドレスのいずれかのアドレスが前記複数のアドレスセットのいずれかのアドレスとマッチングしていることに応答して、前記マッチングアドレスに関連付けられるカウント値を返し、前記カウント値は前記マッチングアドレスに対して競合しているリクエスタの数を示すものであり、
前記プロセッサは、１つ以上のリクエスタが前記マッチングアドレスに対して競合していることを示すエラーカウント値の受信に応答して、次のリクエストで別のメモリリソースを選択するように構成される、方法。
【請求項２】
前記１つ以上のアドレスのいずれも前記複数のアドレスセットのいずれにもマッチングしないことに応答して、パスカウント値ゼロを返すステップをさらに含む、請求項１記載の方法。
【請求項３】
別のプロセッサが別のメモリリソースへの排他アクセスを有しているかどうかを判断するように、前記カウント値を用いるステップをさらに含む、請求項１記載の方法。
【請求項４】
排他アクセスのリクエストでは、ＬＯＣＫプレフィックスを有する１つ以上のロックされたメモリリファレンス命令を実行し、前記ＬＯＣＫプレフィックスにより、前記ロックされたメモリリファレンス命令に関連づけられるアドレスが、命令のデコードにおいて１つ以上のインジケーションビットでマーキングされる、請求項１記載の方法。
【請求項５】
排他アクセスのリクエストでは、さらに、前記所与のメモリリソースの１つ以上のアドレスの各々を、前記複数のアドレスセットの各々と比較させるＡＣＱＵＩＲＥ命令を実行する、請求項４記載の方法。
【請求項６】
前記ロックされたメモリリファレンス命令に関連づけられる前記アドレスをプロセッサバッファに記憶し、前記ＡＣＱＵＩＲＥ命令の実行に応答して、前記プロセッサバッファの前記全てのアドレスを比較のために送信する、請求項４記載の方法。
【請求項７】
１つ以上のメモリ（３１４Ａ〜３１４Ｄ）に結合された、互いに連結された１つ以上のプロセッサ（１８Ａ、１８Ｂ）を含み、前記プロセッサの各々は所与のメモリリソースへの排他アクセスをリクエストするために、命令を実行するように構成されており、前記リクエストは前記所与のメモリリソースに関連づけられる１つ以上のアドレスを含むものであって、
前記一つ以上のアドレスの各々を複数のアドレスセットの各アドレスと比較するように結合されたアービトレーションユニット（２３０）を含み、前記複数のアドレスセットの各アドレスは、リクエスタが排他アクセスを許可されたそれぞれのメモリリソースに対応しており、
前記アービトレーションユニットは、前記複数のアドレスセットのうちのいずれかのアドレスが前記１つ以上のアドレスのいずれかのアドレスとマッチングすることに応答して、前記マッチングアドレスを含む前記セットに関連するカウント値（２３３）を返すように構成されており、前記カウント値は前記マッチングアドレスに対して競合しているリクエスタの数を示すものであり、
前記プロセッサは、１つ以上のリクエスタが前記マッチングアドレスに対して競合していることを示すエラーカウント値の受信に応答して、次のリクエストで別のメモリリソースを選択するように構成される、コンピュータシステム。
【請求項８】
前記アービトレーションユニットはさらに、前記複数のアドレスセットのうちのいずれのアドレスも前記１つ以上のアドレスとマッチングしないことに応答して、パスカウント値ゼロを返すように構成されている、請求項７記載のコンピュータシステム。
【請求項９】
前記１つ以上のプロセッサの各々はさらに、別のプロセッサが別のメモリリソースへの排他アクセスを有しているかを判断するために、前記カウント値を使用するように構成されている、請求項７記載のコンピュータシステム。
【請求項１０】
前記１つ以上のプロセッサの各々はさらに、
ＬＯＣＫプレフィックスを有する１つ以上のメモリリファレンス命令を実行するように構成されており、前記ＬＯＣＫプレフィックスは、前記ロックされたメモリリファレンス命令に関連づけられるアドレスを、命令のデコードにおいて１つ以上のインジケーションビットでマーキングされるようにし、
前記所与のメモリリソースの１つ以上のアドレスの各々を、前記複数のアドレスセットの各々と比較させるＡＣＱＵＩＲＥ命令を実行する用に構成される、請求項７記載のコンピュータシステム。
【国際調査報告】
2009506436.tif 000007
2009506436.tif 000008
2009506436.tif 000009