データ処理装置
【課題】スピンロックのためのスピン待ちループ実行時における消費電力を削減することが可能なデータ処理装置を提供すること。
【解決手段】CPU21は、スピンロック処理を行なう際にウェイト付きロード命令を実行すると、対応するキャッシュメモリ25にスピン待ち要求を出力する。また、キャッシュメモリ25は、CPU21からスピン待ち要求を受けると、所定の条件(スヌープ・ライト・ヒット、割り込み要求、一定時間の経過)を満たすまでCPUからのリード・リクエストに対するアクノリッジ応答の出力を一時停止する。したがって、CPU21のパイプライン実行をストールさせて、CPU21およびキャッシュメモリ25の動作を一時停止させることができ、スピン待ちループ実行時における消費電力を削減することが可能となる。
【解決手段】CPU21は、スピンロック処理を行なう際にウェイト付きロード命令を実行すると、対応するキャッシュメモリ25にスピン待ち要求を出力する。また、キャッシュメモリ25は、CPU21からスピン待ち要求を受けると、所定の条件(スヌープ・ライト・ヒット、割り込み要求、一定時間の経過)を満たすまでCPUからのリード・リクエストに対するアクノリッジ応答の出力を一時停止する。したがって、CPU21のパイプライン実行をストールさせて、CPU21およびキャッシュメモリ25の動作を一時停止させることができ、スピン待ちループ実行時における消費電力を削減することが可能となる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、共有メモリ型マルチプロセッサ(マルチコア)・システムにおけるプロセス間排他制御のためのスピンロック方式に関し、特に、キャッシュメモリの制御によりスピンロック動作における消費電力を削減することが可能なマルチプロセッサ・システムで用いられるデータ処理装置に関する。
【背景技術】
【0002】
近年、処理速度の高速化のためにマイクロコンピュータにキャッシュメモリが搭載されることが多い。プロセッサがキャッシュメモリを介して主記憶にアクセスすることにより、キャッシュにヒットしたときの処理速度を向上させることができる。
【0003】
このようなプロセッサを複数搭載したマルチプロセッサ・システムにおいては、各プロセッサがキャッシュメモリを介して共有バスに接続され、共有バスに接続される共有メモリ上のデータをアクセスすることができるようになっている。
【0004】
マルチプロセッサ、特に対称型マルチプロセッサ(SMP:Symmetric Multi-Processor)においては、プロセッサ間の共有リソースである共有メモリ上のデータに対して、キャッシュメモリ間で内容の一致(コヒーレンシ)を取りながら、各プロセッサが協調して処理を進めることが重要となる。
【0005】
このようなキャッシュメモリ間の内容の一致を保つためのプロトコルは、キャッシュ・コヒーレンシ・プロトコルと呼ばれており、大きく分類して、無効化型プロトコルと更新型プロトコルとに分けることができる。プロセッサ数が数十を超えないような比較的小規模なマルチプロセッサにおいては、比較的構成がシンプルな無効化型プロトコルが採用されることが多い。
【0006】
代表的な無効化型のキャッシュ・コヒーレンシ・プロトコルとして、ライトワンス(Write-Once)プロトコルや、MESIプロトコルを挙げることができる。これらの無効化型プロトコルにおいては、バス・スヌープ機能を有する命令データ分離型のスヌープ・キャッシュ(Snoop Cache)の使用が前提となっており、自キャッシュへのライト・ミスが発生した場合には、スヌープ・ヒットした他キャッシュのキャッシュラインを無効化することで、キャッシュ間のコヒーレンシを保つことができる。
【0007】
また、マルチプロセッサ・システムにおいては、複数のプロセッサが同期を取りながら並行して処理を行なうが、これらのプロセス/スレッド間の排他制御・同期制御のためには、ロックによる排他制御が必要となる。
【0008】
シングルプロセッサ・システムにおいて、クリティカル・セクションに対するプロセス/スレッド間の排他制御は、その間を割り込み禁止とすることで容易に実現できる。しかしながら、マルチプロセッサ・システムにおいては、割り込み禁止中であっても他のプロセッサがクリティカル・セクションを実行する可能性がある。そのため、割り込み禁止とするだけでは不十分であり、プロセス/スレッド間でロック処理を行なうことが必要不可欠である。
【0009】
ロック処理とは、まず共有リソースをロックし、プロセッサがロックを獲得してからクリティカル・セクションを実行して共有リソースにアクセスした後、アンロックしてロックを解放するといった処理である。スピンロックは、このようなロック処理において一般的に使用される方式であり、ロックを獲得しようとするプロセッサがロック待ち状態でビジーループ(スピン)することにより、ロックの獲得を高速に行なう処理である。
【0010】
これに関連する技術として、下記の特許文献1〜3に開示された発明、および非特許文献1〜2に開示された技術がある。
【0011】
特許文献1は、複数の論理的または物理的なプロセッサ間の排他制御のためのスピンループに起因する消費電力やプロセッサ資源の無駄を削減することを目的とする。排他制御のための共有変数[A]の監視等のために、目的の共有変数[A]のロード試行およびストア事象の監視開始契機を設定するLOAD−WITH−LOOKUP命令を設ける。CPUは、CAS[A]による獲得失敗後にLOAD−WITH−LOOKUP命令を発行して、ロック変数[A]へのストア(他のCPUからの解放アクセス)を監視するとともにSUPENDによって休止状態に移行し、他のCPUからのロック変数[A]に対するストア可能性の検出を契機としてCPUを復帰させてロック変数[A]の再獲得を試行させることが可能になり、無駄なスピンループ(空転待ち)を行わせる必要がなくなる。
【0012】
特許文献2は、複数のスレッドを実行し得るマルチスレッド・プロセッサにおいて、複数のスレッドを効率的に切り替えうるマルチスレッド制御装置および制御方法を提供することを目的とする。マルチスレッド制御装置は、複数のスレッド処理手段を有し、あるスレッド処理手段の実行中にキャッシュ中の特定ブロックに対して、他のプロセッサまたは他のスレッド処理手段による更新がなされた場合に、当該スレッド処理手段に対する排他権が開放されたとみなす同期ロック制御を実行することにより、複数のスレッドを効率的に切り替える。
【0013】
特許文献3は、ループ状態にあるCPUの消費電力を削減できるとともに、処理を行っているCPUの性能に影響を与えず高性能処理を維持することが可能な半導体集積回路装置を提供することを目的とする。CPU間の排他制御のシステムとしてスピンロックを採用するマルチプロセッサ・システムにおいて、第1および第2のCPUには、それぞれスピンロック検出部が接続されている。スピンロック検出部においてスピンロック状態が検出されると、それぞれ反転スピンロックフラグバーSLF0およびバーSLF1が出力され、それぞれ2つのAND回路に入力される。2つのAND回路には、それぞれメモリアクセス要求信号RQ0およびRQ1も入力され、反転スピンロックフラグバーSLF0およびバーSLF1とのAND演算の出力M0およびM1が、それぞれ2つのキャッシュメモリに与えられる。
【0014】
非特許文献1および2は、スピンロックにおけるスピン待ち時の低消費電力化に関するものであり、PAUSE命令をスピン待ちループ中に挿入することにより、ごく僅かなディレイをスピン待ちループに挿入する。これによって、ループ待ちの間にプロセッサのハードウェアリソースが過剰に動作することを抑えて、スピンループ実行中の消費電力を削減するものである。
【0015】
PAUSE命令は、スピン待ちループを実行中であるというヒントをプロセッサに知らせることで、複数のメモリアクセスの同時発行やout−of−orderの実行を抑止する。これによって、ロック変数のリード・アクセス順が正しく保たれていることを保証すると共に、同時に動作するプロセッサのハードウェアリソースを減らして消費電力を抑えるものである。
【先行技術文献】
【特許文献】
【0016】
【特許文献1】特開2005−316854号公報
【特許文献2】特開2006−155204号公報
【特許文献3】特開2005−327086号公報
【非特許文献】
【0017】
【非特許文献1】“PAUSE - Spin Loop Hint”, IA-32 Intel(登録商標) Architecture Software Developer's Manual, Volume 2: Instruction Set Reference, p.3-544.
【非特許文献2】Intel(登録商標) Application Note AP-949, “Using Spin-Loops on Intel(登録商標) Pentium(登録商標)4 Processor and Intel(登録商標) Xeon(登録商標) Processor”
【発明の概要】
【発明が解決しようとする課題】
【0018】
上述のスピンロックにおいては、ロックが確保できるまでの間、プロセッサはスピン待ちループを実行し続けている状態にある。スピン待ちループ中において、プロセッサによるロック変数の読み出しがキャッシュメモリにリード・ヒットし続けた状態でスピンするため、スピン待ちの間はプロセッサとキャッシュメモリとが高速に動作し、大きな電力を消費しながら他のプロセッサによるロックの解放を待っている状態となっている。したがって、スピンして待っている間、プロセッサは何ら有益な処理を行なわずに無駄な電力を消費しているといった問題があった。
【0019】
また、非特許文献1および2に開示されているように、スピン待ちループ中に処理を待たせるための命令を挿入することにより、スピン待ち時の平均的な消費電力をある程度小さくすることができる。しかしながら、ロック変数の読み出し間隔を必要以上に大きくすると、スピンロック性能が劣化してしまうといった問題がある。また、スピンロックでロックが獲得できるまでの時間が、実行するアプリケーション・プログラムの処理内容や、システムの負荷状況によって変わるため、最適な待ち時間を選択することも難しい。
【0020】
本発明は、上記問題点を解決するためになされたものであり、その目的は、スピンロックのためのスピン待ちループ実行時における消費電力を削減することが可能なデータ処理装置を提供することである。
【課題を解決するための手段】
【0021】
本発明の一実施例によれば、複数のCPUのそれぞれがキャッシュメモリを介して共有メモリに接続され、キャッシュ・コヒーレンシが保たれているデータ処理装置が提供される。CPUは、スピンロック処理を行なう際にウェイト付きロード命令を実行すると、対応するキャッシュメモリにスピン待ち要求を出力する。また、キャッシュメモリは、CPUからスピン待ち要求を受けると、所定の条件(スヌープ・ライト・ヒット、割り込み要求、一定時間の経過)を満たすまでCPUからのリード・リクエストに対するアクノリッジ応答の出力を一時停止する。
【発明の効果】
【0022】
この実施例によれば、キャッシュメモリがCPUからスピン待ち要求を受けると、所定の条件を満たすまでCPUからのリード・リクエストに対するアクノリッジ応答の出力を一時停止するので、CPUのパイプライン実行をストールさせて、CPUおよびキャッシュメモリの動作を一時停止させることができ、スピン待ちループ実行時における消費電力を削減することが可能となる。
【図面の簡単な説明】
【0023】
【図1】共有メモリ型マルチプロセッサ・システムの構成例を示すブロック図である。
【図2】共有メモリ型マルチプロセッサ・システムの構成の具体例を示すブロック図である。
【図3】CPU0〜7(10−0〜10−7)によって実行される一般的なスピンロック処理の擬似コードの一例を示す図である。
【図4】スピンロック処理のコードの他の一例を示す図である。
【図5】図4に示す通常ロード命令(LD命令)によるロック変数のロード処理シーケンスを示す図である。
【図6】本発明の第1の実施の形態におけるデータ処理装置のCPU21とキャッシュメモリ25との接続例を示す図である。
【図7】本発明の第1の実施の形態におけるデータ処理装置内のCPU21の構成例を示すブロック図である。
【図8】本発明の第1の実施の形態におけるデータ処理装置内のキャッシュメモリ25の構成例を示すブロック図である。
【図9】本発明の第1の実施の形態におけるキャッシュメモリ25の状態遷移を説明するための図である。
【図10】本発明の第1の実施の形態におけるCPU21によって実行されるスピンロック処理コードの一例を示す図である。
【図11】スヌープ・アクセス受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。
【図12】割り込み要求受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。
【図13】所定時間経過時のウェイト付きロード命令の処理シーケンスを説明するための図である。
【図14】CPU21によるウェイト付きロード命令の処理フローを説明するための図である。
【図15】キャッシュメモリ25によるロード処理の実行フローを説明するための図である。
【図16】図15に示すスピン待ち処理(S23)の実行フローを説明するための図である。
【図17】本発明の第2の実施の形態におけるCPU21によって実行されるスピンロック処理コードの一例を示す図である。
【図18】CPU21によるスピン待ち命令の処理フローを説明するための図である。
【図19】本発明の第3の実施の形態におけるデータ処理装置の構成例を示すブロック図である。
【発明を実施するための形態】
【0024】
図1は、共有メモリ型マルチプロセッサ・システムの構成例を示すブロック図である。このシステムは、CPU0〜n(1−0〜1−n)と、CPU0〜n(1−0〜1−n)のそれぞれに接続されるキャッシュ2−0〜2−nと、バスコントローラ3と、共有メモリ4とを含む。
【0025】
CPU0〜n(1−0〜1−n)のそれぞれは、キャッシュ2−0〜2−nを介して共有バス5に接続され、共有リソースである共有メモリ4などにアクセスしながら演算処理を行なう。CPU0〜n(1−0〜1−n)がキャッシュ2−0〜2−nを介して共有メモリ4にアクセスすることによって、キャッシュ2−0〜2−nが共有メモリ4に対してアクセスされたデータのコピーを保持する。これによって、CPU1−0〜1−nは、キャッシュ2−0〜2−nから高速にデータのコピーにアクセスすることができ、共有バス5のバス・トラフィックを低減してシステム全体の処理性能を向上させることができる。
【0026】
バスコントローラ3は、キャッシュ0〜n(2−0〜2−n)から共有メモリ4へのアクセス要求を調停すると共に、ロック処理の制御を行なう。なお、バスコントローラ3によってロック変数の値が共有メモリ4に書き込まれ、CPU0〜n(1−0〜1−n)は共有メモリ4にアクセスしてロック変数を取得することになる。
【0027】
図2は、共有メモリ型マルチプロセッサ・システムの構成の具体例を示すブロック図である。このマルチプロセッサ・システムは、たとえば1つの半導体装置によって実現され、8つのCPU0〜7(10−0〜10−7)と、内部バス制御部11と、L2キャッシュ(2次キャッシュ)12と、DDR(Double Data Rate)2 I/F(Interface)13と、DMAC(Dynamic Memory Access Controller)14と、内蔵SRAM(Static Random Access Memory)15と、外部バス制御部16と、周辺回路17と、汎用入出力ポート18とを含む。
【0028】
また、CPU0〜7(10−0〜10−7)のそれぞれは、CPU21と、MMU(Memory Management Unit)22と、Iキャッシュ(命令キャッシュ)23と、ローカルメモリ24と、Dキャッシュ(データキャッシュ)25とを含む。
【0029】
CPU21は、MMU22およびプロセッサバス26を介してIキャッシュ23、ローカルメモリ24およびDキャッシュ25に接続されており、これらのキャッシュおよびメモリに高速にアクセスすることが可能である。
【0030】
プロセッサバス26は、命令とデータとが分離されたハーバード構成を有しており、命令がIキャッシュ23に格納され、データがDキャッシュ25に格納される。ローカルメモリ24は、共有メモリ4などのCPU外部のメモリには格納されないローカルなデータを保持する。
【0031】
CPU0〜7(10−0〜10−7)は、内部バス19を介して内部バス制御部11に接続される。内部バス制御部11は、CPU0〜7(10−0〜10−7)においてキャッシュ・ミスが発生した場合や、CPU0〜7(10−0〜10−7)が周辺回路17などのIO(Input Output)にアクセスする場合に、そのアクセス要求を受けて実行すると共に、内部バス19におけるアクセスの調停などを行なう。
【0032】
また、内部バス制御部11は、CPU0〜7(10−0〜10−7)に対するスヌープ制御を行なっており、CPU0〜7(10−0〜10−7)のDキャッシュ25におけるキャッシュのコヒーレンシが保たれる。
【0033】
L2キャッシュ12は、内部バス制御部11を介してCPU0〜7(10−0〜10−7)からのアクセス要求を受け、DDR2 I/F13に接続されるDDR SDRAM(Synchronous Dynamic Random Access Memory)、内蔵SRAM15、外部バス制御部16に接続される外部バス上の各種ROM(Read Only Memory)デバイス(フラッシュROM、EEPROMなど)やRAMデバイス(SDRAM、SRAMなど)、PCカード上のメモリ・デバイスなどにアクセスする。そして、CPU0〜7(10−0〜10−7)によってアクセスされたデータのコピーを保持する。
【0034】
なお、図1に示す共有メモリ4は、これらの内蔵RAM15や半導体装置の外部端子に接続されたメモリに対応している。これらのメモリを総称して、共有メモリ4とも呼ぶことにする。
【0035】
DMAC14は、CPU0〜7(10−0〜10−7)からのDMA転送要求に応じて、共有メモリ4などのメモリ−メモリ間のDMA転送や、周辺回路17などのIO−メモリ間のDMA転送を制御する。
【0036】
外部バス制御部16は、外部バスを介して半導体チップ外部のデバイスと接続されており、CS(Chip Select)コントローラ、SDRAMコントローラ、PCカードコントローラなどの機能を有している。
【0037】
周辺回路17は、ICU(Interrupt Control Unit)、CLKC(Clock Controller)、タイマ、UART(Universal Asynchronous Receiver Transmitter)、CSIO、GPIO(General Purpose Input Output)などの機能を有している。また、汎用入出力ポート18は、半導体チップ外部のIOポートに接続される。
【0038】
図3は、CPU0〜7(10−0〜10−7)によって実行される一般的なスピンロック処理の擬似コードの一例を示す図である。原理的には、単純にロック変数をアトミックにチェックしてロックが獲得できるまでの間、スピン待ちのループを実行すればよい。しかしながら、共有データに毎回アトミックにアクセスすることはバスのトラフィックを増やし、実行時のペナルティが大きくなる。したがって、通常は図3に示すようにL1およびL2のようにループを二重化する。
【0039】
図3において、ロック変数(lockvar)が“1”のときにアンロック状態であり、“0”よりも小さいときにロック状態であることを示している。外側のループであるL1においては、ロック変数をアトミックに読み出してデクリメントし、その値が“0”のとき、すなわちロックが取れたときは、スピン待ちループから抜ける。
【0040】
ロックが取れなかった場合、L2に示す内側のスピン待ちループでロック変数を読み出して、ロックが取れそうかを確認する。ロック変数が“1”になると、再度L1に示す外側のループでアトミックにロックの獲得を試みる。
【0041】
ここで、MESIプロトコルのようなキャッシュ・コヒーレンシ・プロトコルにおいては、L2に示す内側のスピン待ちループにおけるロック変数の読み出し処理が常にキャッシュメモリにリード・ヒットし続けるため、複数のCPUがスピンロックでスピン待ちしている状況においても共有バス5上には無用のアクセスが発生せず、システム性能に及ぼす影響を最小限にすることができる。
【0042】
図4は、スピンロック処理のコードの他の一例を示す図である。レジスタr2には、ロック変数が格納される共有メモリ4上のアドレスが格納されている。外側のループであるL1において、まずpsw(processor status word)の値をレジスタr1に転送しておき、割り込みを禁止する。
【0043】
次に、LOCK命令によってアトミックにロック変数をロードしてレジスタr0に格納する。そして、r0の値に“−1”を加算し、UNLOCK命令によってr0の値をロック変数にセーブする。なお、LOCK命令を実行してからUNLOCK命令を実行するまでの間、クリティカル・セクションを排他的にアクセスすることが可能となっている。
【0044】
次に、r1の値をpswに戻し、r0の値が“0”であればロックが取れたとしてspin_lock_endに分岐する。ロックが取れなかった場合には、L2に示す内側のスピン待ちループでロック変数を読み出して、ロックが取れそうかを確認する。
【0045】
L2において、まず通常のロード命令によってロック変数の値をr0にロードする。そして、r0の値が“0”よりも大きければロックが取れそうであるとしてspin_lockに分岐し、再度L1に示す外側のループでアトミックにロックの獲得を試みる。そうでなければ、spin_wait_loopに分岐して内側のL2をループする。なお、図3を用いて説明したのと同様に、L2に示す内側のスピン待ちループにおけるロック変数の読み出し処理が常にキャッシュメモリにリード・ヒットし続けることになる。
【0046】
図5は、図4に示す通常ロード命令(LD命令)によるロック変数のロード処理シーケンスを示す図である。CPU21がLD命令を実行するときに、メモリ・リード・リクエスト(req)信号をキャッシュ25に送信する。キャッシュ25は、CPU21からリクエストを受け付けると、リクエストを受け付けたことを通知するためにアクノリッジ(ack)信号をCPU21に返信する。なお、ロック変数のコピーが格納されるのが主にDキャッシュ25であることから、Dキャッシュ25を単にキャッシュまたはキャッシュメモリと表記することにする。
【0047】
ここで、ロック変数がキャッシュ25に格納されておりキャッシュ・ヒットするため、キャッシュ25は、共有メモリ4にはアクセスせずに、CPU21に対してエンド(end)信号と共にロードデータ(ロック変数)を送信し、トランザクションを完了する。CPU21は、エンド信号がアサートされるのを確認してロードデータを受け取り、プログラムの以降の処理を継続する。
【0048】
MESIプロトコルにおいては、M(Modified:変更)、E(Exclusive:排他)、S(Shared:要求)、I(Invalid:無効)という4つの状態でキャッシュラインの状態を表現し、キャッシュ・コヒーレンシの保持を行なう。図4を用いて説明したように、ロックが確保できるまでの間、CPUはスピン待ちループを実行し続けている状態にある。
【0049】
このとき、キャッシュラインの状態はEまたはSという、有効なコピーが登録された状態であるため、CPU21によるロック変数の読み出しがキャッシュ25にリード・ヒットし続けた状態でスピンすることになる。そのため、スピン待ちの間はCPU21とキャッシュ25とが極めて高速に動作し、大きな電力を消費しながら他のCPUによるロックの解放を待っている状態となっている。
【0050】
本発明の実施の形態におけるデータ処理装置は、スピンロックのためのスピン待ちループ実行時の消費電力を削減し、効率のよいスピンロックを実現するための機構を設けたものである。以下、各実施の形態について詳細に説明する。
【0051】
(第1の実施の形態)
図6は、本発明の第1の実施の形態におけるデータ処理装置のCPU21とキャッシュメモリ25との接続例を示す図である。CPU21とキャッシュメモリ25とは、リクエスト(req)信号、アクノリッジ(ack)信号、エンド(end)信号といったハンドシェーク信号によって接続されており、CPU21がハンドシェーク制御を行なうことによって確実にメモリアクセス処理を行なえるように構成されている。
【0052】
また、CPU21は、後述のウェイト付きロード命令(LDS命令)またはスピン待ち命令(SPIN命令)を実行するときにスピン待ち要求信号をキャッシュメモリ25に対して出力する。また、キャッシュメモリ25には割り込み要求信号が接続されている。これらの詳細については後述する。
【0053】
図7は、本発明の第1の実施の形態におけるデータ処理装置内のCPU21の構成例を示すブロック図である。このCPU21は、命令フェッチ部31と、命令デコード部32と、制御部33と、アドレス生成部34と、PC(Program Counter)部35と、汎用レジスタファイル36と、制御レジスタファイル37と、演算部38と、ロード・ストア部39と、データセレクタ40とを含み、それぞれがプロセッサバス26、Sバス41およびDバス42に接続される。なお、各部はこれらのバスを介してデータ、アドレス、制御信号などをやり取りすることができる。
【0054】
命令フェッチ部31は、PC部35のプログラムカウンタ値に応じて、Iキャッシュ23を介して共有メモリ4などに格納される命令コードをフェッチして、命令コードを命令デコード部32に出力する。
【0055】
命令デコード部32は、命令フェッチ部31から受けた命令コードをデコードし、デコード結果を制御部33に出力する。また、命令デコード部32が、命令コードが後述のウェイト付きロード命令(LDS命令)またはスピン待ち命令(SPIN命令)をデコードすると、制御部33はスピン待ち要求信号をキャッシュメモリ25に出力する。
【0056】
制御部33は、命令デコード部32から受けたデコード結果に応じて、CPU21の各部を制御することによりCPU21の動作を制御し管理する。なお、図7においては、制御部33から各部に出力される制御信号を省略している。
【0057】
アドレス生成部34は、命令デコード部32によって分岐命令がデコードされたときに、分岐先アドレスをアドレッシングモードに応じて計算する。分岐条件が成立した場合には、計算された分岐先アドレスがPC部35に設定される。
【0058】
演算部38は、制御部33による制御によって、汎用レジスタファイル36に格納されるデータ、共有メモリ4から読み出されたデータなどに対して演算処理を行なう。演算結果は、汎用レジスタファイル36、共有メモリ4、キャッシュメモリ25などに書き込まれる。
【0059】
ロード・ストア部39は、演算部38による演算結果などを共有メモリ4やキャッシュメモリ25にストアし、共有メモリ4やキャッシュメモリ25からデータをロードする。このとき、ロード・ストア部39は、オペランドアクセスアドレスを生成して、データセレクタ40を介してキャッシュメモリ25に出力する。
【0060】
データセレクタ40は、ロード・ストア部39から出力されるオペランドアクセスアドレスおよび書き込みデータをプロセッサバス26に出力し、プロセッサバス26を介して受けた読み出しデータをロード・ストア部39に出力する。
【0061】
図8は、本発明の第1の実施の形態におけるデータ処理装置内のキャッシュメモリ25の構成例を示すブロック図である。このキャッシュメモリ25は、バス・スヌープ機構を備えたスヌープ・キャッシュであり、キャッシュメモリ25の全体的な制御を行なう制御部50と、タグ51と、データメモリ52と、比較器53および54と、セレクタ55および56と、スピン待ち状態を制御するためのスピン待ち状態フラグSWF(Spin-Wait flag)57と、カウンタ58と、待ちサイクル数を設定するためのリロードレジスタ59とを含む。
【0062】
制御部50は、上述のハンドシェーク制御およびバス・スヌープ制御を行なう以外に、SWF57、カウンタ58およびリロードレジスタ59を制御しながらスピン待ち制御を行なう。
【0063】
タグ51は、データメモリ52においてデータが格納されるキャッシュラインに対応する上位アドレスを保持する。また、データメモリ52は、共有メモリ4からロードしたデータのコピーを保持する。
【0064】
タグ51は、プロセッサバスのアドレス60と、内部バスのアドレス62とに接続されている。また、データメモリ52は、セレクタ55および56を介して、プロセッサバスのアドレス60およびデータ61と、内部バスのアドレス62およびデータ63とに接続されている。このような構成にすることにより、自CPU21からのキャッシュアクセスにおいてデータが参照される以外に、他のCPU21からのスヌープ・アクセスのために内部バス側からのアクセスも可能となっている。
【0065】
比較器53は、プロセッサバスのアドレス60の上位アドレスとタグ51に格納されるアドレスとを比較することによって、自CPU21からのアクセスに対するキャッシュ・ヒット/ミスを判定する。また、比較器54は、内部バスのアドレス62の上位アドレスとタグ51に格納されるアドレスとを比較することによって、他のCPU21からのスヌープ・アクセスに対するキャッシュ・ヒット/ミスを判定する。
【0066】
データメモリ52は、キャッシュヒットしたときに、プロセッサバスのアドレス60または内部バスのアドレス62の下位アドレスに応じて、プロセッサバスのデータ61または内部バスのデータ63のデータ書き込みや、データ読み出しを行なう。
【0067】
図9は、本発明の第1の実施の形態におけるキャッシュメモリ25の状態遷移を説明するための図である。キャッシュメモリ25の制御部50は、通常動作状態においてCPU21からのスピン待ち要求を受け付けると、スピン待ちフラグSWF57を“1”にセットし、スピン待ち状態に遷移する。そして、CPU21からのスピン待ち要求が解除されると、制御部50は、SWF57を“0”にリセットして通常動作状態に戻る。
【0068】
本実施の形態においては、スピンロックにおけるスピン待ち処理において、CPU21からのメモリ読み出し要求に対し、キャッシュメモリ25の制御部50からの応答を止めることでCPU21のパイプライン実行をストールさせ、スピン待ち時のCPU21およびキャッシュメモリ25の動作を一時停止させる。
【0069】
CPU21がスピン待ち用の命令を実行することにより、キャッシュメモリ25はスピン待ち状態に遷移する。ここで、CPU21がロック変数を読み出すためのロード処理を行なうと、キャッシュメモリ25はスピン待ち状態となっているので、CPU21からキャッシュメモリ25への読み出しリクエストに対してアクノリッジ応答を返さない。これによって、CPU21とキャッシュメモリ25とのパイプラインがストールし、CPU21とキャッシュメモリ25との動作が一時的に停止する。
【0070】
ただし、スピン待ち中であっても、CPU21は割り込み処理は受け付ける。これは、システムによっては、CPU21が固有の周辺IOを有するため、割り込みの種類によっては特定のCPU21しか処理できないものがあること、割り込み処理の速度を速くするためには割り込み要求を受けたCPU自身が割り込み処理をすることが望ましいこと、などの理由による。
【0071】
図6および図8に示すように、キャッシュメモリ25には割り込み要求信号が接続されており、割り込み要求を受けてスピン待ち状態を解除することによってCPU21は動作を再開でき、割り込みを受け付けることが可能となる。
【0072】
なお、キャッシュメモリ25のスピン待ち状態の解除条件として、(1)他のCPU21から当該キャッシュメモリ25へのスヌープ・ライト・ヒット、(2)割り込み要求、(3)一定時間の経過(タイムアウト)の3つがある。それぞれの詳細については、図11〜図13を用いて後述する。
【0073】
図10は、本発明の第1の実施の形態におけるCPU21によって実行されるスピンロック処理コードの一例を示す図である。図4に示すスピンロック処理コードと比較すると、通常ロード命令(LD命令)がウェイト付きロード命令(LDS命令)に置換されている点のみが異なる。
【0074】
図10においては、上述のスピン待ち用の命令として、LDS命令が記述されている。CPU21がこのLDS命令を実行するときに、キャッシュメモリ25に対してスピン待ち要求を出力する。このとき、キャッシュメモリ25はスピン待ち状態に遷移し、CPU21はキャッシュメモリ25からアクノリッジ応答が返ってくるまでストールして、次のbgtz命令を実行しない。
【0075】
図11は、スヌープ・アクセス受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。スヌープキャッシュによるキャッシュ・コヒーレンシが保たれている状況において、キャッシュメモリ25は、スピン待ち中にCPU21からのメモリアクセス動作が停止している場合でも、キャッシュ・コヒーレンシ保持のために、他のプロセッサ21からのキャッシュメモリ・アクセスに伴うスヌープ・アクセスを受け付け、キャッシュ状態を更新する。
【0076】
ここで、キャッシュ・コヒーレンシ・プロトコルの一例として、MOESIプロトコルクラスのうち、上述のMESIプロトコルを用いたスヌープ・キャッシュの場合について説明するが、これら4つの状態にO(Owned:所有)状態を付け加えたMOESIプロトコルを用いた場合でも同様の処理を実現可能である。
【0077】
図11において、CPU21がLDS命令を実行するときに、メモリ・リード・リクエスト(req)信号およびスピン待ち要求信号をキャッシュ25に送信する。キャッシュ25の制御部50は、CPU21からリクエストおよびスピン待ち要求を受け付けると、SWF57をセットしてスピン待ち状態に遷移する。CPU21は、パイプラインがストールしてキャッシュメモリ25からのアクノリッジ待ち状態となる。このとき、ロック変数が格納されるキャッシュラインの状態はE(排他)またはS(共有)である。
【0078】
他のCPU21がロック変数をアンロックすると、ロック変数への書き込みによるスヌープ・ライト・ヒット・アクセスが発生する。キャッシュメモリ25においては、当該キャッシュラインがスヌープによって無効化され、キャッシュラインの状態がI(無効)に変化する。そして、キャッシュメモリ25の制御部50は、このスヌープ・アクセスを受け付けると、SWF57をクリアして通常動作状態に復帰し、スピン待ちが解除される。そして、リード・リクエストを受け付けたことを通知するためにアクノリッジ(ack)信号をCPU21に返信する。
【0079】
CPU21は、キャッシュメモリ25からアクノリッジ応答を受けると、パイプラインがストールした状態から復帰する。そして、キャッシュメモリ25においては、当該キャッシュラインの状態がI(無効)になっているため、当該リード・アクセスはミスし、共有バス5を介して共有メモリ4へのリード・アクセスが行なわれる。
【0080】
キャッシュメモリ25は、共有メモリ4からロック変数をロードし、CPU21に対してエンド(end)信号と共にロードしたロック変数を送信し、トランザクションを完了する。したがって、スヌープ・アクセスによってスピン待ち状態から復帰した場合は、必ずアンロック処理によって共有メモリ4に書き込まれた最新のデータが読み出されることになり、CPU21は正しくロックスピン処理を実行することができる。
【0081】
図12は、割り込み要求受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。CPU21がLDS命令を実行するときに、スピン待ち要求信号およびメモリ・リード・リクエスト(req)信号をキャッシュメモリ25に送信する。キャッシュメモリ25の制御部50は、CPU21からスピン待ち要求を受け付けると、SWF57をセットしてスピン待ち状態に遷移する。CPU21は、パイプラインがストールしてキャッシュメモリ25からのアクノリッジ待ち状態となる。このとき、ロック変数が格納されるキャッシュラインの状態はE(排他)またはS(共有)である。
【0082】
その後、キャッシュメモリ25の制御部50が割り込み要求を受けると、SWF57をクリアして通常動作状態に復帰し、スピン待ちが解除される。そして、リード・リクエストを受け付けたことを通知するためにアクノリッジ(ack)信号をCPU21に返信する。
【0083】
CPU21は、キャッシュメモリ25からアクノリッジ応答を受けると、パイプラインがストールした状態から復帰する。そして、キャッシュメモリ25の制御部50は、当該キャッシュラインの状態がE(排他)またはS(共有)のままであるため、当該リード・アクセスはキャッシュ・ヒットし、共有メモリ4にはアクセスせずに、CPU21に対してエンド(end)信号と共にロードデータ(ロック変数)を送信し、トランザクションを完了する。
【0084】
プロセッサ21がスピン待ち状態から復帰すると割り込み要求が受け付けられ、CPU21は割り込み処理を実行する。そして、CPU21は、割り込みハンドラからリターンすると、ウェイト付きロード命令の次の命令からプログラムの処理を継続するが、ロックを獲得することができないためスピン待ちループの命令実行を繰り返す。スピン待ちループにおいて、CPU21は再びウェイト付きロード命令を実行し、キャッシュメモリ25はスピン待ち状態になる。
【0085】
図13は、所定時間経過時のウェイト付きロード命令の処理シーケンスを説明するための図である。CPU21がLDS命令を実行するときに、スピン待ち要求信号およびメモリ・リード・リクエスト(req)信号をキャッシュメモリ25に送信する。キャッシュメモリ25の制御部50は、CPU21からスピン待ち要求を受け付けると、SWF57をセットしてスピン待ち状態に遷移すると共に、カウンタ58のダウンカウントを開始させる。CPU21は、パイプラインがストールしてキャッシュメモリ25からのアクノリッジ待ち状態となる。このとき、ロック変数が格納されるキャッシュラインの状態はE(排他)またはS(共有)である。
【0086】
その後、キャッシュメモリ25の制御部50がカウンタ58のタイムアウトを検出すると、SWF57をクリアして通常動作状態に復帰し、スピン待ちが解除される。そして、リード・リクエストを受け付けたことを通知するためにアクノリッジ(ack)信号をCPU21に返信する。
【0087】
CPU21は、キャッシュメモリ25からアクノリッジ応答を受けると、パイプラインがストールした状態から復帰する。そして、キャッシュメモリ25の制御部50は、当該キャッシュラインの状態がE(排他)またはS(共有)のままであれば、当該リード・アクセスはキャッシュ・ヒットし、共有メモリ4にはアクセスせずに、CPU21に対してエンド(end)信号と共にロードデータ(ロック変数)を送信し、トランザクションを完了する。
【0088】
プロセッサ21がスピン待ち状態から復帰すると、ウェイト付きロード命令の次の命令からプログラムの処理を継続するが、ロックを獲得することができない場合にはスピン待ちループの命令実行を繰り返す。スピン待ちループにおいて、CPU21は再びウェイト付きロード命令を実行し、キャッシュメモリ25はスピン待ち状態になる。この処理がスピン待ちループの実行が継続している間繰り返される。
【0089】
ここで、制御部50は、カウンタ58のみを用いて待ち時間を固定してタイムアウトを検出するとしたが、リロードレジスタ59に任意の値を設定し、スピン待ち開始時にリロードレジスタ59の値をカウンタ58にリロードしてダウンカウントを開始させるようにしてもよい。これによって、待ち時間を可変とすることができる。
【0090】
図14は、CPU21によるウェイト付きロード命令の処理フローを説明するための図である。まず、CPU21がウェイト付きロード命令(LDS)命令をデコードすると、制御部33は、キャッシュメモリ25に対してスピン待ち要求信号をアサートする(S11)。
【0091】
次に、CPU21は、ウェイト付きロード処理を行なって(S12)、ウェイト付きロード命令の処理を終了する。上述のように、ウェイト付きロード処理において、CPU21の制御部33はキャッシュメモリに対してリード・リクエスト信号を送信し、キャッシュメモリ25からアクノリッジ信号が返信されるまでスピン待ちを行なう。そして、アクノリッジ信号が返信された後、キャッシュメモリ25からエンド信号と共に送られてくるロードデータを受信する。
【0092】
図15は、キャッシュメモリ25によるロード処理の実行フローを説明するための図である。まず、キャッシュメモリ25の制御部50がリクエスト信号を受けると(S21,Yes)、ロード命令がウェイト付きロード命令か否かをスピン待ち要求信号(SWF57)に応じて判断する(S22)。
【0093】
ロード命令が通常のロード命令(LD命令)であれば(S22,No)、ステップS24に処理が進む。また、ロード命令がウェイト付きロード命令であれば(S22,Yes)、制御部50は、スピン待ち処理を行ない(S23)、ステップS24に進む。このスピン待ち処理については、図16を用いて後述する。
【0094】
ステップS24において、制御部50は、CPU21に対してアクノリッジ応答をアサートし、通常のロード処理を行なう(S25)。すなわち、キャッシュ・ヒットの場合には、データメモリ52に格納されるデータをロードする。また、キャッシュ・ミスの場合には、共有メモリ4からデータをロードし、データのコピーをデータメモリ52に格納する。
【0095】
最後に、制御部50は、CPU21に対してエンド信号をアサートし、ロードデータを転送して(S26)、ロード処理を終了する。
【0096】
図16は、図15に示すスピン待ち処理(S23)の実行フローを説明するための図である。まず、制御部50は、SWF57に“1”をセットし(S31)、カウンタ58の初期化を行なう(S32)。リロードレジスタ59に待ち時間が設定されている場合には、その値をカウンタ58にリロードする。
【0097】
次に、制御部50は、割り込み要求があるか否かを判定する(S33)。割り込み要求があれば(S33,Yes)、ステップS36に処理が進む。また、割り込み要求がなければ(S33,No)、制御部50は、スヌープ・ライト・ヒットが発生したか否かを判定する(S34)。スヌープ・ライト・ヒットが発生した場合には(S34,Yes)、ステップS36に処理が進む。
【0098】
また、スヌープ・ライト・ヒットが発生していない場合には(S34,No)、制御部50は、カウンタ58によるタイムアウトが発生したか否かを判定する(S35)。タイムアウトが発生している場合には(S35,Yes)、ステップS36に処理が進む。また、タイムアウトが発生していない場合には(S35,No)、カウンタ58によるダウンカウントが行なわれ(S37)、ステップS33以降の処理が繰り返される。
【0099】
ステップS36において、制御部50は、SWF57を“0”にクリアして、図15に示すステップS24の処理に進む。
【0100】
以上説明したように、本実施の形態におけるデータ処理装置によれば、スピン待ちループにおけるロック変数の読み出し処理において、キャッシュメモリ25からのアクノリッジ応答を待たせることによりCPU21のパイプラインをストールさせ、CPU21の動作を停止させるようにしたので、CPU21のスピン待ち状態における無駄な動作による電力の消費を削減することが可能となる。
【0101】
また、キャッシュメモリ25においても、スピン待ち時におけるタグ51やデータメモリ52へのアクセスを停止させることができため、キャッシュ・ヒットし続けて高速動作することにより発生する無駄な電力を消費するといったことを防止することが可能となる。したがって、スピン待ち時におけるデータ処理装置全体の消費電力を大きく削減することが可能となる。
【0102】
また、CPU21はスピン待ち要求およびリード・リクエストをキャッシュメモリ25に送信した後、キャッシュメモリ25からアクノリッジ応答が返信されるまでスピン待ちを行なうので、スピン待ちの開始から終了までの監視をプログラム処理によって行なう必要がなくなり、プログラム処理を簡略化することが可能となる。
【0103】
また、CPU21はスピン待ち命令を実行したことをキャッシュメモリ25に通知するだけであり、キャッシュメモリ25が能動的にスピン待ち処理を行なうため、CPU21の回路構成を簡略化することが可能となる。
【0104】
また、キャッシュメモリ25は、スピン解除待ちのチェックをスヌープ・ライト・アクセスがヒットしたか否かによって行なうため、キャッシュメモリ25の回路構成も簡略化することが可能となる。
【0105】
また、キャッシュメモリ25は、割り込み要求があった場合にはスピン待ち状態を解除してCPU25を復帰させるようにしたので、CPU21は直ちに割り込み処理を行なうことができ、割り込み応答性能が損なわれることを防止することが可能となる。
【0106】
また、スピン待ちループ中のウェイト付きロード命令の実行終了からの復帰を、割り込みまたは他のCPU21からのスヌープ・アクセスを契機としてダイナミックに行なうようにしたので、必要以上の待ち時間を設定する必要がなくなる。したがって、従来のように固定の待ち時間を設定する必要がなくなり、スピンロック応答を高速に行なうことが可能となる。
【0107】
さらには、スピン待ち専用の命令を設けることにより、スピン待ちのための通常命令を別途スピン待ちループ中に挿入する必要がなくなり、スピンロック処理のコードサイズを削減することが可能となる。通常、スピンロック処理は高速実行が求められることから、インライン関数やマクロ命令として実現されることが多く、またスピンロック処理はOSカーネル中の様々な箇所で使用されてコードが展開されるため、コードサイズが削減されることに大きなメリットがある。また、コードサイズが小さくなれば、I(命令)キャッシュ23に格納される命令コードの数も多くなるため、さらに処理速度を高速化することが可能となる。
【0108】
(第2の実施の形態)
第1の実施の形態におけるデータ処理装置においては、CPU21がウェイト付きロード命令を実行するときにスピン待ち要求をキャッシュメモリ25に送信し、キャッシュメモリ25をスピン待ち状態とするものであった。本発明の第2の実施の形態におけるデータ処理装置は、第1の実施の形態におけるデータ処理装置と比較して、CPU21にスピン待ち命令(SPIN命令)を設け、ロード結果が指定の値となるまでCPU21が待ち続ける点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【0109】
図17は、本発明の第2の実施の形態におけるCPU21によって実行されるスピンロック処理コードの一例を示す図である。図10に示すスピンロック処理コードと比較すると、ウェイト付きロード命令(LDS命令)と続くbgtz命令とが、スピン待ち命令(SPIN命令)に置換されている点のみが異なる。
【0110】
CPU21はスピン待ち命令を実行すると、CPU21とキャッシュメモリ25とが直ちにスピン待ち状態となり、キャッシュメモリ25によって待ち状態が解除されるまで処理を停止し、スピン待ちが解除された後ロード処理を行なう点については第1の実施の形態で説明したLDS命令と同様である。
【0111】
LDS命令と異なるのは、スピン待ち状態が解除されてロード処理が実行された後、CPU21はロード結果がSPIN命令によって指定される終了条件を満足しない場合には、再度スピン待ち状態になって解除されるのを待ち続ける点である。SPIN命令の終了条件は、ロードデータが指定したオペランドと一致するか、ロードデータが固定値と一致することである。
【0112】
図17の内側のループL2に記述されたSPIN命令は、ロードしたロック変数の値がオペランドで指定した即値“0”となるまでスピン待ちを続ける。ロック変数の値が“0”になると、spin_lockに分岐してL1に示す外側のループでアトミックにロックの獲得を試みる。
【0113】
図18は、CPU21によるスピン待ち命令の処理フローを説明するための図である。まず、CPU21がスピン待ち命令(SPIN)命令を実行すると、制御部33はキャッシュメモリ25に対してスピン待ち要求信号をアサートする(S41)。
【0114】
次に、CPU21は、ウェイト付きロード処理を行なう(S42)。上述のように、ウェイト付きロード処理において、CPU21の制御部33はキャッシュメモリに対してリード・リクエスト信号を送信し、キャッシュメモリ25からアクノリッジ信号が返信されるまでスピン待ちを行なう。そして、アクノリッジ信号が返信された後、制御部33はキャッシュメモリ25からエンド信号と共に送られてくるロードデータを受信する。
【0115】
次に、CPU21の制御部33は、ロードデータの値が指定値と一致するか否かによってスピン待ちの終了を判定する(S43)。ロードデータの値が指定値と一致しない場合には(S43,No)、ステップS41に戻って以降の処理を繰り返す。また、ロードデータの値が指定値と一致する場合には(S43,Yes)、スピン待ち処理を終了する。
【0116】
なお、CPU21がSPIN命令を実行中に割り込み要求を受けた場合、CPU21はSPIN命令の実行を中断し、ウェイト付きロード処理の完了時に割り込み処理を受け付ける。そして、CPU21は、割り込み処理終了後、SPIN命令の実行を継続する。
【0117】
以上説明したように、本実施の形態におけるデータ処理装置によれば、スピン待ち命令実行時にロードデータの値が所定値と一致するまでスピン待ちを行なうようにしたので、第1の実施の形態において説明した効果に加えて、スピンロック処理のコードサイズをさらに削減することが可能となる。
【0118】
(第3の実施の形態)
本発明の第3の実施の形態におけるデータ処理装置は、第1および第2の実施の形態におけるデータ処理装置と比較して、スピン待ち状態への移行およびスピン待ち状態からの復帰に連動して、CPU21およびキャッシュメモリ25へのクロック供給のモードを変更する点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【0119】
図19は、本発明の第3の実施の形態におけるデータ処理装置の構成例を示すブロック図である。このデータ処理装置は、図6に示す第1の実施の形態におけるデータ処理装置にさらにクロックモジュール(CLKC)27を追加したものである。
【0120】
キャッシュメモリ25は、CPUクロック・ドメインで動作する部分と、キャッシュ・クロック・ドメインで動作する部分とに分けられている。また、キャッシュメモリ25は、スピン待ち状態に遷移するときに、スピン待ち状態であることをクロックモジュール27に通知してクロック制御を行なわせる。
【0121】
クロックモジュール27は、キャッシュメモリ25が通常動作状態の時にはCPU21およびキャッシュメモリ25に対してCPUクロックを供給すると共に、キャッシュメモリ25にキャッシュクロックを供給する。
【0122】
クロックモジュール27は、キャッシュメモリ25がスピン待ち状態の時にはCPU21およびキャッシュメモリ25のCPUクロック・ドメインで動作する部分に対するCPUクロックの供給を停止する。このとき、キャッシュメモリ25のキャッシュ・クロック・ドメインで動作する部分に対してはキャッシュクロックが供給される。これによって、キャッシュメモリ25がスピン待ち状態であっても、スピン待ち制御を行なっている部分のみは動作を続けることができる。
【0123】
以上説明したように、本実施の形態におけるデータ処理装置によれば、キャッシュメモリ25がスピン待ち状態の時に、CPU21およびキャッシュメモリ25のCPUクロック・ドメインで動作する部分に対するCPUクロックの供給を停止するようにしたので、第1および第2の実施の形態において説明した効果に加えて、消費電力をさらに削減することが可能となる。
【0124】
また、スピン待ち状態によって低消費電力モードに切り替えるようにしたので、CPU21はプログラム処理によってクロック制御を行なう必要がなくなる。したがって、機種依存の実装になりがちなプログラムによる低消費電力機能に依存する必要がなくなる。
【0125】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0126】
1−0〜1−n,10−0〜10−n,21 CPU、2−0〜2−n キャッシュメモリ、3 バスコントローラ、4 共有メモリ、5 共有バス、11 内部バス制御部、12 L2キャッシュ、13 DDR2 I/F、14 DMAC、15 内蔵SRAM、16 外部バス制御部、17 周辺回路、18 汎用入出力ポート、19,20 内部バス、22 MMU、23 Iキャッシュ、24 ローカルメモリ、25 Dキャッシュ、26 プロセッサバス、27 クロックモジュール、31 命令フェッチ部、32 命令デコード部、33 制御部、34 アドレス生成部、35 PC部、36 汎用レジスタファイル、37 制御レジスタファイル、38 演算部、39 ロード・ストア部、40 データセレクタ、50 制御部、51 タグ、52 データメモリ、53,54 比較器、55,56 セレクタ、57 SWF、58 カウンタ、59 リロードレジスタ。
【技術分野】
【0001】
本発明は、共有メモリ型マルチプロセッサ(マルチコア)・システムにおけるプロセス間排他制御のためのスピンロック方式に関し、特に、キャッシュメモリの制御によりスピンロック動作における消費電力を削減することが可能なマルチプロセッサ・システムで用いられるデータ処理装置に関する。
【背景技術】
【0002】
近年、処理速度の高速化のためにマイクロコンピュータにキャッシュメモリが搭載されることが多い。プロセッサがキャッシュメモリを介して主記憶にアクセスすることにより、キャッシュにヒットしたときの処理速度を向上させることができる。
【0003】
このようなプロセッサを複数搭載したマルチプロセッサ・システムにおいては、各プロセッサがキャッシュメモリを介して共有バスに接続され、共有バスに接続される共有メモリ上のデータをアクセスすることができるようになっている。
【0004】
マルチプロセッサ、特に対称型マルチプロセッサ(SMP:Symmetric Multi-Processor)においては、プロセッサ間の共有リソースである共有メモリ上のデータに対して、キャッシュメモリ間で内容の一致(コヒーレンシ)を取りながら、各プロセッサが協調して処理を進めることが重要となる。
【0005】
このようなキャッシュメモリ間の内容の一致を保つためのプロトコルは、キャッシュ・コヒーレンシ・プロトコルと呼ばれており、大きく分類して、無効化型プロトコルと更新型プロトコルとに分けることができる。プロセッサ数が数十を超えないような比較的小規模なマルチプロセッサにおいては、比較的構成がシンプルな無効化型プロトコルが採用されることが多い。
【0006】
代表的な無効化型のキャッシュ・コヒーレンシ・プロトコルとして、ライトワンス(Write-Once)プロトコルや、MESIプロトコルを挙げることができる。これらの無効化型プロトコルにおいては、バス・スヌープ機能を有する命令データ分離型のスヌープ・キャッシュ(Snoop Cache)の使用が前提となっており、自キャッシュへのライト・ミスが発生した場合には、スヌープ・ヒットした他キャッシュのキャッシュラインを無効化することで、キャッシュ間のコヒーレンシを保つことができる。
【0007】
また、マルチプロセッサ・システムにおいては、複数のプロセッサが同期を取りながら並行して処理を行なうが、これらのプロセス/スレッド間の排他制御・同期制御のためには、ロックによる排他制御が必要となる。
【0008】
シングルプロセッサ・システムにおいて、クリティカル・セクションに対するプロセス/スレッド間の排他制御は、その間を割り込み禁止とすることで容易に実現できる。しかしながら、マルチプロセッサ・システムにおいては、割り込み禁止中であっても他のプロセッサがクリティカル・セクションを実行する可能性がある。そのため、割り込み禁止とするだけでは不十分であり、プロセス/スレッド間でロック処理を行なうことが必要不可欠である。
【0009】
ロック処理とは、まず共有リソースをロックし、プロセッサがロックを獲得してからクリティカル・セクションを実行して共有リソースにアクセスした後、アンロックしてロックを解放するといった処理である。スピンロックは、このようなロック処理において一般的に使用される方式であり、ロックを獲得しようとするプロセッサがロック待ち状態でビジーループ(スピン)することにより、ロックの獲得を高速に行なう処理である。
【0010】
これに関連する技術として、下記の特許文献1〜3に開示された発明、および非特許文献1〜2に開示された技術がある。
【0011】
特許文献1は、複数の論理的または物理的なプロセッサ間の排他制御のためのスピンループに起因する消費電力やプロセッサ資源の無駄を削減することを目的とする。排他制御のための共有変数[A]の監視等のために、目的の共有変数[A]のロード試行およびストア事象の監視開始契機を設定するLOAD−WITH−LOOKUP命令を設ける。CPUは、CAS[A]による獲得失敗後にLOAD−WITH−LOOKUP命令を発行して、ロック変数[A]へのストア(他のCPUからの解放アクセス)を監視するとともにSUPENDによって休止状態に移行し、他のCPUからのロック変数[A]に対するストア可能性の検出を契機としてCPUを復帰させてロック変数[A]の再獲得を試行させることが可能になり、無駄なスピンループ(空転待ち)を行わせる必要がなくなる。
【0012】
特許文献2は、複数のスレッドを実行し得るマルチスレッド・プロセッサにおいて、複数のスレッドを効率的に切り替えうるマルチスレッド制御装置および制御方法を提供することを目的とする。マルチスレッド制御装置は、複数のスレッド処理手段を有し、あるスレッド処理手段の実行中にキャッシュ中の特定ブロックに対して、他のプロセッサまたは他のスレッド処理手段による更新がなされた場合に、当該スレッド処理手段に対する排他権が開放されたとみなす同期ロック制御を実行することにより、複数のスレッドを効率的に切り替える。
【0013】
特許文献3は、ループ状態にあるCPUの消費電力を削減できるとともに、処理を行っているCPUの性能に影響を与えず高性能処理を維持することが可能な半導体集積回路装置を提供することを目的とする。CPU間の排他制御のシステムとしてスピンロックを採用するマルチプロセッサ・システムにおいて、第1および第2のCPUには、それぞれスピンロック検出部が接続されている。スピンロック検出部においてスピンロック状態が検出されると、それぞれ反転スピンロックフラグバーSLF0およびバーSLF1が出力され、それぞれ2つのAND回路に入力される。2つのAND回路には、それぞれメモリアクセス要求信号RQ0およびRQ1も入力され、反転スピンロックフラグバーSLF0およびバーSLF1とのAND演算の出力M0およびM1が、それぞれ2つのキャッシュメモリに与えられる。
【0014】
非特許文献1および2は、スピンロックにおけるスピン待ち時の低消費電力化に関するものであり、PAUSE命令をスピン待ちループ中に挿入することにより、ごく僅かなディレイをスピン待ちループに挿入する。これによって、ループ待ちの間にプロセッサのハードウェアリソースが過剰に動作することを抑えて、スピンループ実行中の消費電力を削減するものである。
【0015】
PAUSE命令は、スピン待ちループを実行中であるというヒントをプロセッサに知らせることで、複数のメモリアクセスの同時発行やout−of−orderの実行を抑止する。これによって、ロック変数のリード・アクセス順が正しく保たれていることを保証すると共に、同時に動作するプロセッサのハードウェアリソースを減らして消費電力を抑えるものである。
【先行技術文献】
【特許文献】
【0016】
【特許文献1】特開2005−316854号公報
【特許文献2】特開2006−155204号公報
【特許文献3】特開2005−327086号公報
【非特許文献】
【0017】
【非特許文献1】“PAUSE - Spin Loop Hint”, IA-32 Intel(登録商標) Architecture Software Developer's Manual, Volume 2: Instruction Set Reference, p.3-544.
【非特許文献2】Intel(登録商標) Application Note AP-949, “Using Spin-Loops on Intel(登録商標) Pentium(登録商標)4 Processor and Intel(登録商標) Xeon(登録商標) Processor”
【発明の概要】
【発明が解決しようとする課題】
【0018】
上述のスピンロックにおいては、ロックが確保できるまでの間、プロセッサはスピン待ちループを実行し続けている状態にある。スピン待ちループ中において、プロセッサによるロック変数の読み出しがキャッシュメモリにリード・ヒットし続けた状態でスピンするため、スピン待ちの間はプロセッサとキャッシュメモリとが高速に動作し、大きな電力を消費しながら他のプロセッサによるロックの解放を待っている状態となっている。したがって、スピンして待っている間、プロセッサは何ら有益な処理を行なわずに無駄な電力を消費しているといった問題があった。
【0019】
また、非特許文献1および2に開示されているように、スピン待ちループ中に処理を待たせるための命令を挿入することにより、スピン待ち時の平均的な消費電力をある程度小さくすることができる。しかしながら、ロック変数の読み出し間隔を必要以上に大きくすると、スピンロック性能が劣化してしまうといった問題がある。また、スピンロックでロックが獲得できるまでの時間が、実行するアプリケーション・プログラムの処理内容や、システムの負荷状況によって変わるため、最適な待ち時間を選択することも難しい。
【0020】
本発明は、上記問題点を解決するためになされたものであり、その目的は、スピンロックのためのスピン待ちループ実行時における消費電力を削減することが可能なデータ処理装置を提供することである。
【課題を解決するための手段】
【0021】
本発明の一実施例によれば、複数のCPUのそれぞれがキャッシュメモリを介して共有メモリに接続され、キャッシュ・コヒーレンシが保たれているデータ処理装置が提供される。CPUは、スピンロック処理を行なう際にウェイト付きロード命令を実行すると、対応するキャッシュメモリにスピン待ち要求を出力する。また、キャッシュメモリは、CPUからスピン待ち要求を受けると、所定の条件(スヌープ・ライト・ヒット、割り込み要求、一定時間の経過)を満たすまでCPUからのリード・リクエストに対するアクノリッジ応答の出力を一時停止する。
【発明の効果】
【0022】
この実施例によれば、キャッシュメモリがCPUからスピン待ち要求を受けると、所定の条件を満たすまでCPUからのリード・リクエストに対するアクノリッジ応答の出力を一時停止するので、CPUのパイプライン実行をストールさせて、CPUおよびキャッシュメモリの動作を一時停止させることができ、スピン待ちループ実行時における消費電力を削減することが可能となる。
【図面の簡単な説明】
【0023】
【図1】共有メモリ型マルチプロセッサ・システムの構成例を示すブロック図である。
【図2】共有メモリ型マルチプロセッサ・システムの構成の具体例を示すブロック図である。
【図3】CPU0〜7(10−0〜10−7)によって実行される一般的なスピンロック処理の擬似コードの一例を示す図である。
【図4】スピンロック処理のコードの他の一例を示す図である。
【図5】図4に示す通常ロード命令(LD命令)によるロック変数のロード処理シーケンスを示す図である。
【図6】本発明の第1の実施の形態におけるデータ処理装置のCPU21とキャッシュメモリ25との接続例を示す図である。
【図7】本発明の第1の実施の形態におけるデータ処理装置内のCPU21の構成例を示すブロック図である。
【図8】本発明の第1の実施の形態におけるデータ処理装置内のキャッシュメモリ25の構成例を示すブロック図である。
【図9】本発明の第1の実施の形態におけるキャッシュメモリ25の状態遷移を説明するための図である。
【図10】本発明の第1の実施の形態におけるCPU21によって実行されるスピンロック処理コードの一例を示す図である。
【図11】スヌープ・アクセス受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。
【図12】割り込み要求受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。
【図13】所定時間経過時のウェイト付きロード命令の処理シーケンスを説明するための図である。
【図14】CPU21によるウェイト付きロード命令の処理フローを説明するための図である。
【図15】キャッシュメモリ25によるロード処理の実行フローを説明するための図である。
【図16】図15に示すスピン待ち処理(S23)の実行フローを説明するための図である。
【図17】本発明の第2の実施の形態におけるCPU21によって実行されるスピンロック処理コードの一例を示す図である。
【図18】CPU21によるスピン待ち命令の処理フローを説明するための図である。
【図19】本発明の第3の実施の形態におけるデータ処理装置の構成例を示すブロック図である。
【発明を実施するための形態】
【0024】
図1は、共有メモリ型マルチプロセッサ・システムの構成例を示すブロック図である。このシステムは、CPU0〜n(1−0〜1−n)と、CPU0〜n(1−0〜1−n)のそれぞれに接続されるキャッシュ2−0〜2−nと、バスコントローラ3と、共有メモリ4とを含む。
【0025】
CPU0〜n(1−0〜1−n)のそれぞれは、キャッシュ2−0〜2−nを介して共有バス5に接続され、共有リソースである共有メモリ4などにアクセスしながら演算処理を行なう。CPU0〜n(1−0〜1−n)がキャッシュ2−0〜2−nを介して共有メモリ4にアクセスすることによって、キャッシュ2−0〜2−nが共有メモリ4に対してアクセスされたデータのコピーを保持する。これによって、CPU1−0〜1−nは、キャッシュ2−0〜2−nから高速にデータのコピーにアクセスすることができ、共有バス5のバス・トラフィックを低減してシステム全体の処理性能を向上させることができる。
【0026】
バスコントローラ3は、キャッシュ0〜n(2−0〜2−n)から共有メモリ4へのアクセス要求を調停すると共に、ロック処理の制御を行なう。なお、バスコントローラ3によってロック変数の値が共有メモリ4に書き込まれ、CPU0〜n(1−0〜1−n)は共有メモリ4にアクセスしてロック変数を取得することになる。
【0027】
図2は、共有メモリ型マルチプロセッサ・システムの構成の具体例を示すブロック図である。このマルチプロセッサ・システムは、たとえば1つの半導体装置によって実現され、8つのCPU0〜7(10−0〜10−7)と、内部バス制御部11と、L2キャッシュ(2次キャッシュ)12と、DDR(Double Data Rate)2 I/F(Interface)13と、DMAC(Dynamic Memory Access Controller)14と、内蔵SRAM(Static Random Access Memory)15と、外部バス制御部16と、周辺回路17と、汎用入出力ポート18とを含む。
【0028】
また、CPU0〜7(10−0〜10−7)のそれぞれは、CPU21と、MMU(Memory Management Unit)22と、Iキャッシュ(命令キャッシュ)23と、ローカルメモリ24と、Dキャッシュ(データキャッシュ)25とを含む。
【0029】
CPU21は、MMU22およびプロセッサバス26を介してIキャッシュ23、ローカルメモリ24およびDキャッシュ25に接続されており、これらのキャッシュおよびメモリに高速にアクセスすることが可能である。
【0030】
プロセッサバス26は、命令とデータとが分離されたハーバード構成を有しており、命令がIキャッシュ23に格納され、データがDキャッシュ25に格納される。ローカルメモリ24は、共有メモリ4などのCPU外部のメモリには格納されないローカルなデータを保持する。
【0031】
CPU0〜7(10−0〜10−7)は、内部バス19を介して内部バス制御部11に接続される。内部バス制御部11は、CPU0〜7(10−0〜10−7)においてキャッシュ・ミスが発生した場合や、CPU0〜7(10−0〜10−7)が周辺回路17などのIO(Input Output)にアクセスする場合に、そのアクセス要求を受けて実行すると共に、内部バス19におけるアクセスの調停などを行なう。
【0032】
また、内部バス制御部11は、CPU0〜7(10−0〜10−7)に対するスヌープ制御を行なっており、CPU0〜7(10−0〜10−7)のDキャッシュ25におけるキャッシュのコヒーレンシが保たれる。
【0033】
L2キャッシュ12は、内部バス制御部11を介してCPU0〜7(10−0〜10−7)からのアクセス要求を受け、DDR2 I/F13に接続されるDDR SDRAM(Synchronous Dynamic Random Access Memory)、内蔵SRAM15、外部バス制御部16に接続される外部バス上の各種ROM(Read Only Memory)デバイス(フラッシュROM、EEPROMなど)やRAMデバイス(SDRAM、SRAMなど)、PCカード上のメモリ・デバイスなどにアクセスする。そして、CPU0〜7(10−0〜10−7)によってアクセスされたデータのコピーを保持する。
【0034】
なお、図1に示す共有メモリ4は、これらの内蔵RAM15や半導体装置の外部端子に接続されたメモリに対応している。これらのメモリを総称して、共有メモリ4とも呼ぶことにする。
【0035】
DMAC14は、CPU0〜7(10−0〜10−7)からのDMA転送要求に応じて、共有メモリ4などのメモリ−メモリ間のDMA転送や、周辺回路17などのIO−メモリ間のDMA転送を制御する。
【0036】
外部バス制御部16は、外部バスを介して半導体チップ外部のデバイスと接続されており、CS(Chip Select)コントローラ、SDRAMコントローラ、PCカードコントローラなどの機能を有している。
【0037】
周辺回路17は、ICU(Interrupt Control Unit)、CLKC(Clock Controller)、タイマ、UART(Universal Asynchronous Receiver Transmitter)、CSIO、GPIO(General Purpose Input Output)などの機能を有している。また、汎用入出力ポート18は、半導体チップ外部のIOポートに接続される。
【0038】
図3は、CPU0〜7(10−0〜10−7)によって実行される一般的なスピンロック処理の擬似コードの一例を示す図である。原理的には、単純にロック変数をアトミックにチェックしてロックが獲得できるまでの間、スピン待ちのループを実行すればよい。しかしながら、共有データに毎回アトミックにアクセスすることはバスのトラフィックを増やし、実行時のペナルティが大きくなる。したがって、通常は図3に示すようにL1およびL2のようにループを二重化する。
【0039】
図3において、ロック変数(lockvar)が“1”のときにアンロック状態であり、“0”よりも小さいときにロック状態であることを示している。外側のループであるL1においては、ロック変数をアトミックに読み出してデクリメントし、その値が“0”のとき、すなわちロックが取れたときは、スピン待ちループから抜ける。
【0040】
ロックが取れなかった場合、L2に示す内側のスピン待ちループでロック変数を読み出して、ロックが取れそうかを確認する。ロック変数が“1”になると、再度L1に示す外側のループでアトミックにロックの獲得を試みる。
【0041】
ここで、MESIプロトコルのようなキャッシュ・コヒーレンシ・プロトコルにおいては、L2に示す内側のスピン待ちループにおけるロック変数の読み出し処理が常にキャッシュメモリにリード・ヒットし続けるため、複数のCPUがスピンロックでスピン待ちしている状況においても共有バス5上には無用のアクセスが発生せず、システム性能に及ぼす影響を最小限にすることができる。
【0042】
図4は、スピンロック処理のコードの他の一例を示す図である。レジスタr2には、ロック変数が格納される共有メモリ4上のアドレスが格納されている。外側のループであるL1において、まずpsw(processor status word)の値をレジスタr1に転送しておき、割り込みを禁止する。
【0043】
次に、LOCK命令によってアトミックにロック変数をロードしてレジスタr0に格納する。そして、r0の値に“−1”を加算し、UNLOCK命令によってr0の値をロック変数にセーブする。なお、LOCK命令を実行してからUNLOCK命令を実行するまでの間、クリティカル・セクションを排他的にアクセスすることが可能となっている。
【0044】
次に、r1の値をpswに戻し、r0の値が“0”であればロックが取れたとしてspin_lock_endに分岐する。ロックが取れなかった場合には、L2に示す内側のスピン待ちループでロック変数を読み出して、ロックが取れそうかを確認する。
【0045】
L2において、まず通常のロード命令によってロック変数の値をr0にロードする。そして、r0の値が“0”よりも大きければロックが取れそうであるとしてspin_lockに分岐し、再度L1に示す外側のループでアトミックにロックの獲得を試みる。そうでなければ、spin_wait_loopに分岐して内側のL2をループする。なお、図3を用いて説明したのと同様に、L2に示す内側のスピン待ちループにおけるロック変数の読み出し処理が常にキャッシュメモリにリード・ヒットし続けることになる。
【0046】
図5は、図4に示す通常ロード命令(LD命令)によるロック変数のロード処理シーケンスを示す図である。CPU21がLD命令を実行するときに、メモリ・リード・リクエスト(req)信号をキャッシュ25に送信する。キャッシュ25は、CPU21からリクエストを受け付けると、リクエストを受け付けたことを通知するためにアクノリッジ(ack)信号をCPU21に返信する。なお、ロック変数のコピーが格納されるのが主にDキャッシュ25であることから、Dキャッシュ25を単にキャッシュまたはキャッシュメモリと表記することにする。
【0047】
ここで、ロック変数がキャッシュ25に格納されておりキャッシュ・ヒットするため、キャッシュ25は、共有メモリ4にはアクセスせずに、CPU21に対してエンド(end)信号と共にロードデータ(ロック変数)を送信し、トランザクションを完了する。CPU21は、エンド信号がアサートされるのを確認してロードデータを受け取り、プログラムの以降の処理を継続する。
【0048】
MESIプロトコルにおいては、M(Modified:変更)、E(Exclusive:排他)、S(Shared:要求)、I(Invalid:無効)という4つの状態でキャッシュラインの状態を表現し、キャッシュ・コヒーレンシの保持を行なう。図4を用いて説明したように、ロックが確保できるまでの間、CPUはスピン待ちループを実行し続けている状態にある。
【0049】
このとき、キャッシュラインの状態はEまたはSという、有効なコピーが登録された状態であるため、CPU21によるロック変数の読み出しがキャッシュ25にリード・ヒットし続けた状態でスピンすることになる。そのため、スピン待ちの間はCPU21とキャッシュ25とが極めて高速に動作し、大きな電力を消費しながら他のCPUによるロックの解放を待っている状態となっている。
【0050】
本発明の実施の形態におけるデータ処理装置は、スピンロックのためのスピン待ちループ実行時の消費電力を削減し、効率のよいスピンロックを実現するための機構を設けたものである。以下、各実施の形態について詳細に説明する。
【0051】
(第1の実施の形態)
図6は、本発明の第1の実施の形態におけるデータ処理装置のCPU21とキャッシュメモリ25との接続例を示す図である。CPU21とキャッシュメモリ25とは、リクエスト(req)信号、アクノリッジ(ack)信号、エンド(end)信号といったハンドシェーク信号によって接続されており、CPU21がハンドシェーク制御を行なうことによって確実にメモリアクセス処理を行なえるように構成されている。
【0052】
また、CPU21は、後述のウェイト付きロード命令(LDS命令)またはスピン待ち命令(SPIN命令)を実行するときにスピン待ち要求信号をキャッシュメモリ25に対して出力する。また、キャッシュメモリ25には割り込み要求信号が接続されている。これらの詳細については後述する。
【0053】
図7は、本発明の第1の実施の形態におけるデータ処理装置内のCPU21の構成例を示すブロック図である。このCPU21は、命令フェッチ部31と、命令デコード部32と、制御部33と、アドレス生成部34と、PC(Program Counter)部35と、汎用レジスタファイル36と、制御レジスタファイル37と、演算部38と、ロード・ストア部39と、データセレクタ40とを含み、それぞれがプロセッサバス26、Sバス41およびDバス42に接続される。なお、各部はこれらのバスを介してデータ、アドレス、制御信号などをやり取りすることができる。
【0054】
命令フェッチ部31は、PC部35のプログラムカウンタ値に応じて、Iキャッシュ23を介して共有メモリ4などに格納される命令コードをフェッチして、命令コードを命令デコード部32に出力する。
【0055】
命令デコード部32は、命令フェッチ部31から受けた命令コードをデコードし、デコード結果を制御部33に出力する。また、命令デコード部32が、命令コードが後述のウェイト付きロード命令(LDS命令)またはスピン待ち命令(SPIN命令)をデコードすると、制御部33はスピン待ち要求信号をキャッシュメモリ25に出力する。
【0056】
制御部33は、命令デコード部32から受けたデコード結果に応じて、CPU21の各部を制御することによりCPU21の動作を制御し管理する。なお、図7においては、制御部33から各部に出力される制御信号を省略している。
【0057】
アドレス生成部34は、命令デコード部32によって分岐命令がデコードされたときに、分岐先アドレスをアドレッシングモードに応じて計算する。分岐条件が成立した場合には、計算された分岐先アドレスがPC部35に設定される。
【0058】
演算部38は、制御部33による制御によって、汎用レジスタファイル36に格納されるデータ、共有メモリ4から読み出されたデータなどに対して演算処理を行なう。演算結果は、汎用レジスタファイル36、共有メモリ4、キャッシュメモリ25などに書き込まれる。
【0059】
ロード・ストア部39は、演算部38による演算結果などを共有メモリ4やキャッシュメモリ25にストアし、共有メモリ4やキャッシュメモリ25からデータをロードする。このとき、ロード・ストア部39は、オペランドアクセスアドレスを生成して、データセレクタ40を介してキャッシュメモリ25に出力する。
【0060】
データセレクタ40は、ロード・ストア部39から出力されるオペランドアクセスアドレスおよび書き込みデータをプロセッサバス26に出力し、プロセッサバス26を介して受けた読み出しデータをロード・ストア部39に出力する。
【0061】
図8は、本発明の第1の実施の形態におけるデータ処理装置内のキャッシュメモリ25の構成例を示すブロック図である。このキャッシュメモリ25は、バス・スヌープ機構を備えたスヌープ・キャッシュであり、キャッシュメモリ25の全体的な制御を行なう制御部50と、タグ51と、データメモリ52と、比較器53および54と、セレクタ55および56と、スピン待ち状態を制御するためのスピン待ち状態フラグSWF(Spin-Wait flag)57と、カウンタ58と、待ちサイクル数を設定するためのリロードレジスタ59とを含む。
【0062】
制御部50は、上述のハンドシェーク制御およびバス・スヌープ制御を行なう以外に、SWF57、カウンタ58およびリロードレジスタ59を制御しながらスピン待ち制御を行なう。
【0063】
タグ51は、データメモリ52においてデータが格納されるキャッシュラインに対応する上位アドレスを保持する。また、データメモリ52は、共有メモリ4からロードしたデータのコピーを保持する。
【0064】
タグ51は、プロセッサバスのアドレス60と、内部バスのアドレス62とに接続されている。また、データメモリ52は、セレクタ55および56を介して、プロセッサバスのアドレス60およびデータ61と、内部バスのアドレス62およびデータ63とに接続されている。このような構成にすることにより、自CPU21からのキャッシュアクセスにおいてデータが参照される以外に、他のCPU21からのスヌープ・アクセスのために内部バス側からのアクセスも可能となっている。
【0065】
比較器53は、プロセッサバスのアドレス60の上位アドレスとタグ51に格納されるアドレスとを比較することによって、自CPU21からのアクセスに対するキャッシュ・ヒット/ミスを判定する。また、比較器54は、内部バスのアドレス62の上位アドレスとタグ51に格納されるアドレスとを比較することによって、他のCPU21からのスヌープ・アクセスに対するキャッシュ・ヒット/ミスを判定する。
【0066】
データメモリ52は、キャッシュヒットしたときに、プロセッサバスのアドレス60または内部バスのアドレス62の下位アドレスに応じて、プロセッサバスのデータ61または内部バスのデータ63のデータ書き込みや、データ読み出しを行なう。
【0067】
図9は、本発明の第1の実施の形態におけるキャッシュメモリ25の状態遷移を説明するための図である。キャッシュメモリ25の制御部50は、通常動作状態においてCPU21からのスピン待ち要求を受け付けると、スピン待ちフラグSWF57を“1”にセットし、スピン待ち状態に遷移する。そして、CPU21からのスピン待ち要求が解除されると、制御部50は、SWF57を“0”にリセットして通常動作状態に戻る。
【0068】
本実施の形態においては、スピンロックにおけるスピン待ち処理において、CPU21からのメモリ読み出し要求に対し、キャッシュメモリ25の制御部50からの応答を止めることでCPU21のパイプライン実行をストールさせ、スピン待ち時のCPU21およびキャッシュメモリ25の動作を一時停止させる。
【0069】
CPU21がスピン待ち用の命令を実行することにより、キャッシュメモリ25はスピン待ち状態に遷移する。ここで、CPU21がロック変数を読み出すためのロード処理を行なうと、キャッシュメモリ25はスピン待ち状態となっているので、CPU21からキャッシュメモリ25への読み出しリクエストに対してアクノリッジ応答を返さない。これによって、CPU21とキャッシュメモリ25とのパイプラインがストールし、CPU21とキャッシュメモリ25との動作が一時的に停止する。
【0070】
ただし、スピン待ち中であっても、CPU21は割り込み処理は受け付ける。これは、システムによっては、CPU21が固有の周辺IOを有するため、割り込みの種類によっては特定のCPU21しか処理できないものがあること、割り込み処理の速度を速くするためには割り込み要求を受けたCPU自身が割り込み処理をすることが望ましいこと、などの理由による。
【0071】
図6および図8に示すように、キャッシュメモリ25には割り込み要求信号が接続されており、割り込み要求を受けてスピン待ち状態を解除することによってCPU21は動作を再開でき、割り込みを受け付けることが可能となる。
【0072】
なお、キャッシュメモリ25のスピン待ち状態の解除条件として、(1)他のCPU21から当該キャッシュメモリ25へのスヌープ・ライト・ヒット、(2)割り込み要求、(3)一定時間の経過(タイムアウト)の3つがある。それぞれの詳細については、図11〜図13を用いて後述する。
【0073】
図10は、本発明の第1の実施の形態におけるCPU21によって実行されるスピンロック処理コードの一例を示す図である。図4に示すスピンロック処理コードと比較すると、通常ロード命令(LD命令)がウェイト付きロード命令(LDS命令)に置換されている点のみが異なる。
【0074】
図10においては、上述のスピン待ち用の命令として、LDS命令が記述されている。CPU21がこのLDS命令を実行するときに、キャッシュメモリ25に対してスピン待ち要求を出力する。このとき、キャッシュメモリ25はスピン待ち状態に遷移し、CPU21はキャッシュメモリ25からアクノリッジ応答が返ってくるまでストールして、次のbgtz命令を実行しない。
【0075】
図11は、スヌープ・アクセス受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。スヌープキャッシュによるキャッシュ・コヒーレンシが保たれている状況において、キャッシュメモリ25は、スピン待ち中にCPU21からのメモリアクセス動作が停止している場合でも、キャッシュ・コヒーレンシ保持のために、他のプロセッサ21からのキャッシュメモリ・アクセスに伴うスヌープ・アクセスを受け付け、キャッシュ状態を更新する。
【0076】
ここで、キャッシュ・コヒーレンシ・プロトコルの一例として、MOESIプロトコルクラスのうち、上述のMESIプロトコルを用いたスヌープ・キャッシュの場合について説明するが、これら4つの状態にO(Owned:所有)状態を付け加えたMOESIプロトコルを用いた場合でも同様の処理を実現可能である。
【0077】
図11において、CPU21がLDS命令を実行するときに、メモリ・リード・リクエスト(req)信号およびスピン待ち要求信号をキャッシュ25に送信する。キャッシュ25の制御部50は、CPU21からリクエストおよびスピン待ち要求を受け付けると、SWF57をセットしてスピン待ち状態に遷移する。CPU21は、パイプラインがストールしてキャッシュメモリ25からのアクノリッジ待ち状態となる。このとき、ロック変数が格納されるキャッシュラインの状態はE(排他)またはS(共有)である。
【0078】
他のCPU21がロック変数をアンロックすると、ロック変数への書き込みによるスヌープ・ライト・ヒット・アクセスが発生する。キャッシュメモリ25においては、当該キャッシュラインがスヌープによって無効化され、キャッシュラインの状態がI(無効)に変化する。そして、キャッシュメモリ25の制御部50は、このスヌープ・アクセスを受け付けると、SWF57をクリアして通常動作状態に復帰し、スピン待ちが解除される。そして、リード・リクエストを受け付けたことを通知するためにアクノリッジ(ack)信号をCPU21に返信する。
【0079】
CPU21は、キャッシュメモリ25からアクノリッジ応答を受けると、パイプラインがストールした状態から復帰する。そして、キャッシュメモリ25においては、当該キャッシュラインの状態がI(無効)になっているため、当該リード・アクセスはミスし、共有バス5を介して共有メモリ4へのリード・アクセスが行なわれる。
【0080】
キャッシュメモリ25は、共有メモリ4からロック変数をロードし、CPU21に対してエンド(end)信号と共にロードしたロック変数を送信し、トランザクションを完了する。したがって、スヌープ・アクセスによってスピン待ち状態から復帰した場合は、必ずアンロック処理によって共有メモリ4に書き込まれた最新のデータが読み出されることになり、CPU21は正しくロックスピン処理を実行することができる。
【0081】
図12は、割り込み要求受け付け時のウェイト付きロード命令の処理シーケンスを説明するための図である。CPU21がLDS命令を実行するときに、スピン待ち要求信号およびメモリ・リード・リクエスト(req)信号をキャッシュメモリ25に送信する。キャッシュメモリ25の制御部50は、CPU21からスピン待ち要求を受け付けると、SWF57をセットしてスピン待ち状態に遷移する。CPU21は、パイプラインがストールしてキャッシュメモリ25からのアクノリッジ待ち状態となる。このとき、ロック変数が格納されるキャッシュラインの状態はE(排他)またはS(共有)である。
【0082】
その後、キャッシュメモリ25の制御部50が割り込み要求を受けると、SWF57をクリアして通常動作状態に復帰し、スピン待ちが解除される。そして、リード・リクエストを受け付けたことを通知するためにアクノリッジ(ack)信号をCPU21に返信する。
【0083】
CPU21は、キャッシュメモリ25からアクノリッジ応答を受けると、パイプラインがストールした状態から復帰する。そして、キャッシュメモリ25の制御部50は、当該キャッシュラインの状態がE(排他)またはS(共有)のままであるため、当該リード・アクセスはキャッシュ・ヒットし、共有メモリ4にはアクセスせずに、CPU21に対してエンド(end)信号と共にロードデータ(ロック変数)を送信し、トランザクションを完了する。
【0084】
プロセッサ21がスピン待ち状態から復帰すると割り込み要求が受け付けられ、CPU21は割り込み処理を実行する。そして、CPU21は、割り込みハンドラからリターンすると、ウェイト付きロード命令の次の命令からプログラムの処理を継続するが、ロックを獲得することができないためスピン待ちループの命令実行を繰り返す。スピン待ちループにおいて、CPU21は再びウェイト付きロード命令を実行し、キャッシュメモリ25はスピン待ち状態になる。
【0085】
図13は、所定時間経過時のウェイト付きロード命令の処理シーケンスを説明するための図である。CPU21がLDS命令を実行するときに、スピン待ち要求信号およびメモリ・リード・リクエスト(req)信号をキャッシュメモリ25に送信する。キャッシュメモリ25の制御部50は、CPU21からスピン待ち要求を受け付けると、SWF57をセットしてスピン待ち状態に遷移すると共に、カウンタ58のダウンカウントを開始させる。CPU21は、パイプラインがストールしてキャッシュメモリ25からのアクノリッジ待ち状態となる。このとき、ロック変数が格納されるキャッシュラインの状態はE(排他)またはS(共有)である。
【0086】
その後、キャッシュメモリ25の制御部50がカウンタ58のタイムアウトを検出すると、SWF57をクリアして通常動作状態に復帰し、スピン待ちが解除される。そして、リード・リクエストを受け付けたことを通知するためにアクノリッジ(ack)信号をCPU21に返信する。
【0087】
CPU21は、キャッシュメモリ25からアクノリッジ応答を受けると、パイプラインがストールした状態から復帰する。そして、キャッシュメモリ25の制御部50は、当該キャッシュラインの状態がE(排他)またはS(共有)のままであれば、当該リード・アクセスはキャッシュ・ヒットし、共有メモリ4にはアクセスせずに、CPU21に対してエンド(end)信号と共にロードデータ(ロック変数)を送信し、トランザクションを完了する。
【0088】
プロセッサ21がスピン待ち状態から復帰すると、ウェイト付きロード命令の次の命令からプログラムの処理を継続するが、ロックを獲得することができない場合にはスピン待ちループの命令実行を繰り返す。スピン待ちループにおいて、CPU21は再びウェイト付きロード命令を実行し、キャッシュメモリ25はスピン待ち状態になる。この処理がスピン待ちループの実行が継続している間繰り返される。
【0089】
ここで、制御部50は、カウンタ58のみを用いて待ち時間を固定してタイムアウトを検出するとしたが、リロードレジスタ59に任意の値を設定し、スピン待ち開始時にリロードレジスタ59の値をカウンタ58にリロードしてダウンカウントを開始させるようにしてもよい。これによって、待ち時間を可変とすることができる。
【0090】
図14は、CPU21によるウェイト付きロード命令の処理フローを説明するための図である。まず、CPU21がウェイト付きロード命令(LDS)命令をデコードすると、制御部33は、キャッシュメモリ25に対してスピン待ち要求信号をアサートする(S11)。
【0091】
次に、CPU21は、ウェイト付きロード処理を行なって(S12)、ウェイト付きロード命令の処理を終了する。上述のように、ウェイト付きロード処理において、CPU21の制御部33はキャッシュメモリに対してリード・リクエスト信号を送信し、キャッシュメモリ25からアクノリッジ信号が返信されるまでスピン待ちを行なう。そして、アクノリッジ信号が返信された後、キャッシュメモリ25からエンド信号と共に送られてくるロードデータを受信する。
【0092】
図15は、キャッシュメモリ25によるロード処理の実行フローを説明するための図である。まず、キャッシュメモリ25の制御部50がリクエスト信号を受けると(S21,Yes)、ロード命令がウェイト付きロード命令か否かをスピン待ち要求信号(SWF57)に応じて判断する(S22)。
【0093】
ロード命令が通常のロード命令(LD命令)であれば(S22,No)、ステップS24に処理が進む。また、ロード命令がウェイト付きロード命令であれば(S22,Yes)、制御部50は、スピン待ち処理を行ない(S23)、ステップS24に進む。このスピン待ち処理については、図16を用いて後述する。
【0094】
ステップS24において、制御部50は、CPU21に対してアクノリッジ応答をアサートし、通常のロード処理を行なう(S25)。すなわち、キャッシュ・ヒットの場合には、データメモリ52に格納されるデータをロードする。また、キャッシュ・ミスの場合には、共有メモリ4からデータをロードし、データのコピーをデータメモリ52に格納する。
【0095】
最後に、制御部50は、CPU21に対してエンド信号をアサートし、ロードデータを転送して(S26)、ロード処理を終了する。
【0096】
図16は、図15に示すスピン待ち処理(S23)の実行フローを説明するための図である。まず、制御部50は、SWF57に“1”をセットし(S31)、カウンタ58の初期化を行なう(S32)。リロードレジスタ59に待ち時間が設定されている場合には、その値をカウンタ58にリロードする。
【0097】
次に、制御部50は、割り込み要求があるか否かを判定する(S33)。割り込み要求があれば(S33,Yes)、ステップS36に処理が進む。また、割り込み要求がなければ(S33,No)、制御部50は、スヌープ・ライト・ヒットが発生したか否かを判定する(S34)。スヌープ・ライト・ヒットが発生した場合には(S34,Yes)、ステップS36に処理が進む。
【0098】
また、スヌープ・ライト・ヒットが発生していない場合には(S34,No)、制御部50は、カウンタ58によるタイムアウトが発生したか否かを判定する(S35)。タイムアウトが発生している場合には(S35,Yes)、ステップS36に処理が進む。また、タイムアウトが発生していない場合には(S35,No)、カウンタ58によるダウンカウントが行なわれ(S37)、ステップS33以降の処理が繰り返される。
【0099】
ステップS36において、制御部50は、SWF57を“0”にクリアして、図15に示すステップS24の処理に進む。
【0100】
以上説明したように、本実施の形態におけるデータ処理装置によれば、スピン待ちループにおけるロック変数の読み出し処理において、キャッシュメモリ25からのアクノリッジ応答を待たせることによりCPU21のパイプラインをストールさせ、CPU21の動作を停止させるようにしたので、CPU21のスピン待ち状態における無駄な動作による電力の消費を削減することが可能となる。
【0101】
また、キャッシュメモリ25においても、スピン待ち時におけるタグ51やデータメモリ52へのアクセスを停止させることができため、キャッシュ・ヒットし続けて高速動作することにより発生する無駄な電力を消費するといったことを防止することが可能となる。したがって、スピン待ち時におけるデータ処理装置全体の消費電力を大きく削減することが可能となる。
【0102】
また、CPU21はスピン待ち要求およびリード・リクエストをキャッシュメモリ25に送信した後、キャッシュメモリ25からアクノリッジ応答が返信されるまでスピン待ちを行なうので、スピン待ちの開始から終了までの監視をプログラム処理によって行なう必要がなくなり、プログラム処理を簡略化することが可能となる。
【0103】
また、CPU21はスピン待ち命令を実行したことをキャッシュメモリ25に通知するだけであり、キャッシュメモリ25が能動的にスピン待ち処理を行なうため、CPU21の回路構成を簡略化することが可能となる。
【0104】
また、キャッシュメモリ25は、スピン解除待ちのチェックをスヌープ・ライト・アクセスがヒットしたか否かによって行なうため、キャッシュメモリ25の回路構成も簡略化することが可能となる。
【0105】
また、キャッシュメモリ25は、割り込み要求があった場合にはスピン待ち状態を解除してCPU25を復帰させるようにしたので、CPU21は直ちに割り込み処理を行なうことができ、割り込み応答性能が損なわれることを防止することが可能となる。
【0106】
また、スピン待ちループ中のウェイト付きロード命令の実行終了からの復帰を、割り込みまたは他のCPU21からのスヌープ・アクセスを契機としてダイナミックに行なうようにしたので、必要以上の待ち時間を設定する必要がなくなる。したがって、従来のように固定の待ち時間を設定する必要がなくなり、スピンロック応答を高速に行なうことが可能となる。
【0107】
さらには、スピン待ち専用の命令を設けることにより、スピン待ちのための通常命令を別途スピン待ちループ中に挿入する必要がなくなり、スピンロック処理のコードサイズを削減することが可能となる。通常、スピンロック処理は高速実行が求められることから、インライン関数やマクロ命令として実現されることが多く、またスピンロック処理はOSカーネル中の様々な箇所で使用されてコードが展開されるため、コードサイズが削減されることに大きなメリットがある。また、コードサイズが小さくなれば、I(命令)キャッシュ23に格納される命令コードの数も多くなるため、さらに処理速度を高速化することが可能となる。
【0108】
(第2の実施の形態)
第1の実施の形態におけるデータ処理装置においては、CPU21がウェイト付きロード命令を実行するときにスピン待ち要求をキャッシュメモリ25に送信し、キャッシュメモリ25をスピン待ち状態とするものであった。本発明の第2の実施の形態におけるデータ処理装置は、第1の実施の形態におけるデータ処理装置と比較して、CPU21にスピン待ち命令(SPIN命令)を設け、ロード結果が指定の値となるまでCPU21が待ち続ける点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【0109】
図17は、本発明の第2の実施の形態におけるCPU21によって実行されるスピンロック処理コードの一例を示す図である。図10に示すスピンロック処理コードと比較すると、ウェイト付きロード命令(LDS命令)と続くbgtz命令とが、スピン待ち命令(SPIN命令)に置換されている点のみが異なる。
【0110】
CPU21はスピン待ち命令を実行すると、CPU21とキャッシュメモリ25とが直ちにスピン待ち状態となり、キャッシュメモリ25によって待ち状態が解除されるまで処理を停止し、スピン待ちが解除された後ロード処理を行なう点については第1の実施の形態で説明したLDS命令と同様である。
【0111】
LDS命令と異なるのは、スピン待ち状態が解除されてロード処理が実行された後、CPU21はロード結果がSPIN命令によって指定される終了条件を満足しない場合には、再度スピン待ち状態になって解除されるのを待ち続ける点である。SPIN命令の終了条件は、ロードデータが指定したオペランドと一致するか、ロードデータが固定値と一致することである。
【0112】
図17の内側のループL2に記述されたSPIN命令は、ロードしたロック変数の値がオペランドで指定した即値“0”となるまでスピン待ちを続ける。ロック変数の値が“0”になると、spin_lockに分岐してL1に示す外側のループでアトミックにロックの獲得を試みる。
【0113】
図18は、CPU21によるスピン待ち命令の処理フローを説明するための図である。まず、CPU21がスピン待ち命令(SPIN)命令を実行すると、制御部33はキャッシュメモリ25に対してスピン待ち要求信号をアサートする(S41)。
【0114】
次に、CPU21は、ウェイト付きロード処理を行なう(S42)。上述のように、ウェイト付きロード処理において、CPU21の制御部33はキャッシュメモリに対してリード・リクエスト信号を送信し、キャッシュメモリ25からアクノリッジ信号が返信されるまでスピン待ちを行なう。そして、アクノリッジ信号が返信された後、制御部33はキャッシュメモリ25からエンド信号と共に送られてくるロードデータを受信する。
【0115】
次に、CPU21の制御部33は、ロードデータの値が指定値と一致するか否かによってスピン待ちの終了を判定する(S43)。ロードデータの値が指定値と一致しない場合には(S43,No)、ステップS41に戻って以降の処理を繰り返す。また、ロードデータの値が指定値と一致する場合には(S43,Yes)、スピン待ち処理を終了する。
【0116】
なお、CPU21がSPIN命令を実行中に割り込み要求を受けた場合、CPU21はSPIN命令の実行を中断し、ウェイト付きロード処理の完了時に割り込み処理を受け付ける。そして、CPU21は、割り込み処理終了後、SPIN命令の実行を継続する。
【0117】
以上説明したように、本実施の形態におけるデータ処理装置によれば、スピン待ち命令実行時にロードデータの値が所定値と一致するまでスピン待ちを行なうようにしたので、第1の実施の形態において説明した効果に加えて、スピンロック処理のコードサイズをさらに削減することが可能となる。
【0118】
(第3の実施の形態)
本発明の第3の実施の形態におけるデータ処理装置は、第1および第2の実施の形態におけるデータ処理装置と比較して、スピン待ち状態への移行およびスピン待ち状態からの復帰に連動して、CPU21およびキャッシュメモリ25へのクロック供給のモードを変更する点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【0119】
図19は、本発明の第3の実施の形態におけるデータ処理装置の構成例を示すブロック図である。このデータ処理装置は、図6に示す第1の実施の形態におけるデータ処理装置にさらにクロックモジュール(CLKC)27を追加したものである。
【0120】
キャッシュメモリ25は、CPUクロック・ドメインで動作する部分と、キャッシュ・クロック・ドメインで動作する部分とに分けられている。また、キャッシュメモリ25は、スピン待ち状態に遷移するときに、スピン待ち状態であることをクロックモジュール27に通知してクロック制御を行なわせる。
【0121】
クロックモジュール27は、キャッシュメモリ25が通常動作状態の時にはCPU21およびキャッシュメモリ25に対してCPUクロックを供給すると共に、キャッシュメモリ25にキャッシュクロックを供給する。
【0122】
クロックモジュール27は、キャッシュメモリ25がスピン待ち状態の時にはCPU21およびキャッシュメモリ25のCPUクロック・ドメインで動作する部分に対するCPUクロックの供給を停止する。このとき、キャッシュメモリ25のキャッシュ・クロック・ドメインで動作する部分に対してはキャッシュクロックが供給される。これによって、キャッシュメモリ25がスピン待ち状態であっても、スピン待ち制御を行なっている部分のみは動作を続けることができる。
【0123】
以上説明したように、本実施の形態におけるデータ処理装置によれば、キャッシュメモリ25がスピン待ち状態の時に、CPU21およびキャッシュメモリ25のCPUクロック・ドメインで動作する部分に対するCPUクロックの供給を停止するようにしたので、第1および第2の実施の形態において説明した効果に加えて、消費電力をさらに削減することが可能となる。
【0124】
また、スピン待ち状態によって低消費電力モードに切り替えるようにしたので、CPU21はプログラム処理によってクロック制御を行なう必要がなくなる。したがって、機種依存の実装になりがちなプログラムによる低消費電力機能に依存する必要がなくなる。
【0125】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0126】
1−0〜1−n,10−0〜10−n,21 CPU、2−0〜2−n キャッシュメモリ、3 バスコントローラ、4 共有メモリ、5 共有バス、11 内部バス制御部、12 L2キャッシュ、13 DDR2 I/F、14 DMAC、15 内蔵SRAM、16 外部バス制御部、17 周辺回路、18 汎用入出力ポート、19,20 内部バス、22 MMU、23 Iキャッシュ、24 ローカルメモリ、25 Dキャッシュ、26 プロセッサバス、27 クロックモジュール、31 命令フェッチ部、32 命令デコード部、33 制御部、34 アドレス生成部、35 PC部、36 汎用レジスタファイル、37 制御レジスタファイル、38 演算部、39 ロード・ストア部、40 データセレクタ、50 制御部、51 タグ、52 データメモリ、53,54 比較器、55,56 セレクタ、57 SWF、58 カウンタ、59 リロードレジスタ。
【特許請求の範囲】
【請求項1】
複数のプロセッサのそれぞれがキャッシュメモリを介して共有メモリに接続され、キャッシュ・コヒーレンシが保たれているデータ処理装置であって、
前記複数のプロセッサのそれぞれは、スピンロック処理を行なう際に所定命令を実行すると、対応するキャッシュメモリにスピン待ち要求を出力する命令実行手段を含み、
前記キャッシュメモリは、対応するプロセッサから前記スピン待ち要求を受けると、所定の条件を満たすまで前記対応するプロセッサからのリード・リクエストに対するアクノリッジ応答の出力を一時停止する制御手段を含む、データ処理装置。
【請求項2】
前記キャッシュメモリはさらに、スピン待ち状態を制御するためのフラグを含み、
前記制御手段は、前記対応するプロセッサから前記スピン待ち要求を受けると前記フラグをセットしてスピン待ち状態に遷移し、前記所定の条件を満たしたときに前記フラグをクリアして通常動作状態に遷移する、請求項1記載のデータ処理装置。
【請求項3】
前記制御手段は、割り込み要求を受けたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項1または2記載のデータ処理装置。
【請求項4】
前記制御手段は、前記アクノリッジ応答の出力を停止している状態であっても、前記対応するプロセッサ以外のプロセッサからスヌープ・アクセスを受けたときは、キャッシュ・コヒーレンシを保持するために前記スヌープ・アクセスを受け付けて当該キャッシュラインのキャッシュ状態を更新する、請求項1または2記載のデータ処理装置。
【請求項5】
前記制御手段は、前記対応するプロセッサ以外のプロセッサからスヌープ・アクセスを受けたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項1または2記載のデータ処理装置。
【請求項6】
前記キャッシュメモリはさらに、前記アクノリッジ応答の出力を停止させるサイクル数をカウントするカウンタを含み、
前記制御手段は、前記対応するプロセッサからリード・リクエストを受けたときに前記カウンタにカウントを開始させ、前記カウンタがタイムアウトしたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項1または2記載のデータ処理装置。
【請求項7】
前記キャッシュメモリはさらに、前記カウンタに設定するリロード値が設定されるレジスタを含み、
前記制御手段は、前記対応するプロセッサからリード・リクエストを受けたときに前記カウンタに前記レジスタのリロード値をリロードさせてカウントを開始させ、前記カウンタがタイムアウトしたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項6記載のデータ処理装置。
【請求項8】
前記命令実行手段は、ウェイト付きロード命令を実行するときに前記対応するキャッシュメモリに前記スピン待ち要求を出力し、
前記制御手段は、前記対応するプロセッサから前記スピン待ち要求を受けるとスピン待ち状態に遷移し、前記所定の条件を満たしたときに通常動作状態に遷移した後、データのロード処理を実行してロードデータを前記対応するプロセッサに出力する、請求項1または2記載のデータ処理装置。
【請求項9】
前記命令実行手段は、スピン待ち命令を実行するときに前記対応するキャッシュメモリに前記スピン待ち要求を出力し、
前記制御手段は、前記対応するプロセッサから前記スピン待ち要求を受けるとスピン待ち状態に遷移し、前記所定の条件を満たしたときに通常動作状態に遷移した後、データのロード処理を実行してロードデータを前記対応するプロセッサに出力し、
前記命令実行手段は、前記対応するキャッシュメモリから受けたロードデータが前記スピン待ち命令によって指定された終了条件を満たしていない場合には、前記対応するキャッシュメモリに対して再度スピン待ち要求を出力して、前記対応するキャッシュメモリをスピン待ち状態に遷移させる、請求項1または2記載のデータ処理装置。
【請求項10】
前記データ処理装置はさらに、クロック供給を制御するクロック制御手段を含み、
前記制御手段は、前記対応するプロセッサからスピン待ち要求を受けると、前記クロック制御手段に対して前記対応するプロセッサおよび前記対応するキャッシュメモリの一部の回路に供給するクロックを停止するよう指示する、請求項1または2記載のデータ処理装置。
【請求項1】
複数のプロセッサのそれぞれがキャッシュメモリを介して共有メモリに接続され、キャッシュ・コヒーレンシが保たれているデータ処理装置であって、
前記複数のプロセッサのそれぞれは、スピンロック処理を行なう際に所定命令を実行すると、対応するキャッシュメモリにスピン待ち要求を出力する命令実行手段を含み、
前記キャッシュメモリは、対応するプロセッサから前記スピン待ち要求を受けると、所定の条件を満たすまで前記対応するプロセッサからのリード・リクエストに対するアクノリッジ応答の出力を一時停止する制御手段を含む、データ処理装置。
【請求項2】
前記キャッシュメモリはさらに、スピン待ち状態を制御するためのフラグを含み、
前記制御手段は、前記対応するプロセッサから前記スピン待ち要求を受けると前記フラグをセットしてスピン待ち状態に遷移し、前記所定の条件を満たしたときに前記フラグをクリアして通常動作状態に遷移する、請求項1記載のデータ処理装置。
【請求項3】
前記制御手段は、割り込み要求を受けたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項1または2記載のデータ処理装置。
【請求項4】
前記制御手段は、前記アクノリッジ応答の出力を停止している状態であっても、前記対応するプロセッサ以外のプロセッサからスヌープ・アクセスを受けたときは、キャッシュ・コヒーレンシを保持するために前記スヌープ・アクセスを受け付けて当該キャッシュラインのキャッシュ状態を更新する、請求項1または2記載のデータ処理装置。
【請求項5】
前記制御手段は、前記対応するプロセッサ以外のプロセッサからスヌープ・アクセスを受けたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項1または2記載のデータ処理装置。
【請求項6】
前記キャッシュメモリはさらに、前記アクノリッジ応答の出力を停止させるサイクル数をカウントするカウンタを含み、
前記制御手段は、前記対応するプロセッサからリード・リクエストを受けたときに前記カウンタにカウントを開始させ、前記カウンタがタイムアウトしたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項1または2記載のデータ処理装置。
【請求項7】
前記キャッシュメモリはさらに、前記カウンタに設定するリロード値が設定されるレジスタを含み、
前記制御手段は、前記対応するプロセッサからリード・リクエストを受けたときに前記カウンタに前記レジスタのリロード値をリロードさせてカウントを開始させ、前記カウンタがタイムアウトしたときに前記対応するプロセッサに対して前記アクノリッジ応答を出力する、請求項6記載のデータ処理装置。
【請求項8】
前記命令実行手段は、ウェイト付きロード命令を実行するときに前記対応するキャッシュメモリに前記スピン待ち要求を出力し、
前記制御手段は、前記対応するプロセッサから前記スピン待ち要求を受けるとスピン待ち状態に遷移し、前記所定の条件を満たしたときに通常動作状態に遷移した後、データのロード処理を実行してロードデータを前記対応するプロセッサに出力する、請求項1または2記載のデータ処理装置。
【請求項9】
前記命令実行手段は、スピン待ち命令を実行するときに前記対応するキャッシュメモリに前記スピン待ち要求を出力し、
前記制御手段は、前記対応するプロセッサから前記スピン待ち要求を受けるとスピン待ち状態に遷移し、前記所定の条件を満たしたときに通常動作状態に遷移した後、データのロード処理を実行してロードデータを前記対応するプロセッサに出力し、
前記命令実行手段は、前記対応するキャッシュメモリから受けたロードデータが前記スピン待ち命令によって指定された終了条件を満たしていない場合には、前記対応するキャッシュメモリに対して再度スピン待ち要求を出力して、前記対応するキャッシュメモリをスピン待ち状態に遷移させる、請求項1または2記載のデータ処理装置。
【請求項10】
前記データ処理装置はさらに、クロック供給を制御するクロック制御手段を含み、
前記制御手段は、前記対応するプロセッサからスピン待ち要求を受けると、前記クロック制御手段に対して前記対応するプロセッサおよび前記対応するキャッシュメモリの一部の回路に供給するクロックを停止するよう指示する、請求項1または2記載のデータ処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【公開番号】特開2011−150422(P2011−150422A)
【公開日】平成23年8月4日(2011.8.4)
【国際特許分類】
【出願番号】特願2010−9234(P2010−9234)
【出願日】平成22年1月19日(2010.1.19)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】
【公開日】平成23年8月4日(2011.8.4)
【国際特許分類】
【出願日】平成22年1月19日(2010.1.19)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】
[ Back to top ]