JP3094475B2 - プログラム検証方法 - Google Patents
プログラム検証方法Info
- Publication number
- JP3094475B2 JP3094475B2 JP03029848A JP2984891A JP3094475B2 JP 3094475 B2 JP3094475 B2 JP 3094475B2 JP 03029848 A JP03029848 A JP 03029848A JP 2984891 A JP2984891 A JP 2984891A JP 3094475 B2 JP3094475 B2 JP 3094475B2
- Authority
- JP
- Japan
- Prior art keywords
- processing
- program
- array data
- array
- executed
- 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.)
- Expired - Fee Related
Links
Landscapes
- Debugging And Monitoring (AREA)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Description
【0001】
【産業上の利用分野】本発明は、プログラムを検証する
方法、およびその方法のためのプログラム検証ツールと
コンパイラに関する。
方法、およびその方法のためのプログラム検証ツールと
コンパイラに関する。
【0002】特に、並列処理あるいはベクトル処理を目
的とするプログラム実行時における配列データの不正参
照の可能性を検出して対応するソースプログラムの適否
を検証する方法およびその方法を実行するのに有用なプ
ログラム検証ツールおよびコンパイラに関する。
的とするプログラム実行時における配列データの不正参
照の可能性を検出して対応するソースプログラムの適否
を検証する方法およびその方法を実行するのに有用なプ
ログラム検証ツールおよびコンパイラに関する。
【0003】
【従来の技術】並列計算機あるいはベクトル計算機でユ
ーザプログラムを実行した場合しばしば発生する不良原
因の一つは、配列データの不正参照(つまり定義と引用
の順番が変わること)である。
ーザプログラムを実行した場合しばしば発生する不良原
因の一つは、配列データの不正参照(つまり定義と引用
の順番が変わること)である。
【0004】逐次実行用ソースプログラムから並列計算
機あるいはベクトル計算機で実行可能な部分を自動的に
見付け出す機能を持ったコンパイラでは、配列データに
ついて同一配列要素に対して定義と引用、定義と定義が
同じループ繰返しで行なわれるかを解析し、ソースプロ
グラムの並列化あるいはベクトル化が可能かどうかが判
定される。しかし、配列添字内に実行時中に値が決まる
変数が存在するような場合にはコンパイル時にどの配列
要素かを決定することができない。この場合にはコンパ
イラは並列化やベクトル化を判定できないため、通常ユ
ーザによる指示に従って並列化する方法がとられてい
る。しかしながらこの方法では指示を誤るために実行結
果の不良を引き起こすことが多い。
機あるいはベクトル計算機で実行可能な部分を自動的に
見付け出す機能を持ったコンパイラでは、配列データに
ついて同一配列要素に対して定義と引用、定義と定義が
同じループ繰返しで行なわれるかを解析し、ソースプロ
グラムの並列化あるいはベクトル化が可能かどうかが判
定される。しかし、配列添字内に実行時中に値が決まる
変数が存在するような場合にはコンパイル時にどの配列
要素かを決定することができない。この場合にはコンパ
イラは並列化やベクトル化を判定できないため、通常ユ
ーザによる指示に従って並列化する方法がとられてい
る。しかしながらこの方法では指示を誤るために実行結
果の不良を引き起こすことが多い。
【0005】また、並列処理を記述することができる言
語で書かれたプログラムでは、ユーザの記述誤りが発生
しやすい。この誤りをコンパイラによる配列データの参
照関係のチェックで発見することも可能であるが、上述
したように、全てのケースがコンパイル時の解析によっ
て明らかにならないため、やはり実行結果の不良を引き
起こすことがある。
語で書かれたプログラムでは、ユーザの記述誤りが発生
しやすい。この誤りをコンパイラによる配列データの参
照関係のチェックで発見することも可能であるが、上述
したように、全てのケースがコンパイル時の解析によっ
て明らかにならないため、やはり実行結果の不良を引き
起こすことがある。
【0006】プログラムを実行したときの配列データへ
のアクセスパターンをチェックし、表示する従来の方法
が、「Parallel Computing9 (1988/89) 25-35」におい
て論じられている。この方法は、高性能計算機向けアル
ゴリズムを検証することを狙いとしたものであり、逐次
実行用プログラムが実行された場合の定義と引用のアク
セス順がそれぞれ別ウィンドウ画面に表示される。
のアクセスパターンをチェックし、表示する従来の方法
が、「Parallel Computing9 (1988/89) 25-35」におい
て論じられている。この方法は、高性能計算機向けアル
ゴリズムを検証することを狙いとしたものであり、逐次
実行用プログラムが実行された場合の定義と引用のアク
セス順がそれぞれ別ウィンドウ画面に表示される。
【0007】
【発明が解決しようとする課題】上記従来技術では、並
列計算機あるいはベクトル計算機で実行されるプログラ
ムについては考慮されていない。即ち、そのデバッグと
いう観点で、配列データの不正参照の可能性をチェック
することについての考慮がなされていない。従って、配
列データの参照関係をチェックし、プログラムが並列処
理あるいはベクトル処理に適するか否かを検証する方法
が必要となる。また、検証結果を分かり易く表示する方
法と、そのためのプログラム検証ツールとコンパイラが
必要となる。
列計算機あるいはベクトル計算機で実行されるプログラ
ムについては考慮されていない。即ち、そのデバッグと
いう観点で、配列データの不正参照の可能性をチェック
することについての考慮がなされていない。従って、配
列データの参照関係をチェックし、プログラムが並列処
理あるいはベクトル処理に適するか否かを検証する方法
が必要となる。また、検証結果を分かり易く表示する方
法と、そのためのプログラム検証ツールとコンパイラが
必要となる。
【0008】並列計算機あるいはベクトル計算機で実行
することを目的とするプログラムのデバッグは、これら
ターゲット計算機を用いてデバッグするのが一般的であ
る。しかし、デバックのためにこれらの高性能計算機を
使用するのは計算機利用効率という面で問題がある。
することを目的とするプログラムのデバッグは、これら
ターゲット計算機を用いてデバッグするのが一般的であ
る。しかし、デバックのためにこれらの高性能計算機を
使用するのは計算機利用効率という面で問題がある。
【0009】本発明の第1の目的は、オブジェクトプロ
グラム実行時における配列データの参照関係をチェック
して、対応するソースプログラムの並列処理あるいはベ
クトル処理に対する適否を検証する方法を提供すること
にある。
グラム実行時における配列データの参照関係をチェック
して、対応するソースプログラムの並列処理あるいはベ
クトル処理に対する適否を検証する方法を提供すること
にある。
【0010】また、本発明の第2の目的は、その検証結
果を分かり易く表示する方法を提供することにある。
果を分かり易く表示する方法を提供することにある。
【0011】本発明の第3の目的は、並列計算機やベク
トル計算機で実行することを目的とするソースプログラ
ムをコンパイルするためのコンパイラを提供することに
ある。
トル計算機で実行することを目的とするソースプログラ
ムをコンパイルするためのコンパイラを提供することに
ある。
【0012】
【課題を解決するための手段】本発明の特徴の第1の観
点では、並列処理単位としての複数の並列プロセスに番
号を割当て、配列要素が定義された並列プロセス番号
と、その配列要素が作用された並列プロセス番号とを比
較し、両者が一致するか否かによってその配列要素への
不正参照の可能性を判定する。これによりプログラムの
並列処理可能性が検証されることができる。
点では、並列処理単位としての複数の並列プロセスに番
号を割当て、配列要素が定義された並列プロセス番号
と、その配列要素が作用された並列プロセス番号とを比
較し、両者が一致するか否かによってその配列要素への
不正参照の可能性を判定する。これによりプログラムの
並列処理可能性が検証されることができる。
【0013】また、本発明の特徴の第2の観点では、ベ
クトル化文に順に番号を付け、検査されるべき配列要素
が定義されたベクトル化文番号と、その配列要素が引用
されたベクトル化文番号とを比較し、両者の大小によっ
てその配列要素への不正参照の可能性を判定する。これ
によりプログラムのベクトル処理可能性が検証されるこ
とができる。
クトル化文に順に番号を付け、検査されるべき配列要素
が定義されたベクトル化文番号と、その配列要素が引用
されたベクトル化文番号とを比較し、両者の大小によっ
てその配列要素への不正参照の可能性を判定する。これ
によりプログラムのベクトル処理可能性が検証されるこ
とができる。
【0014】また、本発明の特徴の、第3の観点では、
複数の配列要素に対応する表示領域を一次元または二次
元のマトリクス状に配置し、それらの各表示領域で、対
応する配列要素への不正参照の可能性を示すデータが表
示される。
複数の配列要素に対応する表示領域を一次元または二次
元のマトリクス状に配置し、それらの各表示領域で、対
応する配列要素への不正参照の可能性を示すデータが表
示される。
【0015】また、本発明の特徴の第4の観点では、配
列要素の定義・引用の別を示すアクセス種別と、添字値
と、アクセスされた並列プロセス番号またはベクトル化
ソース文番号とを配列アクセス情報として入力し、その
配列要素が定義された並列プロセス番号またはベクトル
化ソース文番号と、その配列要素が引用された並列プロ
セス番号またはベクトル化ソース文番号とを比較して、
プログラムの並列処理可能性またはベクトル処理可能性
を検証することができるプログラム検証ツールとそのプ
ログラム検証ツールが前記配列アクセス情報をソースプ
ログラムから得られるようにするコンパイラが提供され
る。
列要素の定義・引用の別を示すアクセス種別と、添字値
と、アクセスされた並列プロセス番号またはベクトル化
ソース文番号とを配列アクセス情報として入力し、その
配列要素が定義された並列プロセス番号またはベクトル
化ソース文番号と、その配列要素が引用された並列プロ
セス番号またはベクトル化ソース文番号とを比較して、
プログラムの並列処理可能性またはベクトル処理可能性
を検証することができるプログラム検証ツールとそのプ
ログラム検証ツールが前記配列アクセス情報をソースプ
ログラムから得られるようにするコンパイラが提供され
る。
【0016】
【作用】並列処理可能であるためには、並列プロセスを
任意の順番で実行しても正しい結果が得られる必要があ
る。つまり、各配列要素の定義と引用は同じ並列プロセ
スで行われる必要がある。定義時の並列プロセス番号と
引用時の並列プロセス番号とが異なることを検出するこ
とにより、配列データへの不正参照の可能性を検出する
ことが出来る。すなわち、第1の観点により、プログラ
ムの並列処理に対する適否を検証できる。
任意の順番で実行しても正しい結果が得られる必要があ
る。つまり、各配列要素の定義と引用は同じ並列プロセ
スで行われる必要がある。定義時の並列プロセス番号と
引用時の並列プロセス番号とが異なることを検出するこ
とにより、配列データへの不正参照の可能性を検出する
ことが出来る。すなわち、第1の観点により、プログラ
ムの並列処理に対する適否を検証できる。
【0017】一方、ベクトル処理されるときの各配列要
素の参照順序はベクトル化ソース文番号の順となるか
ら、定義が引用より先にあるためには、ある配列要素の
引用時のソース文番号がその配列要素の定義時のソース
文番号より大きい必要がある。引用時のソース文番号と
定義のソース文番号の大小を比較することにより、配列
データへの不正参照の可能性を検出することが出来る。
すなわち、上記第2の観点により、プログラムのベクト
ル処理に対する適否を検証できる。
素の参照順序はベクトル化ソース文番号の順となるか
ら、定義が引用より先にあるためには、ある配列要素の
引用時のソース文番号がその配列要素の定義時のソース
文番号より大きい必要がある。引用時のソース文番号と
定義のソース文番号の大小を比較することにより、配列
データへの不正参照の可能性を検出することが出来る。
すなわち、上記第2の観点により、プログラムのベクト
ル処理に対する適否を検証できる。
【0018】第3の観点によるトレースデータの表示方
法では、各配列要素への不正参照の可能性が、画面上で
マトリクス状に配置されて表示される。従って、どの配
列要素が並列処理あるいはベクトル処理の阻害原因かを
一目で把握できるようになる。
法では、各配列要素への不正参照の可能性が、画面上で
マトリクス状に配置されて表示される。従って、どの配
列要素が並列処理あるいはベクトル処理の阻害原因かを
一目で把握できるようになる。
【0019】第4の観点による本発明のプログラム検証
ツールおよびコンパイラは、逐次計算機で動作すること
が出来るから、並列計算機やベクトル計算機で実行する
ことを目的とするソースプログラムを逐次計算機を用い
てデバッグすることが可能となる。
ツールおよびコンパイラは、逐次計算機で動作すること
が出来るから、並列計算機やベクトル計算機で実行する
ことを目的とするソースプログラムを逐次計算機を用い
てデバッグすることが可能となる。
【0020】
【実施例】次に、本発明の実施例を図面を参照しつつ説
明する。なお、これにより本発明が限定されるものでは
ない。
明する。なお、これにより本発明が限定されるものでは
ない。
【0021】図1は、ソースプログラムをロードモジュ
ールに変換し、実行するための逐次計算機システムの構
成を示す。逐次計算機システムはCPU10,メモリ1
2,外部格納装置14,表示装置16,キーボード18
から構成される。装置14にはソースプログラム100
と本発明によるコンパイラ200が格納されている。図
3は逐次計算機システムの機能ブロック図を示す。装置
14に格納されているソースプログラム100とコンパ
イラ200はメモリ12にロードされる。コンパイラ2
00がCPU10により実行され、ソースプログラム1
00はユーザが入力する検査対象とする配列の名称に依
存してロードモジュール300に変換され、メモリ12
に格納される。その後ロードモジュール300は装置1
4に格納される。
ールに変換し、実行するための逐次計算機システムの構
成を示す。逐次計算機システムはCPU10,メモリ1
2,外部格納装置14,表示装置16,キーボード18
から構成される。装置14にはソースプログラム100
と本発明によるコンパイラ200が格納されている。図
3は逐次計算機システムの機能ブロック図を示す。装置
14に格納されているソースプログラム100とコンパ
イラ200はメモリ12にロードされる。コンパイラ2
00がCPU10により実行され、ソースプログラム1
00はユーザが入力する検査対象とする配列の名称に依
存してロードモジュール300に変換され、メモリ12
に格納される。その後ロードモジュール300は装置1
4に格納される。
【0022】コンパイラ200は、ループ分割部230
と、アクセス情報付加部210と、コード生成部220
とを有している。
と、アクセス情報付加部210と、コード生成部220
とを有している。
【0023】230は、ソースプログラム100が並列
処理を目的とする場合には、ソースプログラム100の
並列処理の対象部分を複数の並列処理単位に分け、21
0は各並列処理単位内のユーザが指定した検査対象配列
の要素にその並列処理単位を示すアクセス識別子を割当
てる。例えば、230は、図13のループ40をループ
41に変換する。並列処理のための分割数NDを4とす
ると、ループ41はループ40aから40dと等価であ
る。210は並列プロセス番号#1のループ40a内の
文41aで定義される配列Aの要素と、文42aで引用
される配列Aの要素に対しては、アクセス識別子#1を
割当てる。同様に、並列プロセス番号#2,#3,#4
のループ40b,40c,40d内で定義・引用される
配列Aの要素にはアクセス識別子#2,#3,#4をそ
れぞれ割当てる。
処理を目的とする場合には、ソースプログラム100の
並列処理の対象部分を複数の並列処理単位に分け、21
0は各並列処理単位内のユーザが指定した検査対象配列
の要素にその並列処理単位を示すアクセス識別子を割当
てる。例えば、230は、図13のループ40をループ
41に変換する。並列処理のための分割数NDを4とす
ると、ループ41はループ40aから40dと等価であ
る。210は並列プロセス番号#1のループ40a内の
文41aで定義される配列Aの要素と、文42aで引用
される配列Aの要素に対しては、アクセス識別子#1を
割当てる。同様に、並列プロセス番号#2,#3,#4
のループ40b,40c,40d内で定義・引用される
配列Aの要素にはアクセス識別子#2,#3,#4をそ
れぞれ割当てる。
【0024】次に、コード生成部220は、検査対象配
列の要素の定義または引用がある毎にそのアクセス情報
レコードを配列アクセス情報ファイル400へ出力する
ためのオブジェクトコードを生成し、オブジェクトプロ
グラムに付加しロードモジュール300に出力する。コ
ンパイル中にオブジェクトプログラムに付加するもので
もよい。アクセス情報レコードには、アクセス識別子の
他、アクセスされる配列要素の値と添字、及びソースプ
ログラムのステートメント番号が含まれる。
列の要素の定義または引用がある毎にそのアクセス情報
レコードを配列アクセス情報ファイル400へ出力する
ためのオブジェクトコードを生成し、オブジェクトプロ
グラムに付加しロードモジュール300に出力する。コ
ンパイル中にオブジェクトプログラムに付加するもので
もよい。アクセス情報レコードには、アクセス識別子の
他、アクセスされる配列要素の値と添字、及びソースプ
ログラムのステートメント番号が含まれる。
【0025】以上により、コンパイラ200から出力さ
れたロードモジュール300の実行が完了すれば、その
配列データに関するアクセス情報レコードが格納された
配列アクセス情報ファイル400が作成され格納装置2
6に格納される。
れたロードモジュール300の実行が完了すれば、その
配列データに関するアクセス情報レコードが格納された
配列アクセス情報ファイル400が作成され格納装置2
6に格納される。
【0026】ファイル400の各レコードは、図7に示
す如きデータ形式を有している。フィールド410に
は、配列データの要素がアクセスされた順番が格納され
る。フィールド420には、定義か引用か示すアクセス
種別が格納される。フィールド430には、次元別の配
列添字値が格納される。フィールド440には、アクセ
ス識別子が格納される。フィールド450にはソースプ
ログラムの文番号が格納される。フィールド460には
アクセスされた配列要素の値が格納される。
す如きデータ形式を有している。フィールド410に
は、配列データの要素がアクセスされた順番が格納され
る。フィールド420には、定義か引用か示すアクセス
種別が格納される。フィールド430には、次元別の配
列添字値が格納される。フィールド440には、アクセ
ス識別子が格納される。フィールド450にはソースプ
ログラムの文番号が格納される。フィールド460には
アクセスされた配列要素の値が格納される。
【0027】ファイル400は、本発明の一実施例のプ
ログラム検証ツールを含むトレースデータ表示ツール5
00と共に、シングル計算機システムの格納装置14か
らメモリ12に移され実行される。これにより並列計算
機システムは他の処理に使用することができる。
ログラム検証ツールを含むトレースデータ表示ツール5
00と共に、シングル計算機システムの格納装置14か
らメモリ12に移され実行される。これにより並列計算
機システムは他の処理に使用することができる。
【0028】図6ツール500を示す。ツール500は
配列情報入力部510と配列アクセス情報処理部520
を有している。部510はファイル400のレコードを
フィールド410のアクセス番号順に入力し、部520
に渡す。
配列情報入力部510と配列アクセス情報処理部520
を有している。部510はファイル400のレコードを
フィールド410のアクセス番号順に入力し、部520
に渡す。
【0029】部520は、図8に示すように、アクセス
識別子比較部522と、アクセス識別情報更新部524
と、表示色決定部526と、アクセス識別子格納用スト
レージ528を有している。ストレージ528は、配列
要素に対応したエントリを有しており、アクセスされた
配列要素のアクセス識別子とアクセス識別とを、対応す
るエントリに格納する。この格納されたアクセス識別子
はPREIDと表わされ初期値は0である。
識別子比較部522と、アクセス識別情報更新部524
と、表示色決定部526と、アクセス識別子格納用スト
レージ528を有している。ストレージ528は、配列
要素に対応したエントリを有しており、アクセスされた
配列要素のアクセス識別子とアクセス識別とを、対応す
るエントリに格納する。この格納されたアクセス識別子
はPREIDと表わされ初期値は0である。
【0030】部520は、並列計算機で実行することを
目的とするプログラムに対しては、図9に示すフローチ
ャートに従って作動する。
目的とするプログラムに対しては、図9に示すフローチ
ャートに従って作動する。
【0031】これらフローチャート中、ステップ522
a〜522eは部522による処理を、ステップ524
aは部524による処理を、ステップ526a〜526
cは部526による処理を示す。
a〜522eは部522による処理を、ステップ524
aは部524による処理を、ステップ526a〜526
cは部526による処理を示す。
【0032】次に、図9に示す並列計算機で実行するこ
とを目的とするプログラムに対する作動を説明する。
とを目的とするプログラムに対する作動を説明する。
【0033】最初に並列計算機で実行することを目的と
するソースプログラムに対する本発明のプログラム検証
方法の実施例を図11〜14を用いて説明する。
するソースプログラムに対する本発明のプログラム検証
方法の実施例を図11〜14を用いて説明する。
【0034】図11に示すループ30を並列に計算する
ことは、ループ30をループ30a,30b,30c,
30dに分割し、これら分割したループ30a,30
b,30c,30dを並列に実行することである。この
ときに、もし、分割したループにまたがって同一配列要
素の定義・引用が存在すると、もとの定義・引用の順が
逆転する可能性がある。これは、並列実行といっても、
プロセッサの空き状態により各分割ループが同時に実行
されると限らないからである。
ことは、ループ30をループ30a,30b,30c,
30dに分割し、これら分割したループ30a,30
b,30c,30dを並列に実行することである。この
ときに、もし、分割したループにまたがって同一配列要
素の定義・引用が存在すると、もとの定義・引用の順が
逆転する可能性がある。これは、並列実行といっても、
プロセッサの空き状態により各分割ループが同時に実行
されると限らないからである。
【0035】さらに、同一要素への定義が分割したルー
プの異なるループに存在する場合も、その要素の最終値
がプロセッサの状態によって変化する可能性がある。し
たがって、これら2つのケースは並列計算機で正しく実
行できる。
プの異なるループに存在する場合も、その要素の最終値
がプロセッサの状態によって変化する可能性がある。し
たがって、これら2つのケースは並列計算機で正しく実
行できる。
【0036】図12(A)〜(E)は図11で入力変数
K=0の場合のループ30、およびループ30a,30
b,30cと30dにおける配列Aの要素の定義・引用
の関係を示している。配列Aの要素A(I)d は定義を
表わし、配列Aの要素A(I)u は引用を表わす。ル
ープ30、およびループ30a,30b,30cおよび
30dのいずれでも配列Aの各要素は同じループでのみ
定義・引用が発生し、異なるループの間では定義・引用
の関係を持たない。従ってループ30は、並列計算機で
正しく実行できる。
K=0の場合のループ30、およびループ30a,30
b,30cと30dにおける配列Aの要素の定義・引用
の関係を示している。配列Aの要素A(I)d は定義を
表わし、配列Aの要素A(I)u は引用を表わす。ル
ープ30、およびループ30a,30b,30cおよび
30dのいずれでも配列Aの各要素は同じループでのみ
定義・引用が発生し、異なるループの間では定義・引用
の関係を持たない。従ってループ30は、並列計算機で
正しく実行できる。
【0037】次に、図13のループ40を実行すること
は、これを分割することにより得られるループ40a,
40b,40c,40dを並列実行するのと等価であ
る。
は、これを分割することにより得られるループ40a,
40b,40c,40dを並列実行するのと等価であ
る。
【0038】図14(A)〜(D)ループ40、および
ループ40a,40b,40c,40dにおける配列A
の要素の定義・引用の関係を示している。この場合に
は、異なるループの間で同一要素が定義・引用される。
従って、並列実行によって不正参照が発生する可能性が
ある。
ループ40a,40b,40c,40dにおける配列A
の要素の定義・引用の関係を示している。この場合に
は、異なるループの間で同一要素が定義・引用される。
従って、並列実行によって不正参照が発生する可能性が
ある。
【0039】一般に、配列添字が複雑で、しかも実行時
に入力文などによって値が決まる変数が添字に含まれる
と、実行するまでこの参照関係が分からないため、並列
計算機で正しく実行できるかどうかコンパイル時に判定
が容易でない。そこで、元のプログラムを並列対象部分
たとえばループを並列処理単位に分け任意の順番に並べ
たものと等価なプログラムに変換し、そのプログラムを
逐次計算機で実行させ、各配列要素の定義・引用が同一
並列処理単位で発生するか、異なる並列処理単位で発生
するかあるいは定義が異なる並列処理単位で発生するか
をチェックすることにすれば、上記参照関係を容易にチ
ェックできる。
に入力文などによって値が決まる変数が添字に含まれる
と、実行するまでこの参照関係が分からないため、並列
計算機で正しく実行できるかどうかコンパイル時に判定
が容易でない。そこで、元のプログラムを並列対象部分
たとえばループを並列処理単位に分け任意の順番に並べ
たものと等価なプログラムに変換し、そのプログラムを
逐次計算機で実行させ、各配列要素の定義・引用が同一
並列処理単位で発生するか、異なる並列処理単位で発生
するかあるいは定義が異なる並列処理単位で発生するか
をチェックすることにすれば、上記参照関係を容易にチ
ェックできる。
【0040】言い換えると、各配列要素の引用時の並列
プロセス番号(並列処理単位につけた番号)と定義時の
並列プロセス番号とが同じかあるいは各定義時の並列プ
ロセス番号が同じか否かをチェックすることによりプロ
グラムの並列処理可能性を検証することが出来る。
プロセス番号(並列処理単位につけた番号)と定義時の
並列プロセス番号とが同じかあるいは各定義時の並列プ
ロセス番号が同じか否かをチェックすることによりプロ
グラムの並列処理可能性を検証することが出来る。
【0041】図9のステップ522bでは、入力された
処理対象の配列要素に対応するので同じ添字値をもつア
クセス識別子格納用ストレージ528のエントリから旧
アクセス識別子PREIDと旧アクセス種別を読み込
む。
処理対象の配列要素に対応するので同じ添字値をもつア
クセス識別子格納用ストレージ528のエントリから旧
アクセス識別子PREIDと旧アクセス種別を読み込
む。
【0042】ステップ522dでは、PREID=0か
判定する。PREID=0、すなわち、現在処理中の配
列要素の値が未だ定義も引用もされていない場合には、
ステップ524aに進む。PREID≠0、すなわち、
現在処理中の配列要素の値が既に定義あるいは引用され
ている場合には、ステップ522eに進む。ステップ5
22eでは、新,旧アクセス種別がともに引用か判定す
る。ともに引用の場合には、ステップ522aに進む。
ともに引用でなければ、ステップ522cに進む。ステ
ップ522cでは、現在処理中の配列要素の新アクセス
識別子NOWIDと旧アクセス識別子PREIDとが等
しいか判定する。異なる場合には、ステップ526aに
進む。等しい場合にはステップ522aに進む。
判定する。PREID=0、すなわち、現在処理中の配
列要素の値が未だ定義も引用もされていない場合には、
ステップ524aに進む。PREID≠0、すなわち、
現在処理中の配列要素の値が既に定義あるいは引用され
ている場合には、ステップ522eに進む。ステップ5
22eでは、新,旧アクセス種別がともに引用か判定す
る。ともに引用の場合には、ステップ522aに進む。
ともに引用でなければ、ステップ522cに進む。ステ
ップ522cでは、現在処理中の配列要素の新アクセス
識別子NOWIDと旧アクセス識別子PREIDとが等
しいか判定する。異なる場合には、ステップ526aに
進む。等しい場合にはステップ522aに進む。
【0043】ステップ524aでは、現在処理中の配列
要素のアクセス識別子NOWIDとアクセス種別を、対
応するストレージ528のエントリに格納する。そし
て、ステップ522aに進む。ステップ522aでは、
現在処理中の配列要素のアクセス種別を判定する。種別
が定義ならば、ステップ526cに進む。種別が引用な
らば、ステップ526bに進む。
要素のアクセス識別子NOWIDとアクセス種別を、対
応するストレージ528のエントリに格納する。そし
て、ステップ522aに進む。ステップ522aでは、
現在処理中の配列要素のアクセス種別を判定する。種別
が定義ならば、ステップ526cに進む。種別が引用な
らば、ステップ526bに進む。
【0044】ステップ526aでは、現在処理中の配列
要素を色Cで表示すること且つ短時間だけ高輝度で表示
することを決定する。色Cは、定義あるいは引用時にア
クセス識別子が一致しない要素であることを示す。つま
り、不正参照の可能性のある要素であることを示す。短
時間だけ高輝度で表示するのは、現在処理中の配列要素
であることを示すためである。一方、ステップ526b
では、現在処理中の配列要素を色Bで表示すること且つ
短時間だけ高輝度で表示することを決定する。色Bは、
引用された要素であることを示す。ステップ526cで
は、現在処理中の配列要素を色Aで表示すること且つ短
時間だけ高輝度で表示することを決定する。色Aは、定
義された要素であることを示す。
要素を色Cで表示すること且つ短時間だけ高輝度で表示
することを決定する。色Cは、定義あるいは引用時にア
クセス識別子が一致しない要素であることを示す。つま
り、不正参照の可能性のある要素であることを示す。短
時間だけ高輝度で表示するのは、現在処理中の配列要素
であることを示すためである。一方、ステップ526b
では、現在処理中の配列要素を色Bで表示すること且つ
短時間だけ高輝度で表示することを決定する。色Bは、
引用された要素であることを示す。ステップ526cで
は、現在処理中の配列要素を色Aで表示すること且つ短
時間だけ高輝度で表示することを決定する。色Aは、定
義された要素であることを示す。
【0045】以上の動作を、図15に示すループ700
でK:1の場合を用いて具体的に説明する。
でK:1の場合を用いて具体的に説明する。
【0046】ループ700をDO200で並列化する場
合、分割数NDを用いてループ701に変換し、さらに
アクセス情報を出力するために、コンパイラは図16の
ループ内の文701a,701bに対して、81c,8
2cに示すようなオブジェクトコードを付加する。この
とき701a,702bのソース文番号は各々n,n+
1であるとする。701aの検査対象配列要素A(I,
J)に対しては、定義であることを示すアクセス種別
“DEF”と添字の値I,Jとソース文番号nと、配列
要素の値をトレースデータとして出力するコードを生成
する。701bのA(I,J−K)に対しては、使用で
あることを示すアクセス種別“USE”と、添字の値
I,J−Kと、ソース文番号n+1と、配列要素の値を
トレースデータとして出力するコードを生成する。説明
の都合上、ND=4とし、ループ701に対応するルー
プ700a,700b,700c,700dで説明す
る。配列要素はA(I,J)とする。
合、分割数NDを用いてループ701に変換し、さらに
アクセス情報を出力するために、コンパイラは図16の
ループ内の文701a,701bに対して、81c,8
2cに示すようなオブジェクトコードを付加する。この
とき701a,702bのソース文番号は各々n,n+
1であるとする。701aの検査対象配列要素A(I,
J)に対しては、定義であることを示すアクセス種別
“DEF”と添字の値I,Jとソース文番号nと、配列
要素の値をトレースデータとして出力するコードを生成
する。701bのA(I,J−K)に対しては、使用で
あることを示すアクセス種別“USE”と、添字の値
I,J−Kと、ソース文番号n+1と、配列要素の値を
トレースデータとして出力するコードを生成する。説明
の都合上、ND=4とし、ループ701に対応するルー
プ700a,700b,700c,700dで説明す
る。配列要素はA(I,J)とする。
【0047】図17(A)は、1番目のループ700a
の実行が完了した時点におけるストレージ528の内容
を示している。ストレージ528のエントリ内の全アク
セス識別子は値0で初期化されるため、ループ700a
の実行によりアクセスされない配列要素に対応するエン
トリには全て0が設定されている。他方、ループ700
aの実行によりアクセスされた配列要素に対応するエン
トリには全て1が設定されている。u,dは各々定義,
引用を示す。
の実行が完了した時点におけるストレージ528の内容
を示している。ストレージ528のエントリ内の全アク
セス識別子は値0で初期化されるため、ループ700a
の実行によりアクセスされない配列要素に対応するエン
トリには全て0が設定されている。他方、ループ700
aの実行によりアクセスされた配列要素に対応するエン
トリには全て1が設定されている。u,dは各々定義,
引用を示す。
【0048】この時の画面表示の例を図17(B)に示
す。なお、図では、色A(定義された要素)を右上がり
斜線、色B(引用された要素)を右下がり斜線、色C
(不正参照可能性のある要素)を網目で示す。また、高
輝度表示を太い枠つきで示す。図18(A),(B)
は、I=1,J=3のときに文702bが実行された時
点のストレージ528の内容と画面表示例である。文7
02bの実行によりアクセスされる配列要素はA(1,
3)であるから、図9のステップ522bでストレージ
528のエントリ(1,3)よりアクセス識別子PRE
IDが読み込まれ、初期値=0であるから、ステップ5
22dからステップ524aに進む。現在処理中の配列
要素A(1,3)のアクセス種別は「定義」であり、ア
クセス識別子NOWIDはループ700bの並列プロセ
ス番号#2であるから、ステップ524aでストレージ
528のエントリ(1,3)にアクセス識別子2,アク
セス種別「定義」が設定される。そして、ステップ52
6cにより、要素A(1,3)が色Aで短時間だけ高輝
度表示になる。
す。なお、図では、色A(定義された要素)を右上がり
斜線、色B(引用された要素)を右下がり斜線、色C
(不正参照可能性のある要素)を網目で示す。また、高
輝度表示を太い枠つきで示す。図18(A),(B)
は、I=1,J=3のときに文702bが実行された時
点のストレージ528の内容と画面表示例である。文7
02bの実行によりアクセスされる配列要素はA(1,
3)であるから、図9のステップ522bでストレージ
528のエントリ(1,3)よりアクセス識別子PRE
IDが読み込まれ、初期値=0であるから、ステップ5
22dからステップ524aに進む。現在処理中の配列
要素A(1,3)のアクセス種別は「定義」であり、ア
クセス識別子NOWIDはループ700bの並列プロセ
ス番号#2であるから、ステップ524aでストレージ
528のエントリ(1,3)にアクセス識別子2,アク
セス種別「定義」が設定される。そして、ステップ52
6cにより、要素A(1,3)が色Aで短時間だけ高輝
度表示になる。
【0049】図19(A),(B)は、I=1,J=3
のときに文703bが実行された時点のストレージ52
8の内容と画面表示例である。文703bの実行により
アクセスされる配列要素はA(1,2)であるから、図
9のステップ522bでストレージ528のエントリ
(1,2)より旧アクセス識別子PREID=1と旧ア
クセス種別「定義」が読み込まれ、旧アクセス識別子P
REIDが0でないから、ステップ522dからステッ
プ522eに進む。現在処理中の要素A(1,2)のア
クセス識別子NOWIDは、ループ700bの並列プロ
セス番号#2であり、アクセス種別は引用である。従っ
て、新,旧のアクセス種別が異なるのでステップ522
cに進む。
のときに文703bが実行された時点のストレージ52
8の内容と画面表示例である。文703bの実行により
アクセスされる配列要素はA(1,2)であるから、図
9のステップ522bでストレージ528のエントリ
(1,2)より旧アクセス識別子PREID=1と旧ア
クセス種別「定義」が読み込まれ、旧アクセス識別子P
REIDが0でないから、ステップ522dからステッ
プ522eに進む。現在処理中の要素A(1,2)のア
クセス識別子NOWIDは、ループ700bの並列プロ
セス番号#2であり、アクセス種別は引用である。従っ
て、新,旧のアクセス種別が異なるのでステップ522
cに進む。
【0050】ステップ522cでは、このアクセス識別
子NOWID=2と旧アクセス識別子PREID=1が
比較され、一致しないから、ステップ526aへ進む。
そして、ステップ526aにより、要素A(1,3)が
色Cで短時間だけ高輝度表示になる。色Cは、不正参照
の可能性があることを示している。
子NOWID=2と旧アクセス識別子PREID=1が
比較され、一致しないから、ステップ526aへ進む。
そして、ステップ526aにより、要素A(1,3)が
色Cで短時間だけ高輝度表示になる。色Cは、不正参照
の可能性があることを示している。
【0051】図20(A),(B)は、I=2,J=3
のときに文702bが実行された時点のストレージ52
8の内容と画面表示例である。
のときに文702bが実行された時点のストレージ52
8の内容と画面表示例である。
【0052】図21(A),(B)は、I=2,J=3
のときに文703bが実行された時点のストレージ52
8の内容と画面表示例である。
のときに文703bが実行された時点のストレージ52
8の内容と画面表示例である。
【0053】以下、同様に処理された結果、ループ70
0bが終了した時点でのストレージ528の内容と画面
表示は、図22(A),(B)のようになる。要素A
(I,2)と要素A(I,6)が画面表示では色Cにな
ることから、不正参照可能性があることが明確に分か
る。すなわち、並列プロセス間で配列Aの「定義」「引
用」が発生するため、ループ700は並列処理できない
ことが容易に判別できる。なお、以上の例では、配列が
2次元配列であったため、配列全体を2次元画面で表示
可能であった。もし、配列が3次元以上の多次元配列で
ある場合には、ユーザが、2つの次元を残して他の次元
を特定値に設定すればよい。例えば、3次元配列B
(I,J,K)では、B(I,5,K)と設定すること
によって、J=5平面での配列Bのアクセス状況を2次
元画面で表示することができる。
0bが終了した時点でのストレージ528の内容と画面
表示は、図22(A),(B)のようになる。要素A
(I,2)と要素A(I,6)が画面表示では色Cにな
ることから、不正参照可能性があることが明確に分か
る。すなわち、並列プロセス間で配列Aの「定義」「引
用」が発生するため、ループ700は並列処理できない
ことが容易に判別できる。なお、以上の例では、配列が
2次元配列であったため、配列全体を2次元画面で表示
可能であった。もし、配列が3次元以上の多次元配列で
ある場合には、ユーザが、2つの次元を残して他の次元
を特定値に設定すればよい。例えば、3次元配列B
(I,J,K)では、B(I,5,K)と設定すること
によって、J=5平面での配列Bのアクセス状況を2次
元画面で表示することができる。
【0054】次に、本発明の他の実施例について説明す
る。
る。
【0055】図4は並列計算機システムの機能ブロック
図を示す。ソースプログラム100はコンパイラ200
によってロードモジュール300に翻訳される。コンパ
イラ200はアクセス情報付加部210とコード生成部
220からなり、210と220は図3と同じ働きをす
る。ロードモジュール300は実行時に並列実行部分の
先頭で並列処理部分が複数の並列処理部分ロードモジュ
ール360へと複写され、並列プロセッサに割り付けら
れ実行される。この場合にはアクセス情報のうちアクセ
ス識別子には実行時に決定される並列プロセス番号が付
けられる。
図を示す。ソースプログラム100はコンパイラ200
によってロードモジュール300に翻訳される。コンパ
イラ200はアクセス情報付加部210とコード生成部
220からなり、210と220は図3と同じ働きをす
る。ロードモジュール300は実行時に並列実行部分の
先頭で並列処理部分が複数の並列処理部分ロードモジュ
ール360へと複写され、並列プロセッサに割り付けら
れ実行される。この場合にはアクセス情報のうちアクセ
ス識別子には実行時に決定される並列プロセス番号が付
けられる。
【0056】図2に示される並列計算機システムにより
ロードモジュールが実行される。各並列プロセスはプロ
セッサ21−i(i=1 to n)にロードされ、例
えばプロセッサ20−1による処理が並列処理対象部分
に達すると、各プロセッサにより並列プロセスの並列処
理が実行される。この時、共有メモリ24内のデータ領
域に格納されている配列データAが各プロセッサにより
アクセスされると、オブジェクトコードに従って各プロ
セッサからアクセス情報レコードが出力され、配列アク
セス情報ファイル400に格納される。
ロードモジュールが実行される。各並列プロセスはプロ
セッサ21−i(i=1 to n)にロードされ、例
えばプロセッサ20−1による処理が並列処理対象部分
に達すると、各プロセッサにより並列プロセスの並列処
理が実行される。この時、共有メモリ24内のデータ領
域に格納されている配列データAが各プロセッサにより
アクセスされると、オブジェクトコードに従って各プロ
セッサからアクセス情報レコードが出力され、配列アク
セス情報ファイル400に格納される。
【0057】前記アクセス情報ファイル400は、図6
に示したトレースデータ表示ツール500によって処理
される。この動作は、先の実施例と同じである。
に示したトレースデータ表示ツール500によって処理
される。この動作は、先の実施例と同じである。
【0058】次に、図10に示すベクトル計算機で実行
することを目的とするプログラムに対する作動を説明す
る。
することを目的とするプログラムに対する作動を説明す
る。
【0059】ベクトル計算機で実行することを目的とす
るソースプログラムに対する本発明のプログラム検証方
法の実施例を図5〜図23〜31を用いて説明する。
るソースプログラムに対する本発明のプログラム検証方
法の実施例を図5〜図23〜31を用いて説明する。
【0060】ソースプログラム100がベクトル計算機
で実行することを目的とする場合には、処理対象ループ
がベクトル化され、図2cのアクセス情報付加部210
により、各ベクトル処理単位内での検査対象配列の要素
に対し、そのソース文番号がアクセス識別子として付加
される。
で実行することを目的とする場合には、処理対象ループ
がベクトル化され、図2cのアクセス情報付加部210
により、各ベクトル処理単位内での検査対象配列の要素
に対し、そのソース文番号がアクセス識別子として付加
される。
【0061】例えば、ベクトル処理を目的とする図23
のループ20は、ソース文番号#nのループ20内の文
21で引用される配列Aの要素にはアクセス識別子#n
を設定し、ソース文番号#n+1のループ20内の文2
2で定義される配列Aの要素にはアクセス識別子#n+
1を設定する。
のループ20は、ソース文番号#nのループ20内の文
21で引用される配列Aの要素にはアクセス識別子#n
を設定し、ソース文番号#n+1のループ20内の文2
2で定義される配列Aの要素にはアクセス識別子#n+
1を設定する。
【0062】これを図24で説明する。アクセス情報を
出力するために、コンパイラはループ20内の文21,
22に対して、ループ25の26,27に示すような動
作をするオブジェクトコードを付加する。このとき2
1,22のソース文番号は各々n,n+1であるとす
る。21の検査対象配列要素A(I−K)に対しては、
使用であることを示すアクセス種別“USE”と、添字
の値I−Kと、アクセス識別子“n”と、ソース文番号
nと、配列要素の値をトレースデータとして出力するコ
ードを生成する。22のA(I)に対しては、定義であ
ることを示すアクセス種別“DEF”と、添字の値I
と、アクセス識別子“n+1”と、ソース文番号n+1
と、配列要素の値をトレースデータとして出力するコー
ドを生成する。図26に示すループ10をベクトル計算
機で実行する場合の配列データの参照の順序は、ループ
10をループ10aとループ10bのごとく分割し、こ
の順で逐次実行する場合と等価である。従って、ループ
10をベクトル計算機で正しく実行できるか否かは、ル
ープ10での配列Aの要素の定義・引用の関係と、ルー
プ10aとループ10bをこの順で逐次計算機で実行し
た時の配列Aの要素の定義・引用の関係とが一致してい
るか否かにより判定できる。
出力するために、コンパイラはループ20内の文21,
22に対して、ループ25の26,27に示すような動
作をするオブジェクトコードを付加する。このとき2
1,22のソース文番号は各々n,n+1であるとす
る。21の検査対象配列要素A(I−K)に対しては、
使用であることを示すアクセス種別“USE”と、添字
の値I−Kと、アクセス識別子“n”と、ソース文番号
nと、配列要素の値をトレースデータとして出力するコ
ードを生成する。22のA(I)に対しては、定義であ
ることを示すアクセス種別“DEF”と、添字の値I
と、アクセス識別子“n+1”と、ソース文番号n+1
と、配列要素の値をトレースデータとして出力するコー
ドを生成する。図26に示すループ10をベクトル計算
機で実行する場合の配列データの参照の順序は、ループ
10をループ10aとループ10bのごとく分割し、こ
の順で逐次実行する場合と等価である。従って、ループ
10をベクトル計算機で正しく実行できるか否かは、ル
ープ10での配列Aの要素の定義・引用の関係と、ルー
プ10aとループ10bをこの順で逐次計算機で実行し
た時の配列Aの要素の定義・引用の関係とが一致してい
るか否かにより判定できる。
【0063】図27(A)〜(C)は、K=1の場合で
のループ10,ループ10aおよび10bにおける配列
Aの要素の定義・引用の関係を示している。
のループ10,ループ10aおよび10bにおける配列
Aの要素の定義・引用の関係を示している。
【0064】ループ10では、例えば配列Aの要素A
(2)dとA(2)uのように、配列Aの各要素は、先に定
義され、後で引用される。他方、ループ10aでは配列
Aの各要素の定義のみが行われ、ループ10bでは配列
Aの各要素の引用のみが行われるが、配列Aの各要素
は、ループ10aで先に定義されてから、ループ10b
で引用される関係になっている。つまり、ループ10と
同じ関係が保たれている。従って、ループ10は、ベク
トル計算機で正しく実行できる。
(2)dとA(2)uのように、配列Aの各要素は、先に定
義され、後で引用される。他方、ループ10aでは配列
Aの各要素の定義のみが行われ、ループ10bでは配列
Aの各要素の引用のみが行われるが、配列Aの各要素
は、ループ10aで先に定義されてから、ループ10b
で引用される関係になっている。つまり、ループ10と
同じ関係が保たれている。従って、ループ10は、ベク
トル計算機で正しく実行できる。
【0065】次に、図23のループ20をベクトル計算
機で実行する場合の配列データの参照の参照の順序は、
ループ20をループ20aと20bのごとく分割し、こ
の順で逐次実行する場合と等価である。
機で実行する場合の配列データの参照の参照の順序は、
ループ20をループ20aと20bのごとく分割し、こ
の順で逐次実行する場合と等価である。
【0066】図25(A)〜(C)は、K=1の場合の
ループ20,ループ20aおよび20bにおける配列A
の要素の定義・引用の関係を示している。
ループ20,ループ20aおよび20bにおける配列A
の要素の定義・引用の関係を示している。
【0067】ループ20では、配列Aの各要素は、先に
定義され、後で引用される。他方、ループ20aでは配
列Aの各要素の引用のみが行われ、ループ20bでは配
列Aの各要素の定義のみが行われ、配列Aの各要素は、
ループ20aで先に引用されてから、ループ20bで定
義される関係になっている。つまり、ループ20と異な
る関係になっている。この場合には、ループ20をこの
ままベクトル計算機で実行すると正しい計算結果は得ら
れない。
定義され、後で引用される。他方、ループ20aでは配
列Aの各要素の引用のみが行われ、ループ20bでは配
列Aの各要素の定義のみが行われ、配列Aの各要素は、
ループ20aで先に引用されてから、ループ20bで定
義される関係になっている。つまり、ループ20と異な
る関係になっている。この場合には、ループ20をこの
ままベクトル計算機で実行すると正しい計算結果は得ら
れない。
【0068】以上のことから理解されるように、ある配
列要素の定義時のソース文番号とこの配列要素の引用時
のソース文番号とを大小比較することにより、プログラ
ムのベクトル処理可能性を検証できる。
列要素の定義時のソース文番号とこの配列要素の引用時
のソース文番号とを大小比較することにより、プログラ
ムのベクトル処理可能性を検証できる。
【0069】図10を参照して、ステップ522aaで
は、入力された現在処理中の配列要素のアクセス種別を
判定する。種別が定義ならば、ステップ524aに進
む。種別が引用ならば、ステップ522bに進む。
は、入力された現在処理中の配列要素のアクセス種別を
判定する。種別が定義ならば、ステップ524aに進
む。種別が引用ならば、ステップ522bに進む。
【0070】ステップ524では、現在処理中の配列要
素のアクセス識別子即ち現アクセス識別子NOWID
を、ストレージ528の対応するエントリに格納する。
そして、ステップ526cに進む。一方、ステップ52
2bでは、ストレージ528から現在処理中の配列要素
に対応する以前のアクセス識別子PREIDを読み込
む。
素のアクセス識別子即ち現アクセス識別子NOWID
を、ストレージ528の対応するエントリに格納する。
そして、ステップ526cに進む。一方、ステップ52
2bでは、ストレージ528から現在処理中の配列要素
に対応する以前のアクセス識別子PREIDを読み込
む。
【0071】ステップ522cでは、アクセス識別子N
OWEIDが前アクセス識別子PREIDより大きいか
判定する。大きいなら、ステップ526bに進む。大き
くないなら、ステップ526aに進む。
OWEIDが前アクセス識別子PREIDより大きいか
判定する。大きいなら、ステップ526bに進む。大き
くないなら、ステップ526aに進む。
【0072】ステップ526aでは、現在処理中の配列
要素の表示色を色Cとして表示すること且つ短時間だけ
高輝度で表示することを決定する。一方、ステップ52
6bでは、現在処理中の配列要素の表示色を色Bとして
表示すること且つ短時間だけ高輝度で表示することを決
定する。さらに、ステップ526cでは、現在処理中の
配列要素の表示色を色Aとして表示すること且つ短時間
だけ高輝度では表示することを決定する。
要素の表示色を色Cとして表示すること且つ短時間だけ
高輝度で表示することを決定する。一方、ステップ52
6bでは、現在処理中の配列要素の表示色を色Bとして
表示すること且つ短時間だけ高輝度で表示することを決
定する。さらに、ステップ526cでは、現在処理中の
配列要素の表示色を色Aとして表示すること且つ短時間
だけ高輝度では表示することを決定する。
【0073】以上の動作を、図23に示すループ20を
用いて具体的に説明する。
用いて具体的に説明する。
【0074】図28(A),(B)は、I=2でループ2
0内の文21の実行が完了した時点におけるストレージ
528の内容と画面表示例を示している。
0内の文21の実行が完了した時点におけるストレージ
528の内容と画面表示例を示している。
【0075】図29(A)、(B)は、I=2でループ2
0内の文22が実行された時点におけるストレージ52
8の内容と画面表示例を示している。
0内の文22が実行された時点におけるストレージ52
8の内容と画面表示例を示している。
【0076】図30(A)、(B)は、I=3でループ2
0内の文21が実行された時点におけるストレージ52
8の内容と画面表示例を示している。
0内の文21が実行された時点におけるストレージ52
8の内容と画面表示例を示している。
【0077】図31(A)、(B)は、I=3でループ2
0内の文22が実行された時点におけるストレージ52
8の内容と画面表示例を示している。
0内の文22が実行された時点におけるストレージ52
8の内容と画面表示例を示している。
【0078】以下、同様に処理された結果、配列要素A
(I)が画面表示では色Cになることから、不正参照の
可能性があることが明確に分かる。すなわち、元のルー
プ20の「定義」「引用」の順序が狂うため、ループ2
0はベクトル処理できないことが容易に判別できる。
(I)が画面表示では色Cになることから、不正参照の
可能性があることが明確に分かる。すなわち、元のルー
プ20の「定義」「引用」の順序が狂うため、ループ2
0はベクトル処理できないことが容易に判別できる。
【0079】図32は、本発明の他の実施例のコンパイ
ラを示している。本実施例ではロードモジュールは図1
に示されるような逐次計算機システムにより実行され
る。
ラを示している。本実施例ではロードモジュールは図1
に示されるような逐次計算機システムにより実行され
る。
【0080】ソースプログラム100は、コンパイラ2
00aに入力され、ロードモジュール300aに変換さ
れる。
00aに入力され、ロードモジュール300aに変換さ
れる。
【0081】コンパイラ200aは、アクセス情報付加
部210と、トレースデータ表示ツール500a呼び出
すためのコードを生成するコード生成部220aとを有
している。
部210と、トレースデータ表示ツール500a呼び出
すためのコードを生成するコード生成部220aとを有
している。
【0082】210は、先述した図3あるいは図5の2
10と同じ動作をする。
10と同じ動作をする。
【0083】220aは、配列の要素の定義または引用
がある毎にツール500aを呼び出すオブジェクトコー
ド(図33のトレースデータ表示ツール呼び出し部31
0)を生成し、ロードモジュール300aに付加する。
従って、コンパイラ200aから出力されるロードモジ
ュール300aを実行すると、配列へのアクセスがある
毎に、図33に示すように、呼び出し部310に制御が
移り、これからツール500aが起動される。
がある毎にツール500aを呼び出すオブジェクトコー
ド(図33のトレースデータ表示ツール呼び出し部31
0)を生成し、ロードモジュール300aに付加する。
従って、コンパイラ200aから出力されるロードモジ
ュール300aを実行すると、配列へのアクセスがある
毎に、図33に示すように、呼び出し部310に制御が
移り、これからツール500aが起動される。
【0084】ツール500aは、配列アクセス情報検出
部510aと、配列アクセス情報処理520を有してい
る。
部510aと、配列アクセス情報処理520を有してい
る。
【0085】510aは、現在処理中の配列要素の定義
か引用かのアクセス種別、各次元ごとの添字値、現アク
セス識別子NOWIDを検出し、現在処理中の配列に対
するアクセス情報レコードとして520に渡す。
か引用かのアクセス種別、各次元ごとの添字値、現アク
セス識別子NOWIDを検出し、現在処理中の配列に対
するアクセス情報レコードとして520に渡す。
【0086】520は、先述した図8の配列アクセス情
報処理部520と同じ動作をする。この図32,33に
示す実施例によっても、図3あるいは図5に示す実施例
と同じ結果が得られる。
報処理部520と同じ動作をする。この図32,33に
示す実施例によっても、図3あるいは図5に示す実施例
と同じ結果が得られる。
【0087】
【発明の効果】以上の実施例によれば、並列計算機やベ
クトル計算機で実行することを目的とするソースプログ
ラムにおいて特に不良原因となりやすい配列データへの
不正参照の可能性を視覚化して表示できるため、プログ
ラムのデバッグを容易に行えるようになる。
クトル計算機で実行することを目的とするソースプログ
ラムにおいて特に不良原因となりやすい配列データへの
不正参照の可能性を視覚化して表示できるため、プログ
ラムのデバッグを容易に行えるようになる。
【0088】また、アクセス識別子格納用ストレージに
は定義あるいは引用が行われた要素に0以外の値が設定
されるため、未定義配列要素を調べるのにも利用でき
る。
は定義あるいは引用が行われた要素に0以外の値が設定
されるため、未定義配列要素を調べるのにも利用でき
る。
【0089】さらに、各表示領域で、配列要素を選択す
ることによりこの要素をアクセスしたソースプログラム
文番号と添字値、要素値を表示することができる。ま
た、このときに対応するソースプログラムを表示して、
アクセスしたソース文を高輝度表示することもできる。
ることによりこの要素をアクセスしたソースプログラム
文番号と添字値、要素値を表示することができる。ま
た、このときに対応するソースプログラムを表示して、
アクセスしたソース文を高輝度表示することもできる。
【図1】本発明の一実施例の逐次計算機処理装置構成図
【図2】本発明の一実施例の逐次計算機処理装置構成図
【図3】本発明の逐次計算機での一実施例処理構成図
【図4】本発明の並列計算機での一実施例処理構成図
【図5】本発明のベクトル計算機での一実施例処理構成
図
図
【図6】本発明の一実施例のトレースデータ表示ツール
の概念図
の概念図
【図7】配列アクセス情報ファイルのデータ形式図
【図8】配列アクセス情報処理部の概念図
【図9】並列処理プログラムでの配列アクセス情報処理
部の動作のフローチャート
部の動作のフローチャート
【図10】ベクトル処理プログラムでの配列アクセス情
報処理部の動作のフローチャート
報処理部の動作のフローチャート
【図11】並列処理を目的とするプログラムの例示図
【図12】図11のループにおける配列Aの参照関係を
示す概念図
示す概念図
【図13】並列処理を目的とするプログラムの他の例示
図
図
【図14】図13のループにおける配列Aの参照関係を
示す概念図
示す概念図
【図15】並列処理を目的とするプログラムのさらに他
の例示図
の例示図
【図16】図15のループでの配列Aの参照場所でのト
レースデータを出力する概念図
レースデータを出力する概念図
【図17】ループ700aでのアクセス識別子格納用ス
トレージの内容と画面表示の例示図
トレージの内容と画面表示の例示図
【図18】文702bでのI=1の時のアクセス識別子
格納用ストレージの内容と画面表示の例示例を示す図
格納用ストレージの内容と画面表示の例示例を示す図
【図19】文703bでのI=1の時のアクセス識別子
格納用ストレージの内容と画面表示の例示例を示す図
格納用ストレージの内容と画面表示の例示例を示す図
【図20】文702bでのI=2の時のアクセス識別子
格納用ストレージの内容と画面表示の例示例を示す図
格納用ストレージの内容と画面表示の例示例を示す図
【図21】文703bでのI=2の時のアクセス識別子
格納用ストレージの内容と画面表示の例示例を示す図
格納用ストレージの内容と画面表示の例示例を示す図
【図22】ループ700bでのアクセス識別子格納用ス
トレージの内容と画面表示の例示例を示す図
トレージの内容と画面表示の例示例を示す図
【図23】ベクトル処理を目的とするプログラムの例示
図
図
【図24】図23のループでの配列Aの参照場所でのト
レースデータを出力する概念図
レースデータを出力する概念図
【図25】図23のループにおける配列Aの参照関係を
示す概念図
示す概念図
【図26】ベクトル処理を目的とする他のプログラムの
例示図
例示図
【図27】図26のループにおける配列Aの参照関係を
示す概念図
示す概念図
【図28】文21のI=2でのアクセス識別子格納用ス
トレージの内容と画面表示の例示図
トレージの内容と画面表示の例示図
【図29】文22のI=2でのアクセス識別子格納用ス
トレージの内容と画面表示例を示す図
トレージの内容と画面表示例を示す図
【図30】文21のI=3でのアクセス識別子格納用ス
トレージの内容と画面表示例を示す図
トレージの内容と画面表示例を示す図
【図31】文22のI=3でのアクセス識別子格納用ス
トレージの内容と画面表示例を示す図
トレージの内容と画面表示例を示す図
【図32】本発明の他の実施例のコンパイラ構成図
【図33】本発明の他の実施例のトレースデータ表示ツ
ールの概念図
ールの概念図
410.アクセス番号、420.アクセスタイプ、43
0.1次元添字値、2次元添字値、440.アクセス識
別子、450.ソース番号、460.配列要素の値、5
12.現在処理中の配列アクセス情報レコード、52
0.処理部、522.比較部、524.更新部、52
6.表示色決定部、528.アクセス識別子格納用スト
レージ、530.表示データ
0.1次元添字値、2次元添字値、440.アクセス識
別子、450.ソース番号、460.配列要素の値、5
12.現在処理中の配列アクセス情報レコード、52
0.処理部、522.比較部、524.更新部、52
6.表示色決定部、528.アクセス識別子格納用スト
レージ、530.表示データ
フロントページの続き (56)参考文献 D.Callahan,et.a l、”ParaScope:A par allel programming environment”「Inter national Journal o f Supercomputing A pplication」Vol.2,N o.4,P.84−99(1988) (58)調査した分野(Int.Cl.7,DB名) G06F 9/06,11/28,9/45 G06F 15/16
Claims (10)
- 【請求項1】少なくとも一つの部分が複数のプロセッサ
で並列に実行可能なように複数の処理部分に分割されて
コンパイルされるべきソースプログラムをテストするた
めにコンピュータにより実行されるプログラム検証方法
において、 前記ソースプログラムをコンパイルして得られるオブジ
ェクトプログラムを実行し、前記複数の処理部分の各々
の実行に際して、前記複数の処理部分のそれぞれで実施
された配列データの各要素の処理に関するアクセス情報
を生成して記憶手段に記憶し、 前記記憶手段に記憶された前記アクセス情報を解析し、
不正な参照が発生する可能性のある前記配列データ内の
要素を判別し、 前記判別された要素をユーザにより識別可能に表示する
ことを特徴とするプログラム検証方法。 - 【請求項2】前記プログラム検証方法はさらに、前記実
行に先行して、入力されたソースプログラムの少なくと
も一部分を複数のプロセッサで実行可能な前記複数の処
理部分に分割し、前記複数の処理部分に含まれる前記配
列データに対する処理に対応して、該処理が実行された
ときに前記アクセス情報を生成する処理を付加して前記
オブジェクトプログラムを生成するコンパイル処理を実
行することを特徴とする請求項1記載のプログラム検証
方法。 - 【請求項3】前記アクセス情報は、処理された配列デー
タの要素を特定するための該配列データの各次元を示す
添字と、前記複数の処理部分のなかで、当該処理が実行
された処理部分を識別するための処理番号と、当該処理
が当該配列データの要素の定義であるか使用であるかを
示す識別子とを含むことを特徴とする請求項2記載のプ
ログラム検証方法。 - 【請求項4】前記判別は、複数の異なる処理番号の処理
部分で定義されるか、あるいは、定義と使用とが異なる
処理番号の処理部で実施される前記配列データの要素を
前記不正な参照が発生する可能性のある前記配列データ
内の要素として判別することを特徴とする請求項3記載
のプログラム検証方法。 - 【請求項5】前記複数の処理部分の実行に際して、該複
数の処理部分の処理を並列に実行することを特徴とする
請求項1記載のプログラム検証方法。 - 【請求項6】少なくとも一つのループがベクトルプロセ
ッサで処理されるようコンパイルされるべきソースプロ
グラムをテストするためにコンピュータにより実行され
るプログラム検証方法において、 前記ソースプログラムをコンパイルして得られたオブジ
ェクトプログラムを実行し、ベクトル処理化された前記
少なくとも一つのループに関するベクトル処理単位のそ
れぞれの処理の実行に際して、前記ベクトル処理単位の
各々で実施された配列データの要素に対する処理に関す
るアクセス情報を生成して記憶手段に記憶し、 前記記憶手段に記憶された前記アクセス情報を解析し、
不正な参照が発生する可能性のある前記配列データ内の
要素を判別し、 前記判別された要素をユーザにより識別可能に表示する
ことを特徴とするプログラム検証方法。 - 【請求項7】前記プログラム検証方法はさらに、前記実
行に先行して、入力されたソースプログラムの少なくと
も一つのループをベクトル処理化し、各ベクトル処理単
位に含まれる前記配列データに対する処理に対応して、
該処理が実行されたときに前記アクセス情報を生成する
処理を付加して前記オブジェクトプログラムを生成する
コンパイル処理を実行することを特徴とする請求項6記
載のプログラム検証方法。 - 【請求項8】前記アクセス情報は、処理された配列デー
タの要素を特定するための該配列データの各次元を示す
添字と、当該処理が実行されたベクトル処理単位を識別
するための処理番号と、当該処理が当該配列データの要
素の定義であるか使用であるかを示す識別子とを含むこ
とを特徴とする請求項7記載のプログラム検証方法。 - 【請求項9】前記判別は、それを使用するベクトル処理
単位の処理番号が、その定義を行ったベクトル処理単位
の処理番号よりも小さい前記配列データの要素を前記不
正な参照が発生する可能性のある前記配列データ内の要
素として判別することを特徴とする請求項8記載のプロ
グラム検証方法。 - 【請求項10】前記表示は、前記配列データの要素に対
応する表示領域を1次元又は2次元のマトリクス状に配
置し、前記不正な参照が発生する可能性のある要素に対
応する表示領域の表示を他から識別可能な形態で表示す
ることを特徴とする請求項1乃至9いずれかに記載のプ
ログラム検証方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP03029848A JP3094475B2 (ja) | 1990-02-26 | 1991-02-25 | プログラム検証方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2-44827 | 1990-02-26 | ||
JP4482790 | 1990-02-26 | ||
JP03029848A JP3094475B2 (ja) | 1990-02-26 | 1991-02-25 | プログラム検証方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH04211831A JPH04211831A (ja) | 1992-08-03 |
JP3094475B2 true JP3094475B2 (ja) | 2000-10-03 |
Family
ID=26368104
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP03029848A Expired - Fee Related JP3094475B2 (ja) | 1990-02-26 | 1991-02-25 | プログラム検証方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3094475B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0654969U (ja) * | 1993-01-05 | 1994-07-26 | 積水化学工業株式会社 | ストップバルブ |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2690699B2 (ja) * | 1994-09-21 | 1997-12-10 | 日本電気ソフトウェア株式会社 | 並列プログラムイメージ表示装置 |
US6351845B1 (en) * | 1999-02-04 | 2002-02-26 | Sun Microsystems, Inc. | Methods, apparatus, and articles of manufacture for analyzing memory use |
-
1991
- 1991-02-25 JP JP03029848A patent/JP3094475B2/ja not_active Expired - Fee Related
Non-Patent Citations (1)
Title |
---|
D.Callahan,et.al、"ParaScope:A parallel programming environment"「International Journal of Supercomputing Application」Vol.2,No.4,P.84−99(1988) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0654969U (ja) * | 1993-01-05 | 1994-07-26 | 積水化学工業株式会社 | ストップバルブ |
Also Published As
Publication number | Publication date |
---|---|
JPH04211831A (ja) | 1992-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5255385A (en) | Method of testing program, and compiler and program testing tool for the method | |
JP2795244B2 (ja) | プログラムデバッグシステム | |
US9898387B2 (en) | Development tools for logging and analyzing software bugs | |
US7237234B2 (en) | Method for selective solicitation of user assistance in the performance tuning process | |
US7536678B2 (en) | System and method for determining the possibility of adverse effect arising from a code change in a computer program | |
US8935672B1 (en) | Lazy evaluation of geometric definitions of objects within procedural programming environments | |
US20080276223A1 (en) | Dynamic Source Code Analyzer | |
US20070011664A1 (en) | Device and method for generating an instruction set simulator | |
Ben-Ari | Understanding programming languages | |
US6240546B1 (en) | Identifying date fields for runtime year 2000 system solution process, method and article of manufacture | |
Diep et al. | VMW: A visualization-based microarchitecture workbench | |
Nugteren et al. | Algorithmic species: A classification of affine loop nests for parallel programming | |
US10839124B1 (en) | Interactive compilation of software to a hardware language to satisfy formal verification constraints | |
US10853051B2 (en) | Automated candidate repair patch generation | |
Surendran et al. | Test-driven repair of data races in structured parallel programs | |
CN116501378B (zh) | 一种逆向工程还原源代码的实现方法、装置和电子设备 | |
JP3094475B2 (ja) | プログラム検証方法 | |
Soubra et al. | Towards Universal COSMIC Size Measurement Automation. | |
JPH06309193A (ja) | 機械語プログラムの動作検証方法および装置 | |
US9442701B1 (en) | Verifying models for exceptional behavior | |
JP2002014847A (ja) | プログラム検査装置、プログラム検査方法及び検査を行うためのプログラムを格納した記録媒体 | |
CN114153750B (zh) | 代码检查方法及装置、代码编写方法、电子设备 | |
JPH10293683A (ja) | プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体 | |
US20230409296A1 (en) | Providing metric data for patterns usable in a modeling environment | |
Omar et al. | Binary-level data dependence analysis of hot execution regions using abstract interpretation at runtime |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20070804 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080804 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080804 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090804 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100804 Year of fee payment: 10 |
|
LAPS | Cancellation because of no payment of annual fees |