(57)【要約】【課題】共有メモリ型マルチコアプロセッサ上で動作するプログラムにおいて、他のコアプロセッサの命令実行を停止することなく、ソフトウェアブレークポイントからコアプロセッサのプログラム実行を開始する。【解決手段】エミュレーション命令レジスタに被置換命令を格納するステップと、エミュレーション命令レジスタからの命令フェッチを有効にするステップと、被置換命令をステップ実行するステップと、エミュレーション命令レジスタからの命令フェッチを無効にするステップと、プログラムを実行するステップとを含む。ソフトウェアブレークポイントを解除せずに、被置換命令が設定されているエミュレーション命令レジスタから命令をフェッチしてステップ実行させて、プログラムを実行することにより、他のコアプロセッサの命令実行を停止しないので、システム全体のプログラム実行の性能が低下しない。【選択図】図１
2007122547.tif 000002
【特許請求の範囲】
【請求項１】
エミュレーション命令レジスタからの命令フェッチか共有メモリからの命令フェッチかを切替える手段を備える共有メモリ型マルチコアプロセッサにおいて、前記マルチコアプロセッサ上で動作し、実行開始アドレスにソフトウェアブレークポイントが設定されているプログラムをデバッグする際、前記エミュレーション命令レジスタに被置換命令を格納するステップと、前記エミュレーション命令レジスタからの命令フェッチを有効にするステップと、前記命令フェッチを有効にした後前記被置換命令をステップ実行するステップと、前記エミュレーション命令レジスタからの命令フェッチを無効にするステップと、前記命令フェッチを無効にした後プログラムを実行するステップとを含むプログラム実行方法。
【請求項２】
前記エミュレーション命令レジスタからの命令フェッチを有効または無効にするステップは、命令のステップ実行を制御するステップ実行制御ビットの値に応じて命令フェッチの有効または無効を設定する請求項１記載のプログラム実行方法。
【請求項３】
ソフトウェアブレークポイントからプログラム実行を開始可能とした複数のコアプロセッサと、前記コアプロセッサで共有される共有メモリとを備えた共有メモリ型マルチコアプロセッサであって、被置換命令を格納するエミュレーション命令レジスタと、前記共有メモリからの命令および前記エミュレーション命令レジスタからの命令をフェッチするデバッガと、命令のステップ実行を制御するステップ実行制御ビットと、前記ステップ実行制御ビットの値に応じて、命令フェッチ先として前記共有メモリか前記エミュレーション命令レジスタのいずれかを選択する命令フェッチ部とを備えた共有メモリ型マルチコアプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリ型マルチコアプロセッサ上で動作するプログラムのデバッグ方式において、プログラム実行方法および共有メモリ型マルチコアプロセッサに関する。
【背景技術】
【０００２】
共有メモリ型マルチコアプロセッサにおけるデバッグ方式で、コアプロセッサがソフトウェアブレークポイントからプログラム実行を開始する方法については、様々な方法が提案されている。例えば図２は特許文献１に見られるプログラム実行方法である。この方法では、実行を開始するコアプロセッサに一時的に共有メモリを独占的に占有させてから(Ｓ１０)、ソフトウェアブレークポイントを一時解除して(Ｓ１１)、被置換命令をステップ実行し(Ｓ１２)、ソフトウェアブレークポイントを再度設定して(Ｓ１３)、共有メモリを開放して(Ｓ１４)、プログラムを実行する(Ｓ１５)。また、Ｓ１０の代わりに他のコアプロセッサの動作を停止させて、ソフトウェアブレークポイントを一時解除して、被置換命令をステップ実行した後に、Ｓ１４の代わりに他のコアプロセッサの動作を再開させて、プログラムを実行する方法もある。
【０００３】
このような従来方法によれば、ソフトウェアブレークポイントを一時解除して被置換命令をステップ実行している間に、他のコアプロセッサの命令実行が停止させられるので、ソフトウェアブレークポイントを一時解除している間に、他のコアプロセッサがソフトウェアブレークポイントを通過してしまう問題が発生しない。
【特許文献１】特開平５−３２４３９３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、これらの方法では、コアプロセッサに一時的に共有メモリを独占的に占有させるため、他のコアプロセッサの命令実行が一時的に停止させられ、システム全体のプログラム実行の性能が低下することになる。
【０００５】
したがって、本発明の目的は、共有メモリ型マルチコアプロセッサ上で動作するプログラムにおいて、ソフトウェアブレークポイントを一時解除して被置換命令をステップ実行するときに、他のコアプロセッサの命令実行を停止すると、システム全体のプログラム実行の性能が低下するため、他のコアプロセッサの命令実行を停止することなく、ソフトウェアブレークポイントからコアプロセッサのプログラム実行を開始するプログラム実行方法および共有メモリ型マルチコアプロセッサを提供することである。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明の請求項１記載のプログラム実行方法は、エミュレーション命令レジスタからの命令フェッチか共有メモリからの命令フェッチかを切替える手段を備える共有メモリ型マルチコアプロセッサにおいて、前記マルチコアプロセッサ上で動作し、実行開始アドレスにソフトウェアブレークポイントが設定されているプログラムをデバッグする際、前記エミュレーション命令レジスタに被置換命令を格納するステップと、前記エミュレーション命令レジスタからの命令フェッチを有効にするステップと、前記命令フェッチを有効にした後前記被置換命令をステップ実行するステップと、前記エミュレーション命令レジスタからの命令フェッチを無効にするステップと、前記命令フェッチを無効にした後プログラムを実行するステップとを含む。
【０００７】
このように構成することで、デバッグする際に共有メモリ上の命令ではなく、エミュレーション命令レジスタにある被置換命令がステップ実行されるので、共有メモリ上に設定してあるソフトウェアブレークポイントを一時的に解除する必要がなくなる。
【０００８】
このため、従来のプログラム実行方法で用いられていた共有メモリのコアプロセッサによる独占的な利用が不要となり、他のコアプロセッサの命令実行が一時的に停止させられることがないので、システム全体のプログラム実行の性能が低下しない。
【０００９】
請求項２記載のプログラム実行方法は、請求項１記載のプログラム実行方法において、前記エミュレーション命令レジスタからの命令フェッチを有効または無効にするステップは、命令のステップ実行を制御するステップ実行制御ビットの値に応じて命令フェッチの有効または無効を設定する。
【００１０】
このように構成することで、ステップ実行を有効に設定すると同時に、エミュレーション命令レジスタからの命令フェッチを有効にすることができる。このため、命令フェッチの構成を簡略化することが可能となる。
【００１１】
請求項３記載の共有メモリ型マルチメモリプロセッサは、ソフトウェアブレークポイントからプログラム実行を開始可能とした複数のコアプロセッサと、前記コアプロセッサで共有される共有メモリとを備えた共有メモリ型マルチコアプロセッサであって、被置換命令を格納するエミュレーション命令レジスタと、前記共有メモリからの命令および前記エミュレーション命令レジスタからの命令をフェッチするデバッガと、命令のステップ実行を制御するステップ実行制御ビットと、前記ステップ実行制御ビットの値に応じて、命令フェッチ先として前記共有メモリか前記エミュレーション命令レジスタのいずれかを選択する命令フェッチ部とを備えた。
【００１２】
このように構成することで、請求項１と同様の効果が得られるとともに、ステップ実行を有効に設定すると同時に、エミュレーション命令レジスタからの命令フェッチを有効にすることができる。このため、パイプラインの命令フェッチ部を簡略化することが可能となる。
【発明の効果】
【００１３】
本発明によれば、共有メモリ型マルチコアプロセッサ上で動作するプログラムをデバッグする際に、ソフトウェアブレークポイントを一時解除することなく、ソフトウェアブレークポイントからプログラムを実行開始することができる。このことにより、ソフトウェアブレークポイントを一時解除することで他のコアプロセッサがソフトウェアブレークポイントを通過してしまう問題が発生しない。
【００１４】
さらに、ソフトウェアブレークポイントからステップ実行する間も、他のコアプロセッサの実行停止や共有メモリの独占的使用を行わないので、その間に他のコアプロセッサがプログラムを実行でき、システム全体のプログラム実行の性能が低下しない。
【００１５】
また本発明によれば、共有メモリ型マルチコアプロセッサの各コアプロセッサは、命令フェッチ先として共有メモリかエミュレーション命令レジスタのいずれかを選択する制御を、ステップ実行の制御ビットで行うため、パイプラインの命令フェッチ部を簡略化することが可能となる。
【発明を実施するための最良の形態】
【００１６】
本発明の実施形態について図面を参照して詳細に説明する。
【００１７】
図２は、本発明の実施形態のプログラム実行方法を適用する共有メモリ型マルチコアプロセッサの構成図である。図２に示すように、複数個のコアプロセッサ２２，２３と、これらのコアプロセッサで共有される共有メモリ１と、共有メモリ１とコアプロセッサ２２，２３をつなぐシステムバス２とで構成されている。
【００１８】
コアプロセッサ２２，２３は、命令をエミュレーションするためのエミュレーション命令レジスタ５，６と、デバッグ制御１１，１２と、パイプラインユニット１３，１４とから構成され、パイプラインユニット１３，１４は、命令フェッチ部１５，１６と、プログラムカウンタ１７，１８と、ステップ実行を制御するステップ実行制御ビット１９，２０とから構成される。
【００１９】
デバッガ２１は、コアプロセッサ２２，２３に内蔵されているデバッグ制御１１，１２と通信することで、コアプロセッサ２２，２３にあるエミュレーション命令レジスタ５，６への命令の格納を行うことができ、さらにパイプラインユニット１３，１４を制御して、ステップ実行や、プログラムの実行を行うことができる。
【００２０】
図４は、本発明の実施形態を適用した命令フェッチ部１５，１６の論理回路図である。
【００２１】
図４に示すように、マルチプレクサ回路６３は、エミュレーション命令レジスタ６０に格納されている命令とプログラムカウンタが指している共有メモリ６１の命令を入力として、ステップ実行制御ビット６２のスイッチによって出力を切替えている。スイッチが１の場合はエミュレーション命令レジスタ６０の命令を出力し、スイッチが０の場合は共有メモリ６１の命令を出力する。
【００２２】
次に本発明の実施形態を適用したパイプラインユニット１３，１４の命令実行を、図３のフローを使って説明する。
【００２３】
図３に示すように、パイプラインユニット１３，１４は、ステップ実行制御ビット１９，２０がセットされているかを判断し(Ｓ４０)、セットされていない場合は、共有メモリから命令をフェッチする(Ｓ４２)。パイプラインユニット１３，１４はステップ実行制御ビット１９，２０がセットされている場合はエミュレーション命令レジスタ５，６から命令をフェッチする(Ｓ４１)。
【００２４】
そしてパイプラインユニット１３，１４は、フェッチした命令を実行し(Ｓ４３)、ステップ実行制御ビット１９，２０がセットされているかを判断する(Ｓ４４)。ステップ実行制御ビットがセットされていない場合、パイプラインユニット１３，１４はプログラムカウンタをインクリメントした後に（Ｓ４５）、再度ステップ実行制御ビット１９，２０がセットされているかを判断する(Ｓ４０)。ステップ実行制御ビット１９，２０がセットされている場合、パイプラインユニット１３，１４はステップ実行の制御ビットをクリアした後(Ｓ４６)、プログラムをステップ実行の例外ハンドラへ分岐させる(Ｓ４７)。
【００２５】
通常は、ステップ実行の例外ハンドラにデバッガと通信するデバッグ用のプログラムを準備することで、ステップ実行後のデバッガによる制御が可能となる。一般的に、デバッグ用のプログラムは、図５に示されているフローをステップ実行の例外ハンドラで処理する。デバッグ用のプログラムは、ステップ実行の例外ハンドラへ分岐後、デバッガとの通信待ち状態になる(Ｓ５０)。デバッグ用のプログラムはデバッガからステップ実行の開始コマンドを受け取ると(Ｓ５１)、ステップ実行の制御ビットをセットし(Ｓ５２)、元のプログラムへ復帰する(Ｓ５３)。
【００２６】
そして、図７のフローに従って元のプログラムの命令、及びエミュレーション命令レジスタの命令を実行すると、再びステップ実行の例外ハンドラへ分岐し、デバッガとの通信待ち状態になる。
【００２７】
以上のような共有メモリ型マルチコアプロセッサ上で動作するプログラムにおいて、ソフトウェアブレークポイントから、ソフトウェアブレークポイントを解除しないで、プログラムの実行を開始する方法を説明する。
【００２８】
図１は本発明の実施形態における、ソフトウェアブレークポイントからプログラムを実行させるときの、デバッガ２１の制御に関するフローである。通常、デバッガ２１はソフトウェアブレークポイントを設定するときに、ソフトウェアブレークポイントの被置換命令とソフトウェアブレークポイントのアドレスを保持している。
【００２９】
図１および図２に示すように、コアプロセッサ２２，２３がソフトウェアブレークポイントからプログラムの実行を開始する場合、デバッガ２１は、デバッグ制御部１１，１２を介して保持していた被置換命令を、エミュレーション命令レジスタ５，６に設定する(Ｓ１)。
【００３０】
次にデバッガ２１は、エミュレーション命令レジスタ５，６からの命令フェッチを有効に設定する(Ｓ２）。本実施形態では、ステップ実行制御ビット１９，２０を設定することでエミュレーション命令レジスタ５，６からの命令フェッチが有効になる。
【００３１】
次にデバッガ２１は、コアプロセッサ２２，２３にステップ実行させることでエミュレーション命令レジスタ５，６に設定した被置換命令が実行される(Ｓ３)。
【００３２】
次にデバッガ２１は、エミュレーション命令レジスタ５，６からの命令フェッチを無効に設定する(Ｓ４）。本実施形態では、ステップ実行時に、コアプロセッサ２２，２３がステップ実行制御ビット１９，２０をクリアする。
【００３３】
最後に、デバッガ２１は、コアプロセッサ２２，２３に命令実行を開始させる(Ｓ５)。
【００３４】
以上のステップにより、共有メモリ１に設定してあるソフトウェアブレークポイントを解除することなく、ソフトウェアブレークポイントからプログラムの実行を開始することができる。
【００３５】
次に、以下で本発明の実施の形態におけるコアプロセッサ２２，２３が解決する課題について、他の実施形態のコアプロセッサの構成と比較しながら説明する。
【００３６】
図６は、エミュレーション命令レジスタから命令をフェッチする手段を備える他の実施形態のコアプロセッサからなる共有メモリ型マルチコアプロセッサの構成図である。
【００３７】
図２の本発明の実施形態における構成に加えて、コアプロセッサ３，４は、エミュレーションするアドレスを格納するエミュレーションアドレスレジスタ７，８と、エミュレーションを制御するエミュレーション制御ビット９，１０とを備えている。
【００３８】
図９は、他の実施形態のコアプロセッサ３，４における命令フェッチ部１５，１６の論理回路図である。
【００３９】
図９に示すように、論理回路５２はプログラムカウンタ５０の値とエミュレーションアドレスレジスタ５１の値を入力として論理積を出力し、論理回路５４は論理回路５２の出力とエミュレーション制御ビット５３を入力として論理積をマルチプレクサ回路５７のスイッチとして入力する。
【００４０】
マルチプレクサ回路５７は、エミュレーション命令レジスタ５５に格納されている命令とプログラムカウンタが指している共有メモリ５６の命令を入力として、スイッチによって出力を切替えている。スイッチが１の場合はエミュレーション命令レジスタ５５の命令を出力し、スイッチが０の場合は共有メモリ５６の命令を出力する。
【００４１】
よって、プログラムカウンタ５０の値とエミュレーションアドレスレジスタ５１の値が一致して、エミュレーション制御ビット５３がセットされていると、マルチプレクサ回路５７のスイッチは１になり、エミュレーション命令レジスタ５５に格納されている命令が実行されることになる。プログラムカウンタ５０の値とエミュレーションアドレスレジスタ５１の値が一致しない場合や、エミュレーション制御ビット５３がクリアされている場合は、共有メモリ５６の命令が実行される。
【００４２】
次に他の実施形態のコアプロセッサ３，４におけるパイプラインユニット１３，１４の命令実行を、図８のフローを使って説明する。
【００４３】
図６および図８に示すように、パイプラインユニット１３，１４は、プログラムカウンタ１７，１８の値がエミュレーションアドレスレジスタ７，８に一致しているかを判断する（Ｓ３０）。一致している場合はエミュレーション制御ビット９，１０がセットされているかを判断し(Ｓ３１)、一致していない場合は、共有メモリ１から命令をフェッチする(Ｓ３３)。パイプラインユニット１３，１４はエミュレーション制御ビット９，１０がセットされている場合はエミュレーション命令レジスタ５，６から命令をフェッチし(Ｓ３２)、エミュレーション制御ビット９，１０がセットされていない場合は、共有メモリ１から命令をフェッチする(Ｓ３３)。フェッチした命令を実行し(Ｓ３４)、ステップ実行制御ビット１９，２０がセットされているかを判断する(Ｓ３５)。ステップ実行制御ビット１９，２０がセットされていない場合、パイプラインユニット１３，１４はプログラムカウンタをインクリメントした後に（Ｓ３６）、再度プログラムカウンタ１７，１８の値がエミュレーションアドレスレジスタ７，８に一致しているかを判断する(Ｓ３０)。ステップ実行制御ビット９，１０がセットされている場合、パイプラインユニット１３，１４はステップ実行の制御ビット９，１０をクリアした後(Ｓ３６)、プログラムをステップ実行の例外ハンドラへ分岐させる(Ｓ３７)。
【００４４】
以上のような他の実施形態のコアプロセッサ３，４で構成される共有メモリ型マルチコアプロセッサ上で動作するプログラムにおいて、ソフトウェアブレークポイントから、ソフトウェアブレークポイントを解除しないで、プログラムの実行を開始する方法を説明する。
【００４５】
図７は図６の他の実施形態における、ソフトウェアブレークポイントからプログラムを実行させるときの、デバッガ２１の制御に関するフローである。
【００４６】
コアプロセッサ３，４がソフトウェアブレークポイントからプログラムの実行を開始する場合、デバッガ２１は、デバッグ制御部１１，１２を介してコアプロセッサ３，４のエミュレーションアドレスレジスタ７，８に保持しているブレークアドレスを設定する(Ｓ２０)。
【００４７】
次にデバッガ２１は、デバッグ制御１１，１２を介して保持していた被置換命令を、エミュレーション命令レジスタ５，６に設定する(Ｓ２１)。
【００４８】
次にコアプロセッサ３，４のエミュレーション制御ビット９，１０を、デバッグ制御部１１，１２を介してセットすることで、コアプロセッサ３，４のエミュレーション命令レジスタ５，６からの命令フェッチを有効にする(Ｓ２２)。
【００４９】
次にコアプロセッサ３，４でステップ実行することでエミュレーション命令レジスタ５，６に設定した被置換命令が実行される(Ｓ２３)。
【００５０】
そして、エミュレーション制御ビット９，１０をクリアしてから(Ｓ２４)、コアプロセッサ３，４に命令実行を開始させる(Ｓ２５)。
【００５１】
以上のステップにより、共有メモリ１に設定してあるソフトウェアブレークポイントを解除することなく、ソフトウェアブレークポイントからプログラムの実行を開始することができる。
【００５２】
本発明の実施形態のコアプロセッサ２２，２３と、他の実施形態のコアプロセッサ３，４を比べると、本発明の実施形態のコアプロセッサ２２，２３には次の効果あることが明らかである。
【００５３】
他の実施形態のコアプロセッサ３，４で必要であったエミュレーションアドレスレジスタ７，８と、エミュレーション制御ビット９，１０が、本発明の実施形態のコアプロセッサ２２，２３では不要になる。
【００５４】
また、図４と図９の命令フェッチ部１５，１６の論理回路図を比べると、本発明の実施形態によるコアプロセッサ２２，２３では、ステップ実行の制御ビット６２をマルチプレクサ回路６３のスイッチに用いることで、論理積回路５２，５４がなくなり簡略化できることがわかる。
【００５５】
また、図３と図８のパイプラインユニット１３，１４の命令実行のフローを比べると、本発明の実施形態によるコアプロセッサ２２，２３では、プログラムカウンタ１７，１８とエミュレーションアドレス７，８を比較する処理が不要になるため、命令実行までのクリティカルパスが短くなる。
【００５６】
さらに、図１と図７のデバッガ２１がソフトウェアブレークポイントからプログラムを実行する制御フローを比べると、本発明の実施形態によるコアプロセッサ２２，２３を用いることで、ブレークアドレスをエミュレーションアドレスレジスタに設定する処理を減らす効果がある。
【産業上の利用可能性】
【００５７】
本発明にかかる共有メモリ型マルチコアプロセッサのデバッグ方式は、命令のエミュレーション方法を有し、ソフトウェアブレークポイントからプログラムを実行する方法として有用である。
【図面の簡単な説明】
【００５８】
【図１】本発明の実施形態におけるソフトウェアブレークポイントからプログラムを実行するときのデバッガの制御フロー図である。
【図２】本発明の実施形態を適用した共有メモリ型マルチコアプロセッサの構成例を示すブロック図である。
【図３】本発明の実施形態を適用した共有メモリ型マルチコアプロセッサのパイプラインユニットの命令実行のフロー図である。
【図４】本発明の実施形態を適用した命令フェッチ部のコアプロセッサの回路図である。
【図５】ステップ実行の例外ハンドラにおけるデバッグプログラムのフロー図である。
【図６】本発明の他の実施形態における共有メモリ型マルチコアプロセッサの構成例を示すブロック図である。
【図７】本発明の他の実施形態におけるソフトウェアブレークポイントからプログラムを実行するときのデバッガの制御フロー図である。
【図８】本発明の他の実施形態における共有メモリ型マルチコアプロセッサのパイプラインユニットの命令実行のフロー図である。
【図９】本発明の他の実施形態におけるコアプロセッサの命令フェッチ部の回路図である。
【図１０】従来技術において、共有メモリをコアプロセッサが一時的に独占することでソフトウェアブレークポイントからプログラムを実行するときの、デバッガの制御フロー図である。
【符号の説明】
【００５９】
１  共有メモリ
２  バスコントロールユニット
３，４  コアプロセッサ
５，６  エミュレーション命令レジスタ
７，８エミュレーションアドレスレジスタ
９，１０  エミュレーション制御ビット
１１，１２  デバッグ制御
１３，１４  パイプラインユニット
１５，１６  命令フェッチ
１７，１８  プログラムカウンタ
１９，２０  ステップ実行制御ビット
２１  デバッガ
２２，２３  コアプロセッサ
【図１】
2007122547.tif 000003
【図２】
2007122547.tif 000004
【図３】
2007122547.tif 000005
【図４】
2007122547.tif 000006
【図５】
2007122547.tif 000007
【図６】
2007122547.tif 000008
【図７】
2007122547.tif 000009
【図８】
2007122547.tif 000010
【図９】
2007122547.tif 000011
【図１０】
2007122547.tif 000012