(57)【要約】【課題】  マルチプロセッサ環境において特別な機能やハードウェアを追加することなく、各プロセッサ間で同期が取れたデバッグを行うことが可能な情報処理装置、デバッグ方法及びそのプログラムを提供すること。【解決手段】  一のプロセッサにロードされたプログラムに対して１ステップ実行命令が入力された場合には、まずプロセッサ特定部６３が当該ステップ実行命令の対象となったプロセッサを特定し、続いて正規化演算部６４が、特定されたプロセッサに対してステップ実行を指示するとともに、各プロセッサの処理速度比率を基に、他のプロセッサのプログラムが進むべきステップ数を正規化演算により算出し、他のプロセッサに対しても上記処理速度比率に応じたステップ数分のステップ実行を行う。【選択図】  図６
2006053835.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサを有する情報処理装置において、
前記複数のプロセッサにロードされた複数のプログラムのうち、一のプログラムに対するステップ実行命令を入力する入力手段と、
前記入力されたステップ実行命令の対象となる一のプログラムがロードされたプロセッサを特定する特定手段と、
前記特定されたプロセッサ及び他のプロセッサの処理速度情報を取得する取得手段と、
前記取得された処理速度情報を基に、前記特定されたプロセッサの処理速度に対する前記他のプロセッサの処理速度の比率を算出する算出手段と、
前記入力されたステップ実行命令を基に、前記特定されたプロセッサにロードされたプログラムに対して所定のステップ数分のステップ実行を行う第１のステップ実行手段と、
前記他のプロセッサにロードされたプログラムに対して、前記所定のステップ数を基準として前記処理速度比率に応じたステップ数分のステップ実行を行う第２のステップ実行手段と
を具備することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記第２のステップ実行手段は、前記第１のステップ実行手段により前記特定されたプロセッサにロードされたプログラムに対して行われたステップ実行のステップ数に前記処理速度比率を乗じた値が１以上の場合には当該値の整数部に対応する数分のステップ実行を行い、前記値が１未満の場合にはステップ実行を行わないことを特徴とする情報処理装置。
【請求項３】
請求項１に記載の情報処理装置であって、
前記各プログラムのプログラム名を、前記各プログラムがロードされたプロセッサを識別するプロセッサＩＤ、前記各プログラムが有する各プロセスを識別するプロセスＩＤ及び各プロセスが有するスレッドを識別するスレッドＩＤとそれぞれ対応付けて記憶する手段を更に具備し、
前記ステップ実行命令は、当該実行命令の対象となる一のプログラムの前記プロセスＩＤまたはスレッドＩＤを含み、
前記特定手段は、前記記憶された情報を基に、前記ステップ実行命令に含まれるプロセスＩＤまたはスレッドＩＤに対応するプロセッサＩＤを特定する手段とを有することを特徴とする情報処理装置。
【請求項４】
請求項１に記載の情報処理装置であって、
前記各プロセッサにロードされた各プログラムのソースコードを、複数のウィンドウに前記各プロセッサ毎に表示する表示手段を更に具備し、
前記入力手段は、前記各ウィンドウのうちアクティブなウィンドウに表示されたプログラムのソースコードに対して前記ステップ実行命令を入力し、
前記第１のステップ実行手段は、前記特定されたプロセッサにロードされ、かつ、前記アクティブなウィンドウに表示されたプログラムのソースコードに対してステップ実行を行い、
前記第２のステップ実行手段は、前記他のプロセッサにロードされ、かつ、前記アクティブでないウィンドウに表示されたプログラムのソースコードに対してステップ実行を行うことを特徴とする情報処理装置。
【請求項５】
複数のプロセッサを有する情報処理装置におけるデバッグ方法であって、
前記複数のプロセッサにロードされた複数のプログラムのうち、一のプログラムに対するステップ実行命令を入力するステップと、
前記入力されたステップ実行命令の対象となる一のプログラムがロードされたプロセッサを特定するステップと、
前記特定されたプロセッサ及び他のプロセッサの処理速度情報を取得するステップと、
前記取得された処理速度情報を基に、前記特定されたプロセッサの処理速度に対する前記他のプロセッサの処理速度の比率を算出するステップと、
前記入力されたステップ実行命令を基に、前記特定されたプロセッサにロードされたプログラムに対して所定のステップ数分のステップ実行を行うステップと、
前記他のプロセッサにロードされたプログラムに対して、前記所定のステップ数を基準として前記処理速度比率に応じたステップ数分のステップ実行を行うステップと
を具備することを特徴とするデバッグ方法。
【請求項６】
複数のプロセッサを有する情報処理装置に、
前記複数のプロセッサにロードされた複数のプログラムのうち、一のプログラムに対するステップ実行命令を入力するステップと、
前記入力されたステップ実行命令の対象となる一のプログラムがロードされたプロセッサを特定するステップと、
前記特定されたプロセッサ及び他のプロセッサの処理速度情報を取得するステップと、
前記取得された処理速度情報を基に、前記特定されたプロセッサの処理速度に対する前記他のプロセッサの処理速度の比率を算出するステップと、
前記入力されたステップ実行命令を基に、前記特定されたプロセッサにロードされたプログラムに対して所定のステップ数分のステップ実行を行うステップと、
前記他のプロセッサにロードされたプログラムに対して、前記所定のステップ数を基準として前記処理速度比率に応じたステップ数分のステップ実行を行うステップと
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ環境において各プロセッサにロードされたプログラムをデバッグすることが可能な情報処理装置、デバッグ方法及びそのプログラムに関する。
【背景技術】
【０００２】
従来から、マルチプロセッサ環境におけるデバッグ方法の一つとして、例えば、ターゲットのプロセッサ毎にトレースデータ（１命令毎のプロセッサの状態）及び時間データを収集しておき、一連の操作の終了後に、トレースデータアナライザを用いて時間データを参照しながら擬似的に各プロセッサの同期をとり、順方向及び逆方向のステップ実行を行いデバッグする、という方法がある（例えば、特許文献１参照）。また、その際、各プロセッサにＪＴＡＧ（Joint European Test Action Group）コネクタ（ピン）を接続し、収集したトレースデータを当該ＪＴＡＧコネクタ経由で外部デバイス（ＪＴＡＧコントローラ）を介してターゲットの各プロセッサをデバッグする方法もある。  
【特許文献１】特開平７−３６７３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上述の方法を行うためには、プロセッサ等のハードウェアにデバッグ専用の機能を追加しなければならない。
【０００４】
例えば、各プロセッサ間の同期をとるためには、通常のトレースデータを収集するだけでなく、当該トレースデータに相対時間データを付加する機能が必要となる。また、プロセッサ毎にトレースデータを収集するため、当該トレースデータを格納するための大容量のメモリまたは外部デバイス及びそれらに格納する機能も必要となる。そして、これらの機能を付加した場合には、チップの面積が増加し、またバスのデータ転送の領域も取られてしまうという問題もある。
【０００５】
更に、上記機能のような重い処理をプロセッサに行わせることにより、オーバーヘッドが生じ、トレース機能の使用の有無によりスレッド間のタイミング等の動作に影響を及ぼすことも考えられる。
【０００６】
以上のような事情に鑑み、本発明の目的は、マルチプロセッサ環境において特別な機能やハードウェアを追加することなく、各プロセッサ間で同期が取れたデバッグを行うことが可能な情報処理装置、デバッグ方法及びそのプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上述の課題を解決するため、本発明の情報処理装置は、複数のプロセッサを有する情報処理装置において、前記複数のプロセッサにロードされた複数のプログラムのうち、一のプログラムに対するステップ実行命令を入力する入力手段と、前記入力されたステップ実行命令の対象となる一のプログラムがロードされたプロセッサを特定する特定手段と、前記特定されたプロセッサ及び他のプロセッサの処理速度情報を取得する取得手段と、前記取得された処理速度情報を基に、前記特定されたプロセッサの処理速度に対する前記他のプロセッサの処理速度の比率を算出する算出手段と、前記入力されたステップ実行命令を基に、前記特定されたプロセッサにロードされたプログラムに対して所定のステップ数分のステップ実行を行う第１のステップ実行手段と、前記他のプロセッサにロードされたプログラムに対して、前記所定のステップ数を基準として前記処理速度比率に応じたステップ数分のステップ実行を行う第２のステップ実行手段とを具備する。
【０００８】
この構成により、一のプロセッサにロードされたプログラムに対してステップ実行が行われた場合、各プロセッサの処理速度比率を基に、その他のプロセッサにロードされたプログラムに対してもステップ実行が行われるため、トレースデータの収集及び当該収集のための機構等、特別な機能を追加することなく、各プロセッサ間で同期の取れたステップ実行を容易に行うことができる。
【０００９】
なお、上記情報処理装置においては、ステップ実行の対象となるプログラムがロードされた複数のプロセッサを有する第１の情報処理装置と、第１の情報処理装置にロードされたプログラムに対して上記プロセッサの特定やステップ実行等のデバッグ処理を擬似的に行うための第２の情報処理装置とが例えばイーサネット（登録商標）等を介して接続された形態であってもよいし、複数のプロセッサを有する情報処理装置が上記デバッグ処理を自機で直接行う形態であってもよい。
【００１０】
上記情報処理装置において、前記第２のステップ実行手段は、前記第１のステップ実行手段により前記特定されたプロセッサにロードされたプログラムに対して行われたステップ実行のステップ数に前記処理速度比率を乗じた値が１以上の場合には当該値の整数部に対応する数分のステップ実行を行い、前記値が１未満の場合にはステップ実行を行わないようにしてもよい。上記値を用いることで、上記特定されたプロセッサにロードされたプログラムに対してステップ実行が行われた場合に、他のプロセッサにロードされたプログラムに対してステップ実行を行うか否か、及び行う場合には何ステップ進めるか、といったことを容易に判定することができ、各プロセッサ間で同期の取れたステップ実行を容易に行うことができる。
【００１１】
上記情報処理装置は、前記各プログラムのプログラム名を、前記各プログラムがロードされたプロセッサを識別するプロセッサＩＤ、前記各プログラムが有する各プロセスを識別するプロセスＩＤ及び各プロセスが有するスレッドを識別するスレッドＩＤとそれぞれ対応付けて記憶する手段を更に具備し、前記ステップ実行命令は、当該実行命令の対象となる一のプログラムの前記プロセスＩＤまたはスレッドＩＤを含み、前記特定手段は、前記記憶された情報を基に、前記ステップ実行命令に含まれるプロセスＩＤまたはスレッドＩＤに対応するプロセッサＩＤを特定する手段とを有していてもよい。
【００１２】
上記プロセスＩＤ及びスレッドＩＤがプロセッサＩＤと関連付けられて記憶されているため、上記ステップ実行命令に含まれるプロセスＩＤまたはスレッドＩＤに対応するプロセッサＩＤを特定することにより、上記ステップ実行命令の対象となる一のプログラムがロードされたプロセッサを特定することができる。
【００１３】
上記情報処理装置は、前記各プロセッサにロードされた各プログラムのソースコードを、複数のウィンドウに前記各プロセッサ毎に表示する表示手段を更に具備し、前記入力手段は、前記各ウィンドウのうちアクティブなウィンドウに表示されたプログラムのソースコードに対して前記ステップ実行命令を入力し、前記第１のステップ実行手段は、前記特定されたプロセッサにロードされ、かつ、前記アクティブなウィンドウに表示されたプログラムのソースコードに対してステップ実行を行い、前記第２のステップ実行手段は、前記他のプロセッサにロードされ、かつ、前記アクティブでないウィンドウに表示されたプログラムのソースコードに対してステップ実行を行うようにしてもよい。
【００１４】
上記各ウィンドウが各プロセッサ毎に当該プロセッサにロードされたプログラムのソースコードを表示し、ユーザがアクティブにしているウィンドウに表示されたプログラムに対してステップ実行が行われると、アクティブにしていないウィンドウに表示されたプログラムに対しても上記処理速度比率に応じたステップ分のステップ実行が行われるため、どのプロセッサのプログラムがステップ実行の対象になり、それに応じて他のどのプロセッサのプログラムに対してステップ実行が行われるかが一目で分かり、利便性が高いユーザインターフェースを提供することができる。
【００１５】
本発明のデバッグ方法は、複数のプロセッサを有する情報処理装置におけるデバッグ方法であって、前記複数のプロセッサにロードされた複数のプログラムのうち、一のプログラムに対するステップ実行命令を入力するステップと、前記入力されたステップ実行命令の対象となる一のプログラムがロードされたプロセッサを特定するステップと、前記特定されたプロセッサ及び他のプロセッサの処理速度情報を取得するステップと、前記取得された処理速度情報を基に、前記特定されたプロセッサの処理速度に対する前記他のプロセッサの処理速度の比率を算出するステップと、前記入力されたステップ実行命令を基に、前記特定されたプロセッサにロードされたプログラムに対して所定のステップ数分のステップ実行を行うステップと、前記他のプロセッサにロードされたプログラムに対して、前記所定のステップ数を基準として前記処理速度比率に応じたステップ数分のステップ実行を行うステップとを具備する。
【００１６】
また、本発明のプログラムは、複数のプロセッサを有する情報処理装置に、前記複数のプロセッサにロードされた複数のプログラムのうち、一のプログラムに対するステップ実行命令を入力するステップと、前記入力されたステップ実行命令の対象となる一のプログラムがロードされたプロセッサを特定するステップと、前記特定されたプロセッサ及び他のプロセッサの処理速度情報を取得するステップと、前記取得された処理速度情報を基に、前記特定されたプロセッサの処理速度に対する前記他のプロセッサの処理速度の比率を算出するステップと、前記入力されたステップ実行命令を基に、前記特定されたプロセッサにロードされたプログラムに対して所定のステップ数分のステップ実行を行うステップと、前記他のプロセッサにロードされたプログラムに対して、前記所定のステップ数を基準として前記処理速度比率に応じたステップ数分のステップ実行を行うステップとを実行させるためのものである。
【発明の効果】
【００１７】
本発明によれば、マルチプロセッサ環境において特別な機能やハードウェアを追加することなく、各プロセッサ間で同期が取れたデバッグを行うことができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態を図面に基づき説明する。
【００１９】
図１は、本実施形態におけるデバッグシステムの構成を示した図である。同図に示すように、本実施形態のデバッグシステムは、ホストコンピュータ１００とターゲットコンピュータ２００で構成され、両者は例えばイーサネット（登録商標）２０等のネットワークを介して接続されている。
【００２０】
ホストコンピュータ１００は、ターゲットコンピュータ２００にロードするためのプログラムの開発、管理等を行うコンピュータであり、ＣＰＵ（Central Processing Unit）１、ＲＯＭ（Read Only Memory）２、ＲＡＭ（Random Access Memory）３、表示部４、操作入力部５及びＩＤＥ（Integrated Development Environment：統合開発環境）６で構成され、各部はバス７で接続されている。
【００２１】
ＣＰＵ１は、ホストコンピュータ１００全体の動作を制御するメインコントローラであり、例えば上記ＩＤＥ６において必要な各種の演算処理を実行する。
【００２２】
ＲＯＭ２は、ホストコンピュータ１００の電源オン時に実行するプログラムや、ハードウェア制御用のコード等のデータやプログラム等を格納する、読み出し専用の不揮発性のメモリである。またＲＡＭ３は、ＩＤＥ６において必要なプログラムやその他のプログラムをロードしたり、当該プログラムの作業データを書き込んだりするために用いられる、書き込み可能な揮発性のメモリである。
【００２３】
表示部４は、例えばＬＣＤ（Liquid Crystal Display）、ＣＲＴ（Cathode Ray Tube）、ＰＤＰ(Plasma Display Panel)、ＯＥＬ(Organic Electroluminescence)等からなり、例えばターゲットコンピュータ２００の各プロセッサにロードされたプログラムのソースコード等を、上記ＩＤＥ６が提供するＧＵＩ（Graphical User Interface）情報とともに表示する。ユーザは、ステップ実行を命令する場合には、対象のプロセッサのプログラムのソースコードが表示されたウィンドウ上で例えばステップ実行対象のコードに実行ポインタを合わせる等の操作を行う。
【００２４】
操作入力部５は、例えばキーボード、マウス、トラックパッド、ジョグダイヤル等からなり、例えば各プロセッサのデバッグの際は、ステップ実行命令等のユーザの操作を入力するためのインターフェースとなる。
【００２５】
ＩＤＥ６は、ソースコードエディタ、コンパイラ、デバッガ等、ターゲットコンピュータ２００の各プロセッサにロードされるプログラムのプログラミングに必要なツールを、上記操作入力部５を介して扱えるようにしたソフトウェアであり、特にデバッグに関して、ＧＵＩ部６１、デバッグライブラリ６２、プロセッサ特定部６３、正規化演算部６４を有している。
【００２６】
ＧＵＩ部６１は、ソースコードエディタやデバッグ（ブレークポイントやレジスタ・メモリの値参照、ステップ実行等）命令を入力するためのインターフェースとなるウィンドウ等のＧＵＩ情報を上記表示部４へ表示する。またユーザから上記表示部４及び操作入力部５を介して、デバッグに関するステップ実行以外の命令があったときには当該命令をデバッグライブラリ６２へ通知する（動作指示）。またユーザからステップ実行の命令があったときには、当該ステップ実行命令を、当該命令の対象となったプログラムのプロセスＩＤまたはスレッドＩＤを通知することによりプロセッサ特定部６３へ通知する（ステップ実行命令）。
【００２７】
デバッグライブラリ６２は、上記ＧＵＩ部６１からの動作指示に対応するデバッグ処理をターゲットコンピュータ２００に通知する。当該通知されたデバッグ処理がターゲットコンピュータ２００上で実行され、実行されたデバッグに関するデータが両者間で送受信される。
【００２８】
プロセッサ特定部６３は、ＧＵＩ部６１からのステップ実行命令が生じた場合に、当該ステップ実行命令が、ターゲットコンピュータ２００が有するプログラム中の、どのソースコードに対して行われたのかを検知し、更に、そのソースコードは、ターゲットコンピュータ２００が有するどのプロセッサにロードされたプログラムのものであるかを特定する。当該プロセッサの特定は、どのプロセッサのソースコードであるかを、デバッグライブラリ６２経由でターゲットコンピュータのＯＳ（Operating System）へ問い合わせることにより行われる（問い合わせ）。また、特定されたプロセッサ名を正規化演算部６４へ通知する（プロセッサ通知）。
【００２９】
正規化演算部６４は、プロセッサ特定部６３で特定されたプロセッサのスペック（処理速度）を基に正規化演算処理を行い、ステップ実行命令をデバッグライブラリ６２へ指示する（ステップ実行指示）。
【００３０】
上記プロセッサ特定部６３及び正規化演算部６４の処理の詳細については後述する。
【００３１】
ターゲットコンピュータ２００は、コンピュータ機能部として情報処理コントローラ１０を備える。情報処理コントローラ１０は、メインプロセッサ１１、サブプロセッサ１３−１、１３−２及び１３−３の複数のプロセッサと、ＤＭＡＣ（ダイレクトメモリアクセスコントローラ）１５及びＤＣ（ディスクコントローラ）１７を有する。
【００３２】
メインプロセッサ１１は、サブプロセッサ１３−１、１３−２及び１３−３によるプログラム実行（データ処理）のスケジュール管理と、情報処理コントローラ１０（ターゲットコンピュータ２００）の全般的な管理とを行う。ただし、メインプロセッサ１１内で管理のためのプログラム以外のプログラムが動作するように構成することもできる。その場合には、メインプロセッサ１１はサブプロセッサとしても機能することになる。メインプロセッサ１１は、ＬＳ（ローカルストレージ）１２を有する。
【００３３】
サブプロセッサは、１つでもよいが、望ましくは複数とする。本例は、複数の場合である。各サブプロセッサ１３−１、１３−２及び１３−３は、メインプロセッサ１１の制御によって並列的かつ独立にプログラムを実行し、データを処理する。更に、場合によってメインプロセッサ１１内のプログラムが各サブプロセッサ１３−１、１３−２及び１３−３内のプログラムと連携して動作するように構成することもできる。また各サブプロセッサも、ＬＳ（ローカルストレージ）１４−１、１４−２及び１４−３を有する。
【００３４】
ＤＭＡＣ１５は、情報処理コントローラ１０に接続されたＤＲＡＭ（ダイナミックＲＡＭ）などからなるメインメモリ１６に格納されているプログラム及びデータにアクセスするものであり、ＤＣ１７は、情報処理コントローラ１０に接続された外部記録部１８−１及び１８−２にアクセスするものである。
【００３５】
外部記録部１８−１及び１８−２は、固定ディスク（ハードディスク）でも、リムーバブルディスクでもよく、また、ＭＯ、ＣＤ±ＲＷ、ＤＶＤ±ＲＷなどの光ディスク、メモリディスク、ＳＲＡＭ（スタティックＲＡＭ）、ＲＯＭなど、各種のものを用いることができる。従って、ＤＣ１７は、ディスクコントローラと称するが、外部記録部コントローラである。同図の例のように、情報処理コントローラ１０に対して外部記録部１８を複数接続できるように、情報処理コントローラ１０を構成することができる。
【００３６】
メインプロセッサ１１、各サブプロセッサ１３−１、１３−２及び１３−３、ＤＭＡＣ１５及びＤＣ１７は、バス１９によって接続される。また情報処理コントローラ１０は、ワンチップＩＣ（集積回路）として構成することが望ましい。
【００３７】
外部記憶部１８にはＯＳが格納され、当該ＯＳが上記メインプロセッサ１１及び各サブプロセッサにおいて処理を実行するためのプラットフォームを提供し、各プロセッサが有するプログラムの管理を行う。またメインプロセッサ１１及び各サブプロセッサには、それぞれを識別するためのプロセッサＩＤが付与されており、それらも上記ＯＳにより管理される。
【００３８】
図２は、上記ＯＳが各プログラムに関するデータを管理するためのプログラム管理テーブルの例を示した図である。
【００３９】
同図に示すように、ターゲットコンピュータ２００のＯＳは、プログラム管理テーブル３０において、ターゲットコンピュータ２００が有するプログラムのプログラム名、当該プログラムがロードされているプロセッサのプロセッサＩＤ、当該プロセッサの処理速度（クロック周波数）、当該プログラムが有するプロセスを識別するプロセスＩＤ、当該プロセスが有するスレッドを識別するスレッドＩＤをそれぞれ関連付けて管理している。
【００４０】
プロセッサＩＤは、ターゲットコンピュータ２００が有する上記メインプロセッサ１１、サブプロセッサ１３−１、１３−２等、全てのプロセッサに対して、例えばメインプロセッサ１１のＩＤは「０ｘ００１」、サブプロセッサ１３−１のＩＤは「０ｘ００２」といったように、例えば５桁の文字列として与えられる。なお、上記処理速度は必ずしもＯＳが予め取得しておかなくてもよく、必要に応じてＯＳが各プロセッサに問い合わせるようにしても構わない。
【００４１】
また、プロセスＩＤ及びスレッドＩＤは、各プログラムの各プロセス及びスレッドに対してＯＳ内でユニークに割り当てられる。ここでプロセスとは、マルチタスクシステムにおいてメモリ資源やディスク資源などを独立して所有するプログラムの実行単位をいい、またスレッドとは、同一プロセス内でのマルチタスク処理を可能にしたマルチスレッド・システムにおけるタスクの実行単位をいう。スレッドは、一つのプロセスに対して少なくとも一つ存在する。
【００４２】
同図においては、プログラム＊＊ａ．ＥＸＥが有するプロセスには「０ｘ００００１」という７桁のプロセスＩＤが与えられ、当該プロセスが有する２つのスレッドには「０ｘ００００ａ」及び「０ｘ００００ｂ」という同じく７桁のスレッドＩＤが与えられる。同様に、プログラム＊＊ｂ．ＥＸＥが有するプロセスにはプロセスＩＤ＝０ｘ００００２が与えられ、当該プロセスが有する４つのスレッドには、スレッドＩＤ＝０ｘ０００ａａ、０ｘ００１ａｂ、０ｘ００１ａｃ及び０ｘ００１ｂｂが与えられている。当該プロセスＩＤまたはスレッドＩＤが、上記プロセッサ特定部６３によるプロセッサの特定の際に用いられ、また上記処理速度情報が正規化演算部６４の正規化演算処理に用いられる。
【００４３】
次に、以上のように構成されたデバッグシステムの動作について説明する。図３は、本実施形態におけるホストコンピュータ１００の動作の概要を示したフローチャートである。
【００４４】
同図に示すように、まず、ホストコンピュータ１００は、ユーザの操作によりＧＵＩ部６１からステップ実行命令を入力する（ステップ３１）。入力されたステップ実行命令は、プロセッサ特定部６３へ通知され、プロセッサ特定部６３は、ターゲットコンピュータ２００のどのプロセッサにステップ実行命令が行われたのかを特定し（ステップ３２）、正規化演算部６４へ通知する。
【００４５】
正規化演算部６４は、上記特定されたプロセッサの処理速度を基準にして正規化演算を実行し（ステップ３３）、特定されたプロセッサ以外の他のプロセッサをどのくらいステップ実行すればよいのかを判定する。ここで正規化とは、データを一定のルールに従って変形し、利用しやすくすることをいう。
【００４６】
そして、判定結果を基に、各プロセッサに対するステップ実行命令をデバッグライブラリ経由でターゲットコンピュータ２００へ通知する（ステップ３４）。これにより、各プロセッサの処理速度を基に、ターゲットコンピュータの各プロセッサ間で擬似的に同期をとりながらステップ実行命令が行われることになる。
【００４７】
次に、ホストコンピュータ１００の各部の動作についてより詳細に説明する。
【００４８】
まず、ホストコンピュータ１００がプロセッサを特定する際の動作について説明する。図４は、プロセッサ特定部６３がプロセッサを特定する動作の流れを示したフローチャートである。
【００４９】
同図に示すように、まず、プロセッサ特定部６３は、ユーザの操作により上記ＧＵＩ部６１が入力したステップ実行命令として、ＧＵＩ部６１ステップ実行命令の対象となったプログラムの上記プロセスＩＤまたはスレッドＩＤを受信する（ステップ４１）。続いて、受信したプロセスＩＤまたはスレッドＩＤを基に、ターゲットコンピュータ２００のＯＳに、上記ステップ実行命令の対象となったプログラムが、ターゲットコンピュータ２００のどのプロセッサに属するものであるかをデバッグライブラリ６２経由で問い合わせる（ステップ４２）。
【００５０】
次に、プロセッサ特定部６３は、ターゲットコンピュータ２００のＯＳが、上記通知されたプロセスＩＤまたはスレッドＩＤと上記プログラム管理テーブル３０を参照することにより特定したプロセッサのプロセッサＩＤを、各プロセッサの処理速度情報とともに受信する（ステップ４３）。そして、受信したプロセッサＩＤ及び各プロセッサの処理速度情報を正規化演算部６４へ通知することにより終了する（ステップ４４）。
【００５１】
図５は、以上の動作においてやり取りされる情報の流れを示すシーケンス図である。
【００５２】
同図に示すように、まずＧＵＩ部６１から、ユーザがステップ実行命令を入力したプログラムのプロセスＩＤまたはスレッドＩＤがプロセッサ特定部６３へ通知される。プロセッサ特定部６３は、当該通知されたプロセスＩＤまたはスレッドＩＤをターゲットコンピュータ２００のＯＳへ通知し、上記プログラムがロードされたプロセッサを問い合わせる。
【００５３】
ターゲットコンピュータ２００のＯＳは、上記管理テーブル３０を参照して、通知されたプロセスＩＤまたはスレッドＩＤに対応するプロセッサのプロセッサＩＤを特定し、同じく管理テーブル３０に記憶された各プロセッサの処理速度情報とともにプロセッサ特定部６３へ通知する。そしてプロセッサ特定部６３は、通知されたプロセッサＩＤ及び各プロセッサの処理速度情報を正規化演算部６４に対して通知する。
【００５４】
以上の動作により、上記ステップ実行命令の対象となったプロセッサが特定され、正規化演算部６４の正規化演算処理に必要なデータが整うことになる。
【００５５】
次に、正規化演算部６４の動作について説明する。図６は、正規化演算部の正規化演算処理の流れを示すフローチャートである。
【００５６】
同図に示すように、まず、正規化演算部６４は、上記プロセッサ特定部６３から、特定されたプロセッサのプロセッサＩＤ及び各プロセッサの処理速度情報を受信する（ステップ５１）。続いて、当該受信したプロセッサＩＤと、前回プロセッサ特定部６３から通知されたプロセッサＩＤとを比較して（ステップ５２）、両者が同一か否かを確認する（ステップ５３）。
【００５７】
両者が同一であった場合（ステップ５３のＹＥＳ）には、特定されたプロセッサ及び他のプロセッサの、１秒間に行われるインストラクション数を算出する（ステップ５５）。すなわち、例えばプロセッサ特定部６３により特定されたプロセッサをプロセッサＡ、当該プロセッサＡと同期してステップ実行が行われるべきプロセッサをプロセッサＢとし、プロセッサＡの処理速度がｙＨｚ、１クロックでｙ１命令を実行可能であり、プロセッサＢの処理速度がｚＨｚ、１クロックでｚ１命令を実行可能であるとすると、１秒間に行われるインストラクション数は、プロセッサＡがｙ×ｙ１、プロセッサＢがｚ×ｚ１となる。
【００５８】
上記ステップ５３において、プロセッサ特定部６３から前回通知されたプロセッサＩＤと今回受信したプロセッサＩＤが異なる場合（ステップ５３のＮＯ）には、後述する繰り返し値Ｔを０に初期化する（ステップ５４）。
【００５９】
続いて、正規化演算部６４は、上記特定されたプロセッサを基準として、当該特定されたプロセッサが１インストラクション進んだ場合に、他のプロセッサがどれほどのインストラクションを進めばよいのかを正規化演算により算出する（ステップ５６）。具体的には、上記プロセッサＡが１インストラクション進んだ場合には、プロセッサＢが進むべきインストラクション数は、上記算出した１秒間のインストラクション数を基に算出すると、（ｚ×ｚ１）／（ｙ×ｙ１）となる。
【００６０】
次に、正規化演算部６４は、上記特定されたプロセッサに対する１ステップ実行命令をデバッグライブラリ６２へ通知する（ステップ５７）。当該通知がデバッグライブラリ６２からターゲットコンピュータ２００の上記特定されたプロセッサへ伝えられ、ステップ実行が行われる。
【００６１】
続いて、正規化演算部６４は、他のプロセッサを何ステップ実行させるのかを判定する（ステップ５８）。具体的には、Ｄ＝（ｚ×ｚ１）／（ｙ×ｙ１）×ｎ＋Ｔという式により、判定値Ｄを算出する。ここでｎは、上記特定されたプロセッサがステップ実行を行う際の繰り返し回数を示しており、またＴは、前回Ｄの値を算出した際に、（ｚ×ｚ１）／（ｙ×ｙ１）×ｎによって算出された値のうち、小数部分を示している。当該Ｔの値は、一のプロセッサに対して連続してステップ実行を行う度に累積され、Ｄの値の算出に用いられる。また、Ｄの整数部をＤ＿ｉｎｔ、小数部をＤ＿ｄｅｃとする。
【００６２】
次に、正規化演算部は、上記算出した判定値ＤうちＤ＿ｉｎｔの値が１以上であるか否かを確認する（ステップ５９）。１未満であった場合（ステップ５９のＮＯ）には、上記繰り返し回数ｎに１を加えて（ステップ６０）、上記特定されたプロセッサへの１ステップ実行を再度行わせるため、１ステップ実行命令をデバッグライブラリ６２へ通知する（ステップ５７へ戻る）。
【００６３】
Ｄ＿ｉｎｔの値が１以上であった場合（ステップ５９のＹＥＳ）には、他のプロセッサに対する１ステップ実行命令をデバッグライブラリ６２へ通知し、デバッグライブラリ６２経由でステップ実行を行わせる（ステップ６１）。そして、当該１ステップ実行命令が何回行われたかをＤ＿Ｃｏｕｎｔによりカウントする（ステップ６２）。当該処理が、Ｄ＿Ｃｏｕｎｔの値が上記Ｄ＿ｉｎｔの値と等しくなるまで繰り返される（ステップ６３のＮＯ）。
【００６４】
Ｄ＿Ｃｏｕｎｔ＝Ｄ＿ｉｎｔとなった場合（ステップ６３のＹＥＳ）には、上記Ｔの値に上記Ｄの小数部Ｄ＿ｄｅｃを代入し、また上記Ｄ＿Ｃｏｕｎｔ及び繰り返し回数ｎの値を初期値０に戻す（ステップ６４）。そして、ＩＤＥ６が有する照会データベース（図示せず）に、上記特定され、ステップ実行の基準となったプロセッサのプロセッサＩＤを保存する（ステップ６５）。当該保存されたプロセッサＩＤは、上記ステップ５２において、「前回プロセッサ特定部から通知されたプロセッサＩＤ」として照会される。またＴの値は、上記ステップ５３において前回通知されたプロセッサＩＤと同一である限り累積され、異なる場合には初期化される。
【００６５】
以上の処理が、ユーザによりＧＵＩ部６１からステップ実行命令が入力される毎に繰り返される。また、処理対象となるプロセッサの数は２つに限られるものではなく、ターゲットコンピュータ２００に存在するプロセッサ全て（本実施形態においては４つ）に対して行なわれる。
【００６６】
以上の動作により、例えばプロセッサＡがプロセッサＢの２倍の処理速度を有していた場合（例えばプロセッサＡの処理速度が３ＧＨｚ、プロセッサＢの処理速度が１．５Ｇｈｚ）、プロセッサＡに１ステップ実行が行われた段階では、上記判定値Ｄが１に満たないため、プロセッサＢに対してはステップ実行は行われず、プロセッサＡに２ステップ実行が行われた段階（繰り返し回数＝２）に初めてプロセッサＢに対して１ステップ実行が行われることになる。このように、あるプロセッサにステップ実行が行われた場合には、各プロセッサの処理速度を基に正規化演算を行い、他のプロセッサに対しても処理速度に応じた分のステップ実行が行われるため、各プロセッサ間で擬似的に同期のとれたステップ実行が可能となる。
【００６７】
また、上記Ｄの値が整数にならない場合（例えばプロセッサＡの処理速度が３ＧＨｚ、プロセッサＢの処理速度が１．８ＧＨｚのような場合）でも、上記繰り返し値Ｔを累積することで、ステップ実行処理が進むにつれてプロセッサＢに対して行われるステップ実行数にずれが生じて、同期が取れなくなってしまうようなことを防ぐことができる。
【００６８】
図７は、以上説明した動作が行われる際に、ホストコンピュータ１００の表示部４に表示されるウィンドウ画面の例を示した図である。当該画面はＩＤＥ６が提供するものである。
【００６９】
同図に示すように、ユーザがステップ実行命令を入力する場合には、ＧＵＩ部６１により表示部４にステップ実行用のウィンドウ７１及び７２が表示される。同図においては、ウィンドウ７１はプロセッサＡにロードされたプログラムの仮想ソースコードを表示し、ウィンドウ７２はプロセッサＢにロードされたプログラムの仮想ソースコードを表示するものとする。また、プロセッサＡはプロセッサＢの２倍の処理速度を有しているものとする。当該画面は、例えばユーザがホストコンピュータ１００の操作入力部５を操作することにより表示部４へ表示される。
【００７０】
同図において、例えばユーザが操作入力部５を介してウィンドウ７１をアクティブにし、プログラム実行中に気になる箇所で停止させてから、ポインタ７３をソースコードＡ−１に合わせて、当該ソースコードＡ−１のステップ実行命令を入力すると、上記ＧＵＩ部６１、プロセッサ特定部６３及び正規化演算部６４の処理等により、当該ソースコードＡ−１のステップ実行が行われる。この段階では、プロセッサＢはプロセッサＡの半分の処理速度しか有さないため、上述の判定値Ｄは１未満となり、プロセッサＢのソースコードＢ−１にはステップ実行は行われない。
【００７１】
次に、ユーザがウィンドウ７１をアクティブにしたまま、更にポインタを７４に合わせて、ソースコードＡ−２のステップ実行命令を入力した場合には、上記と同様の処理により当該ソースコードＡ−２のステップ実行が行われるとともに、上記判定値ＤがＤ＝１／２（処理速度比率）×２（繰り返し回数）＝１となるため、非アクティブなウィンドウ７２に対応するプロセッサＢのソースコードＢ−１に対してもステップ実行が行われる。
【００７２】
同様に、ユーザがアクティブなウィンドウ７１上でプロセッサＡのソースコードＡ−３、Ａ−４・・・とステップ実行命令を入力してステップ実行が行なわれると、それに追従して、非アクティブなウィンドウ７２のソースコードＢ−２・・・に対して、プロセッサの処理速度に応じたステップ（この場合はプロセッサＡに対して進んだステップの半分のステップ）のステップ実行が行なわれる。
【００７３】
また逆に、ユーザがウィンドウ７２をアクティブにして、ポインタを７５に合わせてプロセッサＢのソースコードＢ−１のステップ実行命令を入力した場合には、正規化演算部６４の処理により上記判定値がＤ＝２／１×１＝２となるため、非アクティブなウィンドウ７１に対応するプロセッサＡのソースコードＡ−１及びＡ−２に対して２ステップ分のステップ実行が行なわれる。
【００７４】
なお、ユーザがソースコードにポインタを合わせてステップ実行命令を入力した段階では、ＩＤＥ６はどのプロセッサのソースコードであるかは認識していないため、上述したように、ＧＵＩ部６１からプロセッサ特定部６３に、ステップ実行命令の対象となったソースコードのプロセスＩＤまたはスレッドＩＤが通知され、プロセッサ特定部６３においてプロセッサが特定される。
【００７５】
このように、ユーザがアクティブにしているソースコードウィンドウに対応するプロセッサを基準として、当該アクティブなソースコードウィンドウに対してステップ実行命令が入力されると、他の非アクティブなソースコードウィンドウに対しても上記処理速度に応じたステップ分のステップ実行が入力されるため、ユーザは、どのプロセッサに対してステップ実行が行なわれているのかを一目で認識することができる。よって、ユーザが使いやすいインターフェースを提供しながら各プロセッサ間で容易に同期をとってステップ実行を行うことが可能である。
【００７６】
以上説明したように、本実施形態によれば、マルチプロセッサ環境において、一のプロセッサにロードされたプログラムに対してステップ実行が行なわれた場合には、各プロセッサの処理速度比率を基に、正規化演算により他のプロセッサが進むべきステップ数を算出し、他のプロセッサに対しても処理速度比率に応じたステップ数分のステップ実行を行うこととしたため、トレースデータを利用したり、外部デバイスを用意したりする等、デバッグ専用の機能を追加することなく、各プロセッサ間で擬似的に同期のとりながらステップ実行を行うことができる。
【００７７】
なお、本発明は、上述の実施形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【００７８】
上述の実施形態においてはターゲットコンピュータの数は一つであったが、例えばホストコンピュータ１００がイーサネット（登録商標）２０を介して複数のターゲットコンピュータに接続され、各ターゲットコンピュータに存在する複数のプロセッサ間で同期をとりながらステップ実行を行うことも可能である。この場合、プロセッサ特定部６３は、上記プロセスＩＤまたはスレッドＩＤを基に、各ターゲットコンピュータのＯＳに対してそれぞれプロセッサの問い合わせを行なうようにしてもよいし、例えば各ターゲットコンピュータのＯＳを管理するサーバを設けて、当該サーバに問い合わせを行なうようにしてもよい。
【００７９】
また上述の実施形態においては、プロセッサ特定部６３がターゲットコンピュータ２００のＯＳから各プロセッサの処理速度を取得していたが、ターゲットコンピュータ２００に問い合わせなくとも、例えばユーザがＩＤＥ６の設定画面上で予め各プロセッサの処理速度を能動的に設定するようにしても構わない。
【図面の簡単な説明】
【００８０】
【図１】本発明の一実施形態におけるデバッグシステムの構成を示した図である。
【図２】プログラム管理テーブルの例を示した図である。
【図３】ホストコンピュータ１００の動作の概要を示したフローチャートである。
【図４】プロセッサ特定部がプロセッサを特定する動作の流れを示したフローチャートである。
【図５】プロセッサを特定する際に各部でやり取りされる情報の流れを示すシーケンス図である。
【図６】正規化演算部の正規化演算処理の流れを示すフローチャートである。
【図７】各プロセッサに対するステップ実行が行われる際に表示部４に表示されるウィンドウ画面の例を示した図である。
【符号の説明】
【００８１】
１００…ホストコンピュータ
２００…ターゲットコンピュータ
４…表示部
５…操作入力部
６…ＩＤＥ
１１…メインプロセッサ
１３…サブプロセッサ
２０…イーサネット（登録商標）
３０…プログラム管理テーブル
６１…ＧＵＩ部
６２…デバッグライブラリ
６３…プロセッサ特定部
６４…正規化演算部
【図１】
2006053835.tif 000003
【図２】
2006053835.tif 000004
【図３】
2006053835.tif 000005
【図４】
2006053835.tif 000006
【図５】
2006053835.tif 000007
【図６】
2006053835.tif 000008
【図７】
2006053835.tif 000009