(57)【要約】【課題】並列処理するプログラムにおける動作検証の低コスト化を実現した情報処理装置を提供する。【解決手段】ランタイムライブラリ２００の並列処理検証部２３０は、各直列基本モジュール１０１の実行前に、全ての入力について作業メモリへデータを退避する。このデータの退避後、並列処理検証部２３０は、当該直列基本モジュール１０１を実行させ、その実行後に、元の入力と退避したデータとが全て一致しているかどうかを調べる。そして、不一致が検出されたら、並列処理検証部２３０は、例えば警告メッセージを表示して当該プログラムの実行を強制終了させる等のエラー処理を実行する。【選択図】図８
2010118082.tif 000002
【特許請求の範囲】
【請求項１】
複数の実行ユニットと、
前記複数の実行ユニットから共有されるシステムメモリと、
先行する基本モジュールの出力データを入力データとし、かつ、他のモジュールとの同期を取る必要がない複数の基本モジュールに分割され、当該複数の基本モジュールの実行順序の制約が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行順序の制約に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラと、
を具備し、
前記スケジューラは、
前記複数の実行ユニットのそれぞれについて、前記基本モジュールの実行前に、前記基本モジュールの入力データとして各実行ユニットが入力する前記システムメモリ上の領域のデータを当該システムメモリ上の他の領域に複製して退避させ、前記基本モジュールの実行後に、前記基本モジュールの入力データとして各実行ユニットが入力した前記システムメモリ上の領域のデータと、当該システムメモリ上の他の領域に退避させたデータとを比較して、前記基本モジュールが入力データを上書きしていないことを検証する検証手段を有することを特徴とする情報処理装置。
【請求項２】
前記検証手段は、前記基本モジュールの入力データとして各実行ユニットが入力した前記システムメモリ上の領域のデータと、当該システムメモリ上の他の領域に退避させたデータとの値が異なっていた場合、その旨を報知する手段を含むことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記検証手段は、前記基本モジュールを前記複数の実行ユニットの中のいずれかの実行ユニットに割り当てて実行させる時に、前記システムメモリ上の他の領域に退避させたデータを入力データとする前記基本モジュールと同一の基本モジュールを他の実行ユニットに割り当てて別途実行させ、前記２つの同一の基本モジュールの実行後に、当該２つの基本モジュールの出力データとして各実行ユニットが出力した前記システムメモリ上の２つの領域のデータを比較して、前記基本モジュールが同じ入力データに対して同じ出力データを得ていることを検証する手段を含むことを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記検証手段を機能させるか否かを設定する設定手段をさらに具備することを特徴とする請求項１記載の情報処理装置。
【請求項５】
複数の実行ユニットと、
前記複数の実行ユニットから共有されるシステムメモリと、
先行する基本モジュールの出力データを入力データとし、かつ、他のモジュールとの同期を取る必要がない複数の基本モジュールに分割され、当該複数の基本モジュールの実行順序の制約が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行順序の制約に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラと、
を具備し、
前記スケジューラは、
前記基本モジュールを前記複数の実行ユニットの中のいずれかの実行ユニットに割り当てて実行させる時に、前記基本モジュールの入力データとして前記いずれかの実行ユニットが入力する前記システムメモリ上の領域のデータを同じく入力データとする前記基本モジュールと同一の基本モジュールを他の実行ユニットに割り当てて別途実行させ、前記２つの同一の基本モジュールの実行後に、当該２つの基本モジュールの出力データとして各実行ユニットが出力した前記システムメモリ上の２つの領域のデータを比較して、前記基本モジュールが同じ入力データに対して同じ出力データを得ていることを検証する検証手段を有することを特徴とする情報処理装置。
【請求項６】
前記検証手段は、各実行ユニットが出力した前記システムメモリ上の２つの領域のデータの値が異なっていた場合、その旨を報知する手段を含むことを特徴とする請求項５記載の情報処理装置。
【請求項７】
前記検証手段を機能させるか否かを設定する設定手段をさらに具備することを特徴とする請求項５記載の情報処理装置。
【請求項８】
前記スケジューラは、
前記複数の基本モジュールそれぞれの前記複数の実行ユニットによる平均実行時間を計測する計測手段をさらに有し、
前記検証手段は、前記基本モジュールの実行前に、前記計測手段が計測した当該基本モジュールの平均実行時間を用いて、当該基本モジュールの実行開始を遅延させる時間を無作為に算出し、この時間分、当該基本モジュールの実行開始を遅延させる手段を含む、
ことを特徴とする請求項１、３または５記載の情報処理装置。
【請求項９】
複数の実行ユニットと、前記複数の実行ユニットから共有されるシステムメモリと、先行する基本モジュールの出力データを入力データとし、かつ、他のモジュールとの同期を取る必要がない複数の基本モジュールに分割され、当該複数の基本モジュールの実行順序の制約が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行順序の制約に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラとを具備する情報処理装置におけるプログラムの検証方法であって、
前記スケジューラが、
前記複数の実行ユニットのそれぞれについて、前記基本モジュールの実行前に、前記基本モジュールの入力データとして各実行ユニットが入力する前記システムメモリ上の領域のデータを当該システムメモリ上の他の領域に複製して退避させ、前記基本モジュールの実行後に、前記基本モジュールの入力データとして各実行ユニットが入力した前記システムメモリ上の領域のデータと、当該システムメモリ上の他の領域に退避させたデータとを比較して、前記基本モジュールが入力データを上書きしていないことを検証する
ことを特徴とするプログラムの検証方法。
【請求項１０】
複数の実行ユニットと、前記複数の実行ユニットから共有されるシステムメモリと、先行する基本モジュールの出力データを入力データとし、かつ、他のモジュールとの同期を取る必要がない複数の基本モジュールに分割され、当該複数の基本モジュールの実行順序の制約が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行順序の制約に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラとを具備する情報処理装置におけるプログラムの検証方法であって、
前記スケジューラが、
前記基本モジュールを前記複数の実行ユニットの中のいずれかの実行ユニットに割り当てて実行させる時に、前記基本モジュールの入力データとして前記いずれかの実行ユニットが入力する前記システムメモリ上の領域のデータを同じく入力データとする前記基本モジュールと同一の基本モジュールを他の実行ユニットに割り当てて別途実行させ、前記２つの同一の基本モジュールの実行後に、当該２つの基本モジュールの出力データとして各実行ユニットが出力した前記システムメモリ上の２つの領域のデータを比較して、前記基本モジュールが同じ入力データに対して同じ出力データを得ていることを検証する
ことを特徴とするプログラムの検証方法。
【請求項１１】
前記スケジューラが、
さらに、
前記複数の基本モジュールそれぞれの前記複数の実行ユニットによる平均実行時間を計測し、
前記基本モジュールの実行前に、前記計測手段が計測した当該基本モジュールの平均実行時間を用いて、当該基本モジュールの実行開始を遅延させる時間を無作為に算出し、この時間分、当該基本モジュールの実行開始を遅延させる、
ことを特徴とする請求項９または１０記載のプログラムの検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えばＣＰＵコアを複数内蔵するＣＰＵを搭載するコンピュータや、複数のＣＰＵを搭載するコンピュータ等に適用して好適なプログラムの検証技術に関する。
【背景技術】
【０００２】
近年、ノートブックタイプやデスクトップタイプ等、様々な種類の個人向けコンピュータ（パーソナルコンピュータ）が広く普及している。この種のコンピュータでは、例えば高精細動画像データをソフトウェアによって再生する等、その情報処理能力に対する要求はＣＰＵの性能向上の限界に迫るほどに高まる一方である。
【０００３】
このような事から、例えば複数のＣＰＵを搭載したり、また、最近では、ＣＰＵコアを複数内蔵するＣＰＵを搭載するコンピュータが登場してきている。即ち、プログラムを並列処理することで、所要時間の短縮化を図り、以て、コンピュータの性能を向上させるわけである。プログラムの並列処理を効率的に行うための仕組みについては、これまでも種々提案されている（例えば特許文献１等参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２５８９２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プログラムの並列処理の１つの形態は、プログラム中の各処理単位を実行ユニットに割り当てる（複数のＣＰＵを搭載するコンピュータにおいては、各ＣＰＵへの割り当てを行い、ＣＰＵコアを複数内蔵するＣＰＵを搭載するコンピュータにおいては、各ＣＰＵコアへの割り当てを行う）スケジューラを含むランタイム処理と、各実行ユニット上で動作する処理単位との２つの構成要素から構成される。
【０００６】
ところで、プログラムを並列処理するには、並列動作する各処理単位が独立な関係を保つ必要がある。例えば、処理単位Ａの出力データを入力して処理単位Ｂと処理単位Ｃとが実行される場合、処理単位Ｂおよび処理単位Ｃのそれぞれは、処理単位Ａの出力データのみによって結果が決まるものとならなければならない。このことから、各処理単位の入力データが保持されるシステムメモリ上の領域は、当該各処理単位の実行時、リードオンリー、即ち、書き換え不可能な領域として管理されなければならない。例えば、先に実行を開始した処理単位Ｂが入力データを上書きしてしまうと、その後に実行を開始した処理単位Ｃの結果に影響を与えることになる。
【０００７】
このような事象が発生しないこと、即ち、プログラムの正当性を検証する場合、これまでは、テスト用のコードをプログラムに埋め込んでテストしていた。しかしながら、この作業は、プログラミング以上に作業コストがかかるという問題があった。また、並列処理においては、動作タイミングの問題で、不具合の再現性が低く、デバッグが難しくなるという問題もあった。
【０００８】
さらに、プログラムを並列処理するには、複数の実行ユニットから同一の基本モジュールが同時に呼び出される場合を考慮して、プログラムの各処理単位がリエントランス性を有することを検証する必要があるが、この検証においても、前述と同様の問題がある。
【０００９】
この発明は、このような事情を考慮してなされたものであり、並列処理するプログラムにおける動作検証の低コスト化を実現した情報処理装置およびプログラムの検証方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
前述した目的を達成するために、この発明の情報処理装置は、複数の実行ユニットと、前記複数の実行ユニットから共有されるシステムメモリと、先行する基本モジュールの出力データを入力データとし、かつ、他のモジュールとの同期を取る必要がない複数の基本モジュールに分割され、当該複数の基本モジュールの実行順序の制約が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行順序の制約に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラと、を具備し、前記スケジューラは、前記複数の実行ユニットのそれぞれについて、前記基本モジュールの実行前に、前記基本モジュールの入力データとして各実行ユニットが入力する前記システムメモリ上の領域のデータを当該システムメモリ上の他の領域に複製して退避させ、前記基本モジュールの実行後に、前記基本モジュールの入力データとして各実行ユニットが入力した前記システムメモリ上の領域のデータと、当該システムメモリ上の他の領域に退避させたデータとを比較して、前記基本モジュールが入力データを上書きしていないことを検証する検証手段を有することを特徴とする。
【００１１】
また、この発明の情報処理装置は、複数の実行ユニットと、前記複数の実行ユニットから共有されるシステムメモリと、先行する基本モジュールの出力データを入力データとし、かつ、他のモジュールとの同期を取る必要がない複数の基本モジュールに分割され、当該複数の基本モジュールの実行順序の制約が定義されるプログラムを、前記複数の実行ユニットによって並列実行するために、前記実行順序の制約に基づき、前記複数の実行ユニットに対する前記複数の基本モジュールの割り当てを制御するスケジューラと、を具備し、前記スケジューラは、前記基本モジュールを前記複数の実行ユニットの中のいずれかの実行ユニットに割り当てて実行させる時に、前記基本モジュールの入力データとして前記いずれかの実行ユニットが入力する前記システムメモリ上の領域のデータを同じく入力データとする前記基本モジュールと同一の基本モジュールを他の実行ユニットに割り当てて別途実行させ、前記２つの同一の基本モジュールの実行後に、当該２つの基本モジュールの出力データとして各実行ユニットが出力した前記システムメモリ上の２つの領域のデータを比較して、前記基本モジュールが同じ入力データに対して同じ出力データを得ていることを検証する検証手段を有することを特徴とする。
【発明の効果】
【００１２】
この発明によれば、並列処理するプログラムにおける動作検証の低コスト化を実現することができる。
【図面の簡単な説明】
【００１３】
【図１】この発明の実施形態に係る情報処理装置のシステム構成の一例を示す図。
【図２】本実施形態の情報処理装置によって実行される並行処理仕様のプログラムの概略構成を説明するための図。
【図３】一般的なマルチスレッド処理を示す図。
【図４】本実施形態の情報処理装置によって実行されるプログラムを構成する直列基本モジュールと並列実行制御記述との関係を示す図。
【図５】本実施形態の情報処理装置によって実行されるプログラムの並列実行制御記述を説明するための図。
【図６】本実施形態の情報処理装置上で動作するランタイムライブラリが行うプログラムの並列処理制御を説明するための図。
【図７】本実施形態の情報処理装置上におけるランタイムライブラリの動作状態を示す図。
【図８】本実施形態の情報処理装置上で動作するランタイムライブラリの機能ブロックを示す図。
【図９】並列プログラムが動作する時のメモリモデルを示す図。
【図１０】本実施形態の情報処理装置上で動作するランタイムライブラリが実行する並列処理検証の第１の動作を説明するための図。
【図１１】本実施形態の情報処理装置上で動作するランタイムライブラリが実行する並列処理検証の第２の動作を説明するための図。
【図１２】本実施形態の情報処理装置上で動作するランタイムライブラリが並列処理検証の第１および第２の動作を同時進行させる場合の例を説明するための図。
【図１３】本実施形態の情報処理装置上で動作するランタイムライブラリが実行する並列処理検証の第１の動作の流れを示すフローチャート。
【図１４】本実施形態の情報処理装置上で動作するランタイムライブラリが実行する並列処理検証の第２の動作の流れを示すフローチャート。
【図１５】本実施形態の情報処理装置上で動作するランタイムライブラリが実行する並列処理検証の変形例を説明するための第１の図。
【図１６】本実施形態の情報処理装置上で動作するランタイムライブラリが実行する並列処理検証の変形例を説明するための第２の図。
【発明を実施するための形態】
【００１４】
以下、図面を参照して、この発明の一実施形態を説明する。
【００１５】
図１は、本実施形態に係る情報処理装置のシステム構成の一例を示す図である。この情報処理装置は、ノートブックタイプやデスクトップタイプ等のいわゆるパーソナルコンピュータとして実現されている。そして、図１に示すように、本コンピュータは、プロセッサ１、主メモリ２およびハードディスク駆動装置（ＨＤＤ）３を有しており、これらは内部バスを介して相互に接続されている。
【００１６】
プロセッサ１は、ＨＤＤ３から主メモリにロードされたプログラムを実行制御する中央演算処理装置（ＣＰＵ）であり、主要部の演算回路（ＣＰＵコア）であるコア１１を複数内蔵している。
【００１７】
主メモリ２は、プロセッサ１がアクセス可能な、例えば半導体で構成される記憶装置である。一方、ＨＤＤ３は、本コンピュータにおける補助記憶としての役割を担う、（主メモリ２と比較して）低速大容量の記憶媒体である。
【００１８】
また、図示していないが、プロセッサ１によるプログラムの処理結果等を表示するためのディスプレイや処理データ等を入力するためのキーボードなどの入出力装置が、例えばノートブックタイプの場合はさらに備えられ、また、例えばデスクトップタイプの場合はケーブル等により外部接続される。
【００１９】
コア１１を複数内蔵するプロセッサ１を搭載する本コンピュータは、複数のプログラムを並列実行することが可能であり、また、１つのプログラム中の複数の処理を並列実行することも可能である。ここで、図２を参照して、本コンピュータによって実行される並行処理仕様のプログラムの概略構成について説明する。
【００２０】
図２に示すように、本コンピュータによって実行される並行処理仕様の実行プログラム１００は、複数の直列基本モジュール１０１と、この複数の直列基本モジュール１０１をどのような順序で実行すべきかを定義する並列実行制御記述１０２とから構成される。
【００２１】
いわゆるマルチスレッド処理では、一般的に、図３に示すように、他のスレッドとの間で（通信を含む）同期を取りながら、即ち、プログラム全体の整合性を保ちながら、各スレッドが処理を進行させていく。よって、同期の待ち合わせが多発すると、期待した並列性能が得られないことも考えられる。
【００２２】
そこで、本実施形態では、図４に示すように、他のモジュールとの同期を取る必要がない、非同期に実行可能な処理単位にプログラムを分割することで、複数の直列基本モジュール１０１を作成すると共に、この複数の直列基本モジュール１０１の実行順序の制約を定義する並列実行制御記述１０２を作成する。並列実行制御上、各直列基本モジュール１０１は、ノードとして表現される。このように、直列基本モジュールとは、他のモジュールと非同期に実行可能な処理単位のモジュールをいう。次に、図５を参照して、並列実行制御記述１０２について説明する。
【００２３】
図５（Ａ）は、ある直列基本モジュール１０１を表現したノードの概念図である。図示のように、各直列基本モジュール１０１は、先行ノードへのリンクと、後続ノードへの結合子とを有するノードとして捉えることができる。並列実行制御記述１０２は、各直列基本モジュール１０１それぞれについて、先行ノードへのリンク情報を記すことにより、複数の直列基本モジュール１０１の実行順序を定義する。図５（Ｂ）は、ある直列基本モジュール１０１に関する並列実行制御記述を例示する図であり、図示のように、それぞれの識別子である直列基本モジュールＩＤと、その直列基本モジュール１０１の先行ノードへのリンク情報とが記される。また、その他に、出力バッファタイプやコスト等の情報が併せて記される。
【００２４】
続いて、この複数の直列基本モジュール１０１と並列実行制御記述１０２とから構成されるという独自の構成をもつ実行プログラム１００を本コンピュータがどのように実行するのかについて説明する。
【００２５】
このような独自の構成をもつ実行プログラム１００を並列処理するために、本コンピュータでは、図６に示すランタイムライブラリ２００が用意される。このランタイムライブラリ２００は、スケジューラとしての機能を備えており、並列実行制御記述１０２がグラフデータ構造生成情報２０１として与えられる。並列実行制御記述１０２は、例えば関数型言語を用いて作成され、トランスレータによってグラフデータ構造生成情報２０１に変換される。
【００２６】
何らかのデータ入力が行われると、このデータを処理するための直列基本モジュール１０１をいくつか実行する必要が生じるが、その都度、ランタイムライブラリ２００は、グラフデータ構造生成情報２０１に基づき、グラフデータ構造２０２を動的に生成・更新していく。グラフデータ構造２０２は、その時々で適宜に実行されていくノード群の前後関係を示すグラフデータであり、ランタイムライブラリ２００は、追加対象のノード間での前後関係は勿論、実行待ちの状態にあるノードとの間の前後関係も考慮して、それらノード群のグラフデータ構造２０２への追加を行っていく。
【００２７】
また、ランタイムライブラリ２００は、あるノードの実行が完了すると、このノードをグラフデータ構造２０２から削除すると共に、このノードを先行ノードとし、かつ、その他に先行ノードがないか、または、その他の先行ノードがすべて完了している後続ノードの有無を調べて、この条件を満たす後続ノードが存在したら、そのノードをいずれかのコア１１に割り当てる。
【００２８】
このランタイムライブラリ２００の働きにより、並列実行制御記述１０２に基づく複数の直列基本モジュール１０１の並列実行が矛盾無く進められていく。ランタイムライブラリ２００は、直列基本モジュール１０１の実行完了後に排他的に呼び出され、入出力のチェック、グラフデータのアップデート、次に実行すべき直列基本モジュール１０１の選択までを行ってリターンする。コア１１上では、選択された直列基本モジュール１０１を実行する。別のコアが次々とランタイムライブラリ２００を呼び出して、次に実行すべき直列基本モジュール１０１を得てこれを実行する。スレッド間の排他制御は、ランタイムライブラリ２００による、グラフデータ構造２０２からのノードの選択と、当該グラフデータ構造の更新とのみに止まるので（図７参照）、図３に示した一般的なマルチスレッド処理と比較して、高い並列性能を得ることを実現する。
【００２９】
そして、このように、非同期に実行可能な処理単位にプログラムを分割することで、複数の直列基本モジュール１０１を作成し、ランタイムライブラリ２００によって、これら複数の直列基本モジュール１０１を複数のコア１１に順序良く割り当てる本コンピュータ１では、プログラム実行時にソースコードを書き換えることなく、直列基本モジュール１０１が入力データを上書きしてしまう問題を検出する仕組みを提供する。また、本コンピュータ１は、複数のコア１１から同一の直列基本モジュール１０１を同時に呼び出す場合に、リエントランス性があることをチェックする仕組みを提供する。以下、この仕組みについて詳述する。
【００３０】
図８は、ランタイムライブラリ２００の機能ブロック図である。
【００３１】
ランタイムライブラリ２００は、図８に示すように、ノード生成部２１０、グラフ構造解釈実行エンジン２２０および並列処理検証部２３０を有している。
【００３２】
前述した、本ランタイムライブラリ２００による、グラフデータ構造生成情報２０１に基づくグラフデータ構造２０２の動的な生成・更新と、このグラフデータ構造２０２を用いたノードのコア１１への割り当て制御とは、ノード生成部２１０およびグラフ構造解釈実行エンジン２２０によって実現されている。そして、並列処理検証部２３０が、このノード生成部２１０およびグラフ構造解釈実行エンジン２２０によって実現される並列処理の検証を実施する。
【００３３】
図９は、並列プログラムが動作する時のメモリモデルを示している。プログラムを並列動作させるには、並列動作する処理が独立な関係を保つ必要がある。グラフベースの並列処理では、入力データとなる先行ノードの実行結果は、リードオンリー、即ち、書き換え不可能な領域として管理する。また、直列基本モジュール１０１で値を書き込む領域は、結果出力用のバッファのみである。こうすることによって、直列基本モジュール１０１の実行は、入力データのみによって結果が決まるものとなり、他の直列基本モジュール１０１の動作と干渉しないようにできるからである。
【００３４】
しかし、このような制約を設けたとしても、直列基本モジュール１０１の実装を、性能を達成するためにＣ言語やＣ＋＋言語で記述すると、コンパイラで、この制約をチェックすることができない。また、プログラムローダにより、アドレス空間の割り当ての違いでリードオンリーセクションにデータを割り当てることができるが、先行ノードの直列基本モジュール１０１が結果を書き込むため、単純なハードウェアによるプロテクションだけでは十分でない。
【００３５】
そこで、ランタイムライブラリ２００の並列処理検証部２３０は、第１に、直列基本モジュール１０１の実行途中で、入力データの変化がなかったことをチェックする。より具体的には、図１０に示すように、各直列基本モジュール１０１の実行前に、入力となる先行ノードの実行結果を作業メモリに退避しておき、当該直列基本モジュール１０１の実行が終わった時点で、元の入力データと、この退避したデータの比較を行い、入力データに変化がないことをチェックする。ランタイムライブラリ２００は、すべての並列プログラムに共通に使える部分であるため、並列プログラムを実装する度に、このようなチェックコードをソースコードに埋め込む手間が省けるため、開発効率の向上になる。また、テストコードの実装漏れを防ぐことができるため、網羅的なテストが可能となり、信頼性の高いプログラムを作成できる。
【００３６】
また、ランタイムライブラリ２００の並列処理検証部２３０は、入力データの変化をモニタリングするだけでなく、第２に、直列基本モジュール１０１のリエントランス性（スレッドセーフでもある）のチェックを行う。より具体的には、図１１に示すように、各直列基本モジュール１０１の実行時に、結果出力用のバッファ（オブジェクトとみなすことも可能）を２つ準備し、同じ入力に対して、同時に直列基本モジュール１０１を実行し、この２つの結果を比較する。結果が一致した場合は、どちらか１つの結果を破棄して、処理を継続する。これにより、テストがパスする限り、中断なく検証作業を進められる。
【００３７】
なお、図１０に示した入力データの変化がなかったことのチェックと、図１１に示したリエントランス性のチェックとは、同時進行させることも可能である。この場合、図１２に示すように、各直列基本モジュール１０１の実行前に、入力となる先行ノードの実行結果を作業メモリに退避しておくと共に、結果出力用のバッファを２つ準備し、元の入力データと退避したデータとを各々入力とする直列基本モジュール１０１を実行する。これにより、その実行後、元の入力データと、この退避したデータの比較を行うことで、入力データに変化がないことをチェックすることができ、また、２つの結果を比較することで、リエントランス性をチェックすることができる。
【００３８】
図１３は、本コンピュータが実行する並列処理検証の第１の動作の流れを示すフローチャートである。
【００３９】
ランタイムライブラリ２００の並列処理検証部２３０は、各直列基本モジュール１０１の実行前に、全ての入力について作業メモリへデータを退避する（ステップＡ１）。
【００４０】
このデータの退避後、並列処理検証部２３０は、当該直列基本モジュール１０１を実行させ（ステップＡ２）、その実行後に、元の入力と退避したデータとが全て一致しているかどうかを調べる（ステップＡ３）。そして、不一致が検出されたら（ステップＡ３のＮＯ）、並列処理検証部２３０は、例えば警告メッセージを表示して当該プログラムの実行を強制終了させる等のエラー処理を実行する（ステップＡ４）。
【００４１】
また、図１４は、本コンピュータが実行する並列処理検証の第２の動作の流れを示すフローチャートである。
【００４２】
ランタイムライブラリ２００の並列処理検証部２３０は、各直列基本モジュール１０１の実行時に、もう１つの結果出力用のバッファを確保し（ステップＢ１）、当該直列基本モジュール１０１を２つ実行させる（ステップＢ２）。
【００４３】
その実行後、並列処理検証部２３０は、これら２つの結果が一致しているかどうかを調べ（ステップＢ３）、不一致が検出されたら（ステップＢ３のＮＯ）、並列処理検証部２３０は、例えば警告メッセージを表示して当該プログラムの実行を強制終了させる等のエラー処理を実行する（ステップＢ４）。また、一致が確認されたら（ステップＢ３のＹＥＳ）、並列処理検証部２３０は、どちらか１つの結果を開放し（ステップＢ５）、当該プログラムの実行を継続する。
【００４４】
このように、本コンピュータは、ランタイムライブラリ２００に、並列処理の検証を実施する並列処理検証部２３０を搭載することにより、並列処理するプログラムにおける動作検証の低コスト化が実現される。
【００４５】
なお、以上では、直列基本モジュール１０１の入力データの上書きチェックと、直列基本モジュール１０１のリエントラント性のチェックとを行う例を示したが、さらに、並列処理による潜在的なタイミング問題を早期に発見するための仕組みを並列処理検証部２３０に持たせることも有効である。
【００４６】
例えば、図１５に示すような、各直列基本モジュール１０１の平均実行時間を保持するためのテーブルを管理し、図１６に示すような手順で、（平均実行時間から導き出される適正な範囲内で）各直列基本モジュール１０１の実行タイミングを遅延させるためのランダムな待ち時間を挿入する機能を並列処理検証部２３０が備えることにより、タイミング問題による不具合発生時の問題箇所特定のための仕組みを提供できる。
【００４７】
このように、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【００４８】
１…プロセッサ、２…主メモリ、３…ハードディスク駆動装置（ＨＤＤ）、１１…コア、１００…実行プログラム、１０１…直列基本モジュール、１０２…並列実行制御記述、２００…ランタイムライブラリ、２０１…グラフデータ構造生成情報、２０２…グラフデータ構造、２１０…ノード生成部、２２０…グラフ構造解釈実行エンジン、２３０…並列処理検証部。
【図１】
2010118082.tif 000003
【図２】
2010118082.tif 000004
【図３】
2010118082.tif 000005
【図４】
2010118082.tif 000006
【図５】
2010118082.tif 000007
【図６】
2010118082.tif 000008
【図７】
2010118082.tif 000009
【図８】
2010118082.tif 000010
【図９】
2010118082.tif 000011
【図１０】
2010118082.tif 000012
【図１１】
2010118082.tif 000013
【図１２】
2010118082.tif 000014
【図１３】
2010118082.tif 000015
【図１４】
2010118082.tif 000016
【図１５】
2010118082.tif 000017
【図１６】
2010118082.tif 000018