(57)【要約】【課題】プログラム開発者の作業負担を軽減してパイプライン並列化プログラミングを容易にする。【解決手段】プログラム生成装置において実行可能なプロセッサ数とデータフローモデルと各機能ブロック１２４の実行時間の入力に従って計算した１プロセッサ当たりの実行時間毎に機能ブロックの集合体のプログラムにプロセッサを割り当てて駆動させ、各機能ブロックの実行時間にバラつきがある場合には、機能ブロックを分割したプログラムにプロセッサを割り当てて駆動させることにより、実行可能なプロセッサ数に見合ったステージ構成のパイプライン並列化プログラムの自動生成を可能とする。【選択図】図１
2011118589.tif 000002
【特許請求の範囲】
【請求項１】
処理部と記憶部とを備え、複数の並列プロセッサを搭載した実行環境で実行させる並列化実行形式ファイルを生成する情報処理装置であって、
前記処理部は、
機能ブロックとデータフロー線の直列接続で構成したデータフローモデルから、前記機能ブロックのモデル要素の集合を記述したモデルファイルを生成する開発環境と、
前記実行環境で実行可能なプロセッサ数と、前記モデルファイルに基づき、並列化指示文指示句が記述された並列化プログラムファイルを出力する並列化トランスレータと、
前記並列化プログラムファイルに基づき、機械語プログラムを実行出来るように繋ぎ合わせた並列化実行形式ファイルを出力するコンパイラを処理し、
前記並列化トランスレータは、前記モデルファイルに記述された前記機能ブロック各々に対応し、実行時間を格納する複数の機能ブロックデータ構造と１つのデータ構造ポインタで構成した並列化ステージリンクリストを生成して前記記憶部に記憶し、前記並列化ステージリンクリストを探索することにより、前記実行時間の合計を前記実行可能なプロセッサ数で割った値である１プロセッサ当たりの実行見積時間に収まるプログラムを１プロセッサ毎に割り当てる、
ことを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記機能ブロックデータ構造は、前記機能ブロックの接続先を格納する機能ブロックデータ構造の先頭番地欄と、前記機能ブロックの前記実行時間を格納する実行時間欄と、機能上位ブロックの境目を表す指示文指示句フラグ欄で構成され、
前記データ構造ポインタは、前記データフローモデルの直列接続の最初の機能ブロックに対応する前記機能ブロックデータ構造を指す、
ことを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記並列トランスレータは、
前記モデルファイルに記述の全ての前記機能ブロックに対し、前記機能ブロックの処理に相当するプログラムまたはライブラリが格納している先頭番地及び終了番地データを読み込み、前記先頭番地から前記終了番地まで前記プログラムまたはライブラリのファイルの行数を数え、数えた行数から前記機能ブロックにおける実行見積時間を累算し、前記機能ブロックデータ構造の前記実行時間欄に前記実行見積時間を格納する、
ことを特徴とする情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記並列トランスレータは、
前記実行環境が前記並列化実行形式ファイルを実行し、前記プロセッサの実行時間を計測した結果のデータである計測データファイルに基づき、前記機能ブロックデータ構造の前記実行時間欄の前記実行見積時間を変更する、
ことを特徴とする情報処理装置。
【請求項５】
請求項４に記載の情報処理装置であって、
前記機能ブロックデータ構造は分割可能数を保存する付加仕様欄を更に有し、
前記並列トランスレータは、
前記並列化ステージリンクリストを生成し、前記実行見積時間の累算の過程で、前記実行時間欄が前記実行見積時間よりも大きくなった場合、大きくなった時点の前記実行時間欄を所持する前記機能ブロックデータ構造の前記付加仕様欄の分割可能数に従い前記機能ブロックデータ構造を新たに生成する、
ことを特徴とする情報処理装置。
【請求項６】
請求項５に記載の情報処理装置であって、
前記並列トランスレータは、
新たに生成した前記機能ブロックデータ構造の、対応する先頭番地欄と、実行時間欄と、指示句フラグ欄の値を保存し、
前記実行時間欄が前記実行見積時間よりも大きくなった時の前記機能ブロックデータ構造を前記並列化ステージリンクリストから外し、外した前記機能ブロックデータ構造の代わりに新たに生成した前記機能ブロックデータ構造を前記並列化ステージリンクリストに挿入してリンクした後、前記並列化ステージリンクリストの前記機能ブロックデータ構造を探索する、
ことを特徴とする情報処理装置。
【請求項７】
処理部と記憶部と入出力部とを備え、複数のプロセッサを搭載した実行環境で実行させる並列化実行形式ファイルを生成する情報処理装置であって、
前記処理部は、
前記実行環境で実行可能なプロセッサ数と、データフローモデルを構成する機能ブロックのモデル要素の集合を記述したモデルファイルに基づき、並列化指示文指示句が記述された並列化プログラムファイルを出力する並列化トランスレータと、
前記並列化プログラムファイルに基づき、単数ないし複数の機械語プログラムを実行出来るように繋ぎ合わせた前記並列化実行形式ファイルを出力するコンパイラを順次処理する、
ことを特徴とする情報処理装置。
【請求項８】
請求項７に記載の情報処理装置であって、
前記処理部が処理する前記コンパイラは、
前記並列化プログラムファイルに対して、スレッド分割を施した高級言語プログラムに変換し、前記高級言語プログラムをアセンブラ言語プログラムに変換し、前記アセンブラ言語プログラムを前記機械語プログラムに変換することにより、前記並列化実行形式ファイルを出力する、
ことを特徴とする情報処理装置。
【請求項９】
請求項７に記載の情報処理装置であって、
前記処理部が処理する前記並列化トランスレータは、
前記モデルファイルに記述された前記機能ブロック各々の数だけ存在し、それぞれの前記機能ブロックに対応する単数ないし複数の機能ブロックデータ構造を有する並列化ステージリンクリストを生成して前記記憶部に記憶し、
前記データフローモデルの直列接続の最初の機能ブロックに対応する機能ブロックデータ構造から順次前記並列化ステージリンクリストを探索する、
ことを特徴とする情報処理装置。
【請求項１０】
請求項９に記載の情報処理装置であって、
前記機能ブロックデータ構造は、前記機能ブロックの接続先を格納する機能ブロックデータ構造の先頭番地欄と前記機能ブロックの実行時間を格納する実行時間欄と機能上位ブロックの境目を表す指示文指示句フラグ欄を有し、
前記並列化トランスレータは、前記指示文指示句フラグ欄の値に応じて、前記機能ブロックの処理を、複数の前記プロセッサに割り当てる、
ことを特徴とする情報処理装置。
【請求項１１】
請求項１０に記載の情報処理装置であって、
前記並列化トランスレータは、前記実行時間欄の値の合計を前記実行可能なプロセッサ数で割った値である１プロセッサ当たりの実行見積時間に収まる前記機能ブロックの集合体に相当するプログラムを前記プロセッサ各々に割り当てるよう前記指示文指示句フラグ欄の値を設定する、
ことを特徴とする情報処理装置。
【請求項１２】
請求項１１に記載の情報処理装置であって、
前記並列化トランスレータは、前記モデルファイルに記述の全ての前記機能ブロックに対し、前記機能ブロックの処理に相当するプログラムまたはライブラリが格納している前記記憶部の先頭番地及び終了番地を読み込み、前記先頭番地から前記終了番地まで前記プログラムまたはライブラリのファイルの行数を数え、数えた行数から前記機能ブロックにおける前記実行見積時間を累算し、前記機能ブロックデータ構造の前記実行時間欄に前記実行見積時間を格納する、
ことを特徴とする情報処理装置。
【請求項１３】
請求項１２に記載の情報処理装置であって、
前記並列化トランスレータは、
前記実行環境が前記並列化実行形式ファイルを実行する際に、前記プロセッサの実行時間を計測した結果のデータである計測データファイルに基づき、前記機能ブロックデータ構造の前記実行時間欄の前記実行見積時間を変更する、
ことを特徴とする情報処理装置。
【請求項１４】
請求項１０に記載の情報処理装置であって、
前記機能ブロックデータ構造は分割可能数を保存する付加仕様欄を更に備え、
前記並列トランスレータは、前記並列化ステージリンクリストを生成し、前記実行見積時間の累算の過程で、前記実行時間欄が前記実行見積時間よりも大きくなった場合、大きくなった時点の前記実行時間欄を所持する前記機能ブロックデータ構造の前記付加仕様欄に分割可能数分の前記機能ブロックデータ構造を新たに生成し、新たに生成した前記機能ブロックデータ構造の先頭番地欄と、実行時間欄と、指示句フラグ欄に所定の値を保存し、
ことを特徴とする情報処理装置。
【請求項１５】
請求項１４に記載の情報処理装置であって、
前記並列トランスレータは、前記実行時間欄が前記実行見積時間よりも大きくなった時の前記機能ブロックデータ構造を前記並列化ステージリンクリストから外し、外した前記機能ブロックデータ構造の代わりに新たに生成した前記機能ブロックデータ構造を前記並列化ステージリンクリストに挿入してリンクした後、前記並列化ステージリンクリストの前記機能ブロックデータ構造を探索する、
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列プロセッサを搭載する情報処理装置上で動作させるソフトウェアを生成する情報処理技術に関するものである。
【背景技術】
【０００２】
並列プロセッサ構成搭載情報処置装置はスーパーコンピュータ分野を中心に研究開発が実施されてきたが、昨今の技術進歩によってパーソナルコンピュータや組込みシステムにもマルチコアやメニイコア等、複数のプロセッサが搭載されつつある。またリーク電力の抑制に伴い、プロセッサの動作周波数を高くする事が出来難くなっており、動作クロックの高周波数化以外でプロセッサの性能を上げる為にはプロセッサをスケーラブルに増やす事が必要となってきた。そのため並列プロセッサを使いこなすソフトウェア技術である並列化プログラミング技術の需要が高まってきている。
【０００３】
並列プロセッサに対するプログラミングは従来のシングルプロセッサに対するプログラミングに加え、並列プロセッサ間の同期、非同期の関係も考慮してプログラミングを実施する必要がある。更に性能向上の為にプロセッサの実装数が増えるに従い、様々な事象及び状態を考慮しなければならず、人間の思考のみのプログラミングでは手に負えない事態が近付きつつある。
【０００４】
従ってデータや制御の流れを表したモデルを図示する事で出来るだけ必要最低限の仕様や設計については人間が実施し、詳細な実装コードの生成についてはコンピュータが実施するという技術の必要性が叫ばれている。その代表的な技術概念がモデル駆動並列化開発技術である。
【０００５】
モデル駆動並列化開発技術に関連し、例えば特許文献１は、データフローモデルに対してプログラム開発者に並列化したい箇所を指示してもらい、並列化プログラム生成手順により、並列化プログラムを自動生成し、その並列化プログラムを実行する並列化プログラム生成装置を開示している。なお、特許文献1に関する以下の説明においては、本明細書と特許文献１との用語の整合性を合わせる為、特許文献1に記載の解析モデルを前記データフローモデル、解析作業者をプログラム開発者、並列化連成解析プログラムを並列化プログラム、同じく並列化汎用連成解析装置を情報処理装置と置き換える事とする。
【０００６】
図２は、特許文献１の図１に記載の情報処理装置の全体構成図である。入力装置１０１、１０２、出力装置１０３、入出力処理装置１０４、主記憶装置１０５、処理装置群１０６及び記録装置１０７からなる装置である。矢印は情報の流れを示す。
【０００７】
この特許文献１に記載の発明は、ソースプログラムよりも上位の概念であるデータフローで計算量を考慮し、プログラム開発者が入力装置１０１、１０２及び出力装置１０３を用いてデータフローモデルの機能ブロックに対して並列化を指示し、入出力処理装置１０４、主記憶装置１０５、処理装置群１０６及び記録装置１０７を駆使する事により、並列化プログラムを自動生成することを特徴としている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開2001−154998号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ここで、パイプライン並列化を図３の処理例で検討する。データフローモデル１２０には入力源１２１から出力源１２２までデータフロー線１２３で直列接続された複数の機能ブロック１２４ａ〜１２４ｅ（以下、１２４とする）が存在する。通常、一つのプロセッサで複数の機能ブロック１２４に対応するプログラムを直列に繋がれたデータの流れ１２３の手順に従って処理を実行していく。しかし、もし機能ブロック１２４毎にプロセッサを割り当て並列実行が可能ならば全体処理の高速化を図る事が期待される。図３のように直列に繋がれた機能ブロック数がM個で、実行可能なプロセッサ数がN個の場合、パイプライン処理は時間軸１１９に沿ってデータの入力タイミング１２５毎に実行可能なプロセッサを駆動させる処理に相当する。従ってプロセッサの並列動作により、データの流れの効率化が図れ、全体処理の高速化が図れる。この時のパイプライン処理においては、図３のようにあくまでも前のステージ（段）の機能ブロック１２４から出力されたデータ到着後に実行可能なプロセッサが処理を実施するのである。
【００１０】
特許文献１には、このパイプライン並列化を施したい各機能ブロック１２４を選択する事が記載されている。しかしながら、選択した機能ブロック１２４に対するデータの入力タイミング１２５を設定する必要がある事から、開発工数の増加を伴うという問題がある。
【００１１】
この原因はパイプライン並列化を施したいM個の機能ブロック全てに対するデータの入力タイミング１２５を設定する作業にある。一般的には時間を用いてデータの入力タイミング１２５を設定する。しかし機能ブロック毎に処理の実行時間１２６を見積もる、または計測する事が必要となり、大変な工数がかかる作業となる。また性能の向上化の為、スケーラブルにパイプライン並列化を施す機能ブロック１２４の数Mが多くなるに従い、プログラム開発者の作業負担は増加してヒューマンエラーに繋がり易くなり、不具合が生じる確率が上がる。その結果、更に検証、テストに要する工数も増える事になる。
【００１２】
本発明の目的は、プログラム開発者の作業負担を軽減してパイプライン並列化プログラミングを容易にするため、データの入力タイミングの時間設定をプログラム開発者が実施する必要のないプログラムを自動生成する情報処理装置を提供することにある。
【課題を解決するための手段】
【００１３】
上記の目的を達成するため、本発明においては、処理部と記憶部と入出力部とを備え、複数の並列プロセッサを搭載した実行環境で実行させる並列化実行形式ファイルを自動的に生成する情報処理装置を、処理部が、実行環境で実行可能なプロセッサ数と、データフローモデルを構成する機能ブロックのモデル要素の集合を記述したモデルファイルに基づき、並列化指示文指示句が記述された並列化プログラムファイルを出力する並列化トランスレータと、並列化プログラムファイルに基づき、単数ないし複数の機械語プログラムを実行出来るように繋ぎ合わせた前記並列化実行形式ファイルを出力するコンパイラを順次処理する構成とする。
【００１４】
また、上記の目的を達成するため、本発明においては、処理部と記憶部とを備え、複数のプロセッサを搭載した実行環境で実行させる並列化実行形式ファイルを生成する情報処理装置を、処理部が、機能ブロックとデータフロー線の直列接続で構成したデータフローモデルから、機能ブロックのモデル要素の集合を記述したモデルファイルを生成する開発環境と、実行環境で実行可能なプロセッサ数とモデルファイルに基づき、並列化指示文指示句が記述された並列化プログラムファイルを出力する並列化トランスレータと、並列化プログラムファイルに基づき、単数ないし複数の機械語プログラムを実行出来るように繋ぎ合わせた並列化実行形式ファイルを出力するコンパイラを処理し、並列化トランスレータは、モデルファイルに記述された機能ブロック各々に対応し、その実行時間を格納する単数ないし複数の機能ブロックデータ構造と１つのデータ構造ポインタで構成した並列化ステージリンクリストを生成して記憶部に記憶し、この並列化ステージリンクリストを探索することにより、実行時間の合計を実行可能なプロセッサ数で割った値である１プロセッサ当たりの実行見積時間に収まる機能ブロックの集合体に相当するプログラムを１プロセッサ毎に割り当てる構成とする。
【００１５】
上述の課題を解決するために、本願によって開示される発明のうち、代表的なものの概要を簡単に説明すれば、以下の通りである。
【００１６】
すなわち実行可能なプロセッサ数とデータフローモデルの入力から、機能ブロック毎の実行時間を計算し、その計算結果から更に全機能ブロックの総実行時間を計算した結果から１プロセッサ当たりの実行見積時間を計算し、この実行見積時間にほぼ収まるように直列接続順で纏めた機能上位ブロックに対するプログラムを機能上位ブロック内の合計の総実行見積時間毎に実行するパイプライン並列化プログラムを自動生成する。
【００１７】
また、生成されたパイプライン並列化プログラムを処理装置で実行しながら各機能ブロックで要した処理に要した実行時間を計測し、計測後の全機能ブロックの総実行時間から１プロセッサ当たりの実行見積時間を再度計算し、実行見積時間にほぼ収まるように直列接続順で纏めた機能上位ブロックに対するプログラムを機能上位ブロック内の合計の総実行時間毎に実行する並列化プログラムを再自動生成する。
【００１８】
さらに、1回目の計算後及び計測後の全機能ブロックの実行時間にバラつきがある場合、実行時間の長い機能ブロックのモデルに対し、仕様で更に機能ブロックに分割する事が許されておれば、仕様に従い更に機能ブロックを分割し、機能ブロック毎の実行時間を再度計算及び計測し、それらの結果から再度、１プロセッサ当たりの実行見積時間を計算し、前記実行見積時間にほぼ収まるように直列接続順で纏めた機能上位ブロックに対するプログラムを機能上位ブロック内の合計の総実行時間毎に実行するパイプライン並列化プログラムを自動生成する。
【発明の効果】
【００１９】
本発明によれば、実行可能なプロセッサ数に見合ったステージ構成のパイプライン並列化プログラムの自動生成が可能となる。
【図面の簡単な説明】
【００２０】
【図１】第１の実施例に係るパイプライン並列処理化の一例を示す図である。
【図２】従来の並列化プログラム生成装置の全体構成図である。
【図３】パイプライン並列化の処理を説明するための図である。
【図４】第１の実施例に係る、情報処理装置の処理機能を示す図である。
【図５】第１の実施例に係る、情報処理装置の一構成例を表す図である。
【図６】第１の実施例に係る、並列化トランスレータのフローチャートを示す図である。
【図７】第１の実施例に係る、並列化ステージリンクリストを説明する図である。
【図８】図６の分解処理手順の詳細フローチャートを示す図である。
【図９】第１の実施例に係る、並列化ステージリンクリストの１例目を示す図である。
【図１０】図８中の主要な手続きの操作の様子を説明するための図である。
【図１１】第１の実施例に係る、並列化ステージリンクリストの２例目を示す図である。
【図１２】図６中の指示文指示句フラグ挿入処理手順の詳細のフローチャートを示す図である。
【図１３】第１の実施例に係る、パイプライン並列処理化の他の例を示す図である。
【図１４】図６の分解処理手順を実施することなく処理した場合の例を示す図である。
【発明を実施するための形態】
【００２１】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には同一の符号を付し、その繰り返しの説明は省略する場合がある。また、本願明細書で用いる用語の意味は下記の通りである。
【００２２】
「モデル」とは、所定のデータを入力して所定のデータに処理する複数の機能ブロックの集合体である。ここで機能ブロックは、モデルが実現したい機能のそれぞれを示している。
【００２３】
「モデルファイル」とは、上記モデルの構成を表すファイルであり、機能ブロック間の関係を示すファイルである。例えば、モデルファイルは、特定の機能ブロックと他の機能ブロックとの間のつながり方等を示す。
【００２４】
「指示文」とは、既存のプログラム内で並列化を行う部分に挿入する事で並列化の方法を指定する１文である。例えばOpenMPの指示文は必ず、”#pragma omp …”という形を取り、「プログラムのここからここまでを並列化しなさい」と「指示」する事にしよう、という一種の並列プログラミングモデルまたはスタイルと呼ぶべきものである。
【００２５】
「指示句」とは、上記のような指示文の直後に続く、詳細な並列化の方法を指定する１文である。例えばOpenMPの“private”という指示句では”#pragma omp … private(i,j)”等という形を取り、「iとjをthreadに対するprivate変数とする」と「指示」する事にしよう、という一種の並列プログラミングモデルまたはスタイルと呼ぶべきものである。
【実施例１】
【００２６】
図４は第１の実施例に係る情報処理装置の全体処理を示す機能ブロック図である。情報処理装置１３０は、モデル駆動開発環境１３１、並列化トランスレータ１３２、並列化コンパイラ１３３、実行環境１３４で構成する。
【００２７】
図５は情報処理装置１３０の全体ハードウェア構成の一例を表すブロック図である。情報処理装置１３０は、コンピュータ１５０、実行環境１３４、ケーブル１５１ａ、１５１ｂで構成する。コンピュータ１５０は、通常の計算機の構成を備え、バス１６０に接続された処理部となる中央処理部(Central Processing unit：以下CPU)１６１、記憶部であるメモリユニット１６２と格納装置１６３、及び各種データの入出力部となる入出力装置１６４で構成される。なお、本願明細書にあって、実行環境１３４とケーブル１５１を除いたコンピュータ１５０のみを情報処理装置と呼ぶ場合がある点、留意されたい。
【００２８】
コンピュータ１５０の格納装置１６３にはモデル駆動開発環境１３１、並列化トランスレータ１３２、並列化コンパイラ１３３のプログラムを格納する。CPU１６１は逐次格納装置１６３から、モデル駆動開発環境１３１、並列化トランスレータ１３２、並列化コンパイラ１３３のプログラムを呼び出し、データをメモリユニット１６２に読み書きし、並列化実行形式ファイル１３８をメモリユニット１６２から入出力装置１６４aに出力し、計測データファイル１３９を入出力装置１６３bからメモリユニット１６２に入力する。後で詳述するように、実行環境１３４は、複数のタイマー６００内臓のプロセッサ６０１とメモリユニット１６２と入出力装置１６４とそれらを内部接続する図示を省略したバスで構成する。
【００２９】
図４の機能ブロック図に示すように、モデル駆動開発環境１３１は、プログラム開発者がグラフィカルユーザーインタフェース（Graphical User Interface：以下GUI）等を用いてデータフローモデルを設定し、データフローモデルを再現可能なモデルファイル１３５を出力する。その際、プログラム開発者はモデル駆動開発環境１３１の一機能であるコンピュータシミュレーションにより、設定したデータフローモデルの仕様及び設計の十分性を確かめ、十分性が満たされていれば、モデルファイル１３５を出力する旨をモデル駆動開発環境１３１に設定する。
【００３０】
並列化トランスレータ１３２は、モデルファイル１３５と実行可能なプロセッサ数１３６と計測データファイル１３９を入力し、それらの入力情報を元に並列化プログラムファイル１３７を作成し出力する。並列化プログラムファイル１３７は例えばC言語で記述されたプログラムにOpenMP（登録商標）の並列化指示文指示句を挿入したプログラムに相当する。また並列化トランスレータ１３２には各機能ブロック１２４の処理に相当するプログラムまたはライブラリが図５に示した格納装置１６３上に格納している。
【００３１】
図６は第１の実施例に係る、並列化トランスレータ１３２の処理フローチャートである。並列化トランスレータ１３２は、図４に示したように機能ブロックマージ器１４０、指示文指示句生成器１４２、コード生成器１４３で構成する。機能ブロックマージ器１４０は図６のトランスレータ処理手順２００〜２０８に従って動作する。
【００３２】
トランスレータ処理手順２００は、並列化トランスレータ１３２に実行可能なプロセッサ数１３６を入力する。
トランスレータ処理手順２０１は、並列化トランスレータ１３２にモデルファイル１３５を入力する。
トランスレータ処理手順２０２は、並列化トランスレータ１３２内でモデルファイル１３５のデータから、後で図７を用いて説明する並列化ステージリンクリスト３００を生成する。
【００３３】
モデルファイル１３５は、データフローモデル１２０、つまり各機能ブロック１２４や各データフロー線１２３や任意の詳細仕様に関する情報を格納する。各機能ブロック１２４に関する情報としては、各機能ブロック１２４の処理に相当するプログラムまたはライブラリのファイルが格納している格納装置１２６の格納場所（例えば先頭番地及び終了番地等）を格納している。また各機能ブロックに対する接続先を表すデータも格納している。
【００３４】
図７は並列化トランスレータ１３２で生成された並列化ステージリンクリスト３００を説明する図である。トランスレータ処理手順２０２では、モデルファイル１３５のデータから機能ブロック１２４分の数の機能ブロックデータ構造３０１と一つのデータ構造ポインタ３０２で構成された並列化ステージリンクリスト３００を記憶部であるメモリユニット１６２内に生成・記憶する。
【００３５】
機能ブロックデータ構造３０１は、接続先の機能ブロックに対する機能ブロックデータ構造の先頭番地欄、実行時間欄３０３、指示文指示句フラグ欄３０４及び付加仕様欄３０５という要素で構成し、機能ブロック毎に生成する。また並列化ステージリンクリスト３００の機能ブロックデータ構造３０１を辿る際はデータ構造ポインタ３０２から探索を開始する。付加仕様欄３０５には、後で説明するように、機能ブロックの分割許可数の数値が格納される。
【００３６】
本実施例では説明を具体化する為、図３の機能ブロック１２４と図７の機能ブロックデータ構造３０１を対応付ける。つまり、機能ブロック１２４aは機能ブロックデータ構造３０１a、機能ブロック１２４bは機能ブロックデータ構造３０１bとし、機能ブロック１２４eは機能ブロックデータ構造３０１eまで同様に対応付ける。
【００３７】
図６に戻り、トランスレータ処理手順２０３は、並列化トランスレータ１３２内でモデルファイル１３５から全ての機能ブロック１２４の処理に相当するプログラムまたはライブラリが格納場所の先頭番地及び終了番地データを読み込み、先頭番地から終了番地までプログラムまたはライブラリのファイルの行数を数え、数えた行数から実行時間１２６を累算する。特にライブラリのファイルの場合は機械語のプログラムとなっている。従って機械語間の処理時間が分かるので、機械語の命令コードを数える事で実行時間１２６の累算が可能である。
【００３８】
トランスレータ処理手順２０４は、トランスレータ処理手順２０３で累算した全ての機能ブロック１２４に対する実行時間１２６、または実行環境１３４で計測した計測データファイル１３９に格納の全ての機能ブロック１２４に対する実行時間１２６を、並列化ステージリンクリスト３００内の各機能ブロック１２４に対応する機能ブロックデータ構造３０１の実行時間欄３０３に書き込む。
【００３９】
１回目のトランスレータ処理手順２０４ではトランスレータ処理手順２０３で累算した全ての機能ブロック１２４に対する実行時間１２６を用いる。計測データファイル１３９は図４から実行環境１３４に並列化実行形式ファイル１３８を入力して実際に実行し計測して初めて生成される。従って計測によって得られる機能ブロック１２４に対する実行時間１２６は２回目以降のトランスレータ処理手順２０４で用いる事になる。
【００４０】
トランスレータ処理手順２０５は、並列化ステージリンクリスト３００内の全ての機能ブロックデータ構造３０１の実行時間欄３０３に格納された値の合計を計算し、その合計値をトランスレータ処理手順２００で入力した実行可能なプロセッサ数１３６で割り、１プロセッサ当たりの実行見積時間を計算し、メモリユニット１６２内のメモリ３０６に格納する。その際、実行可能なプロセッサ数１３６の値をメモリユニット１６２内のメモリ３０７に格納する。以下、実行可能なプロセッサ数１３６の値を仮に３（個）と設定して説明する。
【００４１】
トランスレータ処理手順２０６は、各機能ブロックの実行時間欄３０３に格納された値を、１プロセッサ当たりの実行見積時間に向けて出来るだけ小さく分解する。このトランスレータ処理手順２０６を図面で説明する。
【００４２】
図８はトランスレータ処理手順２０６の詳細のフローチャートである。図９は並列化ステージリンクリスト３００の１例を示し、図８のフローチャートを説明する図として用いる。図１０は図８の手続き４０１から手続き４０７までの操作の様子を模式的に示す図である。
【００４３】
図８の手続き４００は、並列化ステージリンクリスト３００のデータ構造ポインタ３０２が先頭の機能ブロックデータ構造３０１を指す。図９ではデータ構造ポインタ３０２が機能ブロックデータ構造３０１aを指す事により、データフローモデル１２０の直列接続された先頭の機能ブロック１２４aについて指す事になり、データフローモデル１２０の接続順に各機能ブロック１２４に対する各機能ブロックデータ構造３０１の探索を開始する。
【００４４】
手続き４０１は、探索過程で機能ブロックデータ構造３０１の実行時間欄３０３と、メモリ３０６に格納されている１プロセッサ当たりの実行見積時間の値を比較する。実行時間欄３０３がメモリ３０６の値より大きい場合は手続き４０２へ、実行時間欄３０３がメモリ３０６の値以下の場合は手続き４０８へ遷移する。
【００４５】
手続き４０２は、現時点でデータ構造ポインタ３０２が指す機能ブロックデータ構造３０１の付加仕様欄３０５の機能ブロックの分割許可数の数値が２以上であるかを判別する。分割許可数の数値が２以上である場合は手続き４０３へ、１以下（０または１）である場合は手続き４０８へ遷移する。
手続き４０３は、付加仕様欄３０５の分割許可数の数値分の機能ブロックデータ構造３０１を新たに生成する。
【００４６】
手続き４０４は、手続き４０２によって分割が許可された機能ブロックに対する分割可能なプログラムまたはライブラリの格納場所であるメモリの先頭番地及び終了番地データをモデルファイル１３５から読み込み、先頭番地から終了番地までプログラムまたはライブラリのファイルの行数を数え、数えた行数から分割する機能ブロック毎に実行時間１２６を累算し、新たに生成しリンクした機能ブロックデータ構造の実行時間欄３０３毎に格納する。
【００４７】
手続き４０５は、現時点の機能ブロックデータ構造３０１を並列化ステージリンクリスト３００からリンクを外す。
手続き４０６は、手続き４０５で並列化ステージリンクリスト３００から機能ブロックデータ構造３０１を外した箇所に、新たに生成し実行時間欄３０３を格納した機能ブロックデータ構造をリンクする。
手続き４０７は、手続き４０５で並列化ステージリンクリスト３００から外した機能ブロックデータ構造３０１を消去する。
【００４８】
手続き４０８は、データ構造ポインタ３０２が、現在指している機能ブロックデータ構造３０１の次に直列接続された機能ブロック１２４の機能ブロックデータ構造３０１を指すようにする。
【００４９】
手続き４０９は、データ構造ポインタが、直列接続された最後の機能ブロック１２４であるかどうか、どこにも後続の機能ブロック１２４を指していないかを判別する。もし最後の機能ブロック１２４であればトランスレータ手続き２０６は終了し、なければ手続き４０１に戻る。
【００５０】
手続き４００から手続き４０９を繰り返す事により、並列化ステージリンクリスト３００の機能ブロックデータ構造３０１の実行時間欄３０３の数値の全てにおいて、探索しながら出来るだけ１プロセッサ当たりの実行見積時間以下にするように操作をする事になる。但し、機能ブロックデータ構造３０１の付加仕様欄３０５の機能ブロック１２４の分割許可数の数値が２より小さく、機能ブロック１２４の分割が許可されない場合は例外となる。
【００５１】
図９の並列化ステージリンクリストの例では、実行時間欄３０３dの数値が26と、１プロセッサ当たりの実行見積時間であるメモリ３０６に格納の値10よりも大きいので、並列化ステージリンクリスト３００の機能ブロックデータ構造３０１dに対してのみ、手続き４０１から手続き４０７までの操作がなされる。
【００５２】
図１０は図８の手続き４０１から手続き４０７までの操作の様子を示す図である。図９の機能ブロックデータ構造３０１d中の付加仕様欄３０５dの数値が“2”であるので、２つの機能ブロックデータ構造３０１d1、３０１d2が新たに生成され、機能ブロックデータ構造３０１d1、３０１d2の実行時間欄３０３d1、３０２d2にモデルファイル１３５の情報を用いて累算された機能ブロック毎の実行時間１２６がそれぞれに格納され、機能ブロックデータ構造３０１dに代わり、新たに機能ブロックデータ構造３０１d1、３０１d2が並列化ステージリンクリスト３００にリンクで挿入される。
【００５３】
図１１は、図８の手続き４０２から手続き４０７までの操作が必要のない並列化ステージリンクリスト３００の一例を示す。本並列化ステージングリストの例においては、全ての機能ブロックデータ構造３０１の実行時間欄３０３の数値が、１プロセッサ当たりの実行見積時間であるメモリ３０６に格納の値10以下なので、手続き４０２から手続き４０７までの操作の必要が無い。
【００５４】
図６に戻り、トランスレータ処理手順２０７は、トランスレータ処理手順２０５で算出した１プロセッサ当たりの実行見積時間内に収まっている機能ブロック１２４の集合に対し、指示文指示句フラグ欄３０４にフラグを立てる。
【００５５】
図１３にパイプライン並列処理化の他の例を示した。図１と図１３を用いて図１２のトランスレータ処理手順２０７の詳細フローチャートを説明する。
【００５６】
図１２の手続き５００は、並列化ステージリンクリスト３００のデータ構造ポインタ３０２が先頭の機能ブロックデータ構造３０１を指す。データ構造ポインタ３０２が機能ブロックデータ構造３０１aを指す事により、データフローモデル１２０の直列接続された先頭の機能ブロック１２４aを指す事になり、データフローモデル１２０の接続順に、各機能ブロックに対する機能ブロックデータ構造３０１の探索を開始する。
【００５７】
手続き５０１は、メモリユニット１６２内のメモリ３０８を０に初期化する。
手続き５０２は、メモリユニット１６２内のメモリ３０９に実行可能なプロセッサ数１３６を格納する。この時点ではメモリ３０７に格納の値と同じである。
【００５８】
手続き５０３は、現時点でデータ構造ポインタ３０２が指している機能ブロックデータ構造３０１の実行時間欄３０３の値をメモリ３０８の値と加算し、メモリ３０８に格納する。
【００５９】
手続き５０４は、メモリ３０８に格納されている実行時間１２６の値とメモリ３０６に格納されている実行見積時間の値を比較する。もしメモリ３０８の値がメモリ３０６の値以下である場合は手続き５０５へ、メモリ３０８の値がメモリ３０６の値よりも大きい場合は手続き５０６へ遷移する。
手続き５０５は、現時点でデータ構造ポインタ３０２が指している機能ブロックデータ構造３０１の指示文指示句フラグ欄３０４の値をTRUEにする。
【００６０】
手続き５０６は、メモリ３０９の値が１になっているかどうかを判別する。もしメモリ３０９の値が１である場合は手続き５１１へ、メモリ３０９の値が１でない場合は手続き５０７へ遷移する。
【００６１】
手続き５０７は、現時点でデータ構造ポインタ３０２が指している機能ブロックデータ構造３０１の指示文指示句フラグ欄３０４の値をFALSEにする。
【００６２】
手続き５０８は、メモリ３０８を０にクリアする。
手続き５０９は、メモリ３０８に現時点でデータ構造ポインタ３０２が指している機能ブロックデータ構造３０１の実行時間欄３０３の値を格納する。
手続き５１０は、メモリ３０９の値から１を引いた値を再度メモリ３０９に格納する。
【００６３】
手続き５１１は、手続き５０７は、現時点でデータ構造ポインタ３０２が指している機能ブロックデータ構造３０１の指示文指示句フラグ欄３０４の値をTRUEにする。
【００６４】
手続き５１２は、データ構造ポインタ３０２が、現在指している機能ブロックデータ構造３０１の次に直列接続された機能ブロック１２４の機能ブロックデータ構造３０１を指すようにする。
【００６５】
手続き５１３は、データ構造ポインタ３０２が、直列接続された最後の機能ブロック１２４であるかどうか、どこにも後続の機能ブロック１２４を指していないかを判別する。もし最後の機能ブロック１２４であればトランスレータ手続き２０７は終了し、なければ手続き５０３に戻る。
【００６６】
図１の並列化ステージリンクリスト３００の例は、図１０の並列化ステージリンクリスト３００に対し、手続き５００から手続き５１３を実施した結果であるが、メモリ３０９に保存された実行可能プロセッサ数の値が１になる状態がないため、手続き５１１のパスは通過していない例である。
【００６７】
一方、図１３の並列化ステージリンクリスト３００は、図１１の並列化ステージリンクリスト３００に対し、手続き５００から手続き５１３を実施した結果である。
【００６８】
トランスレータ処理手順２０７の終了時点で、並列化ステージリンクリスト３００の機能ブロックデータ構造３０１の指示文指示句フラグ欄３０４の値で、FALSEとなっている機能ブロックデータ構造３０１に対応する機能ブロック１２４を境に、実行可能なプロセッサにプログラムが割り付ける事が可能となる。
【００６９】
すなわち、先頭の機能ブロックデータ構造３０１から指示文指示句フラグ欄３０４にFALSEが表れるまでの機能ブロック１２４の直列接続された集合を機能上位ブロック１２８に纏め、その後、同じく指示文指示句フラグ欄３０４にFALSEになるまでの機能ブロック１２４の直列接続された集合を、機能上位ブロック１２８に纏められていく事になる。
【００７０】
よって、図１の並列化ステージリンクリスト３００の場合、機能ブロックデータ構造３０１d2の指示文指示句フラグ欄３０４d2でFALSEなっているので、機能ブロック１２４aから機能ブロック１２４d1までの４つの集合が機能上位ブロック１２８aとなって１つ目のプロセッサが割り当てられ、機能ブロックデータ構造３０１eの指示文指示句フラグ欄３０４eでFALSEとなっているので、機能ブロック１２４d2で２つ目のプロセッサが割り当てられ、機能ブロック１２４eで３つ目のプロセッサが割り当てられる。
【００７１】
一方、図１３の並列化ステージリンクリスト３００場合、機能ブロックデータ構造３０１bの指示文指示句フラグ欄３０４bでFALSEなっているので、機能ブロック１２４aで１つ目のプロセッサが割り当てられ、機能ブロックデータ構造３０１dの指示文指示句フラグ欄３０４dでFALSEとなっているので、機能ブロック１２４bから機能ブロック１２４cまでの２つの集合が機能上位ブロック１２８aとなって２つ目のプロセッサが割り当てられ、最後の機能ブロック１２４eはTRUEとなっているので、機能ブロック１２４dから機能ブロック１２４eまでの２つの集合が機能上位ブロック１２８bとなって３つ目のプロセッサが割り当てられる。
【００７２】
図６の最後のトランスレータ処理手順２０８は、並列化ステージリンクリスト３００を指示文指示句生成器１４２に入力し、OpenMP（登録商標）に代表されるような並列化指示文指示句が挿入されたスクリプトファイルを出力し、その変換出力したスクリプトを更にコード生成器１４３に入力し、並列化プログラムファイル１３７に変換し出力する。並列化プログラムファイル１３７は、実行可能なプロセッサのそれぞれに割り当てられた機能ブロック１２４及び機能上位ブロック１２８が動作するプログラムが収められている事になる。
【００７３】
並列化コンパイラ１３３は、並列化プログラムファイル１３７を入力し、並列化プログラムファイル１３７に記述のOpenMP（登録商標）の並列化指示文指示句とプログラム言語を解析して、並列化実行形式ファイル１３８に変換して出力する。
【００７４】
実行環境１３４は、図４に示したように、複数のタイマー６００内臓のプロセッサ６０１とメモリユニット１６２とバス１６０と入出力装置１６４で構成する。
実行環境１３４は、入出力装置１６４cから並列化実行形式ファイル１３８を入力し、実際に並列化実行形式ファイル１３８で機能ブロック１２４及び機能上位ブロック１２８が動作するプログラムを各プロセッサ６０１で実行し、並列に動作をしている機能ブロック１２４及び機能上位ブロック１２８に相当する実行時間１２６を各タイマー６００で計測し、その計測結果である実行時間１２６を全てメモリユニット１６２xに格納し、更に実行時間１２６を計測データファイル１３９に纏めて、入出力装置１６４dから出力する。
【００７５】
また、本実施例の変形例として、実行環境１３４のプロセッサ６０１自身を、ソフトウェアでプロセッサ命令の実行を模擬した命令シミュレータというソフトウェアに置き換えて、図５のコンピュータ１５０の格納装置１６３の内部に実装し、コンピュータシミュレーションとしてコンピュータ１５０の内部で機能ブロック１２４及び機能上位ブロック１２８が動作するプログラムの実行時間１２６を計測して、計測データファイル１３９に格納して、並列化トランスレータ１３２に入力してもよい。
【００７６】
以上詳述した本実施例による効果のうち代表的なものを記載すると、実行可能なプロセッサ数に見合ったステージ構成のパイプライン並列化プログラムの自動生成が可能となる。また図６の分解手続きにより、パイプライン並列化の処理効率が向上する。
【００７７】
図１４は、本実施例の効果を説明するため、図９の例に対して手続き２０６無しで実施した場合の例である。
【００７８】
図９の並列化ステージリンクリスト３００に対して分割手続き２０６無しで実施すると、一部の機能ブロック１２４の実行時間１２６が１プロセッサ当たりの実行見積時間よりもかなり大きいので、図１４のパイプライン処理のような、機能ブロック１２４ないし機能上記ブロック１２８の処理時間の間にバラつきが発生し、処理時間の短い機能ブロック１２４ないし機能上記ブロック１２８がロックされて待ち状態になり、図１のパイプライン処理と比較して処理効率が悪くなる事が容易にわかる。
【００７９】
また、図１３のパイプライン処理のように、機能ブロック１２４ないし機能上記ブロック１２８の処理時間の間にバラつきが少ないほど、処理効率が改善される事は一般的に知られており、図６の手続き２０６は、１プロセッサ当たりの実行見積時間に実行時間を近づける意味で、パイプライン並列化の処理効率向上により一層の効果を発揮することができる。
【産業上の利用可能性】
【００８０】
本発明は、並列プロセッサを搭載する処理装置上で動作させるソフトウェアを生成するプログラム生成のたの情報処理装置として極めて有用である。
【符号の説明】
【００８１】
１０１…入力装置、
２…入力装置、
１０３…出力装置、
１０４…入出力処理装置、
１０５…主記憶装置、
１０６…処理装置群、
１０７…記録装置、
１０８、１０９、１１０、１１１、１１２…処理手順
１１３…データフローモデルデータ
１１４…解析用汎用ライブラリ
１１５…並列化プログラム
１１６…解析結果データ
１１９…時間軸
１２０…データフローモデル
１２１…入力源
１２２…出力源
１２３…データフロー線
１２４…機能ブロック
１２５…データの入力タイミング
１２６…実行時間
１２７…総実行時間
１２８…機能上位ブロック
１３０…情報処理装置
１３１…モデル駆動開発環境
１３２…並列化トランスレータ
１３３…並列化コンパイラ
１３４…実行環境
１３５…モデルファイル
１３６…実行可能なプロセッサ数
１３７…並列化プログラムファイル
１３８…並列化実行形式ファイル
１３９…計測データファイル
１４０…機能ブロックマージ器
１４２…指示文指示句生成器
１４３…コード生成器
１５０…コンピュータ
１５１…ケーブル
１６０…バス
１６１…CPU
１６２…メモリユニット
１６３…格納装置
１６４…入出力装置
２００〜２０８…トランスレータ処理手順
３００…並列化ステージリンクリスト
３０１…機能ブロックデータ構造
３０２…データ構造ポインタ
３０３…実行時間欄
３０４…指示句指示文フラグ欄
３０５…付加仕様欄
３０６〜３０９…メモリ
４００〜４０７、５００〜５１３…手続き
６００…タイマー
６０１…プロセッサ。
【図１】
2011118589.tif 000003
【図２】
2011118589.tif 000004
【図３】
2011118589.tif 000005
【図４】
2011118589.tif 000006
【図５】
2011118589.tif 000007
【図６】
2011118589.tif 000008
【図７】
2011118589.tif 000009
【図８】
2011118589.tif 000010
【図９】
2011118589.tif 000011
【図１０】
2011118589.tif 000012
【図１１】
2011118589.tif 000013
【図１２】
2011118589.tif 000014
【図１３】
2011118589.tif 000015
【図１４】
2011118589.tif 000016