(57)【要約】【課題】開発対象のプログラムが有する並列性を抽出し、適切に並列実行単位に分割するプログラム開発支援装置を提供する。【解決手段】  情報処理装置においてそれぞれ実行される複数の事象をグループ化して、互いに並列に実行される複数の並列実行単位に分割するプログラム開発支援装置であって、複数の事象のそれぞれを頂点とし、複数の事象のうち２つの事象の間における実行順序の制約を有向枝として表現した有向グラフデータを取得する有向グラフ取得部と、複数の事象のうち少なくとも２つの事象の組であって、当該事象の組に属する一の事象から有向枝を順方向へたどっていくことにより当該事象の組に属する他の事象へ到達可能でない事象の組である反鎖部分集合を、有向グラフデータから抽出する反鎖部分集合抽出部と、反鎖部分集合に属する複数の事象を、互いに異なる並列実行単位に割り当てる並列実行単位割当部とを備える。【選択図】図１
2005173645.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置においてそれぞれ実行される複数の事象をグループ化して、互いに並列に実行される複数の並列実行単位に分割するプログラム開発支援装置であって、
前記複数の事象のそれぞれを頂点とし、前記複数の事象のうち２つの前記事象の間における実行順序の制約を有向枝として表現した有向グラフデータを取得する有向グラフ取得部と、
各事象から前記有向枝を順方向へたどっていくことにより他のいずれの前記事象にも到達可能でない関係を有する前記事象の組である反鎖部分集合を、前記有向グラフデータから抽出する反鎖部分集合抽出部と、
前記反鎖部分集合に属する複数の事象を、互いに異なる前記並列実行単位に割り当てる並列実行単位割当部と
を備えるプログラム開発支援装置。
【請求項２】
前記反鎖部分集合抽出部は、複数の前記反鎖部分集合のうち当該反鎖部分集合に属する前記事象の数が最大である前記反鎖部分集合を、前記有向グラフデータから抽出し、
前記並列実行単位割当部は、前記反鎖部分集合に属する複数の事象を、前記反鎖部分集合に属する前記事象の数と同数の前記並列実行単位に割り当てる請求項１記載のプログラム開発支援装置。
【請求項３】
前記並列実行単位割当部は、前記反鎖部分集合に属する事象のそれぞれについて、当該事象、及び、当該事象から前記有向枝を順方向及び逆方向の少なくとも一方へたどっていくことにより順次到達可能な前記事象を、同一の前記並列実行単位に割り当てる請求項１記載のプログラム開発支援装置。
【請求項４】
前記並列実行単位割当部は、前記反鎖部分集合に属する事象のそれぞれについて、当該事象、及び、当該事象から前記有向枝を順方向及び逆方向の少なくとも一方へたどっていくことにより順次到達可能な前記事象を、当該事象から到達可能な前記事象が他の前記並列実行単位に割り当てられていないことを条件として、同一の前記並列実行単位に割り当てる請求項３記載のプログラム開発支援装置。
【請求項５】
前記複数の並列実行単位のそれぞれについて、当該並列実行単位に割り当てられた各事象が終点となる各有向枝に基づいて、当該並列実行単位に割り当てられた各事象の実行順序の関係を示す式であるプロセス式を生成するプロセス式生成部と、
当該並列実行単位に属する前記事象、又は、前記有向枝により当該並列実行単位に属する前記事象に接続される、当該並列実行単位に属さない前記事象の各々が実行されたか否かを特定する複数の状態と、当該複数の状態間の遷移条件とを含む、当該並列実行単位の状態遷移モデルを、前記プロセス式に基づいて生成する状態遷移モデル生成部と
を備える請求項１記載のプログラム開発支援装置。
【請求項６】
前記複数の並列実行単位のそれぞれについて、当該並列実行単位の前記プロセス式及び前記状態遷移モデルの少なくとも１つに基づいて、当該並列実行単位に属する前記事象に前記有向枝により接続される、当該並列実行単位に属さない前記事象の実行結果を入力として、当該並列実行単位に属する前記事象に対応する処理を前記情報処理装置に実行させると共に、前記状態遷移モデルに基づく状態遷移を前記情報処理装置に行わせる、当該並列実行単位の実行命令列を生成する実行命令列生成部を更に備える請求項５記載のプログラム開発支援装置。
【請求項７】
前記実効命令列生成部は、実行前に初期化処理を行うべき一の前記事象について、当該一の事象を終点とするいずれかの前記有向枝の始点に接続された前記事象が実行されたことを条件として、当該一の事象の初期化処理を行わせる前記実効命令列を生成する請求項６記載のプログラム開発支援装置。
【請求項８】
前記複数の事象のうち、前記情報処理装置において繰り返し実行される前記事象について、当該事象を第１分割事象及び第２分割事象に分割する事象分割部と、
前記有向グラフデータにおける当該事象から前記有向枝を順方向へたどっていくことにより当該事象へ到達する循環経路における、当該事象を始点とする前記有向枝を前記第１分割事象を始点とする前記有向枝に置換し、当該事象を終点とする前記有向枝を前記第２分割事象を終点とする前記有向枝に置換する有向枝置換部と
を更に備え、
前記並列実行単位割当部は、前記第１分割事象及び前記第２分割事象を同一の前記並列実行単位に割り当てる
請求項１記載のプログラム開発支援装置。
【請求項９】
前記複数の事象は、選択的に実行される２以上の選択事象と、前記２以上の選択事象のそれぞれに対応してそれぞれ設けられ、対応する前記選択事象が実行された場合に実行される２以上の対応事象とを含み、
前記有向グラフデータにおける前記２以上の選択事象を１つの前記事象に置換し、前記２以上の対応事象を１つの前記事象に置換する選択事象置換部を更に備え、
前記反鎖部分集合抽出部は、前記選択事象置換部により前記２以上の選択事象及び前記２以上の対応事象がそれぞれ１つの前記事象に置換された前記有向グラフデータから前記反鎖部分集合を抽出する
請求項１記載のプログラム開発支援装置。
【請求項１０】
コンピュータにより、情報処理装置においてそれぞれ実行される複数の事象をグループ化して、互いに並列に実行される複数の並列実行単位に分割するプログラム開発支援方法であって、
前記複数の事象のそれぞれを頂点とし、前記複数の事象のうち２つの前記事象の間における実行順序の制約を有向枝として表現した有向グラフデータを前記コンピュータにより取得する有向グラフ取得段階と、
各事象から前記有向枝を順方向へたどっていくことにより他のいずれの前記事象にも到達可能でない関係を有する前記事象の組である反鎖部分集合を、前記有向グラフデータから前記コンピュータにより抽出する反鎖部分集合抽出段階と、
前記反鎖部分集合に属する複数の事象を、互いに異なる前記並列実行単位に前記コンピュータにより割り当てる並列実行単位割当段階と
を備えるプログラム開発支援方法。
【請求項１１】
コンピュータを、情報処理装置においてそれぞれ実行される複数の事象をグループ化して、互いに並列に実行される複数の並列実行単位に分割するプログラム開発支援装置として機能させるプログラムであって、
前記コンピュータを、
前記複数の事象のそれぞれを頂点とし、前記複数の事象のうち２つの前記事象の間における実行順序の制約を有向枝として表現した有向グラフデータを取得する有向グラフ取得部と、
各事象から前記有向枝を順方向へたどっていくことにより他のいずれの前記事象にも到達可能でない関係を有する前記事象の組である反鎖部分集合を、前記有向グラフデータから抽出する反鎖部分集合抽出部と、
前記反鎖部分集合に属する複数の事象を、互いに異なる前記並列実行単位に割り当てる並列実行単位割当部と
して機能させるプログラム。
【請求項１２】
請求項１１記載のプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発支援装置、プログラム開発支援方法、プログラム、及び、記録媒体に関する。特に本発明は、開発対象のプログラムの並列化を支援するプログラム開発支援装置、プログラム開発支援方法、プログラム、及び、記録媒体に関する。
【背景技術】
【０００２】
近年、プログラム開発の効率化を目的として、プログラムを上位概念化したモデルを用いて開発を進める開発環境が実現されている。このような開発環境においては、例えばＣＳＰ（Communicating Sequential Process）理論に基づいてプログラムのモデルを作成する（非特許文献１）。
【０００３】
例えば機器制御を行う組込み用コンピュータプログラム等の、並列実行を行うコンピュータプログラムを開発する場合には、コンピュータプログラム内の各処理を、プロセス、タスク、又はアクティブオブジェクト等の並列実行単位にどのように割り付けるかが重要である。
【０００４】
従来、コンピュータプログラムの作成者は、経験と勘に頼って並列実行単位の割り付けを行っていた。このため、並列化の効率を重視せず、プログラムの分かりやすさを重視して機能毎に並列実行単位に分割するのが一般的であった。
【０００５】
例えば、入力デバイスから入力されたコマンドを解析し、コマンドに対応する処理を行って処理結果を出力するプログラムを作成する場合、入力処理を行うモジュール、コマンドを解析するモジュール、コマンドに対応する処理を行うモジュール、及び、処理結果を出力するモジュールというように、プログラムの機能毎に分割するのが一般的であった。
【非特許文献１】C.A.R. Hoare、“Communicating Sequential Processes”、Communications of the ACM 21(8)、１９７８年８月
【非特許文献２】R.P. Dilworth、“A decomposition theorem for partially ordered sets”、Ann. of Mathematics 51、ｐ．１６１−１６６、１９５０年
【発明の開示】
【発明が解決しようとする課題】
【０００６】
開発対象のコンピュータプログラムを、当該プログラムに含まれる並列性以上の並列実行単位に分割した場合、本来不要な同期等をプログラム中で行う必要が生じ、プログラムが複雑化する。一方、当該プログラムに含まれる並列性より並列実行単位の数が少ない場合、本来並列に実行可能な処理が逐次実行されてしまい、プログラムの実行効率が低下してしまう。
【０００７】
そこで本発明は、上記の課題を解決することのできるプログラム開発支援装置、プログラム開発支援方法、プログラム、及び、記録媒体を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００８】
本発明の第１の形態によると、情報処理装置においてそれぞれ実行される複数の事象をグループ化して、互いに並列に実行される複数の並列実行単位に分割するプログラム開発支援装置であって、前記複数の事象のそれぞれを頂点とし、前記複数の事象のうち２つの前記事象の間における実行順序の制約を有向枝として表現した有向グラフデータを取得する有向グラフ取得部と、各事象から前記有向枝を順方向へたどっていくことにより他のいずれの前記事象にも到達可能でない関係を有する前記事象の組である反鎖部分集合を、前記有向グラフデータから抽出する反鎖部分集合抽出部と、前記反鎖部分集合に属する複数の事象を、互いに異なる前記並列実行単位に割り当てる並列実行単位割当部とを備えるプログラム開発支援装置、及び、当該プログラム開発支援装置に関するプログラム開発支援方法、プログラム、及び記録媒体を提供する。
【０００９】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【００１０】
本発明によれば、開発対象のプログラムが有する並列性を抽出し、適切に並列実行単位に分割することができる。
【発明を実施するための最良の形態】
【００１１】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１２】
図１は、本実施形態に係るプログラム開発支援装置１０の構成を示す。プログラム開発支援装置１０は、開発対象のプログラムを上位概念化したモデルを用いて開発を進めることを可能とし、プログラム開発を支援する。より具体的にはプログラム開発支援装置１０は、プログラムの開発者により入力されたプログラムのモデルに記述された、情報処理装置においてそれぞれ実行される複数の事象をグループ化して、互いに並列に実行される複数の並列実行単位に適切に分割する。そしてプログラム開発支援装置１０は、各並列実行単位を実行する実行命令列を生成する。
このような情報処理装置は、例えば工場内に配置された各種のＦＡ機器を制御する制御装置や、乗り物内に設けられた各種の機器を制御する制御装置や、コンピュータの入出力デバイス等の制御を行う組込み用コンピュータ等であってよく、プログラム開発支援装置は、このような情報処理装置がＦＡ機器等の制御や入出力デバイス等の制御を行うためのプログラムの開発を支援する。
【００１３】
プログラム開発支援装置１０は、有向グラフ取得部９５と、処理ＤＢ（データベース）１１０と、グラフＤＢ１２０と、事象分割部１２２と、有向枝置換部１２５と、選択事象置換部１３０と、反鎖部分集合抽出部１３５と、並列実行単位割当部１４０と、プロセス式生成部１４５と、初期化処理挿入部１５０と、状態遷移モデル生成部１５５と、実行命令列生成部１６０とを備える。
有向グラフ取得部９５は、開発者からプログラムのモデルを入力し、入力されたモデルをグラフ構造のデータに変換する。より具体的には、有向グラフ取得部９５は、入力されたモデルから、複数の事象及びこれらの実行順序を示す有向グラフデータを取得する。
【００１４】
有向グラフ取得部９５は、ユーザインターフェイス部１００と、モデルＤＢ１０５と、モデル変換部１１５とを有する。ユーザインターフェイス部１００は、開発者との間における入出力処理を行う。より具体的には、ユーザインターフェイス部１００は、開発者からプログラムのモデルを入力し、モデルＤＢ１０５へ格納する。このモデルは、例えばＵＭＬ（Unified Modeling Language）におけるアクティビティ図やシーケンス図等であってよく、情報処理装置における実行の単位となる命令群又は関数等を含む複数の事象の順序制約や順序仕様を記述したものである。ここで、順序制約とは、プログラムのモデルが構造上有する事象の実行順序であり、順序仕様とは、開発者が指定した処理の実行順序を示す。
また、ユーザインターフェイス部１００は、モデルに記述された各事象の処理内容を入力し、事象を識別する識別情報及び当該事象の処理内容を対応付けて処理ＤＢ１１０へ格納する。また、ユーザインターフェイス部１００は、複数の事象を複数の並列実行単位に割り当てる方法が２種類以上ある場合に、いずれかの割当方法を開発者に選択させる。
【００１５】
モデル変換部１１５は、モデルＤＢ１０５へ格納されたモデルから、複数の事象の順序制約及び順序仕様に基づいて、有向グラフデータを取得する。この有向グラフデータは、プログラムに含まれる複数の事象のそれぞれを頂点とし、複数の事象のうち２つの事象の間における実行順序の制約、すなわち順序制約及び順序仕様に基づく制約、を有向枝として表現したデータ構造である。そして、モデル変換部１１５は、モデルから取得した有向グラフデータをグラフＤＢ１２０へ格納する。
【００１６】
事象分割部１２２は、グラフＤＢ１２０に格納された有向グラフデータが循環経路を含む場合に、循環経路上の事象を２つの事象に分割する。有向枝置換部１２５は、事象分割部１２２による分割前の事象から他の事象へ接続される有向枝を分割後の一方の事象に接続し、分割前の事象に接続される有向枝を、分割後の他方の事象に接続することにより、有向グラフデータ中の循環経路を循環しない経路に置換する。選択事象置換部１３０は、有向グラフデータが選択的に実行される２以上の事象を含む場合に、これらの事象をまとめて１つの事象に置換する。また、いずれの事象が選択的に実行されたかに応じて異なる事象が実行される場合に、選択的に実行される事象に対応して実行される事象の組をまとめて１つの事象に置換する。これにより、事象間の相互依存を解消し、並列実行単位を適切に抽出可能とする。
【００１７】
反鎖部分集合抽出部１３５は、グラフＤＢ１２０に格納され、事象分割部１２２、有向枝置換部１２５、及び選択事象置換部１３０により変換された有向グラフデータから、並列に実行可能な事象の組を抽出する。並列実行単位割当部１４０は、反鎖部分集合抽出部１３５により抽出された並列に実行可能な事象の組に属する各事象を、互いに異なる並列実行単位に割り当てる。次に、並列実行単位割当部１４０は、並列に実行可能な事象の組に属さない各事象を、並列に実行可能な事象の組に属する各事象との間における実行順序の制約に基づいて、いずれかの並列実行単位に割り当てていく。そして、並列実行単位割当部１４０は、複数の事象を複数の並列実行単位に割り当てる方法が２種類以上ある場合、これらの割り当て方法をユーザインターフェイス部１００を介して開発者に表示し、開発者により選択された割当方法にしたがって並列実行単位の割り当てを決定する。
【００１８】
プロセス式生成部１４５は、複数の並列実行単位のそれぞれについて、当該並列実行単位に割り当てられた各事象の実行順序の関係を示すプロセス式を生成する（Ｓ２６０）。ここでプロセス式生成部１４５は、このプロセス式として、非特許文献１におけるＣＳＰプロセスを定義するＣＳＰプロセス式を生成してよい。初期化処理挿入部１５０は、プロセス式に含まれる、実行前に初期化処理を行うべき事象について、当該事象の実行前に初期化処理を行うようにプロセス式に初期化処理を挿入する。
【００１９】
状態遷移モデル生成部１５５は、複数の並列実行単位のそれぞれについて、当該並列実行単位のプロセス式を初期化処理挿入部１５０から受け取り、当該並列実行単位の状態遷移モデルを生成する。実行命令列生成部１６０は、複数の並列実行単位のそれぞれについて、当該並列実行単位のプロセス式及び状態遷移モデルを状態遷移モデル生成部１５５から受け取り、プロセス式及び状態遷移モデルの少なくとも１つと、処理ＤＢ１１０に格納された各事象の処理内容とに基づいて、当該並列実行単位の実行命令列を生成する。
より具体的には、実行命令列生成部１６０は、プロセス式及び状態遷移モデルの少なくとも１つに基づいて、並列実行単位の状態毎に実行可能な事象を特定する。そして、実行命令列生成部１６０は、状態毎に実行可能な事象の識別情報を検索キーとして処理ＤＢ１１０から当該事象の処理内容を検索して、当該状態において当該処理内容を実行する実行命令列を生成する。
【００２０】
図２は、本実施形態に係るプログラム開発支援装置１０の動作フローを示す。
まず、ユーザインターフェイス部１００は、プログラムのモデルを入力し、モデルＤＢ１０５に格納する。また、ユーザインターフェイス部１００は、当該モデルに含まれる複数の事象のそれぞれの処理内容を入力し、処理ＤＢ１１０に格納する（ステップＳ２００）。次に、モデル変換部１１５は、モデルＤＢ１０５へ格納されたモデルから有向グラフデータを取得し、グラフＤＢ１２０へ格納する（Ｓ２１０）。ここで、循環経路を有しない反順序構造をとり、かつ、選択的に実行される２以上の事象を含まない場合に、この有向グラフデータをハッセ図と呼ぶ。
【００２１】
次に、グラフＤＢ１２０に格納された有向グラフデータがハッセ図となっていない場合、有向グラフデータを変形して、循環経路を有しない半順序構造をとり、かつ、選択的に実行される２以上の事象を含む拡張ハッセ図に変換する。
【００２２】
すなわち、選択事象置換部１３０は、グラフＤＢ１２０に格納された有向グラフデータを探索し、有向グラフデータが有する複数の事象が、選択的に実行される２以上の選択事象と、２以上の選択事象のそれぞれに対応してそれぞれ設けられ、対応する選択事象が実行された場合に実行される２以上の対応事象とを含んでいるか否かを判定する。有向グラフデータが有する複数の事象が、選択的に実行される２以上の選択事象と、２以上の選択事象のそれぞれに対応してそれぞれ設けられ、対応する選択事象が実行された場合に実行される２以上の対応事象とを含んでいる場合、選択事象置換部１３０は、有向グラフデータにおける２以上の選択事象を１つの事象に置換し、２以上の対応事象を１つの事象に置換する（Ｓ２２０）。より具体的には、選択事象置換部１３０は、２以上の選択事象を置換すべき１つの事象を有向グラフデータに追加し、いずれかの選択事象を始点又は終点とする有向枝を、置換した事象を始点又は終点とする有向枝となるように有向枝の始点又は終点の事象を識別する情報を書き換える。同様に、選択事象置換部１３０は、２以上の対応事象を置換すべき１つの事象を有向グラフデータに追加し、いずれかの対応事象を始点又は終点とする有向枝を、置換した事象を始点又は終点とする有向枝となるように有向枝の始点又は終点の事象を識別する情報を書き換える。これにより、選択事象置換部１３０は、有向グラフデータを、選択的に実行される２以上の事象を含まない構造に変換することができる。
【００２３】
次に、事象分割部１２２は、有向グラフデータに循環経路が存在する場合に、当該循環経路を循環しない経路に変換するべく循環経路の開始位置の事象を複製して循環経路の終了位置の事象とし、循環経路の終了位置から開始位置へ戻る経路を切断する（Ｓ２３０）。より具体的には、事象分割部１２２は、複数の事象のうち、情報処理装置において繰り返し実行される事象について、当該事象を第１分割事象及び第２分割事象に分割する。そして、有向枝置換部１２５は、有向グラフデータにおける当該事象から有向枝を順方向へたどっていくことにより当該事象へ到達する循環経路における、当該事象を始点とする有向枝を第１分割事象を始点とする有向枝に置換し、当該事象を終点とする有向枝を第２分割事象を終点とする有向枝に置換する。これにより、事象分割部１２２及び有向枝置換部１２５は、循環経路を、第１分割事象を始点とし第２分割事象に至る循環しない経路に置換することができる。
【００２４】
グラフＤＢ１２０に格納された有向グラフデータがハッセ図となっていない場合、プログラム開発支援装置１０は、上記のＳ２２０及びＳ２３０に示した手順により、当該有向グラフデータを拡張ハッセ図に変換することができる。
【００２５】
次に、反鎖部分集合抽出部１３５は、ハッセ図又は拡張ハッセ図を示す有向グラフデータから、並列に実行可能な事象の組を抽出する（Ｓ２４０）。ここで、２つの事象は、一方の事象から有向枝を順方向にたどっていくことにより、直接又は１以上の事象を経由して他方の事象へ到達可能な場合に、この２つの事象の間に実行順序の制約が存在し、並列に実行することができない。このような関係を有する事象の組、すなわち、各事象から有向枝を順方向へたどっていくことにより他のいずれの事象にも到達可能でない関係を有するような事象の組を、反鎖部分集合と呼ぶ。反鎖部分集合抽出部１３５は、反鎖部分集合を有向グラフデータから抽出することにより、並列に実行可能な事象の組を抽出することができる。
【００２６】
Ｓ２４０の処理において、反鎖部分集合抽出部１３５は、有向グラフデータから抽出可能な複数の反鎖部分集合のうち当該反鎖部分集合に属する事象の数が最大である反鎖部分集合を、有向グラフデータから抽出する。これにより、反鎖部分集合抽出部１３５は、開発対象のプログラムが有する並列性を最大限に抽出することができる。
【００２７】
なお、Ｓ２２０の処理において、選択事象置換部１３０により２以上の選択事象及び２以上の対応事象がそれぞれ１つの事象に置換されている場合、反鎖部分集合抽出部１３５は、２以上の選択事象及び２以上の対応事象がそれぞれ１つの事象に置換された有向グラフデータから反鎖部分集合を抽出する。同様に、Ｓ２３０の処理において、事象分割部１２２及び有向枝置換部１２５により循環経路を有する有向グラフデータが循環経路を有しない有向グラフデータに変換されている場合、反鎖部分集合抽出部１３５は、循環経路を有しない有向グラフデータから反鎖部分集合を抽出する。
【００２８】
次に、並列実行単位割当部１４０は、反鎖部分集合に属する複数の事象を、互いに異なる並列実行単位に割り当てる。本実施形態に係る並列実行単位割当部１４０は、反鎖部分集合に属する複数の事象を、反鎖部分集合に属する事象の数と同数の並列実行単位に割り当てる（Ｓ２５０）。これにより並列実行単位割当部１４０は、開発対象のプログラムが有する並列性を最大限に活かすことができるように複数の並列実行単位を割り当てることができる。
【００２９】
更に、並列実行単位割当部１４０は、反鎖部分集合に属する事象のそれぞれについて、当該事象から有向枝を順方向及び逆方向の少なくとも一方へたどっていくことにより順次到達可能な事象を、当該事象と同一の並列実行単位に割り当てる。この際、並列実行単位割当部１４０は、反鎖部分集合に属する事象から到達可能な事象が他の並列実行単位に割り当てられていないことを条件として当該並列実行単位に割り当てる。これにより並列実行単位割当部１４０は、反鎖部分集合に属する事象から到達した事象が他の並列実行単位に割り当てられている場合に、当該事象から先に有向枝をたどるのを中止し、当該事象より反鎖部分集合に属する事象により近い事象のみを当該並列実行単位に割り当てる。これにより並列実行単位割当部１４０は、反鎖部分集合に属する事象に対して実行順序の制約を有する事象を同一の並列実行単位に割り当てることができる。ここで、並列実行単位割当部１４０は、非特許文献２に記載された最大マッチング検索アルゴリズムを用いて複数の事象を最小鎖分割し、この分割を並列実行単位の分割として用いてもよい。
以上において、並列実行単位割当部１４０は、事象分割部１２２により循環経路上の１つの事象から分割された第１分割事象及び第２分割事象を同一の並列実行単位に割り当てる。これにより、同一の処理を行うべき２つの分割事象を同一の並列実行単位に割り当てて、当該並列実行単位により処理させることができる。
【００３０】
次に、プロセス式生成部１４５は、並列実行単位毎に、当該並列実行単位に割り当てられた各事象間の有向枝により指定される実行順序、及び、他の並列実行単位に割り当てられた事象を始点とし、当該並列実行単位に割り当てられた事象を終点とする有向枝により指定される実行順序に基づいて、当該並列実行単位に割り当てられた各事象の実行順序を示すプロセス式を生成する（Ｓ２６０）。これによりプロセス式生成部１４５は、ハッセ図又は拡張ハッセ図の各経路をプロセス式として記述する。
【００３１】
次に、初期化処理挿入部１５０は、実行前に初期化処理を行うべき事象の実行前に当該事象の初期化処理を行うようにプロセス式に初期化処理を挿入する（Ｓ２７０）。より具体的には、初期化処理挿入部１５０は、当該事象を終点として接続されるいずれかの有向枝の始点に位置する事象の実行後に当該初期化処理を行わせるようにプロセス式を変更する。これにより、初期化処理挿入部１５０は、プロセス式における、当該一の事象の実行前に実行されるべきいずれか１つの事象と当該一の事象の間に位置する有向枝に対応する部分のみを変更して、当該一の事象の初期化処理を挿入することができる。
【００３２】
次に、状態遷移モデル生成部１５５は、複数の並列実行単位のそれぞれについて、当該並列実行単位の状態遷移モデルをプロセス式に基づいて生成する（Ｓ２８０）。ここで、並列実行単位の状態遷移モデルは、当該並列実行単位に属する事象、又は、有向枝により当該並列実行単位に属する事象に接続される、当該並列実行単位に属さない事象の各々が実行されたか否かを特定する複数の状態と、当該複数の状態間の遷移条件とを含む。また、状態遷移モデル生成部１５５は、生成されたプロセス式及び状態遷移モデルに基づいて、プログラムにデッドロック又はライブロックが発生しないかどうかを検証してもよい。
なお、状態遷移モデル生成部１５５は、少なくとも１つの並列実行単位の全部又は一部について、当該部分の状態遷移モデルをユーザインターフェイス部１００を介して開発者から入力し、当該状態遷移モデルを状態遷移モデル生成部１５５が生成した状態遷移モデルの全部又は一部として組み込んでもよい。
【００３３】
次に、実行命令列生成部１６０は、複数の並列実行単位のそれぞれについて、当該並列実行単位のプロセス式及び状態遷移モデルに基づいて、当該並列実行単位の実行命令列を生成する（Ｓ２９０）。ここで、並列実行単位の実行命令列は、当該並列実行単位に属する事象に有向枝により接続される、当該並列実行単位に属さない事象の実行結果を入力として、当該並列実行単位に属する事象に対応する処理を情報処理装置に実行させると共に、状態遷移モデルに基づく状態遷移を情報処理装置に行わせる命令列である。
ここで実行命令列生成部１６０は、実行前に初期化処理を行うべき一の事象については、当該一の事象を終点とするいずれかの有向枝の始点に接続された事象が実行されたことを条件として、当該一の事象の初期化処理を行わせる実効命令列を生成する。
【００３４】
以上に示したプログラム開発支援装置１０によれば、開発者により入力されたプログラムのモデルから、当該プログラムに含まれる複数の事象の実行順序関係を示すハッセ図又は拡張ハッセ図を生成し、ハッセ図又は拡張ハッセ図に基づいて複数の事象を複数の並列実行単位に適切に割り当てることができる。そして、プログラム開発支援装置１０は、各並列実行単位のプロセス式及び状態遷移モデルを生成し、これらに基づいて各並列実行単位の実行命令列を生成することができる。
【００３５】
図３は、本実施形態に係るプログラム開発支援装置１０による開発対象システム２９０の一例を示す。
開発対象システム２９０は、供給部３００、ハンドＡ３１０、ターンテーブル３２０、検査機３３０、ハンドＢ３４０、パス容器３５０、及びゴミ容器３６０を備える。供給部３００は、製品を供給する。ハンドＡ３１０は、供給部３００により供給された製品をターンテーブル３２０上の「ｓｅｔ１」の位置に移動させる。ターンテーブル３２０は、ターンテーブルの回転部分を回転させて、「ｓｅｔ１」の位置に載置された製品を「ｓｅｔ２」の位置に移動させる。検査機３３０は、「ｓｅｔ２」の位置に移動された製品を検査する。ハンドＢ３４０は、検査機３３０による検査の結果正常と判定された製品をパス容器３５０に移動し、異常と判定された製品をゴミ容器３６０に移動する。
以下、上記の開発対象システム２９０を制御する情報処理装置のプログラムを開発する場合を例として、プログラム開発支援装置１０の動作を示す。
【００３６】
図４は、本実施形態に係る開発対象システム２９０の各装置の動作記述の一例を示す。供給部３００、ハンドＡ３１０、ターンテーブル３２０、検査機３３０、及びハンドＢ３４０の各装置の動作を記述すると、図４に示す動作記述が得られる。
供給部３００は、製品を供給（ｓｕｐｐｌｙ）し、供給した製品がハンドＡ３１０により取り上げられる（ｐｉｃｋｕｐ１）と次の製品を供給する。ハンドＡ３１０は、供給部３００から製品を取り上げて、ターンテーブル３２０に載置する（ｓｅｔ１）。ターンテーブル３２０は、製品がターンテーブル３２０に載置されると（ｓｅｔ１）、回転し（ｒｏｔａｔｅ）、「ｓｅｔ２」の位置に製品を移動する。ここで、連続して製品を検査する場合、ターンテーブル３２０は、検査機３３０による検査（ｓｃａｎ）を終え、製品がハンドＢ３４０により取り上げられた（ｐｉｃｋｕｐ２）後に、回転を行う。
【００３７】
検査機３３０は、製品が「ｓｅｔ２」の位置に移動されると製品を検査し、正常（ＯＫ）又は異常（ＮＧ）を判定して（ｄｅｃｉｓｉｏｎ）、判定結果を出力する。ここで、「ｓｅｔ２」の位置に製品が載置されていない場合、判定結果として「Ｎｏｎｅ」を出力する。次に、ハンドＢ３４０は、判定結果が「ＯＫ」又は「ＮＧ」の場合に製品を取り上げて、判定結果に応じてパス容器３５０（ｐａｓｓ）又はゴミ容器３６０（ｄｅｆｅｃｔ）に移動させる。
【００３８】
以上に示した「ｓｕｐｐｌｙ」、「ｐｉｃｋｕｐ１」、「ｓｅｔ１」、「ｒｏｔａｔｅ」、「ｓｅｔ２」、「ｓｃａｎ」、「ｄｅｃｉｓｉｏｎ」、「ＯＫ」、「ＮＧ」、「Ｎｏｎｅ」、「ｐｉｃｋｕｐ２」、「ｐａｓｓ」、及び「ｄｅｆｅｃｔ」のそれぞれは、本発明に係る事象の一例である。
【００３９】
ここで、各装置の動作を制御する開発対象のプログラムにおいて、各装置の動作を異なる並列実行単位に割り当てた場合、当該プログラムは、供給部３００、ハンドＡ３１０、ターンテーブル３２０、検査機３３０、及びハンドＢ３４０をそれぞれ制御する５つの並列実行単位に分割される。このような並列実行単位の割り当ては、プログラムの機能に基づき分割されており開発者にとって分かりやすいものであるが、プログラムが有する並列性を考慮しておらず効率良く並列化されていない場合も有り得る。
【００４０】
図５は、本実施形態に係る開発対象システム２９０のモデルから取得した有向グラフデータを示す。モデル変換部１１５は、プログラムの開発者によりユーザインターフェイス部１００を介して入力されたタイミング図やアクティビティ図等のモデルから、有向グラフデータを取得する。より具体的には、モデル変換部１１５は、モデルに記述された事象間の順序制約及び順序仕様に基づいて、実行順序に依存関係がある事象の対を抽出する。ここで、モデル変換部１１５は、抽出した事象対をプログラムの開発者に表示して当該事象対を使用するか否かを指定させ、使用すると指定された事象対のみを選択的に抽出してもよい。これにより、モデル変換部１１５は、開発者が意図しない順序制約が用いられるのを防ぐことができる。
そして、モデル変換部１１５は、これらの事象対を結合して有向グラフデータを生成する。
【００４１】
図６は、本実施形態に係る開発対象システム２９０の拡張ハッセ図を示す。図５において、モデルからモデル変換部１１５が取得する有向グラフデータは、例えば「ｓｕｐｐｌｙ」及び「ｐｉｃｋｕｐ１」を経由する経路等の循環経路を有し、「ＯＫ」、「ＮＧ」、及び「Ｎｏｎｅ」の選択事象の組や「ｐａｓｓ」又は「ｄｅｆｅｃｔ」の対応事象の組を含む。したがって、事象分割部１２２、有向枝置換部１２５、及び選択事象置換部１３０は、この有向グラフデータを変形し、拡張ハッセ図に変換する。
【００４２】
まず、選択事象置換部１３０は、「ＯＫ」、「ＮＧ」、及び「Ｎｏｎｅ」の３つの選択事象を、１つの事象６００ｋ「ｒｅｓｕｌｔ」に置換する。また、選択事象置換部１３０は、これらの選択事象に対応していずれかが実行される「ｐａｓｓ」及び「ｄｅｆｅｃｔ」の２つの対応事象を、１つの事象６００ｌ「ｓｔｏｒｅ」に置換する。これにより、選択事象置換部１３０は、有向グラフデータを、選択的に実行される２以上の事象を含まない構造に変換することができる。
【００４３】
また、事象分割部１２２は、図５における循環経路上の「ｓｕｐｐｌｙ」を、第１事象６００ａ及び第２事象６００ｂに分割する。そして、図５における「ｓｕｐｐｌｙ」を始点とする有向枝を第１事象６００ａから「ｐｉｃｋｕｐ１」への有向枝に置換し、図５における「ｓｕｐｐｌｙ」を終点とする有向枝を「ｐｉｃｋｕｐ１」から第２事象６００ｂへの有向枝に置換することにより、循環経路を循環しない経路に変更する。同様に、事象分割部１２２は、「ｒｏｔａｔｅ」を第１事象６００ｃ及び第２事象６００ｄに、「ｓｅｔ１」を第１事象６００ｅ及び第２事象６００ｆに、「ｐｉｃｋｕｐ２」を第１事象６００ｇ及び第２事象６００ｈに、「ｓｅｔ２」を第１事象６００ｉ及び第２事象６００ｊにそれぞれ分割し、対応する有向枝を置換する。
【００４４】
以上の処理により、プログラム開発支援装置１０は、グラフＤＢ１２０に格納された有向グラフデータを拡張ハッセ図に変換することができる。次に、反鎖部分集合抽出部１３５は、拡張ハッセ図となる変換後の有向グラフデータから、有向グラフの反鎖部分集合のうち集合に属する事象の数が最大となる最大反鎖部分集合６５０を抽出する。
【００４５】
図７は、本実施形態に係る開発対象システム２９０の拡張ハッセ図から抽出した並列実行単位７００を示す。並列実行単位割当部１４０は、最大反鎖部分集合６５０に属する「ｓｕｐｐｌｙ」、「ｓｅｔ１」、「ｐｉｃｋｕｐ２」、及び「ｓｃａｎ」を、並列実行単位７００ａ、並列実行単位７００ｂ、並列実行単位７００ｃ、及び並列実行単位７００ｄにそれぞれ割り当てる。そして、各並列実行単位７００について、最大反鎖部分集合６５０に属する事象から有向枝を順方向及び逆方向の少なくとも一方へたどっていき、到達可能な事象を当該並列実行単位７００に割り当てる。例えば並列実行単位割当部１４０は、最大反鎖部分集合６５０に属する「ｓｕｐｐｌｙ」から有向枝を逆方向にたどることにより到達する「ｐｉｃｋｕｐ１」を並列実行単位７００ａに割り当てる。また、並列実行単位割当部１４０は、最大反鎖部分集合６５０に属する「ｓｃａｎ」から有向枝を順方向にたどることにより到達する「ｄｅｃｉｓｉｏｎ」及び「ｓｅｔ２」を並列実行単位７００ｄに割り当てる。
【００４６】
ここで並列実行単位割当部１４０は、最大反鎖部分集合６５０に属する事象から到達した事象が他の並列実行単位に割り当てられている場合に、当該事象から先に有向枝をたどるのを中止する。また、循環経路上の１つの事象から分割された事象６００ａ及び事象６００ｂ、事象６００ｃ及び事象６００ｄ、事象６００ｅ及び事象６００ｆ、事象６００ｇ及び事象６００ｈ、事象６００ｉ及び事象６００ｊをそれぞれ同一の並列実行単位７００に割り当てる。
【００４７】
図８は、本実施形態に係る並列実行単位７００ａの、（ａ）グラフ構造、（ｂ）プロセス式、（ｃ）状態遷移モデルをそれぞれ示す。並列実行単位７００ａは、「ｓｕｐｐｌｙ」の実行後に「ｐｉｃｋｕｐ１」を実行し、「ｓｅｔ１」を実行してもよい状態となったことを示す「ｓｅｔ１＿ｒｅａｄｙ」を出力する処理を繰り返す。プロセス式生成部１４５は、並列実行単位７００ａについて、「ｓｕｐｐｌｙ」、「ｐｉｃｋｕｐ１」、及び「ｓｅｔ１＿ｒｅａｄｙ」をこの実行順序で実行した後、ＡＯ１の処理に戻るプロセス式ＡＯ１を生成する。そして、状態遷移モデル生成部１５５は、プロセス式ＡＯ１に基づいて、「ｓｕｐｐｌｙ」、「ｐｉｃｋｕｐ１」、及び「ｓｅｔ１＿ｒｅａｄｙ」の各事象が実行されたか否かを特定する状態「０」、「１」、及び「２」と、「ｓｕｐｐｌｙ」が実行されると状態を「０」から「１」へ遷移させ、「ｐｉｃｋｕｐ１」が実行されると状態を「１」から「２」へ遷移させ、「ｓｅｔ１＿ｒｅａｄｙ」が実行されると状態を「２」から「０」へ遷移させる遷移条件とを含む状態遷移モデルを生成する。
【００４８】
実行命令列生成部１６０は、並列実行単位７００ａについて、プロセス式ＡＯ１及び状態遷移モデルを状態遷移モデル生成部１５５から受け取り、プロセス式、状態遷移モデル、及び、処理ＤＢ１１０に格納された各事象の処理内容に基づいて、当該並列実行単位の実行命令列を生成する。
【００４９】
図９は、本実施形態に係る並列実行単位７００ｂの、（ａ）グラフ構造、（ｂ）プロセス式、（ｃ）状態遷移モデルをそれぞれ示す。並列実行単位７００ｂは、並列実行単位７００ａから「ｓｅｔ１＿ｒｅａｄｙ」を入力すると「ｓｅｔ１」を実行する。また、「ｓｅｔ１」が実行され、「ｐｉｃｋｕｐ２＿ｅｎｄ」、「ｓｃａｎ＿ｅｎｄ」が入力された場合に、「ｒｏｔａｔｅ」を実行し、「ｐｉｃｋｕｐ２＿ｒｅａｄｙ」及び「ｓｅｔ２＿ｒｅａｄｙ」を並列実行単位７００ｃ及び並列実行単位７００ｄにそれぞれ出力する。ここで、並列実行単位７００ｂは、「ｒｏｔａｔｅ」の実行に先立ち初期化処理を行う必要がある。
【００５０】
プロセス式生成部１４５は、並列実行単位７００ｂについて、「ｓｅｔ１＿ｒｅａｄｙ」を入力した後、「ｓｅｔ１」、及び「ｒｏｔａｔｅ」を実行し、「ｐｉｃｋｕｐ２＿ｒｅａｄｙ」を出力してＯ２ａの処理に戻るプロセス式Ｏ２ａを生成する。また、「ｐｉｃｋｕｐ２＿ｅｎｄ」を入力した後、「ｒｏｔａｔｅ」を実行し、「ｓｅｔ２＿ｒｅａｄｙ」を出力してＯ２ｂの処理に戻るプロセス式Ｏ２ｂを生成する。また、「ｓｃａｎ＿ｅｎｄ」を入力した後、「ｒｏｔａｔｅ」を実行し、Ｏ２ｃの処理に戻るプロセス式Ｏ２ｃを生成する。そして、プロセス式生成部１４５は、並列実行単位７００ｂ全体のプロセス式ＡＯ２を、プロセス式Ｏ２ａ、Ｏ２ｂ、及びＯ２ｃを並列結合した式とする。
【００５１】
初期化処理挿入部１５０は、実行前に初期化処理を行うべき「ｒｏｔａｔｅ」を終点として接続される有向枝から選択した、「ｓｅｔ１」からの有向枝の始点に位置する「ｓｅｔ１」の実行後に「ｒｏｔａｔｅ」の初期化処理を行わせるように、プロセス式Ｏ２ａを変更する。より具体的には、「ｓｅｔ１」の実行後に「ｒｏｔａｔｅ」を実行するプロセス式Ｏ２ａにおける「ｒｏｔａｔｅ」に代えて、初期化処理「ｉｎｉｔ」を実行した後に「ｒｏｔａｔｅ」を実行することを示す「｛ｉｎｉｔ，ｒｏｔａｔｅ｝」を挿入する。
【００５２】
状態遷移モデル生成部１５５は、プロセス式ＡＯ２に基づいて、「ｓｅｔ１＿ｒｅａｄｙ」、「ｓｅｔ１」、「ｐｉｃｋｕｐ２＿ｅｎｄ」、「ｓｃａｎ＿ｅｎｄ」、「ｒｏｔａｔｅ」、「ｐｉｃｋｕｐ２＿ｒｅａｄｙ」、及び「ｓｅｔ２＿ｒｅａｄｙ」の各事象が実行されたか否かを特定する状態「０」から「１１」と、これらの状態の間の遷移条件とを含む状態遷移モデルを生成する。本例において状態遷移モデル生成部１５５は、一の事象「ｒｏｔａｔｅ」に並列に入力される入力事象「ｐｉｃｋｕｐ２＿ｅｎｄ」及び「ｓｃａｎ＿ｅｎｄ」のＡＮＤ条件を入力事象「ｅｘ１」に置換することにより、状態数を低減している。
【００５３】
実行命令列生成部１６０は、並列実行単位７００ｂについて、プロセス式ＡＯ２及び状態遷移モデルを状態遷移モデル生成部１５５から受け取り、プロセス式、状態遷移モデル、及び、処理ＤＢ１１０に格納された各事象の処理内容に基づいて、当該並列実行単位の実行命令列を生成する。
【００５４】
図１０は、本実施形態に係る並列実行単位７００ｃの、（ａ）グラフ構造、（ｂ）プロセス式、（ｃ）状態遷移モデルをそれぞれ示す。並列実行単位７００ｃは、「ｐｉｃｋｕｐ２＿ｒｅａｄｙ」及び「ｒｅｓｕｌｔ」の入力後に、「ｐｉｃｋｕｐ２」を実行し、「ｓｔｏｒｅ」を実行すると共に「ｐｉｃｋｕｐ２＿ｅｎｄ」を出力する処理を繰り返す。ここで、並列実行単位７００ｃは、「ｐｉｃｋｕｐ２」の実行に先立ち、初期化処理を行う必要がある。
【００５５】
プロセス式生成部１４５は、並列実行単位７００ｃについて、「ｐｉｃｋｕｐ２＿ｒｅａｄｙ」を入力した後、「ｐｉｃｋｕｐ２」を実行し、「ｓｔｏｒｅ」を実行してＯ３ａの処理に戻るプロセス式Ｏ３ａを生成する。また、「ｒｅｓｕｌｔ」を入力した後、「ｐｉｃｋｕｐ２」を実行し、「ｐｉｃｋｕｐ２＿ｅｎｄ」を出力してＯ３ｂの処理に戻るプロセス式Ｏ３ｂを生成する。そして、プロセス式生成部１４５は、並列実行単位７００ｃ全体のプロセス式ＡＯ３を、プロセス式Ｏ３ａ及びＯ３ｂをＯ並列結合した式とする。
【００５６】
初期化処理挿入部１５０は、並列実行単位７００ｂの場合と同様にして、「ｐｉｃｋｕｐ２＿ｒｅａｄｙ」の入力後に「ｐｉｃｋｕｐ２」の初期化処理を行わせるように、プロセス式Ｏ３ａを変更する。状態遷移モデル生成部１５５は、プロセス式ＡＯ３に基づいて、「ｐｉｃｋｕｐ２＿ｒｅａｄｙ」、「ｒｅｓｕｌｔ」、「ｐｉｃｋｕｐ２」、「ｓｔｏｒｅ」、及び「ｐｉｃｋｕｐ２＿ｅｎｄ」の各事象が実行されたか否かを特定する状態「０」から「５」と、これらの状態の間の遷移条件とを含む状態遷移モデルを生成する。本例において状態遷移モデル生成部１５５は、一の事象「ｐｉｃｋｕｐ２」に並列に入力される入力事象「ｐｉｃｋｕｐ２＿ｒｅａｄｙ」及び「ｒｅｓｕｌｔ」のＡＮＤ条件を入力事象「ｅｘ１」に置換することにより、状態数を低減している。
【００５７】
実行命令列生成部１６０は、並列実行単位７００ｂについて、プロセス式ＡＯ３及び状態遷移モデルを状態遷移モデル生成部１５５から受け取り、プロセス式、状態遷移モデル、及び、処理ＤＢ１１０に格納された各事象の処理内容に基づいて、当該並列実行単位の実行命令列を生成する。ここで実行命令列生成部１６０は、「ｓｔｏｒｅ」を実行する実行命令列として、入力事象「ｒｅｓｕｌｔ」が置換前の選択事象「ＯＫ」であった場合に、「ＯＫ」に対応する対応事象「ｐａｓｓ」を実行し、入力事象「ｒｅｓｕｌｔ」が置換前の選択事象「ＮＧ」であった場合に、「ＮＧ」に対応する対応事象「ｄｅｆｅｃｔ」を実行する実行命令列を生成する。
【００５８】
図１１は、本実施形態に係る並列実行単位７００ｄの、（ａ）グラフ構造、（ｂ）プロセス式、（ｃ）状態遷移モデルをそれぞれ示す。並列実行単位７００ｄは、「ｓｅｔ２＿ｒｅａｄｙ」の入力後に「ｓｃａｎ」を実行し、「ｓｃａｎ＿ｅｎｄ」を出力すると共に「ｄｅｃｉｓｉｏｎ」を実行する。そして、「ｄｅｃｉｓｉｏｎ」の実行後に「ｒｅｓｕｌｔ」を出力する。
【００５９】
プロセス式生成部１４５は、並列実行単位７００ｄについて、「ｓｅｔ２＿ｒｅａｄｙ」を入力した後、「ｓｃａｎ」及び「ｄｅｃｉｓｉｏｎ」をこの順に実行し、「ｒｅｓｕｌｔ」を出力してＯ４ａの処理に戻るプロセス式Ｏ４ａを生成する。また、「ｓｃａｎ」を実行した後、「ｓｃａｎ＿ｅｎｄ」を出力してＯ４ｂの処理に戻るプロセス式Ｏ４ｂを生成する。そして、プロセス式生成部１４５は、並列実行単位７００ｄ全体のプロセス式ＡＯ４を、プロセス式Ｏ４ａ及びＯ４ｂを並列結合した式とする。
【００６０】
状態遷移モデル生成部１５５は、プロセス式ＡＯ４に基づいて、「ｓｅｔ２＿ｒｅａｄｙ」、「ｓｃａｎ」、「ｓｃａｎ＿ｅｎｄ」、「ｄｅｃｉｓｉｏｎ」、及び「ｒｅｓｕｌｔ」の各事象が実行されたか否かを特定する状態「０」から「７」と、これらの状態の間の遷移条件とを含む状態遷移モデルを生成する。
【００６１】
実行命令列生成部１６０は、並列実行単位７００ｂについて、プロセス式ＡＯ４及び状態遷移モデルを状態遷移モデル生成部１５５から受け取り、プロセス式、状態遷移モデル、及び、処理ＤＢ１１０に格納された各事象の処理内容に基づいて、当該並列実行単位の実行命令列を生成する。
【００６２】
図１２は、本実施形態に係るコンピュータ１３００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ１３００は、ホスト・コントローラ１２８２により相互に接続されるＣＰＵ１２００、ＲＡＭ１２２０、グラフィック・コントローラ１２７５、及び表示装置１２８０を有するＣＰＵ周辺部と、入出力コントローラ１２８４によりホスト・コントローラ１２８２に接続される通信インターフェイス１２３０、ハードディスク・ドライブ１２４０、及びＣＤ−ＲＯＭドライブ１２６０を有する入出力部と、入出力コントローラ１２８４に接続されるＲＯＭ１２１０、フレキシブルディスク・ドライブ１２５０、及び入出力チップ１２７０を有するレガシー入出力部とを備える。
【００６３】
ホスト・コントローラ１２８２は、ＲＡＭ１２２０と、高い転送レートでＲＡＭ１２２０をアクセスするＣＰＵ１２００及びグラフィック・コントローラ１２７５とを接続する。ＣＰＵ１２００は、ＲＯＭ１２１０及びＲＡＭ１２２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ１２７５は、ＣＰＵ１２００等がＲＡＭ１２２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置１２８０上に表示させる。これに代えて、グラフィック・コントローラ１２７５は、ＣＰＵ１２００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【００６４】
入出力コントローラ１２８４は、ホスト・コントローラ１２８２と、比較的高速な入出力装置である通信インターフェイス１２３０、ハードディスク・ドライブ１２４０、ＣＤ−ＲＯＭドライブ１２６０を接続する。通信インターフェイス１２３０は、ネットワークを介して他の装置と通信する。ハードディスク・ドライブ１２４０は、コンピュータ１３００内のＣＰＵ１２００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１２６０は、ＣＤ−ＲＯＭ１２９５からプログラム又はデータを読み取り、ＲＡＭ１２２０を介してハードディスク・ドライブ１２４０に提供する。
【００６５】
また、入出力コントローラ１２８４には、ＲＯＭ１２１０と、フレキシブルディスク・ドライブ１２５０、及び入出力チップ１２７０の比較的低速な入出力装置とが接続される。ＲＯＭ１２１０は、コンピュータ１３００が起動時に実行するブート・プログラムや、コンピュータ１３００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ１２５０は、フレキシブルディスク１２９０からプログラム又はデータを読み取り、ＲＡＭ１２２０を介してハードディスク・ドライブ１２４０に提供する。入出力チップ１２７０は、フレキシブルディスク・ドライブ１２５０や、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を接続する。
【００６６】
ＲＡＭ１２２０を介してハードディスク・ドライブ１２４０に提供されるプログラムは、フレキシブルディスク１２９０、ＣＤ−ＲＯＭ１２９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ１２２０を介してコンピュータ１３００内のハードディスク・ドライブ１２４０にインストールされ、ＣＰＵ１２００において実行される。
【００６７】
コンピュータ１３００にインストールされてコンピュータ１３００をプログラム開発支援装置１０として機能させるプログラムは、ユーザインターフェイスモジュール及びモデル変換モジュールを有する有向グラフ取得モジュールと、事象分割モジュールと、有向枝置換モジュールと、選択事象置換モジュールと、反鎖部分集合抽出モジュールと、並列実行単位割当モジュールと、プロセス式生成モジュールと、初期化処理挿入モジュールと、状態遷移モデル生成モジュールと、実効命令列生成モジュールとを備える。これらのプログラム又はモジュールは、コンピュータ１３００を、ユーザインターフェイス部１００及びモデル変換部１１５を有する有向グラフ取得部９５と、事象分割部１２２と、有向枝置換部１２５と、選択事象置換部１３０と、反鎖部分集合抽出部１３５と、並列実行単位割当部１４０と、プロセス式生成部１４５と、初期化処理挿入部１５０と、状態遷移モデル生成部１５５と、実行命令列生成部１６０としてそれぞれ機能させる。
【００６８】
以上に示したプログラム又はモジュールは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１２９０、ＣＤ−ＲＯＭ１２９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１３００に提供してもよい。
【００６９】
以上に示したプログラム開発支援装置１０によれば、開発者により入力されたプログラムのモデルから当該プログラムが有する並列性を抽出し、当該プログラムが有する各事象を複数の並列実行単位に適切に割り当てることができる。そして、プログラム開発支援装置１０は、各並列実行単位のプロセス式及び状態遷移モデルを生成し、これらに基づいて各並列実行単位の実行命令列を生成することができる。
この結果、例えば工場内に配置された各種のＦＡ機器や、乗り物内に設けられた各種の機器や、コンピュータの入出力デバイス等の制御を行う組込み用コンピュータ上で実行される制御用プログラムをマルチタスク環境で実行させる場合において、当該制御用プログラムの制御対象となる各種の動作の並列性を適切に抽出して並列実行単位を割り当てることができる。これによりプログラム開発支援装置１０は、限られた処理能力の組込み用コンピュータを用いてより多くの処理を効率良く行わせることができる制御用プログラムを提供することができる。
【００７０】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【００７１】
以上に説明した実施形態によれば、以下の各項目に示すプログラム開発支援装置、プログラム開発支援方法、プログラム、及び、記録媒体が実現される。
【００７２】
（項目１）情報処理装置においてそれぞれ実行される複数の事象をグループ化して、互いに並列に実行される複数の並列実行単位に分割するプログラム開発支援装置であって、前記複数の事象のそれぞれを頂点とし、前記複数の事象のうち２つの前記事象の間における実行順序の制約を有向枝として表現した有向グラフデータを取得する有向グラフ取得部と、各事象から前記有向枝を順方向へたどっていくことにより他のいずれの前記事象にも到達可能でない関係を有する前記事象の組である反鎖部分集合を、前記有向グラフデータから抽出する反鎖部分集合抽出部と、前記反鎖部分集合に属する複数の事象を、互いに異なる前記並列実行単位に割り当てる並列実行単位割当部とを備えるプログラム開発支援装置。
【００７３】
（項目２）前記反鎖部分集合抽出部は、複数の前記反鎖部分集合のうち当該反鎖部分集合に属する前記事象の数が最大である前記反鎖部分集合を、前記有向グラフデータから抽出し、前記並列実行単位割当部は、前記反鎖部分集合に属する複数の事象を、前記反鎖部分集合に属する前記事象の数と同数の前記並列実行単位に割り当てる項目１記載のプログラム開発支援装置。
【００７４】
（項目３）前記並列実行単位割当部は、前記反鎖部分集合に属する事象のそれぞれについて、当該事象、及び、当該事象から前記有向枝を順方向及び逆方向の少なくとも一方へたどっていくことにより順次到達可能な前記事象を、同一の前記並列実行単位に割り当てる項目１記載のプログラム開発支援装置。
【００７５】
（項目４）前記並列実行単位割当部は、前記反鎖部分集合に属する事象のそれぞれについて、当該事象、及び、当該事象から前記有向枝を順方向及び逆方向の少なくとも一方へたどっていくことにより順次到達可能な前記事象を、当該事象から到達可能な前記事象が他の前記並列実行単位に割り当てられていないことを条件として、同一の前記並列実行単位に割り当てる項目３記載のプログラム開発支援装置。
【００７６】
（項目５）前記複数の並列実行単位のそれぞれについて、当該並列実行単位に割り当てられた各事象が終点となる各有向枝に基づいて、当該並列実行単位に割り当てられた各事象の実行順序の関係を示す式であるプロセス式を生成するプロセス式生成部と、当該並列実行単位に属する前記事象、又は、前記有向枝により当該並列実行単位に属する前記事象に接続される、当該並列実行単位に属さない前記事象の各々が実行されたか否かを特定する複数の状態と、当該複数の状態間の遷移条件とを含む、当該並列実行単位の状態遷移モデルを、前記プロセス式に基づいて生成する状態遷移モデル生成部とを備える項目１記載のプログラム開発支援装置。
【００７７】
（項目６）前記複数の並列実行単位のそれぞれについて、当該並列実行単位の前記プロセス式及び前記状態遷移モデルの少なくとも１つに基づいて、当該並列実行単位に属する前記事象に前記有向枝により接続される、当該並列実行単位に属さない前記事象の実行結果を入力として、当該並列実行単位に属する前記事象に対応する処理を前記情報処理装置に実行させると共に、前記状態遷移モデルに基づく状態遷移を前記情報処理装置に行わせる、当該並列実行単位の実行命令列を生成する実行命令列生成部を更に備える項目５記載のプログラム開発支援装置。
【００７８】
（項目７）前記実効命令列生成部は、実行前に初期化処理を行うべき一の前記事象について、当該一の事象を終点とするいずれかの前記有向枝の始点に接続された前記事象が実行されたことを条件として、当該一の事象の初期化処理を行わせる前記実効命令列を生成する項目６記載のプログラム開発支援装置。
【００７９】
（項目８）前記複数の事象のうち、前記情報処理装置において繰り返し実行される前記事象について、当該事象を第１分割事象及び第２分割事象に分割する事象分割部と、前記有向グラフデータにおける当該事象から前記有向枝を順方向へたどっていくことにより当該事象へ到達する循環経路における、当該事象を始点とする前記有向枝を前記第１分割事象を始点とする前記有向枝に置換し、当該事象を終点とする前記有向枝を前記第２分割事象を終点とする前記有向枝に置換する有向枝置換部とを更に備え、前記並列実行単位割当部は、前記第１分割事象及び前記第２分割事象を同一の前記並列実行単位に割り当てる項目１記載のプログラム開発支援装置。
【００８０】
（項目９）前記複数の事象は、選択的に実行される２以上の選択事象と、前記２以上の選択事象のそれぞれに対応してそれぞれ設けられ、対応する前記選択事象が実行された場合に実行される２以上の対応事象とを含み、前記有向グラフデータにおける前記２以上の選択事象を１つの前記事象に置換し、前記２以上の対応事象を１つの前記事象に置換する選択事象置換部を更に備え、前記反鎖部分集合抽出部は、前記選択事象置換部により前記２以上の選択事象及び前記２以上の対応事象がそれぞれ１つの前記事象に置換された前記有向グラフデータから前記反鎖部分集合を抽出する項目１記載のプログラム開発支援装置。
【００８１】
（項目１０）コンピュータにより、情報処理装置においてそれぞれ実行される複数の事象をグループ化して、互いに並列に実行される複数の並列実行単位に分割するプログラム開発支援方法であって、前記複数の事象のそれぞれを頂点とし、前記複数の事象のうち２つの前記事象の間における実行順序の制約を有向枝として表現した有向グラフデータを前記コンピュータにより取得する有向グラフ取得段階と、各事象から前記有向枝を順方向へたどっていくことにより他のいずれの前記事象にも到達可能でない関係を有する前記事象の組である反鎖部分集合を、前記有向グラフデータから前記コンピュータにより抽出する反鎖部分集合抽出段階と、前記反鎖部分集合に属する複数の事象を、互いに異なる前記並列実行単位に前記コンピュータにより割り当てる並列実行単位割当段階とを備えるプログラム開発支援方法。
【００８２】
（項目１１）コンピュータを、情報処理装置においてそれぞれ実行される複数の事象をグループ化して、互いに並列に実行される複数の並列実行単位に分割するプログラム開発支援装置として機能させるプログラムであって、前記コンピュータを、前記複数の事象のそれぞれを頂点とし、前記複数の事象のうち２つの前記事象の間における実行順序の制約を有向枝として表現した有向グラフデータを取得する有向グラフ取得部と、各事象から前記有向枝を順方向へたどっていくことにより他のいずれの前記事象にも到達可能でない関係を有する前記事象の組である反鎖部分集合を、前記有向グラフデータから抽出する反鎖部分集合抽出部と、前記反鎖部分集合に属する複数の事象を、互いに異なる前記並列実行単位に割り当てる並列実行単位割当部として機能させるプログラム。
【００８３】
（項目１２）項目１１記載のプログラムを記録した記録媒体。
【図面の簡単な説明】
【００８４】
【図１】本発明の実施形態に係るプログラム開発支援装置１０の構成を示す。
【図２】本発明の実施形態に係るプログラム開発支援装置１０の動作フローを示す。
【図３】本発明の実施形態に係るプログラム開発支援装置１０による開発対象システム２９０の一例を示す。
【図４】本発明の実施形態に係る開発対象システム２９０の各装置の動作記述の一例を示す。
【図５】本発明の実施形態に係る開発対象システム２９０のモデルから取得した有向グラフデータを示す。
【図６】本発明の実施形態に係る開発対象システム２９０の拡張ハッセ図を示す。
【図７】本発明の実施形態に係る開発対象システム２９０の拡張ハッセ図から抽出した並列実行単位７００を示す。
【図８】本発明の実施形態に係る並列実行単位７００ａの、（ａ）グラフ構造、（ｂ）プロセス式、（ｃ）状態遷移モデルをそれぞれ示す。
【図９】本発明の実施形態に係る並列実行単位７００ｂの、（ａ）グラフ構造、（ｂ）プロセス式、（ｃ）状態遷移モデルをそれぞれ示す。
【図１０】本発明の実施形態に係る並列実行単位７００ｃの、（ａ）グラフ構造、（ｂ）プロセス式、（ｃ）状態遷移モデルをそれぞれ示す。
【図１１】本発明の実施形態に係る並列実行単位７００ｄの、（ａ）グラフ構造、（ｂ）プロセス式、（ｃ）状態遷移モデルをそれぞれ示す。
【図１２】本発明の実施形態に係るコンピュータ１３００のハードウェア構成の一例を示す。
【符号の説明】
【００８５】
１０  プログラム開発支援装置
９５  有向グラフ取得部
１００  ユーザインターフェイス部
１０５  モデルＤＢ
１１０  処理ＤＢ
１１５  モデル変換部
１２０  グラフＤＢ
１２２  事象分割部
１２５  有向枝置換部
１３０  選択事象置換部
１３５  反鎖部分集合抽出部
１４０  並列実行単位割当部
１４５  プロセス式生成部
１５０  初期化処理挿入部
１５５  状態遷移モデル生成部
１６０  実行命令列生成部
２９０  開発対象システム
３００  供給部
３１０  ハンドＡ
３２０  ターンテーブル
３３０  検査機
３４０  ハンドＢ
３５０  パス容器
３６０  ゴミ容器
６００ａ〜ｌ  事象
６５０  最大反鎖部分集合
７００  並列実行単位
１２００  ＣＰＵ
１２１０  ＲＯＭ
１２２０  ＲＡＭ
１２３０  通信インターフェイス
１２３５  無線通信インターフェイス
１２４０  ハードディスク・ドライブ
１２５０  フレキシブルディスク・ドライブ
１２６０  ＣＤ−ＲＯＭドライブ
１２７０  入出力チップ
１２７５  グラフィック・コントローラ
１２８０  表示装置
１２８２  ホスト・コントローラ
１２８４  入出力コントローラ
１２９０  フレキシブルディスク
１２９５  ＣＤ−ＲＯＭ
１３００  コンピュータ
【図１】
2005173645.tif 000003
【図２】
2005173645.tif 000004
【図３】
2005173645.tif 000005
【図４】
2005173645.tif 000006
【図５】
2005173645.tif 000007
【図６】
2005173645.tif 000008
【図７】
2005173645.tif 000009
【図８】
2005173645.tif 000010
【図９】
2005173645.tif 000011
【図１０】
2005173645.tif 000012
【図１１】
2005173645.tif 000013
【図１２】
2005173645.tif 000014