JP2621555B2 - ベクトル化処理方式 - Google Patents

ベクトル化処理方式

Info

Publication number
JP2621555B2
JP2621555B2 JP2060716A JP6071690A JP2621555B2 JP 2621555 B2 JP2621555 B2 JP 2621555B2 JP 2060716 A JP2060716 A JP 2060716A JP 6071690 A JP6071690 A JP 6071690A JP 2621555 B2 JP2621555 B2 JP 2621555B2
Authority
JP
Japan
Prior art keywords
data dependency
array element
vector
inconsistent
parallel execution
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 - Lifetime
Application number
JP2060716A
Other languages
English (en)
Other versions
JPH03260865A (ja
Inventor
緑 藤巻
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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP2060716A priority Critical patent/JP2621555B2/ja
Publication of JPH03260865A publication Critical patent/JPH03260865A/ja
Application granted granted Critical
Publication of JP2621555B2 publication Critical patent/JP2621555B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Complex Calculations (AREA)

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明はベクトル化処理方式に関し、特にベクトル処
理プロセッサに対するコンパイラにおいて並列実行の可
能性の判定および並列実行可能部分のベクトル化処理を
行うベクトル化処理方式に関する。
〔従来の技術〕
ベクトル命令によるベクトル演算機能を有するベクト
ル処理プロセッサでは、ソースプログラム中のループ構
造(例えば、第2図に示すFORTRANソースプログラム中
のDOループ)中に2度以上現れる配列要素に関する実行
は、スカラ命令により順次実行した場合とベクトル命令
により並列実行した場合とで、同一配列要素への定義の
順序が異なることから実行結果に違いが生じる(その配
列要素に関して、並列実行に矛盾するデータ依存関係が
ある)ことがある。
従来、ベクトル処理プロセッサに対するコンパイラで
は、並列実行に矛盾するデータ依存関係がある配列要素
がループ構造中に存在する場合には、そのループ構造中
の文群をベクトル化する(それらの文群をオブジェクト
プログラム内のベクトル命令で実行する)ことはできな
かった(文の入れ換えにより並列実行に矛盾するデータ
依存関係を解消するコンパイラも存在するが、このよう
なコンパイラであっても文の入れ換えは並列実行に矛盾
するデータ依存関係を解消することができない場合には
そのループ構造中の文群をベクトル化することはできな
かった)。
〔発明が解決しようとする課題〕
ベクトル演算機能を有するベクトル処理プロセッサに
おいては、一般にオブジェクトプログラム内のベクトル
命令によって実行される部分の割合を大きくすればする
ほど実行時間を短縮することができる。
ところが、上述した従来のベクトル化処理方式では、
並列実行に矛盾するデータ依存関係がある配列要素が存
在するループ構造中の文群をベクトル化することができ
ないので、ベクトル処理プロセッサの実行時間を十分に
短縮することができないという欠点がある。
本発明の目的は、上述の点に鑑み、並列実行に矛盾す
るデータ依存関係(特に、文の入れ換えでは解消できな
い並列実行に矛盾するデータ依存関係)がある配列要素
が存在するループ構造中の文群をベクトル化することを
可能とし、ベクトル処理プロセッサの実行時間を短縮す
ることができるベクトル化処理方式を提供することにあ
る。
〔課題を解決するための手段〕
本発明のベクトル化処理方式は、ベクトル演算機能を
有するベクトル処理プロセッサに対するコンパイラにお
いて、ソースプログラムを読み込み構文解析を行って中
間テキストを生成する構文解析手段と、この構文解析手
段により生成された中間テキストを入力してソースプロ
グラム中のループ構造を検出しそのループ構造中におい
て並列実行に矛盾するデータ依存関係がある配列要素が
存在するか否かを判定するデータ依存関係判定手段と、
このデータ依存関係判定手段において並列実行に矛盾す
るデータ依存関係があると判定された配列要素に対して
データ依存関係が並列実行に矛盾する要因を検査するデ
ータ依存関係矛盾要因検査手段と、このデータ依存関係
矛盾要因検査手段による検査に基づいてベクトル長の再
設定が可能と判定した場合にベクトル長を再設定し同一
配列要素へのアクセスが重複しないように配列要素の添
字式を変形することにより並列実行に矛盾するデータ依
存関係の解消を行うベクトル長再設定手段と、このベク
トル長再設定手段による並列実行に矛盾するデータ依存
関係の解消に基づいて前記構文解析手段により生成され
た中間テキストをベクトル命令を適用するための形式に
変形する中間テキスト変形手段と、この中間テキスト変
形手段により変形された中間テキストに基づいてオブジ
ェクトプログラムを生成するコード生成手段とを有す
る。
〔作用〕
本発明のベクトル化処理方式では、構文解析手段がソ
ースプログラムを読み込み構文解析を行って中間テキス
トを生成し、データ依存関係判定手段が構文解析手段に
より生成された中間テキストを入力してソースプログラ
ム中のループ構造を検出しそのループ構造中において並
列実行に矛盾するデータ依存関係がある配列要素が存在
するか否かを判定し、データ依存関係矛盾要因検査手段
がデータ依存関係判定手段において並列実行に矛盾する
データ依存関係があると判定された配列要素に対してデ
ータ依存関係が並列実行に矛盾する要因を検査し、ベク
トル長再設定手段がデータ依存関係矛盾要因検査手段に
よる検査に基づいてベクトル長の再設定が可能と判定し
た場合にベクトル長を再設定し同一配列要素へのアクセ
スが重複しないように配列要素の添字式を変形すること
により並列実行に矛盾するデータ依存関係の解消を行
い、中間テキスト変形手段がベクトル長再設定手段によ
る並列実行に矛盾するデータ依存関係の解消に基づいて
構文解析手段により生成された中間テキストをベクトル
命令を適用するための形式に変形し、コード生成手段が
中間テキスト変形手段により変形された中間テキストに
基づいてオブジェクトプログラムを生成する。
〔実施例〕
次に、本発明について図面を参照して詳細に説明す
る。
第1図は、本発明のベクトル化処理方式の一実施例の
構成を示すブロック図である。本実施例のベクトル化処
理方式は、高級言語で書かれたソースプログラム1と、
コンパイラ2と、ベクトル処理プロセッサで実行される
オブジェクトプログラム3とを含んで構成されている。
コンパイラ2は、ベクトル化処理手段4と、構文解析
手段21と、コード生成手段26と、中間テキスト27とを含
んで構成されている。
ベクトル化処理手段4は、データ依存関係判定手段22
と、データ依存関係矛盾要因検査手段23と、ベクトル長
再設定手段24と、中間テキスト変形手段25とを含んで構
成されている。
なお、第1図中の太い矢線は制御の流れを示してお
り、細い矢線はデータの流れを示している。
次に、このように構成された本実施例のベクトル化処
理方式の動作について説明する。
コンパイラ2内の構文解析手段21は、ソースプログラ
ム1を読み込み、構文解析を行い、中間テキスト27を生
成する。例えば、第2図に示すようなソースプログラム
1(FORTRANソースプログラム)を読み込み、第4図に
示すような中間テキスト27(形式1中間テキスト)を生
成する。
ベクトル化処理手段4内のデータ依存関係判定手段22
は、構文解析手段21により生成された中間テキスト27に
基づいてソースプログラム1中のループ構造を検出する
と、そのループ構造中に並列実行に矛盾するデータ依存
関係がある配列要素が存在するか否かを次の手順で判定
する。
(1) ループ構造中に含まれる全ての配列要素を検出
し、当該配列要素に対して第6図に示すような配列テー
ブルおよび配列要素テーブルを作成する。
例えば、第2図のDOループ(第2図に示すソースプロ
グラム1におけるループ構造)の場合には、配列要素A
(I),A(I+10),B(I),B(I),B(I),C(I)
およびD(I)に対して、配列テーブルおよび配列要素
テーブルを作成する。
配列テーブルについては、「次の配列テーブルへのポ
インタ」フィールド,「配列名」フィールドおよび「最
初の配列要素テーブルへのポインタ」フィールドを設定
する。
配列要素テーブルについては、対応する配列要素の添
字式を初期値および増分値を表す形に変形し、これらを
対応するフィールド(「添字式」フィールド,「添字式
の初期値」フィールドおよび「添字式の増分値」フィー
ルド)に設定する。また、対応する配列要素が含まれる
ソース行(文)の行番号を対応するフィールド(「ソー
ス行番号」フィールド)に設定する。さらに、対応する
配列要素がループ構造中で定義される場合には定義配列
要素フラグ(「定義配列要素フラグ」フィールドにおけ
るフラグ)をオンにし、対応する配列要素がループ構造
中で引用される場合には定義配列要素フラグをオフにす
る。
なお、各配列要素テーブル内のデータ依存フラグ
(「データ依存フラグ」フィールドにおけるフラグ)を
オフにする。
(2) 中間テキスト27(形式1中間テキスト),配列
テーブルおよび配列要素テーブルから、ループ構造中に
2度以上現れる配列要素について、スカラ命令により順
次実行した場合とベクトル命令により並列実行した場合
とで同一配列要素への定義の順序または定義・引用の順
序が異なることから実行結果に違いが生じるか否かを調
べる。
この調査で実行結果に違いが生じる場合には、その配
列要素に関して並列実行に矛盾するデータ依存関係があ
ると判定する。
このように、並列実行に矛盾するデータ依存関係があ
る配列要素が存在すると判定した場合には、当該配列要
素の配列要素テーブルのデータ依存フラグをオンにし、
第6図に示すようなデータ依存スタックを作成し、その
データ依存スタック内の「矛盾するデータ依存関係にあ
る配列要素テーブルへのポインタ」フィールドに当該配
列要素に対して並列実行に矛盾するデータ依存関係があ
る配列要素の配列要素テーブルへのポインタを格納す
る。
例えば、第2図のDOループの場合には、DOループ中に
2度以上現れる配列A(配列要素A(I)およびA(I
+10))および配列B(配列要素B(I))がデータ依
存関係の検査の対象とされる。
ここで、配列要素A(I)およびA(I+10)に対し
ては、スカラ命令により順次実行した場合とベクトル命
令により並列実行した場合とで、同一配列要素への定義
の順序が異なるために、実行結果に違いが生じる。よっ
て、並列実行に矛盾するデータ依存関係があると判定さ
れ、配列要素A(I)およびA(I+10)の配列要素テ
ーブルに対応するデータ依存スタックが作成される。
配列要素B(I)に対しては、並列実行に矛盾するデ
ータ依存関係がないと判定され、データ依存スタックは
作成されない。
データ依存関係矛盾要因検査手段23は、データ依存関
係判定手段22によりデータ依存フラグがオンにされた配
列要素テーブルと当該配列要素テーブルに対応するデー
タ依存スタックとから、以下の条件(a)〜(c)が全
て満たされているか否かを調べ、データ依存関係が並列
実行に矛盾する要因を検査する。
条件(a) 並列実行に矛盾するデータ依存関係がある
2つの配列要素が共に定義されている。
条件(b) 並列実行に矛盾するデータ依存関係がある
2つの配列要素の添字式の増分値が等しい。
条件(c) 並列実行に矛盾するデータ依存関係がある
2つの配列要素間の添字式の初期値の差が各配列要素の
添字式の増分値の倍数である。
以上の条件(a)〜(c)が全て満たされている場合
には、データ依存関係矛盾要因検査手段23は、次式によ
ってデータ依存回次数の値を求め、その値をデータ依存
スタック内の「データ依存回次数」フィールドに設定す
る。
データ依存回次数=配列要素間の添字式の初期値の差/
配列要素の添字式の増分値 第7図は、このような設定が行われた後における、第
2図のDOループの場合の配列Aの配列テーブル,配列要
素A(I)およびA(I+10)の配列要素テーブルなら
びに当該配列要素テーブルに対応するデータ依存スタッ
クの状態を示す図である。
ベクトル長再設定手段24は、並列実行に矛盾するデー
タ依存関係を解消するために、次のような処理を行う。
(1) 配列テーブル,配列要素テーブルおよびデータ
依存スタックから、ベクトル長の再設定が可能であるか
否かを検出する。以下の条件(d)および(e)が全て
満たされている場合には、ベクトル長の再設定が可能で
あると判定する。
条件(d) 並列実行に矛盾するデータ依存関係がある
配列要素の組に対するデータ依存スタック中の「データ
依存回次数」フィールド内の値(データ依存回次数)が
2以上の正定数である。
条件(e) 条件(d)を満たす並列実行に矛盾するデ
ータ依存関係がある配列要素の組の他に、データ依存フ
ラグがオンの配列要素テーブルに係る配列要素が存在し
ない。
第2図のDOループの場合には、第7図に示すように、
配列要素A(I)およびA(I+10)に対するデータ依
存スタックのデータ依存回次数は2以上の正定数であ
り、当該配列要素の組の他に並列実行に矛盾するデータ
依存関係がある(配列要素テーブルのデータ依存フラグ
がオンである)配列要素は存在しないために、ベクトル
長の再設定が可能であると判定される。
(2) (1)でベクトル長の再設定が可能と判定した
場合には、ベクトル長を再設定するための中間テキスト
27(形式2中間テキスト)を生成する。
第2図のDOループの場合には、配列要素A(I)およ
びA(I+10)に対するデータ依存スタックのデータ依
存回次数の10を再設定ベクトル長とする中間テキスト27
が生成される。
(3) (1)でベクトル長の再設定が可能と判定した
場合には、ベクトル長を再設定することから、同一配列
要素へのアクセスが重複しないように、以下の手順
(i)および(ii)で配列要素の添字式を変形する。
手順(i) データ依存スタック中の「矛盾するデータ
依存関係にある配列要素テーブルへのポインタ」フィー
ルドが指している配列要素テーブルの「ソース行番号」
フィールド内の値と等しいソース行番号のソース行
(文)において変形を要する添字式を持つ配列要素を選
出する。
第2図のDOループの場合には、の文中の配列要素A
(I+10)と配列要素B(I)とが添字式の変形の対象
となる配列要素として選出される。
手順(ii) 手順(i)で選出された配列要素に対し
て、再設定前のベクトル長とデータ依存回次数とを用い
て、同一配列要素へのアクセスが重複しないように添字
式を変形する。
また、変形した添字式に基づき、配列要素の初期値を
求め、対応する配列要素テーブルの各フィールドを更新
する。
第8図は、このような変形が行われた後における、第
2図のDOループの場合の配列要素A(I+10)と配列要
素B(I)とに対する配列テーブル,配列要素テーブル
およびデータ依存スタック等の状態を示す図である。
このようにして、第2図のDOループにおける配列要素
A(I)と配列要素A(I+10)との間の並列実行に矛
盾するデータ依存関係が解消される。
中間テキスト変形手段25は、更新後の配列要素テーブ
ル等を用いて、中間テキスト27をベクトル命令を適用す
るための形式に変形する。
例えば、第2図に示すようなソースプログラム1があ
たかもベクトル化が可能な第3図に示すようなDOループ
が2つに分割されたソースプログラムと等価になるよう
に、第4図に示すような中間テキスト27(形式1中間テ
キスト)を第5図に示すような中間テキスト27(形式2
中間テキスト)に変形する。
コード生成手段26は、ベクトル化処理手段4から制御
を渡され、中間テキスト変形手段25により変形された中
間テキスト27(例えば、第5図に示すような形式2中間
テキスト)を入力し、その中間テキスト27に基づいてオ
ブジェクトプログラム3を生成する。
〔発明の効果〕
以上説明したように本発明は、ベクトル処理プロセッ
サにおいて、従来ベクトル化が不可能であったループ構
造中の文群のベクトル化が可能となることにより、ベク
トル処理プロセッサの実行時間を短縮することができる
という効果がある。
【図面の簡単な説明】
第1図は本発明の一実施例の構成を示すブロック図、 第2図は第1図中のソースプログラムの一例を示す図、 第3図は第2図に示すソースプログラムにおける並列実
行に矛盾するデータ依存関係を解消するためのソースプ
ログラムの修正の態様を示す図、 第4図は第2図に示すソースプログラムに対応する第1
図中の中間テキスト(第1図中の構文解析手段により生
成される形式1中間テキスト)を示す図、 第5図は第3図に示すソースプログラムに対応する第1
図中の中間テキスト(第1図中のコード生成手段により
入力される形式2中間テキスト)を示す図、 第6図は第1図中のデータ依存関係判定手段により作成
される配列テーブル,配列要素テーブルおよびデータ依
存スタックを示す図、 第7図は配列テーブル,配列要素テーブルおよびデータ
依存スタックに対する第1図中のデータ依存関係矛盾要
因検査手段の処理の態様を説明するための図、 第8図は配列テーブル,配列要素テーブルおよびデータ
依存スタックに対する第1図中のベクトル長再設定手段
の処理の態様を説明するための図である。 図において、 1……ソースプログラム、 2……コンパイラ、 3……オブジェクトプログラム、 4……ベクトル化処理手段、 21……構文解析手段、 22……データ依存関係判定手段、 23……データ依存関係矛盾要因検査手段、 24……ベクトル長再設定手段、 25……中間テキスト変形手段、 26……コード生成手段、 27……中間テキストである。

Claims (1)

    (57)【特許請求の範囲】
  1. 【請求項1】ベクトル演算機能を有するベクトル処理プ
    ロセッサに対するコンパイラにおいて、 ソースプログラムを読み込み構文解析を行って中間テキ
    ストを生成する構文解析手段と、 この構文解析手段により生成された中間テキストを入力
    してソースプログラム中のループ構造を検出しそのルー
    プ構造中において並列実行に矛盾するデータ依存関係が
    ある配列要素が存在するか否かを判定するデータ依存関
    係判定手段と、 このデータ依存関係判定手段において並列実行に矛盾す
    るデータ依存関係があると判定された配列要素に対して
    データ依存関係が並列実行に矛盾する要因を検査するデ
    ータ依存関係矛盾要因検査手段と、 このデータ依存関係矛盾要因検査手段による検査に基づ
    いてベクトル長の再設定が可能と判定した場合にベクト
    ル長を再設定し同一配列要素へのアクセスが重複しない
    ように配列要素の添字式を変形することにより並列実行
    に矛盾するデータ依存関係の解消を行うベクトル長再設
    定手段と、 このベクトル長再設定手段による並列実行に矛盾するデ
    ータ依存関係の解消に基づいて前記構文解析手段により
    生成された中間テストをベクトル命令を適用するための
    形式に変形する中間テキスト変形手段と、 この中間テキスト変形手段により変形された中間テキス
    トに基づいてオブジェクトプログラムを生成するコード
    生成手段と を有することを特徴とするベクトル化処理方式。
JP2060716A 1990-03-12 1990-03-12 ベクトル化処理方式 Expired - Lifetime JP2621555B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2060716A JP2621555B2 (ja) 1990-03-12 1990-03-12 ベクトル化処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2060716A JP2621555B2 (ja) 1990-03-12 1990-03-12 ベクトル化処理方式

Publications (2)

Publication Number Publication Date
JPH03260865A JPH03260865A (ja) 1991-11-20
JP2621555B2 true JP2621555B2 (ja) 1997-06-18

Family

ID=13150295

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2060716A Expired - Lifetime JP2621555B2 (ja) 1990-03-12 1990-03-12 ベクトル化処理方式

Country Status (1)

Country Link
JP (1) JP2621555B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8972698B2 (en) * 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
JP6933063B2 (ja) * 2017-09-07 2021-09-08 株式会社デンソー 並列化方法、並列化ツール、車載装置

Also Published As

Publication number Publication date
JPH03260865A (ja) 1991-11-20

Similar Documents

Publication Publication Date Title
US5651111A (en) Method and apparatus for producing a software test system using complementary code to resolve external dependencies
US6253371B1 (en) Method for supporting parallelization of source program
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
US6553362B2 (en) Case-reduced verification condition generation system and method using weakest precondition operator expressed using strongest postcondition operators
US5255385A (en) Method of testing program, and compiler and program testing tool for the method
Cogumbreiro et al. Checking data-race freedom of GPU kernels, compositionally
JP2621555B2 (ja) ベクトル化処理方式
Namjoshi et al. A self-certifying compilation framework for webassembly
JP3047418B2 (ja) ベクトル化処理方式
US20140173572A1 (en) Constraint derivation in context following for use with object code insertion
JPH09282173A (ja) プログラムの静的解析方法
JPH01177165A (ja) 配列の定義/引用関係検査方式
JPS63296171A (ja) ベクトル化処理方式
JP2864589B2 (ja) 関数値差異出力システム
JP2001142719A (ja) コンパイラ装置及びコンパイラプログラムを記録した記録媒体
Gückel Synthesis of state space generators for model checking microcontroller code
JPH10312312A (ja) 仕様によって動作が変わるc言語の計算機プログラム検査処理方法およびプログラム記憶媒体
JPS58169637A (ja) コンパイル処理方式
JPH09319591A (ja) ループ外への条件付き飛び出しがあるループの並列化方式
JP3327662B2 (ja) プログラム翻訳装置及びプログラム翻訳方法
Klint Formal language definitions can be made practical
JPH08212102A (ja) 並列プログラムの検査方法
JPH06242958A (ja) コンパイル方式
JPH04364537A (ja) 並列処理用プログラム最適化方法、装置およびコンパイラ
KLINT AFDELING INFORMATICA