(57)【特許請求の範囲】
【請求項１】
第１処理装置と、
第２処理装置と、
ブレーク条件が設定されるブレーク条件レジスタを有するデバッグコントローラと、
マスク条件が設定されるスヌープマスクレジスタを有するスヌープコントローラを有し、
前記デバッグコントローラは、前記第１処理装置が実行するプログラムを監視し、前記プログラムの状態が前記ブレーク条件に合致した場合に、前記第１処理装置に前記プログラムの実行を停止させ、
前記第１処理装置から前記スヌープコントローラへのスヌープ要求が、前記マスク条件に合致した場合に、前記スヌープコントローラは前記第２処理装置からのスヌープ要求を受理しないことを特徴とする情報処理装置。
【請求項２】
請求項１記載の情報処理装置において、
前記プログラムの状態が前記ブレーク条件に合致した場合に、前記デバッグコントローラは、前記第２処理装置にプログラムの実行を停止させることを特徴とする情報処理装置。
【請求項３】
請求項１記載の情報処理装置において、
前記第１処理装置から前記スヌープコントローラへのスヌープ要求が、前記マスク条件に合致した場合に、前記デバッグコントローラは、前記第１処理装置にプログラムの実行を停止させることを特徴とする情報処理装置。
【請求項４】
請求項１記載の情報処理装置において、
前記第１処理装置から前記スヌープコントローラへのスヌープ要求が、前記マスク条件に合致した場合に、前記デバッグコントローラは、前記第２処理装置にプログラムの実行を停止させることを特徴とする情報処理装置。
【請求項５】
複数の処理装置と、
ブレーク条件が設定されるブレーク条件レジスタを有するデバッグコントローラと、
マスク条件が設定されるスヌープマスクレジスタを有するスヌープコントローラを有し、
前記デバッグコントローラは、前記処理装置が実行するプログラムを監視し、前記処理装置の一つである第１処理装置が実行するプログラムの状態が前記ブレーク条件に合致した場合に、前記第１処理装置に前記プログラムの実行を停止させ、
前記第１処理装置から前記スヌープコントローラへのスヌープ要求が、前記マスク条件に合致した場合に、前記スヌープコントローラは前記第１処理装置以外の前記処理装置からのスヌープ要求を受理しないことを特徴とする情報処理装置。
【請求項６】
請求項５記載の情報処理装置において、
前記第１処理装置が実行する前記プログラムの状態が前記ブレーク条件に合致した場合に、前記デバッグコントローラは、前記第１処理装置以外の前記処理装置にプログラムの実行を停止させることを特徴とする情報処理装置。
【請求項７】
請求項５記載の情報処理装置において、
前記第１処理装置から前記スヌープコントローラへの前記スヌープ要求が、前記マスク条件に合致した場合に、前記デバッグコントローラは、前記第１処理装置以外の前記処理装置にプログラムの実行を停止させることを特徴とする情報処理装置。
【請求項８】
請求項１乃至７の何れか１項に記載の情報処理装置において、
前記ブレーク条件として、プログラムカウンタの値、ライトデータの少なくとも１つが設定されることを特徴とする情報処理装置。
【請求項９】
請求項１乃至８の何れか１項に記載の情報処理装置において、
前記マスク条件として、前記スヌープ要求に含まれるコマンド、アドレス、ライトデータの少なくとも１つが設定されることを特徴とする情報処理装置。
【請求項１０】
デバッグコントローラにより、第１処理装置が実行するプログラムを監視させ、前記プログラムの状態が前記デバッグコントローラ内のブレーク条件レジスタに設定されるブレーク条件に合致した場合に、前記第１処理装置に前記プログラムの実行を停止させ、
前記第１処理装置からスヌープコントローラへのスヌープ要求が、前記スヌープコントローラ内のスヌープマスクレジスタに設定されるマスク条件に合致した場合に、前記スヌープコントローラに第２処理装置からのスヌープ要求を受理させないことを特徴とするデバッグ方法。
【請求項１１】
請求項１０記載のデバッグ方法において、
前記プログラムの状態が前記ブレーク条件に合致した場合に、前記デバッグコントローラにより、前記第２処理装置のプログラムの実行を停止させることを特徴とするデバッグ方法。
【請求項１２】
請求項１０記載のデバッグ方法において、
前記第１処理装置から前記スヌープコントローラへのスヌープ要求が、前記マスク条件に合致した場合に、前記デバッグコントローラにより、前記第１処理装置のプログラムの実行を停止させることを特徴とするデバッグ方法。
【請求項１３】
請求項１０記載のデバッグ方法において、
前記第１処理装置から前記スヌープコントローラへのスヌープ要求が、前記マスク条件に合致した場合に、前記デバッグコントローラにより、前記第２処理装置のプログラムの実行を停止させることを特徴とするデバッグ方法。
【請求項１４】
請求項１０乃至１３の何れか１項に記載の情報処理装置において、
前記ブレーク条件として、プログラムカウンタの値、ライトデータの少なくとも１つが設定されることを特徴とするデバッグ方法。
【請求項１５】
請求項１０乃至１４の何れか１項に記載の情報処理装置において、
前記マスク条件として、前記スヌープ要求に含まれるコマンド、アドレス、ライトデータの少なくとも１つが設定されることを特徴とするデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置におけるスヌープ処理に関する。
【背景技術】
【０００２】
近年、ＰＣや組み込み機器では、プロセッサの中にＣＰＵを複数搭載するマルチコアが主流のアーキテクチャになっている。従来、ＣＰＵの性能向上は、プロセス微細化によるスケーリングとパイプライン段数を深くして動作周波数を上げることで達成してきた。しかし、１３０−９０ｎｍプロセスからプロセス微細化によるスケーリングが鈍化するとともに、動作周波数を上げて動作させたときのリーク電力が非常に大きくなり、冷却コスト・電池寿命の制約からその適用が困難になった。この問題を解決する１つの技術がマルチコアである。マルチコアでは複数のＣＰＵの並列処理により性能を向上させるため、動作周波数を上げる必要がなく消費電力を抑えることができる。
【０００３】
マルチコアによる並列処理を効率良く行うためには、キャッシュコヒーレンシを維持する必要がある。通常、ＣＰＵは命令やデータアクセスを高速化するためにキャッシュを備えている。ＣＰＵによるキャッシュへの書き込みは局所的に実行されるため、最新のデータはメモリにはなく、キャッシュにのみ存在することが多い。ＣＰＵ間でデータは共用されることがあるが、別のＣＰＵのキャッシュに書き込まれた最新のデータを直接参照できない場合、該当ＣＰＵへ割り込みをかけて最新データをメモリへ書き戻した後に改めてキャッシュし直す必要がある。これは大きな性能低下を招く。このため、マルチコアでは他のＣＰＵのキャッシュに書き込まれた最新のデータを直接参照できること（＝キャッシュコヒーレンシの維持）が重要になる。
【０００４】
キャッシュコヒーレンシを維持するためのプロトコルとしてＭＥＳＩプロトコルやＭＯＥＳＩプロトコルが知られている。これらのプロトコルではスヌープ処理が定義されている。スヌープ処理とは、あるＣＰＵがキャッシュを更新する際に必要に応じて他のＣＰＵへ要求し、要求を受けたＣＰＵは自身のキャッシュを更新してレスポンスを返す一連の処理のことである。
【０００５】
マルチコアによる並列処理ではＣＰＵ間でデータが共有されるため、スヌープ処理が多数実行される。これはプログラムのデバッグを非常に困難にする。通常、プログラムのデバッグにはブレークポイントを設定してＣＰＵを停止させ、キャッシュ、レジスタ、メモリの値を確認してバグの原因を特定する。しかし、マルチコアでは、あるＣＰＵを停止させても別のＣＰＵ上で動作するプログラムによってこれらの値が更新されてしまう。この問題を対策する従来技術として特許文献１がある。この特許文献１ではブレークポイント例外時に例外を発生させたＣＰＵのみ停止させるか、全ＣＰＵを停止させるかを選択できる。全ＣＰＵを停止させることでキャッシュ、レジスタ、メモリの値が以降更新されることを防ぐことができる。
【０００６】
【特許文献１】特開平６−３３２７４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
あるＣＰＵで発生したブレークポイント例外に基づき他のＣＰＵを停止させる場合、数サイクルから数十サイクル程度かかるため、直ぐに停止させることはできない。このサイクル数はＣＰＵやデバッグコントローラの実装に依存するが、動作周波数が高いほど多くのサイクル数を必要とする傾向にある。この期間にスヌープ処理が多数実行された場合、プログラムにブレークポイントを設定してあるＣＰＵを停止させても、他のＣＰＵからのスヌープによりキャッシュの状態が更新されてしまう。そして、そのＣＰＵの停止後にキャッシュに誤った結果が見つかったとしても、何時の時点でバグが混入したのかの特定が難しくなる。従って、情報処理装置におけるスヌープ処理に関し、効率良くプログラムのデバッグを行うための技術を提供することが望ましい。
【０００８】
以上の点に鑑み、本発明は、設定されたＣＰＵ以外のスヌープ処理の実行を待たせることで、マルチコアにおける並列処理のプログラムを効率良くデバッグするための機能を備えた情報処理装置を提供することを課題とする。
【課題を解決するための手段】
【０００９】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記のとおりである。すなわちデータアクセスを高速化するためのキャッシュを備えた複数のＣＰＵと、前記複数のＣＰＵからアクセス可能なデータメモリと、前記各ＣＰＵのキャッシュデータの一部を複製して記憶するキャッシュを備えたスヌープコントローラと、プログラムをデバッグするためのデバッグコントローラを備え、前記複数のＣＰＵはキャッシュコヒーレンシを維持するためのスヌープ要求とスヌープ処理を実行し、前記スヌープコントローラはキャッシュコヒーレンシを維持するために前記複数のＣＰＵからのスヌープ要求を受理し、スヌープ処理が必要なＣＰＵを特定してスヌープ要求を実行するよう情報処理装置を構成する。
【発明の効果】
【００１０】
本発明の効果は、設定されたＣＰＵ以外のスヌープ処理の実行を待たせることで、マルチコアにおける並列処理のプログラムを効率良くデバッグするための機能を備えた情報処理装置を提供できることである。
【発明を実施するための最良の形態】
【００１１】
《実施の形態》
以下、本発明に係る情報処理装置の好適な実施の形態について添付図面を参照しながら説明する。特に制限されないが、実施の形態の各ブロックを構成する回路素子は、公知のＣＭＯＳ（相補型ＭＯＳトランジスタ）やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような１個の半導体基板上に形成される。
【００１２】
図１に本発明の情報処理装置に基づくマルチコアシステムの実施の形態を示す。このマルチコアシステムはＩＣチップ１上に集積され、中央処理装置１０、２０、３０、４０（ＣＰＵ）、スヌープバス５０、スヌープコントローラ６０（ＳＮＣ：  Ｓｎｏｏｐ  Ｃｏｎｔｒｏｌｌｅｒ）、バス７０、共有メモリ８０（ＭＥＭ）、デバッグコントローラ９０（ＤＢＧ）などからなる。
【００１３】
中央処理装置１０、２０、３０、４０（ＣＰＵ）は、共有メモリ８０（ＭＥＭ）上にあるプログラムを読み込んで解釈し、その結果に従い、データの移動・算術演算・論理演算などを実行する汎用の回路である。中央処理装置１０、２０、３０、４０（ＣＰＵ）はそれぞれキャッシュ１１、２１、３１、４１（ＣＡＣＨＥ）を備えている。キャッシュは有効ビット、ダーティビット、共有ビット、タグ、データを保持する。有効ビット、ダーティビット、共有ビットはそれぞれ、キャッシュエントリが有効であるかどうか、書き込みがあったかどうか、他の中央処理装置のキャッシュとデータを共有しているかどうかを示している。この３ビットにより、ＭＥＳＩプロトコルにおける各キャッシュ状態を表す。タグは物理アドレスの一部であり、キャッシュヒット判定に利用される。なお、ＭＥＳＩプロトコルは図６において後述する。
【００１４】
スヌープバス５０は、中央処理装置１０、２０、３０、４０（ＣＰＵ）とスヌープコントローラ６０（ＳＮＣ）間のスヌープ処理を高速化するための専用バスである。中央処理装置１０、２０、３０、４０（ＣＰＵ）、共有メモリ８０（ＭＥＭ）などを結ぶバス７０とは独立にデータをやり取りするので、メモリや周辺論理などとのデータ転送を阻害しない。
【００１５】
スヌープコントローラ６０（ＳＮＣ）は、中央処理装置１０、２０、３０、４０（ＣＰＵ）間におけるキャッシュの更新を制御することでキャッシュのコヒーレンシを維持する。キャッシュのコヒーレンシを維持するためのスヌープ処理の詳細は後述する。
【００１６】
バス７０は、中央処理装置１０、２０、３０、４０（ＣＰＵ）、スヌープコントローラ６０（ＳＮＣ）、デバッグコントローラ９０（ＤＢＧ）、共有メモリ８０（ＭＥＭ）、周辺論理などが接続される汎用バスである。中央処理装置１０、２０、３０、４０（ＣＰＵ）は、バス７０を介して相互接続されるとともに共有メモリ８０（ＭＥＭ）へ接続され、さらにスヌープバス５０を介してスヌープコントローラ６０（ＳＮＣ）へ接続される。
【００１７】
共有メモリ８０（ＭＥＭ）は、ＳＲＡＭやＤＲＡＭなどの主記憶装置であり、中央処理装置１０、２０、３０、４０（ＣＰＵ）の処理に必要な命令やデータを保持する。
【００１８】
デバッグコントローラ９０（ＤＢＧ）は、チップ外のエミュレータと配線１２０を介したデータ通信により、デバッグコントローラ９０（ＤＢＧ）の内部レジスタ、各中央処理装置の内部レジスタ、キャッシュ、内蔵メモリ、スヌープコントローラ６０（ＳＮＣ）の内部レジスタ、共有メモリ８０（ＭＥＭ）、周辺論理といったリソースへのアクセスを行う。また、配線１００を介して中央処理装置１０、２０、３０、４０（ＣＰＵ）の停止と再開の指示を行うことができる。
【００１９】
図２は、スヌープコントローラ６０（ＳＮＣ）の詳細を表す図面である。スヌープコントローラ６０（ＳＮＣ）は、複製アドレスアレイ６１（ＤＡＡ）、スヌープマスクレジスタ６２（ＳＭＲ）、スヌープリリースレジスタ６３（ＳＲＲ）、条件一致通知レジスタ６４（ＭＮＲ）、スヌープ制御論理６５（ＳＮＰＬ）からなる。
【００２０】
各中央処理装置からのスヌープ要求により複製アドレスアレイ６１（ＤＡＡ）を検索し、その結果を元に他の中央処理装置へのスヌープを行う。また、スヌープコントローラ６０（ＳＮＣ）はバス７０を介して共有メモリ８０（ＭＥＭ）へ接続される。スヌープ処理の結果、データを共有メモリ８０（ＭＥＭ）へ書き戻す場合にはこの経路を用いる。
【００２１】
スヌープマスクレジスタ６２（ＳＭＲ）は、スヌープコントローラ６０（ＳＮＣ）が他の中央処理装置からのスヌープをロックするための条件を保持する。
【００２２】
スヌープリリースレジスタ６３（ＳＲＲ）は、スヌープがロックされているかどうかの状態を保持する。
【００２３】
条件一致通知レジスタ６４（ＭＮＲ）は、他の中央処理装置からのスヌープがロックされた時にデバッグコントローラ９０（ＤＢＧ）へ通知するかどうかの設定を保持する。
スヌープ制御論理６５（ＳＮＰＬ）は、後述するスヌープ処理の制御と、スヌープマスクレジスタ６２（ＳＭＲ）の設定に基づくスヌープマスク制御と、条件一致通知レジスタ６４（ＭＮＲ）の設定に基づく配線１１０を介したデバッグコントローラ９０（ＤＢＧ）への条件一致の通知を行う。
【００２４】
図３は、図２に示したスヌープコントローラ６０（ＳＮＣ）内の複製アドレスアレイ６１（ＤＡＡ）の詳細を示す図面である。複製アドレスアレイ６１（ＤＡＡ）は、各中央処理装置のキャッシュ１１、２１、３１、４１（ＣＡＣＨＥ）に対応する複製アドレス６１１、６１２、６１３、６１４を持つ。複製アドレスには、中央処理装置のキャッシュ情報のうち、有効ビット６１００、共有ビット６１０１、タグ６１０２を保持する。
【００２５】
図４は、図２に示したデバッグコントローラ９０（ＤＢＧ）の詳細を表す図面である。デバッグコントローラ９０（ＤＢＧ）は、ブレーク条件レジスタ９１（ＢＣＲ）、デバッグステータスレジスタ９２（ＤＳＲ）、デバッグ制御論理９３（ＤＢＧＬ）からなる。
【００２６】
ブレーク条件レジスタ９１（ＢＣＲ）は、中央処理装置１０、２０、３０、４０（ＣＰＵ）にブレークポイント例外を発生させるための条件を保持する。
【００２７】
デバッグステータスレジスタ９２（ＤＳＲ）は、ブレークポイント例外が発生したかどうかの状態を保持する。
【００２８】
デバッグ制御論理９３（ＤＢＧＬ）は、チップ外のエミュレータからの指示に基づくチップ内リソースへのアクセス制御と、ブレーク条件レジスタ９１（ＢＣＲ）の設定と中央処理装置１０、２０、３０、４０（ＣＰＵ）の状態とスヌープコントローラからの条件一致の通知によるブレークポイント例外の発生制御を行い、ブレークポイント例外発生時に中央処理装置１０、２０、３０、４０（ＣＰＵ）への停止要求とデバッグステータスレジスタ９２（ＤＳＲ）への書き込みを行う。
【００２９】
図５は、スヌープ処理における信号の授受を示す図面である。スヌープ処理では、次の一連の処理を行う。まず、中央処理装置１０（ＣＰＵ）がキャッシュ１１（ＣＡＣＨＥ）を更新する際、中央処理装置２０（ＣＰＵ）のキャッシュ２１（ＣＡＣＨＥ）との間のデータのコヒーレンシを維持するために、スヌープコントローラ６０（ＳＮＣ）へスヌープ要求５１を行う。なお、スヌープ要求による一連の処理では、キャッシュ状態の更新に加えてフィルやライトバックを実行するため、スヌープ要求５１には、リードやライトといったコマンド、アクセス先の共有メモリ８０（ＭＥＭ）のアドレスやそのライトデータなどが含まれている。スヌープ要求５１を受けたスヌープコントローラ６０（ＳＮＣ）が複製アドレスアレイ６１（ＤＡＡ）の検索と更新を行うとともに中央処理装置２０（ＣＰＵ）へキャッシュ２１（ＣＡＣＨＥ）の状態更新要求５２を行う。更に、状態更新要求５２を受けた中央処理装置２０（ＣＰＵ）はキャシュ２１（ＣＡＣＨＥ）の更新を行い、各々の結果をレスポンス５３、５４として通知する。また、複製アドレスアレイ６１（ＤＡＡ）の検索の結果、キャッシュ２１（ＣＡＣＨＥ）に有効なデータがない場合、スヌープコントローラ６０（ＳＮＣ）はバス７０を介して共有メモリ８０（ＭＥＭ）へアクセスし、中央処理装置１０（ＣＰＵ）へレスポンス５３を通知する。
【００３０】
図６は、ＭＥＳＩプロトコル（Ｍｏｄｉｆｉｅｄ  Ｅｘｃｌｕｓｉｖｅ  Ｓｈａｒｅｄ  Ｉｎｖａｌｉｄ）を示す図面である。このＭＥＳＩプロトコルはスヌープ処理に利用されるものである。ＭＥＳＩプロトコルとは、キャッシュ間のコヒーレンシをとるプロトコルであり、キャッシュは次の４状態をとる。
１）  Ｍ状態（変更状態，  Ｍｏｄｉｆｉｅｄ  Ｓｔａｔｅ）：  ある中央処理装置のキャッシュだけに存在し、主記憶上の値から変更されている。他の中央処理装置がこのキャッシュラインに相当する主記憶にアクセスする場合、変更された最新の値を参照できるよう制御しなければならない。
２）  Ｅ状態（排他状態，  Ｅｘｃｌｕｓｉｖｅ  Ｓｔａｔｅ）：  ある中央処理装置のキャッシュだけに存在するが、主記憶上の値と一致している。
３）  Ｓ状態（共有状態，  Ｓｈａｒｅｄ  Ｓｔａｔｅ）：  複数の中央処理装置で同じキャッシュラインが存在し、主記憶の値と一致している。
４）  Ｉ状態（無効状態，  Ｉｎｖａｌｉｄ  Ｓｔａｔｅ）：  キャッシュ上に存在しない。
【００３１】
なお、以降の説明では、Ｅ´状態も用いる。図６に記載していないが、Ｅ´状態は、Ｅ状態２１０あるいはＭ状態２００を表すキャッシュ状態を意味する。これは、複製アドレスアレイ６１（ＤＡＡ）はＭとＥ状態を区別しない構成としているためＥ´状態を用いるのが、簡便なためである。勿論、ＭとＥ状態を区別する構成も可能である。
【００３２】
次に中央処理装置１０、２０、３０、４０（ＣＰＵ）とスヌープコントローラ６０（ＳＮＣ）によるスヌープ処理の動作について述べる。特に制限されないが、スヌープ処理は図６に示すＭＥＳＩプロトコルを利用しているものとする。ここでは、リード・ライトを実行しスヌープ処理の要求元として中央処理装置１０（ＣＰＵ）を、スヌープ処理の要求先として中央処理装置２０（ＣＰＵ）を選択するが、中央処理装置の組み合わせは特に制限されない。まず、リードを実行する場合について説明する。中央処理装置１０（ＣＰＵ）でリードを実行しキャッシュミスした場合、中央処理装置２０、３０、４０（ＣＰＵ）のキャッシュ２１、３１、４１の最新データを参照するためにスヌープ要求を行う。この時のコマンドはリードで，アドレスはキャッシュミスした共有メモリ８０（ＭＥＭ）のアドレスである。スヌープ要求はスヌープバス５０を介してスヌープコントローラ６０（ＳＮＣ）に通知される。スヌープコントローラ６０（ＳＮＣ）は複製アドレスアレイ６１（ＤＡＡ）を検索し、キャッシュ２１、３１、４１に最新データが存在するかどうかを調べる。
【００３３】
複製アドレスアレイ６１（ＤＡＡ）の検索の結果、キャッシュ２１、３１、４１に最新のデータがない場合、スヌープコントローラ６０（ＳＮＣ）はキャッシュ１１の該当エントリに対応する複製アドレスアレイ６１（ＤＡＡ）のエントリをＩ状態２３０からＥ´状態に更新し、他の中央処理装置のキャッシュに最新のデータが見つからなかったというレスポンスを中央処理装置１０（ＣＰＵ）へ返す。レスポンスを受け中央処理装置１０（ＣＰＵ）はキャッシュ１１の該当エントリをＩ状態２３０からＥ状態２１０に変更する。最新のデータは共有メモリ８０（ＭＥＭ）にあるため、バス７０あるいはスヌープコントローラ６０（ＳＮＣ）とスヌープバス５０を介して中央処理装置１０（ＣＰＵ）のキャッシュ１１に書き込まれる。
【００３４】
複製アドレスアレイ６１（ＤＡＡ）の検索の結果、例えばキャッシュ２１に最新のデータが存在した場合、スヌープコントローラ６０（ＳＮＣ）はキャッシュ１１の該当エントリに対応する複製アドレスアレイ６１（ＤＡＡ）のエントリをＩ状態２３０からＳ状態２２０に更新するとともに、キャッシュ２１の該当エントリに対応する複製アドレスアレイ６１（ＤＡＡ）のエントリをＥ´状態／Ｓ状態２２０からＳ状態２２０に更新する。さらに、スヌープバス５０を介して中央処理装置１０（ＣＰＵ）へ他の中央処理装置のキャッシュに最新のデータが見つかったというレスポンスを返すとともに、中央処理装置２０へキャッシュ状態の更新と最新データの転送を要求する。レスポンスを受け付けた中央処理装置１０（ＣＰＵ）はキャッシュ１１の該当エントリをＩ状態２３０からＳ状態２２０に更新する。要求を受け付けた中央処理装置２０はキャッシュ２１の該当エントリをＭ状態２００／Ｅ状態２１０／Ｓ状態２２０からＳ状態２２０に更新し、最新データをスヌープコントローラ６０（ＳＮＣ）へ返す。スヌープコントローラ６０（ＳＮＣ）は最新のデータを中央処理装置１０（ＣＰＵ）へ返し、キャッシュ１１に書き込まれる。
【００３５】
中央処理装置１０（ＣＰＵ）でリードを実行しキャッシュヒットした場合、最新データはキャッシュ１１にあるためスヌープを行わない。
【００３６】
次に、ライトを実行する場合について説明する。中央処理装置１０（ＣＰＵ）でライトを実行しキャッシュミスした場合、中央処理装置２０、３０、４０（ＣＰＵ）のキャッシュ２１、３１、４１の最新データを参照するためにスヌープ要求を行う。この時のコマンドはライトで，アドレスはキャッシュミスした共有メモリ８０（ＭＥＭ）のアドレスである。コマンドがライトの場合はそのライトデータも出力される。スヌープ要求はスヌープバス５０を介してスヌープコントローラ６０（ＳＮＣ）に通知される。スヌープコントローラ６０（ＳＮＣ）は複製アドレスアレイ６１（ＤＡＡ）を検索し、キャッシュ２１、３１、４１に最新データが存在するかどうかを調べる。
【００３７】
複製アドレスアレイ６１（ＤＡＡ）の検索の結果、キャッシュ２１、３１、４１に最新のデータがない場合、スヌープコントローラ６０（ＳＮＣ）はキャッシュ１１の該当エントリに対応する複製アドレスアレイ６１（ＤＡＡ）のエントリをＩ状態２３０からＥ´状態に更新し、レスポンスを中央処理装置１０（ＣＰＵ）へ返す。レスポンスを受け中央処理装置１０（ＣＰＵ）はキャッシュ１１の該当エントリをＩ状態２３０からＭ状態２００に変更する。ライト実行前の最新のデータは共有メモリ８０（ＭＥＭ）にあるため、バス７０あるいはスヌープコントローラ６０（ＳＮＣ）とスヌープバス５０を介して中央処理装置１０（ＣＰＵ）のキャッシュ１１に書き込まれる。
【００３８】
複製アドレスアレイ６１（ＤＡＡ）の検索の結果、例えばキャッシュ２１に最新のデータが存在した場合、スヌープコントローラ６０（ＳＮＣ）はキャッシュ１１の該当エントリに対応する複製アドレスアレイ６１のエントリをＩ状態２３０からＥ´状態に更新するとともに、キャッシュ２１の該当エントリに対応する複製アドレスアレイ６１（ＤＡＡ）のエントリをＭ状態２００／Ｅ状態２１０／Ｓ状態２２０からＩ状態２３０に更新する。さらに、スヌープバス５０を介して中央処理装置１０（ＣＰＵ）へレスポンスを返すとともに、中央処理装置２０へキャッシュ状態の更新と最新データの転送を要求する。レスポンスを受け付けた中央処理装置１０（ＣＰＵ）はキャッシュ１１の該当エントリをＩ状態２３０からＭ状態２００に更新する。要求を受け付けた中央処理装置２０はキャッシュ２１の該当エントリをＭ状態２００／Ｅ状態２１０／Ｓ状態２２０からＩ状態２３０に更新し、最新データをスヌープコントローラ６０（ＳＮＣ）へ返す。スヌープコントローラ６０は最新のデータを中央処理装置１０（ＣＰＵ）へ返し、キャッシュ１１に書き込まれる。
【００３９】
中央処理装置１０（ＣＰＵ）でライトを実行しＭ状態２００／Ｅ状態２１０でキャッシュヒットした場合、最新データはキャッシュ１１のみにあるためスヌープを行わない。
【００４０】
中央処理装置１０（ＣＰＵ）でライトを実行しＳ状態２２０でキャッシュヒットした場合、他の中央処理装置のキャッシュにあるデータが最新でなくなったことを通知するためにスヌープ要求を行う。スヌープ要求はスヌープバス５０を介してスヌープコントローラ６０（ＳＮＣ）に通知される。スヌープコントローラ６０（ＳＮＣ）は複製アドレスアレイ６１（ＤＡＡ）を検索し、キャッシュ２１、３１、４１に最新データが存在するかどうかを調べる。
【００４１】
複製アドレスアレイ６１（ＤＡＡ）の検索の結果、キャッシュ２１、３１、４１に最新のデータがない場合、スヌープコントローラ６０（ＳＮＣ）はキャッシュ１１の該当エントリに対応する複製アドレスアレイ６１（ＤＡＡ）のエントリをＳ状態２２０からＥ´状態に更新し、レスポンスを中央処理装置１０（ＣＰＵ）へ返す。レスポンスを受けた中央処理装置１０（ＣＰＵ）はキャッシュ１１の該当エントリをＳ状態２２０からＭ状態２００に変更する。
【００４２】
複製アドレスアレイ６１（ＤＡＡ）の検索の結果、例えばキャッシュ２１に最新のデータが存在した場合、スヌープコントローラ６０（ＳＮＣ）はキャッシュ１１の該当エントリに対応する複製アドレスアレイ６１（ＤＡＡ）のエントリをＳ状態２２０からＥ´状態に更新するとともに、キャッシュ２１の該当エントリに対応する複製アドレスアレイ６１（ＤＡＡ）のエントリをＳ状態２２０からＩ状態２３０に更新する。さらに、スヌープバス５０を介して中央処理装置１０（ＣＰＵ）へレスポンスを返すとともに、中央処理装置２０（ＣＰＵ）へキャッシュ状態の更新と最新データの転送を要求する。レスポンスを受け付けた中央処理装置１０（ＣＰＵ）はキャッシュ１１の該当エントリをＳ状態２２０からＭ状態２００に更新する。要求を受け付けた中央処理装置２０はキャッシュ２１の該当エントリをＳ状態２２０からＩ状態２３０に更新する。
【００４３】
上述のように、一連のスヌープ処理は全てスヌープコントローラ６０（ＳＮＣ）を通して実行される。そのため、中央処理装置１０、２０、３０、４０（ＣＰＵ）からスヌープ要求を受け付ける際にスヌープマスクレジスタ６２（ＳＭＲ）のマスク条件との一致判定を行い、スヌープコントローラ６０（ＳＮＣ）においてある中央処理装置以外のスヌープ要求の受理を一時的にマスクすることで、他の中央処理装置によってその中央処理装置のキャッシュの状態が更新されることを防ぐことができる。
【００４４】
これを理解するため、スヌープコントローラ６０（ＳＮＣ）とデバッグコントローラ９０（ＤＢＧ）について詳細に説明する。図７、８ではスヌープマスクレジスタ６２（ＳＭＲ）を、図９ではスヌープリリースレジスタ６３（ＳＲＲ）を、図１０では条件一致通知レジスタ６４（ＭＮＲ）を説明する。また、図１１、１２ではブレーク条件レジスタ９１（ＢＣＲ）を説明し、図１３ではデバッグステータスレジスタ９２（ＤＳＲ）を説明する。その後、図１４ではスヌープ要求の受理のマスクとそのマスク解除を用いたマルチコアにおける並列処理プログラムのデバッグを容易化する方法を説明する。
【００４５】
図７は、図２に示したスヌープコントローラ６０（ＳＮＣ）内のスヌープマスクレジスタ６２（ＳＭＲ）の詳細を示す図面である。スヌープマスクレジスタ６２（ＳＮＭ）にはマスク条件Ａ６２０、マスク条件Ｂ６２１、…のように複数個のマスク条件を設定可能である。
【００４６】
図８に、スヌープマスクレジスタ６２（ＳＭＲ）に設定されるマスク条件を示す。マスク条件Ａ６２０、マスク条件Ｂ６２１、…にはこれらを判定対象とするために、条件の対象とする中央処理装置６２００、コマンド６２０１、アドレス６２０２、ライトデータ６２０３を設定できる。スヌープコントローラ６０（ＳＮＣ）は、条件の対象とする中央処理装置６２００の設定で指定された中央処理装置のスヌープ要求（コマンド、アドレス、ライトデータ）を監視し、コマンド６２０１、アドレス６２０２、ライトデータ６２０３の処理記述子との一致判定を行う。
【００４７】
なお、説明にはマスク条件Ａ６２０を取り上げるが、他のマスク条件も同様である。一致判定は、マスク条件組み合わせ６２０４の設定に従い、これらのマスク条件から１つ、あるいは２つ以上の論理和、論理積の組み合わせを選択する。また、複数個のマスク条件一致の組み合わせ６２０５や、判定が一致した回数６２０６を更に一致判定条件として選択することもできる。判定が一致した場合、スヌープコントローラ６０（ＳＮＣ）は、スヌープ要求を行った中央処理装置以外の中央処理装置からのスヌープ要求を以降受理しない。なお、マスク条件Ａ６２０にスヌープ要求を受理しない中央処理装置６２０７を設定可能とし、その設定に従い中央処理装置（ＣＰＵ）のスヌープ要求を受理しないよう制御しても良い。
【００４８】
図９は、図２に示したスヌープコントローラ６０（ＳＮＣ）内のスヌープリリースレジスタ６３（ＳＳＲ）の詳細を示す図面である。スヌープリリースレジスタ６３（ＳＳＲ）は指示子６３０によりスヌープ要求がマスクされているかどうかの状態を示す。スヌープ要求がマスクされるときに１が設定され、０を書き込むことでスヌープ要求のマスク状態を解除できる。
【００４９】
図１０は、図２に示したスヌープコントローラ６０（ＳＮＣ）内の条件一致通知レジスタ６４（ＭＮＲ）の詳細を示す図面である。条件一致通知レジスタ６４（ＭＮＲ）は他の中央処理装置へのスヌープ要求がマスクされた時にデバッグコントローラ９０（ＤＢＧ）へ通知するかどうかの設定を保持し、０のときに非通知、１のときに通知を示す。なお、この通知の設定は、スヌープマスクレジスタ６２（ＳＭＲ）のマスク条件毎に設定される。詳細は図１４，１５にて説明するが、条件一致通知レジスタで通知の設定をしておくことでスヌープロック時にデバッグコントローラでブレークポイント例外を発生させるかどうか指定できる。
【００５０】
図１１は、図４に示したデバッグモジュール９０（ＤＢＧ）内のブレーク条件レジスタ９１（ＢＣＲ）の詳細を示す図面である。ブレーク条件レジスタ９１（ＢＣＲ）にはブレーク条件Ａ９１０、ブレーク条件Ｂ９１１、…のように複数個のブレーク条件を設定可能である。
【００５１】
図１２に、ブレーク条件レジスタ９１（ＢＣＲ）に設定されるブレーク条件を示す。ブレーク条件Ａ９１０、ブレーク条件Ｂ９１１、…にはこれらを判定対象とするために、条件の対象とする中央処理装置９１００、プログラムカウンタの値９１０１、ライトデータ９１０２を設定できる。デバッグモジュール９０（ＤＢＧ）は、条件の対象とする中央処理装置９１００の設定で指定された中央処理装置のプログラムカウンタの値やライトデータを監視し、プログラムカウンタの値９１０１、ライトデータ９１０２の処理記述子との一致判定を行う。なお、デバッグコントローラ９０（ＤＢＧ）が中央処理装置（ＣＰＵ）毎ごとに分かれている場合、中央処理装置（ＣＰＵ）毎にレジスタがある場合は、対象とする中央処理装置９１００の処理記述子は不要になる。
【００５２】
なお、説明にはブレーク条件Ａ９１０を取り上げるが、他のブレーク条件も同様である。一致判定は、ブレーク条件組み合わせ９１０３の設定に従い、前述のブレーク条件から１つ、あるいは２つ以上の論理和、論理積の組み合わせを選択する。また、複数個のブレーク条件一致の組み合わせ９１０４や、判定が一致した回数９１０５を更に一致判定条件として選択することもできる。判定が一致した場合、ブレークポイント例外が発生する。ブレークポイント例外とは、中央処理装置（ＣＰＵ）で実行中のプログラムがブレーク条件を満たした場合に、デバッグコントローラ９０（ＤＢＧ）から中央処理装置（ＣＰＵ）に、そのプログラムの実行停止を要求することである。ブレークポイント例外では、少なくともブレーク条件を満たした中央処理装置（ＣＰＵ）へ実行停止を要求できれば良く、同時に他の中央処理装置（ＣＰＵ）へ実行停止を要求するようデバッグコントローラ９０（ＤＢＧ）を構成しても良い。
【００５３】
図１３は、図４に示したデバッグコントローラ９０（ＤＢＧ）内のデバッグステータスレジスタ９２（ＤＳＲ）の詳細を示す図面である。デバッグステータスレジスタ９２（ＤＳＲ）は指示子９２０によりブレークポイント例外が発生したかどうかを示す。０がブレークポイント例外の発生していない状態、１が発生した状態である。
【００５４】
図１４にデバッグ処理のフローチャートを、図１５に各モジュールの処理シーケンスを示す。なお、スヌープマスクレジスタ６２（ＳＭＲ）のマスク条件の対象となるＣＰＵコアを中央処理装置１０（ＣＰＵ）、マスクの対象とするＣＰＵコアは中央処理装置２０（ＣＰＵ）とする。マルチコアによる並列処理プログラムのデバッグは、スヌープ要求の受理マスクとブレークポイント例外による中央処理装置の停止を組み合わせて行う。
【００５５】
まず、デバッガ１６０からデバッグコントローラ９０（ＤＢＧ）へブレーク条件とスヌープ要求のマスク条件の設定をあわせて行う（Ｓ１００１）。これらの設定方法については、図１６を用いて説明する。デバッグ対象となるＩＣチップ１は、開発用ボード１４０と接続し、ＰＣやＷＳなどの開発環境１５０とエミュレータ１３０を介して接続される。開発環境１５０上ではデバッガ１６０が動作し、デバッガ１６０上でのユーザ操作がＩＣチップ１上のデバッグコントローラ９０（ＤＢＧ）へ通知される。ユーザがデバッガ１６０上で共有メモリ８０（ＭＥＭ）上にあるプログラムにブレークポイントを設定すると、その通知を受けたデバッグコントローラ９０（ＤＢＧ）がバス７０を介してブレーク条件レジスタ９１（ＢＣＲ）へ書き込みを行うことで実現される。受理マスクの設定も上記と同様に、ユーザ操作がデバッグコントローラ９０（ＤＢＧ）へ通知され、スヌープマスクレジスタ６２（ＳＭＲ）へ書き込みが行われることで実現される。
【００５６】
これらのレジスタの設定後、デバッグコントローラ９０（ＤＢＧ）を介したデバッガ１６０からのユーザ操作により、各中央処理装置でプログラムの実行が開始される（Ｓ１００２）。プログラム実行中に例えばリードミスが発生した場合、前記スヌープ処理を開始するためにスヌープ要求を行った時点でスヌープ要求のマスク条件のヒット判定を行う（Ｓ１００３）。このヒット判定は、スヌープ要求に含まれるリードやライトといったコマンド、アクセス先の共有メモリ８０（ＭＥＭ）のアドレスやそのライトデータが、マスク条件に合致するか否かによって行われる。マスク条件にヒットした場合、スヌープコントローラＳＮＣ（６０）は他の中央処理装置からのスヌープ要求を受理しなくなる（Ｓ１００４）。一方、ミスした場合は以後もスヌープ要求の受理を行う。
【００５７】
ここで、マスク条件のヒットとスヌープ要求のマスクについて具体例を挙げて説明する。スヌープマスクレジスタ６２（ＳＭＲ）のマスク条件Ａ６２０の条件の対象となるＣＰＵコアを中央処理装置１０（ＣＰＵ）、コマンドをリード、アドレスを０ｘ０１２３４５６７、マスク条件組み合わせをコマンドとアドレスとし、ライトデータ、他のマスク条件一致、条件一致回数はｄｏｎ’ｔ  ｃａｒｅとする。また、マスクの対象とするＣＰＵコアは中央処理装置２０とする。以上の設定がなされた状態で、中央処理装置１０（ＣＰＵ）でプログラムが実行され、コマンドがリード、アドレスが０ｘ１２３４５６７のときにキャッシュミスなどによりスヌープ要求が発生した場合、コマンドとアドレスの一致によりスヌープ要求のマスク条件がヒットとなる。その結果、スヌープコントローラ６０（ＳＮＣ）は以降、中央処理装置２０（ＣＰＵ）からのスヌープ要求に対し、受理のレスポンスを返さなくなる。その結果、中央処理装置２０（ＣＰＵ）はスヌープレスポンス待ちの状態でストールする。他の中央処理装置はストールして処理が進まないため、ユーザはデバッガ１６０を用いてプログラムのデバッグを行っている期間、デバッグ対象とする中央処理装置以外の中央処理装置によりキャッシュを更新されることはない。
【００５８】
スヌープコントローラ６０（ＳＮＣ）は、スヌープ要求のマスク条件が一致したときに、条件一致通知レジスタ６４（ＭＮＲ）の通知ビット６４０の設定に従い、スヌープ制御論理６５（ＳＮＰＬ）が配線１１０を介して条件一致をデバッグコントローラ９０へ（ＤＢＧ）通知する（Ｓ１００５）。通知を受けたデバッグコントローラ９０（ＤＢＧ）ではブレークポイント例外が発生する（Ｓ１００７）。一方、設定されていない場合は、通知を行わない。条件一致通知レジスタで通知の設定をしておくことでスヌープロック時にデバッグコントローラでブレークポイント例外を発生させるかどうか指定できる。また、デバッグコントローラ９０（ＤＢＧ）は、中央処理装置上で実行中のプログラムを監視し、プログラムがブレーク条件を満たした場合（Ｓ１００６）にブレークポイント例外を発生させる（Ｓ１００７）。その後、デバッグコントローラ９０（ＤＢＧ）は中央処理装置（ＣＰＵ）へ実行停止要求を行い、中央処理装置（ＣＰＵ）はそのプログラムの実行を停止する（Ｓ１００９）。ここで、デバッグコントローラ９０（ＤＢＧ）は、同時ブレークが有効である場合には、ブレークポイント例外の発生条件を満たした中央処理装置以外の中央処理装置に対してもプログラムの実行停止を要求する（Ｓ１００８、Ｓ１０１０）。同時ブレークの有効・無効を設定する情報は、デバッグコントローラ内の同時ブレークレジスタ内の同時ブレーク有効ビットに保持される。０は、同時ブレークが無効であることを、１は同時ブレークが有効であることを表す。なお、停止させる中央処理装置をスヌープマスクレジスタ６２（ＳＭＲ）、あるいはデバッグコントローラ９０（ＤＢＧ）で設定可能な構成としても良い。
【００５９】
デバッグを終了させる場合（Ｓ１０１１）、中央処理装置の動作を再開させる。中央処理装置の動作を再開させる際にスヌープリリースレジスタ６３（ＳＲＲ）のリリースビット６３０へ０が書き込まれ、スヌープ要求の受理マスクが解除される（Ｓ１０１２）。これにより、デバッグ終了（Ｓ１０１３）後は再びスヌープコントローラ６０（ＳＮＣ）でスヌープ要求の受付が行われる。スヌープ要求の受理マスクの解除は、ユーザがデバッグ中にデバッグコントローラ９０（ＤＢＧ）を介してスヌープリリースレジスタ６３（ＳＲＲ）へアクセスすることでも可能であり、デバッグ中に他の中央処理装置によるスヌープ要求を再開させたい場合に利用される。
【００６０】
ある中央処理装置のブレークポイント例外の発生によって他の中央処理装置を停止させるには、デバッグコントローラ９０（ＤＢＧ）を介し、かつ、その配線が長距離になるため、停止通知は数サイクルから数十サイクルかかる。そのため、図１７に示すように、他の中央処理装置では、停止するまでに複数命令（Ｄ、Ｅ、…、Ｍ）が実行されてしまい、バグの混入箇所の特定が困難になる。一方、本発明により、ある中央処理装置のブレークポイント例外の発生と同時にスヌープ要求のマスク制御を行うことで、各中央処理装置がスヌープ要求を受理されない状態でストールし、そのストール期間に停止通知が完了するようになる。これは、スヌープ要求の受理マスク解除がデバッグ中のユーザによる操作あるいはデバッグ終了時になるため、より多くの時間がかかるためである。そのため、図１８に示すように、他の中央処理装置が停止するまでに実行される命令は１命令（Ｄ）となり、バグの混入箇所の特定が容易になる。
以上の処理により、設定された中央処理装置以外のスヌープ処理の実行を待たせることで、マルチコアにおける並列処理のプログラムを効率良くデバッグすることができる。
【００６１】
以上本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【図面の簡単な説明】
【００６２】
【図１】本発明の実施の形態に係る情報処理装置のブロック図である。
【図２】スヌープコントローラ（ＳＮＣ）の詳細を表す図面である。
【図３】スヌープコントローラ（ＳＮＣ）内の複製アドレスアレイ（ＤＡＡ）の詳細を示す図面である。
【図４】デバッグコントローラ（ＤＢＧ）の詳細を表す図面である。
【図５】スヌープ処理における信号の授受を示す図である。
【図６】キャッシュコヒーレンシを維持するためのＭＥＳＩプロトコルを示す図である。
【図７】スヌープコントローラ（ＳＮＣ）内のスヌープマスクレジスタ６２（ＳＭＲ）の詳細を示す図面である。
【図８】スヌープマスクレジスタ（ＳＭＲ）に設定されるマスク条件を示す図である。
【図９】スヌープコントローラ（ＳＮＣ）内のスヌープリリースレジスタ（ＳＳＲ）の詳細を示す図面である。
【図１０】スヌープコントローラ（ＳＮＣ）内の条件一致通知レジスタ（ＭＮＲ）の詳細を示す図面である。
【図１１】デバッグモジュール（ＤＢＧ）内のブレーク条件レジスタ（ＢＣＲ）の詳細を示す図面である。
【図１２】ブレーク条件レジスタ（ＢＣＲ）に設定されるブレーク条件を示す図である。
【図１３】デバッグコントローラ（ＤＢＧ）内のデバッグステータスレジスタ（ＤＳＲ）の詳細を示す図面である。
【図１４】本発明の実施の形態におけるデバッグフローを示すフローチャートである。
【図１５】図１４における各モジュールの処理フローを示す図である。
【図１６】デバッグ時の環境を示す図である。
【図１７】本発明の実施の形態を適用しない場合の同時ブレークの実行タイミングチャートである。
【図１８】本発明の実施の形態を適用した場合の同時ブレークの実行タイミングチャートである。
【符号の説明】
【００６３】
１：ＩＣチップ
１０、２０、３０、４０：中央処理装置（ＣＰＵ）
１１、２１、３１、４１：キャッシュ（ＣＡＣＨＥ）
５０：スヌープバス
６０：スヌープコントローラ（ＳＮＣ）
６１：複製アドレスアレイ（ＤＡＡ）
６２：スヌープマスクレジスタ（ＳＭＲ）
６３：スヌープリリースレジスタ（ＳＲＲ）
６４：条件一致通知レジスタ（ＭＮＲ）
７０：バス
８０：共有メモリ（ＭＥＭ）
９０：デバッグコントローラ（ＤＢＧ）
１３０：エミュレータ
１４０：開発用ボード
１５０：開発環境
１６０：デバッガ
【図１】
0005255887.tif 000002
【図２】
0005255887.tif 000003
【図３】
0005255887.tif 000004
【図４】
0005255887.tif 000005
【図５】
0005255887.tif 000006
【図６】
0005255887.tif 000007
【図７】
0005255887.tif 000008
【図８】
0005255887.tif 000009
【図９】
0005255887.tif 000010
【図１０】
0005255887.tif 000011
【図１１】
0005255887.tif 000012
【図１２】
0005255887.tif 000013
【図１３】
0005255887.tif 000014
【図１４】
0005255887.tif 000015
【図１５】
0005255887.tif 000016
【図１６】
0005255887.tif 000017
【図１７】
0005255887.tif 000018
【図１８】
0005255887.tif 000019