JPH11134307A - Program development supporting device and method therefor and recording medium for recording program development supporting software - Google Patents

Program development supporting device and method therefor and recording medium for recording program development supporting software

Info

Publication number
JPH11134307A
JPH11134307A JP9299886A JP29988697A JPH11134307A JP H11134307 A JPH11134307 A JP H11134307A JP 9299886 A JP9299886 A JP 9299886A JP 29988697 A JP29988697 A JP 29988697A JP H11134307 A JPH11134307 A JP H11134307A
Authority
JP
Japan
Prior art keywords
scenario
program
concurrent program
dependency
concurrent
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
Application number
JP9299886A
Other languages
Japanese (ja)
Other versions
JP3675623B2 (en
Inventor
Naoshi Uchihira
直志 内平
Fumitaka Tamura
文隆 田村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP29988697A priority Critical patent/JP3675623B2/en
Publication of JPH11134307A publication Critical patent/JPH11134307A/en
Application granted granted Critical
Publication of JP3675623B2 publication Critical patent/JP3675623B2/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Multi Processors (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

PROBLEM TO BE SOLVED: To provide a technique for preparing complicated plural parallel programs with excellent reliability and efficiency. SOLUTION: A preparing means 3 prepares the scenario of execution from a first parallel program 2. An analyzing means 12 extracts a dependent relation from the first parallel program 2. A decomposing means 5 hierarchically decomposes the scenario judged to be correct into blocks in which a loop is not included. A paralleling mean 7 parallels the scenario by assigning the scenario to plural processes by using the block as a unit. An integrating means 8 integrates the assigned scenario for each process. A generating means 10 generates a second parallel program 11 from the integrated scenario of each process. Even the parallel program whose structure is complicate is decomposed into blocks and processed so as to be developed as easy as sequential programming.

Description

【発明の詳細な説明】DETAILED DESCRIPTION OF THE INVENTION

【0001】[0001]

【発明の属する技術分野】本発明は、並行プログラムを
開発する技術の改良に関し、より具体的には、複雑な並
行プログラムについても優れた信頼性と効率で作成でき
るようにしたものである。
BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention relates to an improvement of a technique for developing a concurrent program, and more specifically, to a technique for creating a complicated concurrent program with excellent reliability and efficiency.

【0002】[0002]

【従来の技術】並行プログラムは、複数のプロセスが同
時並行的に動作するプログラムであり、別々に動くプロ
セス間の相互関係によって全体の動作が決まるという複
雑さがある。そのため、並行プログラムの作成は、プロ
セスが単一の流れに従って順次動作をする逐次プログラ
ムに比べて困難である。特に、並行プログラムの挙動
は、どのプロセスのどの部分がどのようなタイミングで
実行されるかに応じて、実行ごとに非決定的に異なる。
この結果、並行プログラムのバグには再現性が乏しく、
また、テストするテストケースも極めて多数となるた
め、テストとデバッグが非常に困難である。
2. Description of the Related Art A concurrent program is a program in which a plurality of processes operate concurrently in parallel, and has a complicated structure in which the overall operation is determined by the interrelationship between the separately running processes. Therefore, it is more difficult to create a parallel program than a sequential program in which processes operate sequentially according to a single flow. In particular, the behavior of a concurrent program is non-deterministically different for each execution, depending on which part of which process is executed and at what timing.
As a result, bugs in concurrent programs are poorly reproducible,
In addition, since the number of test cases to be tested is extremely large, it is very difficult to test and debug.

【0003】このような並行プログラムの作成を支援
し、並行プログラムの信頼性を高める技術として、超逐
次プログラミングが知られている(特開平8−1642
9)。この技術では、並行プログラムを一旦逐次化して
超逐次プログラムを作成する。超逐次プログラムとは、
もとの並行プログラムをその並行構造に関する情報を保
ちながら逐次化したプログラムである。そして、このよ
うな超逐次プログラムに対してプログラミング、テス
ト、デバッグを行い、その結果に基づいて超逐次プログ
ラムを再び並行化することによって信頼性の高い並行プ
ログラムを作成することができる。
[0003] Ultra-sequential programming is known as a technique for supporting the creation of such a concurrent program and improving the reliability of the concurrent program (Japanese Patent Laid-Open No. Hei 8-16442).
9). In this technique, a super-sequential program is created by serializing a concurrent program once. What is a super sequential program?
This is a serialized version of the original concurrent program while maintaining information about its concurrent structure. Then, programming, testing, and debugging are performed on such a super-sequential program, and a parallel program with high reliability can be created by parallelizing the super-sequential program again based on the results.

【0004】例えば、並行プログラムにテストケースを
与えるなどしてテストし、このテストの際の実行ログの
うち、バグがないと判定された正しい実行ログを、もと
の並行プログラムを一旦逐次化した超逐次プログラムの
一種とみなす。そして、このような正しい実行ログを複
数マージすることによって、超逐次プログラムの正しい
振る舞いを表すシナリオグラフを作る。このシナリオグ
ラフを、部分間の実行順序を指定する同期命令と共に、
複数のプロセスに部分ごとに割り当てることによって再
び並行化し、並行プログラムを作成する。
For example, a test is performed by giving a test case to a concurrent program, and a correct execution log determined to have no bug is temporarily serialized from the original concurrent program among execution logs at the time of the test. It is regarded as a kind of super sequential program. Then, by merging a plurality of such correct execution logs, a scenario graph representing a correct behavior of the hyper-sequential program is created. This scenario graph, along with synchronization instructions that specify the order of execution between parts,
Re-parallelize by assigning portions to multiple processes to create concurrent programs.

【0005】また、本出願人が出願した他の技術では、
並行プログラムを、実行制御の単位となるセクションに
分け、セクション間の正しい実行順序をシナリオグラフ
の経路で表す。この経路に含まれる個々の動作を、動作
間の実行順序を指定する同期命令と共に各プロセスに割
り当てることによって、正しい振る舞いを示す並行プロ
グラムを作成する。なお、並行プログラムには違った実
行順序を表すいくつかの経路が含まれることがあるが、
経路ごとの実行結果が同じになる場合のようにシナリオ
グラフと等価な経路を自動的に復元することによって、
生成される並行プログラムの振る舞いに柔軟性が増え、
実行効率が向上する。
[0005] Further, in another technology filed by the present applicant,
The concurrent program is divided into sections, which are the units of execution control, and the correct execution order between sections is represented by the path of the scenario graph. By assigning each operation included in this path to each process together with a synchronization instruction designating the execution order between operations, a concurrent program showing correct behavior is created. Note that a concurrent program may include several paths that represent different execution orders,
By automatically restoring a path equivalent to the scenario graph, such as when the execution results for each path are the same,
More flexibility in the behavior of the generated concurrent program,
Execution efficiency is improved.

【0006】[0006]

【発明が解決しようとする課題】しかしながら、これら
の従来技術では、プログラムの正しい振る舞いをシナリ
オグラフで表す際に、単一の階層のみを持つ平面的な構
造のシナリオグラフを用いる。すなわち、このシナリオ
グラフは、プログラムの各部分をアークで表し、各状態
を表すノードの間をアークで接続することによって、プ
ログラムの部分間の実行順序を、平面的な構造の状態遷
移グラフで表したものである。そして、ループや階層構
造のような複雑な構造を平面的な構造のシナリオグラフ
で表そうとすると、構造の複雑さに応じてシナリオグラ
フが複雑で大規模なものとなるので、処理のアルゴリズ
ムが複雑化したり処理効率が悪化するだけでなく、シナ
リオグラフ自体も理解しづらいものとなる。このため、
上記のような従来技術は複雑な並行プログラムに適用す
ることが困難という問題点があった。
However, in these prior arts, when a correct behavior of a program is represented by a scenario graph, a scenario graph having a planar structure having only a single hierarchy is used. In other words, in this scenario graph, each part of the program is represented by an arc, and nodes representing each state are connected by an arc, so that the execution order between the parts of the program is represented by a state transition graph having a planar structure. It was done. When trying to represent a complex structure such as a loop or a hierarchical structure with a scenario graph having a planar structure, the scenario graph becomes complicated and large-scale according to the complexity of the structure. Not only does it become complicated or the processing efficiency deteriorates, but also the scenario graph itself becomes difficult to understand. For this reason,
The prior art as described above has a problem that it is difficult to apply it to a complicated concurrent program.

【0007】本発明は、上記のような従来技術の問題点
を解決するために提案されたもので、その目的は、複雑
な並行プログラムについても優れた信頼性と効率で作成
できる技術を提供することである。
The present invention has been proposed to solve the above-mentioned problems of the prior art, and has as its object to provide a technique capable of creating a complicated concurrent program with excellent reliability and efficiency. That is.

【0008】[0008]

【課題を解決するための手段】上記の目的を達成するた
め、請求項1のプログラム開発支援装置は、第1の並行
プログラムから実行のシナリオを作成する手段と、前記
第1の並行プログラムを解析することによって、第1の
並行プログラムの部分間に存在する依存関係を抽出する
手段と、前記シナリオを、ループを含まないブロックに
階層的に分解する手段と、前記依存関係に基づいて、前
記シナリオを前記ブロックを単位として複数のプロセス
に割り当てることによって並行化する手段と、各プロセ
スに割り当てられたシナリオを前記プロセスごとに統合
化する手段と、統合化されたプロセスごとのシナリオか
ら第2の並行プログラムを生成する手段と、を有するこ
とを特徴とする。請求項7のプログラム開発支援方法
は、請求項1の発明を方法の観点から把握したもので、
第1の並行プログラムから実行のシナリオを作成するス
テップと、前記第1の並行プログラムを解析することに
よって、第1の並行プログラムの部分間に存在する依存
関係を抽出するステップと、前記シナリオを、ループを
含まないブロックに階層的に分解するステップと、前記
依存関係に基づいて、分解された前記シナリオを前記ブ
ロックを単位として複数のプロセスに割り当てることに
よって並行化するステップと、各プロセスに割り当てら
れたシナリオを前記プロセスごとに統合化するステップ
と、統合化されたプロセスごとのシナリオから第2の並
行プログラムを生成するステップと、を含むことを特徴
とする。請求項10の発明は、請求項1の発明を、ソフ
トウェアを記録した記録媒体の観点から把握したもの
で、コンピュータを用いて並行プログラムの開発を支援
するプログラム開発支援用ソフトウェアを記録した記録
媒体において、前記プログラム開発支援用ソフトウェア
はコンピュータに、第1の並行プログラムから実行のシ
ナリオを作成させ、前記第1の並行プログラムを解析す
ることによって、第1の並行プログラムの部分間に存在
する依存関係を抽出させ、前記シナリオを、ループを含
まないブロックに階層的に分解させ、前記依存関係に基
づいて、分解された前記シナリオを前記ブロックを単位
として複数のプロセスに割り当てることによって並行化
させ、各プロセスに割り当てられたシナリオを前記プロ
セスごとに統合化させ、統合化されたプロセスごとのシ
ナリオから第2の並行プログラムを生成させることを特
徴とする。請求項1,6,10の発明では、正しいこと
が確認されたシナリオという形で、並行プログラムを一
旦逐次化し、このシナリオに基づいて並行プログラムを
再び生成することによって並行プログラムの信頼性の向
上させる。その際、シナリオを一旦、ループを含まない
ブロックに階層的に分解する。そして、分解されたブロ
ックごとに各プロセスに割り当てて並行化し、プロセス
ごとに再び統合化して並行プログラムを生成する。分解
された個々のブロックはループや階層構造を含まないの
で、効率的に並行化処理でき、並行プログラム全体とし
て効率的に開発を行うことができる。
According to another aspect of the present invention, there is provided a program development support apparatus for creating an execution scenario from a first concurrent program, and analyzing the first concurrent program. Means for extracting a dependency existing between portions of the first concurrent program, means for hierarchically decomposing the scenario into blocks not including a loop, and means for extracting the scenario based on the dependency. Means for parallelizing by assigning a plurality of processes in units of the block, means for integrating the scenario assigned to each process for each process, and second parallel processing from the scenario for each integrated process. Means for generating a program. A program development support method according to a seventh aspect is obtained by grasping the invention according to the first aspect from a method viewpoint.
Creating an execution scenario from a first concurrent program; analyzing the first concurrent program to extract dependencies between portions of the first concurrent program; Hierarchically decomposing into blocks that do not include a loop, parallelizing by assigning the decomposed scenario to a plurality of processes in units of the blocks based on the dependencies, Integrating the scenario for each process, and generating a second concurrent program from the integrated scenario for each process. According to a tenth aspect of the present invention, the invention of the first aspect is grasped from the viewpoint of a recording medium on which software is recorded. In a recording medium on which program development support software for supporting concurrent program development using a computer is recorded. The program development support software causes a computer to create an execution scenario from a first concurrent program, and analyzes the first concurrent program to determine a dependency existing between portions of the first concurrent program. Extraction, the scenario is hierarchically decomposed into blocks that do not include loops, and the decomposed scenarios are parallelized by assigning the decomposed scenarios to a plurality of processes in units of the blocks based on the dependencies. Integrate scenarios assigned to each process and integrate them Thereby generating a second concurrent program from been per process scenario characterized. According to the first, sixth and tenth aspects of the present invention, the concurrent program is temporarily serialized in the form of a scenario confirmed to be correct, and the concurrent program is generated again based on this scenario, thereby improving the reliability of the concurrent program. . At that time, the scenario is once hierarchically decomposed into blocks that do not include a loop. Then, each decomposed block is assigned to each process to be parallelized, and each process is integrated again to generate a parallel program. Since each decomposed block does not include a loop or a hierarchical structure, parallel processing can be performed efficiently, and development can be performed efficiently as a whole concurrent program.

【0009】請求項2の発明は、請求項1記載のプログ
ラム開発支援装置において、前記分解する手段は、与え
られたシナリオを正規化する手段を有することを特徴と
する。請求項2の発明では、シナリオを正規化すること
によって正規表現に変換されたシナリオとし、正規表現
に変換されたシナリオは階層的に分解することが容易で
ある。このため、並行プログラムの分解が効率化され
る。
According to a second aspect of the present invention, in the program development supporting apparatus according to the first aspect, the decomposing means has means for normalizing a given scenario. According to the second aspect of the present invention, the scenario is converted into a regular expression by normalizing the scenario, and the scenario converted into the regular expression can be easily decomposed hierarchically. For this reason, the decomposition of the concurrent program is made more efficient.

【0010】請求項3の発明は、請求項1又は2記載の
プログラム開発支援装置において、前記並行化する手段
は、シナリオをプロセスに割り当てる際、前記依存関係
に対応する同期命令をシナリオに埋め込むように構成さ
れたことを特徴とする。請求項3の発明では、同期命令
を埋め込みながらシナリオをプロセスに割り当てるの
で、プロセス間において各部分の実行タイミングが、依
存関係に基づく先行制約に合致するように制御され、最
終的に得られる並行プログラムの信頼性が確保される。
According to a third aspect of the present invention, in the program development support apparatus according to the first or second aspect, the parallelizing means embeds a synchronization instruction corresponding to the dependency in the scenario when assigning the scenario to a process. It is characterized by comprising. According to the third aspect of the present invention, a scenario is assigned to a process while embedding a synchronous instruction. Therefore, the execution timing of each part between processes is controlled so as to conform to a preceding constraint based on a dependency, and a finally obtained concurrent program is obtained. Reliability is ensured.

【0011】請求項4の発明は、請求項3記載のプログ
ラム開発支援装置において、前記並行化する手段は、シ
ナリオに埋め込んだ前記同期命令のうち、冗長な同期命
令を除去するように構成されたことを特徴とする。請求
項8の発明は、請求項4の発明を方法の観点から把握し
たもので、請求項7記載のプログラム開発支援方法にお
いて、前記並行化するステップは、シナリオをプロセス
に割り当てる際、前記依存関係に対応する同期命令をシ
ナリオに埋め込むサブステップと、シナリオに埋め込ん
だ前記同期命令のうち、冗長な同期命令を除去するサブ
ステップと、を含むことを特徴とする。請求項4,8の
発明では、冗長な同期命令を除去することによって、各
プロセスが互いにどのようなタイミングで動作するかの
自由度が拡張される。これは、無害な非決定性を与える
ことによって並行プログラムを最適化することを意味
し、シナリオという形で一旦逐次化された並行プログラ
ムにおいて、並行性を可能な限り復元することができ
る。
According to a fourth aspect of the present invention, in the program development support apparatus of the third aspect, the parallelizing means is configured to remove a redundant synchronization instruction from the synchronization instructions embedded in a scenario. It is characterized by the following. According to an eighth aspect of the present invention, the invention of the fourth aspect is grasped from the viewpoint of a method. In the program development support method according to the seventh aspect, the step of parallelizing is performed when the scenario is assigned to a process. And a sub-step of removing redundant synchronization instructions from the synchronization instructions embedded in the scenario. According to the fourth and eighth aspects of the present invention, by removing redundant synchronization instructions, the degree of freedom in what timing the processes operate with each other is expanded. This means optimizing a concurrent program by giving harmless nondeterminism. Concurrency can be restored as much as possible in a concurrent program once serialized in the form of a scenario.

【0012】請求項5の発明は、請求項4記載のプログ
ラム開発支援装置において、前記並行化する手段は、前
記冗長な同期命令を除去する際、シナリオに埋め込んだ
任意の同期命令の作用を抑制し、前記抑制の前と後の各
シナリオの間で、前記依存関係を持つ動作が示し得る実
行順序が同じかどうかを判断し、前記実行順序が同じで
ある場合は、作用を抑制した前記同期命令を除去するよ
うに構成されたことを特徴とする。請求項9の発明は、
請求項5の発明を方法の観点から把握したもので、請求
項8記載のプログラム開発支援方法において、前記除去
するサブステップは、シナリオに埋め込んだ任意の同期
命令の作用を抑制し、前記抑制の前と後の各シナリオの
間で、前記依存関係を持つ動作が示し得る実行順序が同
じかどうかを判断し、前記実行順序が同じである場合
は、作用を抑制した前記同期命令を除去することを特徴
とする。請求項5,9の発明では、依存関係を持つ動作
の実行順序に影響しない同期命令が除去されるので、並
行プログラムの動作の自由度を拡張しながら、依存関係
を持つ動作の実行順序は正しく維持される。
According to a fifth aspect of the present invention, in the program development support apparatus according to the fourth aspect, the parallelizing means suppresses an action of an arbitrary synchronization instruction embedded in a scenario when removing the redundant synchronization instruction. Then, between each scenario before and after the suppression, it is determined whether or not the execution order that the operation having the dependency relationship can show is the same, and if the execution order is the same, The method is characterized by being configured to remove an instruction. The invention of claim 9 is
The invention of claim 5 is grasped from a method point of view, wherein in the program development support method according to claim 8, the removing sub-step suppresses an action of an arbitrary synchronization instruction embedded in a scenario, and It is determined whether or not the execution order that the operation having the dependency relationship can indicate is the same between the previous and subsequent scenarios, and if the execution order is the same, the synchronous instruction whose operation has been suppressed is removed. It is characterized by. According to the fifth and ninth aspects of the present invention, since the synchronous instruction which does not affect the execution order of the operation having the dependency is removed, the execution order of the operation having the dependency is correctly corrected while expanding the degree of freedom of the operation of the concurrent program. Will be maintained.

【0013】請求項6の発明は、シナリオを用いて並行
プログラムの開発を支援するプログラム開発方法におい
て、相互に依存関係を有する部分を含む2つのシナリオ
が等価かどうかを判定するステップを含み、前記判定す
るステップは、2つのシナリオそれぞれについて、前記
依存関係を有する部分がいつ実行されたかを表すカウン
ティングトレースの集合を計算するサブステップと、計
算された前記2つの集合を比較し、2つの集合が等しい
場合に2つのシナリオが等価であると判断するサブステ
ップと、を含むことを特徴とするプログラム開発支援方
法。並行プログラムの開発において、シナリオが等価か
どうかの判定は、シナリオの正規化や冗長な同期命令の
除去などで用いることができる。請求項6の発明では、
この等価性の判定を、依存関係を有する部分がいつ実行
されたかを表すカウンティングトレースに基づいて行
う。ここで、並行プログラムにおいて、依存関係を有す
る部分同士は実行順序が変わるとバグの原因になり得る
が、それ以外の部分は実行順序を自由にしてもバグの原
因とはならず、逆に並行プログラムの柔軟性を高める効
果がある。請求項6の発明では、等価性の判定において
依存関係を有する部分だけを問題とすることによって、
バグの発生を防止する一方、バグを生じない部分につい
ては実行順序の自由度を増やして並行プログラムの柔軟
性を高めることができる。
According to a sixth aspect of the present invention, there is provided a program development method for supporting the development of a concurrent program using a scenario, the method further comprising the step of determining whether two scenarios including mutually dependent parts are equivalent. The determining step includes, for each of the two scenarios, a sub-step of calculating a set of counting traces that indicates when the dependent part has been executed, and comparing the calculated two sets. And a sub-step of determining that the two scenarios are equivalent when they are equal to each other. In the development of a concurrent program, the determination of whether or not scenarios are equivalent can be used for normalization of scenarios, removal of redundant synchronization instructions, and the like. In the invention of claim 6,
The determination of the equivalence is performed based on the counting trace indicating when the part having the dependency is executed. Here, in the concurrent program, if the execution order of the parts having a dependency is changed, a bug may be caused. However, if the execution order is freely set, the execution of the execution order does not cause a bug. This has the effect of increasing the flexibility of the program. According to the sixth aspect of the present invention, only the parts having a dependency in the determination of the equivalence are considered as problems.
While preventing the occurrence of bugs, the flexibility of the concurrent program can be enhanced by increasing the degree of freedom of the execution order for the portions that do not cause bugs.

【0014】[0014]

【発明の実施の形態】次に、本発明の実施の形態である
プログラム開発支援装置(以下「本装置」という)につ
いて、図面を参照して説明する。
DESCRIPTION OF THE PREFERRED EMBODIMENTS Next, a program development support device (hereinafter referred to as "the present device") according to an embodiment of the present invention will be described with reference to the drawings.

【0015】〔1.構成〕 〔1−1.本装置を実現するためのコンピュータシステ
ムの構成〕まず、本装置を実現するためのコンピュータ
システムの構成例を図1に示す。このコンピュータシス
テムは、並行プログラムを構成する各プロセスを同時並
行的に実行するためのN台のプロセッサ211,21
2,…,21Nを有し、これら各プロセッサ211,2
12,…,21Nには、I/Oインターフェース22を
介して、共有メモリ23及び周辺装置が接続されてい
る。周辺装置としては、入力装置24、出力装置25及
び外部記憶装置26を用いる。
[1. Configuration] [1-1. Configuration of Computer System for Realizing the Present Apparatus] First, FIG. 1 shows a configuration example of a computer system for realizing the present apparatus. This computer system includes N processors 211 and 21 for simultaneously and concurrently executing processes constituting a parallel program.
,..., 21N.
, 21N, a shared memory 23 and peripheral devices are connected via an I / O interface 22. As the peripheral devices, an input device 24, an output device 25, and an external storage device 26 are used.

【0016】上記の周辺装置のうち、入力装置4は、各
種コマンドやデータの入力をする装置で、キーボードと
マウスなどのポインティングデバイスを有する。また、
出力装置5は、CRTディスプレイなどの表示画面に、
ソースプログラムやデバッグ状況に関する情報等をテキ
スト又はグラフィック表示することにより、ユーザに提
示する装置である。なお、出力装置としては、他にプリ
ンタなどを適宜用いることができる。ユーザは、これら
入力装置4及び出力装置5を用いて、対話的にコンピュ
ータを操作することができる。また、外部記憶装置6
は、磁気ディスクや光磁気ディスクなどの記録媒体を用
いて、ソースプログラムやデバッグ状況に関する情報な
どを書き込み及び読み出す装置である。
Among the above peripheral devices, the input device 4 is a device for inputting various commands and data, and has a keyboard and a pointing device such as a mouse. Also,
The output device 5 is provided on a display screen such as a CRT display,
This is a device that presents to a user by displaying text or graphic information on a source program, debugging status, and the like. In addition, a printer or the like can be used as appropriate as the output device. The user can interactively operate the computer using the input device 4 and the output device 5. Also, the external storage device 6
Is a device that writes and reads a source program and information related to a debugging situation using a recording medium such as a magnetic disk or a magneto-optical disk.

【0017】本装置は、上記のようなコンピュータシス
テムの各種ハードウェア資源をソフトウェアで制御する
ことによって実現されるが、コンピュータシステムや前
記ソフトウェアの具体的な構成は種々考えられるので、
以下、本装置の各機能を実現する仮想的回路ブロックを
用いて本実施形態を説明する。
The present apparatus is realized by controlling various hardware resources of the computer system as described above by software. However, since the computer system and the specific configuration of the software can be variously considered,
Hereinafter, the present embodiment will be described using virtual circuit blocks that realize the functions of the present apparatus.

【0018】〔1−2.機能ブロック図に基づく構成〕
すなわち、図2は本装置の構成を示す機能ブロック図で
ある。この図に示すように、本装置は、編集手段1と、
作成手段3と、分解手段5と、を有する。このうち編集
手段1は、第1の並行プログラム2を作成及び修正する
ための手段1である。また、作成手段3は、第1の並行
プログラム2に基づいて実行のシナリオを作成し、シナ
リオを表すシナリオ情報4を提供する手段である。ま
た、分解手段5は、正しいと判定されるシナリオを、ル
ープを含まないブロックに階層的に分解することによっ
て、ブロックに分解されたシナリオをブロック間の構造
と共に表す構造的シナリオ情報6を提供する手段であ
る。
[1-2. Configuration based on functional block diagram]
That is, FIG. 2 is a functional block diagram showing the configuration of the present apparatus. As shown in this figure, the present apparatus includes an editing unit 1,
It has a creating unit 3 and a disassembling unit 5. The editing unit 1 is a unit 1 for creating and modifying the first parallel program 2. The creating unit 3 creates an execution scenario based on the first concurrent program 2 and provides scenario information 4 representing the scenario. Further, the decomposing unit 5 provides structural scenario information 6 that hierarchically decomposes a scenario determined to be correct into blocks that do not include a loop and that represents the scenario decomposed into blocks together with the structure between blocks. Means.

【0019】また、本装置は、解析手段12と、並行化
手段7と、統合化手段8と、生成手段10と、を有す
る。このうち解析手段12は、第1の並行プログラム2
を解析することによって第1の並行プログラム2の各部
分間に存在する依存関係を抽出し、この依存関係を表す
解析情報13を提供する手段である。また、並行化手段
7は、分解されたシナリオを、抽出された依存関係に対
応する部分間の実行順序を維持しながら、ブロックを単
位として複数のプロセスに割り当てることによって並行
化する手段である。また、統合化手段8は、解析情報1
3を参照しながら、各プロセスに割り当てられたシナリ
オをプロセスごとに統合することによって、統合された
プロセスごとのシナリオを表すローカルシナリオ情報9
を提供する手段である。また、生成手段10は、ローカ
ルシナリオ情報9に基づいて第2の並行プログラム11
を生成する手段である。
The apparatus has an analyzing means 12, a parallelizing means 7, an integrating means 8, and a generating means 10. The analysis means 12 includes the first parallel program 2
Is a means for extracting the dependency existing between the respective parts of the first concurrent program 2 by analyzing the information, and providing analysis information 13 representing the dependency. The parallelizing means 7 is a means for parallelizing the decomposed scenarios by allocating them to a plurality of processes in units of blocks while maintaining the execution order between the parts corresponding to the extracted dependencies. Further, the integrating means 8 includes the analysis information 1
The local scenario information 9 representing the integrated scenario for each process by integrating the scenarios assigned to each process for each process while referring to FIG.
It is a means to provide. Further, the generation means 10 generates a second parallel program 11 based on the local scenario information 9.
Is a means for generating

【0020】〔2.全体的な処理手順〕上記のような構
成を有する本装置における全体的な処理手順を図3のフ
ローチャートに示す。 〔2−1.第1の並行プログラムの作成〕まず、ユーザ
は、編集手段1を用いて、第1の並行プログラム2を作
成する(ステップ1)。ここで、並行プログラムを作成
するプログラミング言語は自由に選択することができ、
例えば、Javaなどの並行プログラミング言語で記述
してもよいし、あるいはC言語などの逐次プログラミン
グ言語と、μ−ITRONのようなオペレーティングシ
ステムのシステムコールとを組み合わせることによって
記述してもよい。
[2. Overall Processing Procedure] FIG. 3 is a flowchart showing an overall processing procedure in the apparatus having the above-described configuration. [2-1. Creation of First Concurrent Program] First, the user creates a first concurrent program 2 using the editing means 1 (step 1). Here, the programming language for creating the concurrent program can be freely selected,
For example, it may be described in a concurrent programming language such as Java, or may be described by combining a sequential programming language such as C language with a system call of an operating system such as μ-ITRON.

【0021】〔2−2.シナリオの作成〕次に、作成手
段3によって、第1の並行プログラム2を実行した場合
のシナリオを作成する(ステップ2)。ここで、シナリ
オとは、プログラムの挙動を、実行されるプログラム中
の命令からなる逐次的な列として表現したものである。
[2-2. Creation of Scenario] Next, the creation means 3 creates a scenario when the first concurrent program 2 is executed (step 2). Here, a scenario represents the behavior of a program as a sequential sequence of instructions in the program to be executed.

【0022】このようなシナリオを作成するには、例え
ば、テストケースを与えて第1の並行プログラム2を仮
想的に実行し、その実行履歴をシナリオとしたり、第1
の並行プログラム2が示し得る各部分間の実行順序を、
枝別れするグラフの各経路として表し、許容できない実
行順序に対応する経路をグラフから削除し、その結果と
して得られたグラフをシナリオ情報とするなどが考えら
れる。ここで、グラフに含まれる各経路が個々のシナリ
オに対応する。
To create such a scenario, for example, a test case is given to virtually execute the first concurrent program 2 and its execution history is used as a scenario.
The execution order between each part which can be shown by the concurrent program 2 of
It is conceivable that the path is represented as each path of a branching graph, a path corresponding to an unacceptable execution order is deleted from the graph, and the resulting graph is used as scenario information. Here, each route included in the graph corresponds to an individual scenario.

【0023】また、このようなシナリオを表現する具体
的な形式としては、例えば、状態遷移図形式のシナリオ
グラフが考えられる。シナリオグラフは、並行プログラ
ムによって実現されるシステムの全体的な状態、すなわ
ちグローバル状態をノードとし、プログラムの各動作は
ノードを接続するアークで表した有向グラフである。こ
こで、複数のプロセスから構成された並行プログラムに
おいて、グローバル状態とは、個々のプロセスがどの位
置を実行しているかの状態及び各プロセスのメモリの状
態を組み合わせたものである。以上のように作成された
シナリオは、シナリオの内容を表すシナリオ情報4とし
て、後のステップに提供される。すなわち、本出願にお
いて、「シナリオ」というときは、プログラムが示し得
るある1つの命令の列であり、「シナリオグラフ」とい
うときは1又は2以上のシナリオの集合を一体に表した
ものである。この場合、シナリオグラフ中の1つの経路
(パス)が1つのシナリオを表す。また、「シナリオ情
報」は、上記のように1又は2以上のシナリオの集合を
シナリオグラフなどの形式で表した情報である。
As a specific format for expressing such a scenario, for example, a scenario graph in a state transition diagram format can be considered. The scenario graph is a directed graph in which the overall state of the system realized by the concurrent program, that is, the global state, is a node, and each operation of the program is represented by an arc connecting the nodes. Here, in a parallel program composed of a plurality of processes, the global state is a combination of the state of which position each process is executing and the state of the memory of each process. The scenario created as described above is provided to later steps as scenario information 4 representing the content of the scenario. That is, in the present application, a “scenario” is a sequence of one instruction that can be indicated by a program, and a “scenario graph” represents a set of one or two or more scenarios. In this case, one path (path) in the scenario graph represents one scenario. The “scenario information” is information that represents a set of one or more scenarios in a format such as a scenario graph as described above.

【0024】〔2−3.シナリオの挙動の確認〕このよ
うに作成されたシナリオに対して、ユーザが、シナリオ
で表された並行プログラム2の挙動が仕様通りであって
正しいことを確認する(ステップ3)。この確認は、従
来から知られたプログラムのテスト方法を用いればよ
い。正しくないシナリオがある場合は(ステップ4)、
シナリオの元となった第1の並行プログラム2にバグが
あるので、編集手段1を用いて第1の並行プログラム2
を修正したうえ(ステップ1)、再度シナリオを作成し
て(ステップ2)、正しいことを確認する。シナリオが
正しいことが確認された場合(ステップ4)、さらにシ
ナリオを作成するときはシナリオの作成(ステップ2)
に戻り、シナリオの作成を終了するときは次のステップ
6に進む。
[2-3. Confirmation of Scenario Behavior] For the scenario created in this way, the user confirms that the behavior of the concurrent program 2 represented by the scenario is as specified and correct (step 3). This confirmation may be performed by using a conventionally known program test method. If there is an incorrect scenario (step 4),
Since there is a bug in the first concurrent program 2 which is the source of the scenario, the first concurrent program 2
Is corrected (step 1), a scenario is created again (step 2), and it is confirmed that the scenario is correct. If it is confirmed that the scenario is correct (step 4), to create a further scenario, create the scenario (step 2)
When the creation of the scenario ends, the process proceeds to the next step 6.

【0025】このようにして、複数のシナリオを順次作
成する場合、既に作成したシナリオと新たに作成したシ
ナリオで相違している経路を、既に作成したシナリオに
付加することによって、複数のシナリオを一体化して単
一のシナリオ情報とすることができる。例えば、シナリ
オグラフでは、2つのシナリオの後半でプログラムの部
分間の実行順序が異なっている場合、シナリオグラフを
途中から2つに枝別れさせ、異なっているそれぞれの順
序に対応した経路を枝別れの先に続けることによって、
前記2つのシナリオを単一のシナリオ情報で表すことが
できる。また、複数のシナリオを作成する場合は、1つ
のシナリオを作成するごとにその正しさを確認してもよ
いが、連続して複数作成した後で、正しさの確認を一括
して行ってもよい。
As described above, when a plurality of scenarios are sequentially created, a plurality of scenarios are integrated by adding a different route between the already created scenario and the newly created scenario to the already created scenario. Into single scenario information. For example, in the scenario graph, when the execution order between the program parts is different in the latter half of two scenarios, the scenario graph is branched into two from the middle, and the paths corresponding to the different orders are branched. By continuing beyond
The two scenarios can be represented by single scenario information. When a plurality of scenarios are created, the correctness may be checked each time a single scenario is created. However, after a plurality of scenarios are continuously created, the correctness may be checked collectively. Good.

【0026】〔2−4.依存関係の抽出〕上記のように
シナリオ情報で表される各シナリオの正しさが確認さ
れ、第1の並行プログラム2にバグがないと考えられる
場合は、ステップ6において、解析手段12が、第1の
並行プログラム2を解析することによって、第1の並行
プログラム2を構成する各命令間の依存関係を抽出す
る。
[2-4. Extraction of Dependency] As described above, the correctness of each scenario represented by the scenario information is confirmed, and if it is considered that there is no bug in the first concurrent program 2, in step 6, the analyzing means 12 By analyzing the first concurrent program 2, a dependency between instructions constituting the first concurrent program 2 is extracted.

【0027】ここで、依存関係とは、プログラムの異な
った部分同士が相手を前提とする関係であり、データ依
存と制御依存とがある。また、依存関係は、プログラム
の部分間に相互に存在する、すなわち対称性を持つ関係
である。このような依存関係がある2つの命令について
は、その実行順序によって計算結果が異なる可能性があ
るため、一方が他方よりも先行して実行されなければな
らないという制約が存在する。このような制約を先行制
約と呼ぶ。このような依存関係および先行制約を抽出す
るためのアルゴリズムは既に公知であり、具体的には文
献「本多弘樹:自動並列化コンパイラ、情報処理Vol.3
4.No.9,1993」などに紹介されている。
Here, the dependency relationship is a relationship in which different parts of a program are based on each other, and there are data dependency and control dependency. A dependency is a relationship that exists mutually between program parts, that is, has a symmetry. For two instructions having such a dependency, there is a possibility that the calculation result will differ depending on the execution order, and there is a restriction that one must be executed before the other. Such a constraint is called a preceding constraint. Algorithms for extracting such dependencies and precedence constraints are already known, and are specifically described in the document "Hiroki Honda: Automatic Parallelizing Compiler, Information Processing Vol.3
4.No.9,1993 ”.

【0028】すなわち、まず、どのプロセスが実行され
るかが、プロセス間の条件分岐で決定されず、全てのプ
ロセスが実行される場合、依存関係はプロセス間のデー
タ依存を求めることによって検出できる。データ依存と
は、一方の命令が、他方の命令によって提供されるデー
タに依存する関係である。例えば、図4(a)に示すよ
うに、共有変数MにXの値を書き込む命令write(M,X)
と、同じ共有変数Mからデ−タを読み出す命令Y=read
(M) の間には、直接的なデータ依存が存在する。
That is, first, which process is to be executed is not determined by the conditional branch between processes, and when all processes are executed, the dependency can be detected by obtaining data dependency between processes. Data dependence is a relationship in which one instruction depends on data provided by the other instruction. For example, as shown in FIG. 4A, an instruction write (M, X) for writing the value of X to the shared variable M
And an instruction Y = read for reading data from the same shared variable M
There is a direct data dependency between (M).

【0029】また、図4(b)に示すように、上記の共
有変数Mに書き込まれた値が一旦別の変数M2にコピー
され、読み出す命令はこの変数M2からデータを読み出
す場合、書き込む命令と読み出す命令の間には、間接的
なデータ依存が存在する。このような直接的なデータ依
存や間接的なデータ依存は、各命令がどの変数について
どのような処理を行っているかを辿ることによって抽出
することができる。
As shown in FIG. 4B, the value written in the shared variable M is temporarily copied to another variable M2, and the read command is the same as the write command when data is read from this variable M2. There are indirect data dependencies between the read instructions. Such direct data dependence and indirect data dependence can be extracted by tracing which processing is performed on which variable by each instruction.

【0030】また、どのプロセスが実行されるかが、プ
ロセス間の条件分岐で決定される場合は、前記のデータ
依存に加えて、制御依存も求める必要がある。制御依存
とは、一方のプロセスでの条件の評価が真になるまで、
他方のプロセスの実行を開始できないという依存関係で
ある。このような制御依存は、各プロセスに含まれる条
件分岐命令と各プロセスとの関係を調べることによって
検出する。
When a process to be executed is determined by a conditional branch between processes, it is necessary to obtain control dependence in addition to the data dependence. Control dependence means that until one condition evaluates to true,
This is a dependency in which the execution of the other process cannot be started. Such control dependence is detected by examining the relationship between the conditional branch instruction included in each process and each process.

【0031】前記のような、並行プログラムCの命令間
の依存関係の集合をD(C)と表す。すなわち、(t
i,tj)∈D(C)ということは、命令tiとtjの
間に依存関係が存在することを意味する。また、与えら
れた並行プログラムCが示す動作列θにおいて、動作間
の先行制約は次のように定義される。すなわち、先行制
約を記号”<<”で表し、シナリオθのi番目の動作を
c(θ,i)のように表す場合、 c(θ,i) << c( θ,j)iff (θ[i],θ[j])∈D(C)and
i<j である。これは、シナリオθのi番目とj番目の動作が
依存関係を持ち、かつ、iがjより大きければ(先行す
るなら)i番目の動作はj番目の動作に対して先行しな
ければならないという先行制約が存在することを意味す
る。なお、本発明で「動作」とは、具体的にはプログラ
ムの命令を意味し、例えば、「a=b−1」のような演
算と代入の命令や「a==b」のような評価などが命令
の単位となる。以上のように抽出された依存関係は、依
存関係を表す解析情報13として、後のステップに提供
される。
A set of dependencies between instructions of the concurrent program C as described above is represented as D (C). That is, (t
(i, tj) ∈D (C) means that a dependency exists between the instructions ti and tj. Further, in the operation sequence θ indicated by the given concurrent program C, the precedence constraint between the operations is defined as follows. That is, when the precedence constraint is represented by the symbol “<<” and the i-th operation of the scenario θ is represented as c (θ, i), c (θ, i) << c (θ, j) iff (θ [i], θ [j]) ∈D (C) and
i <j. This means that the i-th and j-th actions in scenario θ have a dependency, and if i is greater than j (preceding), the i-th action must precede the j-th action. Indicates that a precedence constraint exists. In the present invention, the “operation” specifically means a program instruction, for example, an operation and substitution instruction such as “a = b−1” or an evaluation instruction such as “a == b”. Is the unit of instruction. The dependency extracted as described above is provided to later steps as analysis information 13 representing the dependency.

【0032】〔2−5.シナリオの分解〕正しいことが
確認されたシナリオ情報は、分解手段5によって、ルー
プを含まないブロックに階層的に分解される(ステップ
7)。ここで、一般に、並行プログラムは永続的に動き
続ける場合が多く、並行プログラムに基づくシナリオは
ループを持つ場合が多い。このため、シナリオの分解で
は、ループを含まない部分をブロックとし、ループは、
このようなブロックの末尾と先頭をつなぐ経路として、
ブロック自体とは区別する。また、ループは多重になっ
ている場合があるので、分解は階層的に行われる。
[2-5. Scenario Decomposition] The scenario information confirmed to be correct is hierarchically decomposed into blocks not including a loop by the decomposing means 5 (step 7). Here, in general, concurrent programs often continue to run forever, and scenarios based on concurrent programs often have loops. For this reason, in the decomposition of the scenario, the part that does not include the loop is a block, and the loop is
As a path connecting the end and the beginning of such a block,
Distinguish from the block itself. Further, since loops may be multiplexed, decomposition is performed hierarchically.

【0033】このように分解されるもとのシナリオが、
有向グラフであるシナリオグラフとして表現されている
場合、分解でできる個々のブロック内は、下位のブロッ
クをノードとするアサイクリックなグラフとして表現で
きる。このアサイクリックなグラフとは、ループを含ま
ないグラフである。例えば、図5(a)に示すシナリオ
グラフは、図5(b)に示すように、ループを含まない
ブロックB1とそれ以外の部分に分解され、このブロッ
クB1がさらに、ループを含まないブロックB2とそれ
以外の部分に分解される。このようにループを含まない
ブロックを、以下、アサイクリックブロックと呼ぶ。
The original scenario decomposed in this way is
When represented as a scenario graph, which is a directed graph, each block obtained by decomposition can be represented as an acyclic graph having lower blocks as nodes. This acyclic graph is a graph that does not include a loop. For example, as shown in FIG. 5B, the scenario graph shown in FIG. 5A is decomposed into a block B1 not including a loop and other portions, and this block B1 is further divided into a block B2 including no loop. And is decomposed into other parts. Such a block that does not include a loop is hereinafter referred to as an acyclic block.

【0034】また、分解されたシナリオは、図5(b)
のようなグラフで表現する以外に、このグラフと等価な
下記のような正規表現で表すことも可能である。 t14 + (t1(t2 t3 t4 +t7 t8(t12 t13 t14)* t9 t10 t1
1)t5 t6)* ここで、t1+t2は「t1又はt2」を表し、t1*
はt1の0回以上の繰り返しを表す。なお、シナリオを
分解する詳細な手順及び正規表現については後述する。
Further, the disassembled scenario is shown in FIG.
Instead of using a graph like this, it is also possible to use the following regular expression equivalent to this graph. t14 + (t1 (t2 t3 t4 + t7 t8 (t12 t13 t14) * t9 t10 t1
1) t5 t6) * Here, t1 + t2 represents “t1 or t2”, and t1 *
Represents 0 or more repetitions of t1. A detailed procedure for decomposing a scenario and a regular expression will be described later.

【0035】以上のようにシナリオを分解した結果とし
ては、各ブロックの内容を表す情報と、ブロック以外の
例えばループやブロック間の上位下位の関係を表す情報
が得られ、これらの情報を構造的シナリオ情報と呼ぶ。
すなわち、分解手段5からは構造的シナリオ情報6が、
後のステップに提供される。
As a result of decomposing the scenario as described above, information indicating the contents of each block and information indicating a higher order and lower order between blocks other than the block, such as a loop, are obtained. Called scenario information.
That is, the structural scenario information 6 is obtained from the disassembly unit 5.
Provided for later steps.

【0036】〔2−6.シナリオの並行化〕続いて、上
記のように分解されたシナリオを各ブロックごとに、複
数のプロセスに割り当てる処理、すなわち並行化を行な
う(ステップ8)。ここでは、プロセスの構造、例えば
用いるプロセスの数などは第一の並行プログラム2と同
じだと仮定するが、もちろん、プロセスの構造は任意に
設定することもできる。
[2-6. Parallelization of Scenario] Subsequently, a process of allocating the scenario decomposed as described above to a plurality of processes for each block, that is, parallelization is performed (step 8). Here, it is assumed that the structure of the process, for example, the number of processes to be used, is the same as that of the first concurrent program 2, but of course, the structure of the process can be arbitrarily set.

【0037】この並行化の際は、プログラム解析情報1
3によって表される命令間の依存関係を用いる。すなわ
ち、並行化とは、シナリオのなかで依存関係のない部分
同士を相互に並行に動かせるようにすることを意味す
る。例えば、あるシナリオでは直列関係(ab)にある
プロセスP1の命令aとプロセスP2の命令bにおい
て、aとbの間に依存関係がなければ、aとbを異なる
プロセスに割り当てることによって並行関係(a‖b)
にすることができる。一方、依存関係を持つ命令同士に
ついては、依存関係から導出される先行制約を満足する
ために、並行化の際、各命令の前後に同期命令を挿入す
る。
At the time of this parallelization, the program analysis information 1
3 is used. That is, parallelization means that parts having no dependency in a scenario can be moved in parallel with each other. For example, in one scenario, in the instruction a of the process P1 and the instruction b of the process P2 in the serial relationship (ab), if there is no dependency between a and b, the parallel relationship (a) is assigned by assigning a and b to different processes. a‖b)
Can be On the other hand, for instructions having a dependency, synchronous instructions are inserted before and after each instruction during parallelization in order to satisfy the preceding constraint derived from the dependency.

【0038】また、並行化手段7は、このように並行化
されたシナリオから冗長な同期命令を除去する。ここ
で、同期命令が冗長か否かの基準は、シナリオからその
同期命令を除去しても、除去されたシナリオを並行プロ
グラムとみなして生成されるシナリオの集合が、除去前
のシナリオを並行プログラムとみなして生成されるシナ
リオの集合と等価であるか否かであり、除去しても等価
な同期命令は冗長と判断する。このように等価の概念を
用いて冗長な同期命令を除去する詳細な手順は後述す
る。
The parallelizing means 7 removes redundant synchronization instructions from such parallelized scenarios. Here, the criterion for determining whether or not a synchronization instruction is redundant is that, even if the synchronization instruction is removed from the scenario, a set of scenarios generated by regarding the removed scenario as a concurrent program is the same as the scenario before the removal. It is determined whether or not it is equivalent to a set of scenarios generated assuming that the synchronous command is redundant even if it is removed. A detailed procedure for removing redundant synchronization instructions using the equivalent concept will be described later.

【0039】〔2−7.シナリオの統合化〕上記のよう
な並行化の結果、各プロセスには、それぞれ異なったブ
ロックから由来するシナリオの部分が、相互に別個独立
のまま割り当てられている状態となる。そこで、統合化
手段8が、各ブロックを単位として割り当てられている
シナリオを、プロセスごとに統合化する(ステップ
9)。この統合化の詳細な手順は後述する。また、統合
化の結果としては、統合化されたプロセスごとのシナリ
オを表すローカルシナリオ情報(9)が、後のステップ
に提供される。
[2-7. Integration of Scenarios] As a result of the parallelization as described above, a portion of a scenario originating from a different block is assigned to each process independently of each other. Therefore, the integrating means 8 integrates the scenarios assigned to each block as a unit for each process (step 9). The detailed procedure of this integration will be described later. Further, as a result of the integration, local scenario information (9) representing a scenario for each integrated process is provided to a later step.

【0040】〔2−8.第2の並行プログラムの生成〕
最後に、上記のように統合化されたプロセスごとのロー
カルシナリオ情報9から、生成手段10が、第二の並行
プログラム11を生成する(ステップ10)。ここで生
成される第二の並行プログラム11は、元となったシナ
リオ情報4で表されるシナリオおよびそのシナリオと等
価な挙動のみを再現するものであるから、ステップ2で
与えられたシナリオが正しければ(ステップ4)、この
第二の並行プログラムも正しいことが保証される。
[2-8. Generation of second concurrent program]
Finally, the generating means 10 generates the second concurrent program 11 from the local scenario information 9 for each process integrated as described above (step 10). Since the second parallel program 11 generated here reproduces only the scenario represented by the original scenario information 4 and the behavior equivalent to the scenario, the scenario given in step 2 is correct. If this is the case (step 4), it is guaranteed that this second concurrent program is also correct.

【0041】〔3.詳細な手順〕次に、シナリオが有向
グラフで与えられた場合を例にとり、上記に説明したス
テップ1〜10の手順のうち、シナリオの分解(ステッ
プ7)について詳細な手順を説明し、続いて、シナリオ
の並行化(ステップ8)及びシナリオの統合(ステップ
9)についても詳細な手順を説明する。
[3. Detailed Procedure] Next, taking a case where the scenario is given by a directed graph as an example, a detailed procedure of the decomposition of the scenario (Step 7) among the procedures of Steps 1 to 10 described above will be described. Detailed procedures will also be described for parallelizing scenarios (step 8) and integrating scenarios (step 9).

【0042】ここでは、与えられたシナリオは図5
(a)に示したようなシナリオグラフであり、このシナ
リオグラフのノ−ドは第1のプログラム2のグロ−バル
な実行状態を表し、ノード間のア−クが第1の並行プロ
グラム2内のt1やt14などの命令を表す。また、複
数のシナリオが1つのシナリオグラフによって表されて
いて、1つのシナリオはシナリオグラフ上の1つの経路
に対応するものとする。
Here, the given scenario is shown in FIG.
4A is a scenario graph as shown in FIG. 5A. The nodes of the scenario graph represent the global execution state of the first program 2, and the arc between nodes is within the first concurrent program 2. T1 and t14. Also, a plurality of scenarios are represented by one scenario graph, and one scenario corresponds to one route on the scenario graph.

【0043】〔3−1.シナリオの分解の詳細な手順〕 〔3−1−1.シナリオグラフの正規化〕シナリオグラ
フを分解するには、まず、ユーザの作成したシナリオグ
ラフSGから正規表現(regular expression)に変換され
たシナリオグラフSGr を作成する。ここで、正規表現
とは、ループ部分が0回以上の繰り返しをするというデ
ータの構造であり、正規表現でないシナリオグラフSG
から正規表現に変換されたシナリオグラフSGr を作成
することをシナリオグラフの正規化と呼ぶ。このとき、
SGとSGr は意味的に等価であることが保証できるよ
うにSGr を生成する。このように正規化されたシナリ
オグラフSGr はもとのSGと等価であるが、階層的な
構造を抽出することによって分解することが容易な構造
を有する。
[3-1. Detailed Procedure of Scenario Decomposition] [3-1-1. Normalization of Scenario Graph] In order to decompose a scenario graph, first, a scenario graph SGr converted from a scenario graph SG created by a user into a regular expression is created. Here, the regular expression is a data structure in which the loop part repeats 0 or more times, and is a scenario graph SG that is not a regular expression.
Generating a scenario graph SGr converted from a normal expression into a regular expression is called scenario graph normalization. At this time,
SGr is generated so that SG and SGr can be guaranteed to be semantically equivalent. The scenario graph SGr thus normalized is equivalent to the original SG, but has a structure that can be easily decomposed by extracting a hierarchical structure.

【0044】ここで、2つのシナリオが意味的に等価で
あることをシナリオ等価と呼び、また、2つのシナリオ
が等価である特徴を等価性と呼び、等価性を記号「==
=」で表す。この場合、等価性は次のように定義でき
る。すなわち、2つのシナリオθ1とθ2がシナリオ等
価である(θ1===θ2)とは下記の条件が成り立つ
ことである。 (1)任意のiに対して、あるjが存在して、c(θ1,i)
= c( θ2,j)であり、かつ任意のjに対して、あるiが
存在して、c(θ2,j) = c( θ1,i)である。 (2)任意のi1,i2に対して、あるj1,j2が存
在して、c(θ1,i1) = c(θ2,j1) かつc(θ1,i2) = c(θ
2,j2) かつc(θ1,i1) << c( θ1,i2) → c( θ2,j1) <<
c( θ2,j2))である。 (3)任意のj1,j2に対して、あるi1,i2が存
在して、c(θ1,i1) = c(θ2,j1) かつc(θ1,i2) = c(θ
2,j2) かつc(θ2,j1) << c( θ2,j2) → c( θ1,i1) <<
c( θ1,i2))である。
Here, the semantic equivalence of two scenarios is called scenario equivalence, the feature that two scenarios are equivalent is called equivalence, and the equivalence is represented by the symbol "==
= ”. In this case, equivalence can be defined as follows: That is, two scenarios θ1 and θ2 are scenario equivalent (θ1 === θ2) if the following condition is satisfied. (1) For any i, there exists a certain j, and c (θ1, i)
= c (θ2, j), and for any j, there exists a certain i, and c (θ2, j) = c (θ1, i). (2) For any i1, i2, there exists a certain j1, j2, and c (θ1, i1) = c (θ2, j1) and c (θ1, i2) = c (θ
2, j2) and c (θ1, i1) << c (θ1, i2) → c (θ2, j1) <<
c (θ2, j2)). (3) For any j1, j2, there exists a certain i1, i2, and c (θ1, i1) = c (θ2, j1) and c (θ1, i2) = c (θ
2, j2) and c (θ2, j1) << c (θ2, j2) → c (θ1, i1) <<
c (θ1, i2)).

【0045】このようなシナリオ等価を前提として、シ
ナリオをグラフで表したシナリオグラフが等価であるこ
とをシナリオグラフ等価と呼ぶ。そして、2つのシナリ
オグラフSG1=(S1,T1,δ1,s01)とSG
2=(S2,T2,δ2,s02)に対して、SG1と
SG2がシナリオグラフ等価である(SG1===SG
2) とは下記の条件が成り立つことである。すなわち、
任意のSG1のシナリオθ1に対して、あるSG2のシ
ナリオθ2が存在して、θ1===θ2であり、かつ任
意のSG2のシナリオθ2に対して、あるSG1のシナ
リオθ1が存在して、θ1 ===θ2である。
On the premise of such scenario equivalence, the fact that scenario graphs representing scenarios are equivalent is called scenario graph equivalence. Then, two scenario graphs SG1 = (S1, T1, δ1, s01) and SG
For 2 = (S2, T2, δ2, s02), SG1 and SG2 are equivalent to a scenario graph (SG1 === SG
2) is that the following condition is satisfied. That is,
For an arbitrary SG1 scenario θ1, there is a certain SG2 scenario θ2, θ1 === θ2, and for an arbitrary SG2 scenario θ2, there is a certain SG1 scenario θ1 and θ1 === θ2.

【0046】次に、与えられたシナリオグラフを、上記
のような等価性を維持しながら正規化する手順の一例を
示す。まず、与えられたシナリオグラフから、全く実行
されない場合があるループを、分岐構造などに基づいて
検出する。次に、そのループの中で、そのループが実行
されない場合も実行されるパスと共有しているアークを
検出する。検出されたアークと同じアークを、当該ルー
プに専属のものと持たせることによって、ループを他の
部分から独立させる。
Next, an example of a procedure for normalizing a given scenario graph while maintaining the above equivalence will be described. First, from a given scenario graph, a loop that may not be executed at all is detected based on a branch structure or the like. Next, in the loop, even if the loop is not executed, an arc shared with the path to be executed is detected. The loop is made independent from other parts by making the same arc as the detected arc exclusive to the loop.

【0047】より具体的には、シナリオグラフは有限オ
−トマトンであり、シナリオグラフの正規化に関して
は、有限オ−トマトンから等価な正規表現を生成する公
知のアルゴリズムを用いる(参考文献:福村、稲垣/オ
−トマトン・形式言語理論と計算論、岩波書店、198
2)。なお、このような等価な正規表現に変換されたシ
ナリオグラフは、ループとそれ以外の部分が明確に区分
されているので、階層的な構造の抽出が容易である。
More specifically, the scenario graph is a finite automaton, and for normalization of the scenario graph, a known algorithm for generating an equivalent regular expression from the finite automaton is used (references: Fukumura, Inagaki / Automaton, Formal Language Theory and Computational Theory, Iwanami Shoten, 198
2). In the scenario graph converted into such an equivalent regular expression, since a loop and other parts are clearly separated, it is easy to extract a hierarchical structure.

【0048】〔3−1−2.ブロックへの階層的分解〕
上記のような正規化に続いて、正規なシナリオグラフS
Gr を図5(b)に示すように、ループを含まないブロ
ックに階層的に分解する。このような分解で得られる階
層構造に含まれる各階層では、シナリオは下位のブロッ
クをノ−ドとし、ル−プを含まないサブグラフとして表
現できる。
[3-1-2. Hierarchical decomposition into blocks)
Following the normalization as described above, the normal scenario graph S
Gr is hierarchically decomposed into blocks that do not include a loop, as shown in FIG. In each of the hierarchies included in the hierarchical structure obtained by such decomposition, the scenario can be represented as a subgraph that does not include loops, with the lower blocks as nodes.

【0049】すなわち、上記のように正規化されたシナ
リオを分解するには、シナリオから最も大きなループを
探し出し、そのループを、ループを含まないブロック
と、そのブロックの末尾と先頭をつなぐ経路とに分け
る。そして、このように作られたブロックから次に大き
なループを探し出し、このような手続きを、ループが見
つからなくなるまで階層的に繰り返せばよい。例えば、
図5(a)のシナリオが与えられた場合、最大のループ
としてt1−t2−t3−t4−t5−t6を含むルー
プ構造が取り出され、図5(b)に示すように、この部
分がブロックB1となる。さらに、ブロックB1の中か
らループt12−t13−t14が取り出され、この部
分がブロックB2となる。
That is, in order to decompose the scenario normalized as described above, the largest loop is found from the scenario, and the loop is divided into a block that does not include the loop and a path that connects the end and the beginning of the block. Separate. Then, the next largest loop is searched for from the block thus created, and such a procedure may be repeated hierarchically until no loop is found. For example,
When the scenario shown in FIG. 5A is given, a loop structure including t1-t2-t3-t4-t5-t6 is extracted as the largest loop, and as shown in FIG. B1. Further, a loop t12-t13-t14 is extracted from the block B1, and this portion becomes a block B2.

【0050】〔3−2.シナリオの並行化の詳細な手
順〕シナリオの並行化(ステップ8)では、上記のよう
な分解で得られた各階層のアサイクリックブロックごと
に、下記の手順で並行化を行なう。これは、ル−プを含
む場合とそうでない場合を統一的な手順で並行化するこ
とは困難だからである。なお、従来の、ス−パ−コンピ
ュ−タのコンパイラにおける逐次プログラム並列化にお
いても同様のアプロ−チが採用されている(参考文献:
M. Girkar and C.D. Polychronopoulos, Automatic Ext
raction of Functional Parallelismfrom Ordinary Pro
grams, IEEE Trans. on Parallel and Distributed Sys
tems,Vol.3, No.2, 1992)。
[3-2. Detailed Procedure for Scenario Parallelization] In the scenario parallelization (step 8), the following procedure is performed for each acyclic block of each layer obtained by the above-described decomposition. This is because it is difficult to parallelize the case including the loop and the case not including it in a uniform procedure. A similar approach has been adopted in the conventional parallelization of a sequential program in a supercomputer compiler (references:
M. Girkar and CD Polychronopoulos, Automatic Ext
raction of Functional Parallelism from Ordinary Pro
grams, IEEE Trans.on Parallel and Distributed Sys
tems, Vol. 3, No. 2, 1992).

【0051】〔3−2−1.同期動作の挿入〕例えば、
アサイクリックブロックを構成するプロセスP1の命令
t11とプロセスP2の命令t21の間に依存関係がな
ければ、これら2つの命令t11とt21は、それぞれ
プロセスに割り当てることによって並行関係(t11‖
t21)にすることができる。依存関係のない2つのブ
ロックについても同様である。なお、各命令は、第1の
並行プログラム2においてどのプロセスに所属するかが
決まっているので、シナリオの並行化では、各命令をそ
れぞれ所属するプロセスに射影することになる。依存関
係のある直列関係の命令やブロックを並行化したり、分
岐を含むブロックを並行化する場合は、次のように同期
命令を用いる。
[3-2-1. Synchronous operation insertion)
If there is no dependency between the instruction t11 of the process P1 and the instruction t21 of the process P2 that constitute the acyclic block, these two instructions t11 and t21 are assigned to the respective processes so that the parallel relationship (t11‖
t21). The same applies to two blocks having no dependency. It is to be noted that to which process each instruction belongs in the first concurrent program 2 is determined, so in the parallelization of the scenario, each instruction is projected to the process to which each instruction belongs. When parallelizing instructions or blocks having a serial relationship having a dependency or parallelizing a block including a branch, a synchronous instruction is used as follows.

【0052】まず、依存関係のある直列関係の命令やブ
ロックの間に同期命令si を挿入する。例えば、相互に
依存関係を持つ動作t11とt21が、シナリオのある
ブロックで直列しているものとする(図6(a))。そ
して、動作t11とt21の間の依存関係に基づいて、
動作t11が動作t21に先行しなければならないとい
う先行制約が存在するものとする。この場合、直列して
いる動作t11とt12の間に同期命令s1を挿入する
ことによって t11 t21 → t11 s1 t21 とする(図6(b))。また、例えば、ブロックB1と
B2の間に同様の先行制約がある場合も、同期命令s1
を挿入して B1 B2 → B1 s1 B2 とする。
First, a synchronization instruction si is inserted between serially dependent instructions and blocks having a dependent relationship. For example, it is assumed that operations t11 and t21 having a mutual dependency are serially connected in a block having a scenario (FIG. 6A). Then, based on the dependency between operations t11 and t21,
It is assumed that there is a precedence constraint that the operation t11 must precede the operation t21. In this case, by inserting the synchronization instruction s1 between the serial operations t11 and t12, t11 t21 → t11 s1 t21 (FIG. 6B). Also, for example, when there is a similar preceding constraint between the blocks B1 and B2, the synchronization instruction s1
To make B1 B2 → B1 s1 B2.

【0053】また、各分岐にも同期命令を挿入する。例
えば、図7(a)の例では、分岐命令による動作t11
の内容に応じて、動作t12−t13を含む左側の経路
と、動作t21−t22を含む右側の経路とに、動作列
が分岐する。この場合、図7(b)に示すように、それ
ぞれの経路へ分岐する部分に同期命令s1及びs2を挿
入し、 t11 (t12 t13 + t21 t22) →t11 (s1 t12 t13 + s2 t21
t22) とする。また、例えば、ブロックB1における分岐の動
作に基づいてブロックB2とB3とに分岐するような場
合も、それぞれの経路へ分岐する部分に、同様に同期命
令s1及びs2を挿入し、 B1 (B2 + B3) → B1 (s1 B2 + s2 B3) とする。
Also, a synchronization instruction is inserted into each branch. For example, in the example of FIG.
The operation sequence branches into a path on the left including the operations t12-t13 and a path on the right including the operations t21-t22 according to the content of the operation t12-t13. In this case, as shown in FIG. 7 (b), the synchronization instructions s1 and s2 are inserted into the parts branching to the respective paths, and t11 (t12 t13 + t21 t22) → t11 (s1 t12 t13 + s2 t21)
t22). Also, for example, in the case of branching into blocks B2 and B3 based on the branching operation in block B1, synchronization instructions s1 and s2 are similarly inserted into portions branching to respective paths, and B1 (B2 + B3) → B1 (s1 B2 + s2 B3).

【0054】〔3−2−2.プロセスへの射影〕次に、
上記のように同期命令を挿入したシナリオを各プロセス
に射影する。ここで、射影(projection)とは、各プロセ
スにシナリオの一部を割り当てることである。ここで、
B|はブロックBのプロセスPへの射影を意味する。
[3-2-2. Projection to process)
The scenario in which the synchronization command is inserted as described above is projected to each process. Here, "projection" means to assign a part of a scenario to each process. here,
B | P means the projection of block B onto process P.

【0055】例えば、図6(b)では、同期命令s1を
挿入したシナリオに動作t11とt21が含まれている
が、このうち動作t11をあるプロセスP1に割り当
て、動作t21を別のプロセスP2に割り当てる場合、
図6(c)に示すように、プロセスP1では動作t11
に続けて同期命令s1を割り当て、プロセスP2では動
作t21の前に同期命令s1を割り当て、 t11 s1 t21 → t11 s1 ‖s1 t21 とする。この場合、プロセスP2の同期命令s1は、プ
ロセスP1で同期命令s1が実行されるまで待ち状態と
なるので、プロセスP2の動作t21は必ずプロセスP
1の動作t11の実行終了を待って実行が開始される。
このため、動作t11とt21の実行順序は先行制約に
合致するように維持される。
For example, in FIG. 6B, the operations t11 and t21 are included in the scenario in which the synchronization instruction s1 is inserted, but the operation t11 is assigned to a certain process P1 and the operation t21 is assigned to another process P2. When assigning
As shown in FIG. 6C, in the process P1, an operation t11 is performed.
After that, in the process P2, the synchronous instruction s1 is allocated before the operation t21, so that t11 s1 t21 → t11 s1 ‖s1 t21. In this case, since the synchronization instruction s1 of the process P2 is in a waiting state until the synchronization instruction s1 is executed in the process P1, the operation t21 of the process P2 is always performed by the process P2.
The execution is started after the execution of the first operation t11 is completed.
Therefore, the execution order of the operations t11 and t21 is maintained so as to match the preceding constraint.

【0056】また、ブロックB1とB2の間に先行制約
がある場合も同様に、挿入されている同期命令s1を各
ブロックB1,B2と共に各プロセスに割り当てること
によって、 B1 s1 B2 → (B1|P1)s1(B2|P1) ‖(B1 |P2)s1(B2|
P2) とする。
Similarly, when there is a precedence constraint between the blocks B1 and B2, the inserted synchronous instruction s1 is assigned to each process together with the blocks B1 and B2, so that B1 s1 B2 → (B1 | P1 ) s1 (B2 | P1) ‖ (B1 | P2) s1 (B2 |
P2).

【0057】また、図7(b)では、同期命令s1及び
s2を挿入したシナリオに、動作t12−t13を含む
左側の経路と、動作t21−t22を含む右側の経路が
含まれているが、この2つの経路をそれぞれ別々のプロ
セスP1とP2に割り当てるものとする。この場合、図
7(c)に示すように、プロセスP1では、動作t11
による分岐のうち、プロセスP1で実行する左側の経路
に同期命令s1を挿入し、右側の経路は同期命令s2を
最後に終了するように構成する。プロセスP2では、こ
れと反対に、同期命令s1の経路は終了するように構成
し、同期命令s2に続けて動作t21以降の右側の経路
を構成することによって、 t11(s1 t12 t13 + s2 t21 t22) →t11(s1 t12 t13 + s
2)‖(s1 + s2 t21 t22) とする。この場合、プロセスP1で同期命令s1に続い
て動作t12以下が実行される場合は、プロセスP2は
同期命令s1で終了し、また、プロセスP2で同期命令
s2に続いて動作t21以下が実行される場合は、プロ
セスP1は同期命令s2で終了する。このため、プロセ
スP1とP2を併せて観察しても、図7(b)で示した
右側と左側の双方の経路が同時に実行されることはな
く、もとのシナリオに含まれていた分岐の構造が保存さ
れている。
In FIG. 7B, the scenario where the synchronization commands s1 and s2 are inserted includes a left path including the operations t12 and t13 and a right path including the operations t21 and t22. It is assumed that these two paths are respectively assigned to different processes P1 and P2. In this case, as shown in FIG. 7C, in the process P1, the operation t11
, The synchronization instruction s1 is inserted into the left path executed in the process P1, and the right path is configured to end the synchronization instruction s2 last. In the process P2, on the contrary, the path of the synchronization instruction s1 is configured to be terminated, and the path on the right side after the operation t21 is configured following the synchronization instruction s2, so that t11 (s1 t12 t13 + s2 t21 t22). ) → t11 (s1 t12 t13 + s
2) Let ‖ (s1 + s2 t21 t22). In this case, when the operation t12 and the subsequent operations are executed following the synchronization instruction s1 in the process P1, the process P2 ends with the synchronization instruction s1 and the operations t21 and the subsequent operations are executed following the synchronization instruction s2 in the process P2. If so, the process P1 ends with a synchronization instruction s2. For this reason, even if the processes P1 and P2 are observed together, both the right and left paths shown in FIG. 7B are not executed at the same time, and the branch of the branch included in the original scenario is not executed. Structure is preserved.

【0058】また、ブロックB1における分岐の動作に
基づいてブロックB2とB3とに分岐するような場合も
同様に、挿入されている同期命令s1及びs2をブロッ
クと共にそれぞれのプロセスへ割り当て、 B1 (s1 B2 + s2 B3) →(B1 |P1)(s1(B2 |P1) + s2(B
3 |P1))‖(B1 |P2)(s1(B2 |P2) + s2(B3 |P2)) とする。この場合は、同期命令s1に続いてブロックB
2が実行される場合、ブロックB2の各部分のうちプロ
セスP1ではプロセスP1に射影された部分が実行さ
れ、プロセスP2ではプロセスP2に射影された部分が
実行される。また、同期命令s2に続いてブロックB3
が実行される場合、ブロックB3の各部分のうちプロセ
スP1ではプロセスP1に射影された部分が実行され、
プロセスP2ではプロセスP2に射影された部分が実行
される。
Similarly, in the case of branching to blocks B2 and B3 based on the branching operation in block B1, the inserted synchronous instructions s1 and s2 are allocated to the respective processes together with the blocks, and B1 (s1 B2 + s2 B3) → (B1 | P1) (s1 (B2 | P1) + s2 (B
3 | P1)) ‖ (B1 | P2) (s1 (B2 | P2) + s2 (B3 | P2)). In this case, the block B follows the synchronization instruction s1.
When Step 2 is executed, of the respective portions of the block B2, the portion projected to the process P1 is executed in the process P1, and the portion projected to the process P2 is executed in the process P2. Further, following the synchronization instruction s2, the block B3
Is executed, in the process P1, of the portions of the block B3, the portion projected to the process P1 is executed,
In the process P2, the part projected on the process P2 is executed.

【0059】上記のような射影を行った時点では、各プ
ロセスには、第1の並行プログラム2において当該プロ
セスに対応する命令が割り当てられているほか、ブロッ
クに挿入された全ての同期命令が、全てのプロセスに割
り当てられている。
At the time when the above-mentioned projection is performed, an instruction corresponding to the process in the first concurrent program 2 is assigned to each process, and all the synchronous instructions inserted in the block are Assigned to all processes.

【0060】〔3−2−3.冗長な同期命令の除去〕続
いて、割り当てられた全ての同期命令の中から、各アサ
イクリックブロックごとに冗長な同期命令を抽出しそれ
を除去する。たとえば、図8(a)のシナリオをプロセ
スP1,P2へ射影し、 (s1 a s2 + s3 s4 a) ‖(s1 s2 b + s3 b s4) とした結果を図8(b)に示す。この例では、命令aと
bに依存関係があることから同期命令s1,s2,s
3,s4が用いられているが、実際には図8(a)のシ
ナリオではa→bという順序も、逆のb→aという順序
も双方許容されているので、同期命令s1,s2,s
3,s4は冗長である。このため、これら同期命令を除
去することによって図8(c)の状態とすることができ
る。
[3-2-3. Removal of Redundant Synchronous Instruction] Subsequently, a redundant synchronous instruction is extracted for each acyclic block from all allocated synchronous instructions, and is removed. For example, FIG. 8B shows the result of projecting the scenario of FIG. 8A onto the processes P1 and P2 and setting (s1 as2 + s3 s4 a) ‖ (s1 s2 b + s3 bs4). In this example, the synchronous instructions s1, s2, s
3 and s4 are used, but in the scenario of FIG. 8A, both the order of a → b and the reverse order of b → a are both allowed, so that the synchronization instructions s1, s2, s
3 and s4 are redundant. Therefore, the state shown in FIG. 8C can be obtained by removing these synchronization instructions.

【0061】〔3−2−3−1.原始的な手順〕このよ
うな冗長な同期命令をシナリオグラフSGから除去する
手順は、原始的には次のように表現することができる。
すなわち、任意の同期命令sを選択し、それを除去する
前のグラフSGと除去した後のグラフSG’を比較し、
両者がシナリオグラフ等価(SG===SG’)であれ
ば同期命令sを削除する、という処理を繰り返し、全て
の同期命令についてこの処理を繰り返しても同期命令が
1つの除去できなくなった時点で処理を終了する。
[3-2-3-1. Primitive procedure] The procedure for removing such redundant synchronization instructions from the scenario graph SG can be primitively expressed as follows.
That is, an arbitrary synchronization instruction s is selected, and the graph SG before the removal is compared with the graph SG ′ after the removal,
If both are equivalent to the scenario graph (SG == SG ′), the process of deleting the synchronization command s is repeated, and when one synchronization command cannot be removed even if this process is repeated for all the synchronization commands. The process ends.

【0062】〔3−2−3−2.シナリオグラフ等価を
判定する手順〕上記の手順では、選択した同期命令を除
去する前後のシナリオグラフが等価かどうかを判定する
必要があり、本実施形態では、シナリオグラフの等価性
の判定に次のようなカウンティングトレ−スを用いる。
カウンティングトレースとは、シナリオにおいてどの動
作が何度行われ、依存関係を持つ動作がいつ行われたか
を示す情報である。ここで、与えられたシナリオθのカ
ウンティングトレ−スct(θ)は以下のように定義さ
れる。 ct( θ) = (<動作の生起カウンタの組>,< 先行制約条件
の集合>) この定義において、動作の生起カウンタは、そのシナリ
オ中で当該動作が何回生起したかを表す項目であり、例
えば、(a,k)のような表現は、シナリオθにおいて
動作aがk回生起したことを意味する。また、先行制約
条件は、依存関係を持つ動作がいつ生起したかを表す。
例えば、並行プログラムCが動作a→b→c→b→aの
順に実行され、この実行順序を表すシナリオθ=abc
baに対して、依存関係の集合D(C)が依存関係
(a,c)を含む場合、θのカウンティングトレ−ス
は、 ct( θ) = ({(a,2),(b,2),(c,1)},{c(θ,1) << c( θ,
3),c(θ,3) << c( θ,5)}) となる。この例において、動作の生起カウンタの組
{(a,2),(b,2),(c,1)}は、シナリオ
θ=abcbaにおいて、動作aが2回、動作bが2
回、動作cが1回生起したことを意味し、1つ目の先行
制約条件c(θ,1)<<c(θ,3)は、シナリオθ
において、依存関係を持つ2つの動作a,cがそれぞれ
1番目と3番目の動作として生起したことを意味し、ま
た、2つ目の先行制約条件c(θ,3)<<c(θ,
5)は、動作c,aがそれぞれ3番目と5番目の動作と
して生起したことを意味している。
[3-2-3-2. Procedure for Determining Scenario Graph Equivalence] In the above procedure, it is necessary to determine whether or not the scenario graphs before and after removing the selected synchronization instruction are equivalent. Such a counting trace is used.
The counting trace is information indicating which operation is performed in the scenario and how many times, and the operation having the dependency is performed. Here, the counting trace ct (θ) of a given scenario θ is defined as follows. ct (θ) = (<set of action occurrence counters>, <set of precedence constraints>) In this definition, the action occurrence counter is an item that indicates how many times the action has occurred in the scenario. For example, an expression such as (a, k) means that the operation a has occurred k times in the scenario θ. The precedence constraint indicates when an operation having a dependency has occurred.
For example, the concurrent program C is executed in the order of operations a → b → c → b → a, and a scenario θ = abc representing this execution order
If the set of dependencies D (C) includes the dependencies (a, c) with respect to ba, the counting trace of θ is ct (θ) = ({(a, 2), (b, 2 ), (c, 1)}, {c (θ, 1) << c (θ,
3), c (θ, 3) << c (θ, 5)}). In this example, the set of operation occurrence counters {(a, 2), (b, 2), (c, 1)} is such that in scenario θ = abcba, operation a is twice and operation b is 2
Times, the action c has occurred once, and the first preceding constraint c (θ, 1) << c (θ, 3) corresponds to the scenario θ
, Means that two actions a and c having a dependency have occurred as the first and third actions, respectively, and the second preceding constraint c (θ, 3) << c (θ,
5) means that the operations c and a have occurred as the third and fifth operations, respectively.

【0063】このようなカウンティングトレースの集合
をカウンティングトレ−ス集合と呼び、アサイクリック
なシナリオグラフSGにおいて、カウンティングトレ−
ス集合ctset(SG)は以下のように定義される。 ctset(SG) = {ct(θ) |θはSGのシナリオ} この定義は、シナリオグラフSGに基づくカウンティン
グトレース集合ctset(SG)が、シナリオグラフ
SGの全てのシナリオθのカウンティングトレースct
(θ)からなることを意味している。そして、アサイク
リックなシナリオグラフSGにおいて、任意のシナリオ
は有限なので、このシナリオグラフSGを並行プログラ
ムCとみなし、ctset(C)を計算することが可能
である。ここで、アサイクリックなシナリオグラフSG
1とSG2に対して、シナリオグラフ等価とカウンティ
ングトレース集合との間には、下記の性質が成り立つ。 SG1 === SG2 iff ctset(C1)=ctset(C2) これは、2つのシナリオグラフSG1とSG2の間でそ
れぞれに基づくカウンティングトレース集合ctset
(C1)とctset(C2)が同じであれば、2つの
シナリオグラフSG1とSG2は等価であることを意味
する。
A set of such counting traces is referred to as a counting trace set, and in the acyclic scenario graph SG, the counting traces are set.
Ctset (SG) is defined as follows. ctset (SG) = {ct (θ) | θ is an SG scenario} This definition means that a counting trace set ctset (SG) based on the scenario graph SG is a counting trace ct of all scenarios θ in the scenario graph SG.
(Θ). Since an arbitrary scenario is finite in the acyclic scenario graph SG, the scenario graph SG can be regarded as a concurrent program C, and ctset (C) can be calculated. Here, the acyclic scenario graph SG
1 and SG2, the following property is established between the scenario graph equivalent and the counting trace set. SG1 === SG2 iff ctset (C1) = ctset (C2) This is a counting trace set ctset based on each of two scenario graphs SG1 and SG2.
If (C1) and ctset (C2) are the same, it means that the two scenario graphs SG1 and SG2 are equivalent.

【0064】〔3−2−4.冗長な同期命令の除去を効
率的に行う手順〕シナリオグラフ等価を判定する上記の
ような手法を応用して、冗長な同期命令の除去を効率的
に行う手順を次に示す。なお、ここでは、依存関係を有
する動作t1とt2の間に同期命令sync(s1)の
挿入されたアサイクリックブロックSGn (図9
(a))から冗長な同期命令を除去するものとする。ま
ず、SGn をプロセスP1とP2に射影する。なお、射
影されたプロセスは、並行プログラムCn とみなすこと
ができる。まず、冗長な同期命令の除去を効率的に行う
手順を図10に示す。 〔3−2−4−1.ダミー動作の挿入〕図10に示す手
順では、まず、各プロセスPiに挿入してある各同期命
令sync(ID)に1対1に対応させて、ダミー動作
nsync(Pi,ID)を挿入する(ステップ10
1)。ダミー動作とは、同期する命令である同期命令に
対して、同期しない命令であり、言い換えれば、同期命
令による同期を解除する動作である。このようなダミー
動作は、例えば、同期命令の直前に、当該同期命令の直
後へ選択的にジャンプする命令を挿入することによって
実現する。例えば、図9(a)に示したシナリオグラフ
については、各プロセスP1及びP2に割り当てて並行
化する際、同期命令sync(s1)の直前に、当該同
期命令sync(s1)をスキップしてその直後にジャ
ンプするダミー動作nsync(P1,s1)及びns
ync(P2,s1)を各プロセスに挿入する(図9
(b))。このようなダミー動作を挿入したシナリオグ
ラフをSGe とする。また、このように挿入した全ての
ダミー動作は、記録用の集合ANSに記録しておく(ス
テップ102)。
[3-2-4. Procedure for Efficiently Removing Redundant Synchronous Instructions] A procedure for efficiently removing redundant synchronous instructions by applying the above-described method for determining scenario graph equivalence is described below. In this case, the async block SGn in which the synchronization command sync (s1) is inserted between the operations t1 and t2 having the dependency relationship (FIG. 9)
It is assumed that redundant synchronization instructions are removed from (a)). First, SGn is projected onto processes P1 and P2. Note that the projected process can be regarded as a concurrent program Cn. First, FIG. 10 shows a procedure for efficiently removing redundant synchronization instructions. [3-2-4-1. Insertion of Dummy Operation] In the procedure shown in FIG. 10, first, a dummy operation nsync (Pi, ID) is inserted in one-to-one correspondence with each synchronization instruction sync (ID) inserted in each process Pi ( Step 10
1). The dummy operation is an instruction that does not synchronize with a synchronous instruction that is a synchronous instruction, in other words, an operation that releases synchronization by the synchronous instruction. Such a dummy operation is realized, for example, by inserting an instruction for selectively jumping immediately after the synchronization instruction immediately before the synchronization instruction. For example, in the scenario graph shown in FIG. 9A, when the processes are assigned to the processes P1 and P2 and parallelized, the synchronization instruction sync (s1) is skipped immediately before the synchronization instruction sync (s1). Immediately after the dummy operation nsync (P1, s1) and ns
nc (P2, s1) is inserted into each process (FIG. 9)
(B)). A scenario graph in which such a dummy operation is inserted is defined as SGe. All the dummy operations inserted in this way are recorded in a recording set ANS (step 102).

【0065】〔3−2−4−2.状態空間の生成〕次
に、上記のようにダミー動作を挿入したシナリオグラフ
SGe を、並行プログラムCe とみなし、並行プログラ
ムCe が示し得る動作列の集合を表す状態空間SS(C
e)を生成する(ステップ103/図9(c))。ここ
で、並行プログラムCについて、状態空間SS(C)と
は、下記に定義する状態遷移グラフSS(C)=(S,
T,δ,m0)である。 SはCのグローバル状態の集合 TはCの命令の集合 δは状態遷移関係。すなわち、この状態遷移関係δの要
素(m,t,m’)は、グローバル状態mで命令tが実
行されるとグローバル状態m’になることを意味する。
m0はCの初期グローバル状態 なお、シナリオグラフSG=(S,A,δ’,s0)は
並行プログラムCの状態空間SS(C)=(S,A,
δ,s0)のサブグラフである。すなわち、δ’がδの
部分集合である。
[3-2-4-2. Generation of State Space] Next, the scenario graph SGe into which the dummy operation has been inserted as described above is regarded as a concurrent program Ce, and the state space SS (C
e) is generated (step 103 / FIG. 9 (c)). Here, for the concurrent program C, the state space SS (C) is a state transition graph SS (C) = (S,
T, δ, m0). S is a set of global states of C. T is a set of instructions of C. δ is a state transition relation. That is, the element (m, t, m ′) of the state transition relation δ means that when the instruction t is executed in the global state m, the state becomes the global state m ′.
m0 is the initial global state of C. Note that the scenario graph SG = (S, A, δ ′, s0) is the state space SS (C) of the concurrent program C = (S, A,
δ, s0). That is, δ ′ is a subset of δ.

【0066】〔3−2−4−3.違反パスの検出〕続い
て、生成された状態空間SS(Ce)から、カウンティ
ングトレース集合ctset(Cn)に含まれないカウ
ンティングトレースct(θ)を生じる違反パスθ、す
なわち先行制約に反するまたはデッドロックする違反パ
スθを検出する(ステップ104)。図9(c)では、
違反パスθを太線及び×印で示す。なお、ctset
(Cn)はダミー動作挿入前のシナリオグラフに対応す
るカウンティングトレース集合であり、違反パスθを検
出する際に作成するか、それ以前に作成して保存してお
く。
[3-2-4-3. Detection of Violation Path] Subsequently, a violation path θ that generates a counting trace ct (θ) not included in the counting trace set ctset (Cn) from the generated state space SS (Ce), that is, violates the preceding constraint or deadlocks. Is detected (step 104). In FIG. 9C,
The violation path θ is indicated by a thick line and a cross. Note that ctset
(Cn) is a set of counting traces corresponding to the scenario graph before the dummy operation is inserted, and is created when the violation path θ is detected, or created and stored before that.

【0067】違反パスθが検出された場合(ステップ1
05)、この違反パスθをルート側に向かって遡り、遡
る経路の最後に登場するダミー動作nsync(Pi,
ID)を検出する(ステップ106/図9(c))。す
なわち、違反パスθはダミー動作nsync(Pi,I
D)の挿入が原因で発生したと考えられることから、同
期命令sync(ID)は不可欠であり、冗長でないこ
とが判断できる。図9(c)の例では、動作ns21
が、正しい動作からの逸脱(deviation) を生じさせたダ
ミー動作として検出されている。
When the violation path θ is detected (step 1)
05), the dummy path nsync (Pi, Pi,
ID) (step 106 / FIG. 9 (c)). That is, the violation path θ is the dummy operation nsync (Pi, I
Since it is considered that this occurred due to the insertion of D), it can be determined that the synchronization instruction sync (ID) is indispensable and not redundant. In the example of FIG. 9C, the operation ns21
Has been detected as a dummy operation that has caused a deviation from the correct operation.

【0068】このように検出されたダミー動作は、記録
用の集合DNSに追加する(ステップ107)。また、
そのダミー動作をシナリオグラフSGe から除去(ステ
ップ108)したうえで状態空間SS(Ce )を再度生
成するか、状態空間のうちそのダミー動作から始まる部
分を枝刈りする。そのうえで再び違反パスθの検出から
の手順を繰り返し、違反パスθが検出されなくなった時
点で(ステップ105)以下の手順へ進む。
The dummy operation detected in this way is added to the recording set DNS (step 107). Also,
After removing the dummy operation from the scenario graph SGe (step 108), the state space SS (Ce) is generated again, or a part of the state space starting from the dummy operation is pruned. Then, the procedure from the detection of the violation path θ is repeated again, and when the violation path θ is no longer detected (step 105), the procedure proceeds to the following procedures.

【0069】〔3−2−4−4.冗長性の判断〕違反パ
スθが検出されなくなった時点では、それまでに検出さ
れた全てのダミー動作が集合DNSに含まれている。そ
の結果、挿入した全てのダミー動作の集合ANSから、
検出されたダミー動作の集合DNSを除いたANS−D
NSは、挿入したが違反パスを発生させなかったダミー
動作の集合となる。そのようなダミー動作に対応する同
期命令は、実際に削除してもシナリオグラフのカウンテ
ィングトレース集合には影響を与えない。
[3-2-4-4. Judgment of Redundancy] When the violation path θ is no longer detected, all the dummy operations detected so far are included in the set DNS. As a result, from the set ANS of all the inserted dummy operations,
ANS-D excluding the set of detected dummy operations DNS
NS is a set of dummy operations that have been inserted but have not generated a violation path. Even if the synchronization command corresponding to such a dummy operation is actually deleted, it does not affect the counting trace set of the scenario graph.

【0070】したがって、ダミー動作nsync(P
i,ID)がANS−DNSに含まれるならば、そのプ
ロセスPiに挿入されている同期命令sync(ID)
は冗長であるからシナリオグラフから除去する(ステッ
プ109)。このように冗長な同期命令をすべて並行プ
ログラムCnから除去することによって、並行プログラ
ムCoが最終的に得られたとする。このとき、挿入した
全ての同期命令を持ったままの並行プログラムCnと、
冗長な同期命令を除去した並行プログラムCoはカウン
ティングトレース集合が共通することからシナリオグラ
フ等価であり、SS(Co)===SS(Cn)が満た
される。
Therefore, the dummy operation nsync (P
i, ID) is included in the ANS-DNS, the synchronization instruction sync (ID) inserted in the process Pi
Since is redundant, it is removed from the scenario graph (step 109). It is assumed that the concurrent program Co is finally obtained by removing all redundant synchronization instructions from the concurrent program Cn. At this time, a concurrent program Cn holding all the inserted synchronous instructions,
Since the concurrent programs Co from which redundant synchronization instructions have been removed have a common counting trace set, they are equivalent to a scenario graph, and satisfy SS (Co) === SS (Cn).

【0071】〔3−3.統合化の詳細な手順〕続いて、
分解された各階層のブロックごとに並行化されたシナリ
オを、各プロセスごとに1つのシナリオに統合する。
[3-3. Detailed procedure for integration]
The scenarios parallelized for each block of the decomposed hierarchy are integrated into one scenario for each process.

【0072】〔3−3−1.ブロックの埋め込み〕統合
の際は、まず、下位の階層のブロックの詳細を上位の階
層に埋め込む。例えば、 B1 = a1 (B2 |P1) a2‖b1 (B2|P2) b2 B2 = a3 ‖b3 のとき、下位階層のブロックに関する B2|P1 = a3 、B2|P2 = b3 を代入すると、全体として B1 = a1 a3 a2 ‖b1 b3 b2 になる。
[3-3-1. [Embedment of Blocks] At the time of integration, first, details of blocks in a lower hierarchy are embedded in an upper hierarchy. For example, if B1 = a1 (B2 | P1) a2 ‖ b1 (B2 | P2) b2 B2 = a3 ‖ b3, and substituting B2 | P1 = a3 and B2 | P2 = b3 for the lower-level blocks, = a1 a3 a2 ‖b1 b3 b2.

【0073】〔3−3−2.ループの展開〕続いて、ブ
ロックに対するループを、そのブロックの内側の各プロ
セスのループとする。例えば、 (a‖b)* → a*‖b* とする。
[3-3-2. Next, a loop for a block is defined as a loop of each process inside the block. For example, (a‖b) * → a * ‖b *.

【0074】〔4.具体例〕以下に、本実施形態を並行
プログラムを適用する場合の具体例を、図3に示すフロ
ーチャートの各ステップにしたがって説明する。ここで
対象とするのは共有変数型の並行プログラムCであり、
この並行プログラムCは少なくとも、2つのプロセスP
1,P2から構成され、共有メモリを用いる2つの共有
変数m1,m2を読み書きするものとする。
[4. Specific Example] Hereinafter, a specific example in which the present embodiment is applied to a concurrent program will be described with reference to each step of the flowchart shown in FIG. The target here is a shared variable type concurrent program C,
This concurrent program C has at least two processes P
1, P2, and read and write two shared variables m1 and m2 using a shared memory.

【0075】〔4−1.並行プログラムの作成〕この具
体例では、並行プログラムC=P1‖P2を作成したと
する(ステップ1)。このプログラムの命令間の依存関
係の集合D(C)には、変数m1を介したデータ依存に
基づく依存関係(a2,b2)と、変数m2を介したデ
ータ依存に基づく依存関係(a3,b3)が含まれる。
[4-1. Creation of Concurrent Program] In this specific example, it is assumed that a concurrent program C = P1‖P2 has been created (step 1). The set D (C) of dependencies between instructions of the program includes a dependency (a2, b2) based on data dependency via the variable m1 and a dependency (a3, b3) based on data dependency via the variable m2. ) Is included.

【0076】 m1 = 0 ; m2 = 0 ; P1: while(true){ a1: v11 = 1 ; a2: write(m1,v11) ; a3: v12 = read(m2) ; } P2: while(true){ b1: v21 = 2 ; b2: v22 = read(m1) ; b3: write(m2,v21) ; } 〔4−2.シナリオの作成〕上記のような並行プログラ
ムCから、作成手段3を用いてシナリオを作成する(ス
テップ2)。ここでは、複数のシナリオをまとめたシナ
リオグラフ(図11(a))が作成されたものとする。
M1 = 0; m2 = 0; P1: while (true) {a1: v11 = 1; a2: write (m1, v11); a3: v12 = read (m2);} P2: while (true) { b1: v21 = 2; b2: v22 = read (m1); b3: write (m2, v21);} [4-2. Creation of Scenario] From the parallel program C as described above, a scenario is created using the creating means 3 (step 2). Here, it is assumed that a scenario graph (FIG. 11A) in which a plurality of scenarios are put together has been created.

【0077】〔4−3.シナリオの挙動の確認〕ユーザ
は、このシナリオグラフ上の各シナリオは正しいことを
確認し(ステップ3)、バグがあればステップ1に戻る
(ステップ4)。ここでは、シナリオにはバグは発見さ
れず、依存関係の抽出(ステップ6)に続いてシナリオ
の分解(ステップ7)が行われるものとする。
[4-3. Confirmation of Scenario Behavior] The user confirms that each scenario on the scenario graph is correct (step 3), and if there is a bug, returns to step 1 (step 4). Here, it is assumed that no bug is found in the scenario, and the scenario is decomposed (step 7) following the extraction of the dependency (step 6).

【0078】〔4−4.シナリオの分解〕シナリオの分
解(ステップ6)では、シナリオグラフの正規化と階層
構造の抽出が行われる。すなわち、まず、シナリオグラ
フ(図11(a))を正規化することによって正規表現
に変換された次のシナリオを得る。ここで、a*は「a
の0回以上の繰り返し」、a+bは「aまたはbを実行
する」を意味する。 SGr=(b1(a1 a2 a3)* a1(a2 b2 + b2 a2)b3 a3)* この正規表現に変換されたシナリオを等価なグラフで表
したシナリオグラフを図11(b)に示す。正規表現に
変換されたシナリオ (b1(a1 a2 a3)* a1(a2 b2 + b2 a2)b3 a3)* は以下のような階層的な構造を有する各ブロックに分解
することができる。ここで、B1*およびB2*を1つ
の要素とみなせば、各階層の個々のブロックはル−プ構
造を含まない。 SGr = B1* B1 = b1 B2* a1(a2 b2 + b2 a2)b3 a3 B2 = a1 a2 a3 〔4−5.シナリオの並行化〕続いて、このように分解
されたブロックを単位として、並行化を行なう(ステッ
プ8)。この例では、ブロックB2は、 B2 = a1 a2 a3 ‖ε( εは空列の意味) であり、プロセスP1の動作しか含まないので並行化の
必要はない。一方、ブロックB1は次のように並行化さ
れる。まず、ブロックB1には同期命令s1,s2,s
3,s4,s5,s6を導入する。 B1 = b1 B2* s1 a1(s2 a2 s3 b2 + s4 b2 s5 a2)b3 s6
a3 続いて、このように同期命令s1〜s6を挿入したブロ
ックB1をプロセスP1,P2に射影する。 B1 = (B2|P1)* s1 a1(s2 a2 s3 + s4 s5 a2)s6 a3‖ b1(B2|P2)* s1 (s2 s3 b2 + s4 b2 s5)b3 s6 さらに、冗長な同期命令を除去する。ここで、(s2 a2 s
3 b2 + s4 b2 s5 a2)に関しては、 (s2 a2 s3 + s4 s5 a2) ‖(s2 s3 b2 + s4 b2 s5) → a
2 ‖b2 と簡約化できる。すなわち、同期命令s2,s3,s
4,s5は冗長であるため除去される。この結果、ブロ
ックB1の最終的な正規表現は下記のようになる。 B1 =(B2 |P1)* s1 a1 a2 s6 a3 ‖b1(B2 |P2)* s1 b2
b3 s6 〔4−6.シナリオの統合〕次に、各ブロックごとに各
プロセスに割り当てられているシナリオを統合化する。
この統合化では、下位のブロックB2の内容を、上位の
階層のブロックB1に埋め込むことによって、 SGr = ((a1 a2 a3)* s1 a1 a2 s6 a3 ‖b1 s1 b2 b3
s6)* となる。また、ル−プの展開を行なうことによって、 SGr =((a1 a2 a3)* s1 a1 a2 s6 a3)* ‖(b1 s1 b2 b
3 s6)* となる。このような統合化によって最終的に生成された
シナリオをシナリオグラフで表すと図11(c)のよう
になる。ここで、正規表現をそのままグラフで表したも
のは多少冗長性があるので、一部最適化されている。
[4-4. Scenario Decomposition] In the scenario decomposition (step 6), the scenario graph is normalized and the hierarchical structure is extracted. That is, first, the following scenario converted into a regular expression is obtained by normalizing the scenario graph (FIG. 11A). Here, a * is "a
A + b means "execute a or b". SGr = (b1 (a1 a2 a3) * a1 (a2 b2 + b2 a2) b3 a3) * FIG. 11B shows a scenario graph in which the scenario converted into the regular expression is represented by an equivalent graph. The scenario (b1 (a1 a2 a3) * a1 (a2 b2 + b2 a2) b3 a3) * converted into a regular expression can be decomposed into blocks having the following hierarchical structure. Here, if B1 * and B2 * are regarded as one element, each block of each layer does not include a loop structure. SGr = B1 * B1 = b1 B2 * a1 (a2 b2 + b2 a2) b3 a3 B2 = a1 a2 a3 [4-5. Parallelization of Scenario] Subsequently, parallelization is performed in units of the blocks thus decomposed (step 8). In this example, the block B2 satisfies B2 = a1a2a3‖ε (ε denotes an empty sequence), and includes only the operation of the process P1, so that there is no need for parallelization. On the other hand, the block B1 is parallelized as follows. First, synchronization instructions s1, s2, s are stored in block B1.
3, s4, s5, and s6 are introduced. B1 = b1 B2 * s1 a1 (s2 a2 s3 b2 + s4 b2 s5 a2) b3 s6
a3 Subsequently, the block B1 into which the synchronization instructions s1 to s6 are inserted is projected onto the processes P1 and P2. B1 = (B2 | P1) * s1 a1 (s2 a2 s3 + s4 s5 a2) s6 a3 ‖ b1 (B2 | P2) * s1 (s2 s3 b2 + s4 b2 s5) b3 s6 Further remove redundant synchronization instructions. . Where (s2 a2 s
For 3 b2 + s4 b2 s5 a2), (s2 a2 s3 + s4 s5 a2) ‖ (s2 s3 b2 + s4 b2 s5) → a
It can be reduced to 2 ‖b2. That is, the synchronization instructions s2, s3, s
4, s5 are redundant and are therefore removed. As a result, the final regular expression of the block B1 is as follows. B1 = (B2 | P1) * s1 a1 a2 s6 a3 ‖b1 (B2 | P2) * s1 b2
b3 s6 [4-6. Integration of Scenarios] Next, the scenarios assigned to each process for each block are integrated.
In this integration, SGr = ((a1 a2 a3) * s1 a1 a2 s6 a3 ‖b1 s1 b2 b3 by embedding the contents of the lower block B2 into the block B1 of the upper layer.
s6) *. By expanding the loop, SGr = ((a1 a2 a3) * s1 a1 a2 s6 a3) * ‖ (b1 s1 b2 b
3 s6) *. A scenario finally generated by such integration is represented by a scenario graph as shown in FIG. Here, the regular expression represented as a graph as it is has some redundancy, and is partially optimized.

【0079】〔4−7.第2の並行プログラムの生成〕
最後に、図11(c)に示したシナリオグラフから、下
記の並行プログラムC=P1‖P2を生成する。
[4-7. Generation of second concurrent program]
Finally, the following concurrent program C = P1‖P2 is generated from the scenario graph shown in FIG.

【0080】 P1: while(true){ a1: v11 = 1 ; s1: if(sync(1)){ a2: write(m1,v11) ; s2: sync(6) ; a3: v12 = read(m2) ; }else{ a2: write(m1,v11) ; a3: v12 = read(m2) ; } } P2: while(true){ b1: v21 = 0 ; s1: sync(1) ; b2: write(m2,v21) ; b3: v22 = read(m1) ; s2: sync(6) ; } 〔5.効果〕以上説明したように、本実施形態では、正
しいことが確認されたシナリオという形で、並行プログ
ラムを一旦逐次化し、このシナリオに基づいて並行プロ
グラムを再び生成することによって並行プログラムの信
頼性の向上させる。その際、シナリオを一旦、ループを
含まないブロックに階層的に分解する。そして、分解さ
れたブロックごとに各プロセスに割り当てて並行化し、
プロセスごとに再び統合化して並行プログラムを生成す
る。このため、構造が複雑な並行プログラムについて
も、ブロックに分解して処理することによって逐次プロ
グラミングと同程度の容易さで開発することが可能とな
る。また、分解された個々のブロックはループや階層構
造を含まないので、効率的に処理でき、並行プログラム
全体として効率的に開発を行うことができる。
P1: while (true) {a1: v11 = 1; s1: if (sync (1)) {a2: write (m1, v11); s2: sync (6); a3: v12 = read (m2) ;} else {a2: write (m1, v11); a3: v12 = read (m2);}} P2: while (true) {b1: v21 = 0; s1: sync (1); b2: write (m2, v21); b3: v22 = read (m1); s2: sync (6);} [5. Effects] As described above, in the present embodiment, the concurrent program is temporarily serialized in the form of a scenario that has been confirmed to be correct, and the concurrent program is re-created based on this scenario. Improve. At that time, the scenario is once hierarchically decomposed into blocks that do not include a loop. Then, each decomposed block is assigned to each process and parallelized,
Integrate again for each process to generate a concurrent program. For this reason, even a concurrent program having a complicated structure can be developed as easily as sequential programming by decomposing it into blocks and processing. Further, since each decomposed block does not include a loop or a hierarchical structure, it can be efficiently processed, and the entire concurrent program can be efficiently developed.

【0081】特に、本実施形態では、シナリオを正規化
することによって正規表現に変換されたシナリオとし、
正規表現に変換されたシナリオは階層的に分解すること
が容易である。このため、並行プログラムの分解が効率
化される。
In particular, in the present embodiment, the scenario is converted into a regular expression by normalizing the scenario.
Scenarios converted into regular expressions can be easily decomposed hierarchically. For this reason, the decomposition of the concurrent program is made more efficient.

【0082】また、本実施形態では、同期命令を埋め込
みながらシナリオをプロセスに割り当てるので、プロセ
ス間において各部分の実行タイミングが、依存関係に基
づく先行制約に合致するように制御され、最終的に得ら
れる並行プログラムの信頼性が確保される。
In this embodiment, the scenario is assigned to the process while embedding the synchronization instruction. Therefore, the execution timing of each part between the processes is controlled so as to conform to the preceding constraint based on the dependency, and finally obtained. The reliability of the concurrent program is ensured.

【0083】また、本実施形態では、冗長な同期命令を
除去することによって、各プロセスが互いにどのような
タイミングで動作するかの自由度が拡張される。これ
は、無害な非決定性を与えることによって並行プログラ
ムを最適化することを意味し、シナリオという形で一旦
逐次化された並行プログラムにおいて、並行性を可能な
限り復元することができる。
In the present embodiment, by removing redundant synchronization instructions, the degree of freedom in what timing the processes operate with each other is expanded. This means optimizing a concurrent program by giving harmless nondeterminism. Concurrency can be restored as much as possible in a concurrent program once serialized in the form of a scenario.

【0084】また、本実施形態では、依存関係を持つ動
作の実行順序に影響しない同期命令が除去されるので、
並行プログラムの動作の自由度を拡張しながら、依存関
係を持つ動作の実行順序は正しく維持される。
Further, in this embodiment, since the synchronous instruction which does not affect the execution order of the operation having the dependency is removed,
While the degree of freedom of the operation of the concurrent program is expanded, the execution order of the operation having the dependency is correctly maintained.

【0085】〔6.他の実施の形態〕なお、本発明は上
記実施の形態に限定されるものではなく、次に例示する
ような他の実施形態も含むものである。例えば、上記実
施形態を実現するために用いるコンピュータの構成につ
いて、図1に示した構成例はマルチCPUであるが、本
発明は他の構成のコンピュータシステム上に実現しても
よく、例えば、共有メモリを有する並列計算機、共有メ
モリを有しない並列計算機、分散ネットワーク計算機シ
ステム、単一CPU計算機をマルチタスクシステムとし
たもの、などが考えられる。
[6. Other Embodiments] The present invention is not limited to the above embodiments, but includes other embodiments as exemplified below. For example, as for the configuration of a computer used to realize the above-described embodiment, the configuration example shown in FIG. 1 is a multi-CPU, but the present invention may be realized on a computer system having another configuration. A parallel computer having a memory, a parallel computer having no shared memory, a distributed network computer system, a single CPU computer having a multitask system, and the like can be considered.

【0086】また、上記実施形態では、依存関係の抽出
は、シナリオを分解する前に行ったが、依存関係の抽出
はシナリオを分解した後に行ってもよい。また、上記実
施形態では、シナリオの形式としてシナリオグラフを用
いたが、シナリオの形式は自由であり、テキストやフロ
ーチャート形式など所望の形式のシナリオを用いること
ができる。また、上記実施形態で示した並行プログラム
やシナリオは例示に過ぎず、用いる言語、表現形式、複
雑さなどは自由に選択することができる。
In the above-described embodiment, the dependency is extracted before the scenario is decomposed. However, the dependency may be extracted after the scenario is decomposed. In the above embodiment, the scenario graph is used as the scenario format. However, the scenario format is free, and a scenario in a desired format such as a text format or a flowchart format can be used. Further, the concurrent programs and scenarios shown in the above embodiments are merely examples, and the language, expression form, complexity, and the like to be used can be freely selected.

【0087】また、本発明は、本発明の作用を実現する
ためのソフトウェアによって実現することが一般的と考
えられるが、そのようなソフトウェアを記録した記録媒
体も本発明の一態様である。
It is generally considered that the present invention is realized by software for realizing the operation of the present invention, but a recording medium on which such software is recorded is also one embodiment of the present invention.

【0088】[0088]

【発明の効果】以上説明したように、複雑な構造の並行
プログラムについても、優れた信頼性と効率で開発を行
うことができるので、プログラミングの生産性と精度が
大幅に向上する。
As described above, even a concurrent program having a complicated structure can be developed with excellent reliability and efficiency, so that the productivity and accuracy of programming are greatly improved.

【図面の簡単な説明】[Brief description of the drawings]

【図1】本発明の実施の形態の実現に用いるコンピュー
タシステムのハードウェア構成を示す図
FIG. 1 is a diagram illustrating a hardware configuration of a computer system used to implement an embodiment of the present invention;

【図2】本発明の実施の形態の構成を示す機能ブロック
FIG. 2 is a functional block diagram showing a configuration of an embodiment of the present invention.

【図3】本発明の実施の形態における処理手順を示すフ
ローチャート
FIG. 3 is a flowchart showing a processing procedure in the embodiment of the present invention.

【図4】本発明の実施の形態において、データ依存の例
を示す図
FIG. 4 is a diagram showing an example of data dependence in the embodiment of the present invention.

【図5】本発明の実施の形態におけるシナリオの分解を
例示する図
FIG. 5 is a diagram illustrating an example of decomposition of a scenario in the embodiment of the present invention.

【図6】本発明の実施の形態において、シナリオに同期
命令を挿入し、各プロセスに割り当てる例を示す図
FIG. 6 is a diagram showing an example in which a synchronization instruction is inserted into a scenario and assigned to each process in the embodiment of the present invention.

【図7】本発明の実施の形態において、シナリオに同期
命令を挿入し、各プロセスに割り当てる他の例を示す図
FIG. 7 is a diagram showing another example in which a synchronization instruction is inserted into a scenario and assigned to each process in the embodiment of the present invention.

【図8】本発明の実施の形態において、シナリオに挿入
した同期命令が冗長なものとして除去される状態を示す
FIG. 8 is a diagram showing a state in which a synchronization instruction inserted into a scenario is removed as redundant in the embodiment of the present invention;

【図9】本発明の実施の形態において、シナリオグラフ
にダミー動作を挿入し、違反パスが発生する状態を示す
FIG. 9 is a diagram showing a state in which a dummy path is inserted into a scenario graph and a violation path occurs in the embodiment of the present invention;

【図10】本発明の実施の形態において、冗長な同期命
令を効率的に除去する手順を示すフローチャート
FIG. 10 is a flowchart showing a procedure for efficiently removing a redundant synchronization instruction in the embodiment of the present invention.

【図11】本発明の実施の形態における具体例を示す図FIG. 11 is a diagram showing a specific example according to the embodiment of the present invention.

【符号の説明】[Explanation of symbols]

1:編集手段 2:第1の並行プログラム 3:作成手段 4:シナリオ情報 5:分解手段 6:構造的シナリオ情報 7:並行化手段 8:統合化手段 9:ローカルシナリオ情報 10:生成手段 11:第二の並行プログラム 12:解析手段 13:解析情報 21:プロセッサ 22:I/Oインタフェイス 23:共有メモリ 24:入力装置 25:出力装置 26:外部記憶装置 1: Editing means 2: First parallel program 3: Creation means 4: Scenario information 5: Decomposition means 6: Structural scenario information 7: Parallelization means 8: Integration means 9: Local scenario information 10: Generation means 11: Second concurrent program 12: analysis means 13: analysis information 21: processor 22: I / O interface 23: shared memory 24: input device 25: output device 26: external storage device

Claims (10)

【特許請求の範囲】[Claims] 【請求項1】 第1の並行プログラムから実行のシナリ
オを作成する手段と、 前記第1の並行プログラムを解析することによって、第
1の並行プログラムの部分間に存在する依存関係を抽出
する手段と、 前記シナリオを、ループを含まないブロックに階層的に
分解する手段と、 前記依存関係に基づいて、前記分解されたシナリオを前
記ブロックを単位として複数のプロセスに割り当てるこ
とによって並行化する手段と、 各プロセスに割り当てられたシナリオを前記プロセスご
とに統合化する手段と、 統合化されたプロセスごとのシナリオから第2の並行プ
ログラムを生成する手段と、 を有することを特徴とするプログラム開発支援装置。
Means for creating an execution scenario from a first concurrent program; means for extracting a dependency existing between parts of the first concurrent program by analyzing the first concurrent program; A means for hierarchically decomposing the scenario into blocks that do not include a loop; and a means for parallelizing by assigning the decomposed scenario to a plurality of processes in units of the block based on the dependency. A program development support device comprising: means for integrating a scenario assigned to each process for each process; and means for generating a second parallel program from the integrated scenario for each process.
【請求項2】 前記分解する手段は、 与えられたシナリオを正規化する手段を有することを特
徴とする請求項1記載のプログラム開発支援装置。
2. The program development support device according to claim 1, wherein said decomposing means includes means for normalizing a given scenario.
【請求項3】 前記並行化する手段は、シナリオをプロ
セスに割り当てる際、前記依存関係に対応する同期命令
をシナリオに埋め込むように構成されたことを特徴とす
る請求項1又は2記載のプログラム開発支援装置。
3. The program development according to claim 1, wherein the parallelizing unit is configured to embed a synchronization instruction corresponding to the dependency in the scenario when assigning the scenario to a process. Support equipment.
【請求項4】 前記並行化する手段は、シナリオに埋め
込んだ前記同期命令のうち、冗長な同期命令を除去する
ように構成されたことを特徴とする請求項3記載のプロ
グラム開発支援装置。
4. The program development support device according to claim 3, wherein said parallelizing means is configured to remove a redundant synchronization instruction from among the synchronization instructions embedded in a scenario.
【請求項5】 前記並行化する手段は、前記冗長な同期
命令を除去する際、 シナリオに埋め込んだ任意の同期命令の作用を抑制し、 前記抑制の前と後の各シナリオの間で、前記依存関係を
持つ動作が示し得る実行順序が同じかどうかを判断し、 前記実行順序が同じである場合は、作用を抑制した前記
同期命令を除去するように構成されたことを特徴とする
請求項4記載のプログラム開発支援装置。
5. The parallelizing means, when removing the redundant synchronization instruction, suppresses an operation of an arbitrary synchronization instruction embedded in a scenario, and performs the operation between each scenario before and after the suppression. It is configured to judge whether or not the execution order that can be indicated by the operation having the dependency is the same, and if the execution order is the same, the synchronous instruction whose operation has been suppressed is removed. 4. The program development support device according to 4.
【請求項6】 シナリオを用いて並行プログラムの開発
を支援するプログラム開発方法において、 相互に依存関係を有する部分を含む2つのシナリオが等
価かどうかを判定するステップを含み、 前記判定するステップは、 2つのシナリオそれぞれについて、前記依存関係を有す
る部分がいつ実行されたかを表すカウンティングトレー
スの集合を計算するサブステップと、 計算された前記2つの集合を比較し、2つの集合が等し
い場合に2つのシナリオが等価であると判断するサブス
テップと、 を含むことを特徴とするプログラム開発支援方法。
6. A program development method for supporting the development of a concurrent program using a scenario, comprising the step of determining whether two scenarios including a part having an interdependency are equivalent to each other; For each of two scenarios, a sub-step of calculating a set of counting traces indicating when said part with dependencies has been executed; and comparing the two sets calculated, two sets if the two sets are equal And a sub-step of determining that the scenarios are equivalent.
【請求項7】 第1の並行プログラムから実行のシナリ
オを作成するステップと、 前記第1の並行プログラムを解析することによって、第
1の並行プログラムの部分間に存在する依存関係を抽出
するステップと、 前記シナリオを、ループを含まないブロックに階層的に
分解するステップと、 前記依存関係に基づいて、分解された前記シナリオを前
記ブロックを単位として複数のプロセスに割り当てるこ
とによって並行化するステップと、 各プロセスに割り当てられたシナリオを前記プロセスご
とに統合化するステップと、 統合化されたプロセスごとのシナリオから第2の並行プ
ログラムを生成するステップと、 を含むことを特徴とするプログラム開発支援方法。
7. A step of creating an execution scenario from a first concurrent program; and a step of analyzing the first concurrent program to extract a dependency existing between parts of the first concurrent program. , Hierarchically decomposing the scenario into blocks that do not include loops, and parallelizing by assigning the decomposed scenario to a plurality of processes in units of the blocks based on the dependencies, A program development support method, comprising: integrating a scenario assigned to each process for each process; and generating a second concurrent program from the integrated scenario for each process.
【請求項8】 前記並行化するステップは、 シナリオをプロセスに割り当てる際、前記依存関係に対
応する同期命令をシナリオに埋め込むサブステップと、 シナリオに埋め込んだ前記同期命令のうち、冗長な同期
命令を除去するサブステップと、を含むことを特徴とす
る請求項7記載のプログラム開発支援方法。
8. The parallelizing step includes, when assigning a scenario to a process, a sub-step of embedding a synchronization instruction corresponding to the dependency in the scenario, and a redundant synchronization instruction among the synchronization instructions embedded in the scenario. The program development support method according to claim 7, further comprising: a removing step.
【請求項9】 前記除去するサブステップは、 シナリオに埋め込んだ任意の同期命令の作用を抑制し、 前記抑制の前と後の各シナリオの間で、前記依存関係を
持つ動作が示し得る実行順序が同じかどうかを判断し、 前記実行順序が同じである場合は、作用を抑制した前記
同期命令を除去することを特徴とする請求項8記載のプ
ログラム開発支援方法。
9. The removing sub-step suppresses an action of an arbitrary synchronization instruction embedded in a scenario, and an execution order in which an operation having the dependency relationship can be indicated between each scenario before and after the suppression. 9. The method according to claim 8, wherein it is determined whether are the same, and if the execution order is the same, the synchronous instruction whose operation is suppressed is removed.
【請求項10】 コンピュータを用いて並行プログラム
の開発を支援するプログラム開発支援用ソフトウェアを
記録した記録媒体において、 前記プログラム開発支援用ソフトウェアはコンピュータ
に、 第1の並行プログラムから実行のシナリオを作成させ、 前記第1の並行プログラムを解析することによって、第
1の並行プログラムの部分間に存在する依存関係を抽出
させ、 前記シナリオを、ループを含まないブロックに階層的に
分解させ、 前記依存関係に基づいて、分解された前記シナリオを前
記ブロックを単位として複数のプロセスに割り当てるこ
とによって並行化させ、 各プロセスに割り当てられたシナリオを前記プロセスご
とに統合化させ、 統合化されたプロセスごとのシナリオから第2の並行プ
ログラムを生成させることを特徴とするプログラム開発
支援用ソフトウェアを記録した記録媒体。
10. A recording medium on which program development support software for supporting concurrent program development using a computer is recorded. The program development support software causes a computer to create an execution scenario from a first concurrent program. Analyzing the first concurrent program to extract dependencies existing between parts of the first concurrent program; decomposing the scenario hierarchically into blocks that do not include loops; Based on the above, the decomposed scenarios are parallelized by assigning the blocks to a plurality of processes in units of blocks, and the scenarios assigned to each process are integrated for each of the processes. From the integrated scenario for each process, It is special to generate a second concurrent program. A recording medium recording a program development support for software to be.
JP29988697A 1997-10-31 1997-10-31 Program development support apparatus and method, and recording medium recording program development support software Expired - Fee Related JP3675623B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP29988697A JP3675623B2 (en) 1997-10-31 1997-10-31 Program development support apparatus and method, and recording medium recording program development support software

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP29988697A JP3675623B2 (en) 1997-10-31 1997-10-31 Program development support apparatus and method, and recording medium recording program development support software

Publications (2)

Publication Number Publication Date
JPH11134307A true JPH11134307A (en) 1999-05-21
JP3675623B2 JP3675623B2 (en) 2005-07-27

Family

ID=17878140

Family Applications (1)

Application Number Title Priority Date Filing Date
JP29988697A Expired - Fee Related JP3675623B2 (en) 1997-10-31 1997-10-31 Program development support apparatus and method, and recording medium recording program development support software

Country Status (1)

Country Link
JP (1) JP3675623B2 (en)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001256209A (en) * 2000-03-13 2001-09-21 Yoko Tomoyasu Method and mechanism for fault tolerant consensus for asynchronous shared object system
JP2007042134A (en) * 2002-09-17 2007-02-15 Internatl Business Mach Corp <Ibm> Method for efficient emulation of multiprocessor memory consistency
US20100082762A1 (en) * 2008-09-29 2010-04-01 Fujitsu Limited Message tying processing method and apparatus
JP2010102683A (en) * 2008-09-29 2010-05-06 Fujitsu Ltd Message tying processing program, method and apparatus
JP2010118082A (en) * 2010-03-01 2010-05-27 Toshiba Corp Information processing apparatus and program verifying method
US7844446B2 (en) 2002-09-17 2010-11-30 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US8108843B2 (en) 2002-09-17 2012-01-31 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
CN111857970A (en) * 2020-07-29 2020-10-30 北京思特奇信息技术股份有限公司 Scheduling method and system based on multiple dependent processes

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0380337A (en) * 1989-04-28 1991-04-05 Hitachi Ltd Parallel form producing device
JPH0689188A (en) * 1992-09-08 1994-03-29 Nec Software Ltd Automatic parallel processing system
JPH06250988A (en) * 1993-02-26 1994-09-09 Nec Software Ltd Automatic parallel processing method
JPH09237191A (en) * 1995-12-26 1997-09-09 Toshiba Corp Programming supporting device, programming supporting method and medium recording programming supporting program

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0380337A (en) * 1989-04-28 1991-04-05 Hitachi Ltd Parallel form producing device
JPH0689188A (en) * 1992-09-08 1994-03-29 Nec Software Ltd Automatic parallel processing system
JPH06250988A (en) * 1993-02-26 1994-09-09 Nec Software Ltd Automatic parallel processing method
JPH09237191A (en) * 1995-12-26 1997-09-09 Toshiba Corp Programming supporting device, programming supporting method and medium recording programming supporting program

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001256209A (en) * 2000-03-13 2001-09-21 Yoko Tomoyasu Method and mechanism for fault tolerant consensus for asynchronous shared object system
JP2007042134A (en) * 2002-09-17 2007-02-15 Internatl Business Mach Corp <Ibm> Method for efficient emulation of multiprocessor memory consistency
US7844446B2 (en) 2002-09-17 2010-11-30 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US8108843B2 (en) 2002-09-17 2012-01-31 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US8578351B2 (en) 2002-09-17 2013-11-05 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US9043194B2 (en) 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency
US20100082762A1 (en) * 2008-09-29 2010-04-01 Fujitsu Limited Message tying processing method and apparatus
JP2010102683A (en) * 2008-09-29 2010-05-06 Fujitsu Ltd Message tying processing program, method and apparatus
US8539035B2 (en) 2008-09-29 2013-09-17 Fujitsu Limited Message tying processing method and apparatus
JP2010118082A (en) * 2010-03-01 2010-05-27 Toshiba Corp Information processing apparatus and program verifying method
CN111857970A (en) * 2020-07-29 2020-10-30 北京思特奇信息技术股份有限公司 Scheduling method and system based on multiple dependent processes

Also Published As

Publication number Publication date
JP3675623B2 (en) 2005-07-27

Similar Documents

Publication Publication Date Title
JP4629768B2 (en) Parallelization processing method, system, and program
US6941546B2 (en) Method and apparatus for testing a software component using an abstraction matrix
JP4622611B2 (en) Signal processing device
JP4414373B2 (en) Program verification program, program verification apparatus, and program verification method
US6067415A (en) System for assisting a programmer find errors in concurrent programs
US9152389B2 (en) Trace generating unit, system, and program of the same
JP2010186476A (en) Computer mounting method, system and computer program, for verifying correctness of execution history including multiple operations operated in parallel to data structure
JP4050339B2 (en) Concurrent program creation support device, parallel program creation method, and parallel program execution device
Choi et al. FLASH: Fast, parallel, and accurate simulator for HLS
US9117020B2 (en) Determining control flow divergence due to variable value difference
JP5178852B2 (en) Information processing apparatus and program
Weil et al. Efficient compilation of Esterel for real-time embedded systems
JP3675623B2 (en) Program development support apparatus and method, and recording medium recording program development support software
Bogdanov Automated testing of Harel's statecharts
Potop-Butucaru et al. Optimizations for faster execution of Esterel programs
JPH05101141A (en) High-level composition device
JP3641090B2 (en) Programming support apparatus and method
US7823141B1 (en) Using a concurrent partial inspector loop with speculative parallelism
Falk et al. A rule-based static dataflow clustering algorithm for efficient embedded software synthesis
JP3930255B2 (en) System specification information processing apparatus, system specification information processing method, and program
JP6878707B2 (en) Test equipment, test methods and test programs
US20080282237A1 (en) Method and Apparatus For Generating Execution Equivalence Information
JP2016146148A (en) Design support device and design support method
JP2006285582A (en) Program code generating device, program code generating method, and computer program
JP6600888B2 (en) Parallelizing compiler, parallelizing compiling device, and parallel program generation method

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041214

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050214

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050412

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050426

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090513

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090513

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100513

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees