JPH09160784A - 並列化コンパイル方式 - Google Patents

並列化コンパイル方式

Info

Publication number
JPH09160784A
JPH09160784A JP7344893A JP34489395A JPH09160784A JP H09160784 A JPH09160784 A JP H09160784A JP 7344893 A JP7344893 A JP 7344893A JP 34489395 A JP34489395 A JP 34489395A JP H09160784 A JPH09160784 A JP H09160784A
Authority
JP
Japan
Prior art keywords
bit slice
loop
code
instruction
code string
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
JP7344893A
Other languages
English (en)
Other versions
JP3196625B2 (ja
Inventor
Junji Sakai
淳嗣 酒井
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 JP34489395A priority Critical patent/JP3196625B2/ja
Publication of JPH09160784A publication Critical patent/JPH09160784A/ja
Application granted granted Critical
Publication of JP3196625B2 publication Critical patent/JP3196625B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 単一ワード中の複数フィールドに対して同種
演算を施すビットスライス演算命令を備えるプロセッサ
向けの並列化コンパイル方式を提供する。 【解決手段】 コンパイラの最適化処理部では、先ず前
処理装置1によってループを正規化した上で、ループア
ンローリング装置2においてビットスライス演算命令の
フィールド数分だけループをアンローリングする。コー
ド列並べ換え装置3は依存解析装置4の解析結果を参照
してコード列を、ループ内で定義される各変数の定義参
照関係を変化させない範囲内で、同種の演算を行うコー
ドが隣接するように並べ換える。ビットスライスコード
生成装置5は、並べ換えられたコード列を走査してビッ
トスライス演算命令に適合するパターンを見い出し、ビ
ットスライスデータ型中間コードを生成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は原始プログラムを入
力して目的プログラムを出力するコンパイラに関し、よ
り詳細には、ワード内の複数フィールド毎に同種演算を
施す命令セットを持つプロセッサ向けの、上記命令セッ
トを用いた目的プログラムを生成する並列化コンパイル
方式に関する。
【0002】
【従来の技術】単一プロセッサで複数データに対し同種
演算を行うものとして、ベクトルプロセッサがある。ベ
クトルプロセッサでは、配列データの各要素に対して同
種の演算処理をパイプライン的に施す。ここで、ベクト
ル演算対象となる配列データは記憶装置上の任意の位置
に配置することができる。一般に、ベクトル命令を適用
した部分の実行速度は通常のスカラ命令での実行に比べ
て数十倍以上に加速される。このため、スカラ命令での
実行を前提として記述された原始プログラムから、ベク
トル命令を使用したベクトルプロセッサ向けの目的プロ
グラムを生成するコンパイラ、すなわちベクトル化コン
パイラが種々提案されている。
【0003】ベクトル化コンパイラでは、原始プログラ
ムにおいて主としてループ形式で記述された配列操作部
分を精密に調査し、可能な部分についてはベクトル命令
列に変換する。その際、ベクトル命令列への変換によっ
て、それらの演算の実行順序が原始プログラムでの演算
順序から変化することがあるため、その変換によって誤
った演算処理結果を得ることのないように、ベクトル化
コンパイラは依存関係解析処理を行う。依存関係解析と
は、配列要素等の変数の定義参照関係を調査するもので
あり、詳細については、例えば、"Supercompilers for
Parallel and Vector Computers"(H.Zimaほか、1991
年,Addison-Wesley Publishing Company)の第4章に述
べられている。また、ベクトル命令はその起動に時間を
要するため、ベクトル処理対象の配列の長さが短い場合
には性能が低下する。そこでベクトル化コンパイラで
は、演算対象配列の長さが十分にあるか否かを考慮して
ベクトル化の可否を判断する。
【0004】他方、単一プロセッサで複数データに対し
同種演算を行う他の形式のプロセッサとして、ワード内
の複数フィールドに対して同種演算を施す命令セットを
有するプロセッサが提案されている。このような演算命
令を本明細書ではビットスライス演算命令と呼び、また
ビットスライス演算命令を命令セットに有するプロセッ
サをビットスライス演算型プロセッサと呼ぶことにす
る。ビットスライス演算命令としては、例えば図3に示
すように、1ワード64ビット長のデータブロックを4
つの16ビットフィールドの集合と見なし、各フィール
ド毎に加算を行う、というものがあげられる。図3にお
いて、レジスタ6及びレジスタ7は演算のソース、レジ
スタ8は演算のデスティネーションであり、すべて64
ビット長である。プロセッサ内の演算ユニット9は4つ
の等価な演算サブユニット91,92,93,94から
構成されており、各サブユニットは同種の16ビット演
算を独立に行う。ビットスライス演算命令は、レジスタ
6の第1フィールドS11とレジスタ7の第1フィールド
21をソースとする演算の結果をレジスタ8の第1フィ
ールドD1 に格納し、レジスタ6の第2フィールドS12
とレジスタ7の第2フィールドS22をソースとする演算
の結果をレジスタ8の第2フィールドD2 に格納し、以
下、第3フィールドと第4フィールドに対しても同様の
処理を行う。
【0005】ビットスライス演算は通常のワード間演算
とほとんど同じ時間で完了し、ベクトル命令のように起
動に時間を要することはない。このため、必ずしも高精
度演算が要求されない実画像処理やコンピュータグラフ
ィックス処理などへの適用が試みられている。
【0006】
【発明が解決しようとする課題】しかしながら、従来に
おいては、通常のプロセッサ用に記述された原始プログ
ラムからビットスライス演算型プロセッサ向けの目的プ
ログラムを生成するコンパイラはなく、従ってアセンブ
ラ言語や機械語を使用して目的プログラムを直接にコー
ディングするプログラミング作業が必要であった。
【0007】本発明はこのような事情に鑑みて提案され
たものであり、その目的は、原始プログラムからビット
スライス演算型プロセッサ向けの目的プログラムを生成
することのできる並列化コンパイル方式を提供すること
にある。
【0008】また、ビットスライス演算とベクトル演算
とは、両者とも原始プログラムにおいては通常配列操作
として記述される点で類似しているため、ビットスライ
ス演算型プログラム用のコンパイラには、ベクトル化コ
ンパイラの技術や思想をある程度流用することができ
る。例えば、ビットスライス演算命令を使用する場合も
演算順序が元の原始プログラムから変更されるため、ベ
クトル化コンパイラにおける前述した依存関係解析はビ
ットスライス演算命令生成の場合にもまた必須の機能で
ある。しかし、ビットスライス演算とベクトル演算とで
は実行形態が大きく異なる。例えば、ベクトル演算では
ベクトル演算対象となる配列データは記憶装置上の任意
の位置に配置することができるのに対して、ビットスラ
イス演算では、記憶装置へのアクセスがワード境界に沿
っていなければならない。即ち、図3のレジスタ6,7
に読み込むべきデータの先頭アドレスがワード境界に沿
っていなければならない。これは、ワード境界に沿って
いないと、整列化等の余分な処理が必要となり、ビット
スライス演算命令による実行速度の向上が通常数倍程度
に過ぎないため、ビットスライス演算命令使用による速
度向上がそのような余分な処理に関するオーバーヘッド
によって相殺され、実行効率の良い目的プログラムが得
られないからである。ベクトル化コンパイラでは、先に
述べたベクトル演算の特性から、演算対象配列の長さが
十分にあるか否かについては考慮するが、演算対象配列
が記憶装置上にどのように配置されているかについては
考慮していない。しかもベクトル化による速度向上率が
大きいため、多少命令ステップ数が増大してもベクトル
化を行うようなコンパイル方針をとっている。
【0009】このようにビットスライス演算型プロセッ
サ向けの目的プログラムを生成するコンパイラは、原始
プログラム中でループの形式で記述された部分を目的プ
ログラムに変換するという点でベクトル化コンパイラの
コンパイル方式と類似した部分がある。しかし、先に述
べたようなベクトル命令とビットスライス演算命令との
特性の違いから、ベクトル化方式をビットスライス演算
命令生成にそのまま適用すると、ビットスライス演算命
令使用による速度向上が記憶装置へのアクセスやプログ
ラム変換に関するオーバーヘッドによって相殺され、実
行効率の良い目的プログラムは得られない。特に、ビッ
トスライス演算命令で低精度並列演算を行う分野では、
計算に必要なデータの開始アドレスは動的に変化する場
合が多く、データの先頭アドレスがワード境界になると
は限らないため、ビットスライス演算命令へ一律に置き
換えることは、問題である。
【0010】そこで、本発明の別の目的は、ビットスラ
イス演算命令の特性を考慮し、実際のビットスライス演
算命令で効率的な実行が可能か否かを判定しつつコンパ
イルを進める並列化コンパイル方式を提供することにあ
る。
【0011】
【課題を解決するための手段】本発明は、単一ワードを
複数フィールドに分割し各フィールドに対して同種演算
を施すビットスライス演算命令を有するプロセッサ向け
のコンパイラにおいて、配列操作を記述したループをア
ンローリングするループアンローリング手段と、依存関
係を保ちつつアンローリングされた命令列を並べ換える
コード列並べ換え手段と、並べ換えられた命令列からパ
ターン照合によってビットスライス演算命令を生成する
ビットスライスコード生成手段とを備えている。
【0012】また、前記ループアンローリング手段は、
アンローリング前のコード列に第1の順序番号を振り、
ビットスライス演算命令のフィールド数分だけアンロー
リングする際、k回目のアンローリングによって生成さ
れたコード列に対して当該kに応じた第2の順序番号を
振るよう構成され、前記コード列並べ換え手段は、ルー
プ内に出現する変数の定義参照関係を保持しつつ、第1
の順序番号を第1キー,第2の順序番号を第2キーとし
て、ループ内の命令列を並べ換える構成を有している。
【0013】更に、前記ビットスライスコード生成手段
は、ビットスライス演算命令に適合する命令列であって
も、その命令列中でアクセスするデータの先頭アドレス
がワード境界に沿っていない場合にはビットスライス演
算命令への変換を行わない構成を有している。
【0014】また更に、本発明の好ましい実施例におい
ては、原始プログラムを読み込み構文解析を行って中間
コード列を生成する構文解析部と、前記中間コード列か
らループ構造を検出して前記中間コード列をビットスラ
イス演算命令で並列に処理する構造を持った中間コード
列に変換する最適化処理部と、変換された中間コード列
から目的プログラムを生成して出力するコード生成部と
を備え、且つ、前記最適化処理部に、前記中間コード列
から並列化処理対象とするループ構造を検出して、その
ループ構造を前記ビットスライス演算命令のフィールド
数分アンローリングするループアンローリング手段と、
アンローリングされたコード列を、そのループ構造内で
定義される各変数の定義参照関係を変化させない範囲内
で、同種の演算を行うコードが隣接するように並べ換え
るコード列並べ換え手段と、並べ換えられたコード列か
らパターン照合によってビットスライス演算命令に適合
するコードパターンを検出し、それらを対応するビット
スライスデータ型中間コードに変換するビットスライス
コード生成手段とを備えている。
【0015】上述のように構成された本発明の並列化コ
ンパイル方式にあっては、先ずループアンローリング手
段が原始プログラム中にあるループ構造を展開し、次に
コード列並べ換え手段が演算実行結果の正当性を保持で
きる範囲でループ内コード列を並べ換え、次いでビット
スライスコード生成手段が並べ換えられた命令列からビ
ットスライス演算命令に適合するパターンを抽出してビ
ットスライス演算命令を生成する。
【0016】ループアンローリングの回数は、このコン
パイラの出力する目的プログラムを実行するプロセッサ
が有するビットスライス演算命令のフィールド数に合わ
せる。例えば、図3に示すような4フィールド並列演算
を行う命令を備えている場合は、ループを4回アンロー
リングする。
【0017】アンローリングしたコード列は、同種の演
算を行うコードが隣接するように順序を並べ換える。こ
こで同種の演算とは、中間コードのオペコードが同一
で、オペランドのみ異なるものをいう。命令順序の入れ
換えは、依存関係解析で得られる変数の定義参照関係を
参照しつつ、プログラム実行結果が元のプログラムから
変化しない範囲で行う。このような並べ換えのために本
発明の好ましい実施例においては、ループアンローリン
グ手段において、アンローリング前のコード列に第1の
順序番号を振り、アンローリングの際にはk回目のアン
ローリングによって生成されたコード列に対してkに応
じた第2の順序番号を振り、コード列並べ換え手段にお
いて、ループ内に出現する変数の定義参照関係を保持し
つつ、第1の順序番号を第1キー,第2の順序番号を第
2キーとして、ループ内の命令列を並べ換える。
【0018】並べ換え後は、コード列中に同種演算が隣
接して出現するようになるため、ビットスライス演算命
令に変換できるコードパターンは容易に検出できる。こ
のとき、検出されたコードパターンは単純な整数データ
型や配列要素型ではなく、ビットスライスデータ型を用
いた中間コード列として内部表現する。ビットスライス
データ型で表現された中間コード列は、目的コードとし
て生成すべきビットスライス演算命令セットとの対応関
係、及び、アクセスする記憶装置のアドレスとループ制
御変数との関係が明白である。このため、ビットスライ
ス演算命令に適合する命令列であっても、その命令列中
でアクセスするデータの先頭アドレスがワード境界に沿
っていない場合にはビットスライス演算命令への変換を
行わない、といった制御が容易に行え、実行効率の良い
目的プログラムを生成することができる。
【0019】
【発明の実施の形態】次に本発明の実施の形態の例につ
いて図面を参照して詳細に説明する。
【0020】図1は本発明の一実施例のブロック図であ
る。この実施例のコンパイラAは、C言語等の高級言語
で記述された原始プログラムBを入力し、ビットスライ
ス演算型プロセッサ向けの目的プログラムCを生成して
出力し、その処理の過程で中間コード列Dを生成する。
コンパイラAは、原始プログラムBを読み込み構文解析
を行って中間コード列Dを生成する構文解析部Eと、中
間コード列Dからループ構造を検出して中間コード列D
をビットスライス演算命令で並列に処理する構造を持っ
た中間コード列Dに変換する最適化処理部Fと、変換さ
れた中間コード列Dから目的プログラムCを生成して出
力するコード生成部Gとから構成されている。
【0021】図2は最適化処理部Fの構成例を示すブロ
ック図である。この例の最適化処理部Fは、前処理装置
1,ループアンローリング装置2,コード列並べ換え装
置3,ビットスライスコード生成装置5が順に接続され
た構成になっており、コード列並べ換え装置3は依存解
析装置4と接続されている。
【0022】コンパイラAに与えられた原始プログラム
Bは、構文解析部Eによって適切な中間コード列Dに変
換された後、最適化処理部Fの前処理装置1に入力され
る。
【0023】前処理装置1は、従来からのスカラ最適化
処理の他、ループの正規化及び帰納変数の置き換えを行
う。ループの正規化では、ループ制御変数の値が0から
ある自然数Nまで1ずつ増加するようにループ構造を変
換する。帰納変数の置き換えでは、ループ中の帰納変数
出現をループ制御変数を用いた線形式で置き換える。従
来からのスカラ最適化処理及び帰納変数については、例
えば、"Compilers Principles,Techniques,and,Tools"
(A.V.Aho ほか、1986年,Addison-Wesley Publishers)
の第9章,第10章に述べられている。
【0024】ループアンローリング装置2は、前処理装
置1の出力する中間コード列から並列化処理対象とする
ループ構造を探し出し、それらのループをU回アンロー
リングする。ここでUは、ターゲットプロセッサが有す
るビットスライス演算命令のフィールド数である。ま
た、並列化処理対象ループか否かの判定基準は必ずしも
正確でなくてもよく、例えば、当該ループ構造中に配列
操作処理が含まれており、かつ、並列化に適さない手続
き呼び出しや関数呼び出しが含まれていない、という条
件で判断してもよい。当該ループ構造がビットスライス
演算命令を使用した並列化に適するか否かの正確な判定
は後段で行う。
【0025】また、ループ中でループ独立な単純変数が
用いられている場合、ここでその変数を配列化しておく
こともでき、変数の配列化によりビットスライス演算命
令での実行効率を高めることができる。単純変数の配列
化に関しては、例えば、前出"Supercompilers for Para
llel and Vector Computers"の6.5節に述べられてい
る。
【0026】コード列並べ換え装置3は、中間コード列
中で同種の演算を行うコードが隣接するように、ループ
アンローリングされた中間コード列を適切に並べ換え
る。並べ換えに際しては、依存解析装置4による解析結
果を参照し、並べ換え後のプログラムの実行結果が並べ
換え前と同一であることを保証する。即ち、ループ内で
定義される各変数の定義参照関係を変化させない範囲で
並べ換えを行う。
【0027】依存解析装置4はループ内の各命令の定義
参照関係を調査する。依存関係解析手法は従来からのベ
クトル化コンパイラ等で用いられていた手法でよいが、
コード列並べ換え装置3における命令並べ換えはアンロ
ーリング後のループの本体内での並べ換えにとどまるた
め、ループの繰り返しの前後(U−1)回以内における
定義参照関係を調査すれば十分である。
【0028】ビットスライスコード生成装置5は、並べ
換え後の中間コード列を走査してビットスライス演算命
令に適合し得る中間コードパターンを検出し、それらを
対応するビットスライスデータ型中間コードに変換す
る。前記並べ換えの結果、ビットスライス演算命令に適
合するパターンは中間コード列中で隣接した位置に存在
しているため、検出は容易である。
【0029】ビットスライスコード生成装置5は、命令
パターン検出と同時に以下に挙げる項目のチェックを行
う。 (ア)当該中間コード列をそのビット長で演算するビッ
トスライス演算命令が存在すること。 (イ)主記憶装置等に記憶された配列変数のアクセスを
行う場合はそのデータの先頭アドレスがビットスライス
演算命令に適したアドレス境界(アライメント)に配置
されていること。ここで、データの先頭アドレスは、配
列変数の配置される先頭アドレスと、ループ制御変数等
の線形式で表現される配列添字式から算出する。 (ウ)上記(イ)の場合、データ要素のアクセス間隔
(スライド)がターゲットプロセッサが有するビットス
ライス演算命令のフィールド数の約数に一致し、望まし
くは1であること。
【0030】上記(ア)の項目をチェックするのは、そ
のようなビットスライス演算命令が存在しないと置き換
えができないからである。また、上記(イ)の項目をチ
ェックするのは、そのような条件を満たさないとビット
スライス演算命令を実際に使っても効率的な実行が行え
ないからである。更に、上記(ウ)の項目をチェックす
るのは、データ要素のアクセス間隔がビットスライス演
算命令のフィールド数の約数でないとビットスライス演
算命令を適用できないこと、約数であっても大きな値で
あればビットスライス演算命令を実際に使っても効率的
な実行が行えないことによる。
【0031】但し、ターゲットプロセッサの有するビッ
トスライス演算命令セットによっては、更にいくつかの
チェック項目が付加される場合もある。
【0032】対象ループ中にビットスライスデータ型中
間コードに変換できない中間コード列が部分的に存在す
る場合、ビットスライス演算と通常演算の混同は実行に
際してオーバーヘッドをもらたすから、当該ループ構造
のビットスライスデータ型中間コードへの変換を中止す
る。ただし、ループ内においてビットスライスデータ型
中間コードに変換できる部分と変換できない部分とが各
々連続している場合は、依存解析装置4の解析結果を再
度参照した上で、ループ分割手法の適用を試みる。ルー
プ分割手法については、例えば、前出"Supercompilers
for Parallel and Vector Computers"の6.2節に述べ
られている。
【0033】次に、ループアンローリング装置2および
コード列並べ換え装置3において、2つのソート(並べ
換え)キーを用いて中間コードを並べ換える方法につい
て説明する。中間コードで表現されたループ構造が与え
られた後、ビットスライスデータ型中間コードに変換さ
れるまでの処理の流れを図4に示す。図4の処理手順は
大きく2つの部分に分かれている。一つはループアンロ
ーリング処理20で、もう一つはコード列並べ換え処理
30である。ループアンローリング処理20は図2にお
けるループアンローリング装置2が行い、コード列並べ
換え処理30は図2におけるコード列並べ換え装置3が
行う。以下、図5から図9のコード例も参照しながら処
理手順を説明する。
【0034】図5はC言語による原始プログラムの例で
あり、図6は図5のプログラムを本コンパイラに与えた
ときに前処理装置1から出力される中間コード列のう
ち、forループの本体を構成する部分を抜き出したも
のである。t1,2,3 は演算結果を一時保持する中間
項、左矢印は右辺の演算結果を左辺へ代入することを表
す。
【0035】ループアンローリング処理20では、最初
に当該ループがビットスライス演算向けの変換に適して
いるか否かを判定する(21)。この判定は、変換が全
く不可能あるいは無意味であるようなループを処理対象
から外すことにより、コンパイル処理速度を改善するた
めに行う。変換対象と判定されたループ構造に対しての
み、以下の処理を施す。
【0036】アンローリングに際しては、ループ本体を
構成する各中間コードに対して2種類の順序番号を振
る。即ち、まずループ本体を構成する各中間コードに対
して順序番号K1 を振る(22)。この順序番号は中間
コード列の上流側から下流側に向かって昇順に一意に振
る。図6に示した例では、同図第1列目の数値が順序番
号K1 である。
【0037】次に、k回目のアンローリングで生成され
る中間コードの各々に対して順序番号K2 =kを振りな
がらループをU回アンローリングする(23)。この順
序番号をK2 とする。アンローリングの結果、各中間コ
ードはK1 とK2 の2つの順序番号を持つことになる。
図5のプログラムに対してこのアンローリング手順を適
用した結果を図7に示す。
【0038】コード列並べ換え処理30では、まず最初
に依存関係解析31を行う。ここでの依存関係解析の目
的はアンローリング後のループ本体内のコード列の順序
をどの程度入れ換えることができるか、であるから、ル
ープの繰り返し(アイテレーション)間にまたがらない
解析で十分である。
【0039】続いて、演算処理結果を変えない範囲内
で、K1 を第1キー、K2 を第2キーとしてループ内中
間コードを昇順に並べ換える(32)。これにより、ル
ープ内の中間コードは、ビットスライス演算命令を用い
て実行するとした場合の演算順序に並び換わる。図7の
コード列を並べ変えた後の様子を図8に示す。図7の例
の場合、並べ換えを妨げる依存関係が存在しないため、
図8では完全にキーの昇順になるように並べ換えられて
いる。
【0040】並べ換え後、ビットスライス演算命令によ
る実行の効率について検討し、不適なものは変換を中止
する(33)。実行効率を見積もる際のチェック項目に
ついては先に述べた。その中に主記憶装置等に記憶され
た配列のアクセスを行う場合はそのデータの先頭アドレ
スがビットスライス演算命令に適したアクセス境界(ア
ライメント)に配置されているか否か、という項目があ
る。前述したように、データの先頭アドレスは、配列変
数の場合、配列変数の配置される先頭アドレスと、ルー
プ制御変数等の線形式で表現される配列添字式から算出
するが、配列変数の配置される先頭アドレスがこの段階
で不明である場合、後のコード生成において配列先頭要
素がワード境界に沿って配置されることを前提として、
データの先頭アドレスを算出し、チェックを行えば良
い。また、ビットスライスデータ型中間コードに変換で
きない中間コード列が一部に存在する場合は、ビットス
ライス演算命令への変換をすべて中止するか、あるいは
先に述べたループ分割処理の適用を試みる。
【0041】実行効率の点で問題ないと判定されたルー
プ構造については、中間コード列を上から順に走査して
ビットスライス演算命令に適合するパターンを隣接中間
コード列中から見い出し、それらをビットスライスデー
タ型を用いた中間コード列に変換する(34)。パター
ン検出と対応するビットスライスデータ型中間コードの
生成規則の一例を図10に、また、ここで用いたビット
スライスデータ型中間項表記の説明を図11に示す。図
8のコード列から生成された中間コード列は図9のよう
になる。
【0042】以上に述べたコンパイラは、アンローリン
グとコード列並べ換えによってビットスライスデータ型
中間コードを容易に生成することができ、しかも生成さ
れた中間コードはビットスライス演算命令セットとの対
応がとりやすく、オーバヘッド等を考慮してビットスラ
イス演算命令への変換が可能か否かの判定を適切に行う
ことができる。また、上記のアンローリングおよびコー
ド列並べ換え処理も2つのソートキーによるソートによ
って容易に行うことができる。
【0043】以上本発明の実施例について説明したが、
本発明は以上の実施例にのみ限定されずその他各種の付
加変更が可能である。例えば、コード列の並べ換えを中
間コードの段階で実施したが、コード生成部Gで生成さ
れたコード列(命令列)の段階で並べ換えを行い、該当
するビットスライス演算命令に置き換えるようにするこ
とも可能である。
【0044】
【発明の効果】以上説明したように、本発明によれば、
原始プログラムからビットスライス演算型プロセッサ向
けの目的プログラムを自動生成することのできるコンパ
イラが得られる。これにより、アセンブラ言語や機械語
でビットスライス演算型プロセッサの目的プロセッサを
プログラミングしていた作業から利用者を開放すること
ができる。
【0045】また、第1の順序番号,第2の順序番号を
振って並べ換えを行う構成では、同種の演算を行うコー
ドが隣接するような並べ換えを、2つのソートキーによ
るソート処理にて容易に行うことができる。
【0046】更に、命令列中でアクセスするデータの先
頭アドレスがワード境界に沿っていない場合にはビット
スライス演算命令への変換を行わない構成としたことに
より、ビットスライス演算命令に変換したことによって
却って実行効率が低下するのを防止できる。
【図面の簡単な説明】
【図1】本発明の一実施例のブロック図である。
【図2】最適化処理部の構成例を示すブロック図であ
る。
【図3】ビットスライス演算命令を有するプロセッサの
動作説明図である。
【図4】ループアンローリング装置およびコード列並べ
換え装置において、2つのソートキーを用いて中間コー
ドを並べ換える手順を示すフローチャートである。
【図5】原始プログラムの一例を示す図である。
【図6】図5の原始プログラムを前処理装置で処理した
後の中間コード列の一部を示す図である。
【図7】図6の中間コード列をアンローリングした後の
中間コード列を示す図である。
【図8】図7の中間コード列の順序を並べ換えた後の中
間コード列を示す図である。
【図9】図8の中間コード列から生成されたビットスラ
イスデータ型中間コードを示す図である。
【図10】中間コード列からビットスライスデータ型中
間コードに変換するパターンと変換規則を示す図であ
る。
【図11】ビットスライスデータ型中間コードにおける
中間項表記の説明図である。
【符号の説明】
A…原始プログラム B…コンパイラ C…目的プログラム D…中間コード列 E…構文解析部 F…最適化処理部 G…コード生成部 1…前処理装置 2…ループアンローリング装置 3…コード列並べ換え装置 4…依存解析装置 5…ビットスライスコード生成装置 6,7…ソースとなるレジスタ 8…デスティネーションとなるレジスタ 9…演算ユニット 20…ループアンローリング処理 30…コード列並べ換え処理 91,92,93,94…演算サブユニット

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 単一ワードを複数フィールドに分割し各
    フィールドに対して同種演算を施すビットスライス演算
    命令を有するプロセッサ向けの並列化コンパイル方式で
    あって、 配列操作を記述したループをアンローリングするループ
    アンローリング手段と、依存関係を保ちつつアンローリ
    ングされた命令列を並べ換えるコード列並べ換え手段
    と、並べ換えられた命令列からパターン照合によってビ
    ットスライス演算命令を生成するビットスライスコード
    生成手段とを含む最適化処理部を備えることを特徴とす
    る並列化コンパイル方式。
  2. 【請求項2】 前記ループアンローリング手段は、アン
    ローリング前のコード列に第1の順序番号を振り、ビッ
    トスライス演算命令のフィールド数分だけアンローリン
    グする際、k回目のアンローリングによって生成された
    コード列に対して当該kに応じた第2の順序番号を振る
    よう構成され、 前記コード列並べ換え手段は、ループ内に出現する変数
    の定義参照関係を保持しつつ、第1の順序番号を第1キ
    ー,第2の順序番号を第2キーとして、ループ内の命令
    列を並べ換える構成を有することを特徴とする請求項1
    記載の並列化コンパイル方式。
  3. 【請求項3】 前記ビットスライスコード生成手段は、
    ビットスライス演算命令に適合する命令列であっても、
    その命令列中でアクセスするデータの先頭アドレスがワ
    ード境界に沿っていない場合にはビットスライス演算命
    令への変換を行わない構成を有することを特徴とする請
    求項1または2記載の並列化コンパイル方式。
  4. 【請求項4】 原始プログラムを読み込み構文解析を行
    って中間コード列を生成する構文解析部と、前記中間コ
    ード列からループ構造を検出して前記中間コード列をビ
    ットスライス演算命令で並列に処理する構造を持った中
    間コード列に変換する最適化処理部と、変換された中間
    コード列から目的プログラムを生成して出力するコード
    生成部とを備え、且つ、 前記最適化処理部に、 前記中間コード列から並列化処理対象とするループ構造
    を検出して、そのループ構造を前記ビットスライス演算
    命令のフィールド数分アンローリングするループアンロ
    ーリング手段と、 アンローリングされたコード列を、そのループ構造内で
    定義される各変数の定義参照関係を変化させない範囲内
    で、同種の演算を行うコードが隣接するように並べ換え
    るコード列並べ換え手段と、 並べ換えられたコード列からパターン照合によってビッ
    トスライス演算命令に適合するコードパターンを検出
    し、それらを対応するビットスライスデータ型中間コー
    ドに変換するビットスライスコード生成手段とを備える
    ことを特徴とする並列化コンパイル方式。
JP34489395A 1995-12-06 1995-12-06 並列化コンパイル方式 Expired - Fee Related JP3196625B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP34489395A JP3196625B2 (ja) 1995-12-06 1995-12-06 並列化コンパイル方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP34489395A JP3196625B2 (ja) 1995-12-06 1995-12-06 並列化コンパイル方式

Publications (2)

Publication Number Publication Date
JPH09160784A true JPH09160784A (ja) 1997-06-20
JP3196625B2 JP3196625B2 (ja) 2001-08-06

Family

ID=18372816

Family Applications (1)

Application Number Title Priority Date Filing Date
JP34489395A Expired - Fee Related JP3196625B2 (ja) 1995-12-06 1995-12-06 並列化コンパイル方式

Country Status (1)

Country Link
JP (1) JP3196625B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004260890A (ja) * 2003-02-25 2004-09-16 Yaskawa Electric Corp 多軸モータ制御装置
US7509634B2 (en) 2002-11-12 2009-03-24 Nec Corporation SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus
JP2018190261A (ja) * 2017-05-10 2018-11-29 富士通株式会社 情報処理装置、情報処理方法および情報処理プログラム
US11693638B2 (en) 2020-06-09 2023-07-04 Fujitsu Limited Compiler program, compiling method, information processing device

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5121498A (en) 1988-05-11 1992-06-09 Massachusetts Institute Of Technology Translator for translating source code for selective unrolling of loops in the source code

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7509634B2 (en) 2002-11-12 2009-03-24 Nec Corporation SIMD instruction sequence generating program, SIMD instruction sequence generating method and apparatus
JP2004260890A (ja) * 2003-02-25 2004-09-16 Yaskawa Electric Corp 多軸モータ制御装置
JP2018190261A (ja) * 2017-05-10 2018-11-29 富士通株式会社 情報処理装置、情報処理方法および情報処理プログラム
US11693638B2 (en) 2020-06-09 2023-07-04 Fujitsu Limited Compiler program, compiling method, information processing device

Also Published As

Publication number Publication date
JP3196625B2 (ja) 2001-08-06

Similar Documents

Publication Publication Date Title
US4821181A (en) Method for converting a source program of high level language statement into an object program for a vector processor
US4710872A (en) Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops
US5664193A (en) Method and apparatus for automatic selection of the load latency to be used in modulo scheduling in an optimizing compiler
JPH10228382A (ja) コンパイル方式
US5809308A (en) Method and apparatus for efficient determination of an RMII vector for modulo scheduled loops in an optimizing compiler
JPH0814817B2 (ja) 自動ベクトル化方法
JP2004038225A (ja) コンパイラプログラムおよびコンパイル処理方法
JPH04307625A (ja) ループ最適化方法及び装置
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US5790859A (en) Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler
JP2004288163A (ja) 代入ステートメントのリダクション変数の検出方法、システムおよびプログラム製品
JPH06324881A (ja) メモリデータの重なり判定機能を備えたコンパイラ装置
Eckstein et al. Code instruction selection based on SSA-graphs
US20010044930A1 (en) Loop optimization method and a compiler
Sargsyan et al. Scalable and accurate clones detection based on metrics for dependence graph
JP4462676B2 (ja) プログラム変換装置、コンパイラ装置およびプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体
JPH09160784A (ja) 並列化コンパイル方式
US20040003379A1 (en) Compiler, operation processing system and operation processing method
JP3032030B2 (ja) ループ最適化方法及び装置
JP3730675B2 (ja) 処理装置
JP3367438B2 (ja) 条件実行処理装置
Cantiello et al. Automatic source code transformation for GPUs based on program comprehension
JP2008015665A (ja) プログラム解析方法及びプログラム解析装置
JP3311774B2 (ja) コンパイラ装置
Keßler Knowledge-based automatic parallelization by pattern recognition

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees