JPH04211831A - プログラム検証方法 - Google Patents

プログラム検証方法

Info

Publication number
JPH04211831A
JPH04211831A JP3029848A JP2984891A JPH04211831A JP H04211831 A JPH04211831 A JP H04211831A JP 3029848 A JP3029848 A JP 3029848A JP 2984891 A JP2984891 A JP 2984891A JP H04211831 A JPH04211831 A JP H04211831A
Authority
JP
Japan
Prior art keywords
program
array
inspected
executed
access information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP3029848A
Other languages
English (en)
Other versions
JP3094475B2 (ja
Inventor
Sumio Kikuchi
菊池 純男
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP03029848A priority Critical patent/JP3094475B2/ja
Publication of JPH04211831A publication Critical patent/JPH04211831A/ja
Application granted granted Critical
Publication of JP3094475B2 publication Critical patent/JP3094475B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、プログラムを検証する
方法、およびその方法のためのプログラム検証ツールと
コンパイラに関する。
【0002】特に、並列処理あるいはベクトル処理を目
的とするプログラム実行時における配列データの不正参
照の可能性を検出して対応するソースプログラムの適否
を検証する方法およびその方法を実行するのに有用なプ
ログラム検証ツールおよびコンパイラに関する。
【0003】
【従来の技術】並列計算機あるいはベクトル計算機でユ
ーザプログラムを実行した場合しばしば発生する不良原
因の一つは、配列データの不正参照(つまり定義と引用
の順番が変わること)である。
【0004】逐次実行用ソースプログラムから並列計算
機あるいはベクトル計算機で実行可能な部分を自動的に
見付け出す機能を持ったコンパイラでは、配列データに
ついて同一配列要素に対して定義と引用、定義と定義が
同じループ繰返しで行なわれるかを解析し、ソースプロ
グラムの並列化あるいはベクトル化が可能かどうかが判
定される。しかし、配列添字内に実行時中に値が決まる
変数が存在するような場合にはコンパイル時にどの配列
要素かを決定することができない。この場合にはコンパ
イラは並列化やベクトル化を判定できないため、通常ユ
ーザによる指示に従って並列化する方法がとられている
。しかしながらこの方法では指示を誤るために実行結果
の不良を引き起こすことが多い。
【0005】また、並列処理を記述することができる言
語で書かれたプログラムでは、ユーザの記述誤りが発生
しやすい。この誤りをコンパイラによる配列データの参
照関係のチェックで発見することも可能であるが、上述
したように、全てのケースがコンパイル時の解析によっ
て明らかにならないため、やはり実行結果の不良を引き
起こすことがある。
【0006】プログラムを実行したときの配列データへ
のアクセスパターンをチェックし、表示する従来の方法
が、「Parallel Computing9 (1
988/89) 25−35」において論じられている
。この方法は、高性能計算機向けアルゴリズムを検証す
ることを狙いとしたものであり、逐次実行用プログラム
が実行された場合の定義と引用のアクセス順がそれぞれ
別ウィンドウ画面に表示される。
【0007】
【発明が解決しようとする課題】上記従来技術では、並
列計算機あるいはベクトル計算機で実行されるプログラ
ムについては考慮されていない。即ち、そのデバッグと
いう観点で、配列データの不正参照の可能性をチェック
することについての考慮がなされていない。従って、配
列データの参照関係をチェックし、プログラムが並列処
理あるいはベクトル処理に適するか否かを検証する方法
が必要となる。また、検証結果を分かり易く表示する方
法と、そのためのプログラム検証ツールとコンパイラが
必要となる。
【0008】並列計算機あるいはベクトル計算機で実行
することを目的とするプログラムのデバッグは、これら
ターゲット計算機を用いてデバッグするのが一般的であ
る。しかし、デバックのためにこれらの高性能計算機を
使用するのは計算機利用効率という面で問題がある。
【0009】本発明の第1の目的は、オブジェクトプロ
グラム実行時における配列データの参照関係をチェック
して、対応するソースプログラムの並列処理あるいはベ
クトル処理に対する適否を検証する方法を提供すること
にある。
【0010】また、本発明の第2の目的は、その検証結
果を分かり易く表示する方法を提供することにある。
【0011】本発明の第3の目的は、並列計算機やベク
トル計算機で実行することを目的とするソースプログラ
ムをコンパイルするためのコンパイラを提供することに
ある。
【0012】
【課題を解決するための手段】本発明の特徴の第1の観
点では、並列処理単位としての複数の並列プロセスに番
号を割当て、配列要素が定義された並列プロセス番号と
、その配列要素が作用された並列プロセス番号とを比較
し、両者が一致するか否かによってその配列要素への不
正参照の可能性を判定する。これによりプログラムの並
列処理可能性が検証されることができる。
【0013】また、本発明の特徴の第2の観点では、ベ
クトル化文に順に番号を付け、検査されるべき配列要素
が定義されたベクトル化文番号と、その配列要素が引用
されたベクトル化文番号とを比較し、両者の大小によっ
てその配列要素への不正参照の可能性を判定する。これ
によりプログラムのベクトル処理可能性が検証されるこ
とができる。
【0014】また、本発明の特徴の、第3の観点では、
複数の配列要素に対応する表示領域を一次元または二次
元のマトリクス状に配置し、それらの各表示領域で、対
応する配列要素への不正参照の可能性を示すデータが表
示される。
【0015】また、本発明の特徴の第4の観点では、配
列要素の定義・引用の別を示すアクセス種別と、添字値
と、アクセスされた並列プロセス番号またはベクトル化
ソース文番号とを配列アクセス情報として入力し、その
配列要素が定義された並列プロセス番号またはベクトル
化ソース文番号と、その配列要素が引用された並列プロ
セス番号またはベクトル化ソース文番号とを比較して、
プログラムの並列処理可能性またはベクトル処理可能性
を検証することができるプログラム検証ツールとそのプ
ログラム検証ツールが前記配列アクセス情報をソースプ
ログラムから得られるようにするコンパイラが提供され
る。
【0016】
【作用】並列処理可能であるためには、並列プロセスを
任意の順番で実行しても正しい結果が得られる必要があ
る。つまり、各配列要素の定義と引用は同じ並列プロセ
スで行われる必要がある。定義時の並列プロセス番号と
引用時の並列プロセス番号とが異なることを検出するこ
とにより、配列データへの不正参照の可能性を検出する
ことが出来る。すなわち、第1の観点により、プログラ
ムの並列処理に対する適否を検証できる。
【0017】一方、ベクトル処理されるときの各配列要
素の参照順序はベクトル化ソース文番号の順となるから
、定義が引用より先にあるためには、ある配列要素の引
用時のソース文番号がその配列要素の定義時のソース文
番号より大きい必要がある。引用時のソース文番号と定
義のソース文番号の大小を比較することにより、配列デ
ータへの不正参照の可能性を検出することが出来る。 すなわち、上記第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に格納される。
【0022】コンパイラ200は、ループ分割部230
と、アクセス情報付加部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をそ
れぞれ割当てる。
【0024】次に、コード生成部220は、検査対象配
列の要素の定義または引用がある毎にそのアクセス情報
レコードを配列アクセス情報ファイル400へ出力する
ためのオブジェクトコードを生成し、オブジェクトプロ
グラムに付加しロードモジュール300に出力する。コ
ンパイル中にオブジェクトプログラムに付加するもので
もよい。アクセス情報レコードには、アクセス識別子の
他、アクセスされる配列要素の値と添字、及びソースプ
ログラムのステートメント番号が含まれる。
【0025】以上により、コンパイラ200から出力さ
れたロードモジュール300の実行が完了すれば、その
配列データに関するアクセス情報レコードが格納された
配列アクセス情報ファイル400が作成され格納装置2
6に格納される。
【0026】ファイル400の各レコードは、図7に示
す如きデータ形式を有している。フィールド410には
、配列データの要素がアクセスされた順番が格納される
。フィールド420には、定義か引用か示すアクセス種
別が格納される。フィールド430には、次元別の配列
添字値が格納される。フィールド440には、アクセス
識別子が格納される。フィールド450にはソースプロ
グラムの文番号が格納される。フィールド460にはア
クセスされた配列要素の値が格納される。
【0027】ファイル400は、本発明の一実施例のプ
ログラム検証ツールを含むトレースデータ表示ツール5
00と共に、シングル計算機システムの格納装置14か
らメモリ12に移され実行される。これにより並列計算
機システムは他の処理に使用することができる。
【0028】図6ツール500を示す。ツール500は
配列情報入力部510と配列アクセス情報処理部520
を有している。部510はファイル400のレコードを
フィールド410のアクセス番号順に入力し、部520
に渡す。
【0029】部520は、図8に示すように、アクセス
識別子比較部522と、アクセス識別情報更新部524
と、表示色決定部526と、アクセス識別子格納用スト
レージ528を有している。ストレージ528は、配列
要素に対応したエントリを有しており、アクセスされた
配列要素のアクセス識別子とアクセス識別とを、対応す
るエントリに格納する。この格納されたアクセス識別子
はPREIDと表わされ初期値は0である。
【0030】部520は、並列計算機で実行することを
目的とするプログラムに対しては、図9に示すフローチ
ャートに従って作動する。
【0031】これらフローチャート中、ステップ522
a〜522eは部522による処理を、ステップ524
aは部524による処理を、ステップ526a〜526
cは部526による処理を示す。
【0032】次に、図9に示す並列計算機で実行するこ
とを目的とするプログラムに対する作動を説明する。
【0033】最初に並列計算機で実行することを目的と
するソースプログラムに対する本発明のプログラム検証
方法の実施例を図11〜14を用いて説明する。
【0034】図11に示すループ30を並列に計算する
ことは、ループ30をループ30a,30b,30c,
30dに分割し、これら分割したループ30a,30b
,30c,30dを並列に実行することである。このと
きに、もし、分割したループにまたがって同一配列要素
の定義・引用が存在すると、もとの定義・引用の順が逆
転する可能性がある。これは、並列実行といっても、プ
ロセッサの空き状態により各分割ループが同時に実行さ
れると限らないからである。
【0035】さらに、同一要素への定義が分割したルー
プの異なるループに存在する場合も、その要素の最終値
がプロセッサの状態によって変化する可能性がある。し
たがって、これら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は、並列計算機
で正しく実行できる。
【0037】次に、図13のループ40を実行すること
は、これを分割することにより得られるループ40a,
40b,40c,40dを並列実行するのと等価である
【0038】図14(A)〜(D)ループ40、および
ループ40a,40b,40c,40dにおける配列A
の要素の定義・引用の関係を示している。この場合には
、異なるループの間で同一要素が定義・引用される。 従って、並列実行によって不正参照が発生する可能性が
ある。
【0039】一般に、配列添字が複雑で、しかも実行時
に入力文などによって値が決まる変数が添字に含まれる
と、実行するまでこの参照関係が分からないため、並列
計算機で正しく実行できるかどうかコンパイル時に判定
が容易でない。そこで、元のプログラムを並列対象部分
たとえばループを並列処理単位に分け任意の順番に並べ
たものと等価なプログラムに変換し、そのプログラムを
逐次計算機で実行させ、各配列要素の定義・引用が同一
並列処理単位で発生するか、異なる並列処理単位で発生
するかあるいは定義が異なる並列処理単位で発生するか
をチェックすることにすれば、上記参照関係を容易にチ
ェックできる。
【0040】言い換えると、各配列要素の引用時の並列
プロセス番号(並列処理単位につけた番号)と定義時の
並列プロセス番号とが同じかあるいは各定義時の並列プ
ロセス番号が同じか否かをチェックすることによりプロ
グラムの並列処理可能性を検証することが出来る。
【0041】図9のステップ522bでは、入力された
処理対象の配列要素に対応するので同じ添字値をもつア
クセス識別子格納用ストレージ528のエントリから旧
アクセス識別子PREIDと旧アクセス種別を読み込む
【0042】ステップ522dでは、PREID=0か
判定する。PREID=0、すなわち、現在処理中の配
列要素の値が未だ定義も引用もされていない場合には、
ステップ524aに進む。PREID≠0、すなわち、
現在処理中の配列要素の値が既に定義あるいは引用され
ている場合には、ステップ522eに進む。ステップ5
22eでは、新,旧アクセス種別がともに引用か判定す
る。ともに引用の場合には、ステップ522aに進む。 ともに引用でなければ、ステップ522cに進む。ステ
ップ522cでは、現在処理中の配列要素の新アクセス
識別子NOWIDと旧アクセス識別子PREIDとが等
しいか判定する。異なる場合には、ステップ526aに
進む。等しい場合にはステップ522aに進む。
【0043】ステップ524aでは、現在処理中の配列
要素のアクセス識別子NOWIDとアクセス種別を、対
応するストレージ528のエントリに格納する。そして
、ステップ522aに進む。ステップ522aでは、現
在処理中の配列要素のアクセス種別を判定する。種別が
定義ならば、ステップ526cに進む。種別が引用なら
ば、ステップ526bに進む。
【0044】ステップ526aでは、現在処理中の配列
要素を色Cで表示すること且つ短時間だけ高輝度で表示
することを決定する。色Cは、定義あるいは引用時にア
クセス識別子が一致しない要素であることを示す。つま
り、不正参照の可能性のある要素であることを示す。短
時間だけ高輝度で表示するのは、現在処理中の配列要素
であることを示すためである。一方、ステップ526b
では、現在処理中の配列要素を色Bで表示すること且つ
短時間だけ高輝度で表示することを決定する。色Bは、
引用された要素であることを示す。ステップ526cで
は、現在処理中の配列要素を色Aで表示すること且つ短
時間だけ高輝度で表示することを決定する。色Aは、定
義された要素であることを示す。
【0045】以上の動作を、図15に示すループ700
でK:1の場合を用いて具体的に説明する。
【0046】ループ700をDO200で並列化する場
合、分割数NDを用いてループ701に変換し、さらに
アクセス情報を出力するために、コンパイラは図16の
ループ内の文7010a,701bに対して、810,
820に示すような動作をオブジェクトコードを付加す
る。このとき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は各々定義,
引用を示す。
【0048】この時の画面表示の例を図17(B)に示
す。なお、図では、色A(定義された要素)を右上がり
斜線、色B(引用された要素)を右下がり斜線、色C(
不正参照可能性のある要素)を網目で示す。また、高輝
度表示を太い枠つきで示す。図18(A),(B)は、
I=1,J=3のときに文702bが実行された時点の
ストレージ528の内容と画面表示例である。文702
bの実行によりアクセスされる配列要素はA(1,3)
であるから、図9のステップ522bでストレージ52
8のエントリ(1,3)よりアクセス識別子PREID
が読み込まれ、初期値=0であるから、ステップ522
dからステップ524aに進む。現在処理中の配列要素
A(1,3)のアクセス種別は「定義」であり、アクセ
ス識別子NOWIDはループ700bの並列プロセス番
号#2であるから、ステップ524aでストレージ52
8のエントリ(1,3)にアクセス識別子2,アクセス
種別「定義」が設定される。そして、ステップ526c
により、要素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と旧アク
セス種別「定義」が読み込まれ、旧アクセス識別子PR
EIDが0でないから、ステップ522dからステップ
522eに進む。現在処理中の要素A(1,2)のアク
セス識別子NOWIDは、ループ700bの並列プロセ
ス番号#2であり、アクセス種別は引用である。従って
、新,旧のアクセス種別が異なるのでステップ522c
に進む。
【0050】ステップ522cでは、このアクセス識別
子NOWID=2と旧アクセス識別子PREID=1が
比較され、一致しないから、ステップ526aへ進む。 そして、ステップ526aにより、要素A(1,3)が
色Cで短時間だけ高輝度表示になる。色Cは、不正参照
の可能性があることを示している。
【0051】図20(A),(B)は、I=2,J=3
のときに文702bが実行された時点のストレージ52
8の内容と画面表示例である。
【0052】図21(A),(B)は、I=2,J=3
のときに文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次元画面で
表示することができる。
【0054】次に、本発明の他の実施例について説明す
る。
【0055】図4は並列計算機システムの機能ブロック
図を示す。ソースプログラム100はコンパイラ200
によってロードモジュール300に翻訳される。コンパ
イラ200はアクセス情報付加部210とコード生成部
220からなり、210と220は図3と同じ働きをす
る。ロードモジュール300は実行時に並列実行部分の
先頭で並列処理部分が複数の並列処理部分ロードモジュ
ール360へと複写され、並列プロセッサに割り付けら
れ実行される。この場合にはアクセス情報のうちアクセ
ス識別子には実行時に決定される並列プロセス番号が付
けられる。
【0056】図2に示される並列計算機システムにより
ロードモジュールが実行される。各並列プロセスはプロ
セッサ21−i(i=1  to  n)にロードされ
、例えばプロセッサ20−1による処理が並列処理対象
部分に達すると、各プロセッサにより並列プロセスの並
列処理が実行される。この時、共有メモリ24内のデー
タ領域に格納されている配列データAが各プロセッサに
よりアクセスされると、オブジェクトコードに従って各
プロセッサからアクセス情報レコードが出力され、配列
アクセス情報ファイル400に格納される。
【0057】前記アクセス情報ファイル400は、図6
に示したトレースデータ表示ツール500によって処理
される。この動作は、先の実施例と同じである。
【0058】次に、図10に示すベクトル計算機で実行
することを目的とするプログラムに対する作動を説明す
る。
【0059】ベクトル計算機で実行することを目的とす
るソースプログラムに対する本発明のプログラム検証方
法の実施例を図5〜図23〜31を用いて説明する。
【0060】ソースプログラム100がベクトル計算機
で実行することを目的とする場合には、処理対象ループ
がベクトル化され、図2cのアクセス情報付加部210
により、各ベクトル処理単位内での検査対象配列の要素
に対し、そのソース文番号がアクセス識別子として付加
される。
【0061】例えば、ベクトル処理を目的とする図23
のループ20は、ソース文番号#nのループ20内の文
21で引用される配列Aの要素にはアクセス識別子#n
を設定し、ソース文番号#n+1のループ20内の文2
2で定義される配列Aの要素にはアクセス識別子#n+
1を設定する。
【0062】これを図24で説明する。アクセス情報を
出力するために、コンパイラはループ20内の文21,
22に対して、ループ25の26,27に示すような動
作をするオブジェクトコードを付加する。このとき21
,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を
ベクトル計算機で正しく実行できるか否かは、ループ1
0での配列Aの要素の定義・引用の関係と、ループ10
aとループ10bをこの順で逐次計算機で実行した時の
配列Aの要素の定義・引用の関係とが一致しているか否
かにより判定できる。
【0063】図27(A)〜(C)は、K=1の場合で
のループ10,ループ10aおよび10bにおける配列
Aの要素の定義・引用の関係を示している。
【0064】ループ10では、例えば配列Aの要素A(
2)dとA(2)uのように、配列Aの各要素は、先に
定義され、後で引用される。他方、ループ10aでは配
列Aの各要素の定義のみが行われ、ループ10bでは配
列Aの各要素の引用のみが行われるが、配列Aの各要素
は、ループ10aで先に定義されてから、ループ10b
で引用される関係になっている。つまり、ループ10と
同じ関係が保たれている。従って、ループ10は、ベク
トル計算機で正しく実行できる。
【0065】次に、図23のループ20をベクトル計算
機で実行する場合の配列データの参照の参照の順序は、
ループ20をループ20aと20bのごとく分割し、こ
の順で逐次実行する場合と等価である。
【0066】図25(A)〜(C)は、K=1の場合の
ループ20,ループ20aおよび20bにおける配列A
の要素の定義・引用の関係を示している。
【0067】ループ20では、配列Aの各要素は、先に
定義され、後で引用される。他方、ループ20aでは配
列Aの各要素の引用のみが行われ、ループ20bでは配
列Aの各要素の定義のみが行われ、配列Aの各要素は、
ループ20aで先に引用されてから、ループ20bで定
義される関係になっている。つまり、ループ20と異な
る関係になっている。この場合には、ループ20をこの
ままベクトル計算機で実行すると正しい計算結果は得ら
れない。
【0068】以上のことから理解されるように、ある配
列要素の定義時のソース文番号とこの配列要素の引用時
のソース文番号とを大小比較することにより、プログラ
ムのベクトル処理可能性を検証できる。
【0069】図10を参照して、ステップ522aaで
は、入力された現在処理中の配列要素のアクセス種別を
判定する。種別が定義ならば、ステップ524aに進む
。種別が引用ならば、ステップ522bに進む。
【0070】ステップ524では、現在処理中の配列要
素のアクセス識別子即ち現アクセス識別子NOWIDを
、ストレージ528の対応するエントリに格納する。 そして、ステップ526cに進む。一方、ステップ52
2bでは、ストレージ528から現在処理中の配列要素
に対応する以前のアクセス識別子PREIDを読み込む
【0071】ステップ522cでは、アクセス識別子N
OWEIDが前アクセス識別子PREIDより大きいか
判定する。大きいなら、ステップ526bに進む。大き
くないなら、ステップ526aに進む。
【0072】ステップ526aでは、現在処理中の配列
要素の表示色を色Cとして表示すること且つ短時間だけ
高輝度で表示することを決定する。一方、ステップ52
6bでは、現在処理中の配列要素の表示色を色Bとして
表示すること且つ短時間だけ高輝度で表示することを決
定する。さらに、ステップ526cでは、現在処理中の
配列要素の表示色を色Aとして表示すること且つ短時間
だけ高輝度では表示することを決定する。
【0073】以上の動作を、図23に示すループ20を
用いて具体的に説明する。
【0074】図28(A),(B)は、I=2でループ
20内の文21の実行が完了した時点におけるストレー
ジ528の内容と画面表示例を示している。
【0075】図29(A)、(B)は、I=2でループ
20内の文22が実行された時点におけるストレージ5
28の内容と画面表示例を示している。
【0076】図30(A)、(B)は、I=3でループ
20内の文21が実行された時点におけるストレージ5
28の内容と画面表示例を示している。
【0077】図31(A)、(B)は、I=3でループ
20内の文22が実行された時点におけるストレージ5
28の内容と画面表示例を示している。
【0078】以下、同様に処理された結果、配列要素A
(I)が画面表示では色Cになることから、不正参照の
可能性があることが明確に分かる。すなわち、元のルー
プ20の「定義」「引用」の順序が狂うため、ループ2
0はベクトル処理できないことが容易に判別できる。
【0079】図32は、本発明の他の実施例のコンパイ
ラを示している。本実施例ではロードモジュールは図1
に示されるような逐次計算機システムにより実行される
【0080】ソースプログラム100は、コンパイラ2
00aに入力され、ロードモジュール300aに変換さ
れる。
【0081】コンパイラ200aは、アクセス情報付加
部210と、トレースデータ表示ツール500a呼び出
すためのコードを生成するコード生成部220aとを有
している。
【0082】210は、先述した図3あるいは図5の2
10と同じ動作をする。
【0083】220aは、配列の要素の定義または引用
がある毎にツール500aを呼び出すオブジェクトコー
ド(図33のトレースデータ表示ツール呼び出し部31
0)を生成し、ロードモジュール300aに付加する。 従って、コンパイラ200aから出力されるロードモジ
ュール300aを実行すると、配列へのアクセスがある
毎に、図33に示すように、呼び出し部310に制御が
移り、これからツール500aが起動される。
【0084】ツール500aは、配列アクセス情報検出
部510aと、配列アクセス情報処理520を有してい
る。
【0085】510aは、現在処理中の配列要素の定義
か引用かのアクセス種別、各次元ごとの添字値、現アク
セス識別子NOWIDを検出し、現在処理中の配列に対
するアクセス情報レコードとして520に渡す。
【0086】520は、先述した図8の配列アクセス情
報処理部520と同じ動作をする。この図32,33に
示す実施例によっても、図3あるいは図5に示す実施例
と同じ結果が得られる。
【0087】
【発明の効果】以上の実施例によれば、並列計算機やベ
クトル計算機で実行することを目的とするソースプログ
ラムにおいて特に不良原因となりやすい配列データへの
不正参照の可能性を視覚化して表示できるため、プログ
ラムのデバッグを容易に行えるようになる。
【0088】また、アクセス識別子格納用ストレージに
は定義あるいは引用が行われた要素に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の時のアクセス識別子格納
用ストレージの内容と画面表示の例示例を示す図
【図2
1】文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.現在処理中の配列アクセス情報レコード、520
.処理部、522.比較部、524.更新部、526.
表示色決定部、528.アクセス識別子格納用ストレー
ジ、530.表示データ

Claims (26)

    【特許請求の範囲】
  1. 【請求項1】少なくとも一つの部分を複数のプロセッサ
    で並列実行するための処理部分に変換されるべきソース
    プログラムをテストするプログラム検証方法であって、
    ソースプログラムをオブジェクトプログラムに翻訳し、
    前記オブジェクトプログラムを実行し、このオブジェク
    トプログラム実行中に、検査されるべき一つ以上の配列
    データの要素が定義あるいは使用として処理される毎に
    アクセス情報を生成し、このアクセス情報には、各要素
    毎にすくなくとも各次元の添字値と前記処理部分に付け
    られた処理番号と処理が定義か使用かを含み、さらに、
    検査対象配列データの各要素が処理されたときの前記ア
    クセス情報によって、前記ソースプログラム部分を複数
    プロセスで実行可能かどうかを検証するステップからな
    るプログラム検証方法。
  2. 【請求項2】請求項1において、検査対象配列データの
    少なくとも一つの同じ要素に対して複数の異なる処理番
    号で定義されるか、定義を行った処理番号と使用を行っ
    た処理番号が異なるときに並列処理できないと検出する
    ことを特徴とするプログラム検証方法。
  3. 【請求項3】請求項1において、検査対象ソースプログ
    ラム部分で検査対象配列要素への処理が行われるソース
    文を見つけ、検査対象配列データへの処理が定義か使用
    かを見つけて、このオブジェクトプログラムが実行され
    たときに処理が行われる毎に前記アクセス情報を出力す
    るようにオブジェクトプログラムを生成することを含み
    、アクセス情報の生成は前記オブジェクトプログラムの
    実行によって達成されることを特徴とするプログラム検
    証方法。
  4. 【請求項4】請求項2において、該検証ステップはオブ
    ジェクトプログラムの実行後に行われることを特徴とす
    るプログラム検証方法。
  5. 【請求項5】請求項3において、該生成ステップはオブ
    ジェクトプログラムの実行と並列に実行されることを特
    徴とするプログラム検証方法。
  6. 【請求項6】請求項4において、該検証ステップでは検
    査対象配列の要素に対して、要素毎に以前生成されたア
    クセス情報と現在生成されたアクセス情報とによって、
    ソースプログラムを複数のプロセッサで並列処理可能か
    を検証することを特徴とするプログラム検証方法。
  7. 【請求項7】請求項6において、一つの要素に関する以
    前生成されたアクセス情報は最も最近生成されたアクセ
    ス情報であることを特徴とするプログラム検証方法。
  8. 【請求項8】請求項5において、さらに複数の検査対象
    配列の要素に対して生成されたアクセス情報をオブジェ
    クトプログラムの実行と並列に格納するステップを有す
    るプログラム検証方法。
  9. 【請求項9】請求項1において、複数の検査対象配列要
    素に対応する表示領域を1次元または2次元のマトリッ
    クス状に配置し、それらの表示領域で、対応する検査対
    象配列要素の不正参照可能性を示す表示を行うことを特
    徴とするプログラム検証方法。
  10. 【請求項10】請求項9の1次元または2次元のマトリ
    ックスが、多次元の検査対象配列に対してユーザが指定
    した1つの次元または2つの次元に関するものであるこ
    とを特徴とするプログラム検証方法。
  11. 【請求項11】請求項1において、該実行ステップは、
    前記ソースプログラム中の処理部分が逐次的に実行され
    るようにオブジェクトプログラムを実行することを特徴
    とするプログラム検証方法。
  12. 【請求項12】請求項11において、オブジェクトプロ
    グラムは各プロセッサが実行を担当する複数の処理部分
    を逐次的に実行するオブジェクトコードとして含み、該
    実行ステップはオブジェクトプログラムの前記処理部分
    を逐次的に実行するステップを含むプログラム検証方法
  13. 【請求項13】請求項12において、前記ソースプログ
    ラム部がループを含む場合に、これを複数のループ部分
    に分け、このループ部分を逐次的に実行するオブジェク
    トプログラムに変換するプログラム検証方法。
  14. 【請求項14】請求項1において、該実行ステップは前
    記ソースプログラム中の処理部分が並列に実行されるよ
    うにオブジェクトプログラムを実行するプログラム検証
    方法。
  15. 【請求項15】請求項14において、該翻訳ステップで
    は、前記ソースプログラム部分がループを含む場合に、
    ループ部分を異なる処理部分に分けて実行するときのル
    ープ繰り返し範囲を決定し、このループ部分を含むソー
    スプログラムをオブジェクトプログラムに変換し、決定
    したループ繰り返し範囲を示す情報をオブジェクトプロ
    グラムに付加し、該実行ステップではループ部分と付加
    された情報を表すオブジェクトプログラム部分に基づき
    、異なる処理部分を並列に実行するプログラム検証方法
  16. 【請求項16】そこに含まれる少なくとも一つのループ
    をベクトルプロセッサでベクトル処理するオブジェクト
    プログラムに翻訳されるべきソースプログラムをテスト
    する方法であって、ソースプログラムを逐次計算機で実
    行するオブジェクトプログラムに翻訳し、このオブジェ
    クトプログラムを逐次計算機で実行し、このオブジェク
    トプログラム実行中に、検査されるべき一つ以上の配列
    データの要素が定義あるいは使用として処理される毎に
    アクセス情報を生成し、このアクセス情報には、各要素
    毎にすくなくとも添字値と処理されるソース文番号と処
    理が定義か使用かを含み、さらに、検査対象配列データ
    の各要素が処理されたときの前記アクセス情報によって
    、前記ソースプログラム部分で検査対象配列をアクセス
    するソース文の少なくとも一つがベクトル化を疎外しう
    るかどうかを検証することからなるプログラム検証方法
  17. 【請求項17】請求項16において、検証ステップは検
    査対象配列の同一要素に対して、その要素を使用するソ
    ース文番号がその要素を定義する文番号より小さいとき
    にベクトル処理を疎外することを検出するプログラム検
    証方法。
  18. 【請求項18】請求項16において、該翻訳のときに検
    査ソースプログラム部分で検査対象配列要素への処理が
    行われるソース文を見つけ、その処理が定義か使用かを
    見つけて、このオブジェクトプログラムが実行されたと
    きに処理が行われる毎に前記アクセス情報を出力するよ
    うにオブジェクトプログラムを生成し、アクセス情報の
    生成は前記オブジェクトプログラムの実行によって達成
    されることを特徴とするプログラム検証方法。
  19. 【請求項19】請求項18において、検証ステップはオ
    ブジェクトプログラムの実行後に実行されることを特徴
    とするプログラム検証方法。
  20. 【請求項20】請求項19において複数の検査対象配列
    の要素に対して生成されたアクセス情報をオブジェクト
    プログラムの実行と並列に格納するステップを有し、検
    証ステップは、オブジェクトプログラム実行後、格納さ
    れたアクセス情報に基づいて実行されるプログラム検証
    方法。
  21. 【請求項21】請求項16において、複数の検査対象配
    列要素に対応する表示領域を1次元または2次元のマト
    リックス状に配置し、それらの表示領域で、対応する検
    査対象配列要素の不正参照可能性を示す表示を行うこと
    を特徴とするトレースデータの表示方法。
  22. 【請求項22】請求項21の1次元または2次元のマト
    リックスが、多次元の検査対象配列に対してユーザが指
    定した1つの次元または2つの次元に関するものである
    ことを特徴とするトレースデータ表示方法。
  23. 【請求項23】各表示領域で、対応する配列要素の定義
    ・使用の区別をも表示する請求項9または21のトレー
    スデータ表示方法。
  24. 【請求項24】不正参照可能性を色により区別して表示
    すると共に、前記色とは異なる色により定義・使用の区
    別を表示する請求項9または21のトレースデータ表示
    方法。
  25. 【請求項25】各表示領域の輝度を、対応する配列要素
    へのアクセスが発生した順に短時間だけ高輝度とするこ
    とを特徴とする請求項21から24、または9から10
    のいずれかのトレースデータ表示方法。
  26. 【請求項26】ソースプログラムを翻訳してオブジェク
    トプログラムを生成する翻訳方法において、検査対象配
    列要素の定義・使用の別を示すアクセス種別と、各次元
    毎の添字値と、アクセスされた処理番号またはソース文
    番号と引数として請求項1あるいは16の該検証ステッ
    プを呼び出すためのオブジェクトコードを付加的に生成
    することを特徴とする翻訳方法。
JP03029848A 1990-02-26 1991-02-25 プログラム検証方法 Expired - Fee Related JP3094475B2 (ja)

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
JP4482790 1990-02-26
JP2-44827 1990-02-26
JP03029848A JP3094475B2 (ja) 1990-02-26 1991-02-25 プログラム検証方法

Publications (2)

Publication Number Publication Date
JPH04211831A true JPH04211831A (ja) 1992-08-03
JP3094475B2 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 (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0895787A (ja) * 1994-09-21 1996-04-12 Nec Software Ltd 並列支援タスクイメージ表示方式
JP2000305809A (ja) * 1999-02-04 2000-11-02 Sun Microsyst Inc メモリアクセス解析方法、メモリアクセス追跡装置、コンピュータ読取可能な記録媒体

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0654969U (ja) * 1993-01-05 1994-07-26 積水化学工業株式会社 ストップバルブ

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0895787A (ja) * 1994-09-21 1996-04-12 Nec Software Ltd 並列支援タスクイメージ表示方式
JP2000305809A (ja) * 1999-02-04 2000-11-02 Sun Microsyst Inc メモリアクセス解析方法、メモリアクセス追跡装置、コンピュータ読取可能な記録媒体

Also Published As

Publication number Publication date
JP3094475B2 (ja) 2000-10-03

Similar Documents

Publication Publication Date Title
Jia et al. The symptoms, causes, and repairs of bugs inside a deep learning library
US5255385A (en) Method of testing program, and compiler and program testing tool for the method
Szárnyas et al. The Train Benchmark: cross-technology performance evaluation of continuous model queries
US9612806B2 (en) Verification of computer-executable code generated from a model
JP2795244B2 (ja) プログラムデバッグシステム
US9418230B2 (en) Automated tools for building secure software programs
US9280442B1 (en) System and method for generating coverage reports for software unit tests
Suh et al. Accelerating MATLAB with GPU computing: a primer with examples
US8762784B1 (en) Viewing multi-dimensional metric data from multiple test cases
US8381175B2 (en) Low-level code rewriter verification
US10853051B2 (en) Automated candidate repair patch generation
US20060150160A1 (en) Software analyzer
CN112558942B (zh) 算子注册方法和相关产品
US11892935B2 (en) Verification of control coupling and data coupling analysis in software code
US12379872B2 (en) Program detection method and apparatus
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
CN118193382B (zh) 应用程序的测试方法、装置、设备、存储介质及程序产品
JPH04211831A (ja) プログラム検証方法
US12271712B2 (en) Providing metric data for patterns usable in a modeling environment
CN116861829B (zh) 用于定位逻辑系统设计中错误的方法、电子设备
CN114153750B (zh) 代码检查方法及装置、代码编写方法、电子设备
Denisov et al. Automated software testing technologies for realistic computer graphics
Gates et al. DynaMICs: an automated and independent software-fault detection approach
JP2002014847A (ja) プログラム検査装置、プログラム検査方法及び検査を行うためのプログラムを格納した記録媒体

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