(57)【要約】【課題】並列プログラムの汎用なデバッグツールを提供する。【解決手段】複数の実行ユニットと、他のモジュールと非同期に実行可能な複数の基本モジュールに分割され、当該複数の基本モジュールの時系列的な実行規則が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行規則に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラと、を具備し、前記スケジューラは、Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）により外部から指定されるブレークポイントの集合を設定するブレークポイント集合設定手段を有することを特徴とするデバッガ。【選択図】  図９
2011070256.tif 000002
【特許請求の範囲】
【請求項１】
複数の実行ユニットと、
他のモジュールと非同期に実行可能な複数の基本モジュールに分割され、当該複数の基本モジュールの時系列的な実行規則が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行規則に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラと、
を具備し、
前記スケジューラは、
Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）により外部から指定されるブレークポイントの集合を設定するブレークポイント集合設定手段
を有することを特徴とするデバッガ。
【請求項２】
複数の実行ユニットと、
他のモジュールと非同期に実行可能な複数の基本モジュールに分割され、当該複数の基本モジュールの時系列的な実行規則が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行規則に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラと、
を具備し、
前記スケジューラは、
Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）により外部から指定されるブレークポイントの集合を設定するブレークポイント集合設定手段と、
前記ブレークポイントの情報を保持する保持手段
を有することを特徴とするデバッガ。
【請求項３】
前記スケジューラは、複数のスレッドそれぞれを、設定した複数の前記ブレークポイントで同時に停止させるよう働くことを特徴とする請求項１に記載のデバッガ。
【請求項４】
前記スケジューラは、指定された複数の前記ブレークポイントで停止している複数のスレッドを同時に実行開始させるよう働くことを特徴とする請求項１に記載のデバッガ。
【請求項５】
前記スケジューラは、前記ＧＵＩで指定された一つの前記基本モジュールを他の前記複数の基本モジュールとは排他的に実行させるよう働くことを特徴とする請求項１に記載のデバッガ。
【請求項６】
前記スケジューラは、指定された複数の前記ブレークポイントを複数セット管理しこの複数のブレークポイントの集合間の競合またはこの複数のブレークポイントに関連するノード間での前後関係をユーザーに通知するよう働くことを特徴とする請求項１に記載のデバッガ。
【請求項７】
複数の実行ユニットと、
他のモジュールと非同期に実行可能な複数の基本モジュールに分割され、当該複数の基本モジュールの時系列的な実行規則が定義されるプログラムを、前記複数の実行ユニットによって並列実行するデバッガを、
Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）により外部から指定されるブレークポイントの集合を設定するブレークポイント集合設定手段
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列プログラムのデバッグツールに関する。
【背景技術】
【０００２】
近年、マイクロコンピュータ等においても、処理効率向上のため、マルチタスクＯＳ（ＯｐｅｒａｔｉｎｇＳｙｓｔｅｍ）による処理が実現されている。ここで、タスクとは、一般にＯＳ内の制御プログラムにより処理される１つの実行単位をいい、従って、マルチタスク環境とは、複数のアプリケーションを並行して稼働させるために、かかるタスクを複数並行して処理可能な環境であり、一般に、ＣＰＵを時分割で複数タスクに割り当て占有させることにより実現される。
【０００３】
ここで、かかるマルチタスク環境で稼働するアプリケーションソフトウエアが、所定の動作仕様、機能仕様を満たすまで、その動作を検証、確認を繰り返し行う必要があるが、かかる稼働確認および仕様を満たさない場合の、不具合の分析、修正を行うためのツールが、デバッガである。すなわち、デバッガとは、デバッグ対象となるプログラムをコンピュータ上にロードし、実行および停止、変数お内容参照、変更などの基本的操作を行うプログラムである。これらのことはマルチプロセッサでの並列処理にも当てはまる。
【０００４】
デバッガは、一般に、以下の手順で用いられる。すなわち、デバッガを起動させた後に、その下で、ターゲットとなるプログラムを実行させる。その際には、プログラム中の特定のアドレスにブレークポイントと呼ばれる停止点を予め設定しておく。かかるブレークポイントにさしかかった場合には、プログラムの実行が停止し、ユーザーに制御が戻るので、その停止点におけるメモリ上の所定の変数の値の確認を行ったり、レジスタの内容の確認等が行え、動作確認および不具合の解析やこれに基づくプログラムコードの修正が可能となるのである。かかるブレークポイント機能は、従って、デバッガにおけるもっとも基本的な機能である。そして、ブレークポイントの設定及び解除は、デバッグ作業には不可避である。
【０００５】
ここで、マルチタスク環境のデバッグとしては、各タスクごとに独立して稼働確認を行うことが必要となる。従って、デバッガに求められる要件は次の点である。即ち、複数タスクが同時に実行されることから、デバッグも各タスク毎に独立して行えることが必要となる。すなわち、タスクごとに独立したブレークポイントが設定できることが求められるのである。
【０００６】
しかしながら従来、マルチスレッドで動作する並列プログラムをデバッガ上で、ブレークポイントを設定して実行するとき、一つのスレッドがブレークポイントで止まると、他のスレッドも同時に止まり、実行を再開すると、すべてのスレッドが再開するため、複数のスレッドそれぞれを特定のブレークポイントで同時に実行中断させる手段がなかった。また、複数のブレークポイントを効率よく設定する手段がなかった。また、停止し複数のスレッドに対して、注目ポイント以外を停止させたままにして、特定のタスクのみの実行を継続させて動作の詳細を調べる手段がなかった。
【０００７】
対して、特許文献１に記載の技術においては、上記の内で複数のスレッドそれぞれを特定のブレークポイントで同時に実行中断させる手段が工夫されているが、上記の諸所の従来問題に対応する汎用な技術は開示されていなかった。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−６４２３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、並列プログラムの汎用なデバッグツールを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明のデバッガは、複数の実行ユニットと、他のモジュールと非同期に実行可能な複数の基本モジュールに分割され、当該複数の基本モジュールの時系列的な実行規則が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行規則に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラと、を具備し、前記スケジューラは、Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）により外部から指定されるブレークポイントの集合を設定するブレークポイント集合設定手段を有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、並列プログラムの汎用なデバッグツールが得られる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に係わる情報処理装置のシステム構成の一例を示す図。
【図２】本実施形態の情報処理装置によって実行される並行処理仕様のプログラムの概略構成を説明するための図。
【図３】本実施形態の情報処理装置によって実行されるプログラムを構成する直列基本モジュールと並列実行制御記述との関係を示す図。
【図４】同実施形態の並列プログラム実行環境を示す概略構成図。
【図５】本実施形態の情報処理装置によって実行されるプログラムの並列実行制御記述を説明するための図。
【図６】本実施形態の情報処理装置上で動作するランタイムライブラリが行うプログラムの並列処理制御を説明するための図。
【図７】本実施形態の情報処理装置上におけるランタイムライブラリの動作状態を示す図。
【図８】本実施形態の情報処理装置上におけるランタイムライブラリおよび基本モジュールの動作状態を示す図。
【図９】同実施形態のビジュアルデバッガの画面の例を示す図。
【図１０】同実施形態のブレークポイントで停止している状況を示す図。
【図１１】同実施形態の同時に実行開始した状況を示す図。
【図１２】同実施形態の選択したモジュールのみ実行開始した状況を示す図。
【図１３】同実施形態のＧＵＩツールとデバッガ、並列実行環境、アプリケーションの関係を示す図。
【図１４】実行環境における複数ブレークポイントによる並列動作の詳細を示すフローチャート。
【図１５】複数ブレークポイント管理方法を示す説明図。
【図１６】並列ブレークポイントの指定サポート機能を示す説明図。
【図１７】一般的なマルチスレッド処理を示す図。
【発明を実施するための形態】
【００１３】
本発明による実施形態を図１乃至図１７を参照して説明する。
まず図1７に、従来よりの一般的なプログラミングモデルを示す。従来のスレッド実行方式では、スレッドとして実行する各モジュールのプログラムのいたるところに、同期処理を埋め込むことによって、スレッド間でのデータをやり取りしたり、排他制御して、協調動作するようにしていた。これに対して、本実施形態では、以下に説明していくようにプログラムを直列に同期なしで実行する基本モジュールと、並列動作を定義する並列動作定義部に分割し、同期やデータの授受の必要のある部分は、並列動作定義部で行うことによって、基本モジュールの部品化を促進し、かつ、並列動作定義部をコンパクトに管理できるようにする。
【００１４】
本発明の実施の形態を以下に図面を参照して説明する。
図１は、本実施形態に係わる情報処理装置のシステム構成の一例を示す図である。この情報処理装置は、ノートブックタイプやデスクトップタイプ等のいわゆるパーソナルコンピュータとして実現されている。そして、図１に示すように、本コンピュータは、プロセッサ１、主メモリ２およびハードディスク駆動装置（ＨＤＤ）３を有しており、これらは内部バスを介して相互に接続されている。なお、開発する並列ソフトのターゲットデバイスとしては、PCのみでなく、デジタルTVやDVR、携帯などの組み込み分野でも利用される。
【００１５】
プロセッサ１は、コンピュータ等の情報処理装置から読み取り可能な記憶媒体であるＨＤＤ３から主メモリにロードされたプログラムを実行制御する中央演算処理装置（ＣＰＵ）であり、主要部の演算回路（ＣＰＵコア）であるコア１１を複数内蔵している。このコア１１が言わば実行ユニットである。
【００１６】
主メモリ２は、プロセッサ１がアクセス可能な、例えば半導体で構成される記憶装置である。一方、ＨＤＤ３は、本コンピュータにおける補助記憶としての役割を担う、（主メモリ２と比較して）低速大容量の記憶媒体である。
【００１７】
また、図示していないが、プロセッサ１によるプログラムの処理結果等を表示するためのディスプレイや処理データ等を入力するためのキーボードなどの入出力装置が、例えばノートブックタイプの場合はさらに備えられ、また、例えばデスクトップタイプの場合はケーブル等により外部接続される。
【００１８】
コア１１を複数内蔵するプロセッサ１を搭載する本コンピュータは、複数のプログラムを並列実行することが可能であり、また、１つのプログラム中の複数の処理を並列実行することも可能である。ここで、図２を参照して、本コンピュータによって実行される並行処理仕様のプログラムの概略構成について説明する。
【００１９】
図２に示すように、本コンピュータによって実行される並行処理仕様の実行プログラム１００は、複数の直列基本モジュール１０１と、この複数の直列基本モジュール１０１をどのような順序で実行すべきかを定義する並列実行制御記述１０２とから構成される。
【００２０】
いわゆるマルチスレッド処理では、一般的に、図１７に示すように、他のスレッドとの間で（通信を含む）同期を取りながら、即ち、プログラム全体の整合性を保ちながら、各スレッドが処理を進行させていく。よって、同期の待ち合わせが多発すると、期待した並列性能が得られないことが考えられる。
【００２１】
そこで、本実施形態では、図３に示すように、他のモジュールとの同期を取る必要がない、非同期に実行可能な処理単位にプログラムを分割することで、複数の直列基本モジュール１０１を作成すると共に、この複数の直列基本モジュール１０１の時系列的な実行規則を定義する並列実行制御記述１０２を作成する。並列実行制御上、各直列基本モジュール１０１は、ノードとして表現される。このように、直列基本モジュールとは、他のモジュールと並列記述が表現する半順序の実行順序を守りながら実行可能な処理単位のモジュールをいう。半順序の実行順序がないノード同士は非同期に並列実行される。
【００２２】
図４に、本発明による並列プログラムの実行環境を示す。並列動作定義部はコンパイラによって実行環境が利用するデータ構造（バイトコードであっても良い）に変換される。実行環境は、このデータ構造を基にして、基本モジュール（タスク）を頂点（ノード）とし、データ依存関係を辺とするグラフ構造（タスクグラフという）を動的に生成する。実行環境は、タスクグラフが示す半順序関係に従って、タスクをプロセッサに割り当てて並列処理を遂行する。この図４の例のプロセッサではコア１１を１６個持つ構成となっている。
【００２３】
次に、図５を参照して、並列実行制御記述１０２について説明する。
図５（Ａ）は、ある直列基本モジュール１０１を表現したノードの概念図である。図示のように、各直列基本モジュール１０１は、先行ノードへのリンクと、後続ノードへの結合子とを有するノードとして捉えることができる。並列実行制御記述１０２は、各直列基本モジュール１０１それぞれについて、先行ノードへのリンク情報を記すことにより、複数の直列基本モジュール１０１の実行順序を定義する。図５（Ｂ）は、ある直列基本モジュール１０１に関する並列実行制御記述を例示する図であり、図示のように、それぞれの識別子である直列基本モジュールＩＤと、その直列基本モジュール１０１の先行ノードへのリンク情報とが記される。また、その他に、出力バッファタイプや生成するデータサイズの情報が併せて記される。
【００２４】
続いて、この複数の直列基本モジュール１０１と並列実行制御記述１０２とから構成されるという構成をもつ実行プログラム１００を本コンピュータがどのように実行するのかについて説明する。
【００２５】
このような構成をもつ実行プログラム１００を並列処理するために、本コンピュータでは、ランタイム処理の実行環境として例えば図６に示すランタイムライブラリ２００が用意される。ランタイムライブラリ２００はコンピュータ情報処理装置から読み取り可能な記憶媒体であるＨＤＤ３に格納される。ハードディスクドライブ３から主メモリにロードされたランタイムライブラリ２００は、プロセッサ１によって実行される。このランタイムライブラリ２００は、スケジューラとしての機能を備えており、並列実行制御記述１０２がグラフデータ構造生成情報２０１として与えられる。並列実行制御記述１０２は、例えば関数型言語を用いて作成され、トランスレータによってグラフデータ構造生成情報２０１に変換される。
【００２６】
何らかのデータ入力が行われると、このデータを処理するための直列基本モジュール１０１をいくつか実行する必要が生じるが、その都度、ランタイムライブラリ２００は、グラフデータ構造生成情報２０１に基づき、複数のノードとノード間を接続するエッジによって示すグラフデータ構造２０２を動的に生成・更新していく。グラフデータ構造２０２は、その時々で適宜に実行されていくノード群の前後関係を示すグラフデータであり、ランタイムライブラリ２００は、追加対象のノード間での前後関係は勿論、実行待ちの状態にあるノードとの間の前後関係も考慮して、それらノード群のグラフデータ構造２０２への追加を行っていく。
【００２７】
また、ランタイムライブラリ２００は、あるノードの実行が完了すると、このノードをグラフデータ構造２０２から削除すると共に、このノードを先行ノードとし、かつ、その他に先行ノードがないか、または、その他の先行ノードがすべて完了している後続ノードの有無を調べて、この条件を満たす後続ノードが存在したら、そのノードをいずれかのコア１１に割り当てる。
【００２８】
このランタイムライブラリ２００の働きにより、並列実行制御記述１０２に基づく複数の直列基本モジュール１０１の並列実行が矛盾無く進められていく。また、このランタイムライブラリ２００は、プロセッサ１が内蔵するコア１１の数よりも多くの数のスレッドによって実行する（マルチスレッド）。この結果、図７および図８に示すように、各コア１１（各コア１１のＯＳ３００配下の１スレッドであるランタイムライブラリ２００）があたかも自律的に次に実行すべき直列基本モジュール１０１を見つけ出してくるかのごとく本コンピュータを動作させることができる。スレッド間の排他制御は、ランタイムライブラリ２００による、グラフデータ構造２０２からのノードの選択と、当該グラフデータ構造の更新とのみに止まるので、図１７に示した一般的なマルチスレッド処理と比較して、高い並列性能を得ることを実現する。
【００２９】
図７および図８に、並列実行環境による基本モジュールの並列動作のシーケンスを示す。あるコアがタスクの実行を完了して実行環境を呼び出すと、実行環境はタスクの実行完了によってタスクグラフをアップデートし、実行可能となるタスクを、実行可能キューに追加する。実行可能キューにタスクが登録されていれば、そこから一つ取り出して、コア上で実行を開始する。すると、次のコアが実行環境を呼び出して、実行可能なタスクを選択する。実行可能なタスクが存在しない場合は、並列動作定義に従って生成されたデータ構造を元に、タスクグラフに新規タスクを登録する処理を実行可能なタスクが見つかるまで行う。メモリサイズなどのリソースリミットに到達するまで実行可能なタスクが見つからない場合は、先行して実行しているプログラムの完了を待つ。
【００３０】
図７には、コア１１が４つの場合を示している。４つのコア中のコア（２）１１がランタイムライブラリ２００を実行し、ランタイムライブラリ２００が複数の基本モジュール１０１の中から基本モジュールを呼び出すさまを模式的に示している。
【００３１】
また、図８において、五角形の図形はランタイムライブラリ２００を示し、太い矢印線は基本モジュールを示している。太い矢印線の長さは基本モジュールの実行時間を示している。
【００３２】
図８に示すように、実行環境の処理時間は、タスクの実行時間と比較して十分小さいので、実行環境がコア間で継続的に実行されても、充分な並列性を得ることが出来る。プログラムの階層構造を利用すると実行環境の動作そのものを並列に実行することが可能である。
【００３３】
このランタイムライブラリ２００の働きにより、並列実行制御記述１０２に基づく複数の直列基本モジュール１０１の並列実行が矛盾無く進められていく。また、このランタイムライブラリ２００は、プロセッサ１が内蔵するコア１１の数よりも多くの数のスレッドによって実行する（マルチスレッド）。この結果、図７および図８に示すように、各コア１１（各コア１１のＯＳ３００配下の１スレッドであるランタイムライブラリ２００）があたかも自律的に次に実行すべき直列基本モジュール１０１を見つけ出してくるかのごとく本コンピュータを動作させることができる。スレッド間の排他制御は、ランタイムライブラリ２００による、グラフデータ構造２０２からのノードの選択と、当該グラフデータ構造の更新とのみに止まるので、図１７に示した一般的なマルチスレッド処理と比較して、高い並列性能を得ることを実現する。
【００３４】
図９に、本発明における並列プログラムのデバッグツール画面を示す。デバッグ画面上では、時間順序として上部から下部へと実際に実行するべきタスクグラフが表示されている。このタスクグラフに対してポインタデバイスＣによって線で囲うことにより複数のブレークポイントを同時に設定する（ブレークポイントの集合を指定）ことを特徴とする。ＧＵＩ（Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）ツールは、ブレークポイントが設定されると、このユーザーのアクションを受けとり、ブレークポイントの情報を保持する。
【００３５】
図１３にＧＵＩツールとデバッガ、並列実行環境とアプリケーションの関係を示す。ＧＵＩツールＧからデバッガＤ上で並列実行環境Ｊが起動されると並列実行環境Ｊの入り口で、break命令を実行してプログラムを中断する。ＧＵＩツールＧはデバッガＤのコマンドを使って、並列実行環境ＪのＡＰＩを呼び出し、設定されたブレークポイント情報を並列実行環境Ｊに伝える。並列実行環境Ｊは、受け取ったブレークポイント情報を内部で保持する。
【００３６】
ブレークポイントの設定が終わると、ＧＵＩツールは、デバッガでプログラムの実行を継続させ、実行環境の動作に制御を戻す。実行環境は図１４に示すように、実行可能になったタスクを実行可能キューに登録するときに、ブレークポイントが設定されているかどうかをチェックし、ブレークポイントが設定されていれば、実行可能キューには登録せずに、ペンディングキューへタスクを登録する。ブレークポイントが設定されたタスクすべてがペンディングキューに登録されると、実行環境は、break_point関数を呼び、この関数のエントリに設定されているブレーク命令を実行して、デバッガに制御を移す（図１０）。
【００３７】
図１４（ａ）のブレークポイントの設定処理では、ＧＵＩフロントエンドでブレークポイント条件を取得し（ステップＳ５１）、ブレークポイントの数だけ実行環境のブレークポイント設定ＡＰＩを呼び出してブレークポイントを設定する（ステップＳ５２）。図１４（ｂ）の実行環境のブレークポイントの設定ＡＰＩでは、ＡＰＩよりブレークポイント設定モジュールＡと条件を取得し（ステップＳ５３）、実行環境が管理する実行モジュールＡの情報にブレークポイント情報を登録する（ステップＳ５４）。
【００３８】
また図１４（ｃ）の実行環境における並列処理時のブレークでは、まず新たに実行可能となったノードを取得できたか判定する（ステップＳ５５）。ここでノードを取得できたと判定された場合は次のステップＳ５６へ進み、他方ノードを取得できなかったと判定された場合はステップＳ５８へと進む。ステップＳ５６では、ステップＳ５５で取得できたノードがブレークポイントが設定されたノードか否かを判定し、noと判定された場合は次のステップＳ５７へ進み、他方yesと判定された場合はステップＳ６０へと進む。ステップＳ５７では、ノードを実行可能キューに追加してステップＳ５５へと戻る。
【００３９】
ステップＳ５８では、実行可能キューが空でないか判定し空の場合はステップＳ６２へ進みbreak_point()関数を呼ぶことによりこのフローの処理を終了する。またステップＳ５８で実行可能キューが空でないと判定された場合はステップＳ５９へ進み当該ノードを実行してこのとき、図8でランタイムの動作について説明したように、マルチコア（プロセッサ）の環境では、当該ノードを実行しているプロセッサコアとは別のコアがステップＳ５５へと戻る。あとステップＳ６０においてはノードをペンディングキューに追加し、次のステップ６１へ進みすべてのブレークポイントがペンディングキューに入ったか判定しyesならばステップＳ６２へ進みnoならばステップＳ５５へ戻る。
【００４０】
次にユーザーが、並列ステップボタンを押すと、ＧＵＩツールは、並列実行環境のＡＰＩを呼び出して、現在のブレークポイントが設定されているタスクに隣接する次に実行するタスクにブレークポイントを設定し、さらに並列ステップモードであることを実行環境に伝え、プログラムを継続させる。break_point関数から戻った実行環境は、並列ステップモードであるので、ペンディングキューに登録されたすべてのタスクをデキューして、実行可能キューに登録した後、デバッガ上での実行を再開する。この動作によって、最初にブレークポイントが設定されていたすべてのタスクの実行を、ほぼ同時にスタートさせることが出来る（図１１）。
【００４１】
図１２に、特定のタスクを矢印Ａで指定して、直列ステップ実行する場合の動作を示す。この場合は、並列ステップのときとは異なり、指定されたタスクのみをペンディングキューから実行可能キューへ移す。
【００４２】
図１５にブレークポイントの管理方法を示す。ＧＵＩツールと並列実行環境は、複数のブレークポイントの集合を、複数管理するためのブレークポイント情報（タスクＩＤの集合）を持つ。並列ブレークポイント設定時、ＧＵＩツールでは、複数のブレークポイントの集合間で、競合がないことを確認する。競合がある場合は、ブレークポイント設定不可能というメッセージを出力して設定指示を受け付けない。また、競合が無い場合でも、図１５に示すようにブレークポイントＰとＱを設定した後に、同図の中のＡを含むブレークポイントＲを設定しようとすると、ブレークポイントＲは、ブレークポイントＱからのパスがないので、ブレークポイントＱより先にＡに到達する可能性があることを、ユーザーに知らせる。このように、ブレークポイントセット間での前後関係が明確に定まらないケースについて、デバッグ作業者に、それぞれのブレークポイントセットに含まれるノード間での前後関係をビジュアルに表示することで、プログラム全体の並列動作の順序関係にたいする洞察を与えることが可能となる。
【００４３】
図１６に、並列ブレークポイントの選択をサポートするための画面表示例を示す。図９とは異なり、この場合は、並列ブレークポイントを1つずつ選ぶときのＧＵＩ操作である。選択済みのノードをハイライト（図面上では斜線）で示し、選択済みのノード集合の先行ノードと後続ノードはオフカラーで表示し、現並列ブレークポイントになりうる候補を強調表示（図面上では格子表現）する。ノードＡの先行ノードとは、矢印ＢをたどってノードＡへ到達するパスがあるノードの集合であり、ノードＡの後続ノードとは、ノードＡから矢印Ｂをたどって到達するパスがあるノードの集合である。このように並列ブレークポイント指定時に、ノードの候補をわかりやすく表示することによって、どのノードとノードが並列動作可能か（即ち、並列ブレークポイントとなるか）を認識することが容易になる。
【００４４】
本実施形態により、並列プログラムのデバッグ効率を大幅に改善することが出来る。
本実施形態は、マルチスレッドで動作する並列プログラムに対して、複数のブレークポイントを効率よく設定する方法を提供する。また、デバッグ対象プログラムの実行において、複数のブレークポイントで同時に実行中断させることが可能である。さらに、ブレークポイントで停止している複数のスレッドを同時に実行再開させることが可能であるので、複数のモジュールが同時に動作する場合のプログラム検査が容易となる。また、ブレークポイントで停止している複数のスレッドに対して、注目ポイント以外の実行を中断したままにしておいて、注目ポイントのみをステップ実行させることが可能であり、並列プログラムのデバッグ効率向上に寄与する。実施形態の要点をまとめると次のようである。
【００４５】
（１）並列プログラムのブレークポイントの設定を、ＧＵＩを使って効率よく行う。
（２）ランタイムライブラリの下に複数のスレッドそれぞれを、設定した複数のブレークポインで同時に停止させることができる。
（３）指定した複数のブレークポイントで止まっているスレッドを、同時に実行開始することができる。
（４）ＧＵＩ画面から、実行したいモジュールを特定し、そのモジュールのみ実行する手段を提供する。
（５）複数のブレークポイントの集合を複数セット管理しＧＵＩからのブレークポイント設定を補助する。
なお、この発明は上記実施形態に限定されるものではなく、この外その要旨を逸脱しない範囲で種々変形して実施することができる。例えば上記実施形態では、特定のビジュアル表現のみを記載したが、本質的に同じ動作で、別のビジュアル表現にすることも可能であり、デバッガ上での動作が同じであれば、本発明の変形とみなせる。
【００４６】
また、上記した実施の形態に開示されている複数の構成要素を適宜に組み合わせることにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素から幾つかの構成要素を削除しても良いものである。さらに、異なる実施の形態に係る構成要素を適宜組み合わせても良いものである。
【符号の説明】
【００４７】
１…プロセッサ，２…主メモリ，３…ハードディスク駆動装置（ＨＤＤ），１１…コア，１００…実行プログラム，１０１…直列基本モジュール，１０２…並列実行制御記述，２００…ランタイムライブラリ，２０１…グラフデータ構造生成情報，２０２…グラフデータ構造。
【図１】
2011070256.tif 000003
【図２】
2011070256.tif 000004
【図３】
2011070256.tif 000005
【図４】
2011070256.tif 000006
【図５】
2011070256.tif 000007
【図６】
2011070256.tif 000008
【図７】
2011070256.tif 000009
【図８】
2011070256.tif 000010
【図９】
2011070256.tif 000011
【図１０】
2011070256.tif 000012
【図１１】
2011070256.tif 000013
【図１２】
2011070256.tif 000014
【図１３】
2011070256.tif 000015
【図１４】
2011070256.tif 000016
【図１５】
2011070256.tif 000017
【図１６】
2011070256.tif 000018
【図１７】
2011070256.tif 000019
【手続補正書】
【提出日】平成23年1月24日(2011.1.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の実行ユニットと、
他のモジュールと非同期に実行可能な複数の基本モジュールに分割されるとともに前記複数の基本モジュールの時系列的な実行規則を定義した並列実行制御情報を含むプログラムを前記複数の実行ユニットにより並列実行させるため、前記実行規則に基づき前記複数の基本モジュールを前記複数の実行ユニットに割り当て制御するスケジューラと、
を具備し、
前記スケジューラは、
Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）により外部から指定される前記複数の基本モジュールに対応する複数のブレークポイントの集合を受付ける受付部と、
前記受付部が受付けたブレークポイントの集合を前記複数の基本モジュールに設定するブレークポイント集合設定部と
を有することを特徴とするデバッガ。
【請求項２】
複数の実行ユニットと、
他のモジュールと非同期に実行可能な複数の基本モジュールに分割されるとともに前記複数の基本モジュールの時系列的な実行規則を定義した並列実行制御情報を含むプログラムを前記複数の実行ユニットにより並列実行させるため、前記実行規則に基づき前記複数の基本モジュールを前記複数の実行ユニットに割り当て制御するスケジューラと、
を具備し、
前記スケジューラは、
Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）により外部から指定される前記複数の基本モジュールに対応する複数のブレークポイントの集合を受付ける受付部と、
前記受付部が受付けたブレークポイントの集合を前記複数の基本モジュールに設定するブレークポイント集合設定部と、
前記ブレークポイントの情報を保持する保持部と
を有することを特徴とするデバッガ。
【請求項３】
前記スケジューラは、複数のスレッドとして動作する前記基本モジュールそれぞれを、設定した複数の前記ブレークポイントで同時に停止させるよう働くことを特徴とする請求項１に記載のデバッガ。
【請求項４】
前記スケジューラは、指定された複数の前記ブレークポイントで停止している複数のスレッドを同時に実行開始させるよう働くことを特徴とする請求項１に記載のデバッガ。
【請求項５】
前記スケジューラは、前記ＧＵＩで指定された一つの前記基本モジュールを他の前記複数の基本モジュールとは排他的に実行させるよう働くことを特徴とする請求項１に記載のデバッガ。
【請求項６】
前記スケジューラは、指定された複数の前記ブレークポイントを複数セット管理し、この複数のブレークポイントの集合間において動作の前後関係が明確に定まらない競合関係またはこの複数のブレークポイントに関連するノード間での前後関係をユーザーに通知するよう働くことを特徴とする請求項１に記載のデバッガ。
【請求項７】
複数の実行ユニットと、
他のモジュールと非同期に実行可能な複数の基本モジュールに分割されるとともに前記複数の基本モジュールの時系列的な実行規則を定義した並列実行制御情報を含むプログラムを前記複数の実行ユニットにより並列実行させるスケジューラとを備えるデバッガを、
Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）により外部から指定される前記複数の基本モジュールに対応する複数のブレークポイントの集合を受付ける受付手段と、
前記受付部が受付けたブレークポイントの集合を前記複数の基本モジュールに設定するブレークポイント集合設定手段
として機能させるプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
上記課題を解決するために、本発明のデバッガは、複数の実行ユニットと、他のモジュールと非同期に実行可能な複数の基本モジュールに分割されるとともに前記複数の基本モジュールの時系列的な実行規則を定義した並列実行制御情報を含むプログラムを前記複数の実行ユニットにより並列実行させるため、前記実行規則に基づき前記複数の基本モジュールを前記複数の実行ユニットに割り当て制御するスケジューラと、を具備し、前記スケジューラは、Ｇｒａｐｈｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）により外部から指定される前記複数の基本モジュールに対応する複数のブレークポイントの集合を受付ける受付部と、前記受付部が受付けたブレークポイントの集合を前記複数の基本モジュールに設定するブレークポイント集合設定部とを有することを特徴とする。