JPH0816429A - 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置 - Google Patents
並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置Info
- Publication number
- JPH0816429A JPH0816429A JP7127577A JP12757795A JPH0816429A JP H0816429 A JPH0816429 A JP H0816429A JP 7127577 A JP7127577 A JP 7127577A JP 12757795 A JP12757795 A JP 12757795A JP H0816429 A JPH0816429 A JP H0816429A
- Authority
- JP
- Japan
- Prior art keywords
- program
- execution
- parallel
- sequential
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Advance Control (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
実現でき、並行プログラムの開発を効率よく行うことが
できる並行プログラムの作成方法及びその作成支援装置
並びに効果的なテスト・デバッグ及び再現性を保証した
部分並行実行を可能とする並行プログラム実行装置を提
供すること。 【構成】 本発明の並行プログラム作成支援装置は、並
行構造を有する第1並行プログラムを逐次実行可能な逐
次プログラムに変換する逐次化手段12と、前記逐次プ
ログラムのテスト・デバッグを行い、テスト・デバッグ
情報を作成するテスト・デバッグ手段16と、テスト・
デバッグ後の前記逐次プログラムを前記テスト・デバッ
グ情報に基づいて並行化することにより第2並行プログ
ラムに変換する並行化手段18とを備えた。また、前記
テスト・デバッグ手段は、前記逐次プログラムに対して
並行性に関する情報を導入する手段を含む。
Description
方法及びその作成支援装置並びに並行プログラム実行装
置に関する。
り、複雑なプロセッサ及び大容量のメモリが小型かつ低
価格で実現できるようになり、多数のプロセッサからな
る並行処理システムや分散処理システムが実用化されて
いる。このようなハードウェアに対しては、専用のプロ
グラム、即ち並列プログラムや分散処理プログラム等
(以下「並行プログラム」という)を用いなければなら
ない。従って、並行プログラムをいかに効率よく開発す
るかは、優れたアルゴリズムを検討する場合と同様に重
要な課題となっている。
ログラム中のバグを見つけ修正すること(即ちテスト・
デバッグ)と呼ばれる開発工程がプログラム開発の効率
に大きく影響する。しかし、並行プログラムの開発にお
いては、逐次プログラムの開発においては遭遇すること
のない、並行プログラム特有の問題を考慮する必要があ
る。この並行プログラム特有の問題とは、並行プログラ
ムを構成する各プロセスは、各プロセス間における相互
作用のタイミングにより様々な振る舞いをする可能性が
あるため、並行プログラム全体が正しく動作しないとい
う問題である。この問題は、並行プログラムの性質に基
づく問題であり、一般に「非決定性」と呼ばれる。
考慮する。図116(a)において、プロセスP1は、
共有メモリMの初期設定(init)を行うプロセス、
プロセスP2は、共有メモリMから読み出し(rea
d)を行うプロセス、プロセスP3は、共有メモリMに
書き込み(write)を行うプロセスを示す。これら
のプロセスをそれぞれ異なるプロセッサで実行するよう
な並列処理システム等で動作させた場合、全部で6通り
(図116(b)参照)の動作の組み合わせがあること
になる。通常、システムは初期設定で処理を開始するか
ら、今、プロセスP1(init)→P2(read)
→P3(write)又はP1(init)→P3(w
rite)→P2(read)の順番でプログラムが動
作する場合に正しい結果が得られるものとすれば、残り
の4通り(例えばP2→P3→P1)は、初期化が最初
に行われないため、明らかに正しい結果が得られないこ
とがわかる。
非決定性は、並行プログラムを動作させる毎に、その時
点におけるシステムの状況等によって結果を異なったも
のになる。従って、この非決定性に関する問題を解決し
ない限り、その並行プログラムは、テストにおいてたと
え正常に動作することがあっても、常に正常に動作する
という保証はない。
逐次プログラムにおけるバグを見つける場合よりも困難
である。なぜなら、逐次プログラムにおいては、テスト
・デバッグ時にプログラム中の全てのパスを実行するこ
とによって動作を確認することができるのに対し、並行
プログラムにおいては、全ての組合せ的なパス(即ち、
各プロセス中の全てのパスのみならず、プロセス相互間
の振る舞い)を考慮してパスを実行しなければならない
からである。上記の例のようにプロセスの数が少ない場
合にあっては、各プロセス相互間の振る舞いを全て列挙
することは比較的容易であるが、実際のプログラム開発
では、その数は膨大になり、その組み合わせも膨大なも
のとなるため、全ての振る舞いを把握することはもはや
不可能なものとなる。
ログラム開発におけるテスト・デバッグは、逐次プログ
ラム開発におけるテスト・デバッグに比較して、非常に
困難である。特に、プログラム自体が巨大化した今日に
おいては、このテスト・デバッグは一層困難になってい
る。
決定性によって再現性が保証されないことからテスト・
デバッグが困難となり、また予期せぬエラーが出現する
という問題を有する。
ッグを容易に実現でき、並行プログラムの開発を効率よ
く行うことができる並行プログラムの作成方法及びその
作成支援装置を提供することを目的とする。
次的に実行することにより再現性を保証し、効果的なテ
スト・デバッグを行なうことを可能とすると共に、テス
ト・デバッグ後に一部分を並行化して実行することによ
り、非決定性による予期せぬエラーを排除した安全な並
行プログラムの実行が可能な並行プログラム実行装置を
提供することである。
逐次化したプログラムに対してテスト・デバッグを行
い、テスト・デバッグが完了した時点で、プログラムの
並行性を復元することを骨子とする。
解決するために次のような手段を講じた。並行プログラ
ムのプログラミングの困難さは、「人間の思考は本来逐
次的であり、並行に動くものをありのままでは論理的に
認識することは困難である」ことに起因する。そこで、
本発明は並行プログラムをいったん逐次化し、逐次化し
たプログラムに対してプログラミング、テスト・デバッ
グを行う。これは、従来の逐次プログラミングと同じレ
ベルの困難さである。そして、テスト・デバッグが完了
した時点で並行性を、そのテスト・デバッグ情報を用い
て、自動的に復元する。
「超逐次プログラミング」と呼ぶ。この「超逐次プログ
ラミング」によれば、従来の手法におけるプログラミン
グの困難さを解決できる。本発明の基本コンセプトは、
以下の3つのステップ(或いは手段)から構成される。
次プログラムを生成するステップ(手段)。
(プログラミング、テスト・デバッグ、並行性の導入)
を行うステップ(手段)。
を並行化して並行プログラムを作成するステップ(手
段)。
ジナルの並行プログラムの並行構造に関する情報を保ち
ながら逐次化したプログラムをいう。
並行構造を有する第1並行プログラムを逐次実行可能な
逐次プログラムに変換する逐次化手段と、前記逐次プロ
グラムのテスト・デバッグを行い、テスト・デバッグ情
報を作成するテスト・デバッグ手段と、テスト・デバッ
グ後の前記逐次プログラムを前記テスト・デバッグ情報
に基づいて並行化することにより第2並行プログラムに
変換する並行化手段とを具備することを特徴とする。ま
た、本発明に係る並行プログラムの作成方法は、並行構
造を有する第1並行プログラムを逐次実行可能な逐次プ
ログラムに変換する第1ステップと、前記逐次プログラ
ムのテスト・デバッグを行い、テスト・デバッグ情報を
作成する第2ステップと、テスト・デバッグ後の前記逐
次プログラムを前記テスト・デバッグ情報に基づいて並
行化することにより第2並行プログラムに変換する第3
ステップとを具備することを特徴とする。
報を導入すること。この並行性に関する情報は、例え
ば、後述する良い非決定性に関する情報を含む。 (2) 第1並行プログラムの並行構造を解析し、この
並行構造と逐次プログラムをテストして得られた実行結
果を用いて逐次プログラムの並行化を行うこと。
ラムに変換されるセクションの並行構造と、逐次プログ
ラムのセクションの逐次構造をそれぞれ解析し、第1並
行プログラムの並行構造に関する相互関係及び逐次プロ
グラムの逐次構造に関する相互関係をグラフ情報として
表示する。このグラフ情報の表示においては、所定のセ
クション群をノードとし、第1並行プログラムの並行構
造に関する相互関係を第1アークとし、逐次プログラム
の逐次構造に関する相互関係を第2アークとしてグラフ
情報を表示する。そして、逐次プログラムのうち選択さ
れたセクションを並行化して部分的に逐次構造を有する
部分逐次プログラムに変換し、この部分逐次プログラム
を並行化して第2並行プログラムに変換する。
ラムに変換するステップにおいて、逐次プログラムの所
望の実行結果が得られるまで逐次プログラムのテスト・
デバッグを行うステップを含ませるか、又は逐次プログ
ラムを部分逐次プログラムに変換するステップにおい
て、所望の実行結果が得られるまで部分逐次プログラム
のテスト・デバッグを行うステップを含ませるか、或い
はこれら両方のテスト・デバッグステップを含ませても
よい。
ムに変換するステップに、部分逐次プログラムの逐次構
造を解析するステップを含ませた上で、グラフ情報の表
示と並行化セクションの選択及び部分逐次プログラムへ
の変換のステップを所定回数繰り返すようにしてもよ
い。
ラムに変換する逐次化に際して、この第1並行プログラ
ムを実行してそれによる実行ログを保存するとともに、
この保存された実行ログ及び第1並行プログラムを解析
し、この解析結果に基づいて、保存された実行ログを並
べ替える。実行ログ及び第1並行プログラムの解析にお
いては、例えば保存された実行ログ及び第1並行プログ
ラムからプロセスの先行関係を抽出し、これを先行関係
情報として保存する。
関する情報の導入に際して、逐次プログラムのプロセス
の流れを制約と遷移条件からなるフィールドに変換し、
このフィールドをチューニングすることによって行う。
更に、このフィールドを表すフィールドデータを表示す
る。
候補となるプロセス群を指定し、このプロセス群の実行
順序を入れ換えて逐次プログラムを複数の並行模擬プロ
グラムに変換した後、これら複数の並行模擬プログラム
を部分的に逐次構造を有する1つの部分逐次プログラム
に変換し、この部分逐次プログラムを並行化して第2並
行プログラムに変換する。
ラムに変換するステップにおいて、逐次プログラムの所
望の実行結果が得られるまで該逐次プログラムのテスト
・デバッグを行うステップを含ませるか、又は複数の並
行模擬プログラム群を1つの部分逐次プログラムに変換
するステップにおいて、並行模擬プログラム群の所望の
実行結果が得られるまで複数の並行模擬プログラムのテ
スト・デバッグを行うか、或いはこれら両方のテスト・
デバッグステップを含ませてもよい。また、逐次プログ
ラムに対して並行化の候補となるプロセス群を指定する
際、第1並行プログラムを解析し、この解析結果から並
行化の候補となるプロセス群を抽出してもよい。また、
逐次プログラムを複数の並行模擬プログラムに変換する
ステップにおいて、複数の並行模擬プログラムの一部の
実行結果から不要と判断される並行模擬プログラムを取
り除くステップを含ませてもよい。更に、複数の並行模
擬プログラムを1つの部分逐次プログラムに変換するス
テップにおいて、部分逐次プログラムに対して並行化の
候補となるプロセス群を指定するステップを含ませ、逐
次プログラムを複数の並行模擬プログラムに変換するス
テップと、複数の並行模擬プログラムを1つの部分逐次
プログラムに変換するステップを所定の回数繰り返して
もよい。
ラムへの変換を所定の逐次化ルールに従って行う場合、
この逐次化ルールを修正することによって、逐次プログ
ラムに対して並行性に関する情報を導入する。
換しながら並行して動作する実行環境に用いられる並行
プログラムの作成を支援する並行プログラム作成支援装
置において、並行プログラムのプロセス群の実行履歴で
あるログ情報を逐次化ルールとして取得して記憶し、こ
の記憶したログ情報を修正可能とする。記憶されている
ログ情報に基づいてプロセス群を逐次的に起動制御し、
また記憶されたログ情報を並行化して第2並行プログラ
ムに変換する。
報記憶手段に記憶されているログ情報を時系列に表示す
る表示手段と、前記表示手段により時系列に表示された
ログ情報内のデータの順序の入れ換えを指示するための
入れ替え指示手段と、前記入れ替え指示手段による指示
に従って前記ログ情報記憶手段に記憶されているログ情
報を書き換える書換手段とを含むことを特徴とする。ま
た、ログ情報修正手段は、プロセス間の処理タイミング
の非決定性を導入する非決定性導入手段を含むことを特
徴とする。
換しながら並行して動作できる実行環境で前記プロセス
群が実行順序規定情報に従って動作するシステムにおい
て、実行順序規定情報を分割し、この分割された実行順
序情報に基づいてプロセス群を起動制御する。
めの基準を与える分割基準指定手段を保持する手段を更
に具備してもよい。また、メッセージ交換の履歴を実行
順序規定情報として用いるとともに、分割基準指定手段
における分割基準としてメッセージ中の宛先プロセス情
報を基準として用いる。また、メッセージ交換の履歴を
実行順序規定情報として用い、分割基準指定手段におけ
る分割基準として前記メッセージ中の宛先プロセス情報
を基準として用いるとともに、プロセス制御手段を各プ
ロセス毎に保持する手段を具備する。更に、メッセージ
交換の履歴を実行順序規定情報として用い、分割基準指
定手段における分割基準として前記メッセージ中の宛先
プロセス情報を基準として用いるとともに、プロセス制
御手段を各プロセス毎に保持する手段と、実行順序情報
分割手段によって分割された実行順序情報をそれぞれ別
々に保存する分割実行順序情報保存手段を具備し、プロ
セス制御手段は該プロセスに対応する分割実行順序情報
保存手段に保存されている分割実行順序情報に基づいて
プロセスを起動制御する。また、プロセス群の実行履歴
情報であるログ情報を実行順序規定情報として用いても
よい。
行して、そのテスト実行の結果バグのない実行ログを蓄
積し、この蓄積されたバグのない実行ログのみを並行化
して第2並行プログラムに変換する。更に、テスト実行
の結果バグのある実行ログを蓄積し、この蓄積されたバ
グのある実行ログに基づいて第1並行プログラムを修正
する。
は、並行プログラムを解析してセクションを抽出し、そ
れらのセクション間の実行時の同期を制御するための実
行順序に関するルールを抽出するプログラム解析手段
と、実行時のセクション間の同期を調節するために実行
順序に関するルールを編集し、主に実行の効率化のため
に、抽出された当該セクションを融合・分割する編集手
段と、セクションをオブジェクトに変換するコンパイル
手段と、該実行順序に関するルールに従いセクション単
位で逐次又は並行に実行を行なう実行手段を具備する。
る。本発明では並行プログラムを一旦逐次化し、逐次化
したプログラムに対してテスト・デバッグを行うことに
より、従来の並行プログラムのプログラミングより遥か
に容易な逐次プログラミングと同じレベルの困難さで並
行プログラムのテスト・デバッグが可能となる。
プログラムに対して意図的に並行性に関する情報(良い
非決定性)を導入できるので、意図しない並行性(悪い
非決定性)に基づいて発生するバグを回避でき、高信頼
化が達成できる。
化の情報をユーザに対して同時に提示することにより、
ユーザは第1並行プログラムの並行構造を考慮しつつ、
良い非決定性部分の指定をすることができるようにな
る。また、並行プログラム記述レベルにおける良い非決
定性部分の指定・解除ではなく、グラフ情報に対して良
い非決定性部分を指定・解除を行うことでができるた
め、高度な並行プログラミング技術を必要とすることな
く、容易に並行プログラムの開発をすることができるよ
うになる。
換する際、第1並行プログラム及びその実行ログを解析
し、この解析結果に基づいて実行ログを並べ替えるよう
にすれば、並べ替え後の実行ログを表示してユーザに提
示することによって、並行プログラムの実行過程の理解
が容易となり、テスト・デバッグの効率が向上する。逐
次プログラムに並行性に関する情報を導入する際、逐次
プログラムのプロセスの流れを制約と遷移条件からなる
フィールドに変換し、更にそのフィールドデータを表示
することによって、フィールドを対話的・視覚的に編集
することで並行性に関する情報を効果的に導入し、バグ
のない並行プログラムが効率的に作成される。
プログラムに対して並行化の候補となるプロセス群を指
定し、このプロセス群の実行順序を入れ換えて逐次プロ
グラムを複数の並行模擬プログラムに変換した後、これ
ら複数の並行模擬プログラムを部分的に逐次構造を有す
る1つの部分逐次プログラムに変換し、この部分逐次プ
ログラムを並行化して第2並行プログラムに変換するこ
とにより、部分逐次プログラム上で並行プログラムの動
作を十分に確認することができる。また、部分逐次プロ
グラムに対して並行化の候補となるプロセス群を指定す
ることで、逐次構造プログラムを段階的に並行プログラ
ムへ変換することができる。更に、並行模擬動作系列に
基づく逐次実行で正しく動作することが確認された非決
定性のみを許容する並行性に関する情報を導入すること
で、正しく動作する並行プログラムを得ることができ
る。これらによって、並行プログラムのテスト・デバッ
グが容易となる。
ら並行して動作する実行環境に用いられる並行プログラ
ムの作成を支援する並行プログラム作成支援装置におい
て、第1並行プログラムのプロセス群の実行履歴である
ログ情報を逐次化ルールとして取得して記憶し、このロ
グ情報を修正可能とするとともに、記憶されているログ
情報に基づいてこれに基づいてプロセス群を逐次的に起
動制御し、記憶されたログ情報を並行化して第2並行プ
ログラムに変換することにより、ソースプログラムとし
ての並行プログラムを修正することなく、ログ情報の修
正で処理タイミングの非決定性に起因する不具合を解決
できる。これにより、処理タイミングの非決定性が内在
する並行/並列/分散プログラムの開発が容易となる。
また、ユーザの意図する良い非決定性のみを容易に導入
することができるため、並行プログラムとしての柔軟
性、再利用性及び拡張性を維持することもできる。
ら並行して動作できる実行環境でプロセス群が実行順序
規定情報に従って動作するシステムにおいて、実行順序
規定情報を分割し、つまり並行プログラムを逐次化して
得られた全プロセスの集中ログ情報を各プロセス毎に分
割し、この分割された実行順序情報に基づいてプロセス
群を起動制御することにより、無害の非決定性を自然に
導入し、集中ログ情報に基づく逐次プログラムの実行時
と同一結果を高い処理効率で得ることが可能となる。
テスト実行の結果、その1つであるバグのない実行ログ
を蓄積し、この蓄積されたバグのない実行ログのみを並
行化して第2並行プログラムに変換することにより、テ
ストで通過したタイミングだけを許容するようにプログ
ラムが動くようになるため、テストしなかったことで残
存したバグに陥ることを回避でき、信頼性が向上する。
並行プログラムの逐次又は部分並行実行を行なうことが
可能となるので、従来の逐次プログラムと同様に再現性
を保証することができ、効果的かつ安定したテスト・デ
バッグを行なうことができる。また、逐次実行から部分
並行実行に容易に切替えることができるため、逐次化し
てテスト・デバッグをおこなったプログラムを非決定性
に影響されない安全な並行実行を可能とする。他に、セ
クションの実行順序に関するルールを編集して実行時の
セクション間の同期を制御することにより、効果的なテ
スト・デバッグを行なえるとともにプログラムの効率化
の指針とすることもできる。
は、本発明の並行プログラム作成支援装置或いは作成方
法と組み合わせて用いることもできる。この場合には、
並行プログラム実行装置は、第1並行プログラム(ソー
スプログラム)の実行手段として、機能する。更に、並
行プログラム実行装置は、本発明の並行プログラム作成
支援装置或いは作成方法により作成された並行プログラ
ムの検証用としても利用できる。
する。本発明の実施例の説明を行う前に、本発明におい
て使用する用語を以下のように定義する。
テム。並行プログラムが動くシステムは並行システムで
ある。並列計算機や分散処理システムは並行システムで
ある。
動くモデルに基づいて記述されたプログラム。複数のC
PUから構成される並列計算機上で、論理的にも物理的
にも並行に動くプログラム(並列プログラム)は、並行
プログラムに含まれる。また、単一のCPU上で物理的
には逐次的に動く場合でも、マルチタスクシステムのよ
うに論理的に並行であれば、並行プログラムに含まれ
る。
ルに基づいて記述されたプログラム。
ラムにメタレベル(実行管理レベル)の制御を付加する
ことによって、逐次的に動くようにしたプログラム。例
えば、並行プログラムとして記述されたプログラムを、
実行管理レベルのスケジューラを付加することによって
逐次的に動くようにしたプログラムは、超逐次プログラ
ムである。超逐次プログラムは後述する非決定性を持た
ないので、外部からの入力が同じならばその挙動は必ず
再現性を持つ。また、超逐次プログラムにおいて、部分
的に並行性(非決定性)を導入することもできる。部分
的に並行性(非決定性)が導入された超逐次プログラム
を、特に、部分超逐次プログラム(PHSP)、並行性
(非決定性)が全くなく完全に逐次化されたプログラム
を完全超逐次プログラムと呼ぶこともある。
理のタイミングによってシステムの挙動が変わること。
並行プログラムの実行において、非決定性は本質的側面
である。ある意味で、非決定性のないプログラムは論理
的に逐次プログラムと等価である。
をいう、即ち、ユーザの仕様、その他実現要求に含まれ
る非決定性。この非決定性により、外部(環境)からの
非決定的な入力に適切に応答できるようになる。
決定性。ユーザの思考回路は逐次的であるため、設計時
には意図しなかったケースが実際の並行プログラムの実
行では多々発生する。
選択が、最終的な結果に影響しないもの。「超逐次プロ
グラミング」の並行化装置において、並行化する対象
は、この「無害な非決定性」を含む。
化制御を行なうこと。
おいて、並行化の候補となる特定の範囲について生成さ
れた並行模擬動作系列の集合。
おいて並行化の候補となる特定の範囲について並行プロ
グラムの動作を逐次プログラム上で模擬することを目的
として、逐次実行の順序を任意又は意図的に入れ替えて
生成される1つの動作列のこと。一般に、1つの並行化
範囲には複数の並行模擬動作系列が生成されるので、そ
の全体を1つの並行模擬プログラムという。超逐次プロ
グラム全体では複数の並行模擬プログラムが生成され
る。
支援装置を実現するためのコンピュータシステムの構成
例を示す図である。図1において、N台のプロセッサ1
−1、1−2、…、1−Nは、並行プログラムを同時に
実行することができ、I/Oインタフェース2を介して
共有メモリ3及び周辺装置とアクセスすることができ
る。周辺装置は、入力装置4と出力装置5及び外部記憶
装置6から構成される。入力装置4は、キーボードとポ
インティングデバイス等とからなり、各種コマンドやデ
ータの入力をするために用いられる。出力装置5は、C
RTディスプレイ等からなり、ソースプログラムやテス
ト・デバッグ状況に関する情報等をテキスト又はグラフ
ィック表示することにより、ユーザに提示する。ユーザ
は、これら入力装置4及び出力装置5を用いて、対話的
にコンピュータを操作することができる。
ディスク等からなり、ソースプログラムやテスト・デバ
ッグ状況に関する情報を書き込み又は読み出すことがで
きるようになっている。
の構成は、これにこだわる必要はなく、例えば、複数の
計算機をネットワークを用いて接続した、いわゆる分散
ネットワークを用いて構成してもよい。
テムにおいて、本発明における並行プログラムの作成
は、以下のようにして実現される。
ッグは部分超逐次プログラムに対して行い、好ましい実
施例として良い非決定性の導入を超逐次プログラムに対
して行う。なお、以下の実施例において、良い非決定性
を導入した例を説明するが、必ずしも良い非決定性を導
入しなくても良い。
成支援装置の概略構成を示す図である。実施例1に係る
並行プログラム作成支援装置は、逐次化装置12と、テ
スト実行装置15と、デバッグ装置16と、非決定性導
入装置17と、並行化装置18とを具備する。
部11に記憶されたソースプログラム(以下、「第1並
行プログラム」と称する)を逐次化ルール記憶部13に
記憶された逐次化ルールに基づいて超逐次プログラムに
変換して、その結果がHSPファイル記憶部14に記憶
される。第1CPファイル記憶部11には、モデル化さ
れ並行プログラミング言語で記述された第1並行プログ
ラムが格納されている。この第1並行プログラムには、
バグが存在する可能性がある。第1並行プログラムを記
述する並行プログラミング言語には、例えば以下のもの
がある。 (a)Concurrent PASCAL (b)ADA (c)GHC (d)Modula3 (e)Occam (f)cooC テスト実行装置15及びデバッグ装置16は、それぞ
れ、HSPファイル記憶部14に記憶された超逐次プロ
グラムのテスト・デバッグを行う。
ラムを超逐次プログラムに変換する際に、良い非決定性
を導入する。
14に記憶された超逐次プログラムのテスト・デバッグ
情報に基づいて、超逐次プログラムを並行化して、第2
並行プログラムを生成する。この第2並行プログラム
は、第2CPファイル記憶部19に記憶される。
成方法の概略手順を示すフローチャートである。
ル化を行う。また、並行システムの各プロセス構造を決
定する。更に、該各プロセス内を並行プログラム等を用
いたプログラミングにより、並行構造を有する並行プロ
グラムをソースプログラムとして記述する。なお、「並
行構造を有する」としたのは、一般に並行プログラム
は、その全てが並行構造で構成されているわけではな
く、逐次性を用いたモデル化の方がより自然である場合
には、その部分は逐次構造である場合があるからであ
る。なお、このソースプログラムには、バグが潜在的に
存在する可能性がある。
構造の超逐次プログラムに変換する。本実施例では、メ
タレベルにおいて逐次性を導入する。ここで、メタレベ
ルとはソースプログラム(すなわち、第1並行プログラ
ム)そのもののレベルではなく、ソースプログラムの実
行を管理するレベルをいう。例えば、並行プログラムで
記述されたソースプログラムを、それとは別に管理され
るスケジューラによって逐次的に実行することを保障し
たプログラムのソースプログラムに変換する。
のテスト・デバッグ 超逐次プログラムのテスト・デバッグを行う。テスト実
行装置により超逐次プログラムをテスト実行した結果に
基づいて、デバッグ装置により超逐次プログラムからバ
グを除去する。ここでのテスト・デバッグは、逐次プロ
グラムにおける通常のテスト・デバッグ方法と同様に行
うことができる。超逐次プログラムが正常に動作するこ
とが保障されるまで、テスト・デバッグを行う。
に対する良い非決定性の導入 テスト・デバッグが行われた超逐次プログラムに対し
て、良い非決定性に関する情報(並行性に関する情報)
を与える。これにより超逐次プログラムは、非決定性に
関する情報を一部に持つことで、部分超逐次プログラム
となる。良い非決定性に関する情報の導入方法は後述す
る。
ラムのテスト・デバッグ ステップA4で得られた部分超逐次プログラムに対し
て、テスト・デバッグを行う。すなわち、ステップA4
で良い非決定性に関する情報が導入された超逐次プログ
ラムをテスト・デバッグする。
ラムに対する良い非決定性の導入・拡大 ステップA5でテスト・デバッグが行われた部分超逐次
プログラムに対して、良い非決定性に関する情報を追加
する。ステップA5〜ステップA6を所定の回数繰り返
し、良い非決定性を徐々に拡大していく。
グラムのうち、無害な非決定性部分を抽出し、その部分
を並行化することで、部分超逐次プログラム全体を並行
プログラム(すなわち、第2並行プログラム)に復元す
る。すなわち、並行化に関する情報が導入されなかった
部分に関しては、デフォルト逐次化で与えられた逐次性
を並行プログラム中に反映させて(例えば、ソースプロ
グラム自体に埋め込む)、メタレベルのデフォルト逐次
性は解除する。
的に説明する。
す図である。
プロセスP2とから構成されている。これらのプロセス
は、並行プログラムのソースコードがコンパイルされる
ことにより生成された実行モジュールがコンピュータ上
で実行された時に初めて実体化するものであり、プロセ
スP1とプロセスP2とにそれぞれ対応する並行プログ
ラムが必ずしも物理的に別の記憶媒体に記憶されている
必要はない。また、メモリMはここでは共有メモリ(sha
red memory) を表し、並行プログラムのアクセス命令に
よって書き込み/読み込み等のアクセスを行うことがで
きる。図4において実線矢印はプロセスP1、P2が実
行された時に共有メモリMとの間でアクセスが行われる
ことを示す。
並行プログラムは、ユーザによる入力装置4からの指示
により引き出され、逐次化装置12に入力される。逐次
化装置12に入力された第1並行プログラムは、逐次化
ルール記憶部13に格納された逐次化ルールに従って、
メタレベルにおいてデフォルト逐次性が導入されること
により、超逐次プログラム(HSP)に変換され、HS
Pファイル記憶部14に記録される。
のがある。 (a)プロセスに優先度を導入するルール。 (b)プロセス内の処理単位(オブジェクト指向におけ
るメソッド)に優先度を導入するルール。 (c)具体的な実行ログに基づく逐次化ルール。 (d)メッセージの到着先の実行を優先する逐次化ルー
ル。 (e)メッセージの送信元の実行を優先する逐次化ルー
ル。
図4の並行プログラムに対する逐次化ルールの一例であ
り、二つのプロセスP1、P2に対してP1をP2より
優先的に動作させるという優先度を与えることを表して
いる。これは上記(a)のルールに相当する。この逐次
化ルールは、例えば第1並行プログラムの先頭で宣言し
ておき、プログラム本体ととともにコンパイルすること
により並行プログラムに導入するようにしても良いし、
並行プログラムとは別にファイルに記述しておき、並行
プログラムが実行時にオペレーティングシステムやスケ
ジューラが解釈することにより導入するようにしても良
い。なお、本実施例では逐次化ルールを" >>" で示し
たが、これに限らず任意の記号を用いることができる。
次性が導入された超逐次プログラムHSPの概念図であ
り、プロセスP1とプロセスP2とはスケジューラSに
よって管理されていることを示しており、図5におい
て、破線矢印は図4に示した逐次化ルール(" P1>>
P2" )に従って、スケジューラSがプロセスP1を実
行後、プロセスP2を実行することを示す。なお、この
超逐次プログラムHSPの概念図は、図5の下方に記載
した式、 HSP=P1|P2|S のように記述するものとする。これは、超逐次プログラ
ムHSPはプロセスP1とプロセスP2とスケジューラ
Sとから構成されていることを示す。ここで、逐次化ル
ールはスケジューラのスケジューリング規則に対応す
る。
出力装置5によって見ることができる。この超逐次プロ
グラムHSPは、ユーザによる入力装置4からの指示に
よってテスト実行装置15に入力され、テスト実行が行
われる。テスト実行装置15は、テスト実行の結果(実
行ログ)を出力装置5に提示する。ユーザは、このテス
ト実行の結果に基づいて、入力装置4をデバッグ装置1
6として用いて、超逐次プログラムHSPに対し所定の
テスト・デバッグを行うことができる。具体的なテスト
・デバッグ技術には、 (a)ソースコードのトレーサ (b)ブレークポイント (c)アニメーション 等がある。
ージを表す図である。図6において、出力装置5上のデ
バッグ画面60には、各種ウィンドウ61〜65がオー
プンされ、各種情報が表示されており、これらウィンド
ウ61〜65は、適宜オープン・クローズすることが可
能である。なお、ここでのテスト・デバッグは、基本的
には公知のデバッグ装置を用いることができ、具体的に
は、UNIXワークステーション上のdbxtool等
が知られている。
て所定のテスト・デバッグを行った後、入力装置4から
再度テスト実行の指示を与える。これにより、テスト・
デバッグの行われた超逐次プログラムHSPは、テスト
実行装置15に入力され、再度テスト実行が行われる。
このテスト・デバッグは、超逐次プログラムHSPが正
常に動作することを確認するまで繰り返し行われる。テ
スト・デバッグにより正常に動作することを確認した時
点で、非決定性導入装置17により超逐次プログラムに
対して良い非決定性に関する情報を部分的に導入してい
く。非決定性導入装置17より導入された良い非決定性
に関する情報は、超逐次プログラムHSPに反映され、
HSPファイル記憶部14に記録される。なお、非決定
性導入装置17については後述する。
に関する情報が導入された状態の一例を示す図である。
ここで、並行プログラムの各プロセスの実行単位を「セ
クション」と呼ぶと、図7はセクションS1とセクショ
ンS2とに分けられたプロセスP1と、セクションS3
とセクションS4とに分けられたプロセスP2につい
て、セクションS2とセクションS3の優先度を同じも
のとすることにより、非決定性が導入された状態を示
す。
度を与えている逐次化ルールに対し所定の部分に良い非
決定性に関する情報を与える(例えば、優先度を同じに
したいプロセスをマウスで指定する)ことにより、当該
部分については優先度を同じとして、並行に実行可能に
する。図7の例では、S1〜S4の4つのセクションの
うち、「S2である" write1" とS3である" r
ead2" の優先度を同じにする」という情報(S2=
S3)を良い非決定性として導入している。すなわち、
優先度が同じプロセスは、どちらが先に実行されてもか
まわないので、非決定性を持つ。
決定性に関する情報が導入された超逐次プログラム(部
分超逐次プログラムPHSP)は、ユーザからの指示に
従ってテスト実行装置15によりテスト実行が行われ、
デバッグ装置16によりテスト・デバッグが行われる。
この場合、部分超逐次プログラムPHSPの振る舞い
は、良い非決定性に関する情報の導入された部分につい
ては非決定的な振る舞いをするので、その振る舞い全て
についてテスト・デバッグを行うことが好ましい。この
ようにして、テスト・デバッグ及び良い非決定性に関す
る情報の導入を繰り返し、良い非決定性に関する情報を
徐々に付加していく。
タル(incremental) に導入されて得られた部分超逐次プ
ログラムPHSPは、ユーザからの指示により並行化装
置18に入力される。並行化装置18は、部分超逐次プ
ログラムPHSPのうち無害な非決定性部分を抽出し、
部分超逐次プログラムPHSP全体を並行化する。即
ち、並行化装置18は、導入された良い非決定性と無害
な非決定性に関してデフォルト逐次性を解除し、並行プ
ログラムCP(第2並行プログラム)としてファイルに
記録する。ここで、良い非決定性と無害な非決定性以外
はデフォルト逐次化で与えられた逐次性が並行プログラ
ムCPに反映されなければならない。ユーザは、この第
2並行プログラムを出力装置5によって見ることができ
るとともに、最終的なテスト・デバッグを行うことがで
きる。
したが、以下、更に詳細な実施例を実施例を説明する。
但し、以下の実施例においては、実施例1と共通の部分
や相対応する部分については同一符号を付して説明を簡
略化するか又は省略し、相違点を中心に説明する。
様に、次のような並行プログラムを対象とする。並行プ
ログラムは複数のプロセスから構成される。並行プログ
ラムは、共有メモリ型のマルチプロセッサで実行され
る。各プロセス毎にプロセッサ(CPU)が割り当てら
れる。各プロセスの同期は、同期基本命令と共有メモリ
型で実現される。
実施例を説明する。図8は、実施例2に係る並行プログ
ラム作成支援装置の概略構成を示すブロック図であり、
図9は、実施例2に係る並行プログラム作成方法の概略
手順を示すフローチャートである。図8が、図2と異な
る点は、セクション設定装置7を更に具備し、テスト実
行装置15とデバッグ装置16とを、具体的に、テスト
実行装置15、修正装置9、及び解析装置10とし、解
析装置10で解析された解析情報を記憶する解析情報記
憶部20を有する点である。解析装置10では、超逐次
プログラムを解析し、解析情報として後述する先行制約
を抽出する。他の構成部分は実施例1と同様であるの
で、説明を省略する。なお、図8には、並行化装置18
で、超逐次プログラムの並行化を行う際に参照される並
行化ルールを記憶する並行化ルール記憶部21を入れて
いる。
ラムの各プロセスをいくつかのセクション(プログラム
単位)に分割する。
テストの結果バグがあれば、修正を行う。
に、超逐次プログラムのテストを行う。
析された情報を記憶する。
参照して説明する。なお、図9において、図3のフロー
チャートと同一動作には同一の符号を付す。
ル化を行う。また、並行システムの各プロセス構造を決
定する。更に、該各プロセス内を並行プログラム等を用
いたプログラミングにより、並行構造を有する並行プロ
グラムをソースプログラムとして記述する。このソース
プログラムには、バグが潜在的に存在する可能性があ
る。
ラムの各プロセスをいくつかのセクション(単位)に分
割する。ここで、第1並行プログラム中の同期命令は自
動的に単独のセクションとする。ここで、セクションは
プロセスの処理の単位であり、以下のステップでは、セ
クションを単位として、逐次化及び並行化を行う。この
場合において、設計者によるセクション設定がなくても
構わない。この場合は、同期命令で区切られる区間が自
動的にセクションになる。
ードを分割し、分割された各区間にセクションIDを設
定することで実現できる。ソースコード分割の一例とし
ては、図10に示すように、区切りポイントを挿入し、
区切りポイントから次の区切りポイントまでの処理をセ
クションとする方法がある。ここで、上記のように同期
命令の前後には自動的に区切りポイントが挿入される。
ログラムを逐次化する。逐次化ルールの一例としては、
プロセスに優先度を導入する方式がある。この優先度に
基づいて実行すれば、実行時の非決定性は存在しないの
で、超逐次プログラムとみなすことができる。このよう
にして並行構造に関するプログラム情報を持ちながら逐
次化されたプログラムを超逐次プログラムとする。逐次
化方式の一例としては、「プロセスの優先度」に基づく
方式がある。この方式によれば、プロセスに予め固定の
優先度を設定し、優先度が高いプロセスのセクションの
実行を優先することにより、非決定性のない逐次的な実
行順序が得られる。別の逐次化方式の例としては、図1
1に示すような「同期命令のwait側の実行を優先する方
式(逐次化ルール1)」や「同期命令のsend側の実行を
優先する方式(逐次ルール2)」等がある。ここで、超
逐次プログラムは、3種のプログラム情報、すなわちセ
クション情報と、プログラム構造情報と、逐次化情報と
から構成される。セクション情報は、セクションの識別
子(ID)とセクションの属するソースコードの情報で
ある。プログラム構造情報は、オリジナルの並行プログ
ラムにおける、プロセス毎のセクションの実行順序情
報、更に、異なるプロセスのセクション間のデータ依存
関係の情報である。逐次化情報は、逐次化によるグロー
バルなセクションの実行順序情報であり、同時によい並
行性の関する情報も持つ。一例としては、並行システム
のモデル化手法であるペトリネットで逐次化情報を表現
する方法がある。
に対するテスト・デバッグ 超逐次プログラムに対して、テスト実行装置15でテス
トを行い、バグがある場合は、修正装置9でデバッグ/
修正を行う。また、プログラムの修正が同期命令等の並
行構造の変更にも及ぶ場合は、ステップA1に戻り、プ
ログラム作成装置8でモデル化を行い、再度セクション
の設定及び逐次化を行う。ここで、プログラム6は逐次
化されているので、テスト・デバッグは逐次プログラム
なみに容易になる。
に対する良い非決定性の導入 非決定性導入装置17により、出力装置5に超逐次プロ
グラムの構造が示される。設計者はこの構造を見ながら
非決定性導入装置17により良い非決定性による並行性
を明示的に導入できる。この時、解析装置10により抽
出された超逐次プログラムのプログラム情報により、設
計者による良い非決定性の導入を支援する。良い非決定
性の導入の必要がなければ、ステップB2に進む。良い
非決定性の導入方式として、例えば、超逐次プログラム
の逐次化情報がペトリネットで表現されている場合に
は、プログラム構造を保存する範囲でのペトリネットの
書換によって良い非決定性を導入する。
ステップA3と同様に、テスト実行装置15でテストを
行い、バグがある場合は、修正装置9でテスト・デバッ
グを行う。また、プログラムの修正が同期命令等の並行
構造の変更にも及ぶ場合は、ステップA1に戻り、プロ
グラム作成装置で修正を行い、再度セクションの設定及
び逐次化を行う。ここで、プログラム6で並行化が導入
された部分に関しては、並行に実行を行う。この場合に
おいて、超逐次プログラムの逐次化情報がペトリネット
で表現されている場合には、ペトリネットのシミュレー
タを用いて、トークン(token) のあるプレースに対応す
るセクションを実行することで、超逐次プログラムのテ
スト実行が実現できる。
ラムに対する良い非決定性の導入・拡大 ステップA5でテスト・デバッグが行われた超逐次プロ
グラムに対して、良い非決定性に関する情報を追加す
る。ステップA5〜ステップA6を所定の回数繰り返
し、良い非決定性を徐々に拡大していく。更に良い非決
定性を導入する必要があれば、ステップA5と同様に非
決定性導入装置17で並行性を追加し、ステップA6に
戻る。必要がなければ、ステップB2に進む。
グラムに対して、解析装置10により抽出された超逐次
プログラムの解析情報12により、並行可能な部分を自
動抽出し、並行化装置18で並行化ルールを用いて超逐
次プログラムの並行性を自動拡大する。並行化ルール
は、例えば、以下のようになっている。プログラム情報
から、解析装置10によってデータ依存関係及び制御依
存関係に基づく先行制約を抽出し、先行制約のないセク
ションに関しては並行化できる。この並行化処理は、予
め定められた並行化ルールを適用することにより行うこ
とができる。並行化ルールの一例としては、図12に示
すようなペトリネットによる逐次化情報の書換ルールが
ある。データ依存関係及び制御依存関係に関しては、公
知である。
作成 並行化装置18において、自動的に並行性を拡大した超
逐次プログラムに対して、超逐次プログラムのプログラ
ム情報をソースコードに反映させた並行プログラム15
を生成する。
グラムのテスト・デバッグは非常に困難な作業である。
これは、並行性によるプログラムの非決定により、ある
タイミングによっては、プログラムが設計者の意図しな
い挙動を示すからである。並行プログラムのテスト・デ
バッグでは、設計者の意図しない並行性(悪い非決定
性)によるバグを1つ1つテストで発見して取り除いて
いる。しかし、この方法では、バグを完全に取り除くの
は非常に困難であり、更に労力を要する。
プログラムをまず逐次化し、それに対して設計者が意図
する並行性を徐々に導入し、最終的に自動的に並行化で
きる部分を並行化し、並行プログラムを復元する。
は、並行プログラムから悪い非決定性を除くのではな
く、逐次プログラムに良い非決定性を導入する。このよ
うに、超逐次プログラミングでは、逐次プログラムから
ボトムアップ的に並行プログラムを作成するので、予期
せぬタイミングで発生するバグが入る余地がなく、非常
に信頼性の高いプログラムを作成することができる。ま
た、テスト・デバッグがはるかに容易になる。逐次プロ
グラミングでは、逐次化による性能劣化等が懸念される
が、スーパーコンピュータ等の分野におけるFORTR
AN等の逐次プログラムの自動並行化技術が利用できる
ので、多くの場合では実用上問題がない。実施例2の基
本的な構成及び動作を説明したが、以下に、実施例2の
具体例を示す。 (a) 第1具体例 図13は、並行プログラムの例を示す。ここで、P1と
P2は並行に動くプロセスである。また、P1とP2
は、共有メモリMをアクセスしている。
える。簡単のため、セクションIDを命令そのものとす
る。
体的には、P1>>P2(P1はP2より優先する)と
する。この時、逐次化されたセクションの実行順序は、
以下のようになる。 init1→read1→write1→read2→
write2 逐次化により生成された超逐次プログラムは、それぞれ
図15に示すように、セクション情報、プログラム構造
情報、超逐次化情報から構成される。ここで、逐次化情
報は、上記の実行順序をペトリネットで表現したもので
ある。
に対するテスト・デバッグ 超逐次プログラムを実行し、バグがあればセクションの
各セクションのソースコード、或いは、オリジナルの並
行プログラムを修正する。ここでは、バグはなかったと
する。
に対する良い非決定性の導入 逐次化情報のペトリネットを表示装置で表示し、逐次関
係を切断することにより、並行化を行う。ここでは、w
rite1とread2の逐次関係を切断することにす
る(図16(a))。write1とread2はプロ
グラム構造情報での実行順序関係はないので、切断可能
である。ここで、どの逐次関係を切断すべきかに関する
ガイダンス情報を後述する解析情報20に基づき提供す
ることもできる。
る。ここでは、 init1→read1→write1→read2→
write2 init1→read1→read2→write1→
write2 のような実行が可能である。実行の結果、バグがあれば
修正する。ここでは、バグはなかったとする。
タ依存関係から、解析情報20により、セクション間の
先行制約が得られる。この先行制約が解析情報20であ
る。先行制約とは、データ依存関係にあるセクション間
の実行順序の制約である。すなわち、データ依存関係に
あるセクション間は、実行順序によって計算結果が変わ
り得るので、逐次化情報で定められた順序を保持する必
要がある。ここでの先行制約は以下の3つである。 init1→read2 init1→write2 read1→write2 例えば、P1がread1で読み込む値は、P2のwr
ite2がread1の前で起こるか後で起こるかによ
って影響を受ける。逐次情報では、read1→wri
te2であるので、これが先行制約となる。以上の先行
制約がないセクションに関しては、並行化が可能であ
り、並行化ルールにより自動並行化できる。ここでは、
read1とread2には先行制約がないため、並行
化ルール1(図12)を適用できた(図16(b))。
作成 自動並行化を行った逐次プログラミングから、並行プロ
グラムのソースコードを生成する。この例では、図10
における逐次化情報1と逐次化情報2を実現する同期命
令(send、wait)をソースコードに埋め込む。
その他の逐次化情報は、オリジナルの並行プログラムが
持っている逐次化情報(実行順序)である。変換された
プログラムは図17のようになる。この並行プログラム
は、図13のような構造の並列計算機上で実行される。 (b) 第2具体例 第2具体例では、並行プログラムが同期命令、ループ構
造、条件分岐を持つ場合の超逐次プログラミングの手順
を示す。
ップB2:セクションの設定は省略し、図18のような
セクションの実行順序(プログラム構造情報)を持つ並
行プログラムが与えられたとする。ここで、同期命令
(send、wait)とデータ依存関係(S13とS
22)、ループ構造及び条件分岐があることに注目され
たい。
わち、P1>>P2)を導入することによる逐次化を行
う。逐次化の結果は図19のようになる。すなわち、超
逐次プログラムは、それぞれ図18及び図19のプログ
ラム構造情報と逐次化情報を持つ(セクション情報は省
略)。ここで、同期命令によって実行されるプロセスが
切り替わっていることに注目されたい。例えば、wai
t命令によって、P1のS12の実行の後にP2のS2
1が実行されている。また、ループ及び分岐構造もペト
リネットで表現されている。
に対するテスト・デバッグ 超逐次プログラムを実行し、バグがあればセクションの
各セクションのソースコード、或いは、オリジナルの並
行プログラムを修正する。ここでは、バグはなかったと
する。
に対する良い非決定性の導入 逐次化情報のペトリネットを表示装置で表示し、逐次関
係を切断することにより、並行化を行う。この例では、
明示的には、良い非決定性を入れなかったとする。
タ依存関係から、セクション間の先行制約が得られる。
ここでは、先行制約としては、S22→S13だけであ
る。ここで、ループにおいては、先行関係にもループが
生じることがある。ここでは、1回のループにおける先
行関係のみに注目する。先行制約がないセクションに関
しては、並行化が可能であり、並行化ルールにより自動
並行化できる。この例では、先行関係はS22→S13
だけであり、図12の並行化ルール1と並行化ルール2
により、最終的に図20が生成できる。
変換 第1具体例と同様に、残った逐次化情報に関して同期命
令を埋め込むことによって並行プログラムが生成でき
る。
プログラム作成支援装置の概略構成を示す図であり、図
22は、本実施例に係る並行プログラム作成方法の概略
手順を示すフローチャートである。
ストケース記憶部402によって逐次化装置12が構成
される。この逐次化装置12では、今までの実施例と異
なり特別に逐次化ルールはなく、逐次化はランダムに行
われる。すなわち、ランダムに実行したときのログを超
逐次プログラムとみなす。以下、本実施例を具体的に説
明する。
は、以下のような手順によって実現される。ここで、第
1並行プログラムとして全く独立に動く2つのプロセス
P1とP2から構成される簡単な並行プログラムを考え
る。
ル化を行う。また、各プロセス構造を決定する。更に、
該プロセス内を並行プログラム等を用いたプログラミン
グにより、並行構造を有する並行プログラムをソースプ
ログラムとして記述する。このソースプログラムには、
バグが潜在的に存在する可能性がある。ここでは、2つ
のプロセスP1とP2を図23に示すようにプログラミ
ングする。
2からテストケースを引き出し、CPファイル記憶部1
1からの第1並行プログラムを実行し、実行結果を出力
装置5に表示してランダムにテストを行う。ここでは、
実行ログが、 log1=job11→job12→job21→jo
b22 であったとする。
C4に進み、バグがあれば、その実行ログを実行ログ記
憶部403に保存してステップC3に進む。ここで、も
しバグがあればステップC3に進むが、ここではバグが
なかったとしてステップC4に進む。
された実行ログに基づくバグの発見を出力装置5を用い
て行い、CPファイル記憶部11に格納されている第1
並行プログラムを修正してバグを除去する。テスト・デ
バッグが完了したら、ステップC1に戻る。
いと判定されれば、実行ログlog1を実行ログデータ
ベース404に蓄積する。実行ログは、超逐次的な実行
系列であり、超逐次プログラムの特殊な形態とみなすこ
とができる。
有無判定 テストケース記憶部402にテストケースが残っている
かどうかを判定し、残っていればステップC1に戻って
テストを続行し、テストケースが残っていなければステ
ップA7に進む。本ステップでは、別のテストケースも
試みるためにステップC1に戻ってテストを続行する。
この2回目のテストで、次に示す実行ログlog2が実
行ログデータベース404に保存されたとする。 log2=job11→job21→job12→jo
b22 (7) ステップA7:並行プログラムの生成 CPファイル記憶部11に格納されている第1並行プロ
グラムと実行ログデータベース404に格納されている
実行ログから、テストで通過したパスだけしか実行しな
いような並行プログラムを並行化装置18により生成
し、第2CPファイル記憶部19に格納する。
04に保存された2つの実行ログlog1、log2だ
けを実行するような並行プログラムを以下の手順で生成
する。 (A)全ての実行ログをマージしてグローバル状態遷移
システムGTS(Global Transition System)を生成する
(図24(a))。 (B)GTSを2つのプロセスP1、P2に射影する。
この時、相手のプロセスの挙動を認識し、同期を取るた
めの同期命令(job11−ok、job21−ok、
job12−ok、job22−ok)が埋め込まれ
る。生成されたプログラムをP1′、P2′とする(図
24(b))。 (C)P1′、P2′の同期命令には冗長性があるた
め、この冗長性を除去する。この冗長性を除去した後の
最終的なプロセスをP1″、P2″とする(図24
(c))。
1″、P2″から構成される並行プログラムCP″が生
成できる。この並行プログラムCP″では、テストで正
しく動くことを確認した実行log1、log2は可能
だが、テストしてないケース、例えば log3=job21→job11→job12→jo
b22 は実行されることはない。
行されることはないので、非常に安全なプログラムであ
るといえる。
同程度の困難さで並行プログラムのプログラミングがで
き、ユーザはテストを効率的にできるばかりではなく、
テストしない部分は動かないので、非常に高い信頼性が
達成できる副次的効果も期待できる。
並行プログラム作成方法の概略手順を示すフローチャー
トである。
バッグ 以上のステップA1〜A3は、図3に示したステップA
1〜A3と全く同様であるため、説明を省略する。
に対する良い非決定性部分の導入 ステップA3でテスト・デバッグが行われた超逐次プロ
グラムに対して、ユーザが非決定性導入装置17によ
り、非決定的に動作する部分(これを「良い非決定性部
分」という)を指定する。非決定性導入装置17により
指定された良い非決定性部分は、超逐次プログラムに良
い非決定性に関する情報(並行性に関する情報)として
反映される。これにより超逐次プログラムは、良い非決
定性部分を持つ部分超逐次プログラムとなる。良い非決
定性部分の指定方法は後述する。
ラムのテスト・デバッグ ステップA4で得られた部分超逐次プログラムに対し
て、テスト・デバッグを行う。すなわち、ステップA4
で良い非決定性部分が導入された部分超逐次プログラム
をテスト・デバッグする。ここでは、部分超逐次プログ
ラムを実行形式に変換して実行する際に、ステップA4
において導入された良い非決定性部分のみが並行構造の
実行形式に、導入されなかった部分は元の逐次構造のま
ま実行形式に変換され、実行される。そして、この実行
結果に基づいて、超逐次プログラムに対してテスト・デ
バッグする。変換された実行形式のプログラムが正しく
動作しない場合は、変換前の逐次プログラムにおいて導
入した良い非決定性部分は本来、非決定的に動作させる
べき部分ではないとみなして、並行化の解除を行う。 (6) ステップA6:超逐次プログラムにおける良い
非決定性部分の拡大 ステップA5でテスト・デバッグが行われた部分超逐次
プログラムに対して、良い非決定性に関する情報を追加
する。ステップA4〜ステップA6を所定の回数繰り返
し、良い非決定性部分を徐々に拡大していく。
逐次プログラムのデフォルト逐次性を解除する(例え
ば、ソースプログラム自体に逐次情報及び並行情報を直
接埋め込む)。また、この時、部分超逐次プログラムの
うちの良い非決定性に関する情報が導入されなかった部
分について、可能な限り、無害な非決定性部分を抽出
し、その部分を並行化することを試みて、部分超逐次プ
ログラムの並行性を高める。例えば、良い非決定性に関
する情報が導入されなかった部分について各プロセス間
の依存関係を解析し、依存関係がないと解析された部分
に対応するソースプログラムの部分の逐次性を解除す
る。なお、無害な非決定性部分の抽出は、ステップA2
で逐次化する際に解析された並行情報を参照することに
より行われる。
方法及び作成支援装置の詳細について説明する。
逐次グラフを用いることにより、非決定性部分の導入
を、視覚的に行うことができるようにしたことを特徴と
する。超逐次グラフとは、並行構造を有する並行プログ
ラムに対してデフォルト逐次性を導入した超逐次プログ
ラムのプロセス処理順序を表した遷移グラフをいうもの
とする。この超逐次グラフの表示は、逐次化情報に基づ
いて行われる。逐次化情報は、逐次化装置12により並
行プログラムが超逐次プログラムに変換される際に生成
される。
フィールドを有するプロセステーブルと呼ばれるデータ
列群である。図26は、プロセステーブルの構造を示す
図である。
個々のプロセスを識別するための名前を保持する。ポイ
ンタフィールドF2は、当該プロセスから呼び出される
プロセス(以下「被呼出プロセス」という)の名前リス
トを格納する被呼出プロセスリストテーブル(図示しな
い)のポインタを保持する。この被呼出プロセスリスト
テーブルは、別に設けられている。優先順位フィールド
F3は、プロセスの優先順位を保持する。このプロセス
の優先順位は、もとの並行構造を有するプログラムに基
づき、ある処理時点において複数のプロセスが実行可能
な場合に、逐次化装置12によって決定され、その結果
が当該フィールドに記述される。優先順位バッファフィ
ールドF3は、後述するように非決定性導入装置17に
より、その値が変更される。このため、優先順位バッフ
ァフィールドF4は、変更前の優先順位を保持すること
により、変更前の状態に戻すことを可能とする。グルー
プ化情報フィールドF5は、特定のノード群がグループ
化された場合に、各グループ間を識別する情報を保持
し、グループ化されたノード群に対応するプロセス群の
うち、最初に実行されるプロセスの名前が書き込まれ
る。
説明する。
化装置12に読み込まれたとする。逐次化装置12は、
まず並行プログラムの並行構造を解析する。図27に示
す並行プログラムは、概念的には図28のような並行構
造を有するものであると解析される。この解析は、例え
ば、木構造探索アルゴリズム等を用いることにより実現
できる。そして、逐次化装置12はその解析結果をプロ
セステーブルに書込む。具体的には、逐次化装置12
は、図26に示したプロセステーブルの優先順位フィー
ルドF3に優先順位を書込むことによってデフォルト逐
次性を導入し、超逐次プログラムに変換する。すなわ
ち、図28において、プロセスBの処理の後、プロセス
CとプロセスDとのいずれが処理されるかは、その時点
におけるシステム環境等により異なる。このような場合
に、逐次化装置12は、所定の規則(逐次化ルール)に
より優先順位を一意に決定する。なお、所定の規則と
は、例えば、プロセスの読み込み順に従うとする規則や
乱数により決定するという規則等があげられるが、種々
の事情に応じてユーザが設定することができるものとす
る。なお、本実施例における超逐次プログラムは、概念
的には、ソースプログラムとそれをメタレベルで管理す
る逐次化情報とにより構成されることになる。
よりプロセスCの方がプロセスDよりも優先的に処理す
るものと決定されると、プロセステーブルにおけるプロ
セスCの優先順位フィールドF3には「1」が書き込ま
れ、プロセステーブルにおけるプロセスDの優先順位フ
ィールドF3には「2」が書き込まれる。なお、優先順
位を決定する必要がないプロセスについては、優先順位
フィールドF3は「0」のままである。この優先順位の
決定は、階層レベルが等しいプロセス間で行われる。例
えば、図28におけるプロセスC、G、Iとプロセス
D、H、Jとは、同じレベルのプロセスであるが、その
中のプロセスEとプロセスFとは一階層下のレベルであ
るとされる。
ログラムの並行構造を解析して逐次化情報(プロセステ
ーブル)を生成し、これをファイルに記録する。
ログラムの構造を解析した結果作成されたプロセステー
ブルの内容を示す図である。すなわち、図29はプロセ
スAからプロセスKまでに対応する各レコードにおける
各フィールドの内容を示す。より具体的には、プロセス
Aの次に呼び出されるプロセスはプロセスBであり、プ
ロセスAの優先順位は0であることを示す。また、例え
ば、プロセスBでは次に呼び出されるプロセスとしてプ
ロセスC又はプロセスDであることを示しており、プロ
セスCとプロセスDとは本来非決定的であるということ
を意味している。そして、このプロセスCとプロセスD
とは逐次化装置12によりそれぞれ優先順位「1」と
「2」とが割り当てられ、プロセスCがプロセスDより
も優先的に呼び出される(実行される)ことを意味して
いる。
り、良い非決定性部分の指定方法)について説明する。
良い非決定性部分の導入は、図2に示した非決定性導入
装置17を用いたユーザによる対話的操作により行われ
る。すなわち、この非決定性装置17は、出力装置5上
に超逐次グラフを表示し、ユーザは、この超逐次グラフ
に対して入力装置4を用いて、良い非決定性部分の導入
・解除を行う。
ある。図30において、各ノードは各プロセスを表し、
破線矢印で示されたアークはもとの並行プログラムの並
行構造を表している。また、実線矢印は逐次化装置12
によりデフォルト逐次性が導入されることにより決定さ
れたプロセスの逐次構造を表し、その逐次構造に従って
プロセスの実行順序が連番で付されている。つまり、も
との並行プログラムにおいては、プロセスC→G→Iと
プロセスD→E→F→H→Jとは、本来並行処理される
ように記述されていることを表しているが、超逐次プロ
グラムにおいてはプロセスC→G→Iを一連に処理した
後、プロセスD以降を処理することを表している。
装置5により視覚的に把握することができる。更に、ユ
ーザは、並行プログラムが逐次化装置12により逐次化
され、逐次化情報が生成された後は、超逐次グラフを表
示する旨の指示を与えることにより、いつでも出力装置
5により視覚的に把握することができる。本実施例で
は、超逐次グラフの表示は、非決定性導入装置17の超
逐次グラフ表示制御部によって行われる。この超逐次グ
ラフ表示制御部は、ユーザにより超逐次グラフを表示す
る旨の指示を受けると、所定の内蔵プログラムに従って
超逐次グラフの表示を開始する。
を示す機能ブロック図である。 超逐次グラフ表示制御
部は、逐次化情報記憶部31に格納されている逐次化情
報に従って、各プロセスに対応するノードと、ノード間
の呼び出し関係を示す並行構造及び逐次構造に対するア
ークを決定し、これらを画像データ生成部35により出
力装置5上に表示するために必要な画像データに変換す
る。
部31から逐次化情報を読み込み、並行構造解析部33
及び逐次構造解析部34に送出する。
4は、逐次化情報を参照して並行構造を解析する。具体
的には、並行構造解析部33は、ポインタフィールドF
2に指示された被呼出プロセスリストテーブルを参照す
ることにより、名前フィールドF1に記述されたプロセ
スによって呼出され得るプロセス名の間の呼出関係を特
定する。逐次構造解析部34は、これらのフィールドに
加え、更に優先順位フィールドF3に記述された優先順
位を参照して逐次構造を特定する。これら並行構造解析
部33及び逐次構造解析部34による解析結果は、画像
データ生成部35に送出される。画像データ生成部35
は、入力されたこれらの解析結果に基づいて、各プロセ
スに対応するノードを表示するための画像データと、該
プロセス間の呼出関係を接続するための2つのアーク
(つまり、並行構造に対するアーク及び逐次構造に対応
するアーク)を表示するための画像データを生成し、出
力装置5に送出する。出力装置5は、これらの画像デー
タに基づいて遷移グラフ(即ち、超逐次グラフ)を表示
する。
行構造解析部33により解析された並行構造の各ノード
間の接続関係に、従属的に逐次構造解析部34により解
析された逐次構造の各ノード間の接続関係を付加するこ
とにより画像データを生成することが望ましい。換言す
れば、超逐次グラフは、もとの並行プログラムの並行構
造を保持した超逐次グラフであることが望ましい。これ
により、ユーザは、もとの並行プログラムが本来持つ並
行構造を意識しつつ、逐次化された処理の流れ(プロセ
ス)に対して、良い非決定性部分を導入することができ
る。
と、図2の非決定性導入装置17はユーザによる良い非
決定性部分の入力待ちの状態になる。(部分)超逐次プ
ログラムのテスト・デバッグ開始当初は、非決定性部分
が導入されていないので、逐次構造に対するアークは出
力装置5上の全てのノードに対して設けられており、並
行化情報は表示されていない。ここで、並行化情報と
は、良い非決定性部分が導入されたノードに対して与え
られる情報であり、良い非決定性部分が導入されたか否
かにより画面上で視覚的に区別されて(例えば陰影の濃
度、色分け等)表示される。また、この並行化情報は、
階層化された良い非決定性部分についても視覚的に区別
されて表示される。
入力装置4を用いて行われる。具体的な良い非決定性の
導入方法については後述するが、略説すれば、入力装置
4を用いてノード間の逐次構造の接続関係(アーク)を
断ち切ったり、接続したりすることにより行われ、その
結果は、逐次化情報変更部36により逐次化情報記憶部
31の内容が変更される。変更された内容は、再び逐次
化情報読込み部により読み込まれ、出力装置5上に表示
されることになる。
ついて説明する。
説明するための図である。
導入する場合、良い非決定性の導入モードにおいて、該
プロセスに対応する所望のノードを続けて指定すること
により行われる。良い非決定性の導入モードは、例え
ば、指示操作メニュー等により選択され、該モードに移
行する。
化を許容する場合、入力装置4により操作されるカーソ
ルPでノードE、Fを続けて指定する。この指定された
ノードは、指定されていない他のノードと視覚的に区別
できるように、陰影が付される。対象とするノード全て
について指定が完了した場合、ユーザは完了した旨を非
決定性導入装置17に与える。これにより、逐次化情報
変更部36は、逐次化情報記憶部31内のプロセステー
ブルにおける対応するプロセスの優先順位フィールドF
3の現在の値を優先順位バッファフィールドF4に対比
させるとともに、優先順位フィールドF3の値を「0」
に変更する。
の優先順位フィールドF3の値「1」及び「2」がそれ
ぞれ優先順位バッファフィールドF4に対比されるとと
もに、それぞれの優先順位フィールドF3の値は「0」
に変更される。逐次化情報変更部36による逐次化情報
記憶部31の更新後、再度、出力装置5上に超逐次グラ
フが表示される。この時、プロセスEとFとの間の優先
順位はないため、それに対応する逐次構造のアークは表
示されない。つまり、出力装置5上では、プロセスEと
Fとは、並行に動作することが確認される。
定部分が導入された超逐次グラフの一例を示す図であ
る。
されたプログラム(部分超逐次プログラム)は、テスト
実行装置15により実行形式に変換され、テスト実行さ
れる。ユーザは、テスト実行装置15による実行結果に
基づいて、プログラムが正しく動作するか否かを確認す
る。この動作確認は、並行性に基づく全てのパスについ
て実行する必要がある。テスト実行装置15が正しく動
作しなかった場合、良い非決定性部分を導入した部分
は、本来並行化を許容する部分ではないとみなすことが
できるため、ユーザは並行化を解除する指定をする。
において、良い非決定性部分を導入する場合と同様に指
定することにより行われる。これにより、逐次化情報変
更部36は、逐次化情報記憶部31内のプロセステーブ
ルにおける優先順位バッファフィールドF4に格納され
ている値を優先順位フィールドF3に戻す。
際し、階層レベルごとにグループ化することも可能であ
る。例えば、プロセスC、G、Iのグループ(グループ
1という)とプロセスD、H、Jのグループ(グループ
2という)とは同一の階層レベルであるので、これらは
互いに並行動作しうる。従って、個々のプロセスについ
て操作したのでは操作性に欠けるため、これらをグルー
プ化することが有効である。このグループ化は、グルー
プ化モードを選択することにより行われる。具体的に
は、グループ化モードにおいて、対象とするノードを順
次選択し、完了した旨を与えることにより、対象となる
ノードがグループ化されて1つの新たなノードとして表
示される。
超逐次グラフの一例を示す図である。
ドは、グループ化されていない他のノードと視覚的に区
別できるように、例えば、楕円形で表示されている。更
に、グループ2は、更に下位階層(プロセスE及びF)
を持っているため、例えば、影付きで表示される。この
ような超逐次グラフに対し、ユーザは、良い非決定性部
分を指定することができる。なお、このようなグループ
化された超逐次グラフに対して良い非決定性部分を導入
した場合であっても、先頭のプロセス(プロセスC及び
D)の優先順位フィールドF3を変更するだけでよい。
性部分を導入する場合には、上述したように所望のノー
ドを入力装置4により直接指定することにより行われる
が、このような方法ではなく、特定のノード群を囲い込
むことによって、又は指定領域が特定のノード群に掛か
ることによって指定されたとするようにしてもよい。な
お、プロセスが多数ありそれに対応するノードが多数あ
るため、出力装置5上で確認することが困難な場合も想
定できる。このような場合は、グループ化されたノード
群のみを表示することにより対処することができる。
決定されたプロセス間の優先順位を変更することもでき
る。つまり、優先順位変更モードにおいて、所望のノー
ドを指定することにより、対象とされたノード間の優先
順位を変更する。
更モードにおいて、プロセスEとFとの優先順位を変更
するとする。ユーザは、上記のように入力装置4によ
り、ノードE及びFとを指定し、指定完了の旨を非決定
性導入装置17に与える。これにより、逐次化情報変更
部36は、逐次化情報記憶部31内のプロセステーブル
におけるプロセスEの優先順位フィールドF3の値を
「2」、プロセスFの優先順位フィールドF3の値を
「1」と変更する。これにより、出力装置5上には、新
たな超逐次グラフが表示されることとなる。図35は、
この時の超逐次グラフの一例を示す図である。図35に
示すように、優先順位変更後は、逐次構造に対するアー
クが変更されることになる。
ユーザの意図したプロセス間の動作が保証されるため、
良い非決定性部分の導入に有効に役立てることができ
る。すなわち、まず、ユーザは図32の超逐次プログラ
ムについてテスト実行装置15で実行形式に変換し、テ
スト実行を行う。次に、ユーザは、優先順位変更後の図
35の超逐次グラフについて同様にテスト実行を行う。
これにより、両方のテスト実行結果がユーザの意図した
ものであることが確認できれば、プロセスEとプロセス
Fは、どちらを先に実行しても良いとみなせるので、良
い非決定性部分の導入を行うことができる。
定性の導入について説明したが、3プロセス以上の場合
も同様である。
分の導入を説明するための図である。並行構造のプロセ
スB、C、D間において、その全てについて並行化を許
容するようにすることもできるが、図36においては、
プロセスBとCとの間のみ並行化を許容されている場合
を示す。このような良い非決定性部分の導入により、超
逐次グラフは図37のようになる。つまり、図37に示
す超逐次グラフは、プロセスB及びCの両方が実行され
た後に、プロセスDが実行されることを示す。上記のよ
うに本実施例によれば、出力装置5上に表示した超逐次
グラフによって並行化情報及び逐次化情報をユーザに対
して同時に提示するので、ユーザはもとの並行構造を考
慮しつつ、良い非決定性部分の指定をすることができる
ようになる。また、並行プログラム記述レベルにおける
良い非決定性部分の指定・解除ではなく、超逐次グラフ
に対して良い非決定性部分を指定・解除をするので、高
度な並行プログラミング技術を必要とすることなく、容
易に並行プログラムの開発をすることができるようにな
る。
行プログラム生成作成支援装置のブロック図であり、特
に図2におけるHSPファイル記憶部14と非決定性導
入装置17について詳しく示す。
に格納されている第1並行プログラムは、逐次化装置1
2により先の実施例のように逐次化され、得られた超逐
次プログラムはHSPファイル記憶部14内の逐次化プ
ロセスリスト記憶部51に格納される。なお、超逐次プ
ログラムは、図38には図示してないデバッグ装置によ
り、逐次化プロセスリスト記憶部51に格納される時に
は既に逐次化された状態でのバグが取り去られている。
化プロセス)は、フィールドデータ生成部53によりフ
ィールドデータに変換され、フィールドデータ記憶部5
2に保存される。これら逐次化プロセスリスト記憶部5
1とフィールドデータ記憶部52の情報は、中間ファイ
ルたるHSPファイル記憶部14に保存される。フィー
ルドデータ記憶部52からのフィールドデータは、フィ
ールドチューニング部54を介してフィールドエディタ
55での編集に供される。
タ生成部53、フィールドチューニング部54及びフィ
ールドエディタ55で構成される。フィールドエディタ
55で編集が終了したフィールドデータは、並行化装置
18(フィールドデータ変換部)で修正された並行プロ
グラムに変換され、第2CPファイル記憶部19に格納
される。
憶部11に格納されている第1並行プログラムの一例を
示しており、説明の便宜上、意図的にバグを含ませてい
る。ここでは、バグとしてプロセスP4とP5の並行実
行は誤りであり、逆に、プロセスP2とP6は並行実行
が可能であるとし、正しい並行プログラムは後述する図
66であるとする。図40は図39の第1並行プログラ
ムで実行されるプロセスの流れをイメージした図であ
り、プロセスP4とP5、プロセスP7とP8がそれぞ
れ並行に実行される。図41は、図38における逐次化
プロセスリスト記憶部51に格納されている逐次化プロ
セスの一例であり、逐次化装置12において図39の第
1並行プログラムで並行な部分に、ある順番を付けるこ
とで逐次化されている。
スの流れをイメージした図である。この例では偶然、P
4、P5の順で逐次化されているので、この点に関する
バグは取り除かれている。仮に、逐次化がP5、P4の
順で行われていたなら、上記のバグが従来のデバック手
法で検出されるはずであり、逐次化の時点で誤った並行
化(悪い非決定性)を取り除くことができる。
タ生成部53で実行される処理の流れを示すフローチャ
ートである。ここでは、1つのプロセスからもう1つの
プロセスへ処理が進むことをある制約と遷移条件が存在
する範囲(エリア)ととらえて、超逐次プログラム(逐
次化プロセス)をフィールドデータに変換している。図
43に示すように、ステップD1でスタートエリアを生
成し、最後のプロセスが来るまでステップD3〜D9を
繰り返し実行する。そして、最後のプロセスが来たらス
テップE10〜E12の処理を行って終了となる。図4
4は、図43に示した処理によって生成される一般的な
エリアのデータ構造を示す。このエリアの接続で構成さ
れる全体構造としてフィールドが形成される。
述されている。 (1) エリアA(i)にいる限りは、"constraint"に
記述された制約が存在する。(例えば、P( x1) はP
( x2) より先に実行される) (2) エリアA(i)から他のエリアへ移るための遷
移条件は、"transition"に記述されている。(例えば、
P(z1)が終了してA(j)へ遷移できる) (3) エリアA(i)から移ることのできるエリア
は、A(j) である。 (4) エリアA(i)へ移る以前の状態は、エリアA
(k)である。
1に記述されたプログラムをエリアの集合で構成された
フィールドに変換した様子を示す。
最も強い。非決定性の導入は、この制約を変更したり、
なくしたりすることで行なうことができる。つまり、フ
ィールドチューニングを行うことで非決定性を導入し、
並行化を図ることができる。なお、一般的には制約によ
るチューニングであるので、ユーザには制約と遷移条件
を表示する。
ーニング部54で実行される処理のフローチャートであ
る。
タは、ステップE2においてそのエリア間の連結情報が
解析されて視覚的にフィールドが生成され、フィールド
エディタ55に表示される。ユーザは、フィールドエデ
ィタ55の画面を見ながらステップE3でコマンドを入
力し、フィールドのチューニングを行うことができる。
き、編集終了ならステップE17を経て終了する。な
お、ステップE14〜E16にて、編集による制約の矛
盾を検出している。
るサブルーチンである。また、ステップE11は制約の
追加処理に関するサブルーチンである。そして、ステッ
プE13は制約の削除処理に関するサブルーチンであ
る。
理を行なうサブルーチンである。
て、ステップE9−2で自明な制約の有無を検査し、も
し自明な制約が存在すれば、制約の書き換えにエラーが
あることをユーザにステップE9−9で伝え、ステップ
E9−10で書き換えを無効にする。もし、自明な制約
が存在しなければ、ステップE9−4のようにフィール
ドを書き換える。そして、ステップE9−5〜E9−8
でフィールドチェックする。
4の制約の変更操作のアルゴリズムによって起こるフィ
ールドの変化を示した図である。これは"before Pi Pj"
を"before Pl Pj"に変更したときの様子を示しており、
図48の(a)から(b)へとフィールドが変化する。
ここでは、A(y)のエリアがエリアA(a)の"next"
に接続され、それに伴って各エリアの属性が変化する。
処理を行なうサブルーチンである。ステップE11−1
で編集された制約に関して、ステップE11−2で自明
な制約の有無を検査し、もし自明な制約が存在すれば、
制約の書き換えにエラーがあることをユーザにステップ
E11−9で伝え、ステップE11−10で追加を無効
にする。もし、自明な制約が存在しなければ、ステップ
E11−4のようにフィールドを書き換える。そして、
ステップE11−5〜E11−8でフィールドチェック
する。
4の制約の追加操作のアルゴリズムによっておこるフィ
ールドの変化を示した図である。ここではエリアA
(y)に"before Pj Pk"を追加したときの様子を示した
もので、図50(a)から(b)へとフィールドが変化
する。ここでは、A(y)のエリアが新たにエリアA
(x2)のnextに追加され、それに伴って各エリアの属
性が変化する。
処理を行なうサブルーチンである。
あるので、ステップE13−1で指定したエリアA
(y)の制約の個数を調べ、もし1つならステップE1
3−8でエラーメッセージを表示して終了する。もし、
複数の制約があれば、ユーザの指定した制約を削除し、
ステップE13−3のようにフィールドを書き換える。
そして、ステップE13−4〜E11−7でフィールド
チェックし、自明な制約の発生を防ぐ。
の制約の削除操作のアルゴリズムによって起こるフィー
ルドの変化を示した図である。
子を示しており、図52(a)から(b)へとフィール
ドが変化する。ここでは、A(x2)のエリアがエリア
A(z)の"pre" に接続され、それに伴って各エリアの
属性が変化する。
明な制約を検出する処理であり、図47のE9−2、E
9−5、図49のE11−2、E12−5、図51のE
13−4で共通に実行されるサブルーチンである。ここ
では、例えば"before A B"、"before B C"が存在するに
も関わらず、"before A C"のような自明な制約を検出す
る。
繰り返しにより、自明制約が生成され、E9−2−7で
制約集合との間のに共通要素を探すことにより実現され
る。例えば、図54のような自明制約"before A D"を含
んだフィールドを仮定した場合、この処理によって図5
5のテンポラリ集合(a)、テンポラリ集合(b)、テ
ンポラリ集合(c)の順番で処理が実行され、共通要
素"before A D"を検出することができる。
画面を示す。フィールドエディタ55では、フィールド
の読み込み、保存、制約編集、表示モードの変更等をメ
ニュー71を指定して行うことができ、四角で表現され
たエリア72を選択すると、編集画面73が現れる。図
57は、表示モードとして「2D表示モード」を選択し
た場合のフィールドの表示例を示す。このモードでは、
平面的にフィールドが表示される。図58は、表示モー
ドとして「3D表示モード」を選択した場合のフィール
ドの表示例を示す。このモードでは、立体的にフィール
ドが表示され、全体が大きくなったり、多くの並行処理
部分がある場合にも、全体を見渡しやすくすることがで
きる。
ルドデータが図46のアルゴリズムでチューニングされ
ていく様子を示す。
因果関係がなく、P6はP2の後であれはバグとなる悪
い非決定的な動きはしない判断したとする。この場合、
図59中に示されるように制約の書き換えるという編集
を行うと、表示は図60のようになる。図60では、例
えばP6とP4に因果関係はなく、P4はP3とのみ正
しい順序が存在すると判断したとする。この場合、図6
0中に示されるようにある制約("before P6 P4")を削
除する編集を行うと、表示は図61のようになる。以下
同様に、ユーザがエリア内の制約を吟味し、徐々に編集
を加えていくと、フィールドデータは図62→図63→
…→図66のように変化する。
ィールドデータ変換部)18で実行される処理を示すフ
ローチャートである。図67に示されるように、並行化
装置18ではフィールドデータ記憶部52からフィール
ドデータを読み込み(ステップF1)、エリア間のグラ
フ構造を解析してプロセスフローを生成し(ステップF
2)、更にそのプロセスフローを解析して非決定性のみ
導入された形で並行プログラムのソースを生成し(Sス
テップF3)、第2CPファイル記憶部19に保存する
(ステップF4)。
ドを並行化装置18で解析して変換して得られた並行プ
ログラムである。図68に示されるように、図39の第
1並行プログラムで仮定したバグであるP4とP5の並
行実行が直され、逆に、良い非決定性であるP3とP6
の並行化が行われている。
実行されるプロセスの流れをイメージした図である。
グラムのプロセスの流れを制約と遷移条件からなるフィ
ールド(場)という概念として捉え、このフィールドを
チューニングすることで良い非決定性を導入し、バグの
ない高品質な並行プログラムを効率的に生成することが
できる。また、本実施例では逐次化されたプログラムが
制約を外すことによって並行化が進んでいくと、図形的
に細長いフィールドだったものが縦方向に伸びていくの
で、直観的に理解しやすく、操作が容易となるという利
点がある。
ム作成方法及び作成支援装置では、テスト・デバッグ
は、超逐次プログラムに対して行う。また、良い非決定
性に関する情報の導入も、超逐次プログラムに対して行
う。
作成支援装置の概略構成を示す図である。図70におい
て、CPファイル記憶部11に格納された第1並行プロ
グラムは、ユーザによる入力装置4からの指示により引
き出され、逐次化装置12に入力される。逐次化装置1
2に入力された第1並行プログラムは、逐次化ルール記
憶部13に格納された逐次化ルールに従って完全超逐次
プログラムHSPに変換され、複数の完全超逐次プログ
ラムを格納可能なHSPファイル記憶部14に記録され
る。
て、テスト実行装置15でテストが行われる。ここで、
バグがあればデバッグ装置16を用いて、HSPファイ
ル記憶部14に格納されている完全超逐次プログラムH
SPを修正する。テスト・デバッグが完了したならば、
完全超逐次プログラムHSPをHSPファイル記憶部1
4に保存する。
5を介して完全超逐次プログラムHSPの実行順序を変
更し、別の完全超逐次プログラムHSPを生成する。こ
の完全超逐次プログラムHSPに対して、同様のテスト
・デバッグを繰り返しながら、完全超逐次プログラムH
SPをHSPファイル記憶部14に蓄積していく。すな
わち、良い非決定性を1つの部分超逐次プログラムとし
て表現する替わりに、複数の完全超逐次プログラムとし
て表現したものである。非決定性導入装置17による良
い非決定性導入が完了したならば、最終的にHSPファ
イル記憶部14に蓄積された完全超逐次プログラムHS
Pの集合から、並行化装置18で並行プログラムが生成
され、第2CPファイル記憶部19に格納される。
ラム作成支援装置の構成は、実施例6と同様であり(図
70)、その並行プログラム作成手順が異なっているの
で、図示は省略する。図71は、本実施例における並行
プログラム作成方法の概略手順を説明するためのフロー
チャートである。
ル化を行う。また、各プロセス構造を決定する。更に、
該プロセス内を並行プログラム等を用いたプログラミン
グにより、並行構造を有する並行プログラムをソースプ
ログラムとして記述する。このソースプログラムには、
バグが潜在的に存在する可能性がある。 (2) ステップA2:逐次化 デフォルト逐次性を導入することによって、並行プログ
ラムを逐次構造の超逐次プログラムに変換する。本実施
例では、メタレベルにおいてデフォルト逐次性を導入す
る。ここで、メタレベルとはソースプログラムそのもの
のレベルについていうのではなく、ソースプログラムの
実行を管理するレベルをいう。例えば、並行プログラム
で記述されたソースプログラムを、それとは別に管理さ
れるスケジューラによって逐次的に実行することを保障
したプログラムのソースプログラムに変換する。
のテスト・デバッグ ステップA2で変換された超逐次プログラムに対して、
テスト・デバッグを行う。すなわち、テスト実行装置に
より逐次プログラムをテスト実行した結果に基づいて、
デバッグ装置により超逐次プログラムからバグを除去す
る。ここでのテスト・デバッグは、逐次プログラムにお
ける通常のテスト・デバッグ方法と同様に行うことがで
きる。超逐次プログラムが正常に動作することが保障さ
れるまで、このテスト・デバッグを行う。
ム化 ステップA3でテスト・デバッグが行われた超逐次プロ
グラムに対し、並行化の候補となるプロセス群を導入
し、変更装置20によって複数の並行模擬動作系列を生
成する。本実施例では、メタレベルにおいて並行模擬動
作系列を導入する。
の実行・確認 ステップG1で得られた並行模擬動作系列をステップA
3でテスト・デバッグが行われた超逐次プログラムを用
いて実行し、実行結果の確認を行う。この実行は、プロ
グラムが並行に動作する状況を超逐次プログラム上で模
擬的に再現している。ユーザは、各動作結果が正しいか
否かを並行模擬実行装置に記録する。
択による部分逐次化 ステップG2の実行結果から、正しく実行された並行模
擬動作系列を許容し、かつ実行の正しくない並行模擬動
作系列を排除する非決定性を導入して、良い非決定性と
して登録する。ステップG1〜ステップG3の処理を所
定の回数繰り返し、良い非決定性の範囲を徐々に拡大し
ていく。
ち、無害な非決定性部分を抽出し、その部分を並行化す
ることで、部分超逐次プログラム全体を並行プログラム
に変換する。すなわち、並行化に関する情報が導入され
なかった部分に関しては、デフォルト逐次性を並行プロ
グラムに反映させて(例えば、ソースプログラム自体に
埋め込む)、メタレベルのデフォルト逐次性を解除す
る。
グラムモデルの例である。ここで、P1、P2、P3等
はプログラムが実行される単位を表しており、これらを
プロセスと呼ぶ。同図の例は、ユーザの意図においてプ
ロセスP3、P4、P5は並行実行され、プロセスP
7、P8、P9は逐次実行されることを表している。更
に、プロセスP2、P3、P4、P5、P6からなるプ
ロセス群と、プロセスP7、P8、P9からなるプロセ
ス群も並行実行可能である。
2により並行モデルにおけるプロセスの前後関係を壊さ
ない範囲で、全てのプロセスを一列に並べて得られる。
られる超逐次プログラムHSPの実行系列をモデル化し
た例である。このように逐次化モデルでは、並行に実行
されるプロセスP3、P4、P5等は任意の順で、場合
によっては離れた位置に置かれるが、これらより先に実
行されるべきプロセスP1、P2は、プロセスP3、P
4、P5のいずれよりも前に置かれ、またこれらより後
に実行されるべきプロセスP6、P10は、プロセスP
3、P4、P5のいずれよりも後に置かれる。同様に、
プロセスP2、P3、P4、P5、P6からなるプログ
ラム群と、プロセスP7、P8、P9からなるプログラ
ム群を逐次化した際の群の間の前後関係は任意で、場合
によっては両方の群のプロセスが逐次モデル上に交互に
表れることもある。
入力装置4からの指示により、テスト実行装置15に入
力され、テスト実行が行われる。テスト実行装置15
は、テスト実行の結果を出力装置に提示する。ユーザ
は、このテスト実行の結果に基づいて超逐次プログラム
HSPに対し、入力装置4を用いて所定のテスト・デバ
ッグを行うことができる。また、ユーザは超逐次プログ
ラムHSPに対して所定のテスト・デバッグを行った
後、再度入力装置4からテスト実行の指示を与える。こ
れにより、テスト・デバッグの行われた超逐次プログラ
ムHSPは、テスト実行装置15に入力され、再度テス
ト実行が行われる。このテスト・デバッグは、プログラ
ムHSPが正常に動作することを確認するまで繰り返し
行われる。
とを確認した時点で、非決定性入力装置17により超逐
次プログラムを部分逐次プログラムへ変換する。まず、
超逐次プログラムを複数の並行模擬プログラムへ変換
し、並行模擬プログラムの実行結果より、良い非決定性
に関する情報を蓄積する。この手順を図74に示す。こ
の図74に示す手順に従い、図73の逐次モデルを並行
模擬モデルへ変換し、部分逐次モデルを得るまでの過程
の具体例を図75〜図78に示す。
等によって、並行模擬範囲としてP3、P4、P5が選
ばれる(ステップH1)。更に、各々のプロセスが単独
で並行化の単位に指定される(ステップH2)。図75
では、並行化単位が色の違いによって区別される。超逐
次プログラムでは、この並行模擬範囲の内部でプロセス
はP3、P4、P5の順番で実行される。
としてP4、P5が置き換えられ(ステップH3)、一
つの並行模擬動作系列が獲得される。この並行模擬動作
系列では、並行模擬範囲の内部でプロセスはP3、P
5、P4の順番で実行される。このプログラムを実行し
て実行結果が保証されると(ステップH4)、図75
(c)のようなプログラムが獲得される(ステップH
5)。この部分逐次プログラムでは、並行模擬範囲の内
部でプロセスP3を実行した後にP4とP5が並行に実
行される。
ーザによって指示されると(ステップH6)、図76
(a)では単独のプロセスP3と2つのプロセスの組P
4&P5が置き換えられ(ステップH3)、もう一つの
並行模擬動作系列が獲得される。この並行模擬動作系列
では、並行模擬範囲の内部でプロセスはP4とP5が並
行に実行された後にP3が実行される。このプログラム
を実行して正しさが確認されると(ステップH4)、図
76(b)のような非決定性を持つプログラムが獲得さ
れる(ステップH5)。この部分逐次プログラムでは、
並行模擬範囲の内部でプロセスP3、P4、P5が並行
に実行される。これによって、この並行模擬範囲内での
非決定性は十分となるので、ステップH6からステップ
H7に進み、並行範囲の拡大がユーザによって指示され
ると(ステップH7)、図77〜図78に示すように、
ステップH1に戻って同様の処理を繰り返す。
タルに導入され得られた部分逐次プログラムPHSP
は、ユーザからの指示により、並行化装置18に入力さ
れる。この並行化装置18では、良い非決定性のみを持
つ部分逐次プログラムPHSPを並行プログラムCPと
して第2CPファイル記憶部19に記録する。ユーザ
は、このプログラムCPを出力装置5によって見ること
ができるとともに、最終的なテスト・デバッグを行うこ
とができる。
並行プログラムの動作を十分に確認することができる。
また、超逐次プログラムに対して並行化の候補となる範
囲を指定することで、超逐次プログラムを段階的に並行
プログラムへ変換することができる。更に、並行模擬動
作系列に基づく逐次実行で正しく動作することが確認さ
れた非決定性のみを許容する並行性を導入することで、
正しく動作する並行プログラムを得ることができる。こ
れによって、並行プログラムのテスト・デバッグが更に
容易となるという利点がある。
成されたコンピュータシステムにおいて、図79に示す
ように各プロセッサ1−1〜1−Nに少なくとも1個以
上のプロセスA〜Dが登録され、それぞれのプロセスは
並行/並列に動作しており、互いにメッセージを交換し
ながら情報交換して処理を行うというプロセス実行環境
において、並行プログラムの作成を行う例である。
超逐次プログラムに対して行うが、バグのあった場合は
ソースコードたる並行プログラムを修正せずに、逐次化
ルールを修正することでテスト・デバッグを行う。
作成支援装置の概略構成を示す図である。
に格納されている第1並行プログラムは、逐次化装置1
2において逐次化ルール記憶部13に格納された逐次化
ルールに従って、メタレベルにおいてデフォルト逐次性
が導入されることにより、超逐次プログラム(HSP)
に変換され、HSPファイル記憶部14に記録される。
ここで、逐次化ルールはソースプログラム(CPファイ
ル)を実行装置22で実行させた際に得られる実行ログ
情報となり、HSPファイル記憶部14はCPファイル
と逐次化ルールである実行ログ情報の対からなる。ユー
ザは、この超逐次プログラムHSPを出力装置5によっ
て見ることができる。この超逐次プログラムHSPは、
ユーザによる入力装置4からの指示によってテスト実行
装置15に入力され、テスト実行が行われる。
(実行ログ)を出力装置5に提示する。ユーザは、この
テスト実行の結果に基づいて、逐次化ルール修正装置2
6を用いて逐次化ルール記憶部13に格納されている逐
次化ルールを修正し、超逐次プログラムHSPに対し所
定のテスト・デバッグを行うことができる。
により超逐次プログラムHSPに対して所定のテスト・
デバッグを行った後、入力装置4から再度テスト実行の
指示を与える。これにより、テスト・デバッグの行われ
た超逐次プログラムHSPは、テスト実行装置15に入
力され、再度テスト実行が行われる。このテスト・デバ
ッグは、超逐次プログラムHSPが正常に動作すること
を確認するまで繰り返し行われる。
より正常に動作することを確認した時点で、逐次化ルー
ル修正装置26により逐次化ルール記憶部13に格納さ
れている逐次化ルールが修正され、この修正の後の逐次
化ルールが逐次化ルール記憶部13に新たに記録され
る。この逐次化ルールの修正によって、超逐次プログラ
ムに対して良い非決定性に関する情報が部分的に導入さ
れる。超逐次プログラムHSPは部分超逐次プログラム
PHSPに変換される。
潜在的に存在する無害な並行性を顕在化させるために、
並行化装置18にて部分超逐次プログラムPHSPにお
ける逐次化ルールを分割基準指定装置23からの指示に
基づいて各プロセス毎に分割し、各プロセス毎の起動順
序制御を可能とする第2並行プログラム19に変換す
る。
作成方法の概略手順を説明するための図である。
ル化を行う。また、各プロセス構造を決定する。更に、
該プロセス内を並行プログラム等を用いたプログラミン
グにより、並行構造を有する第1並行プログラムをソー
スプログラムとして記述する。このソースプログラムに
は、バグが潜在的に存在する可能性がある。
ログラムを逐次構造の超逐次プログラムに変換する。本
実施例では、メタレベルにおいてデフォルト逐次性を導
入する。ここで、メタレベルとはソースプログラムその
もののレベルについていうのではなく、ソースプログラ
ムの実行を管理するレベルをいう。例えば、並行プログ
ラムで記述された第1並行プログラムを、それとは別に
管理されるスケジューラによって逐次的に実行すること
をいう。すなわち、ここでいう逐次化とは、CPファイ
ル記憶部11と逐次化ルール記憶部13を対応付けるこ
とである。よって、得られる超逐次プログラムは、第1
並行プログラムと逐次化ルールの対からなるとする。
のテスト・デバッグ ステップA2で逐次化された超逐次プログラムを実行
し、テストを行う。この際のテスト実行は、第1並行プ
ログラムを逐次化ルールに基づいて動作させることをい
う。機能面のバグがある場合は、第1並行プログラムを
修正し、ステップA2へ戻る。タイミング面のバグがあ
る場合は、ステップJ1に移行する。タイミング面のバ
グがない場合は、その逐次化ルールを保存してステップ
A4に移行する。
正 ステップA3でタイミング面のバグがある場合は、逐次
化ルールを修正した後、ステップA2に戻る。
入 良い非決定性の追加が必要な場合は、逐次化ルールを修
正した後、ステップA2に戻る。良い非決定性の追加が
必要ない場合は、ステップA7に移行する。
定性部分を抽出し、その部分を並行化することで、部分
超逐次プログラム全体を第2並行プログラムに変換す
る。
間通信のある並行プログラムをメタレベルにおいてデフ
ォルト逐次性を導入して実行した結果の実行履歴である
ログ情報の一例を示す図である。
って見ることができる。図82において、縦のスクロー
ルバーは任意の時刻のログ情報を見るために表示情報を
スクロールするために用い、横のスクロールバーは良い
非決定性を導入し複数の実行可能な候補がある時に、そ
れら情報を見るために用いる。このように縦と横のスク
ロールバーを用いることにより、全ログ情報中の任意の
場所を見ることができる。更に、画面上部に示された
「順序修正」と「非決定性導入」は、後述するそれぞれ
の操作を要求する時に、選択して処理を指示するために
用いる。
行うことによって、HSPファイル記憶部14に保存さ
れている第1並行プログラムと実行ログ情報ファイルを
テスト実行装置15に入力し、超逐次プログラムHSP
としてテスト実行を行うことができる。
を出力装置5に提示する。ユーザは、このテスト実行の
結果に基づいて、超逐次プログラムHSPに対し入力装
置4を用いて所定のテスト・デバッグを行うことができ
る。テスト・デバッグは、機能面の不具合についてはC
Pファイル記憶部11内の第1並行プログラムを修正
し、タイミング面の不具合については逐次化ルール記憶
部13内の実行ログ情報ファイルを修正し、再度、修正
された第1並行プログラムと実行ログ情報を対応付けし
直し、超逐次プログラムを再作成する。
て前記テスト・デバッグを行った後、再度入力装置4か
らテスト実行の指示を与える。これにより、テスト・デ
バッグの行われた超逐次プログラムHSPは、テスト実
行装置15に入力され、再度テスト実行が行われる。こ
のテスト・デバッグは、超逐次プログラムHSPが正常
に動作することを確認するまで繰り返し行われる。
とを確認した時点で、逐次化ルール修正装置26により
超逐次プログラムに対して良い非決定性に関する情報を
部分的に導入していく。逐次化ルール修正装置26より
導入された良い非決定性に関する情報は、ログ情報に反
映され、HSPファイル記憶部14に記録される。
い非決定性に関する情報が導入された超逐次プログラム
(部分超逐次プログラムPHSP)について、ユーザか
らの指示に従ってテスト実行装置15によりテスト実行
を行い、テスト・デバッグを行う。この場合、部分超逐
次プログラムPHSPの振る舞いは、良い非決定性に関
する情報の導入された部分については、非決定的な振る
舞いをするので、その振る舞い全てについてテスト・デ
バッグを行うことが好ましい。このようにして、テスト
・デバッグ及び良い非決定性に関する情報の導入を繰り
返し、良い非決定性に関する情報を徐々に付加してい
く。
タルに導入され得られた部分超逐次プログラムPHSP
は、ユーザからの指示により並行化装置18に入力され
る。この並行化装置18では、部分超逐次プログラムP
HSPのうち、無害な非決定性部分を抽出し、部分超逐
次プログラムPHSP全体を並行化する。即ち、集中ロ
グ情報を各プロセス毎にその起動順序を規定するように
分割し、各プロセス毎に起動制御を行うようにすること
で、デフォルト逐次性を解除し、部分超逐次プログラム
を並行プログラムに変換して第2CPファイル記憶部1
9に記録する。ユーザは、この並行プログラムを出力装
置によって見ることができるとともに、最終的なテスト
・デバッグを行うことができる。
A4の処理に関する部分超逐次プログラムを構成するま
での部分の構成例を示す。以下に、それぞれの構成部分
の機能実現法について説明する。
ージのフォーマットを示す。「宛先情報」には宛先プロ
セス名等の情報伝達先を指定する情報がセットされ、
「送信元情報」には送信元プロセス名等の送信元を規定
する情報がセットされる。「メッセージ本体」には、プ
ロセス間で交換するデータがセットされる。
のメッセージフォーマット中の宛先情報と送信元情報を
用いて生成される。以下の説明においては、ログ情報と
して宛先情報として宛先プロセス名を、送信元情報とし
て送信元プロセス名だけを用いるが、同一プロセスが複
数回利用される場合は、何回目の使用かの判別がつかな
くなるので、送信元情報を{プロセス名とプロセス起動
回数}からなるように拡張することができる。更に、あ
るプロセスの1回の起動中に複数回のメッセージ送信が
ある場合は、今回の起動後の何回目の送信かを特定する
ため、送信元情報を{プロセス名、プロセス起動回数、
メッセージ送信回数}からなるように拡張することがで
きる。更に、各プロセスが複数の処理の単位(メソッド
と以降呼ぶ)を持つ場合には、その情報も付加して送信
元情報は{プロセス名、メソッド名、メソッド起動回
数、メッセージ送信回数}とする事もできる。
く、宛先メソッド名を付加して{宛先プロセス名とメソ
ッド名}とすることもできる。もちろん、実行形態に応
じて宛先情報と送信元情報を組み合わせることができる
ため、計8通りの組み合わせが存在する。
述したように、第1並行プログラムをランダムに実行す
る。その際の実行ログを逐次化ルールとするため、本実
施例では、逐次化ルールとしてプロセス間の全ての通信
を一旦プロセス群制御部203に送り、処理待ちメッセ
ージ保存部204に蓄える。プロセス群制御部203
は、処理待ちメッセージ保存部204から順次メッセー
ジを取り出し、本来の宛先に対して再度送る。よってプ
ロセス群制御部203によって全プロセスの起動が逐次
的に制御されるため、第1並行プログラムは逐次的に処
理されるようになる。
逐次的に処理されたメッセージは、ログ情報取得部20
2によって時系列にログ情報としてログ情報記憶部20
1に保存される。このログ情報が逐次化ルール記憶部1
3となり、以降の逐次実行時の実行制約条件となる。
制御部203を経由して行う様子を示す。この例では、
プロセスAとBがプロセスCにメッセージを送信する
時、プロセスAとBのどちらのメッセージが先にプロセ
スCに届いても良いとする良い非決定性が存在する場合
であるが、実行時にたまたまプロセスAがプロセスBよ
り先にメッセージを送信したとすると、プロセス群制御
部203において{プロセスA→プロセスC}が先にロ
グ情報に記憶され、続いて{プロセスB→プロセスC}
が記憶される。図86に、その場合の逐次化ルールであ
るログ情報の一例を示す。
イル記憶部11に記憶されている第1並行プログラムと
上記のようにして得られた逐次化ルールであるログ情報
を対応付ける。これにより、並行性を持った第1並行プ
ログラムは、逐次化情報が付加された超逐次プログラム
に変換される。
・デバッグの段階では、プロセス間で交換されるメッセ
ージをプロセス群制御部203において一旦受信し、ロ
グ情報記憶部201に記憶されたログ情報の順序に従っ
て本来の宛先に対して送信するようにする。このためプ
ロセス群制御部203は、処理待ちメッセージ保存部2
04に保存されたメッセージ中から、ログ情報に従った
順序でメッセージを取り出して送信する機構を有してい
る。
メッセージ送信順序をログ情報に指定された順序で送信
するようにすることにより、並行プログラムの難しさの
一つである処理順序の非決定性を解決することができ、
処理の再現性が実現される。つまり、図85の例におい
て、あるテスト実行時にはプロセスBの方がプロセスA
より先にメッセージをプロセスCに送ったとしても、プ
ロセス群制御部203でログ情報に図86に示すように
プロセスAからのメッセージを先にプロセスCに送る旨
が記載されている場合は、プロセスBからのメッセージ
を処理待ちメッセージ保存部204に保存しておき、プ
ロセスAからのメッセージを受信しプロセスCに対して
送信した後、処理待ちメッセージ保存部204に保存し
ておいたプロセスBからのメッセージをプロセスCに送
る。
の流れを示す。
報に従って実行順番が一意に規定された超逐次プログラ
ムにおけるテスト・デバッグは、機能面に不具合がある
場合はソースプログラムを修正して上記処理ステップの
ステップA2から再度行う必要があるが、タイミングの
みに不具合がある場合は、容易にテスト・デバッグをす
る事ができる。つまり逐次化ルールであるログ情報を修
正し意図する順番にログ情報を書き換えれば良い。この
書換は、ログ情報修正部205によって行う。逐次化ル
ールであるログ情報の修正は、ユーザからの指示により
逐次化ルール修正装置26内のログ情報修正部205に
おいて行う。ログ情報修正部205は、図82に示すよ
うにその処理した順番(時系列)にログ情報を表示する
ことができる表示部を持つ。そしてタイミングのバグを
修正したいユーザは、ログ情報の順序を入れ換える入替
部を起動し、図88に示すように処理順序を交換したい
メッセージを指定する。図88の例では、2メッセージ
間の順序入れ替えを指示したが、複数メッセージの順序
を入れ換えることも可能である。もちろん1メッセージ
以上のメッセージを1つの集合としてとらえ、集合間で
の交換も可能である。そして、ログ情報修正部205に
は、ログ情報記憶部201のログ情報を入替部によって
指定されたように書き換える書換部があり、図88の例
の場合は図89のように変更される。また入れ替えメッ
セージの指定法としては、ポインティングデバイスを使
って該当メッセージを指定する方法や、画面上の行番号
をキーボードから指定する方法等がある。
並べ替えることによって、テスト実行時にプロセス群制
御部203が受信メッセージを本来の宛先プロセスに送
信する順番を変えることになるため、タイミングの不具
合を容易に修正することができるようになる。
プロセスBからのメッセージをプロセスAからのメッセ
ージより先に処理しなければならない場合に、ログ情報
に図86に示すようにプロセスAからのメッセージを先
に処理するようになっていたならば、上記の手順に従っ
てログ情報を図89に示すように修正すればよい。これ
によって、プロセス群制御部203のメッセージ処理順
番が変更されるため、処理のタイミングの不具合を解決
することができる。
用いることによって、プロセスの処理順序を変更するた
めにソースプログラムを修正することなく、容易にテス
ト・デバッグをすることが可能となり、プログラム開発
の生産性が向上する。
明する。
の非決定性導入部によってログ情報を修正することで行
う。これは、超逐次化されたプログラムにユーザが意図
的に非決定性を導入するものである。例えば図85に示
す処理において、プロセスAとプロセスBのどちらが先
にプロセスCにメッセージを送っても良い場合には、対
象となるログ情報を図90に示すように指定することに
よって行う。これによって、非決定性導入部は、指定さ
れたメッセージの順序制約を解除した形で、例えば図9
1(a)、図91(b)に示すようにログ情報記憶部2
01に記憶されたログ情報を修正する。図91(b)
は、図91(a)を横スクロールバーで右へシフトする
ように指示することによって得られる。この場合は2つ
のメッセージ順序の非決定性を導入した場合であるが、
更に多数のメッセージ順序の非決定性を導入する場合
は、順次右へシフトすることによってその一覧を見るこ
とができる。
からのメッセージであれば、プロセスCにメッセージを
送り、続いて次のタイミングでも、プロセスAないしプ
ロセスBからのメッセージであれば、プロセスCにメッ
セージを送るように解釈する。プロセス群制御部203
が上記のようにログ情報を解釈するようにすることによ
って良い非決定性を扱うことが可能となる。これは、プ
ロセス群制御部203の処理における図87におけるス
テップK3において、メッセージ送信元として一致する
か否かのチェック対象が、一つから複数個に拡張される
ことによって実現できる。
AないしプロセスBから続けて2つのメッセージを受信
した場合でも、それらのメッセージを処理してしまう問
題点があるが、これは、先に受信したメッセージを次の
起動候補から削除することによって容易に防止すること
ができる。削除対象となるメッセージは、本実施例では
説明の容易のために、送信先情報をプロセス名のみで示
したが、図84の送信先情報説明で前述したように唯一
に特定できるので、未処理メッセージの情報を削除する
ことはない。
て、外部からの非決定的な刺激に適切に反応でき、プロ
セスの柔軟性、再利用性、拡張性を実現できる。
メッセージの到着順序に関して示したが、2つ以上の複
数のメッセージの到着順序に良い非決定性を与えること
も可能である。その場合でも、上記処理と同様にプロセ
ス群制御部203の処理における図87のステップK3
においてメッセージ送信元として一致するか否かのチェ
ック対象を、一つから複数個に拡張することによって解
決されるので、正しく動作することは明らかである。
の並行化装置18に関する並行化コンパイルのフェーズ
について詳述する。図92に、ステップA7の処理に関
する部分の構成例を示す。ここで、集中ログ情報記憶部
301はHSPファイル記憶部14内に保存されている
良い非決定性導入後の実行ログ情報を保存している記憶
部である。例えば図79におけるプロセス群が図93に
示すようなメッセージ交換を行った場合、図82で示し
たような超逐次プログラム用の集中ログ情報から、例え
ば図94のように良い非決定性が導入された集中ログ情
報に変換されたものが保存されているとする。
ログ情報を各プロセス毎に分割する手順を図92、図9
4、図95を用いて説明する。集中ログ情報を分割する
基準は、分割基準指定装置23内の分割基準指定部30
3から指定する。この基準としては、例えば宛先プロセ
ス名であったり、宛先計算機番号であったりするが、以
下の説明では、宛先プロセス名を用いる。宛先名にメソ
ッド名も付加する場合には、分割基準として、{宛先プ
ロセス名、メソッド名}を指定して、宛先メソッド毎に
分割して分割ログを作ることも可能である。分割基準指
定部303では、この分割基準を保持している。
割させようとすると、ログ情報分割部302が起動され
る。ログ情報分割部302は、図95に示す手順に従っ
て集中ログ情報を分割基準指定部303によって指定さ
れた基準で分割する。
割基準指定部303より分割基準値を読み込み(ステッ
プL1)、分割基準を把握する。続いて集中ログ情報記
憶部301に保存されているログ情報を1レコード読み
込み(ステップL2)、最終レコードか否かチェックす
る(ステップL3)。この例では、集中ログ情報の1レ
コード目は、図94に示すようにプロセスAからプロセ
スDへのメッセージなので、最終レコードでないと判断
し、分割基準(宛先プロセス名=プロセスD)に従っ
て、該当する分割ログ情報記憶部(ここでは、分割ログ
情報記憶部Dとする)に保存する(ステップL4)。こ
の操作を集中ログ情報記憶部301に記憶されているロ
グ情報が終了するまで繰り返す。この結果、図96に示
すようにあて先プロセス毎に分割されたログ情報が分割
ログ情報記憶部A、B、C、Dのそれぞれに保存され
る。
ロセスCからのメッセージを処理した後に、プロセスD
からのメッセージを処理することを規定している。ま
た、図96(c)のプロセスCは、いわゆる良い非決定
性を導入した処理であり、プロセスAないしプロセスB
からのメッセージを最初に処理し、次もプロセスAない
しプロセスBからのメッセージを処理することを規定し
ている。これは言い替えると、プロセスAからのメッセ
ージとプロセスBからのメッセージのどちらが先に来て
も良いという良い非決定性を表現している。ここでは、
2つのメッセージの順序の制約を解除した例を示した
が、より多くのメッセージの順序制約を解除し、良い非
決定性を導入したい場合は、同一行に所望数のメッセー
ジを列挙すれば良い。
割されるため、分割ログ情報中の送信先プロセス名を省
略することもできる。
ログ情報に従って各プロセスが動作する方式の一例を述
べる。各プロセスは、例えば図97に示すようにメッセ
ージを受信し実際のプロセスの処理を開始する前にプロ
セス制御部305を呼出し、図98に示す処理を行う。
このようなプロセス制御部の呼出は、並行化装置18の
一部として第1並行プログラムにおける各プロセスの処
理の先頭に呼出処理を挿入するようにソースプログラム
を書き換えることによって行うことができる。即ち、各
プロセスは図99に示すように、当該プロセス本来の処
理部分に加え、プロセス制御部305、分割ログ情報記
憶部304、処理待ちメッセージ保存部306からな
る。プロセス制御部305は、当該プロセスに内在する
分割ログ情報記憶部304に保存されているログ情報を
参照してメッセージ処理を行い、処理すべきメッセージ
でない場合は、処理待ちメッセージ保存部306に保存
する。
て図96と図98を用いて説明する。
流れの場合、プロセスCとプロセスDのどちらから先に
メッセージをもらうかは決定されておらず、ここに処理
タイミングの非決定性が存在している。しかし、ここで
は超逐次で実行したときの実行ログ(図82相当)よ
り、プロセスCからのメッセージを先に処理し、その後
にプロセスDからのメッセージを処理するように規定さ
れる。よって、無害の非決定性を導入したとしても、こ
のメッセージ処理順序の規定は守られなければならな
い。
セスCからのメッセージを受信して起動された場合を示
す。プロセスAがプロセスCからのメッセージを受信し
て起動されたならば、プロセス制御部が呼び出され、当
該プロセスを起動させたメッセージの送信元情報を得る
(ステップM1)。ここでは、送信元情報Is={プロ
セスC}となる。続いて分割ログ情報記憶部よりまず最
初に来るべきメッセージ情報Ir1を得る(ステップM
2)。ここでは、Ir1={プロセスC}となる。
情報に記憶された順序に一致しているかを調べるため、
IsがIr1に含まれているかどうかを調べる(ステッ
プM3)。この場合は、ともにプロセスCで一致し含ま
れているため、受信メッセージに基づいた処理を即行う
ことが許される。よって次の起動チェックのために分割
ログ情報記憶部から読み出すレコードを1つ進めておく
(ステップM4)。そして、プロセス本体の処理を開始
する前に、処理待ちメッセージ保存部に実行待ちメッセ
ージが存在している場合には、その保存されたメッセー
ジが起動可能となったかどうかを調べる。つまり、分割
ログ情報記憶部に保存されている情報から次に処理すべ
きメッセージ情報Ir2を取り出し(ステップM5)、
それに含まれるメッセージが処理待ちメッセージ保存部
に存在しているか調べる(ステップM6)。この場合
は、Ir2={プロセスD}となるが、処理待ちメッセ
ージ保存部にメッセージが存在しないため処理を終了
し、プロセスCからのメッセージに基づいた本処理を行
う。
メッセージが届いたならば、上記同様に処理を行うと、
Is={プロセスD}、Ir1={プロセスD}とな
り、集合Isは集合Ir1と等しいか又はIr1に含ま
れる。Ir2は存在しないため、処理待ちメッセージ保
存部内のメッセージを調べる必要なく処理を終了し、プ
ロセスDからのメッセージに基づいた処理を行う。
先にメッセージを受信した場合の処理の流れを示す。つ
まりプロセスAが、最初にプロセスDからのメッセージ
を受信して起動されたならば、プロセス制御部が呼び出
され、当該プロセスを起動させたメッセージの送信元情
報を得る(ステップM1)。ここでは、送信元情報Is
={プロセスD}となる。続いて、分割ログ情報記憶部
よりまず最初に来るべきメッセージ情報Ir1を得る
(ステップM2)。ここではIr1={プロセスC}と
なる。
情報に記憶された順序に一致しているかどうかを調べる
ため、IsがIr1に含まれているか調べる(ステップ
M3)。この場合は、含まれないため即プロセスDから
のメッセージを処理してはいけないと判断し、処理待ち
メッセージ保存部306にプロセスDからのメッセージ
を保存し(ステップM8)、プロセスAの処理を強制的
に終了させる(ステップM9)。即ち、プロセスDから
のメッセージに基づいた処理を行うことなくプロセスA
の処理を終了する。
メッセージが届いたならば、上記同様に処理を行うと、
Is={プロセスC}、Ir1={プロセスC}となり
IsはIr1に含まれるため、受信メッセージに基づい
た処理を即行うことが許される。よって次の起動チェッ
クのために分割ログ情報記憶部から読み出すレコードを
1つ進る(ステップM4)。そして、プロセス本体の処
理を開始する前に、処理待ちメッセージ保存部に起動可
能となった実行待ちメッセージが存在しているかどうか
を調べる。つまり、分割ログ情報記憶部に保存されてい
る情報から次に処理すべきメッセージ情報Ir2を取り
出し(ステップM5)、それに含まれるメッセージが処
理待ちメッセージ保存部に存在しているか調べる(ステ
ップM6)。この場合は、Ir2={プロセスD}とな
り、処理待ちメッセージ保存部に先ほど保存しておいた
該当メッセージが存在するため、その実行可能となった
メッセージを次に処理するために、送信先(ここではプ
ロセスA)宛に送信元情報等をそのまま(この例では、
プロセスDのまま)送信する(ステップM7)。そし
て、プロセスAは受信メッセージとしてプロセスCから
送られたメッセージに基づく処理を行うべくプロセス制
御部の処理を終了する。
ジ保存部から取り出し送信したメッセージを受信するの
で、上記同様に処理を行うと、Is={プロセスD}、
Ir1={プロセスD}となりIsはIr1となる。I
r2はもはや存在しないため、処理待ちメッセージ保存
部内のメッセージを調べる必要なく処理を終了し、プロ
セスDからのメッセージに基づいた処理を行う。
序が実行ログに記載された順序と異なっていたとして
も、実行ログに記載された順序に処理され、非決定的な
処理の再現性が保証される。
として、プロセスCの動作を例に示す。プロセスCが最
初にプロセスAからのメッセージを受信して起動された
ならば、プロセス制御部が呼び出され、当該プロセスを
起動させたメッセージの送信元情報を得る(ステップM
1)。ここでは、送信元情報Is={プロセスA}とな
る。続いて分割ログ情報記憶部よりまず最初に来るべき
メッセージ情報Ir1を得る(ステップM2)。ここで
はIr1={プロセスA、プロセスB}となり、プロセ
スAからのメッセージでもプロセスBからのメッセージ
でも、どちらからのメッセージでも良いとしている。
情報に記憶された順序に一致しているかを調べるため、
IsがIr1に含まれているかどうかを調べる(ステッ
プM3)。この場合、集合Isは集合Ir1と等しいか
又はIr1に含まれるため、受信メッセージに基づいた
処理を即行うことが許される。よって、次の起動チェッ
クのために分割ログ情報記憶部から読み出すレコードを
1つ進めておく(ステップM4)。そして、プロセス本
体の処理を開始する前に、処理待ちメッセージ保存部に
実行待ちメッセージが存在している場合には、その保存
されたメッセージが起動可能となったかを調べる。つま
り、分割ログ情報記憶部に保存されている情報から次に
処理すべきメッセージ情報Ir2を取り出し(ステップ
M5)、それに含まれるメッセージが処理待ちメッセー
ジ保存部に存在しているか調べる(ステップM6)。こ
の場合は、Ir2={プロセスA、プロセスB}となる
が、処理待ちメッセージ保存部にメッセージが存在しな
いため、処理を終了し、プロセスAからのメッセージに
基づいた本処理を行う。
メッセージが届いたならば、上記同様に処理を行うと、
Is={プロセスB}、Ir1={プロセスA、プロセ
スB}となり、IsはIr1と等しいか又はIr1に含
まれる。Ir2は存在しないため、処理待ちメッセージ
保存部内のメッセージを調べる必要なく処理を終了し、
プロセスBからのメッセージに基づいた処理を行う。
ージの到着順序が逆の状態、即ちプロセスCに、プロセ
スBからのメッセージが先に到着し、その後にプロセス
Aからのメッセージが到着した場合も同様に処理できる
ことは明かである。
AないしプロセスBから続けて2つのメッセージを受信
した場合でも、それらのメッセージを処理してしまう問
題点があるが、これは、先に受信したメッセージを次の
起動候補から削除することによって容易に防止すること
ができる。削除対象となるメッセージは、本実施例では
説明の容易のために、送信先情報をプロセス名のみで示
したが、図84の送信先情報説明で前述したように唯一
に特定できるので、、未処理メッセージの情報を削除す
ることはない。
情報を分割して動作させることによって、並行プログラ
ムが潜在的に持っている無害な非決定性を実現しなが
ら、超逐次プログラムで抽出した逐次性を維持している
ため、処理の再現性を保持しており、超逐次プログラム
実行時と同一結果を、より高い処理性能で実現すること
が可能となる。
メッセージの到着順序に関して示したが、2つ以上の複
数のメッセージの到着順序に良い非決定性を与えること
も可能である。その場合でも、上記処理はIr1ないし
Ir2が複数の要素を持つことによって解決されるの
で、正しく動作することは明らかである。
ソッドの処理の始めにプロセス制御部を呼び出して実現
する実施例を示したが、各計算機のオペレーティングシ
ステムが、宛先プロセス毎の処理待ちメッセージ保存部
を保持し、メッセージ処理の都度、該当する分割ログ情
報を参照して、該当プロセスを起動すること又は処理待
ちメッセージ保存部に保存することによって実現するこ
とも可能である。
で次の処理対象メッセージを送信することなく、実行待
ち状態から次に起動可能なプロセスとしてスケジューリ
ング対象に変更すれば良い。
正することなく逐次化ルールであるログ情報を書き換え
ることにより、処理タイミングの非決定性に起因する不
具合を容易に解決することができる。このことによっ
て、処理タイミングの非決定性が内在する並行/並列/
分散プログラムの開発を容易にし、生産性を向上させる
ことができる。
い非決定性のみを容易に導入することが可能になるた
め、並行プログラムとしての柔軟性、再利用性、拡張性
を維持することもできる。
た全プロセスの集中ログ情報を各プロセス毎に分割し、
分割されたログ情報に基づいて各プロセスを制御するこ
とによって、無害の非決定性を自然に導入し、集中ログ
情報に基づく超逐次プログラム実行時と同一結果を高い
処理効率で得ることができる。
の構成は、図1において、(a) 共有メモリ3が存在
しない構成の場合、(b) I/Oインタフェース2が
バスで密にプロセッサ1−1〜1−Nが接続している並
列計算機の場合、(c) I/Oインタフェースが通信
路で疎に結合している分散ネットワーク計算機構成の場
合、(d) 単一プロセッサで構成される場合、及びそ
れらの組み合わせの場合、が考えられる。
概念であるセクションについて説明をする。
の入口を1個のみ持ち、出口を複数持つプログラム断片
を言う。ここでスレッドとは、コンピュータ言語の分野
で一般的に用いられる用語であり、プログラムをたどり
ながら実行をする作用体をいう。例えばスレッドが同時
に複数走った場合には、それは並行実行を意味してい
る。
る。 code1 code2 : branch 処理1 処理2 ここで、簡単のためcode1からbranch命令ま
での区間で、区間外への分岐命令又は同期命令はないも
のとする。このプログラム断片をスレッドが処理してい
くとき、code1が実行の開始点、すなわち、cod
e1がスレッドの入口となる。次に、処理が進みbra
nch命令に到達した時、branch命令までの処理
内容に応じて処理1に分岐するか処理2に進むかが決ま
るとすれば、スレッドが処理1に進む場合と処理2に進
む場合の2個の出口があることになる。従って、cod
e1からbranch命令までのプログラム断片はスレ
ッドの出口を2個持つセクションとなる。ところで、も
しcode1からbranchまでの間でこのプログラ
ム断片から外部への分岐命令があった場合は、そこもこ
のセクションの出口の一つとなる。
から1個の出口を選択して出ていく場合を示したが、次
にプログラム断片の内部でスレッドの生成が行なわれる
場合の例を示す。 code1 code2 : fork 処理1 上記の例では、fork命令でスレッドの分裂、すなわ
ちもう一つのスレッドの生成が行なわれる。この時、処
理1は分裂した2本のスレッドによって並行に処理され
るが、これを2個の出口から各々のスレッドが出て行
き、処理1を実行するものとみなすことができる。従っ
て、code1からfork命令の間は、この区間に外
部への分岐命令がなければ、出口を2個持つセクション
となる。このように、プログラム断片の内部でスレッド
の生成が行なわれる場所も一種の分岐とみなされ、複数
の出口をもつセクションとなり得る。
念的に表した図である。図100に示すように、セクシ
ョンは、スレッドの入口101と、セクションの本体部
分102と、スレッドの複数の出口103とからなる。
以後セクションを概念的に図示する時にはこのような表
現を用いる。
図101はセクションの融合を表す概念図である。図1
01は、S11とS12の2個のセクションが融合して
S13という新たなセクションを生成する例を示してい
る。図101中の矢印201はS11の出口の一つであ
り、それをS12の入口に接続することで2個のセクシ
ョンの融合を可能としている。この例では2個のセクシ
ョンの融合を示したが、一般に複数のセクションにおい
て出口と入口を接続することにより、新たなセクション
を生成(融合)することができる。
である。図102は、セクションS21を2個のセクシ
ョンS22とS23に分割する例を示している。ここ
で、以下のプログラム断片の例を考える。 code1 : code2 code3 : code4 ただし、code1〜4には分岐命令を含まないものと
する。これをスレッドが処理する時、code1が入口
でcode4が出口となることから、このプログラム断
片を出口が1個のセクションとみなすことができる。こ
のプログラム断片をセクションS21に対応させる。次
に、例えば、code2とcode3の間で分割して、
code1〜code2をセクションS22、code
3〜code4をセクションS23に対応させれば、セ
クションS21はセクションS22とセクションS23
に分割されたことになる。このように1個のセクション
を複数のセクションに分割することが可能である。
セクションは基本セクションとグループセクションに分
類される。基本セクションは、内部に分岐命令や同期命
令を含まないセクションをいう。基本セクションを分割
した場合には、基本セクションになる。グループセクシ
ョンは基本セクション以外のセクションをいい、グルー
プセクションは複数の基本セクションに分割することが
できる。
を説明する。ここではセクションを構成する個々の命令
の実行時間(又は平均実行時間)がわかっているものと
し、この時間を各命令の予測実行時間と呼ぶことにす
る。
直列に実行されるので、セクションを構成する各々の命
令の予測実行時間を合計することにより、そのセクショ
ンの入口から出口までの予測実行時間が計算される。基
本セクションの場合は、出口が複数あってもセクション
の出口は必ず命令列の最後の分岐命令又は同期命令であ
るため、一般に入口から各出口までの予測実行時間は等
しくなる。
解できるため、グループセクションの入口から各出口ま
でに通過する基本セクションの予測実行時間を加えるこ
とにより、出口までの予測実行時間が計算される。すな
わちグループセクションでは出口によって予測実行時間
は変わってくる。また、グループセクション内部に処理
結果に応じて回数が変わるループや無限ループ、joi
n等の同期命令、入出力命令を含む実行時間の予測は不
可能である。その時は、グループセクションを、上記の
ような実行時間の予測ができないようなループ、同期命
令、入出力命令を内部に含まない複数のセクションに分
割し、分割されたセクションを対象とすれば良い。
の予測実行時間が計算された後に、その中で最大のもの
をセクション自身の予測実行時間とする。
の実行の効率化のためにセクションの融合・分割をする
ときの指針となり、プログラム自身を最適化するときの
指針としても利用できる。
測の容易さのため、fork等のスレッドを生成する命
令とjoin等の同期命令、入出力命令はセクションの
内部には含まれずセクションの終端に位置し、実行時間
の予測不可能なループは内部に持たないものとする。
る。図103は、本発明の実施例9の概略構成を示す図
である。
入力部から入力されたソースプログラムを解析し、基本
セクションへの分割及びセクションの実行順序に関する
ルールの抽出をおこなう。プログラム解析部411で解
析された情報(すなわちセクション情報)はセクション
情報記憶部412に記憶される。
情報記憶部412に記憶されたセクション情報の編集を
行なう。具体的には、セクションの実行順序に関するル
ールの編集やセクションの融合・分割が、自動的に又は
ユーザによって行なわれる。コンパイル部414は各セ
クションをコンパイルしてオブジェクトコードに変換
し、その結果をセクション情報記憶部412に登録す
る。
2に記憶されたセクション情報に基づき、セクションを
単位として逐次又は並行にプログラムを実行していく。
実行方法の逐次と並行の切替えは、逐次実行モードと並
行実行モードの2種類のモード間を切替えることによっ
て行なわれる。逐次実行モードで実行をすれば並行プロ
グラムの再現性の問題を回避することができる。すなわ
ち何度実行しても同じ結果が得られるため、並行プログ
ラムについて有効なテスト・デバッグを行なうことがで
きる。その状態で並行実行モードに切替えて実行すれ
ば、セクション単位の同期をとりながら実行をすること
により、安全な並行実行を行なうことができる。なお、
実行部415がインタプリタ的にのみプログラムを実行
する場合は、コンパイル部414は省略することができ
る。
説明する。
記憶部412について、特にセクションに関する情報が
どのような構造で記憶されるのかを詳細に説明する。セ
クション情報は、セクション自身に関する情報とセクシ
ョンの実行順序に関する情報(ルール)とに2分され
る。まずセクション自身がどのように記憶されているか
を図104を用いて説明する。
ョン2個と出口が2個の基本セクション1個とから構成
される例を示し、全体として出口が6個のグループセク
ションの記憶方法を示している。セクション情報記憶部
412は、図104に示すような、セクションの管理テ
ーブル501、505、506、509を有する。これ
らの管理テーブルには図105に示すように、セクショ
ンのラベルと、セクションがコンパイルされているかを
示すフラグと、コンパイルされているならそのオブジェ
クトを指すポインタと、セクションがプログラムコード
かを示すフラグと、このセクションを構成するセクショ
ンの部品テーブルを指すか又はプログラムコードを指す
ポインタと、各出口を指すポインタとその出口までの予
想実行時間等が記憶される。
104に示すセクションの部品テーブル502、50
3、504を有する。部品テーブルとはグループセクシ
ョンを構成する個々の部品としてのセクションについて
記憶するテーブルである。具体的には、部品テーブル
は、図106に示すように、部品としてのセクションの
管理テーブルを指すポインタと、各出口がどのセクショ
ンに接続されているかを指すポインタ等が記憶される。
図104に示す例では部品テーブル502は他のグルー
プセクションの管理テーブル505を指すポインタと、
3個のうち2個の出口の接続先のセクションの、部品テ
ーブル503、504を指すポインタを記憶している。
ここで、例えば部品テーブルにおける出口508はどの
部品テーブルにも接続されていない。この時、その出口
を指すポインタは、管理テーブル501にセクションの
出口として記憶される。また、管理テーブル506がプ
ログラムコード507を指しているように、管理テーブ
ルはプログラムコードも同様に管理している。
明する。この場合において、スレッド1が以下のプログ
ラム断片を実行するとする。 処理1 join スレッド2 処理2 上記のセクションは、スレッド1が処理1を終了させた
後、スレッド2の終了を待ち、処理2を行なう、という
ことを意味している。図107は上記の例をセクション
の概念図に置き換えて図示したものである。S31は上
記の処理1を構成するセクションのうち最後のセクショ
ンである。S32は上記の処理2を構成するセクション
のうち最初のセクションである。S33はスレッド2が
実行する最後のセクションである。この時、このjoi
n文によって、 セクションS31の実行後、スレッド2におけるセクシ
ョンS33の実行が終了してからセクションS32の実
行が開始される というセクション実行順序のルールが抽出され、セクシ
ョン情報記憶部412に記憶される。このようにセクシ
ョンの実行順序に関するルールは、主に実行時にセクシ
ョン間の同期をとるために利用される。
析部411の詳細な構成を示す。図108において中間
言語変換部901は図示されない入力部から入力された
ソースプログラムを中間言語に変換する。中間言語変換
部901で中間言語に変換するのは、セクションの抽出
がしやすくなることと、各命令の実行時間が予測しやす
くなるという理由による。なお、中間言語変換部901
での変換に当たっては従来のコンパイラの技術がそのま
ま使用できる。セクション情報抽出部902は、中間言
語変換部901によって変換された中間言語から基本セ
クションを切り出し、セクションの実行順序に関するル
ール等を抽出する。
れを図を用いて詳細に説明する。図109はプログラム
解析部411における処理の流れを示した図である。
部901において中間言語に変換される(ステップN
1)。変換された中間言語はセクション情報抽出部90
2に引き渡される。
から基本セクションの切り出しや実行順序のルールを抽
出するために初期化される(ステップN2)。この初期
化は新しいセクションの切り出しのたびに行なわれる。
この例では、基本セクションを切り出しながら同時にそ
のセクションの予測実行時間を計算するため、それに関
する初期化も行う。
返していく。この繰り返しの中で中間言語の読み込みが
すべて終了した時は(ステップN3)、この時点まで読
み込んだ中間言語列を1個の基本セクションとしてセク
ション情報記憶部412に記憶し(ステップN8)、処
理を終了する(ステップN9)。
れば、更に中間言語を1行読込み(ステップN4)、読
み込んだ中間言語が、例えばjoinセクションの実行
順序のルールを決める命令ならば(ステップN5)、そ
れによって決定されるルールをセクション情報記憶部4
12に登録する(ステップN10)。中間言語が分岐又
は同期命令ならば(ステップN6)、その命令は基本セ
クションの切れ目となるので、初期化以降に読み込んだ
プログラム断片を1個の基本セクションとしてセクショ
ン情報記憶部412に記憶し(ステップN11)、次の
セクションの抽出を行うために、ステップN2に戻る。
ステップN4において、読み込んだ中間言語の命令が上
記の条件を満たさなければ、その命令の予測実行時間を
切り出し中のセクションの予測実行時間に加え(ステッ
プN7)、ステップN3に戻る。ここで中間言語の各命
令の予測実行時間は、あらかじめ測定をする等してテー
ブル等に記憶させておけば良い。以上の手続きが終った
時点で、もとのプログラムは、中間言語列として切り出
された基本セクションと、セクション実行順序のルール
とに変換され、セクション情報記憶部412に記憶され
たことになる。
をする。セクション情報編集部413は大きく二つの動
作をする。一つはセクションの融合・分割をする動作で
あり、もう一つの動作は、セクションの実行順序のルー
ルを編集する動作である。
は、セクションの大きさを揃えることによって、実行部
415においてより効率的な実行を行なわせることにあ
る。本実施例では、この動作にセクションの予測実行時
間を利用している。セクション情報編集部413では、
各セクションの予測実行時間がほぼ均一になるようにセ
クションの融合・分割をすれば良く、これは容易に自動
化できる。
ションの実行順序のルールの編集により、実行時におけ
るセクション間の同期や、実行順序等を自由に変更する
ことができ、効果的なテスト・デバッグを可能とする。
13の詳細な構成を説明する。図110においてセクシ
ョン情報変換部1101は、図示されない入力装置によ
り入力されたセクションの融合・分割の指示、セクショ
ンの実行順序のルールの編集要求に従い、セクション情
報記憶部412に記憶されたセクション情報を変更す
る。この動作は主にユーザによってなされるが、セクシ
ョンの融合・分割に関してはセクションの予測実行時間
を利用することにより容易に自動化をすることができ
る。セクション情報表示部1102はセクション情報記
憶部412に記憶されたセクション情報を、セクション
情報変更部1101からの指示に従い表示する。
414の詳細な構成を示す。図111において、セクシ
ョン末端処理部1601は、セクションの末端に次に実
行すべきセクションの登録とセクションの終了のための
コードを書き込む。セクションコンパイル部1602
は、末端処理を受けたセクションをコンパイルしてオブ
ジェクトに変換し、セクション情報記憶部412に登録
する。
説明する。例えば、あるセクションの末端が以下のよう
なコードであったとする。 処理1 branch label 処理2 label: 処理3 上記のコードは、処理1の結果によって、labelに
ジャンプして処理3を実行するか、そのまま処理2を実
行する、ということを表したコードである。ここで、処
理2の先頭に位置するセクションをセクション2、処理
3の先頭に位置するセクションをセクション3、とした
とき、上記コードは以下のように処理される。 処理1 branch label section−end セクション2 label: 図112は図103における実行部415の詳細な構成
図を示す。図112において、実行セクション選択部1
201は、セクション情報及び実行セクション候補記憶
部1203に記憶される情報に基づき、次に実行すべき
セクションを1個又は複数選択する。実行セクション選
択部1201は、図示されない入力部から切替えること
が可能な2つのモード(逐次実行モードと並行実行モー
ド)を有する。逐次実行モードではセクションの選択は
1個である。並行実行モードではセクションの選択は一
般に複数となる。セクション実行部1202は、実行セ
クション選択部1201によって選択されたセクション
を実行する。特に、選択されたセクションが複数の場合
は並行に実行する。実行セクション候補記憶部1203
は、セクション実行部1202で実行した結果から決め
られる次の実行の候補となるセクションを記憶する。
流れを示す図である。プログラムは、セクション情報記
憶部412に記憶されるセクションの情報及び実行順序
のルールに従って、セクション単位に実行される。
1)。この時、実行セクション候補記憶部1203には
最初に実行すべきセクションが記憶される。
入る。このループの最初では、次に実行するセクション
の選択が、モードによって異なる方法で行なわれる(ス
テップP2)。逐次実行モードでは、実行セクション候
補記憶部1203に記憶される次に実行されるセクショ
ンの候補の中から実行順序のルールに従うものを1個選
択する(ステップP3)。一般に候補となるセクション
の中には、ルールに従うものが複数ある。これから1個
を選択する方法としては、例えば記憶された時間が最も
前のものを選択しても良いし、又は、固定された乱数列
に従って選択しても良い。ただし、ここでの選択方法と
しては再現性が保証される方法を用いる必要がある。プ
ログラムの実行のたびに選択される順序が変化しない
(すなわち再現性が保証されている)ことは本発明の重
要な動機の一つだからである。モードが並行実行モード
では、実行候補の中からルールに従うセクションをすべ
て選択する(ステップP4)。選択されたセクションは
一般に複数となる。
選択に失敗した場合は(ステップP5)、プログラムが
終了したか、実行順序を決めるルールの異常により失敗
した場合が考えられる。そこで、候補のリストを確かめ
(ステップP6)、候補が残っていないならば正常終了
(ステップP7)、残っているならば異常終了(ステッ
プP8)とする。異常終了の場合には、例えばデッドロ
ック状態が考えられ、この旨をユーザに提示することに
よりテスト・デバッグの指針とすることができる。ステ
ップP3及びステップP4において、選択に成功した時
は、選択されたセクションの実行をする(ステップP
9)。
れらのセクションは並行に実行される。この後セクショ
ン実行部415は、並行に実行されたセクションすべて
の実行の終了を待ってから、次のステップに進む。
の内部には、無限ループ等の実行時間を予測不可能にす
る因子は含まれていないため、セクションの実行終了を
永久に待ち続けるということはない。
ンが実行セクション候補記憶部1203から消去され、
次に実行結果に応じて次の実行候補となるセクションが
記憶される(ステップP10)。「実行結果に応じて」
ということは例えばセクションの最後がif文のとき
は、計算結果によって次に分岐する分岐先、すなわち次
に実行するべきセクションが変わる、ということを意味
する。また、セクションがend文で終了するときは、
それを実行していたスレッドも終了するので、このスレ
ッドが次に実行すべきセクションは無いことになる。こ
の時は、実行セクション候補記憶部1203には何も記
憶されない。
憶内容の詳細な変化を説明する。図114は、プログラ
ムの一例をセクションの概念図を使って表した図であ
る。1本のスレッドがセクション1を実行し、その中の
fork文により2本のスレッドに分裂し、それぞれの
スレッドがセクション2とセクション4を実行し、jo
in命令により同期をとって1本のスレッドに戻り、最
後にセクション3を実行して終了する例を示す。ここで
join文により同期をとるために、セクション3はセ
クション4の後に実行されるというセクションの実行順
序に関するルールが、事前のプログラム解析により抽出
されているとする。
実行した時の実行セクション候補記憶部1203の変化
を示す図である。
クション1が記憶されている。そこで、まずセクション
1が実行される。セクション1が実行されるとfork
文によりスレッドが2本に分裂することから、次の実行
候補としてセクション2とセクション4の2セクション
が記憶される(状態1402)。ここで並行実行モード
であればセクション2とセクション4が同時に選択され
実行されるが、ここでは逐次実行モードで実行している
ため、どちらか1個が選択されなければならない。そこ
でセクション2を選択し、実行したとする。セクション
2が終了すると、次の候補としてのセクション3が記憶
される(状態1403)。
セクション4のどちらを選択しても良さそうだが、先に
示した実行順序のルール「セクション3はセクション4
の後に実行される」により、セクション4しか選択する
ことができないので、セクション4が実行されることに
なる。セクション4の実行が終了すると、それを実行し
たスレッドが終了するため候補記憶部1203ではセク
ション4に続くセクションが無くなっている(状態14
04)。そして、セクション3を実行し全処理を終了し
たことになる(状態1405)。
て記載したが、それぞれ適宜組み合わせることにより、
より効果的な並行プログラムを作成することが可能にな
る。特に、実施例1〜実施例8において作成された並行
プログラムを実施例9の並行プログラム実行装置で実行
させてその妥当性を検証することも可能であるし、実施
例9において、ソースプログラムである並行プログラム
を並行プログラム実行装置で実行させて、実施例1〜実
施例8に示すように、実行情報(テスト・デバッグ情報
を含む)に基づいて、逐次プログラムを並行化する、或
いは、ソースプログラムをバグのない並行プログラムに
変換しても良い。
ない範囲でユーザに理解し易い形に並べ替え、ユーザに
提示することができる。並べ替えても意味が変わらない
ことが保証されているので、オリジナルの実行ログにバ
グがある場合は、並べ替え後の実行ログにおいてもバグ
が存在する。この性質により、テスト・デバッグの効率
が向上するという効果が得られる。
化装置12の具体的な実現法について述べる。図117
は逐次化装置12の実施例を示すブロック図である。こ
の逐次化装置12は、テスト実行装置121、第1実行
ログファイル記憶部122、解析装置123、先行関係
情報ファイル124、並べ替え装置125及び第2実行
ログファイル記憶部126からなる。
いた場合の並行プログラム作成方法の概略手順を示すフ
ローチャートである。
ル化を行う。また、各プロセス構造を決定する。更に、
該プロセス内を並行プログラム等を用いたプログラミン
グにより、ソースプログラムCPを記述する。このソー
スプログラムには、バグが潜在的に存在する可能性があ
る。図119は、こうして記述されたソースプログラム
CPの具体例であり、2つのプロセスP1とP2をプロ
グラミングしている。
実行し、実行ログを第1実行ログファイル記憶部122
に格納するとともに図2の出力装置5に表示する。この
例の場合、図119のソースプログラムCPに対する可
能な実行ログは数多く存在するが、ここでは、図120
のような実行ログが生成されたとする。しかし、この実
行ログはプロセスP1とプロセスP2が複雑に絡み合っ
ており、実行過程が把握しにくいものとなっている。
バグがあれば、その実行ログ3を保存しステップQ3に
進む。この例の場合、図120の実行ログが示す実行後
のMの値は「M=−1」であり、バグであると判定した
とする(期待した値は「M=0」)。
らのソースプログラムCP及び第1実行ログファイル記
憶部122に格納された実行ログからプロセス間の先行
関係情報を抽出し、先行関係情報ファイル124に格納
する。図121に、図119の実行ログにおける2つの
プロセスP1とP2の各命令の先行関係を示す。
え 第1実行ログファイル記憶部122と先行関係情報ファ
イル124に格納された実行ログ及び先行関係情報か
ら、並べ替え装置125によりユーザが理解しやすい順
序に並べ替えた実行ログを生成し、第2実行ログファイ
ル記憶部126に格納する。この例の場合、図121の
先行関係を満たす範囲で、ユーザが理解しやすい順序に
並べ替えた実行ログを生成する。具体的な並べ替え規則
の一例としては、(a)プロセスに優先順位を導入し、
その優先順位を用いて実行ログを並べ替える、(b)待
ち状態が解除されたプロセスを優先して実行ログを並べ
替える (c)ユーザが指定する、などがある。図122に、プ
ロセスに優先順位を導入して並べ替えた後の実行ログを
示す。
え後の実行ログを逐次プログラムとして出力し、かつ出
力装置5により表示してユーザに提示する。
力装置5で図122に示すように表示される。この実行
ログはプロセスP1とプロセスP2の命令が先行関係を
保つ範囲でまとまっており、ユーザにとって実行過程が
把握し易いものとなっている。
デバッグ/修正 ユーザは出力装置5で表示された実行ログを見て実行過
程を把握又は実行を再現し、バグの原因を発見すればプ
ログラムを修正する。プログラムを修正したらステップ
Q1に戻る。この例の場合、図122の実行ログの表示
から、ユーザは、バグの原因は「P2:read(M、
Y);」と「P1:write(M、XX);」の順序が間違って
いることであると認識し、P2のsend命令の場所を
修正することができる。修正されたプログラムは図12
3のようになる。この修正後のプログラムを実行する
と、実行後のMの値は「M=0」となり、バグが削除で
きたことがわかる。
は部分超逐次プログラムに対して行うが、ソースコード
の修正はオリジナルの並行プログラムに対して行う。ま
た、良い非決定性に関する情報の導入は、逐次化条件に
対して行い、良い非決定性の導入毎にオリジナルの並行
プログラムの逐次化(部分逐次化)を行う。
ム作成支援装置の概略構成を示す図である。同図におい
て、第1CPファイル記憶部11に格納されたソースプ
ログラムCPは、ユーザによる入力装置4からの指示に
より引き出され、逐次化装置12に入力される。逐次化
装置12に入力されたソースプログラムCPは、逐次化
ルール記憶部13に格納された逐次化ルールに従って超
逐次プログラムHSP又は部分超逐次プログラムPHS
Pに変換され、HSP/PHSPファイル記憶部141
に記録される。
て、テスト実行装置15でテストが行われる。ここで、
バグがあればデバッグ装置16を用いて、第1CPファ
イル記憶部11に格納されているソースプログラムCP
を修正する。修正されたソースプログラムCPは再度逐
次化され、超逐次プログラム(HSP)又は部分超逐次
プログラム(PHSP)が生成されてHSP/PHSP
ファイル記憶部141に記録される。
デバッグが完了したならば、非決定性導入装置17で、
逐次化ルール記憶部13に格納されている逐次化ルール
の制約を緩めて、部分超逐次プログラムPHSPを生成
する。そして、この部分超逐次プログラムPHSPに対
して、同様のテスト・デバッグを繰り返しながら、非決
定性導入装置17で、徐々に逐次化ルールの制約を弱め
ていく。このようにして良い非決定性導入が完了したな
らば、最終的に並行化装置18で並行プログラムが生成
され、第2CPファイル記憶部19に格納される。
次プログラムに対して行うが、バグのあった場合はソー
スコードたる並行プログラムを修正せずに、逐次化ルー
ルを修正することでテスト・デバッグを行う。その他の
部分に関しては、基本的にこれまでの実施例と同じであ
る。
は、以下のような手順によって実現される。図125
は、本実施例に係る並行プログラム作成方法の概略手順
を示すフローチャートである。
ル化を行う。また、各プロセス構造を決定する。更に、
該プロセス内を並行プログラム等を用いたプログラミン
グにより、並行構造を有する並行プログラムをソースプ
ログラムとして記述する。このソースプログラムには、
バグが潜在的に存在する可能性がある。 (2) ステップA2:逐次化 ステップA1で得られた並行プログラムを所定の逐次化
ルールに基づいて超逐次プログラムに変換する。
テストを行い、機能面のバグがある場合は、超逐次プロ
グラムを修正してテスト・デバッグを行う。
る場合は、ステップJ1に移行する。いずれのバグもな
い場合は、その超逐次プログラムを保存しステップA4
に移行する。
正 ステップC2でタイミング面のバグがあると判定された
場合は、逐次化ルールを修正し、ステップA2に戻る。
入 良い非決定性の追加が必要な場合は、ステップJ1によ
り逐次化ルールを修正して新たな逐次化ルールを設定
し、ステップA2に戻る。良い非決定性の追加が必要で
ない場合は、ステップA7に移行する。
性部分を抽出し、それを並行プログラムとして生成す
る。
ム作成支援装置の概略構成を示す図である。同図におい
て、第1CPファイル記憶部11に格納されているソー
スプログラムCPは、逐次化装置12において逐次化ル
ール記憶部13に格納された逐次化ルールに従って、メ
タレベルにおいてデフォルト逐次性が導入されることに
より、超逐次プログラム(HSP)に変換され、HSP
ファイル記憶部14に記録される。ユーザは、この超逐
次プログラムHSPを出力装置5によって見ることがで
きる。この超逐次プログラムHSPは、ユーザによる入
力装置4からの指示によってテスト実行装置15に入力
され、テスト実行が行われる。
(実行ログ)を出力装置5に提示する。ユーザは、この
テスト実行の結果に基づいて、逐次化ルール修正装置2
6を用いて逐次化ルール記憶部13に格納されている逐
次化ルールを修正し、超逐次プログラムHSPに対し所
定のテスト・デバッグを行うことができる。
により超逐次プログラムHSPに対して所定のテスト・
デバッグを行った後、入力装置4から再度テスト実行の
指示を与える。これにより、テスト・デバッグの行われ
た超逐次プログラムHSPは、テスト実行装置15に入
力され、再度テスト実行が行われる。このテスト・デバ
ッグは、超逐次プログラムHSPが正常に動作すること
を確認するまで繰り返し行われる。
より正常に動作することを確認した時点で、逐次化ルー
ル修正装置26により逐次化ルール記憶部13に格納さ
れている逐次化ルールが修正され、この修正の後の逐次
化ルールが逐次化ルール記憶部13に新たに記録され
る。この逐次化ルールの修正によって、超逐次プログラ
ムに対して良い非決定性に関する情報が部分的に導入さ
れる。
々変形して実施できるのは勿論である。
る。
し、逐次化したプログラムに対してテスト・デバッグを
行うことにより、従来の並行プログラムのプログラミン
グより遥かに容易な逐次プログラミングと同じレベルの
困難さで並行プログラムのテスト・デバッグが可能とな
る。
化の情報をユーザに対して同時に提示することにより、
ユーザは第1並行プログラムの並行構造を考慮しつつ、
良い非決定性部分の指定をすることができるようにな
る。また、並行プログラム記述レベルにおける良い非決
定性部分の指定・解除ではなく、グラフ情報に対して良
い非決定性部分を指定・解除を行うことでができるた
め、高度な並行プログラミング技術を必要とすることな
く、容易に並行プログラムの開発をすることができるよ
うになる。
換する際、第1並行プログラム及びその実行ログを解析
し、この解析結果に基づいて実行ログを並べ替えるよう
にすれば、並べ替え後の実行ログを表示してユーザに提
示することによって、並行プログラムの実行過程の理解
が容易となり、テスト・デバッグの効率が向上する。逐
次プログラムに並行性に関する情報を導入する際、逐次
プログラムのプロセスの流れを制約と遷移条件からなる
フィールドに変換し、更にそのフィールドデータを表示
することによって、フィールドを対話的・視覚的に編集
することで並行性に関する情報を効果的に導入し、バグ
のない並行プログラムが効率的に作成される。
プログラムに対して並行化の候補となるプロセス群を指
定し、このプロセス群の実行順序を入れ換えて逐次プロ
グラムを複数の並行模擬プログラムに変換した後、これ
ら複数の並行模擬プログラムを部分的に逐次構造を有す
る1つの部分逐次プログラムに変換し、この部分逐次プ
ログラムを並行化して第2並行プログラムに変換するこ
とにより、部分逐次プログラム上で並行プログラムの動
作を十分に確認することができる。また、部分逐次プロ
グラムに対して並行化の候補となるプロセス群を指定す
ることで、逐次構造プログラムを段階的に並行プログラ
ムへ変換することができる。更に、並行模擬動作系列に
基づく逐次実行で正しく動作することが確認された非決
定性のみを許容する並行性に関する情報を導入すること
で、正しく動作する並行プログラムを得ることができ
る。これらによって、並行プログラムのテスト・デバッ
グが容易となる。
ら並行して動作する実行環境に用いられる並行プログラ
ムの作成を支援する並行プログラム作成支援装置におい
て、第1並行プログラムのプロセス群の実行履歴である
ログ情報を逐次化ルールとして取得して記憶し、このロ
グ情報を修正可能とするとともに、記憶されているログ
情報に基づいてこれに基づいてプロセス群を逐次的に起
動制御し、記憶されたログ情報を並行化して第2並行プ
ログラムに変換することにより、ソースプログラムとし
ての並行プログラムを修正することなく、ログ情報の修
正で処理タイミングの非決定性に起因する不具合を解決
できる。これにより、処理タイミングの非決定性が内在
する並行/並列/分散プログラムの開発が容易となる。
また、ユーザの意図する良い非決定性のみを容易に導入
することができるため、並行プログラムとしての柔軟
性、再利用性及び拡張性を維持することもできる。
ら並行して動作できる実行環境でプロセス群が実行順序
規定情報に従って動作するシステムにおいて、実行順序
規定情報を分割し、つまり並行プログラムを逐次化して
得られた全プロセスの集中ログ情報を各プロセス毎に分
割し、この分割された実行順序情報に基づいてプロセス
群を起動制御することにより、無害の非決定性を自然に
導入し、集中ログ情報に基づく逐次プログラムの実行時
と同一結果を高い処理効率で得ることが可能となる。
テスト実行の結果、その1つであるバグのない実行ログ
を蓄積し、この蓄積されたバグのない実行ログのみを並
行化して第2並行プログラムに変換することにより、テ
ストで通過したタイミングだけを許容するようにプログ
ラムが動くようになるため、テストしなかったことで残
存したバグに陥ることを回避でき、信頼性が向上する。
並行プログラムの逐次又は部分並行実行を行なうことが
可能となるので、従来の逐次プログラムと同様に再現性
を保証することができ、効果的かつ安定したテスト・デ
バッグを行なうことができる。また、逐次実行から部分
並行実行に容易に切替えることができるため、逐次化し
てテスト・デバッグをおこなったプログラムを非決定性
に影響されない安全な並行実行を可能とする。他に、セ
クションの実行順序に関するルールを編集して実行時の
セクション間の同期を制御することにより、効果的なテ
スト・デバッグを行なえるとともにプログラムの効率化
の指針とすることもできる。
実現するためのコンピュータシステムの構成図。
の概略構成を示すブロック図。
略手順を示すフローチャート。
の一例と逐次化ルールを示す図。
フォルト逐次性が導入された超逐次プログラムの概念
図。
一例を示す図。
る情報の導入例を示す図。
の概略構成を示すブロック図。
略手順を示すフローチャート。
情報、プログラム構造情報、超逐次化情報を示す図。
ら生成された並行プログラムのソースコードを示す図。
示す図。
の流れを示す図。
置の概略構成を示すブロック図。
概略手順を示すフローチャート。
ラムである並行プログラムの一例を示す図。
示す図。
略手順を示すフローチャート。
図。
ムの一例を示す図。
を示す概念図。
析の結果作成されるプロセステーブルを示す図。
す図。
動作処理を説明するための図。
説明するための図。
次グラフの一例を示す図。
フの一例を示す図。
す図。
説明するための図。
を示す図。
置の概略構成を示すブロック図。
ラムである並行プログラムを示す図。
の流れを示す図。
に格納されている逐次化プロセスの一例を示す図。
の流れを示す図。
で実行される処理の流れを示すフローチャート。
ータ構造を示す図。
で生成されるフィールドデータの一例を示す図。
部で実行される処理の流れを示すフローチャート。
す図。
こるフィールドの変化を示す図。
細に示す図。
こるフィールドの変化を示す図。
を詳細に示す図。
こるフィールドの変化を示す図。
を検出する処理を示す図。
図。
示す図。
例を示す図。
ーニング過程の様子示す図。
ーニング過程の様子示す図。
ーニング過程の様子示す図。
ーニング過程の様子示す図。
ーニング過程の様子示す図。
ーニング過程の様子示す図。
ーニング過程の様子示す図。
ーニング過程の様子示す図。
される処理を示すフローチャート。
の一例を示す図。
セスの流れをイメージした図。
置の概略構成を示す図。
概略手順を示すフローチャート。
した並行プログラムモデルの一例を示す図。
次プログラムの実行系列をモデル化した例を示す図。
分並行プログラムへの変換手順を示すフローチャート。
分並行プログラムへの変換例を示す図。
分並行プログラムへの変換例を示す図。
分並行プログラムへの変換例を示す図。
分並行プログラムへの変換例を示す図。
例を示す図。
置の概略構成を示すブロック図。
概略手順を示すフローチャート。
あるログ情報の一例を示す図。
グラムデバッグ装置の概略構成を示すブロック図。
の一例を示す図。
す図。
図。
手順を示すフローチャート。
に入れ替え対象を指示している一例を示す図。
を示す図。
を導入するためにその対象箇所を指定している一例を示
す図。
グ情報の一例を示す図。
ログラム実行システムの構成を示す図。
図。
場合のログ情報の一例を示す図。
を示すフローチャート。
ための一手段であるプログラム例を示す図。
を示す図。
を示すフローチャート。
図。
を示す図。
図。
るための図。
ート。
図。
ト。
するための図。
図。
すブロック図。
法の概略手順を示すフローチャート。
ログラムである並行プログラムの一例を示す図。
の並行プログラムの実行ログを示す図。
グラムの先行関係を示す図。
グラムの実行ログの並べ替えた後の状態を示す図。
並行プログラムの一例を示す図。
援装置の概略構成を示す図。
法の概略手順を示すフローチャート。
援装置の概略構成を示すブロック図。
ース 3…共有メモリ 4…入力装置 5…出力装置 6…記憶装置 11…第1CPファイル記憶部 12…逐次化装置 13…逐次化ルール記憶部 14…HSPファイル
記憶部 15…テスト実行装置 16…デバッグ装置 17…非決定性導入装置 18…並行化装置 19…第2CPファイル記憶部 20…解析情報記憶部 21…並行化ルール記
憶部 22…実行装置 23…分割基準指定装
置 25…変更装置 26…逐次化ルール修
正装置 31…逐次化情報記憶部 32…逐次化情報読込
部 33…並行構造解析部 34…逐次構造解析部 35…画像データ生成部 51…逐次化プロセスリスト記憶部 52…フィールドデータ記憶部 53…フィールドデー
タ生成部 54…フィールドチューニング部 55…フィールドエディタ 201…ログ情報記憶部 202…ログ情報取得
部 203…プロセス群制御部 204…メッセージ保
存部 205…ログ情報修正部 301…集中ログ情報記憶部 302…ログ情報分割
部 303…分割基準指定部 304…分割ログ情報
記憶部 305…プロセス制御部 306…処理待ちメッ
セージ保存部 401…テスト実行装置 402…テストケース
記憶部 403…実行ログ記憶部 404…実行ログデー
タベース 411…プログラム解析部 412…セクション情
報記憶部 413…セクション情報編集部 414…コンパイル部 415…実行部
Claims (50)
- 【請求項1】並行構造を有する第1並行プログラムを逐
次実行可能な逐次プログラムに変換する逐次化手段と、 前記逐次プログラムのテスト・デバッグを行い、テスト
・デバッグ情報を作成するテスト・デバッグ手段と、 テスト・デバッグ後の前記逐次プログラムを前記テスト
・デバッグ情報に基づいて並行化することにより第2並
行プログラムに変換する並行化手段と、を具備すること
を特徴とする並行プログラム作成支援装置。 - 【請求項2】 前記テスト・デバッグ手段は、前記逐次
プログラムに対して並行性に関する情報を導入する手段
を含むことを特徴とする請求項1記載の並行プログラム
作成支援装置。 - 【請求項3】 前記逐次プログラムは、セクション情報
と、プログラム構造情報と、逐次化情報とを含むことを
特徴とする請求項1記載の並行プログラム作成支援装
置。 - 【請求項4】 前記第1並行プログラムの並行構造を解
析する解析手段を更に具備し、前記並行化手段は、前記
テスト・デバッグ手段によりテスト・デバッグが行われ
た前記逐次プログラムを前記解析手段の解析結果を用い
て並行化して、第2並行プログラムに変換する手段を含
むことを特徴とする請求項1記載の並行プログラム作成
支援装置。 - 【請求項5】並行構造を有する第1並行プログラムの所
定のセクション群を逐次実行可能な逐次プログラムに変
換する逐次化手段と、 前記第1並行プログラムの所定のセクション群の並行構
造を解析する並行構造解析手段と、 前記逐次プログラムの所定のセクション群の逐次構造を
解析する逐次構造解析手段と、 前記並行構造解析手段で解析された並行構造に関する相
互関係及び前記逐次構造解析手段で解析された逐次構造
に関する相互関係をグラフ情報として表示するグラフ情
報表示手段と、 前記逐次プログラムのうち選択された所定のセクション
群を並行化して部分的に逐次構造を有する部分逐次プロ
グラムに変換する部分逐次化手段と、 前記部分逐次プログラムを並行化して第2並行プログラ
ムに変換する並行化手段と、を具備することを特徴とす
る並行プログラム作成支援装置。 - 【請求項6】 前記逐次化手段は、 前記第1並行プログラムを実行する実行手段と、 前記実行手段による実行ログを保存する保存手段と、 前記保存手段により保存された実行ログ及び前記第1並
行プログラムを解析する解析手段と、 前記保存手段により保存された実行ログを前記解析手段
による解析結果に基づいて並べ替えする並べ替え手段
と、を含むことを特徴とする請求項1ないし請求項5の
いずれかに記載の並行プログラム作成支援装置。 - 【請求項7】 前記実行手段は、 前記第1並行プログラムを解析してセクション情報の抽
出をおこなうプログラム解析手段と、 前記セクション情報を記憶するセクション情報記憶手段
と、 前記セクション情報記憶手段に記憶されたセクション情
報を変更するセクション情報変更手段と、 前記セクション情報記憶手段により記憶されたセクショ
ン情報に基づいて前記並行プログラムの実行を行なう並
行プログラム実行手段と、を含むことを特徴とする請求
項6記載の並行プログラム作成支援装置。 - 【請求項8】 前記導入手段は、 前記逐次プログラムのプロセスの流れを制約と遷移条件
からなるフィールドに変換して該フィールドを表すフィ
ールドデータを生成するフィールドデータ生成手段と、 前記手段により生成されたフィールドデータで表される
フィールドをチューニングするためのチューニング手段
と、 前記フィールドデータ生成手段により生成されたフィー
ルドデータで表されるフィールドを表示する表示手段
と、含むことを特徴とする請求項1ないし請求項5のい
ずれかに記載の並行プログラム作成支援装置。 - 【請求項9】前記逐次化手段は、前記第1並行プログラ
ムを複数の超逐次プログラムに変換する手段を含み、 前記テスト・デバッグ手段は、前記複数の超逐次プログ
ラムを独立にテスト・デバッグする手段を含むことを特
徴とする請求項1ないし請求項4のいずれかに記載の並
行プログラム作成支援装置。 - 【請求項10】並行構造を有する第1並行プログラムの
所定のプロセス群を所定の実行順序に従って逐次実行可
能な逐次プログラムに変換する逐次化手段と、 前記逐次構造プログラムに対して並行化の候補となるプ
ロセス群を指定するプロセス群指定手段と、 前記手段により指定されたプロセス群の実行順序を入れ
換えて前記逐次プログラムを複数の並行模擬プログラム
に変換する模擬並行プログラム変換手段と、 前記複数の並行模擬プログラムを部分的に逐次構造を有
する1つの部分逐次プログラムに変換する部分逐次化手
段と、 前記部分逐次プログラムを並行化して第2並行プログラ
ムに変換する並行化手段とを具備することを特徴とする
並行プログラム作成支援装置。 - 【請求項11】逐次化ルールを格納する逐次化ルール格
納手段と、 前記逐次化ルール格納手段に格納された逐次化ルールに
従って並行構造を有する第1並行プログラムを逐次実行
可能な逐次プログラムに変換する逐次化手段と、 前記逐次プログラムに対して並行性に関する情報を導入
すべく前記逐次化ルール格納手段に格納された逐次化ル
ールを修正する逐次化ルール修正手段と、 前記逐次プログラムのテスト・デバッグを行うためのテ
スト・デバッグ手段と、 前記逐次化ルール修正手段により並行性に関する情報が
導入されかつ前記テスト・デバッグ手段によりテスト・
デバッグが行われた逐次プログラムを並行化して第2並
行プログラムに変換する並行化手段と、を具備すること
を特徴とする並行プログラム作成支援装置。 - 【請求項12】 プロセス群がメッセージ情報を交換し
ながら並行して動作する実行環境に用いられる並行プロ
グラムの作成を支援する並行プログラム作成支援装置に
おいて、 第1並行プログラムのプロセス群の実行履歴であるログ
情報を逐次化ルールとして取得するログ情報取得手段
と、 前記ログ情報取得手段により取得されたログ情報を記憶
するログ情報記憶手段と、 前記ログ情報記憶手段に記憶されているログ情報を修正
するためのログ情報修正手段と、 前記ログ情報記憶手段に記憶されているログ情報に基づ
いて前記プロセス群を逐次的に起動制御するプロセス群
制御手段と、 前記ログ情報記憶手段に記憶されたログ情報を並行化し
て第2並行プログラムに変換する並行化手段と、を具備
することを特徴とする並行プログラム作成支援装置。 - 【請求項13】 前記ログ情報修正手段は、 前記ログ情報記憶手段に記憶されているログ情報を時系
列に表示する表示手段と、 前記表示手段により時系列に表示されたログ情報内のデ
ータの順序の入れ換えを指示するための入れ替え指示手
段と、 前記入れ替え指示手段による指示に従って前記ログ情報
記憶手段に記憶されているログ情報を書き換える書換手
段と、を含むことを特徴とする請求項12記載の並行プ
ログラム作成支援装置。 - 【請求項14】 前記ログ情報修正手段は、プロセス間
の処理タイミングの非決定性を導入する非決定性導入手
段を含むことを特徴とする請求項12記載の並行プログ
ラム作成支援装置。 - 【請求項15】 プロセス群がメッセージ情報を交換し
ながら並行して動作できる実行環境で前記プロセス群が
実行順序規定情報に従って動作する並行プログラムを作
成支援する並行プログラム作成支援装置において、 前記実行順序規定情報を分割する実行順序情報分割手段
と、 前記実行順序情報分割手段によって分割された実行順序
情報に基づいて前記プロセスを起動制御するプロセス制
御手段と、を具備することを特徴とする並行プログラム
作成支援装置。 - 【請求項16】 前記実行順序規定情報を分割するため
の基準を与える分割基準指定手段を保持する手段を更に
具備することを特徴とする請求項15記載の並行プログ
ラム作成支援装置。 - 【請求項17】 前記プロセス制御手段は、前記メッセ
ージ交換の実行履歴であるログ情報を実行順序規定情報
として用いるとともに、前記分割基準指定手段における
分割基準として前記メッセージ中の宛先プロセス情報を
基準として用いることを特徴とする請求項15記載の並
行プログラム作成支援装置。 - 【請求項18】 前記プロセス制御手段を各プロセス毎
に保持する手段を具備することを特徴とする請求項17
記載の並行プログラム作成支援装置。 - 【請求項19】 前記実行順序情報分割手段によって分
割された実行順序情報をそれぞれ別々に保存する分割実
行順序情報保存手段を更に具備し前記プロセス制御手段
は該プロセスに対応する分割実行順序情報保存手段に保
存されている分割実行順序情報に基づいてプロセスを起
動制御する手段を含むことを特徴とする請求項18記載
の並行プログラム作成支援装置。 - 【請求項20】 前記プロセス制御手段は、前記プロセ
ス群の実行履歴であるログ情報を前記実行順序規定情報
として用いることを特徴とする請求項15記載の並行プ
ログラム作成支援装置。 - 【請求項21】並行構造を有する第1並行プログラムを
逐次的にテスト実行する逐次的テスト実行手段と、 前記テスト実行手段によるテスト実行の結果、正常に実
行終了したテスト実行結果のバグのない逐次的実行ログ
を蓄積する実行ログ蓄積手段と、 前記実行ログ蓄積手段により蓄積された逐次的実行ログ
を並行化して第2並行プログラムに変換する並行化手段
と、を具備することを特徴とする並行プログラム作成支
援装置。 - 【請求項22】並行構造を有する第1並行プログラムを
テスト実行するテスト実行手段と、 前記テスト実行手段によるテスト実行の結果バグのない
実行ログを蓄積する第1の実行ログ蓄積手段と、 前記テスト実行手段によるテスト実行の結果バグのある
実行ログを蓄積する第2の実行ログ蓄積手段と、 前記第2の実行ログ蓄積手段により蓄積された実行ログ
を修正し、修正された実行ログを前記第1の実行ログ蓄
積手段に蓄積する修正手段と、 前記第1の実行ログ蓄積手段により蓄積された実行ログ
を並行化して第2並行プログラムに変換する並行化手段
と、を具備することを特徴とする並行プログラム作成支
援装置。 - 【請求項23】並行構造を有する第1並行プログラムを
逐次実行可能な逐次プログラムに変換する第1ステップ
と、 前記逐次プログラムのテスト・デバッグを行い、テスト
・デバッグ情報を作成する第2ステップと、 テスト・デバッグ後の前記逐次プログラムを前記テスト
・デバッグ情報に基づいて並行化することにより第2並
行プログラムに変換する第3ステップと、を具備するこ
とを特徴とする並行プログラム作成方法。 - 【請求項24】 前記第2ステップは、前記逐次プログ
ラムに対して並行性に関する情報を導入するサブステッ
プを含むことを特徴とする請求項23記載の並行プログ
ラム作成方法。 - 【請求項25】前記第1ステップは、前記第1並行プロ
グラムの並行構造を解析するサブステップを含み、 前記第3ステップは、テスト・デバッグ後の前記逐次プ
ログラムを前記第1並行プログラムの並行構造を用いて
並行化するサブステップとを含むことを特徴とする請求
項23記載の並行プログラム作成方法。 - 【請求項26】 前記第2ステップは、前記逐次プログ
ラムに対して指定された非決定性を前記並行性に関する
情報として導入するサブステップを含むことを特徴とす
る請求項23ないし請求項25のいずれかに記載の並行
プログラム作成方法。 - 【請求項27】前記第1ステップは、 並行構造を有する前記第1並行プログラムの所定のセク
ション群を逐次実行可能な逐次プログラムに変換する第
1サブステップと、 前記第1並行プログラムの所定のセクション群の並行構
造を解析する第2サブステップと、 前記逐次プログラムの所定のセクション群の逐次構造を
解析する第3サブステップと、 前記第2サブステップで解析された並行構造に関する相
互関係及び前記第3サブステップで解析された逐次構造
に関する相互関係をグラフ情報として表示する第4サブ
ステップと、 前記逐次プログラムのうち選択された所定のセクション
群を並行化して部分的に逐次構造を有する部分逐次プロ
グラムに変換する第5サブステップと、を含み、 前記第3ステップは、前記部分逐次プログラムを並行化
して第2並行プログラムに変換するサブステップを含む
ことを特徴とする請求項23記載の並行プログラム作成
方法。 - 【請求項28】並行構造を有する前記第1並行プログラ
ムの所定のセクション群を逐次実行可能な逐次プログラ
ムに変換する第1ステップと、 前記第1並行プログラムの所定のセクション群の並行構
造を解析する第2ステップと、 前記逐次プログラムの所定のセクション群の逐次構造を
解析する第3ステップと、 前記第2ステップで解析された並行構造に関する相互関
係及び前記第3ステップで解析された逐次構造に関する
相互関係をグラフ情報として表示する第4ステップと、 前記逐次プログラムのうち選択された所定のセクション
群を並行化して部分的に逐次構造を有する部分逐次プロ
グラムに変換する第5ステップと、 前記部分逐次プログラムを並行化して第2並行プログラ
ムに変換する第6ステップと、を具備することを特徴と
する並行プログラム作成方法。 - 【請求項29】前記第1サブステップは、前記逐次プロ
グラムの所望の実行結果が得られるまで当該逐次プログ
ラムのテスト・デバッグを行うサブステップを含むこと
を特徴とする請求項28記載の並行プログラム作成方
法。 - 【請求項30】 前記第4サブステップは、前記所定の
セクション群をノードとし、前記並行構造に関する相互
関係を第1アークとし、前記逐次構造に関する相互関係
を第2アークとして前記グラフ情報を表示するサブステ
ップを含むことを特徴とする請求項28記載の並行プロ
グラム作成方法。 - 【請求項31】 前記第5サブステップは、前記部分逐
次プログラムの所望の実行結果が得られるまで該部分逐
次プログラムのテスト・デバッグを行うサブステップを
含むことを特徴とする請求項28記載の並行プログラム
作成方法。 - 【請求項32】前記第5サブステップは、前記部分逐次
プログラムにおける所定のセクション群の逐次構造を解
析するサブステップを含み、 前記第1ステップは、前記第4サブステップから第5サ
ブステップを所定の回数繰り返すサブステップを更に含
むことを特徴とする請求項28記載の並行プログラム作
成方法。 - 【請求項33】前記第1ステップは、 前記第1並行プログラムを実行する第1サブステップ
と、 前記第1サブステップによる実行ログを保存する第2サ
ブステップと、 前記第2サブステップにより保存された実行ログ及び前
記第1並行プログラムを解析する第3サブステップと、 前記第2サブステップにより保存された実行ログを前記
第3サブステップによる解析結果に基づいて並べ替える
第4サブステップと、を含むことを特徴とする請求項2
3ないし請求項25、請求項28又は請求項29のいず
れかに記載の並行プログラム作成方法。 - 【請求項34】 前記第3サブステップは、前記第2サ
ブステップにより保存された実行ログ及び前記第1並行
プログラムからプロセスの先行関係を抽出し先行関係情
報として保存するサブステップを含むことを特徴とする
請求項33記載の並行プログラム作成方法。 - 【請求項35】 前記第2ステップは、前記逐次プログ
ラムのプロセスの流れを制約と遷移条件からなるフィー
ルドに変換するサブステップと、前記フィールドをチュ
ーニングするサブステップと、前記並行性に関する情報
を導入するサブステップとを含むことを特徴とする請求
項23ないし請求項25のいずれかに記載の並行プログ
ラム作成方法。 - 【請求項36】複数のプロセス群を有し並行構造を有す
る第1並行プログラムの所定のプロセス群を所定の実行
順序に従って逐次実行可能な逐次プログラムに変換する
第1ステップと、 前記逐次プログラムに対して並行化の候補となるプロセ
ス群を指定する第2ステップと、 前記第2ステップにより指定されたプロセス群の実行順
序を入れ換えて前記逐次プログラムを複数の並行模擬プ
ログラムに変換する第3ステップと、 前記複数の並行模擬プログラムを部分的に逐次構造を有
する1つの部分逐次プログラムに変換する第4ステップ
と、 前記部分逐次プログラムを並行化して第2並行プログラ
ムに変換する第5ステップと、を具備することを特徴と
する並行プログラム作成方法。 - 【請求項37】 前記第1ステップは、前記逐次プログ
ラムの所望の実行結果が得られるまで該逐次プログラム
のテスト・デバッグを行うサブステップを含むことを特
徴とする請求項36記載の並行プログラム作成方法。 - 【請求項38】 前記第2ステップは、 前記第1並行プログラムを解析するサブステップと、 前記解析結果から前記並行化の候補となるプロセス群を
抽出するサブステップと、を含むことを特徴とする請求
項36記載の並行プログラム作成方法。 - 【請求項39】 前記第3ステップは、前記複数の並行
模擬プログラムの所望の実行結果が得られるまで前記複
数の並行模擬プログラムのテスト・デバッグを行うサブ
ステップを含むことを特徴とする請求項36記載の並行
プログラム作成方法。 - 【請求項40】 前記第3ステップは、前記複数の並行
模擬プログラムの一部の実行結果から不要と判断される
並行模擬プログラムを取り除くサブステップを含むこと
を特徴とする請求項36記載の並行プログラム作成方
法。 - 【請求項41】 前記第4ステップは、前記部分逐次プ
ログラムに対して並行化の候補となるプロセス群を指定
するサブステップを含み、 前記第3ステップから前記第4ステップを所定の回数繰
り返すステップを更に具備することを特徴とする請求項
36記載の並行プログラム作成方法。 - 【請求項42】 前記第1ステップは、 前記第1並行プログラムを逐次化ルールに従って前記逐
次プログラムに変換する第1サブステップと、 前記逐次プログラムに対して並行性に関する情報を導入
するために前記逐次化ルールを修正する第2サブステッ
プと、を含み、 前記第3ステップは、前記テスト・デバッグ情報と、前
記並行性に関する情報とに基づいて前記逐次プログラム
を並行化して第2並行プログラムに変換するサブステッ
プを含むことを特徴とする請求項23記載の並行プログ
ラム作成方法。 - 【請求項43】並行構造を有する第1並行プログラムを
テスト実行する第1ステップと、 前記第1ステップによるテスト実行の結果バグのない実
行ログを蓄積する第2ステップと、 前記第2ステップにより蓄積された前記実行ログを並行
化して第2並行プログラムに変換する第3ステップと、
を具備することを特徴とする並行プログラム作成方法。 - 【請求項44】前記第1ステップによるテスト実行の結
果バグのある実行ログを蓄積する第4ステップと、 前記第4ステップにより蓄積された実行ログに基づいて
前記第1並行プログラムを修正して、再度実行ログを蓄
積する第5ステップと、を更に具備することを特徴とす
る請求項43記載の並行プログラム作成方法。 - 【請求項45】並行プログラムを解析してセクション情
報の抽出をおこなうプログラム解析手段と、 前記セクション情報を記憶するセクション情報記憶手段
と、 前記セクション情報記憶手段により記憶されたセクショ
ン情報に基づいて前記並行プログラムの実行を行なう並
行プログラム実行手段と、を具備することを特徴とする
並行プログラム実行装置。 - 【請求項46】 前記セクション情報記憶手段によって
記憶されるセクション情報を編集するセクション情報編
集手段及び前記セクション情報記憶手段によって記憶さ
れるセクション情報内の各セクションをオブジェクトに
変換するコンパイル手段の少なくとも一方を更に具備す
ることを特徴とする請求項45記載の並行プログラム実
行装置。 - 【請求項47】 前記プログラム解析手段が、入力され
たプログラムを中間言語に変換する手段と、前記中間言
語からセクションを抽出する手段とを更に含むことを特
徴とする請求項45記載の並行プログラム実行装置。 - 【請求項48】 前記実行手段が、実行するセクション
の候補を記憶する実行セクション候補記憶手段と、前記
実行セクション候補記憶手段によって記憶されるセクシ
ョンから次に実行するセクションを選択する実行セクシ
ョン選択手段と、前記実行セクション選択手段によって
選択されたセクションを実行するセクション実行手段と
を更に含むことを特徴とする請求項45記載の並行プロ
グラム実行装置。 - 【請求項49】 前記実行セクション選択手段が、実行
可能なセクションを一つ選択するモードと実行可能なセ
クションをすべて選択するモードを含むことを特徴とす
る請求項48記載の並行プログラム実行装置。 - 【請求項50】 前記実行セクション実行手段が、前記
実行セクション選択手段によって選択されたセクション
が複数の時はそれらのセクションを並行に実行すること
を特徴とする請求項48記載の並行プログラム実行装
置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP12757795A JP4050339B2 (ja) | 1994-04-28 | 1995-04-28 | 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置 |
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP6-114668 | 1994-04-28 | ||
| JP11466894 | 1994-04-28 | ||
| JP12757795A JP4050339B2 (ja) | 1994-04-28 | 1995-04-28 | 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH0816429A true JPH0816429A (ja) | 1996-01-19 |
| JP4050339B2 JP4050339B2 (ja) | 2008-02-20 |
Family
ID=26453366
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP12757795A Expired - Fee Related JP4050339B2 (ja) | 1994-04-28 | 1995-04-28 | 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP4050339B2 (ja) |
Cited By (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH11175369A (ja) * | 1997-12-10 | 1999-07-02 | Toshiba Corp | プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラムを記録した媒体 |
| US6067415A (en) * | 1995-12-26 | 2000-05-23 | Kabushiki Kaisha Toshiba | System for assisting a programmer find errors in concurrent programs |
| JP2003167715A (ja) * | 2001-11-29 | 2003-06-13 | Ricoh Co Ltd | プロセス間通信履歴表示方法、その方法をコンピュータに実行させるプログラム、画像形成装置および画像形成システム |
| JP2003529808A (ja) * | 1999-01-13 | 2003-10-07 | エービー イニティオ ソフトウェア コーポレーション | スクリプト駆動ツールの並列処理アプリケーション |
| JP2005502104A (ja) * | 2001-06-11 | 2005-01-20 | トータルイーケア・インコーポレイテッド | 計算インフラストラクチャに対する変更を管理するシステム |
| US7178064B2 (en) | 2002-12-09 | 2007-02-13 | Sharp Kabushiki Kaisha | Debug device, debug method and storage medium |
| JP2008299763A (ja) * | 2007-06-01 | 2008-12-11 | Hitachi Ltd | 分散オブジェクト開発ツール |
| JP2009123070A (ja) * | 2007-11-16 | 2009-06-04 | Keyence Corp | 検査支援システム及び画像処理コントローラ |
| JP2011014137A (ja) * | 2009-06-30 | 2011-01-20 | Intel Corp | Mpiソースコードプログラムからmpiスレッドベースプログラムへの自動変換 |
| JP2014038613A (ja) * | 2012-08-17 | 2014-02-27 | Ge Aviation Systems Llc | 並列コンピューティング環境でソフトウェアを開発するための方法 |
| US9116955B2 (en) | 2011-05-02 | 2015-08-25 | Ab Initio Technology Llc | Managing data queries |
| US9665620B2 (en) | 2010-01-15 | 2017-05-30 | Ab Initio Technology Llc | Managing data queries |
| US9891901B2 (en) | 2013-12-06 | 2018-02-13 | Ab Initio Technology Llc | Source code translation |
| US10417281B2 (en) | 2015-02-18 | 2019-09-17 | Ab Initio Technology Llc | Querying a data source on a network |
| US10437819B2 (en) | 2014-11-14 | 2019-10-08 | Ab Initio Technology Llc | Processing queries containing a union-type operation |
| US11093223B2 (en) | 2019-07-18 | 2021-08-17 | Ab Initio Technology Llc | Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods |
-
1995
- 1995-04-28 JP JP12757795A patent/JP4050339B2/ja not_active Expired - Fee Related
Cited By (23)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6067415A (en) * | 1995-12-26 | 2000-05-23 | Kabushiki Kaisha Toshiba | System for assisting a programmer find errors in concurrent programs |
| JPH11175369A (ja) * | 1997-12-10 | 1999-07-02 | Toshiba Corp | プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラムを記録した媒体 |
| JP2003529808A (ja) * | 1999-01-13 | 2003-10-07 | エービー イニティオ ソフトウェア コーポレーション | スクリプト駆動ツールの並列処理アプリケーション |
| US7047232B1 (en) | 1999-01-13 | 2006-05-16 | Ab Initio Software Corporation | Parallelizing applications of script-driven tools |
| JP2005502104A (ja) * | 2001-06-11 | 2005-01-20 | トータルイーケア・インコーポレイテッド | 計算インフラストラクチャに対する変更を管理するシステム |
| JP2003167715A (ja) * | 2001-11-29 | 2003-06-13 | Ricoh Co Ltd | プロセス間通信履歴表示方法、その方法をコンピュータに実行させるプログラム、画像形成装置および画像形成システム |
| US7178064B2 (en) | 2002-12-09 | 2007-02-13 | Sharp Kabushiki Kaisha | Debug device, debug method and storage medium |
| JP2008299763A (ja) * | 2007-06-01 | 2008-12-11 | Hitachi Ltd | 分散オブジェクト開発ツール |
| JP2009123070A (ja) * | 2007-11-16 | 2009-06-04 | Keyence Corp | 検査支援システム及び画像処理コントローラ |
| JP2011014137A (ja) * | 2009-06-30 | 2011-01-20 | Intel Corp | Mpiソースコードプログラムからmpiスレッドベースプログラムへの自動変換 |
| US9665620B2 (en) | 2010-01-15 | 2017-05-30 | Ab Initio Technology Llc | Managing data queries |
| US11593369B2 (en) | 2010-01-15 | 2023-02-28 | Ab Initio Technology Llc | Managing data queries |
| US10521427B2 (en) | 2011-05-02 | 2019-12-31 | Ab Initio Technology Llc | Managing data queries |
| US9116955B2 (en) | 2011-05-02 | 2015-08-25 | Ab Initio Technology Llc | Managing data queries |
| JP2014038613A (ja) * | 2012-08-17 | 2014-02-27 | Ge Aviation Systems Llc | 並列コンピューティング環境でソフトウェアを開発するための方法 |
| US10289396B2 (en) | 2013-12-06 | 2019-05-14 | Ab Initio Technology Llc | Source code translation |
| US10282181B2 (en) | 2013-12-06 | 2019-05-07 | Ab Initio Technology Llc | Source code translation |
| US11106440B2 (en) | 2013-12-06 | 2021-08-31 | Ab Initio Technology Llc | Source code translation |
| US9891901B2 (en) | 2013-12-06 | 2018-02-13 | Ab Initio Technology Llc | Source code translation |
| US10437819B2 (en) | 2014-11-14 | 2019-10-08 | Ab Initio Technology Llc | Processing queries containing a union-type operation |
| US10417281B2 (en) | 2015-02-18 | 2019-09-17 | Ab Initio Technology Llc | Querying a data source on a network |
| US11308161B2 (en) | 2015-02-18 | 2022-04-19 | Ab Initio Technology Llc | Querying a data source on a network |
| US11093223B2 (en) | 2019-07-18 | 2021-08-17 | Ab Initio Technology Llc | Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods |
Also Published As
| Publication number | Publication date |
|---|---|
| JP4050339B2 (ja) | 2008-02-20 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5860009A (en) | Programming method for concurrent programs and program supporting apparatus thereof | |
| US5361357A (en) | Method and apparatus for optimizing computer file compilation | |
| JP4050339B2 (ja) | 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置 | |
| JP4042604B2 (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
| US6574788B1 (en) | Method and system for automatically generating low level program commands as dependency graphs from high level physical design stages | |
| US20060075305A1 (en) | Method and system for source-code model-based testing | |
| US9152389B2 (en) | Trace generating unit, system, and program of the same | |
| JP2002099312A (ja) | プログラマブルコントローラおよび制御プログラム開発支援装置 | |
| US6067415A (en) | System for assisting a programmer find errors in concurrent programs | |
| Hoey et al. | Reversible imperative parallel programs and debugging | |
| US7086047B1 (en) | Determining hardware generated by high level language compilation through loop optimizations | |
| CN118012446A (zh) | 软件版本自动集成部署方法及系统 | |
| JP3675623B2 (ja) | プログラム開発支援装置及び方法並びにプログラム開発支援用ソフトウェアを記録した記録媒体 | |
| Potop-Butucaru et al. | Optimizations for faster execution of Esterel programs | |
| JP6279750B2 (ja) | ソースコード等価性検証装置 | |
| Lah et al. | Tree compaction of microprograms | |
| US6581029B1 (en) | Method and system for optimizing execution of a collection of related module sequences by eliminating redundant modules | |
| JPH0850554A (ja) | プロセッサの動作モデルと論理検証用試験命令列の自動生成方法及び装置 | |
| JP3641090B2 (ja) | プログラミング支援装置とその方法 | |
| JP2012014526A (ja) | プログラムコードの構造変換装置、並びにコード構造変換プログラム | |
| JP3930255B2 (ja) | システム仕様情報処理装置、システム仕様情報処理方法及びプログラム | |
| Kharitonov et al. | Modelling race conditions in multithreading programs in terms of Petri nets | |
| JP7638457B1 (ja) | プログラム開発支援装置、プログラム開発支援方法及びプログラム開発支援プログラム | |
| Frey et al. | Testing parallel and distributed programs with temporal logic specifications | |
| JPH03135630A (ja) | 命令スケジューリング方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20031225 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040120 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040322 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20041005 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041104 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041206 |
|
| A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20050119 |
|
| A912 | Removal of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20050422 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071105 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071129 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101207 Year of fee payment: 3 |
|
| LAPS | Cancellation because of no payment of annual fees |