(57)【要約】【課題】スピンロックのためのスピン待ちループ実行時における消費電力を削減することが可能なデータ処理装置を提供すること。【解決手段】ＣＰＵ２１は、スピンロック処理を行なう際にウェイト付きロード命令を実行すると、対応するキャッシュメモリ２５にスピン待ち要求を出力する。また、キャッシュメモリ２５は、ＣＰＵ２１からスピン待ち要求を受けると、所定の条件（スヌープ・ライト・ヒット、割り込み要求、一定時間の経過）を満たすまでＣＰＵからのリード・リクエストに対するアクノリッジ応答の出力を一時停止する。したがって、ＣＰＵ２１のパイプライン実行をストールさせて、ＣＰＵ２１およびキャッシュメモリ２５の動作を一時停止させることができ、スピン待ちループ実行時における消費電力を削減することが可能となる。【選択図】図６
2011150422.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサのそれぞれがキャッシュメモリを介して共有メモリに接続され、キャッシュ・コヒーレンシが保たれているデータ処理装置であって、
前記複数のプロセッサのそれぞれは、スピンロック処理を行なう際に所定命令を実行すると、対応するキャッシュメモリにスピン待ち要求を出力する命令実行手段を含み、
前記キャッシュメモリは、対応するプロセッサから前記スピン待ち要求を受けると、所定の条件を満たすまで前記対応するプロセッサからのリード・リクエストに対するアクノリッジ応答の出力を一時停止する制御手段を含む、データ処理装置。
【請求項２】
前記キャッシュメモリはさらに、スピン待ち状態を制御するためのフラグを含み、
前記制御手段は、前記対応するプロセッサから前記スピン待ち要求を受けると前記フラグをセットしてスピン待ち状態に遷移し、前記所定の条件を満たしたときに前記フラグをクリアして通常動作状態に遷移する、請求項１記載のデータ処理装置。
【請求項３】
前記制御手段は、割り込み要求を受けたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項１または２記載のデータ処理装置。
【請求項４】
前記制御手段は、前記アクノリッジ応答の出力を停止している状態であっても、前記対応するプロセッサ以外のプロセッサからスヌープ・アクセスを受けたときは、キャッシュ・コヒーレンシを保持するために前記スヌープ・アクセスを受け付けて当該キャッシュラインのキャッシュ状態を更新する、請求項１または２記載のデータ処理装置。
【請求項５】
前記制御手段は、前記対応するプロセッサ以外のプロセッサからスヌープ・アクセスを受けたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項１または２記載のデータ処理装置。
【請求項６】
前記キャッシュメモリはさらに、前記アクノリッジ応答の出力を停止させるサイクル数をカウントするカウンタを含み、
前記制御手段は、前記対応するプロセッサからリード・リクエストを受けたときに前記カウンタにカウントを開始させ、前記カウンタがタイムアウトしたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項１または２記載のデータ処理装置。
【請求項７】
前記キャッシュメモリはさらに、前記カウンタに設定するリロード値が設定されるレジスタを含み、
前記制御手段は、前記対応するプロセッサからリード・リクエストを受けたときに前記カウンタに前記レジスタのリロード値をリロードさせてカウントを開始させ、前記カウンタがタイムアウトしたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項６記載のデータ処理装置。
【請求項８】
前記命令実行手段は、ウェイト付きロード命令を実行するときに前記対応するキャッシュメモリに前記スピン待ち要求を出力し、
前記制御手段は、前記対応するプロセッサから前記スピン待ち要求を受けるとスピン待ち状態に遷移し、前記所定の条件を満たしたときに通常動作状態に遷移した後、データのロード処理を実行してロードデータを前記対応するプロセッサに出力する、請求項１または２記載のデータ処理装置。
【請求項９】
前記命令実行手段は、スピン待ち命令を実行するときに前記対応するキャッシュメモリに前記スピン待ち要求を出力し、
前記制御手段は、前記対応するプロセッサから前記スピン待ち要求を受けるとスピン待ち状態に遷移し、前記所定の条件を満たしたときに通常動作状態に遷移した後、データのロード処理を実行してロードデータを前記対応するプロセッサに出力し、
前記命令実行手段は、前記対応するキャッシュメモリから受けたロードデータが前記スピン待ち命令によって指定された終了条件を満たしていない場合には、前記対応するキャッシュメモリに対して再度スピン待ち要求を出力して、前記対応するキャッシュメモリをスピン待ち状態に遷移させる、請求項１または２記載のデータ処理装置。
【請求項１０】
前記データ処理装置はさらに、クロック供給を制御するクロック制御手段を含み、
前記制御手段は、前記対応するプロセッサからスピン待ち要求を受けると、前記クロック制御手段に対して前記対応するプロセッサおよび前記対応するキャッシュメモリの一部の回路に供給するクロックを停止するよう指示する、請求項１または２記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリ型マルチプロセッサ（マルチコア）・システムにおけるプロセス間排他制御のためのスピンロック方式に関し、特に、キャッシュメモリの制御によりスピンロック動作における消費電力を削減することが可能なマルチプロセッサ・システムで用いられるデータ処理装置に関する。
【背景技術】
【０００２】
近年、処理速度の高速化のためにマイクロコンピュータにキャッシュメモリが搭載されることが多い。プロセッサがキャッシュメモリを介して主記憶にアクセスすることにより、キャッシュにヒットしたときの処理速度を向上させることができる。
【０００３】
このようなプロセッサを複数搭載したマルチプロセッサ・システムにおいては、各プロセッサがキャッシュメモリを介して共有バスに接続され、共有バスに接続される共有メモリ上のデータをアクセスすることができるようになっている。
【０００４】
マルチプロセッサ、特に対称型マルチプロセッサ（ＳＭＰ：Symmetric Multi-Processor）においては、プロセッサ間の共有リソースである共有メモリ上のデータに対して、キャッシュメモリ間で内容の一致（コヒーレンシ）を取りながら、各プロセッサが協調して処理を進めることが重要となる。
【０００５】
このようなキャッシュメモリ間の内容の一致を保つためのプロトコルは、キャッシュ・コヒーレンシ・プロトコルと呼ばれており、大きく分類して、無効化型プロトコルと更新型プロトコルとに分けることができる。プロセッサ数が数十を超えないような比較的小規模なマルチプロセッサにおいては、比較的構成がシンプルな無効化型プロトコルが採用されることが多い。
【０００６】
代表的な無効化型のキャッシュ・コヒーレンシ・プロトコルとして、ライトワンス（Write-Once）プロトコルや、ＭＥＳＩプロトコルを挙げることができる。これらの無効化型プロトコルにおいては、バス・スヌープ機能を有する命令データ分離型のスヌープ・キャッシュ（Snoop Cache）の使用が前提となっており、自キャッシュへのライト・ミスが発生した場合には、スヌープ・ヒットした他キャッシュのキャッシュラインを無効化することで、キャッシュ間のコヒーレンシを保つことができる。
【０００７】
また、マルチプロセッサ・システムにおいては、複数のプロセッサが同期を取りながら並行して処理を行なうが、これらのプロセス／スレッド間の排他制御・同期制御のためには、ロックによる排他制御が必要となる。
【０００８】
シングルプロセッサ・システムにおいて、クリティカル・セクションに対するプロセス／スレッド間の排他制御は、その間を割り込み禁止とすることで容易に実現できる。しかしながら、マルチプロセッサ・システムにおいては、割り込み禁止中であっても他のプロセッサがクリティカル・セクションを実行する可能性がある。そのため、割り込み禁止とするだけでは不十分であり、プロセス／スレッド間でロック処理を行なうことが必要不可欠である。
【０００９】
ロック処理とは、まず共有リソースをロックし、プロセッサがロックを獲得してからクリティカル・セクションを実行して共有リソースにアクセスした後、アンロックしてロックを解放するといった処理である。スピンロックは、このようなロック処理において一般的に使用される方式であり、ロックを獲得しようとするプロセッサがロック待ち状態でビジーループ（スピン）することにより、ロックの獲得を高速に行なう処理である。
【００１０】
これに関連する技術として、下記の特許文献１〜３に開示された発明、および非特許文献１〜２に開示された技術がある。
【００１１】
特許文献１は、複数の論理的または物理的なプロセッサ間の排他制御のためのスピンループに起因する消費電力やプロセッサ資源の無駄を削減することを目的とする。排他制御のための共有変数［Ａ］の監視等のために、目的の共有変数［Ａ］のロード試行およびストア事象の監視開始契機を設定するＬＯＡＤ−ＷＩＴＨ−ＬＯＯＫＵＰ命令を設ける。ＣＰＵは、ＣＡＳ［Ａ］による獲得失敗後にＬＯＡＤ−ＷＩＴＨ−ＬＯＯＫＵＰ命令を発行して、ロック変数［Ａ］へのストア（他のＣＰＵからの解放アクセス）を監視するとともにＳＵＰＥＮＤによって休止状態に移行し、他のＣＰＵからのロック変数［Ａ］に対するストア可能性の検出を契機としてＣＰＵを復帰させてロック変数［Ａ］の再獲得を試行させることが可能になり、無駄なスピンループ（空転待ち）を行わせる必要がなくなる。
【００１２】
特許文献２は、複数のスレッドを実行し得るマルチスレッド・プロセッサにおいて、複数のスレッドを効率的に切り替えうるマルチスレッド制御装置および制御方法を提供することを目的とする。マルチスレッド制御装置は、複数のスレッド処理手段を有し、あるスレッド処理手段の実行中にキャッシュ中の特定ブロックに対して、他のプロセッサまたは他のスレッド処理手段による更新がなされた場合に、当該スレッド処理手段に対する排他権が開放されたとみなす同期ロック制御を実行することにより、複数のスレッドを効率的に切り替える。
【００１３】
特許文献３は、ループ状態にあるＣＰＵの消費電力を削減できるとともに、処理を行っているＣＰＵの性能に影響を与えず高性能処理を維持することが可能な半導体集積回路装置を提供することを目的とする。ＣＰＵ間の排他制御のシステムとしてスピンロックを採用するマルチプロセッサ・システムにおいて、第１および第２のＣＰＵには、それぞれスピンロック検出部が接続されている。スピンロック検出部においてスピンロック状態が検出されると、それぞれ反転スピンロックフラグバーＳＬＦ０およびバーＳＬＦ１が出力され、それぞれ２つのＡＮＤ回路に入力される。２つのＡＮＤ回路には、それぞれメモリアクセス要求信号ＲＱ０およびＲＱ１も入力され、反転スピンロックフラグバーＳＬＦ０およびバーＳＬＦ１とのＡＮＤ演算の出力Ｍ０およびＭ１が、それぞれ２つのキャッシュメモリに与えられる。
【００１４】
非特許文献１および２は、スピンロックにおけるスピン待ち時の低消費電力化に関するものであり、ＰＡＵＳＥ命令をスピン待ちループ中に挿入することにより、ごく僅かなディレイをスピン待ちループに挿入する。これによって、ループ待ちの間にプロセッサのハードウェアリソースが過剰に動作することを抑えて、スピンループ実行中の消費電力を削減するものである。
【００１５】
ＰＡＵＳＥ命令は、スピン待ちループを実行中であるというヒントをプロセッサに知らせることで、複数のメモリアクセスの同時発行やｏｕｔ−ｏｆ−ｏｒｄｅｒの実行を抑止する。これによって、ロック変数のリード・アクセス順が正しく保たれていることを保証すると共に、同時に動作するプロセッサのハードウェアリソースを減らして消費電力を抑えるものである。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２００５−３１６８５４号公報
【特許文献２】特開２００６−１５５２０４号公報
【特許文献３】特開２００５−３２７０８６号公報
【非特許文献】
【００１７】
【非特許文献１】“PAUSE - Spin Loop Hint”, IA-32 Intel（登録商標） Architecture Software Developer's Manual, Volume 2: Instruction Set Reference, p.3-544.
【非特許文献２】Intel（登録商標） Application Note AP-949, “Using Spin-Loops on Intel（登録商標） Pentium（登録商標）4 Processor and Intel（登録商標） Xeon（登録商標） Processor”
【発明の概要】
【発明が解決しようとする課題】
【００１８】
上述のスピンロックにおいては、ロックが確保できるまでの間、プロセッサはスピン待ちループを実行し続けている状態にある。スピン待ちループ中において、プロセッサによるロック変数の読み出しがキャッシュメモリにリード・ヒットし続けた状態でスピンするため、スピン待ちの間はプロセッサとキャッシュメモリとが高速に動作し、大きな電力を消費しながら他のプロセッサによるロックの解放を待っている状態となっている。したがって、スピンして待っている間、プロセッサは何ら有益な処理を行なわずに無駄な電力を消費しているといった問題があった。
【００１９】
また、非特許文献１および２に開示されているように、スピン待ちループ中に処理を待たせるための命令を挿入することにより、スピン待ち時の平均的な消費電力をある程度小さくすることができる。しかしながら、ロック変数の読み出し間隔を必要以上に大きくすると、スピンロック性能が劣化してしまうといった問題がある。また、スピンロックでロックが獲得できるまでの時間が、実行するアプリケーション・プログラムの処理内容や、システムの負荷状況によって変わるため、最適な待ち時間を選択することも難しい。
【００２０】
本発明は、上記問題点を解決するためになされたものであり、その目的は、スピンロックのためのスピン待ちループ実行時における消費電力を削減することが可能なデータ処理装置を提供することである。
【課題を解決するための手段】
【００２１】
本発明の一実施例によれば、複数のＣＰＵのそれぞれがキャッシュメモリを介して共有メモリに接続され、キャッシュ・コヒーレンシが保たれているデータ処理装置が提供される。ＣＰＵは、スピンロック処理を行なう際にウェイト付きロード命令を実行すると、対応するキャッシュメモリにスピン待ち要求を出力する。また、キャッシュメモリは、ＣＰＵからスピン待ち要求を受けると、所定の条件（スヌープ・ライト・ヒット、割り込み要求、一定時間の経過）を満たすまでＣＰＵからのリード・リクエストに対するアクノリッジ応答の出力を一時停止する。
【発明の効果】
【００２２】
この実施例によれば、キャッシュメモリがＣＰＵからスピン待ち要求を受けると、所定の条件を満たすまでＣＰＵからのリード・リクエストに対するアクノリッジ応答の出力を一時停止するので、ＣＰＵのパイプライン実行をストールさせて、ＣＰＵおよびキャッシュメモリの動作を一時停止させることができ、スピン待ちループ実行時における消費電力を削減することが可能となる。
【図面の簡単な説明】
【００２３】
【図１】共有メモリ型マルチプロセッサ・システムの構成例を示すブロック図である。
【図２】共有メモリ型マルチプロセッサ・システムの構成の具体例を示すブロック図である。
【図３】ＣＰＵ０〜７（１０−０〜１０−７）によって実行される一般的なスピンロック処理の擬似コードの一例を示す図である。
【図４】スピンロック処理のコードの他の一例を示す図である。
【図５】図４に示す通常ロード命令（ＬＤ命令）によるロック変数のロード処理シーケンスを示す図である。
【図６】本発明の第１の実施の形態におけるデータ処理装置のＣＰＵ２１とキャッシュメモリ２５との接続例を示す図である。
【図７】本発明の第１の実施の形態におけるデータ処理装置内のＣＰＵ２１の構成例を示すブロック図である。
【図８】本発明の第１の実施の形態におけるデータ処理装置内のキャッシュメモリ２５の構成例を示すブロック図である。
【図９】本発明の第１の実施の形態におけるキャッシュメモリ２５の状態遷移を説明するための図である。
【図１０】本発明の第１の実施の形態におけるＣＰＵ２１によって実行されるスピンロック処理コードの一例を示す図である。
【図１１】スヌープ・アクセス受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。
【図１２】割り込み要求受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。
【図１３】所定時間経過時のウェイト付きロード命令の処理シーケンスを説明するための図である。
【図１４】ＣＰＵ２１によるウェイト付きロード命令の処理フローを説明するための図である。
【図１５】キャッシュメモリ２５によるロード処理の実行フローを説明するための図である。
【図１６】図１５に示すスピン待ち処理（Ｓ２３）の実行フローを説明するための図である。
【図１７】本発明の第２の実施の形態におけるＣＰＵ２１によって実行されるスピンロック処理コードの一例を示す図である。
【図１８】ＣＰＵ２１によるスピン待ち命令の処理フローを説明するための図である。
【図１９】本発明の第３の実施の形態におけるデータ処理装置の構成例を示すブロック図である。
【発明を実施するための形態】
【００２４】
図１は、共有メモリ型マルチプロセッサ・システムの構成例を示すブロック図である。このシステムは、ＣＰＵ０〜ｎ（１−０〜１−ｎ）と、ＣＰＵ０〜ｎ（１−０〜１−ｎ）のそれぞれに接続されるキャッシュ２−０〜２−ｎと、バスコントローラ３と、共有メモリ４とを含む。
【００２５】
ＣＰＵ０〜ｎ（１−０〜１−ｎ）のそれぞれは、キャッシュ２−０〜２−ｎを介して共有バス５に接続され、共有リソースである共有メモリ４などにアクセスしながら演算処理を行なう。ＣＰＵ０〜ｎ（１−０〜１−ｎ）がキャッシュ２−０〜２−ｎを介して共有メモリ４にアクセスすることによって、キャッシュ２−０〜２−ｎが共有メモリ４に対してアクセスされたデータのコピーを保持する。これによって、ＣＰＵ１−０〜１−ｎは、キャッシュ２−０〜２−ｎから高速にデータのコピーにアクセスすることができ、共有バス５のバス・トラフィックを低減してシステム全体の処理性能を向上させることができる。
【００２６】
バスコントローラ３は、キャッシュ０〜ｎ（２−０〜２−ｎ）から共有メモリ４へのアクセス要求を調停すると共に、ロック処理の制御を行なう。なお、バスコントローラ３によってロック変数の値が共有メモリ４に書き込まれ、ＣＰＵ０〜ｎ（１−０〜１−ｎ）は共有メモリ４にアクセスしてロック変数を取得することになる。
【００２７】
図２は、共有メモリ型マルチプロセッサ・システムの構成の具体例を示すブロック図である。このマルチプロセッサ・システムは、たとえば１つの半導体装置によって実現され、８つのＣＰＵ０〜７（１０−０〜１０−７）と、内部バス制御部１１と、Ｌ２キャッシュ（２次キャッシュ）１２と、ＤＤＲ（Double Data Rate）２  Ｉ／Ｆ（Interface）１３と、ＤＭＡＣ（Dynamic Memory Access Controller）１４と、内蔵ＳＲＡＭ（Static Random Access Memory）１５と、外部バス制御部１６と、周辺回路１７と、汎用入出力ポート１８とを含む。
【００２８】
また、ＣＰＵ０〜７（１０−０〜１０−７）のそれぞれは、ＣＰＵ２１と、ＭＭＵ（Memory Management Unit）２２と、Ｉキャッシュ（命令キャッシュ）２３と、ローカルメモリ２４と、Ｄキャッシュ（データキャッシュ）２５とを含む。
【００２９】
ＣＰＵ２１は、ＭＭＵ２２およびプロセッサバス２６を介してＩキャッシュ２３、ローカルメモリ２４およびＤキャッシュ２５に接続されており、これらのキャッシュおよびメモリに高速にアクセスすることが可能である。
【００３０】
プロセッサバス２６は、命令とデータとが分離されたハーバード構成を有しており、命令がＩキャッシュ２３に格納され、データがＤキャッシュ２５に格納される。ローカルメモリ２４は、共有メモリ４などのＣＰＵ外部のメモリには格納されないローカルなデータを保持する。
【００３１】
ＣＰＵ０〜７（１０−０〜１０−７）は、内部バス１９を介して内部バス制御部１１に接続される。内部バス制御部１１は、ＣＰＵ０〜７（１０−０〜１０−７）においてキャッシュ・ミスが発生した場合や、ＣＰＵ０〜７（１０−０〜１０−７）が周辺回路１７などのＩＯ（Input Output）にアクセスする場合に、そのアクセス要求を受けて実行すると共に、内部バス１９におけるアクセスの調停などを行なう。
【００３２】
また、内部バス制御部１１は、ＣＰＵ０〜７（１０−０〜１０−７）に対するスヌープ制御を行なっており、ＣＰＵ０〜７（１０−０〜１０−７）のＤキャッシュ２５におけるキャッシュのコヒーレンシが保たれる。
【００３３】
Ｌ２キャッシュ１２は、内部バス制御部１１を介してＣＰＵ０〜７（１０−０〜１０−７）からのアクセス要求を受け、ＤＤＲ２  Ｉ／Ｆ１３に接続されるＤＤＲ  ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）、内蔵ＳＲＡＭ１５、外部バス制御部１６に接続される外部バス上の各種ＲＯＭ（Read Only Memory）デバイス（フラッシュＲＯＭ、ＥＥＰＲＯＭなど）やＲＡＭデバイス（ＳＤＲＡＭ、ＳＲＡＭなど）、ＰＣカード上のメモリ・デバイスなどにアクセスする。そして、ＣＰＵ０〜７（１０−０〜１０−７）によってアクセスされたデータのコピーを保持する。
【００３４】
なお、図１に示す共有メモリ４は、これらの内蔵ＲＡＭ１５や半導体装置の外部端子に接続されたメモリに対応している。これらのメモリを総称して、共有メモリ４とも呼ぶことにする。
【００３５】
ＤＭＡＣ１４は、ＣＰＵ０〜７（１０−０〜１０−７）からのＤＭＡ転送要求に応じて、共有メモリ４などのメモリ−メモリ間のＤＭＡ転送や、周辺回路１７などのＩＯ−メモリ間のＤＭＡ転送を制御する。
【００３６】
外部バス制御部１６は、外部バスを介して半導体チップ外部のデバイスと接続されており、ＣＳ（Chip Select）コントローラ、ＳＤＲＡＭコントローラ、ＰＣカードコントローラなどの機能を有している。
【００３７】
周辺回路１７は、ＩＣＵ（Interrupt Control Unit）、ＣＬＫＣ（Clock Controller）、タイマ、ＵＡＲＴ（Universal Asynchronous Receiver Transmitter）、ＣＳＩＯ、ＧＰＩＯ（General Purpose Input Output）などの機能を有している。また、汎用入出力ポート１８は、半導体チップ外部のＩＯポートに接続される。
【００３８】
図３は、ＣＰＵ０〜７（１０−０〜１０−７）によって実行される一般的なスピンロック処理の擬似コードの一例を示す図である。原理的には、単純にロック変数をアトミックにチェックしてロックが獲得できるまでの間、スピン待ちのループを実行すればよい。しかしながら、共有データに毎回アトミックにアクセスすることはバスのトラフィックを増やし、実行時のペナルティが大きくなる。したがって、通常は図３に示すようにＬ１およびＬ２のようにループを二重化する。
【００３９】
図３において、ロック変数（ｌｏｃｋｖａｒ）が“１”のときにアンロック状態であり、“０”よりも小さいときにロック状態であることを示している。外側のループであるＬ１においては、ロック変数をアトミックに読み出してデクリメントし、その値が“０”のとき、すなわちロックが取れたときは、スピン待ちループから抜ける。
【００４０】
ロックが取れなかった場合、Ｌ２に示す内側のスピン待ちループでロック変数を読み出して、ロックが取れそうかを確認する。ロック変数が“１”になると、再度Ｌ１に示す外側のループでアトミックにロックの獲得を試みる。
【００４１】
ここで、ＭＥＳＩプロトコルのようなキャッシュ・コヒーレンシ・プロトコルにおいては、Ｌ２に示す内側のスピン待ちループにおけるロック変数の読み出し処理が常にキャッシュメモリにリード・ヒットし続けるため、複数のＣＰＵがスピンロックでスピン待ちしている状況においても共有バス５上には無用のアクセスが発生せず、システム性能に及ぼす影響を最小限にすることができる。
【００４２】
図４は、スピンロック処理のコードの他の一例を示す図である。レジスタｒ２には、ロック変数が格納される共有メモリ４上のアドレスが格納されている。外側のループであるＬ１において、まずｐｓｗ（processor status word）の値をレジスタｒ１に転送しておき、割り込みを禁止する。
【００４３】
次に、ＬＯＣＫ命令によってアトミックにロック変数をロードしてレジスタｒ０に格納する。そして、ｒ０の値に“−１”を加算し、ＵＮＬＯＣＫ命令によってｒ０の値をロック変数にセーブする。なお、ＬＯＣＫ命令を実行してからＵＮＬＯＣＫ命令を実行するまでの間、クリティカル・セクションを排他的にアクセスすることが可能となっている。
【００４４】
次に、ｒ１の値をｐｓｗに戻し、ｒ０の値が“０”であればロックが取れたとしてｓｐｉｎ＿ｌｏｃｋ＿ｅｎｄに分岐する。ロックが取れなかった場合には、Ｌ２に示す内側のスピン待ちループでロック変数を読み出して、ロックが取れそうかを確認する。
【００４５】
Ｌ２において、まず通常のロード命令によってロック変数の値をｒ０にロードする。そして、ｒ０の値が“０”よりも大きければロックが取れそうであるとしてｓｐｉｎ＿ｌｏｃｋに分岐し、再度Ｌ１に示す外側のループでアトミックにロックの獲得を試みる。そうでなければ、ｓｐｉｎ＿ｗａｉｔ＿ｌｏｏｐに分岐して内側のＬ２をループする。なお、図３を用いて説明したのと同様に、Ｌ２に示す内側のスピン待ちループにおけるロック変数の読み出し処理が常にキャッシュメモリにリード・ヒットし続けることになる。
【００４６】
図５は、図４に示す通常ロード命令（ＬＤ命令）によるロック変数のロード処理シーケンスを示す図である。ＣＰＵ２１がＬＤ命令を実行するときに、メモリ・リード・リクエスト（ｒｅｑ）信号をキャッシュ２５に送信する。キャッシュ２５は、ＣＰＵ２１からリクエストを受け付けると、リクエストを受け付けたことを通知するためにアクノリッジ（ａｃｋ）信号をＣＰＵ２１に返信する。なお、ロック変数のコピーが格納されるのが主にＤキャッシュ２５であることから、Ｄキャッシュ２５を単にキャッシュまたはキャッシュメモリと表記することにする。
【００４７】
ここで、ロック変数がキャッシュ２５に格納されておりキャッシュ・ヒットするため、キャッシュ２５は、共有メモリ４にはアクセスせずに、ＣＰＵ２１に対してエンド（ｅｎｄ）信号と共にロードデータ（ロック変数）を送信し、トランザクションを完了する。ＣＰＵ２１は、エンド信号がアサートされるのを確認してロードデータを受け取り、プログラムの以降の処理を継続する。
【００４８】
ＭＥＳＩプロトコルにおいては、Ｍ（Modified：変更）、Ｅ（Exclusive：排他）、Ｓ（Shared：要求）、Ｉ（Invalid：無効）という４つの状態でキャッシュラインの状態を表現し、キャッシュ・コヒーレンシの保持を行なう。図４を用いて説明したように、ロックが確保できるまでの間、ＣＰＵはスピン待ちループを実行し続けている状態にある。
【００４９】
このとき、キャッシュラインの状態はＥまたはＳという、有効なコピーが登録された状態であるため、ＣＰＵ２１によるロック変数の読み出しがキャッシュ２５にリード・ヒットし続けた状態でスピンすることになる。そのため、スピン待ちの間はＣＰＵ２１とキャッシュ２５とが極めて高速に動作し、大きな電力を消費しながら他のＣＰＵによるロックの解放を待っている状態となっている。
【００５０】
本発明の実施の形態におけるデータ処理装置は、スピンロックのためのスピン待ちループ実行時の消費電力を削減し、効率のよいスピンロックを実現するための機構を設けたものである。以下、各実施の形態について詳細に説明する。
【００５１】
（第１の実施の形態）
図６は、本発明の第１の実施の形態におけるデータ処理装置のＣＰＵ２１とキャッシュメモリ２５との接続例を示す図である。ＣＰＵ２１とキャッシュメモリ２５とは、リクエスト（ｒｅｑ）信号、アクノリッジ（ａｃｋ）信号、エンド（ｅｎｄ）信号といったハンドシェーク信号によって接続されており、ＣＰＵ２１がハンドシェーク制御を行なうことによって確実にメモリアクセス処理を行なえるように構成されている。
【００５２】
また、ＣＰＵ２１は、後述のウェイト付きロード命令（ＬＤＳ命令）またはスピン待ち命令（ＳＰＩＮ命令）を実行するときにスピン待ち要求信号をキャッシュメモリ２５に対して出力する。また、キャッシュメモリ２５には割り込み要求信号が接続されている。これらの詳細については後述する。
【００５３】
図７は、本発明の第１の実施の形態におけるデータ処理装置内のＣＰＵ２１の構成例を示すブロック図である。このＣＰＵ２１は、命令フェッチ部３１と、命令デコード部３２と、制御部３３と、アドレス生成部３４と、ＰＣ（Program Counter）部３５と、汎用レジスタファイル３６と、制御レジスタファイル３７と、演算部３８と、ロード・ストア部３９と、データセレクタ４０とを含み、それぞれがプロセッサバス２６、Ｓバス４１およびＤバス４２に接続される。なお、各部はこれらのバスを介してデータ、アドレス、制御信号などをやり取りすることができる。
【００５４】
命令フェッチ部３１は、ＰＣ部３５のプログラムカウンタ値に応じて、Ｉキャッシュ２３を介して共有メモリ４などに格納される命令コードをフェッチして、命令コードを命令デコード部３２に出力する。
【００５５】
命令デコード部３２は、命令フェッチ部３１から受けた命令コードをデコードし、デコード結果を制御部３３に出力する。また、命令デコード部３２が、命令コードが後述のウェイト付きロード命令（ＬＤＳ命令）またはスピン待ち命令（ＳＰＩＮ命令）をデコードすると、制御部３３はスピン待ち要求信号をキャッシュメモリ２５に出力する。
【００５６】
制御部３３は、命令デコード部３２から受けたデコード結果に応じて、ＣＰＵ２１の各部を制御することによりＣＰＵ２１の動作を制御し管理する。なお、図７においては、制御部３３から各部に出力される制御信号を省略している。
【００５７】
アドレス生成部３４は、命令デコード部３２によって分岐命令がデコードされたときに、分岐先アドレスをアドレッシングモードに応じて計算する。分岐条件が成立した場合には、計算された分岐先アドレスがＰＣ部３５に設定される。
【００５８】
演算部３８は、制御部３３による制御によって、汎用レジスタファイル３６に格納されるデータ、共有メモリ４から読み出されたデータなどに対して演算処理を行なう。演算結果は、汎用レジスタファイル３６、共有メモリ４、キャッシュメモリ２５などに書き込まれる。
【００５９】
ロード・ストア部３９は、演算部３８による演算結果などを共有メモリ４やキャッシュメモリ２５にストアし、共有メモリ４やキャッシュメモリ２５からデータをロードする。このとき、ロード・ストア部３９は、オペランドアクセスアドレスを生成して、データセレクタ４０を介してキャッシュメモリ２５に出力する。
【００６０】
データセレクタ４０は、ロード・ストア部３９から出力されるオペランドアクセスアドレスおよび書き込みデータをプロセッサバス２６に出力し、プロセッサバス２６を介して受けた読み出しデータをロード・ストア部３９に出力する。
【００６１】
図８は、本発明の第１の実施の形態におけるデータ処理装置内のキャッシュメモリ２５の構成例を示すブロック図である。このキャッシュメモリ２５は、バス・スヌープ機構を備えたスヌープ・キャッシュであり、キャッシュメモリ２５の全体的な制御を行なう制御部５０と、タグ５１と、データメモリ５２と、比較器５３および５４と、セレクタ５５および５６と、スピン待ち状態を制御するためのスピン待ち状態フラグＳＷＦ（Spin-Wait flag）５７と、カウンタ５８と、待ちサイクル数を設定するためのリロードレジスタ５９とを含む。
【００６２】
制御部５０は、上述のハンドシェーク制御およびバス・スヌープ制御を行なう以外に、ＳＷＦ５７、カウンタ５８およびリロードレジスタ５９を制御しながらスピン待ち制御を行なう。
【００６３】
タグ５１は、データメモリ５２においてデータが格納されるキャッシュラインに対応する上位アドレスを保持する。また、データメモリ５２は、共有メモリ４からロードしたデータのコピーを保持する。
【００６４】
タグ５１は、プロセッサバスのアドレス６０と、内部バスのアドレス６２とに接続されている。また、データメモリ５２は、セレクタ５５および５６を介して、プロセッサバスのアドレス６０およびデータ６１と、内部バスのアドレス６２およびデータ６３とに接続されている。このような構成にすることにより、自ＣＰＵ２１からのキャッシュアクセスにおいてデータが参照される以外に、他のＣＰＵ２１からのスヌープ・アクセスのために内部バス側からのアクセスも可能となっている。
【００６５】
比較器５３は、プロセッサバスのアドレス６０の上位アドレスとタグ５１に格納されるアドレスとを比較することによって、自ＣＰＵ２１からのアクセスに対するキャッシュ・ヒット／ミスを判定する。また、比較器５４は、内部バスのアドレス６２の上位アドレスとタグ５１に格納されるアドレスとを比較することによって、他のＣＰＵ２１からのスヌープ・アクセスに対するキャッシュ・ヒット／ミスを判定する。
【００６６】
データメモリ５２は、キャッシュヒットしたときに、プロセッサバスのアドレス６０または内部バスのアドレス６２の下位アドレスに応じて、プロセッサバスのデータ６１または内部バスのデータ６３のデータ書き込みや、データ読み出しを行なう。
【００６７】
図９は、本発明の第１の実施の形態におけるキャッシュメモリ２５の状態遷移を説明するための図である。キャッシュメモリ２５の制御部５０は、通常動作状態においてＣＰＵ２１からのスピン待ち要求を受け付けると、スピン待ちフラグＳＷＦ５７を“１”にセットし、スピン待ち状態に遷移する。そして、ＣＰＵ２１からのスピン待ち要求が解除されると、制御部５０は、ＳＷＦ５７を“０”にリセットして通常動作状態に戻る。
【００６８】
本実施の形態においては、スピンロックにおけるスピン待ち処理において、ＣＰＵ２１からのメモリ読み出し要求に対し、キャッシュメモリ２５の制御部５０からの応答を止めることでＣＰＵ２１のパイプライン実行をストールさせ、スピン待ち時のＣＰＵ２１およびキャッシュメモリ２５の動作を一時停止させる。
【００６９】
ＣＰＵ２１がスピン待ち用の命令を実行することにより、キャッシュメモリ２５はスピン待ち状態に遷移する。ここで、ＣＰＵ２１がロック変数を読み出すためのロード処理を行なうと、キャッシュメモリ２５はスピン待ち状態となっているので、ＣＰＵ２１からキャッシュメモリ２５への読み出しリクエストに対してアクノリッジ応答を返さない。これによって、ＣＰＵ２１とキャッシュメモリ２５とのパイプラインがストールし、ＣＰＵ２１とキャッシュメモリ２５との動作が一時的に停止する。
【００７０】
ただし、スピン待ち中であっても、ＣＰＵ２１は割り込み処理は受け付ける。これは、システムによっては、ＣＰＵ２１が固有の周辺ＩＯを有するため、割り込みの種類によっては特定のＣＰＵ２１しか処理できないものがあること、割り込み処理の速度を速くするためには割り込み要求を受けたＣＰＵ自身が割り込み処理をすることが望ましいこと、などの理由による。
【００７１】
図６および図８に示すように、キャッシュメモリ２５には割り込み要求信号が接続されており、割り込み要求を受けてスピン待ち状態を解除することによってＣＰＵ２１は動作を再開でき、割り込みを受け付けることが可能となる。
【００７２】
なお、キャッシュメモリ２５のスピン待ち状態の解除条件として、（１）他のＣＰＵ２１から当該キャッシュメモリ２５へのスヌープ・ライト・ヒット、（２）割り込み要求、（３）一定時間の経過（タイムアウト）の３つがある。それぞれの詳細については、図１１〜図１３を用いて後述する。
【００７３】
図１０は、本発明の第１の実施の形態におけるＣＰＵ２１によって実行されるスピンロック処理コードの一例を示す図である。図４に示すスピンロック処理コードと比較すると、通常ロード命令（ＬＤ命令）がウェイト付きロード命令（ＬＤＳ命令）に置換されている点のみが異なる。
【００７４】
図１０においては、上述のスピン待ち用の命令として、ＬＤＳ命令が記述されている。ＣＰＵ２１がこのＬＤＳ命令を実行するときに、キャッシュメモリ２５に対してスピン待ち要求を出力する。このとき、キャッシュメモリ２５はスピン待ち状態に遷移し、ＣＰＵ２１はキャッシュメモリ２５からアクノリッジ応答が返ってくるまでストールして、次のｂｇｔｚ命令を実行しない。
【００７５】
図１１は、スヌープ・アクセス受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。スヌープキャッシュによるキャッシュ・コヒーレンシが保たれている状況において、キャッシュメモリ２５は、スピン待ち中にＣＰＵ２１からのメモリアクセス動作が停止している場合でも、キャッシュ・コヒーレンシ保持のために、他のプロセッサ２１からのキャッシュメモリ・アクセスに伴うスヌープ・アクセスを受け付け、キャッシュ状態を更新する。
【００７６】
ここで、キャッシュ・コヒーレンシ・プロトコルの一例として、ＭＯＥＳＩプロトコルクラスのうち、上述のＭＥＳＩプロトコルを用いたスヌープ・キャッシュの場合について説明するが、これら４つの状態にＯ（Owned：所有）状態を付け加えたＭＯＥＳＩプロトコルを用いた場合でも同様の処理を実現可能である。
【００７７】
図１１において、ＣＰＵ２１がＬＤＳ命令を実行するときに、メモリ・リード・リクエスト（ｒｅｑ）信号およびスピン待ち要求信号をキャッシュ２５に送信する。キャッシュ２５の制御部５０は、ＣＰＵ２１からリクエストおよびスピン待ち要求を受け付けると、ＳＷＦ５７をセットしてスピン待ち状態に遷移する。ＣＰＵ２１は、パイプラインがストールしてキャッシュメモリ２５からのアクノリッジ待ち状態となる。このとき、ロック変数が格納されるキャッシュラインの状態はＥ（排他）またはＳ（共有）である。
【００７８】
他のＣＰＵ２１がロック変数をアンロックすると、ロック変数への書き込みによるスヌープ・ライト・ヒット・アクセスが発生する。キャッシュメモリ２５においては、当該キャッシュラインがスヌープによって無効化され、キャッシュラインの状態がＩ（無効）に変化する。そして、キャッシュメモリ２５の制御部５０は、このスヌープ・アクセスを受け付けると、ＳＷＦ５７をクリアして通常動作状態に復帰し、スピン待ちが解除される。そして、リード・リクエストを受け付けたことを通知するためにアクノリッジ（ａｃｋ）信号をＣＰＵ２１に返信する。
【００７９】
ＣＰＵ２１は、キャッシュメモリ２５からアクノリッジ応答を受けると、パイプラインがストールした状態から復帰する。そして、キャッシュメモリ２５においては、当該キャッシュラインの状態がＩ（無効）になっているため、当該リード・アクセスはミスし、共有バス５を介して共有メモリ４へのリード・アクセスが行なわれる。
【００８０】
キャッシュメモリ２５は、共有メモリ４からロック変数をロードし、ＣＰＵ２１に対してエンド（ｅｎｄ）信号と共にロードしたロック変数を送信し、トランザクションを完了する。したがって、スヌープ・アクセスによってスピン待ち状態から復帰した場合は、必ずアンロック処理によって共有メモリ４に書き込まれた最新のデータが読み出されることになり、ＣＰＵ２１は正しくロックスピン処理を実行することができる。
【００８１】
図１２は、割り込み要求受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。ＣＰＵ２１がＬＤＳ命令を実行するときに、スピン待ち要求信号およびメモリ・リード・リクエスト（ｒｅｑ）信号をキャッシュメモリ２５に送信する。キャッシュメモリ２５の制御部５０は、ＣＰＵ２１からスピン待ち要求を受け付けると、ＳＷＦ５７をセットしてスピン待ち状態に遷移する。ＣＰＵ２１は、パイプラインがストールしてキャッシュメモリ２５からのアクノリッジ待ち状態となる。このとき、ロック変数が格納されるキャッシュラインの状態はＥ（排他）またはＳ（共有）である。
【００８２】
その後、キャッシュメモリ２５の制御部５０が割り込み要求を受けると、ＳＷＦ５７をクリアして通常動作状態に復帰し、スピン待ちが解除される。そして、リード・リクエストを受け付けたことを通知するためにアクノリッジ（ａｃｋ）信号をＣＰＵ２１に返信する。
【００８３】
ＣＰＵ２１は、キャッシュメモリ２５からアクノリッジ応答を受けると、パイプラインがストールした状態から復帰する。そして、キャッシュメモリ２５の制御部５０は、当該キャッシュラインの状態がＥ（排他）またはＳ（共有）のままであるため、当該リード・アクセスはキャッシュ・ヒットし、共有メモリ４にはアクセスせずに、ＣＰＵ２１に対してエンド（ｅｎｄ）信号と共にロードデータ（ロック変数）を送信し、トランザクションを完了する。
【００８４】
プロセッサ２１がスピン待ち状態から復帰すると割り込み要求が受け付けられ、ＣＰＵ２１は割り込み処理を実行する。そして、ＣＰＵ２１は、割り込みハンドラからリターンすると、ウェイト付きロード命令の次の命令からプログラムの処理を継続するが、ロックを獲得することができないためスピン待ちループの命令実行を繰り返す。スピン待ちループにおいて、ＣＰＵ２１は再びウェイト付きロード命令を実行し、キャッシュメモリ２５はスピン待ち状態になる。
【００８５】
図１３は、所定時間経過時のウェイト付きロード命令の処理シーケンスを説明するための図である。ＣＰＵ２１がＬＤＳ命令を実行するときに、スピン待ち要求信号およびメモリ・リード・リクエスト（ｒｅｑ）信号をキャッシュメモリ２５に送信する。キャッシュメモリ２５の制御部５０は、ＣＰＵ２１からスピン待ち要求を受け付けると、ＳＷＦ５７をセットしてスピン待ち状態に遷移すると共に、カウンタ５８のダウンカウントを開始させる。ＣＰＵ２１は、パイプラインがストールしてキャッシュメモリ２５からのアクノリッジ待ち状態となる。このとき、ロック変数が格納されるキャッシュラインの状態はＥ（排他）またはＳ（共有）である。
【００８６】
その後、キャッシュメモリ２５の制御部５０がカウンタ５８のタイムアウトを検出すると、ＳＷＦ５７をクリアして通常動作状態に復帰し、スピン待ちが解除される。そして、リード・リクエストを受け付けたことを通知するためにアクノリッジ（ａｃｋ）信号をＣＰＵ２１に返信する。
【００８７】
ＣＰＵ２１は、キャッシュメモリ２５からアクノリッジ応答を受けると、パイプラインがストールした状態から復帰する。そして、キャッシュメモリ２５の制御部５０は、当該キャッシュラインの状態がＥ（排他）またはＳ（共有）のままであれば、当該リード・アクセスはキャッシュ・ヒットし、共有メモリ４にはアクセスせずに、ＣＰＵ２１に対してエンド（ｅｎｄ）信号と共にロードデータ（ロック変数）を送信し、トランザクションを完了する。
【００８８】
プロセッサ２１がスピン待ち状態から復帰すると、ウェイト付きロード命令の次の命令からプログラムの処理を継続するが、ロックを獲得することができない場合にはスピン待ちループの命令実行を繰り返す。スピン待ちループにおいて、ＣＰＵ２１は再びウェイト付きロード命令を実行し、キャッシュメモリ２５はスピン待ち状態になる。この処理がスピン待ちループの実行が継続している間繰り返される。
【００８９】
ここで、制御部５０は、カウンタ５８のみを用いて待ち時間を固定してタイムアウトを検出するとしたが、リロードレジスタ５９に任意の値を設定し、スピン待ち開始時にリロードレジスタ５９の値をカウンタ５８にリロードしてダウンカウントを開始させるようにしてもよい。これによって、待ち時間を可変とすることができる。
【００９０】
図１４は、ＣＰＵ２１によるウェイト付きロード命令の処理フローを説明するための図である。まず、ＣＰＵ２１がウェイト付きロード命令（ＬＤＳ）命令をデコードすると、制御部３３は、キャッシュメモリ２５に対してスピン待ち要求信号をアサートする（Ｓ１１）。
【００９１】
次に、ＣＰＵ２１は、ウェイト付きロード処理を行なって（Ｓ１２）、ウェイト付きロード命令の処理を終了する。上述のように、ウェイト付きロード処理において、ＣＰＵ２１の制御部３３はキャッシュメモリに対してリード・リクエスト信号を送信し、キャッシュメモリ２５からアクノリッジ信号が返信されるまでスピン待ちを行なう。そして、アクノリッジ信号が返信された後、キャッシュメモリ２５からエンド信号と共に送られてくるロードデータを受信する。
【００９２】
図１５は、キャッシュメモリ２５によるロード処理の実行フローを説明するための図である。まず、キャッシュメモリ２５の制御部５０がリクエスト信号を受けると（Ｓ２１，Ｙｅｓ）、ロード命令がウェイト付きロード命令か否かをスピン待ち要求信号（ＳＷＦ５７）に応じて判断する（Ｓ２２）。
【００９３】
ロード命令が通常のロード命令（ＬＤ命令）であれば（Ｓ２２，Ｎｏ）、ステップＳ２４に処理が進む。また、ロード命令がウェイト付きロード命令であれば（Ｓ２２，Ｙｅｓ）、制御部５０は、スピン待ち処理を行ない（Ｓ２３）、ステップＳ２４に進む。このスピン待ち処理については、図１６を用いて後述する。
【００９４】
ステップＳ２４において、制御部５０は、ＣＰＵ２１に対してアクノリッジ応答をアサートし、通常のロード処理を行なう（Ｓ２５）。すなわち、キャッシュ・ヒットの場合には、データメモリ５２に格納されるデータをロードする。また、キャッシュ・ミスの場合には、共有メモリ４からデータをロードし、データのコピーをデータメモリ５２に格納する。
【００９５】
最後に、制御部５０は、ＣＰＵ２１に対してエンド信号をアサートし、ロードデータを転送して（Ｓ２６）、ロード処理を終了する。
【００９６】
図１６は、図１５に示すスピン待ち処理（Ｓ２３）の実行フローを説明するための図である。まず、制御部５０は、ＳＷＦ５７に“１”をセットし（Ｓ３１）、カウンタ５８の初期化を行なう（Ｓ３２）。リロードレジスタ５９に待ち時間が設定されている場合には、その値をカウンタ５８にリロードする。
【００９７】
次に、制御部５０は、割り込み要求があるか否かを判定する（Ｓ３３）。割り込み要求があれば（Ｓ３３，Ｙｅｓ）、ステップＳ３６に処理が進む。また、割り込み要求がなければ（Ｓ３３，Ｎｏ）、制御部５０は、スヌープ・ライト・ヒットが発生したか否かを判定する（Ｓ３４）。スヌープ・ライト・ヒットが発生した場合には（Ｓ３４，Ｙｅｓ）、ステップＳ３６に処理が進む。
【００９８】
また、スヌープ・ライト・ヒットが発生していない場合には（Ｓ３４，Ｎｏ）、制御部５０は、カウンタ５８によるタイムアウトが発生したか否かを判定する（Ｓ３５）。タイムアウトが発生している場合には（Ｓ３５，Ｙｅｓ）、ステップＳ３６に処理が進む。また、タイムアウトが発生していない場合には（Ｓ３５，Ｎｏ）、カウンタ５８によるダウンカウントが行なわれ（Ｓ３７）、ステップＳ３３以降の処理が繰り返される。
【００９９】
ステップＳ３６において、制御部５０は、ＳＷＦ５７を“０”にクリアして、図１５に示すステップＳ２４の処理に進む。
【０１００】
以上説明したように、本実施の形態におけるデータ処理装置によれば、スピン待ちループにおけるロック変数の読み出し処理において、キャッシュメモリ２５からのアクノリッジ応答を待たせることによりＣＰＵ２１のパイプラインをストールさせ、ＣＰＵ２１の動作を停止させるようにしたので、ＣＰＵ２１のスピン待ち状態における無駄な動作による電力の消費を削減することが可能となる。
【０１０１】
また、キャッシュメモリ２５においても、スピン待ち時におけるタグ５１やデータメモリ５２へのアクセスを停止させることができため、キャッシュ・ヒットし続けて高速動作することにより発生する無駄な電力を消費するといったことを防止することが可能となる。したがって、スピン待ち時におけるデータ処理装置全体の消費電力を大きく削減することが可能となる。
【０１０２】
また、ＣＰＵ２１はスピン待ち要求およびリード・リクエストをキャッシュメモリ２５に送信した後、キャッシュメモリ２５からアクノリッジ応答が返信されるまでスピン待ちを行なうので、スピン待ちの開始から終了までの監視をプログラム処理によって行なう必要がなくなり、プログラム処理を簡略化することが可能となる。
【０１０３】
また、ＣＰＵ２１はスピン待ち命令を実行したことをキャッシュメモリ２５に通知するだけであり、キャッシュメモリ２５が能動的にスピン待ち処理を行なうため、ＣＰＵ２１の回路構成を簡略化することが可能となる。
【０１０４】
また、キャッシュメモリ２５は、スピン解除待ちのチェックをスヌープ・ライト・アクセスがヒットしたか否かによって行なうため、キャッシュメモリ２５の回路構成も簡略化することが可能となる。
【０１０５】
また、キャッシュメモリ２５は、割り込み要求があった場合にはスピン待ち状態を解除してＣＰＵ２５を復帰させるようにしたので、ＣＰＵ２１は直ちに割り込み処理を行なうことができ、割り込み応答性能が損なわれることを防止することが可能となる。
【０１０６】
また、スピン待ちループ中のウェイト付きロード命令の実行終了からの復帰を、割り込みまたは他のＣＰＵ２１からのスヌープ・アクセスを契機としてダイナミックに行なうようにしたので、必要以上の待ち時間を設定する必要がなくなる。したがって、従来のように固定の待ち時間を設定する必要がなくなり、スピンロック応答を高速に行なうことが可能となる。
【０１０７】
さらには、スピン待ち専用の命令を設けることにより、スピン待ちのための通常命令を別途スピン待ちループ中に挿入する必要がなくなり、スピンロック処理のコードサイズを削減することが可能となる。通常、スピンロック処理は高速実行が求められることから、インライン関数やマクロ命令として実現されることが多く、またスピンロック処理はＯＳカーネル中の様々な箇所で使用されてコードが展開されるため、コードサイズが削減されることに大きなメリットがある。また、コードサイズが小さくなれば、Ｉ（命令）キャッシュ２３に格納される命令コードの数も多くなるため、さらに処理速度を高速化することが可能となる。
【０１０８】
（第２の実施の形態）
第１の実施の形態におけるデータ処理装置においては、ＣＰＵ２１がウェイト付きロード命令を実行するときにスピン待ち要求をキャッシュメモリ２５に送信し、キャッシュメモリ２５をスピン待ち状態とするものであった。本発明の第２の実施の形態におけるデータ処理装置は、第１の実施の形態におけるデータ処理装置と比較して、ＣＰＵ２１にスピン待ち命令（ＳＰＩＮ命令）を設け、ロード結果が指定の値となるまでＣＰＵ２１が待ち続ける点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【０１０９】
図１７は、本発明の第２の実施の形態におけるＣＰＵ２１によって実行されるスピンロック処理コードの一例を示す図である。図１０に示すスピンロック処理コードと比較すると、ウェイト付きロード命令（ＬＤＳ命令）と続くｂｇｔｚ命令とが、スピン待ち命令（ＳＰＩＮ命令）に置換されている点のみが異なる。
【０１１０】
ＣＰＵ２１はスピン待ち命令を実行すると、ＣＰＵ２１とキャッシュメモリ２５とが直ちにスピン待ち状態となり、キャッシュメモリ２５によって待ち状態が解除されるまで処理を停止し、スピン待ちが解除された後ロード処理を行なう点については第１の実施の形態で説明したＬＤＳ命令と同様である。
【０１１１】
ＬＤＳ命令と異なるのは、スピン待ち状態が解除されてロード処理が実行された後、ＣＰＵ２１はロード結果がＳＰＩＮ命令によって指定される終了条件を満足しない場合には、再度スピン待ち状態になって解除されるのを待ち続ける点である。ＳＰＩＮ命令の終了条件は、ロードデータが指定したオペランドと一致するか、ロードデータが固定値と一致することである。
【０１１２】
図１７の内側のループＬ２に記述されたＳＰＩＮ命令は、ロードしたロック変数の値がオペランドで指定した即値“０”となるまでスピン待ちを続ける。ロック変数の値が“０”になると、ｓｐｉｎ＿ｌｏｃｋに分岐してＬ１に示す外側のループでアトミックにロックの獲得を試みる。
【０１１３】
図１８は、ＣＰＵ２１によるスピン待ち命令の処理フローを説明するための図である。まず、ＣＰＵ２１がスピン待ち命令（ＳＰＩＮ）命令を実行すると、制御部３３はキャッシュメモリ２５に対してスピン待ち要求信号をアサートする（Ｓ４１）。
【０１１４】
次に、ＣＰＵ２１は、ウェイト付きロード処理を行なう（Ｓ４２）。上述のように、ウェイト付きロード処理において、ＣＰＵ２１の制御部３３はキャッシュメモリに対してリード・リクエスト信号を送信し、キャッシュメモリ２５からアクノリッジ信号が返信されるまでスピン待ちを行なう。そして、アクノリッジ信号が返信された後、制御部３３はキャッシュメモリ２５からエンド信号と共に送られてくるロードデータを受信する。
【０１１５】
次に、ＣＰＵ２１の制御部３３は、ロードデータの値が指定値と一致するか否かによってスピン待ちの終了を判定する（Ｓ４３）。ロードデータの値が指定値と一致しない場合には（Ｓ４３，Ｎｏ）、ステップＳ４１に戻って以降の処理を繰り返す。また、ロードデータの値が指定値と一致する場合には（Ｓ４３，Ｙｅｓ）、スピン待ち処理を終了する。
【０１１６】
なお、ＣＰＵ２１がＳＰＩＮ命令を実行中に割り込み要求を受けた場合、ＣＰＵ２１はＳＰＩＮ命令の実行を中断し、ウェイト付きロード処理の完了時に割り込み処理を受け付ける。そして、ＣＰＵ２１は、割り込み処理終了後、ＳＰＩＮ命令の実行を継続する。
【０１１７】
以上説明したように、本実施の形態におけるデータ処理装置によれば、スピン待ち命令実行時にロードデータの値が所定値と一致するまでスピン待ちを行なうようにしたので、第１の実施の形態において説明した効果に加えて、スピンロック処理のコードサイズをさらに削減することが可能となる。
【０１１８】
（第３の実施の形態）
本発明の第３の実施の形態におけるデータ処理装置は、第１および第２の実施の形態におけるデータ処理装置と比較して、スピン待ち状態への移行およびスピン待ち状態からの復帰に連動して、ＣＰＵ２１およびキャッシュメモリ２５へのクロック供給のモードを変更する点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【０１１９】
図１９は、本発明の第３の実施の形態におけるデータ処理装置の構成例を示すブロック図である。このデータ処理装置は、図６に示す第１の実施の形態におけるデータ処理装置にさらにクロックモジュール（ＣＬＫＣ）２７を追加したものである。
【０１２０】
キャッシュメモリ２５は、ＣＰＵクロック・ドメインで動作する部分と、キャッシュ・クロック・ドメインで動作する部分とに分けられている。また、キャッシュメモリ２５は、スピン待ち状態に遷移するときに、スピン待ち状態であることをクロックモジュール２７に通知してクロック制御を行なわせる。
【０１２１】
クロックモジュール２７は、キャッシュメモリ２５が通常動作状態の時にはＣＰＵ２１およびキャッシュメモリ２５に対してＣＰＵクロックを供給すると共に、キャッシュメモリ２５にキャッシュクロックを供給する。
【０１２２】
クロックモジュール２７は、キャッシュメモリ２５がスピン待ち状態の時にはＣＰＵ２１およびキャッシュメモリ２５のＣＰＵクロック・ドメインで動作する部分に対するＣＰＵクロックの供給を停止する。このとき、キャッシュメモリ２５のキャッシュ・クロック・ドメインで動作する部分に対してはキャッシュクロックが供給される。これによって、キャッシュメモリ２５がスピン待ち状態であっても、スピン待ち制御を行なっている部分のみは動作を続けることができる。
【０１２３】
以上説明したように、本実施の形態におけるデータ処理装置によれば、キャッシュメモリ２５がスピン待ち状態の時に、ＣＰＵ２１およびキャッシュメモリ２５のＣＰＵクロック・ドメインで動作する部分に対するＣＰＵクロックの供給を停止するようにしたので、第１および第２の実施の形態において説明した効果に加えて、消費電力をさらに削減することが可能となる。
【０１２４】
また、スピン待ち状態によって低消費電力モードに切り替えるようにしたので、ＣＰＵ２１はプログラム処理によってクロック制御を行なう必要がなくなる。したがって、機種依存の実装になりがちなプログラムによる低消費電力機能に依存する必要がなくなる。
【０１２５】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１２６】
１−０〜１−ｎ，１０−０〜１０−ｎ，２１  ＣＰＵ、２−０〜２−ｎ  キャッシュメモリ、３  バスコントローラ、４  共有メモリ、５  共有バス、１１  内部バス制御部、１２  Ｌ２キャッシュ、１３  ＤＤＲ２  Ｉ／Ｆ、１４  ＤＭＡＣ、１５  内蔵ＳＲＡＭ、１６  外部バス制御部、１７  周辺回路、１８  汎用入出力ポート、１９，２０  内部バス、２２  ＭＭＵ、２３  Ｉキャッシュ、２４  ローカルメモリ、２５  Ｄキャッシュ、２６  プロセッサバス、２７  クロックモジュール、３１  命令フェッチ部、３２  命令デコード部、３３  制御部、３４  アドレス生成部、３５  ＰＣ部、３６  汎用レジスタファイル、３７  制御レジスタファイル、３８  演算部、３９  ロード・ストア部、４０  データセレクタ、５０  制御部、５１  タグ、５２  データメモリ、５３，５４  比較器、５５，５６  セレクタ、５７  ＳＷＦ、５８  カウンタ、５９  リロードレジスタ。
【図１】
2011150422.tif 000003
【図２】
2011150422.tif 000004
【図３】
2011150422.tif 000005
【図４】
2011150422.tif 000006
【図５】
2011150422.tif 000007
【図６】
2011150422.tif 000008
【図７】
2011150422.tif 000009
【図８】
2011150422.tif 000010
【図９】
2011150422.tif 000011
【図１０】
2011150422.tif 000012
【図１１】
2011150422.tif 000013
【図１２】
2011150422.tif 000014
【図１３】
2011150422.tif 000015
【図１４】
2011150422.tif 000016
【図１５】
2011150422.tif 000017
【図１６】
2011150422.tif 000018
【図１７】
2011150422.tif 000019
【図１８】
2011150422.tif 000020
【図１９】
2011150422.tif 000021