(57)【要約】【課題】  並列処理されるプログラム同士が実行順序を適切に保ちながら処理するには、プログラム間あるいはスレッド間であらかじめ依存関係を固定的に決定しておく必要があった。【解決手段】  プログラムモジュール同士の並列処理の関係を記述した並列実行制御記述から、個々の前記プログラムモジュールに関連する部分を抽出した先行情報と後続情報を含むグラフデータ構造生成情報に基づいて所定のプログラムモジュールを抽出し、これを依存関係に従ってグラフデータ構造に追加更新し、先行するノードすべてが処理済であるノードから実行する処理方法とする。【選択図】  図２
2008158759.tif 000002
【特許請求の範囲】
【請求項１】
他のプログラムの実行状況に関係なく、最初に入力データが与えられたことを条件に実行可能となる複数のプログラムモジュールと、
前記プログラムモジュール同士の並列処理の関係を記述した並列実行制御記述を用いたプログラミング方法であって、
前記並列実行制御記述から、個々の前記プログラムモジュールに関連する部分を抽出した少なくとも該プログラムモジュールの先行情報と後続情報を含むグラフデータ構造生成情報を、該プログラムモジュールごとに作成し、
ある入力データが与えられた場合には、この入力データを入力とするプログラムモジュールを、前記グラフデータ構造生成情報に含まれる先行情報に基づいて抽出し、
この抽出したグラフデータ構造生成情報について前記プログラムモジュールの実行単位を表すノードを生成し、
この生成したノードを、前記グラフデータ構造生成情報で定義された先行情報および後続情報に基づいて構成された、その時点に存在するグラフデータ構造に自動的に追加するために前記並列実行制御記述を用いることを特徴とするプログラミング方法。
【請求項２】
その時点に存在する前記グラフデータ構造に含まれるあるノードについて、該ノードに対応する並列実行制御記述に含まれる、先行情報で定義されるプログラムモジュールを表すノードすべてが処理済である場合、該ノードの実行を開始するために前記並列実行制御記述を用いることを特徴とする、請求項１に記載のプログラミング方法。
【請求項３】
その時点に存在する前記グラフデータ構造に含まれる、あるノードに対応するグラフデータ構造生成情報の後続情報に基づいて抽出したすべてのノードが処理済である場合、該ノードを前記グラフデータ構造から自動的に削除するために前記並列実行制御記述を用いることを特徴とする、請求項１に記載のプログラミング方法。
【請求項４】
他のプログラムの実行状況に関係なく、最初に入力データが与えられたことを条件に実行可能となる複数のプログラムモジュールを並列に処理するためのプログラム処理方法であって、
前記プログラムモジュール同士の並列処理の関係を記述した並列実行制御記述から、個々の前記プログラムモジュールに関連する部分を抽出した少なくとも該プログラムモジュールの先行情報と後続情報を含むグラフデータ構造生成情報を、該プログラムモジュールごとに作成し、
ある入力データが与えられた場合には、この入力データを入力とするプログラムモジュールを、前記グラフデータ構造生成情報に含まれる先行情報に基づいて抽出し、
この抽出したグラフデータ構造生成情報について前記プログラムモジュールの実行単位を表すノードを生成し、
この生成したノードを、それ以前に生成されたノードの前記グラフデータ構造生成情報で定義された先行情報および後続情報に基づいて構成されたグラフデータ構造に自動的に追加し、
その時点に存在するグラフデータ構造に含まれるあるノードについて、該ノードに対応する並列実行制御記述に含まれる、先行情報で定義されるプログラムモジュールを表すノードすべてが処理済である場合、該ノードの実行を開始する
ことを特徴とするプログラム処理方法。
【請求項５】
その時点に存在する前記グラフデータ構造に含まれる、あるノードに対応するグラフデータ構造生成情報の後続情報に基づいて抽出したすべてのノードが処理済である場合、該ノードを該グラフデータ構造から自動的に削除することを特徴とする、請求項４に記載のプログラム処理方法。
【請求項６】
前記グラフデータ構造生成情報の作成は、該並列実行制御記述のうち当該プログラム処理で実行されるプログラムモジュールに関連する部分について自動的に行われることを特徴とする請求項４に記載のプログラム処理方法。
【請求項７】
他のプログラムの実行状況に関係なく、最初に入力データが与えられたことを条件に実行可能となる複数のプログラムモジュールを並列に処理するための処理プログラムであって、
前記プログラムモジュール同士の並列処理の関係を記述した並列実行制御記述から、個々の前記プログラムモジュールに関連する部分を抽出した少なくとも該プログラムモジュールの先行情報と後続情報を含むグラフデータ構造生成情報を、該プログラムモジュールごとに作成し、
ある入力データが与えられた場合には、この入力データを入力とするプログラムモジュールを、前記グラフデータ構造生成情報に含まれる先行情報に基づいて抽出し、
この抽出したグラフデータ構造生成情報について前記プログラムモジュールの実行単位を表すノードを生成し、
この生成したノードを、それ以前に生成されたノードの前記グラフデータ構造生成情報で定義された先行情報および後続情報に基づいて構成されたグラフデータ構造に自動的に追加し、
その時点に存在するグラフデータ構造に含まれるあるノードについて、該ノードに対応する並列実行制御記述に含まれる、先行情報で定義されるプログラムモジュールを表すノードすべてが処理済である場合、該ノードを実行させる
ことを特徴とする処理プログラム。
【請求項８】
その時点に存在する前記グラフデータ構造に含まれる、あるノードに対応するグラフデータ構造生成情報の後続情報に基づいて抽出したすべてのノードが処理済である場合、該ノードを該グラフデータ構造から自動的に削除することを特徴とする、請求項７に記載の処理プログラム。
【請求項９】
前記グラフデータ構造生成情報は、該並列実行制御記述のうち当該プログラム処理で実行されるプログラムモジュールに関連する部分について自動的に作成することを特徴とする請求項７に記載の処理プログラム。
【請求項１０】
他のプログラムの実行状況に関係なく最初に入力データが与えられたことを条件に実行可能となる複数のプログラムモジュールを記憶する記憶手段と、
前記プログラムモジュールの並列処理の関係を記述した並列実行制御記述から、個々の前記プログラムモジュールに関連する部分を抽出した少なくとも該プログラムモジュールの先行情報と後続情報を含むグラフデータ構造生成情報を該プログラムモジュールごとに作成する処理手段と、
前記処理手段はさらに、
前記プログラムモジュールを実行した結果ある入力データが得られた場合、この入力データを入力とするプログラムモジュールを、前記グラフデータ構造生成情報に含まれる先行情報に基づいて抽出し、
この抽出したグラフデータ構造生成情報について前記プログラムモジュールの実行単位を表すノードを生成し、
この生成したノードを、それ以前に生成されたノードの前記グラフデータ構造生成情報で定義された先行情報および後続情報に基づいて構成されたグラフデータ構造に自動的に追加し、
その時点に存在するグラフデータ構造に含まれるあるノードについて、該ノードに対応する並列実行制御記述に含まれる、先行情報で定義されるプログラムモジュールを表すノードすべてが処理済である場合、該ノードに対応するプログラムモジュールを実行する
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの処理に関するもので、特に並列処理のためのプログラム処理に関する。
【背景技術】
【０００２】
従来のマルチスレッドによる並列処理プログラムは複数のスレッドを生成し、そのそれぞれが同期処理を意識したプログラミングを強いられていた。たとえば実行順序を適切に保つためにはプログラムのさまざまな場所に同期を保証する処理をちりばめる必要があり、プログラムのデバッグが困難になるなどメンテナンスコストを押し上げていた。
【０００３】
特許文献１は複数のスレッドを生成したとき、そのスレッドの実行結果とスレッド間の依存関係に基づいて並列処理を実現する方法が開示されている。この手法ではあらかじめ重複して実行されるスレッドを定量的に特定しておく必要が生じ、このことからプログラム変更の柔軟性に欠けるという問題がある。
【特許文献１】特開２００５−２５８９２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
並列処理されるプログラム同士が実行順序を適切に保ちながら処理するには、プログラム間あるいはスレッド間であらかじめ依存関係を固定的に決定しておく必要がある。
【０００５】
本発明は上記問題に鑑みてなされたもので、マルチスレッドによる並列処理においても柔軟に対応可能なプログラム方法、生成プログラム及び情報処理装置を提供する。
【課題を解決するための手段】
【０００６】
本発明にかかるプログラミング方法によれば、
他のプログラムの実行状況に関係なく、最初に入力データが与えられたことを条件に実行可能となる複数のプログラムモジュールと、前記プログラムモジュール同士の並列処理の関係を記述した並列実行制御記述を用いたプログラミング方法であって、前記並列実行制御記述から、個々の前記プログラムモジュールに関連する部分を抽出した少なくとも該プログラムモジュールの先行情報と後続情報を含むグラフデータ構造生成情報を、該プログラムモジュールごとに作成し、ある入力データが与えられた場合には、この入力データを入力とするプログラムモジュールを、前記グラフデータ構造生成情報に含まれる先行情報に基づいて抽出し、この抽出したグラフデータ構造生成情報について前記プログラムモジュールの実行単位を表すノードを生成し、この生成したノードを、前記グラフデータ構造生成情報で定義された先行情報および後続情報に基づいて構成された、その時点に存在するグラフデータ構造に自動的に追加するために前記並列実行制御記述を用いることを特徴とするプログラミングが可能となる。
【０００７】
本発明にかかるプログラム処理方法によれば、
他のプログラムの実行状況に関係なく、最初に入力データが与えられたことを条件に実行可能となる複数のプログラムモジュールを並列に処理するためのプログラム処理方法であって、前記プログラムモジュール同士の並列処理の関係を記述した並列実行制御記述から、個々の前記プログラムモジュールに関連する部分を抽出した少なくとも該プログラムモジュールの先行情報と後続情報を含むグラフデータ構造生成情報を、該プログラムモジュールごとに作成し、ある入力データが与えられた場合には、この入力データを入力とするプログラムモジュールを、前記グラフデータ構造生成情報に含まれる先行情報に基づいて抽出し、この抽出したグラフデータ構造生成情報について前記プログラムモジュールの実行単位を表すノードを生成し、この生成したノードを、それ以前に生成されたノードの前記グラフデータ構造生成情報で定義された先行情報および後続情報に基づいて構成されたグラフデータ構造に自動的に追加し、その時点に存在するグラフデータ構造に含まれるあるノードについて、該ノードに対応する並列実行制御記述に含まれる、先行情報で定義されるプログラムモジュールを表すノードすべてが処理済である場合、該ノードの実行を開始することができる。
【０００８】
さらに、本発明の処理プログラムとすれば、
他のプログラムの実行状況に関係なく、最初に入力データが与えられたことを条件に実行可能となる複数のプログラムモジュールを並列に処理するための処理プログラムであって、前記プログラムモジュール同士の並列処理の関係を記述した並列実行制御記述から、個々の前記プログラムモジュールに関連する部分を抽出した少なくとも該プログラムモジュールの先行情報と後続情報を含むグラフデータ構造生成情報を、該プログラムモジュールごとに作成し、ある入力データが与えられた場合には、この入力データを入力とするプログラムモジュールを、前記グラフデータ構造生成情報に含まれる先行情報に基づいて抽出し、  この抽出したグラフデータ構造生成情報について前記プログラムモジュールの実行単位を表すノードを生成し、この生成したノードを、それ以前に生成されたノードの前記グラフデータ構造生成情報で定義された先行情報および後続情報に基づいて構成されたグラフデータ構造に自動的に追加し、その時点に存在するグラフデータ構造に含まれるあるノードについて、該ノードに対応する並列実行制御記述に含まれる、先行情報で定義されるプログラムモジュールを表すノードすべてが処理済である場合、該ノードを実行させることが可能となる。
【０００９】
また、上記機能を提供する情報処理装置が提供される。
【発明の効果】
【００１０】
マルチスレッドによる並列処理においても柔軟に対応可能なプログラミング環境を提供することができる。
【発明を実施するための最良の形態】
【００１１】
（第１の実施形態）
図１は、本実施形態に係るシステム構成図の一例を示す図である。図１では、複数のプロセッサ１００、メモリ１０１、HDD１０２及び内部バス１０３が示されている。
【００１２】
プロセッサ１００は、種々の記憶装置に記憶したプログラムコードを解釈しプログラムとしてあらかじめ記述された処理を実行する機能を有する。図１では互いに同等のプロセッサ１００が３つ示されているが、必ずしも同等のプロセッサである必要はなくそれぞれで処理能力が異なるものや、別種のコードを処理するプロセッサが含まれていてもかまわない。
【００１３】
メモリ１０１は、たとえば半導体で構成された記憶装置を指す。プロセッサ１００が処理するプログラムは処理前に比較的高速にアクセス可能なメモリ１０１上に読み込まれ、プログラム処理に従ってプロセッサ１００からアクセスされる。
【００１４】
HDD１０２は、たとえば磁気ディスク装置を指す。HDD１０２はメモリ１０１に比べて大容量のデータを記憶できるがアクセス速度において不利である場合が多い。プロセッサ１００が処理するプログラムコードはHDD１０２に記憶しておき、処理する部分のみをメモリ１０１上に読み出すように構成される。
【００１５】
内部バス１０３は、プロセッサ１００、メモリ１０１及びHDD１０２を相互に接続し、互いにデータの授受ができるように構成した共通バスである。
【００１６】
また、図示していないが処理結果を出力するための画像表示装置あるいは処理データを入力するためのキーボードなどの入出力装置を備えていてもかまわない。
【００１７】
図２は、本実施形態に係るプログラムのトランスレーションの一例を示す図である。
【００１８】
基本モジュール２００は本実施形態に係るシステムで実行するプログラムであり、並列実行制御記述２０１は実行する際に参照されるデータである。並列実行制御記述２０１は基本モジュール２００各々の並列処理時の依存関係を示しており、情報処理装置２０３で実行される前にトランスレータ２０２によってグラフデータ構造生成情報２０４に変換される。
【００１９】
トランスレータ２０２は基本モジュール２００を処理する前に事前に変換する場合以外にも、基本モジュール２００の実行中、ランタイムタスク等によって逐次トランスレートしながら処理する方法も考えられる。
【００２０】
情報処理装置２０３上の実行時点のソフトウェアは、基本モジュール２００、グラフデータ構造生成情報２０４、ランタイムライブラリ２０５及びＯＳ２０６から構成される。ランタイムライブラリ２０５は、基本モジュール２００を情報処理装置２０３上で実行する際のAPI（Application Interface）などを含み、また基本モジュール２００を並列処理する際に必要となる排他制御を実現するための機能を有する。一方、ランタイムライブラリ２０５からトランスレータ２０２の機能を呼び出すように構成し、基本モジュール２００の処理の過程で呼び出されるとき、次に処理する部分の並列実行制御記述２０１を都度変換するようにしても良い。このように構成すればトランスレートするための常駐タスクが不要になり、並列処理をよりコンパクトに構成できる。
【００２１】
ＯＳ２０６は情報処理装置２０３のハードウェアやタスクのスケジューリングなど、システム全体を管理している。ＯＳ２０６を導入することで、基本モジュール２００を実行する際、プログラマーはシステムの雑多な管理から解放されプログラミングに専念できるとともに、一般的に多機種でも稼動可能なソフトウェアを容易に記述することができるというメリットがある。
【００２２】
図３は、従来の並列処理プログラムの処理フローの一例を示す図である。図３ではプログラムＡ３００、Ｂ３０１及びＣ３０２の複数のプログラムが並行して処理されている模式図を示している。
【００２３】
プログラム同士はそれぞれ無関係に処理されているわけではなく、他のプログラムの処理結果を自身の処理に使用する場合、あるいはデータの整合性を確保するという理由で他のプログラムの特定部分の処理が終わるのを待たねばならないことがある。このような特性を持つプログラムを並列に処理する場合、プログラムの各所に他のプログラムの実行状況を知得するための仕組みを埋め込まねばならない。この仕組みを埋め込むことによってプログラム間でデータ保証や、排他制御を実現し協調動作するように構成していた。
【００２４】
たとえばプログラムＡ３００の処理中に所定のイベントが発生したとき、プログラムＢ３０１に対してなんらかの処理をするように依頼する（イベント３０３）。プログラムＢ３０１はイベント３０３を受けて所定の処理を実行し、所定の条件が成立したときさらにイベント３０４をプログラムＣ３０２に発行する。プログラムＢ３０１はイベント３０３によってプログラムＡ３００から受けた処理の結果をイベント３０５としてプログラムＡ３００に応答する。
【００２５】
しかしながら、プログラム自身に並列処理における同期処理を実現するための記述をした場合、本来のロジックとは別の配慮が必要となりプログラムが複雑になってしまう。また、他のプログラムの処理終了を待つ間、無駄にリソースを消費することにもなる。さらにはちょっとしたタイミングのずれによって処理効率が大きく変動するなど、後からのプログラム修正が困難になる場合が多い。
【００２６】
本実施形態に係る情報処理装置では、同期処理やデータの授受の必要な部分で分割し、その間の関連を並列実行制御記述として定義することで基本モジュールの部品化を促進し、並列処理定義をコンパクトに管理できる手法を提案する。
【００２７】
図４は、本実施形態に係るプログラムの分割方法の一例を説明する図である。図４では相互に同期処理をするプログラムＡ４００及びＢ４０１を示している。
【００２８】
まずプログラムＡ４００がスレッド４０２を、プログラムＢ４０１がスレッド４０７を実行している場合を想定する。プログラムＡ４００はポイント４０６まで実行すると、その処理結果をプログラムＢ４０１に受け渡す必要があるとする。このためプログラムＡ４００はスレッド４０２を終了すると処理結果をイベント４０４としてプログラムＢ４０１に通知する。プログラムＢ４０１は、このイベント４０４とスレッド４０７の処理結果の両方が揃ったとき初めてスレッド４０５が実行可能な処理である。一方、プログラムＡ４００は、スレッド４０２の終了を受けてポイント４０６以降のプログラムをスレッド４０３として実行する。
【００２９】
上記のスレッド４０２のように無条件に処理を進めて良い部分と、ポイント４０６のようにプログラムを処理していく間に他のスレッドに通知すべきある処理結果が得られるポイント、あるいは他のスレッドからの処理結果を得ることが処理開始の条件となっているポイントなどが存在する。
【００３０】
そこで図４に示すように、ポイント４０６のようなポイントでプログラムを分割し、その分割後のプログラムの処理単位をそれぞれ基本モジュールａ１〜ａ３、基本モジュールｂ１〜ｂ３と定義する。図４では相互に関連するプログラムが２つ示されているが、それ以上の数の相互に関連するプログラムがあっても同様の考え方で分割可能である。
【００３１】
図５は、本実施形態に係る基本モジュールの依存関係の一例を説明する図である。基本モジュール５００は図４で説明した基本モジュールを表し、他のスレッドに関係なく無条件に進めて良いモジュール化されたプログラムがそれぞれに割り当てられている。このモジュール化されたプログラムが基本モジュール２００に対応する。さらにそれらの基本モジュールは他の基本モジュールとの依存関係を示すリンク５０１に基づいて関連付けられている。各基本モジュールはリンク５０１によって関連を定義された先行基本モジュールからの計算結果出力のようなイベントを受け、同時にリンクにより関連を定義された後続基本モジュールへのイベントを発生させることを示している。また、複数のリンクが入っている基本モジュールでは、自身の処理のために複数のイベント条件が必要であることを表している。
【００３２】
図６は、本実施形態に係るノード６００の一例を説明する図である。ここでいうノードとは個々の基本モジュールに対応しており、前出の並列実行制御記述２０１をトランスレータ２０２でグラフデータ構造生成情報２０４に変換後、この情報に基づいて基本モジュールをグラフデータ構造化したものである。
【００３３】
前述のように基本モジュールをグラフデータ構造化したノード６００は、リンクにより他のノードと依存関係を有している。図６（ａ）のようにノードとしてみたとき、リンクとして先行ノードへのリンク６０１と後続ノードへの結合子６０２の２種類のリンクが存在する。
【００３４】
リンク６０１は、ノード６００が所定の処理を実行するのに必要なデータを得るために必要な他のノードの出力端に結合されるリンクである。リンク６０１のそれぞれにはどのような出力端とのリンクが必要かなどの定義情報を持っている。
【００３５】
結合子６０２は、ノード６００の処理後に出力するデータがいかなるものであるかを示す識別情報を備えている。後続のノードは、この結合子６０２の識別情報と並列実行制御記述２０１とに基づいて自身が実行可能な条件がそろったか否かを判断することができる。
【００３６】
ノード６００はシステムにより実行可能な条件がそろったとみなされると、図６（ｂ）に示すようにノードの単位で実行可能キュー６０３にキューイングされ、キューされたノードの中から次に実行すべきノードが取り出されて処理される。
【００３７】
図７は、本実施形態に係るノードのグラフデータ構造生成情報２０４の一例を示す図である。図７には、並列実行制御記述２０１からトランスレートされたグラフデータ構造生成情報７００が示されている。情報としては、基本モジュールＩＤ、先行ノードへの複数のリンク情報、当該ノードの出力バッファの種別、及び当該ノードの処理コストが含まれる。ここでいうコスト情報は、当該ノードに対応する基本モジュール２００の処理に係るコストを示している。この情報は実行可能キュー６０３にキューイングされたノードのうち、次に取り出すノードを選択する際に考慮される。
【００３８】
先行ノードへのリンク情報には、当該ノードの先行ノードとなるべきノードの条件が定義されている。たとえば所定のデータタイプを出力するノード、特定のＩＤを持つノードなどの定義が考えられる。
【００３９】
このグラフデータ構造生成情報７００は、対応する基本モジュール２００をノードとして表現するとともに、リンク情報などに基づいて図５に示すような既存のグラフデータ構造にこの基本モジュールを追加するための情報として用いる。
【００４０】
図８は、本実施形態に係るグラフデータ構造の追加処理フローの一例を示す図である。このフローを実行するとグラフデータ構造生成情報７００に基づいてその時々に実行可能なノードを生成し実行可能キュー６０３にキューイングする。
【００４１】
まずマルチスレッド処理を管理するランタイムタスクが処理対象となる入力データを受け付ける（ステップＳ０１）。入力データの有無を判断し（ステップＳ０２）、入力データが無ければ（Ｎｏ）再び入力データを受け付ける。
【００４２】
ステップＳ０２で入力データがある場合（Ｙｅｓ）、この入力データを入力とするグラフデータ構造生成情報２０４を抽出してこれらを取得する（ステップＳ０３）。基本モジュール２００の出力データは、あらかじめグラフデータ構造生成情報７００の出力バッファ種別に記載すべき複数のタイプに分別されている。入力データを入力とするグラフデータ構造生成情報２０４の抽出にあたっては、グラフデータ構造生成情報７００に記載の先行ノードへのリンク情報に含まれる入力データとなるべきデータタイプに基づき、このデータタイプが先の入力データと一致するものを抽出すればよい。
【００４３】
次に、ステップＳ０３で取得したグラフデータ構造生成情報７００に対応するノード６００を生成する（ステップＳ０４）。ここで複数のグラフデータ構造生成情報７００が抽出された場合には、複数のそれぞれに対応するノード６００が生成される。
【００４４】
生成したノード６００は、次に既存のグラフデータ構造に追加される（ステップＳ０５）。ここでいう既存のグラフデータ構造とは、グラフデータ構造生成情報７００から生成されたノード６００の先行ノードへのリンク情報と出力バッファタイプに基づいて、生成済みノードの前後の依存関係を、たとえば図５に示すように構造化したものである。
【００４５】
次に、既存のグラフデータ構造に含まれる各ノードについて、それぞれの先行ノードが処理を完了したかどうかを判断する（ステップＳ０６）。あるノードについてすべての先行ノードが完了しているならば（Ｙｅｓ）、このノードが実行開始のための条件が整ったとみなし、このノードを実行可能キュー６０３にキューイングする（ステップＳ０７）。一方、依然として処理が完了していない先行ノードがある場合（Ｎｏ）自身の処理を始めることが出来ず、フローは終了する。このようにノード６００が生成されても、そのノードに対応する基本モジュール２００がすぐに実行されるわけではなく、追加されたグラフデータ構造の他のノードとの依存関係が満たされるまでその処理は保留される。
【００４６】
図９は、本実施形態に係る基本モジュール処理の一例を示す図である。このフローでは実行可能キュー６０３にキューイングされたノードを読み出して各基本モジュール２００を実行する例を示している。
【００４７】
最初に実行可能キュー６０３にキューイングされている実行可能となっているノードのうちから所定の条件に基づいて次に実行するノードを選択する（ステップＳ１１）。所定の条件とはたとえば、キューイングされた最も古いノード、後続ノードが多いノードあるいはコストの高いノードなどの基準に基づいて選択することができる。
【００４８】
各ノードのコストを次のように計算して求めても良い。
【００４９】
追加ノードのコスト  ＝  （  α  ×  過去の平均実行時間  ）
＋（  β  ×  出力バッファの使用量  ）
＋（  γ  ×  後続ノード数  ）
＋（  δ  ×  非スケジュール時の実行頻度  ）
一般的にはコストが高いノードから処理していく方が、並列処理のスループットが上がると考えられる。ここで非スケジュール時の実行頻度とは、その基本モジュールが実行中に、実行可能キュー６０３にいずれのノードもキューイングされていない状況が出現する頻度をいう。この状況が発生すると実行可能キュー６０３のアンダーフローが発生し、基本モジュール２００の並列処理度が低下するため好ましくない。このような基本モジュール２００はコストがより高く算出されることから早めに処理されボトルネック回避に効果が期待できる。
【００５０】
コスト計算式の一次式の各係数α〜δはあらかじめ定めた値を使用しても良いし、処理の状況を見ながら動的に変化するように構成しても良い。
【００５１】
次に実行するノードを取得したら、次にこのノードの処理結果を格納する出力用バッファを実行前に確保する（ステップＳ１２）。出力用バッファは、グラフデータ構造生成情報７００で定義された出力バッファタイプの定義に基づいて確保される。
【００５２】
出力用バッファが確保できると、このノードに対応する基本モジュール２００の実行を開始する（ステップＳ１３）。当該基本モジュール２００が処理を終了すると、グラフデータ構造内の当該ノードの実行済みフラグを処理済に設定する（ステップＳ１４）。
【００５３】
次に、当該ノードのグラフデータ構造に含まれる後続ノードがすべて処理済となっているか否かを判断する（ステップＳ１５）。後続ノードのすべてが処理済であれば（Ｙｅｓ）当該ノードをグラフデータ構造から削除することができる（ステップＳ１６）。このとき、当該ノードの出力データも使用することがないのでステップＳ１２で確保した出力用バッファも開放される。逆に後続ノードのうちまだ処理済でないものがあれば、当該ノードの出力データを後続ノードの基本モジュールで使用する可能性があるため、グラフデータ構造から削除してはいけない。
【００５４】
次に、グラフデータ構造に含まれるすべてのノードそれぞれについて、そのノードの先行ノードすべてが処理済となっているか否かを判断する（ステップＳ１７）。先行ノードのすべてが処理済となっているノードがあれば（Ｙｅｓ）、当該ノードは実行開始条件が整ったとみなし実行可能キュー６０３にキューイングする（ステップＳ１８）。先行ノードの一つでも処理済でないノードは（Ｎｏ）、その先行ノードの処理の終了を待たなければ実行できない。
【００５５】
このように構成すると、ランタイムタスクが自立的に実行可能な基本モジュール２００を選択し、併せてグラフデータ構造を逐次更新することで並列処理がなされることから、これら一連の処理はアプリケーションとして考慮する必要がない。また、基本モジュール２００は他のタスクと分岐する部分を含まないことから、実行中の他のタスクとの調停を考慮する必要もない。
【００５６】
よってマルチスレッドによる並列処理においても柔軟に対応可能なプログラミング環境を提供することができる。
【００５７】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００５８】
【図１】本実施形態に係るシステム構成図の一例を示す図である。
【図２】本実施形態に係るプログラムのトランスレーションの一例を示す図である。
【図３】従来の並列処理プログラムの処理フローの一例を示す図である。
【図４】本実施形態に係るプログラムの分割方法の一例を説明する図である。
【図５】本実施形態に係るノードの依存関係の一例を説明する図である。
【図６】本実施形態に係るノードの一例を説明する図である。
【図７】本実施形態に係るノードのグラフデータ構造生成情報の一例を示す図である。
【図８】本実施形態に係るグラフデータ構造の追加処理フローの一例を示す図である。
【図９】本実施形態に係る基本モジュール処理の一例を示す図である。
【符号の説明】
【００５９】
１００・・・プロセッサ、１０１・・・メモリ、１０２・・・ＨＤＤ、１０３・・・内部バス、２００・・・基本モジュール、２０１・・・並列実行制御記述、２０２・・・トランスレータ、２０３・・・情報処理装置、２０４・・・グラフデータ構造生成情報、２０５・・・ランタイムライブラリ、２０６・・・ＯＳ、３００・・・プログラムＡ、３０１・・・プログラムＢ、３０２・・・プログラムＣ、３０３・・・イベント、４０２・・・スレッド、５００・・・基本モジュール、５０１・・・リンク、６０１・・・リンク、６０２・・・結合子、６０３・・・実行可能キュー、７００・・・グラフデータ構造生成情報
【図１】
2008158759.tif 000003
【図２】
2008158759.tif 000004
【図３】
2008158759.tif 000005
【図４】
2008158759.tif 000006
【図５】
2008158759.tif 000007
【図６】
2008158759.tif 000008
【図７】
2008158759.tif 000009
【図８】
2008158759.tif 000010
【図９】
2008158759.tif 000011