(57)【要約】【課題】プロセッサコアの数の増加に対して、実装サイズの増加を抑制すること【解決手段】マルチプロセッサは、複数のコアと、デバッグ制御部と、を備えるものである。複数のコアのうち一部は、デバッグ制御部からレジスタ情報を参照及び更新可能に接続されたデバッグ用コアを含む。デバッグ制御部は、複数のコアのうちデバッグ対象である第１のコア内のレジスタ情報を、デバッグ用コアに転送する。デバッグ用コアは、転送されたレジスタ情報を用いて、第１のコアで実行対象のプログラムのデバッグを行う。【選択図】図１
2018088048.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアと、
デバッグ制御部と、
を備えるマルチプロセッサであって、
前記複数のコアのうち一部は、
前記デバッグ制御部からレジスタ情報を参照及び更新可能に接続されたデバッグ用コアであり、
前記デバッグ制御部は、
前記複数のコアのうちデバッグ対象である第１のコア内のレジスタ情報を、前記デバッグ用コアに転送する
マルチプロセッサ。
【請求項２】
前記デバッグ用コアは、
前記転送されたレジスタ情報を用いて、前記第１のコアで実行対象のプログラムのデバッグを行う
請求項１に記載のマルチプロセッサ。
【請求項３】
前記マルチプロセッサは、退避領域をさらに備え、
前記デバッグ制御部は、
前記デバッグ用コア内のレジスタ情報を前記退避領域へ転送した後に、前記第１のコア内のレジスタ情報を、前記デバッグ用コアに転送する
請求項１に記載のマルチプロセッサ。
【請求項４】
前記デバッグ制御部は、
デバッグ対象を前記複数のコアのうち第２のコアに変更した場合、前記デバッグ用コア内のレジスタ情報を前記第１のコアへ転送し、
前記第２のコア内のレジスタ情報を、前記デバッグ用コアに転送する
請求項３に記載のマルチプロセッサ。
【請求項５】
前記デバッグ制御部は、
デバッグ対象を前記第２のコアに変更した場合、前記デバッグ用コア内のレジスタ情報が書き換えられているか否かを判定し、
前記デバッグ用コア内のレジスタ情報が書き換えられていると判定した場合に、当該レジスタ情報を前記第１のコアへ転送する
請求項４に記載のマルチプロセッサ。
【請求項６】
前記複数のコアは、リング状に接続され、
前記デバッグ制御部は、
前記デバッグ用コア内のレジスタ情報が、デバッグ対象の前記第１のコアのものでない場合、当該レジスタ情報を当該デバッグ用コアと隣接するコアへ転送する
請求項１に記載のマルチプロセッサ。
【請求項７】
前記レジスタ情報は、プログラムカウンタ値又はステータスレジスタ値を含む、
請求項１に記載のマルチプロセッサ。
【請求項８】
請求項１に記載のマルチプロセッサと、
前記複数のコアの夫々に対応し、各コア内のレジスタ情報を記憶するための複数の退避領域を有するメモリと、
を備えるマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチプロセッサ及びマルチプロセッサシステムに関し、例えば、コアプロセッサで実行されるプログラムをデバッグするためのマルチプロセッサ及びマルチプロセッサシステムに関する。
【背景技術】
【０００２】
特許文献１には、デバッグ端子を有するマルチプロセッサ装置に関する技術が開示されている。特許文献１にかかるマルチプロセッサ装置は、プロセッサごとにデバッグインタフェース（Ｉ／Ｆ）を有する。
【０００３】
特許文献２には、マルチプロセッサシステムに関する技術が開示されている。特許文献２にかかるマルチプロセッサシステムは、プロセッサごとにデバッグ機能部を有し、また、制御回路にデバッグ機能部を有する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−７６１９９号公報
【特許文献２】特開２００６−３０２１６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１及び２では、各プロセッサコアを直接デバッグするために、デバッグＩ／Ｆやデバッグ機能部などのデバッグ制御部を有する。そのため、プロセッサコアの数の増加に応じて、プロセッサの実装サイズが大きくなってしまうという問題点がある。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、マルチプロセッサが備えるデバッグ制御部は、複数のコアのうちデバッグ対象である第１のコア内のレジスタ情報を、デバッグ制御部からレジスタ情報を参照及び更新可能に接続されたデバッグ用コアに転送するものである。
【発明の効果】
【０００８】
前記一実施の形態によれば、プロセッサコアの数の増加に対して、実装サイズの増加を抑制することができる。
【図面の簡単な説明】
【０００９】
【図１】本実施の形態１にかかるマルチプロセッサ及びデバッガシステムの構成を示すブロック図である。
【図２】本実施の形態１にかかるマルチプロセッサのコアの内部構成を示すブロック図である。
【図３】本実施の形態１にかかるマルチプロセッサのコア間のリングバスの構成を示すブロック図である。
【図４】本実施の形態１にかかるデバッグ処理の流れを示すフローチャートである。
【図５】本実施の形態１にかかるマルチプロセッサのコアのデータ入れ替え処理の流れを示すフローチャートである。
【図６】本実施の形態２にかかるマルチプロセッサ及びデバッガシステムの構成を示すブロック図である。
【図７】本実施の形態２にかかるマルチプロセッサのコアのデータ入れ替え処理の流れを示すフローチャートである。
【図８】本実施の形態３にかかるマルチプロセッサのコアのデータ入れ替え処理の流れを示すフローチャートである。
【図９】本実施の形態３にかかるマルチプロセッサのプログラムの再実行前の処理の流れを示すフローチャートである。
【図１０】本実施の形態４にかかるマルチプロセッサシステムの構成を示すブロック図である。
【発明を実施するための形態】
【００１０】
以下では、上述した課題を解決するための手段を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１１】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１２】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００１３】
ここで、以下の実施の形態を想到するに至った経緯を説明する。車載情報システム向けＳｏＣ（System on a Chip）の一例としては、カメラからの画像を処理して人や車などと認識するための画像認識処理プロセッサがある。当該画像認識処理プロセッサは、多数のコアプロセッサ（コア）を持つ並列処理プロセッサである。多数のコア上で動くプログラムのデバッグのためには、プログラムの実行途中で同時に複数のコアの状態を調べる必要がある。そのため、各コアにデバッグ機能を持たせることが望ましいが、実装した場合に回路サイズが大きくなってしまう。一方で、プロセッサの実装サイズは製造コストに直結するため、サイズはなるべく小さくする必要がある。そこで、以下の実施の形態が見出された。
【００１４】
＜実施の形態１＞
図１は、本実施の形態１にかかるマルチプロセッサ１０１及びデバッガシステム１０２の構成を示すブロック図である。デバッガシステム１０２は、マルチプロセッサ１０１と接続してマルチプロセッサ１０１上で動作するプログラムのデバッグを行う。デバッガシステム１０２は、例えば、コンピュータ等の情報処理システムであり、デバッガ１０８を備える。デバッガ１０８は、デバッガシステム１０２上で動作するデバッグプログラムであり、ユーザからの指示を受け付けて、マルチプロセッサ１０１に対してデバッグに関する指示を行い、デバッグの結果等を出力する。
【００１５】
マルチプロセッサ１０１は、デバッグ制御部１０３と、コア０＿１０４と、コア１＿１０５と、コア２＿１０６と、コア３＿１０７とを備える。尚、コアの数は４個である必要はなく、少なくとも２個以上であればよい。デバッグ制御部１０３は、デバッグ用コアであるコア０＿１０４の内部のレジスタ情報を参照及び更新可能に接続されている。デバッグ制御部１０３は、コア０＿１０４内で動作するプログラムのデバッグを行うために、コア０＿１０４を制御する。デバッグ制御部１０３は、複数のコアのうちデバッグ対象である第１のコア内のレジスタ情報をデバッグ用コアに転送する。
【００１６】
コア０＿１０４からコア３＿１０７は、それぞれ、内部のレジスタ、プログラムカウンタ、ステータスレジスタ等にレジスタ情報を格納している。レジスタ情報は、コア固有データと呼ぶものとする。コア０＿１０４からコア３＿１０７は、リングバスによりリング状に接続されている。
【００１７】
図２は、本実施の形態１にかかるマルチプロセッサ１０１のコア０＿１０４の内部構成を示すブロック図である。コア０＿１０４は、レジスタ情報１０４０と、ブレークポイント１０４４と、Ｉ／Ｆ０＿３０１とを備える。レジスタ情報１０４０は、上述した通り、レジスタ１０４１、プログラムカウンタ（ＰＣ）１０４２及びステータスレジスタ１０４３等に格納された値である。また、デバッグ制御部１０３は、レジスタ１０４１、ＰＣ１０４２及びステータスレジスタ１０４３に対して参照及び更新が可能に接続されている。
【００１８】
ブレークポイント１０４４は、デバッグ開始前に設定されるプログラムの途中停止箇所の命令アドレスを格納する領域である。Ｉ／Ｆ０＿３０１は、受信バッファ３０１１及び送信バッファ３０１２を備える。受信バッファ３０１１は、隣接する他のコア（例えば、コア３＿１０７）から転送される固有データを受信し、一時的に保持する記憶領域である。送信バッファ３０１２は、コア０＿１０４の固有データ、すなわち、レジスタ情報１０４０を隣接する他のコア（例えば、コア１＿１０５）へ転送するために一時的に保持する記憶領域である。つまり、コア０＿１０４は、レジスタ情報１０４０を転送する際には、レジスタ１０４１、ＰＣ１０４２及びステータスレジスタ１０４３に格納されたレジスタ情報１０４０を送信バッファ３０１２に格納する。そして、受信バッファ３０１１に格納されたレジスタ情報をレジスタ１０４１、ＰＣ１０４２及びステータスレジスタ１０４３に上書き保存する。
【００１９】
尚、コア１＿１０５、コア２＿１０６及びコア３＿１０７の内部構成は、デバッグ制御部１０３がレジスタ情報を参照及び更新可能に接続されていない点を除いて、図２と同様であるため、図示及び説明を省略する。
【００２０】
図３は、本実施の形態１にかかるマルチプロセッサ１０１のコア間のリングバスの構成を示すブロック図である。コア０＿１０４、コア１＿１０５、コア２＿１０６及びコア３＿１０７のそれぞれは、バスのインタフェースであるＩ／Ｆ０＿３０１、Ｉ／Ｆ１＿３０２、Ｉ／Ｆ２＿３０３及びＩ／Ｆ３＿３０４を備えている。具体的には、Ｉ／Ｆ０＿３０１は、Ｉ／Ｆ１＿３０２及びＩ／Ｆ３＿３０４と接続され、Ｉ／Ｆ１＿３０２は、Ｉ／Ｆ０＿３０１及びＩ／Ｆ２＿３０３と接続され、Ｉ／Ｆ２＿３０３は、Ｉ／Ｆ１＿３０２及びＩ／Ｆ３＿３０４と接続され、Ｉ／Ｆ３＿３０４は、Ｉ／Ｆ０＿３０１及びＩ／Ｆ２＿３０３と接続されている。つまり、各コアは、バスのＩ／Ｆによりリング状に隣のコアと接続されている。そして、各コアの固有データは、図３の矢印の方向へ転送される。尚、矢印の方向は例示であり、逆方向でも構わない。また、コアの接続順序もこれに限定されない。
【００２１】
各コアは、デバッグ制御部１０３からコアの固有データの入れ替え指示を受け付けると、それぞれ隣接する一方のコアへ所定の順序で自己の固有データを転送する。具体的には、コア０＿１０４の固有データは、Ｉ／Ｆ０＿３０１の送信バッファを介してＩ／Ｆ１＿３０２の受信バッファへ転送される。また、コア１＿１０５の固有データは、Ｉ／Ｆ１＿３０２の送信バッファを介してＩ／Ｆ２＿３０３の受信バッファへ転送される。また、コア２＿１０６の固有データは、Ｉ／Ｆ２＿３０３の送信バッファを介してＩ／Ｆ３＿３０４の受信バッファへ転送される。また、コア３＿１０７の固有データは、Ｉ／Ｆ３＿３０４の送信バッファを介してＩ／Ｆ０＿３０１の受信バッファへ転送される。そして、各コアは、各Ｉ／Ｆの受信バッファに格納された固有データを内部のレジスタに格納する。
【００２２】
図４は、本実施の形態１にかかるデバッグ処理の流れを示すフローチャートである。図４では、各種のイベントは矢印で連結されており、矢印の向きにしたがって時系列でイベントが生じることを示している。尚、図４では、個々のイベントを、そのイベントが起きる場所により、デバッガ１０８とデバッグ制御部１０３、コア０＿１０４に分類している。
【００２３】
デバッグ時にプログラムが取り得るプログラムの実行状態にはモードがあり、具体的にはプログラムが実行中である実行モードと、デバッグ中のデバッグモードがある。図４の例では、デバッガ１０８からフローが開始されるためモードは、デバッグモードである。
【００２４】
また、デバッグ時の作業には一般的に、（１）ブレークポイントの設定、（２）デバッグ対象のコアの変更、（３）ステップ実行、及び（４）プログラムの再開がある。そして、（１）から（４）のそれぞれにおいて、コアの情報の参照及び更新（読み出し及び書込み）が行われる。
【００２５】
ここで、（２）デバッグ対象のコアの変更とは、デバッガ１０８が操作するコアをデバッグ作業者が指定したコアに変更することである。デバッグに際しては、まずこの変更を行なって、どのコア上で動作するプログラムの箇所をデバッグするか決め、しかるのちに当該コアにステップ実行の処理を行なわせたり、ブレークポイントを設定して、当該コアによるプログラムの実行をブレークポイントまで進めさせたりする。図４のフローはその一例である。
【００２６】
（１）ブレークポイントの設定
プログラムをある命令アドレスで停止させる場合、各コアにブレークポイントを設定する。具体的には、まず、デバッガ１０８は、デバッグ作業者からプログラム内のある命令アドレスの指定を受け付けて、その命令アドレスをブレークポイントに設定する指示（ブレークポイント設定指示）をデバッグ制御部１０３へ出力する（２００）。デバッグ制御部１０３は、ブレークポイント設定指示に応じて各コアのブレークポイント１０４４に命令アドレスを書き込み、ブレークポイントの設定を行う（２１０）。
【００２７】
その後、デバッガ１０８は、デバッグ作業者からの指示に応じてプログラムを実行する指示（プログラム実行指示）をデバッグ制御部１０３へ出力する（２０１）。デバッグ制御部１０３は、モードを実行モードに移行し（２１１）、コア０＿１０４でプログラムを実行させる（２２０）。このとき、他のコア１＿１０５からコア３＿１０７においてもプログラムが並列実行される。
【００２８】
コア０＿１０４で動作しているプログラムがブレークポイントの命令アドレスに到達したとき、コア０＿１０４は停止し（２２１）、デバッグ制御部１０３へ停止したことを通知する。通知を受けたデバッグ制御部１０３は、モードをデバッグモードに移行し（２１２）、全てのコアを停止させ、デバッガ１０８へ停止したことを通知する。
【００２９】
通知を受けたデバッガ１０８は、デバッグ制御部１０３を介して停止したコア０＿１０４のレジスタ情報を参照及び更新する（２０２）。
【００３０】
（２）デバッグ対象のコアの変更
デバッグ対象のコアをコア０＿１０４とは異なるコアに変更する場合、デバッグ対象のコアの固有データをコア０＿１０４へ転送する。これにより、デバッグ制御部１０３に接続されていないコアで動いているプログラムの箇所のデバッグが可能になる。
【００３１】
具体的には、デバッガ１０８は、デバッグ作業者からの指示に応じてデバッグ対象となるコアを変更する指示（デバッグ対象変更指示）をデバッグ制御部１０３へ出力する（２０３）。その指示を受けてデバッグ制御部１０３は、コアのデータの入替えを行なう（２１３）。尚、コアデータの入替え方法の詳細については後述する。この入替えの結果、デバッガ１０８は、デバッグ制御部１０３を介して停止したコア０＿１０４のレジスタ情報を参照及び更新する（２０４）。この時、コア０＿１０４のレジスタ情報は、デバッグ対象のコアのレジスタ情報となっている。
【００３２】
（３）ステップ実行
ステップ実行を行なう場合、デバッガ１０８は、デバッグ作業者からの指示に応じて、ステップ実行の指示（ステップ実行指示）をデバッグ制御部１０３へ出力する（２０５）。その指示を受けてデバッグ制御部１０３は、ステップ実行するステップ数を設定し、実行モードへ移行する（２１４）。コア０＿１０４は、２１４で設定したステップ数だけプログラムを実行（２２２）し、その後、停止し（２２３）、デバッグ制御部１０３へ停止したことを通知する。
【００３３】
通知を受けたデバッグ制御部１０３は、モードをデバッグモードへ移行し（２１５）、デバッガ１０８へデバッグモードに移行したことを通知する。通知を受けたデバッガ１０８は、デバッグ制御部１０３を介して、ステップ実行後のコア０＿１０４のレジスタ情報を参照及び更新する（２０６）。
【００３４】
（４）プログラムの再開
プログラムを再開させる場合、デバッガ１０８は、デバッグ作業者からの指示に応じて、プログラムの再開の指示（プログラム再開指示）をデバッグ制御部１０３へ出力する（２０７）。その指示を受けてデバッグ制御部１０３は、実行モードへ移行（２１６）し、コア０＿１０４からコア３＿１０７にプログラムの実行を再開させる（２２４）。
【００３５】
コア０＿１０４で動作しているプログラムがブレークポイントの命令アドレスに到達したとき、コア０＿１０４は停止し（２２５）、デバッグ制御部１０３へ停止したことを通知する。通知を受けたデバッグ制御部１０３は、モードをデバッグモードに移行し（２１７）、全てのコアを停止させ、デバッガ１０８へ停止したことを通知する。
【００３６】
通知を受けたデバッガ１０８は、デバッグ制御部１０３を介して、コア０＿１０４のレジスタ情報を参照及び更新する（２０８）。尚、２２５でブレークポイントに到達しなければ、コア０＿１０４からコア３＿１０７はプログラムの実行終了まで動作を続ける。この処理を繰り返すことで、コア０＿１０４にデバッグ対象のコアの固有データを転送する処理を実現する。
【００３７】
図５は、本実施の形態１にかかるプロセッサのコアのデータ入れ替え処理の流れを示すフローチャートである。図５は、図４の２１３のコアデータ入れ替え処理に相当する。まず、デバッグ制御部１０３は、コア０＿１０４のレジスタ情報１０４０を参照し、デバッグ対象のコアの固有データであるか否かを判定する（４０１）。ここで、レジスタ情報１０４０内には、元のコアの識別情報が含まれるものとする。そして、デバッグ対象のコアの固有データでないと判定した場合、コア０＿１０４は、各コアに対して隣接するコアへ固有データを転送するように指示する（４０２）。そして、４０１へ戻る。４０１において、デバッグ対象のコアの固有データであると判定した場合、デバッグ制御部１０３から参照及び更新可能なレジスタ情報が、デバッグ対象のコアであるため、コアデータ入れ替え処理を終了する。つまり、コア０＿１０４にデバッグ対象のコアの固有データが転送されるまで、リング状に接続されたコア間で固有データが隣のコアへ転送され、バケツリレーのようにデバッグ対象のコアの固有データがコア０＿１０４へ転送される。
【００３８】
このように、本実施の形態では、複数のコアのうち一つのデバッグ用コアに対してデバッグ制御部がレジスタ情報を参照及び更新可能である。そして、コア同士をリング状に接続し、コア固有のデータであるレジスタ情報をコア間で転送可能としている。そのため、デバッグ制御部が参照等できないコアのレジスタ情報であっても、デバッグ用コアへ順次転送することで、デバッグ用コア上で実質的にデバッグ対象のコア上で動作するプログラムの箇所のデバッグを実現できる。そして、デバッグ制御部が一つで良いため、コア数が多い場合であっても、プロセッサの実装サイズを小さく抑えることができる。
【００３９】
尚、本実施の形態は次のように表現することもできる。すなわち、マルチプロセッサは、複数のコアと、デバッグ制御部と、を備える。前記複数のコアのうち一部は、前記デバッグ制御部からレジスタ情報を参照及び更新可能に接続されたデバッグ用コアである。前記デバッグ制御部は、前記複数のコアのうちデバッグ対象である第１のコア内のレジスタ情報を、前記デバッグ用コアに転送する。これにより、プロセッサコアの数の増加に対して、実装サイズの増加を抑制することができる。
【００４０】
また、前記デバッグ用コアは、前記転送されたレジスタ情報を用いて、前記第１のコアで実行対象のプログラムのデバッグを行う。これにより、実質的に第１のコアでのデバッグを行うことができる。
【００４１】
前記複数のコアは、リング状に接続され、前記デバッグ制御部は、前記デバッグ用コア内のレジスタ情報が、デバッグ対象の前記第１のコアのものでない場合、当該レジスタ情報を当該デバッグ用コアと隣接するコアへ転送する。これにより、デバッグ制御部が直接、参照及び更新できないレジスタ情報であってもデバッグ用コアを介して参照及び更新することができる。
【００４２】
＜実施の形態２＞
本実施の形態２は、上述した実施の形態１の改良例である。本実施の形態２にかかるマルチプロセッサは、退避領域をさらに備え、前記デバッグ制御部は、前記デバッグ用コア内のレジスタ情報を前記退避領域へ転送した後に、前記第１のコア内のレジスタ情報を、前記デバッグ用コアに転送するものである。これにより、実施形態１と比べて、データ入れ替え処理時間を均一化できるため、デバッグ時の動作の平均速度を高速化できる。
【００４３】
図６は、本実施の形態２にかかるマルチプロセッサ１０１ａ及びデバッガシステム１０２の構成を示すブロック図である。マルチプロセッサ１０１ａは、デバッグ制御部１０３と、コア０＿１０４と、コア１＿１０５と、コア２＿１０６と、コア３＿１０７と、退避領域５０１とを備える。退避領域５０１は、コア固有データであるレジスタ情報を保持することが可能な記憶領域である。ここで、コア０＿１０４からコア３＿１０７と退避領域５０１とは、それぞれがバスで接続されている。つまり、任意のコア間のコア固有データの転送が可能であり、任意のコアと退避領域５０１との間のコア固有データの転送が可能である。
【００４４】
尚、デバッグ時の処理フローは概ね実施の形態１の図４と同等であるが、２１３のコアのデータ入れ替え処理が異なる。図７は、本実施の形態２にかかるプロセッサのコアのデータ入れ替え処理の流れを示すフローチャートである。図７は、退避領域５０１を用いて、コア０＿１０４の固有データとデバッグ対象のコアの固有データとを交換する手順である。
【００４５】
まず、デバッグ制御部１０３は、接続されているコア０＿１０４のレジスタ情報がデバッグ対象のコアの固有データであるか否かを判定し、データの入れ替えを行うか否かを判定する（６０１）。データの入れ替えを行うと判定した場合、デバッグ制御部１０３は、コア０＿１０４内のレジスタ情報を退避領域５０１へコピーして、データを退避する（６０２）。次に、デバッグ制御部１０３は、デバッグ対象のコアのレジスタ情報をコア０＿１０４へコピーするように指示を行う（６０３）。つまり、デバッグ制御部１０３は、デバッグ対象のコアの固有データをデバッグ用コアへ転送する。そして、デバッグ制御部１０３は、退避領域５０１に格納されているデータをデバッグ対象のコアへコピーするように指示を行う（６０４）。つまり、退避データをデバッグ対象のコアへ転送する。尚、６０１において、コア０＿１０４のレジスタ情報がデバッグ対象のコアの固有データであると判定した場合、データ入れ替え処理を終了する。
【００４６】
このように、本実施の形態２では、デバッグ用コアの元の固有データを退避する退避領域５０１と、各コア同士の間を接続し、各コアと退避領域５０１との間を接続するバスを有する。上述した実施の形態１では、コア数が多く、かつ、デバッグ対象のコアが、デバッグ用コアから離れた場所に存在する場合に、データの入れ替え回数（転送回数）が多くなり、デバッグ時の動作が遅くなる可能性がある。これに対し、本実施の形態２では、データの入れ替え処理におけるデータ転送回数が３回となるため、データ入れ替え処理時間を均一化できる。よって、実施の形態１と比べてデバッグ時の動作の平均速度を高速化できる。
【００４７】
＜実施の形態３＞
本実施の形態３は、上述した実施の形態２の改良例である。本実施の形態３にかかるデバッグ制御部は、デバッグ対象を前記複数のコアのうち第２のコアに変更した場合、前記デバッグ用コア内のレジスタ情報を前記第１のコアへ転送し、前記第２のコア内のレジスタ情報を、前記デバッグ用コアに転送するものである。これにより、実施形態２と比べて、コアのデータ入れ替え処理を高速化できる。
【００４８】
また、前記デバッグ制御部は、デバッグ対象を前記第２のコアに変更した場合、前記デバッグ用コア内のレジスタ情報が書き換えられているか否かを判定し、前記デバッグ用コア内のレジスタ情報が書き換えられていると判定した場合に、当該レジスタ情報を前記第１のコアへ転送する。これにより、レジスタ情報が書き換えられていない場合には、レジスタ情報の転送を行わないため、転送回数を減少することができ、さらに高速化できる。
【００４９】
尚、構成図は実施の形態２の図６と同様であり、デバッグ時の処理フローは概ね実施の形態１の図４と同等である。但し、図４の２１３のコアのデータ入れ替え処理、並びに、２１１及び２１６の実行モード移行時の処理が異なる。
【００５０】
上述した実施の形態２では、デバッグ対象のコアの変更時に、図７の６０２、６０３及び６０４の３回のデータ転送が常に必要となる。つまり、実施の形態２では、デバッグ用コアのコア０＿１０４と、デバッグ対象のコアとの間でデータを交換していた。これに対し、本実施の形態３では、デバッグ対象のコアを複数回入れ替える場合を想定する。まず、コア０＿１０４の固有データを退避領域５０１に退避しておき、デバッグ対象のコアの固有データをコア０＿１０４へ転送する。そして、コア０＿１０４のレジスタ情報を読み書きした後に、当該レジスタ情報であるコア固有データを元のデバッグ対象のコアへ書き戻す。
【００５１】
図８は、本実施の形態３にかかるマルチプロセッサ１０１ａのコアのデータ入れ替え処理の流れを示すフローチャートである。まず、デバッグ制御部１０３は、デバッグ対象がコア０＿１０４であるか否かを判定する（７０１）。デバッグ対象がコア０＿１０４であれば７０２へ進み、異なれば７０６へ進む。
【００５２】
７０１においてデバッグ対象がコア０＿１０４である場合、デバッグ制御部１０３は、コア０＿１０４内のレジスタ情報がコア０＿１０４の固有データであるか否かを判定する（７０２）。コア０＿１０４内のレジスタ情報がコア０＿１０４の固有データであれば、当該処理を終了する。その理由は、コア０＿１０４にあるレジスタ情報がコア０＿１０４の固有データであり、コア０＿１０４の固有データでデバッグを行なうことができるため、入れ替える必要がないためである。
【００５３】
一方、７０２において、コア０＿１０４内のレジスタ情報がコア０＿１０４の固有データでない場合、デバッグ制御部１０３は、コア０＿１０４のレジスタ情報に対してデバッガ１０８から書き換えているか否かを判定する（７０３）。ここで、デバッガ１０８は、デバッグ制御部１０３を介してコア０＿１０４のレジスタ情報の書き換え（更新）を行う。そのため、デバッグ制御部１０３は、レジスタ情報の書き換え有無を判定することができる。
【００５４】
７０３において、書き換えていなければ、７０５へ進む。その理由は、書き換えられていなければ、コア０＿１０４にあるレジスタ情報と、元のデバッグ対象のコアのレジスタ情報とが同じであるので、書き戻す必要はなくデバッグが行えるためである。
【００５５】
一方、７０３において、コア０＿１０４のレジスタ情報に対してデバッガ１０８から書き換えている場合、デバッグ制御部１０３は、コア０＿１０４で書き換えられたレジスタ情報を元のデバッグ対象のコアへ転送して、戻す（７０４）。
【００５６】
その後、デバッグ制御部１０３は、退避領域５０１に退避しておいたコア０＿１０４のレジスタ情報（固有データ）をコア０＿１０４へ転送する（７０５）。
【００５７】
続いて、７０１においてデバッグ対象がコア０＿１０４でない場合、デバッグ制御部１０３は、コア０＿１０４内のレジスタ情報がコア０＿１０４の固有データであるか否かを判定する（７０６）。コア０＿１０４内のレジスタ情報がコア０＿１０４の固有データであれば、７１０へ進み、固有データでなければ７０７へ進む。
【００５８】
７０６において、コア０＿１０４内のレジスタ情報がコア０＿１０４の固有データでない場合、デバッグ制御部１０３は、コア０＿１０４のレジスタ情報に対してデバッガ１０８から書き換えているか否かを判定する（７０７）。
【００５９】
７０７において、書き換えていなければ、７０５へ進む。その理由は、書き換えられていなければ、コア０＿１０４にあるレジスタ情報と、元のデバッグ対象のコアのレジスタ情報とが同じであるので、書き戻す必要はなくデバッグが行えるためである。
【００６０】
一方、７０７において、コア０＿１０４のレジスタ情報に対してデバッガ１０８から書き換えている場合、デバッグ制御部１０３は、コア０＿１０４で書き換えられたレジスタ情報を元のデバッグ対象のコアへ転送して、戻す（７０８）。
【００６１】
その後、デバッグ制御部１０３は、退避領域５０１に退避しておいたコア０＿１０４のレジスタ情報（固有データ）をコア０＿１０４へ転送する（７０９）。
【００６２】
７０６において、コア０＿１０４内のレジスタ情報がコア０＿１０４の固有データである場合、デバッグ制御部１０３は、コア０＿１０４のレジスタ情報を退避領域５０１へコピーして退避する（７１０）。その後、７０９へ進む。
【００６３】
ここで、図８のフローを用いたデバッグの例を説明する。具体的には、コア１＿１０５をデバッグ対象にしてコア１＿１０５の固有データを読み出し、その後、コア２＿１０６をデバッグ対象にしてコア２＿１０６の固有データを読み出す例である。
【００６４】
まず、７０１では、デバッグ対象がコア１＿１０５であるため７０６へ進む。次に、７０６では、コア０＿１０４にあるレジスタ情報がコア０＿１０４の固有データであるので７１０へ進む。そして、７１０において、コア０＿１０４の固有データが退避領域５０１へ退避される。
【００６５】
その後、７０９へ進み、デバッグ対象のコア１＿１０５の固有データがコア０＿１０４へ転送される。これにより、コア１＿１０５の固有データを対象にコア０＿１０４に接続されたデバッグ制御部１０３を介してデバッガ１０８が固有データの読み出しを行なうことが出来る。そして、ここまでのデータ転送の回数は２回となる。
【００６６】
その後、コア２＿１０６をデバッグ対象にすると、７０１では、デバッグ対象がコア２＿１０６であるので７０６へ進む。そして、コア０＿１０４にあるレジスタ情報がコア１＿１０５の固有データであるので、７０７へ進む。
【００６７】
７０７では、コア０＿１０４にあるコア１＿１０５の固有データは書き換えていないため、７０９へ進む。そして、７０９において、コア２＿１０６の固有データがコア０＿１０４へ転送される。
【００６８】
これにより、コア２＿１０６の固有データを対象にコア０＿１０４に接続されたデバッグ制御部１０３を介したデバッガ１０８が固有データの読み出しを行なうことが出来る。そして、デバッグ対象をコア１＿１０５からコア２＿１０６へ変更するときのデータ転送の回数は１回となる。
【００６９】
図８のフローでデバッグ対象のコアのデータを入れ替えた場合、コア０＿１０４の固有データは退避領域５０１だけにしかない。よって、プログラムを再実行するためには、退避データをコア０＿１０４へ転送する必要がある。そこで、図９は、本実施の形態３にかかるプロセッサのプログラムの再実行前の処理の流れを示すフローチャートである。
【００７０】
まず、デバッグ制御部１０３は、コア０＿１０４のレジスタ情報に対してデバッガ１０８から書き換えているか否かを判定する（８０１）。８０１において、書き換えていなければ、８０３へ進む。一方、８０１において、コア０＿１０４のレジスタ情報に対してデバッガ１０８から書き換えている場合、デバッグ制御部１０３は、コア０＿１０４で書き換えられたレジスタ情報を元のデバッグ対象のコアへ転送して、戻す（８０２）。
【００７１】
その後、デバッグ制御部１０３は、退避領域５０１に退避しておいたコア０＿１０４のレジスタ情報（固有データ）をコア０＿１０４へ転送する（８０３）。これにより、全てのコアの固有データを戻すことができ、プログラムの再実行が可能になる。
【００７２】
上述したように、実施の形態２では、デバッグ対象のコアの固有データとコア０＿１０４の固有データとを入れ替えるために、常に３回のデータ転送を行なっている。これに対し、本実施の形態３では、コア内のレジスタ情報を参照及び更新する場合のみであれば、退避領域５０１への転送と、デバッグ対象のコアからコア０＿１０４への転送の２回で十分である。また、さらに別のデバッグ対象のコアに変更する場合、コア０＿１０４にあるデバッグ対象のコアの固有データに書き換えがなければ１回の転送で済み、また、書き換えがあっても２回の転送で済む。
【００７３】
但し、プログラムを再実行させる場合、退避領域５０１からコア０＿１０４へのデータ転送が必要になり、コア０＿１０４にあるデバッグ対象のコアの固有データに書き換えがなければ１回の転送、また、書き換えがあれば２回の転送が追加で必要になる。つまり、デバッグ対象を変更し、プログラムを再実行する場合では、最大４回のデータ転送が必要にある場合がある。
【００７４】
本実施の形態３は、プログラム停止時において、複数のコア内のデータを参照する場合に有効であり、データの転送回数を実施の形態２よりも削減することで、デバッグ時の動作を高速化することができる。
【００７５】
＜実施の形態４＞
本実施の形態４は、上述した実施の形態１から３の変形例である。すなわち、実施の形態１乃至３のいずれかのマルチプロセッサと、前記複数のコアの夫々に対応し、各コア内のレジスタ情報を記憶するための複数の退避領域を有するメモリと、を備えるマルチプロセッサシステムである。つまり、コアのレジスタ情報の退避領域に既存のメモリを利用するものである。
【００７６】
図１０は、本実施の形態４にかかるマルチプロセッサシステム１００の構成を示すブロック図である。マルチプロセッサシステム１００は、マルチプロセッサ１０１ｂと、メモリ９０１とを備える。マルチプロセッサ１０１ｂは、デバッグ制御部１０３と、コア０＿１０４と、コア１＿１０５と、コア２＿１０６と、コア３＿１０７とを備える。コア０＿１０４からコア３＿１０７とメモリ９０１とは、それぞれがバスで接続されている。
【００７７】
メモリ９０１は、マルチプロセッサ１０１ｂに対する外付けのメモリ装置であり、プログラム等（不図示）が格納されている。さらに、メモリ９０１は、コア０データ９０２、コア１データ９０３、コア２データ９０４、及びコア３データ９０５が格納されている。コア０データ９０２は、コア０＿１０４のレジスタ情報がコピーされたデータである。同様に、コア１データ９０３はコア１＿１０５のレジスタ情報が、コア２データ９０４はコア２＿１０６のレジスタ情報が、コア３データ９０５はコア３＿１０７のレジスタ情報が、それぞれコピーされたデータである。
【００７８】
デバッグ制御部１０３は、デバッグ時に各コアに対してレジスタ情報をメモリ９０１へ退避することを指示する。それにより、デバッグ制御部１０３は、コア０＿１０４を介してメモリ９０１内のコア０データ９０２からコア３データ９０５に参照及び更新をすることができる。
【００７９】
＜その他の実施の形態＞
また、上述の実施の形態では、本発明をハードウェアの構成として説明したが、本発明は、これに限定されるものではない。本発明は、任意の処理を、ＣＰＵ（Central Processing Unit）等のプロセッサにコンピュータプログラムを実行させることにより実現することも可能である。
【００８０】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００８１】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【００８２】
１００  マルチプロセッサシステム
１０１  マルチプロセッサ
１０１ａ  マルチプロセッサ
１０１ｂ  マルチプロセッサ
１０２  デバッガシステム
１０３  デバッグ制御部
１０４  コア０
１０５  コア１
１０６  コア２
１０７  コア３
１０８  デバッガ
３０１  Ｉ／Ｆ０
３０２  Ｉ／Ｆ１
３０３  Ｉ／Ｆ２
３０４  Ｉ／Ｆ３
１０４０  レジスタ情報
１０４１  レジスタ
１０４２  プログラムカウンタ（ＰＣ）
１０４３  ステータスレジスタ
１０４４  ブレークポイント
３０１１  受信バッファ
３０１２  送信バッファ
５０１  退避領域
９０１  メモリ
９０２  コア０データ
９０３  コア１データ
９０４  コア２データ
９０５  コア３データ
【図１】
2018088048.tif 000003
【図２】
2018088048.tif 000004
【図３】
2018088048.tif 000005
【図４】
2018088048.tif 000006
【図５】
2018088048.tif 000007
【図６】
2018088048.tif 000008
【図７】
2018088048.tif 000009
【図８】
2018088048.tif 000010
【図９】
2018088048.tif 000011
【図１０】
2018088048.tif 000012