JPH04308937A - コード生成方法 - Google Patents

コード生成方法

Info

Publication number
JPH04308937A
JPH04308937A JP7325591A JP7325591A JPH04308937A JP H04308937 A JPH04308937 A JP H04308937A JP 7325591 A JP7325591 A JP 7325591A JP 7325591 A JP7325591 A JP 7325591A JP H04308937 A JPH04308937 A JP H04308937A
Authority
JP
Japan
Prior art keywords
loop
logical
code
instructions
processing
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.)
Pending
Application number
JP7325591A
Other languages
English (en)
Inventor
Atsushi Inoue
淳 井上
Kenji Shirakawa
健治 白川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP7325591A priority Critical patent/JPH04308937A/ja
Publication of JPH04308937A publication Critical patent/JPH04308937A/ja
Pending legal-status Critical Current

Links

Landscapes

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

Abstract

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

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、複数の命令を並列に実
行可能な電子計算機におけるコード生成方法に関する。
【0002】
【従来の技術】従来、電子計算機の命令列は逐次処理さ
れることを前提に構成され、電子計算機はこれに従って
命令を1個ずつ取り出して実行していた。
【0003】この命令列の実行処理を高速化する方法と
して、パイプライン技術が導入された。これは命令の実
行を複数の段階(ステージ)に分解し、この分解された
実行段階を単位として、異なる段階の複数の命令を並列
に(同時に)実行する技術である。この技術により処理
のサイクルタイム短縮が可能となり、命令列全体の処理
時間も短縮される。しかし、パイプライン技術において
も実行開始される命令は1サイクル当たり1個であり、
これを超えた命令の並列実行は行われていなかった。
【0004】これに対し、近年、命令単位で並列実行を
可能とする技術が導入されており、れこにより1サイク
ル当たり1個以上の命令を処理することが可能になって
きている。VLIW(Very Long Instr
uction Word)方式と、スーパースカラー方
式と呼ばれる2つの手法がその代表的なものであり、こ
れらの方式を採用した計算機をVLIW計算機、スーパ
ースカラー計算機という。
【0005】VLIW方式は、予め定められた数の命令
群を1つの実行単位として定義し、計算機はこれらの命
令群を必ず同時に実行する。この方式によれば、計算機
は処理対象の命令群が同時に実行可能であるか否かを判
定する必要がなく、制御が単純であるため、ハードウェ
ア量が少なくて済み、またサイクルタイムの短縮が可能
である。しかしながら、この方式では処理の並列性をコ
ンパイラまたは人手により判定し、予め命令の並べ替え
を行っておかなければならない。
【0006】一方、スーパースカラー方式は、従来と同
様の逐次実行を前提とした命令列を解析して並列実行の
可能性を調べるハードウェアを備え、並列実行が可能な
場合には、これらの命令列を並列に実行するように制御
する方式である。この方式では、命令の並列実行の可能
性の判定を専用ハードウェアに委ねているため、通常の
プログラムであっても、逐次実行時との互換性を保った
実行は保証される。しかし実際にスーパースカラー方式
で性能向上を目指す場合には、ハードウェアリソースや
データ依存性等の情報を元に、演算ユニットが出来る限
り動作状態にあるようにする必要があるため、VLIW
方式と同様の命令並べ替えを行っておくことが必須であ
る。
【0007】これらのVLIW、スーパースカラーとい
った命令の並列実行方式において、特にプログラム中の
ループ部分の処理(ループ処理)を高速化するためのル
ープ最適化法として、ソフトウェアパイプライニング(
Software Pipelining) と呼ばれ
る命令並べ替えの手法が知られている。これはプログラ
ム中のループの反復1回分の命令を固有のハードウェア
リソースに割り当て、仮想的にループの複数反復分の命
令を個別の処理ユニットを用いてパイプライン的に同時
実行する方式である。
【0008】例えば浮動小数点ユニット1個、メモリ(
ロード、ストア)ユニット1個、整数ユニット1個、分
岐ユニット1個から構成されるVLIW計算機でソフト
ウェアパイプライニングを実行することを仮定する。 また、浮動小数点加算、乗算およびロード命令は、2サ
イクルの遅延があるものと仮定する。
【0009】今、ループの例として図2に示すようなC
言語で記述したソースプログラムを考える。このループ
はスカラー変数b,cが既にレジスタ上にロードされて
いるとすれば、 (1) A[i]のロード (2) A[i]*bの乗算 (3) A[i]*b+cの加算 (4) 結果のストア の4段階の処理で1回のループ反復が終了する。
【0010】この図2のプログラムを従来の逐次計算機
における命令列に翻訳して得られたアセンブラプログラ
ムは、図3のようになる。ソフトウェアパイプライニン
グでは、この命令列の各段階を独立のユニットで処理す
るので、各クロックでの実行状態は図4のようになる。 この例では第7および第8クロックがループ処理実行の
定常状態で、k回目反復のld(ロード)、mul(乗
算)、k+2回目反復のadd(加算)およびk+3回
目反復のst(ストア)が多重化して処理される。
【0011】このようなソフトウェアパイプライニング
処理によって、ハードウェアの持つ複数のユニット(加
算、乗算、ロードおよびストア)を遊ばせることなく、
効率の良いループ処理が可能になる。VLIW方式やス
ーパースカラー方式においては、このソフトウェアパイ
プライニングのようなループ最適化方式による命令並べ
替えを、ソースプログラムに手を加えることなくコンパ
イラ内部で行うことが必要となる。
【0012】ソフトウェアパイプライニングをループに
適用する場合、ループ内に分岐がない方が効率の良い命
令並べ替えが可能になる。分岐を含むループに対してソ
フトウェアパイプライニングを行う手法も提案されてい
るが、やはり分岐のないループに比べると効率の良いパ
イプライン処理の実行はできない。
【0013】ここで、図5に示すような、ループ終了の
分岐条件が複数の論理式の論理積、論理和であるような
ループにソフトウェアパイプライニングを適用すること
を考える。このように分岐条件が論理積、論理和である
場合、従来の逐次計算機では図6に示すように、各論理
式の評価毎に分岐命令(条件分岐命令)を出力して処理
している。実際、逐次計算機ではこのように分岐条件を
部分評価する方が効率の良いコードである。しかし、ソ
フトウェアパイプライニングを適用する場合には、各論
理式の評価毎に分岐命令を出力してしまうと、ループ内
分岐が起こり、ソフトウェアパイプライニングの処理が
煩雑になってしまう。また、仮にソフトウェアパイプラ
イン処理ができても、ループ内分岐のために効率の良い
命令実行ができなくなってしまう。
【0014】さらに、このようなループ内分岐の発生は
、他のループ最適化方式においても大きな障害となる場
合がある。例えばループの複数反復分の命令を1反復内
に展開するループ展開(ループアンローリング)処理を
行う場合も、ループ内分岐があるとループ最適化が容易
でなく、また分岐によりスムーズなパイプライン処理の
実行が阻害されてしまう。
【0015】
【発明が解決しようとする課題】このようにスーパース
カラー計算機、VLIW計算機といった複数の命令を同
時に実行する電子計算機において、ソフトウェアパイプ
ライニングやループ展開などのループ最適化を行う際、
ループ終了の分岐条件が複数の論理式の論理積、論理和
の組み合わせで表現される場合には、従来より逐次計算
機で行われていた各論理式に対する評価毎に分岐命令を
出力するコード生成法を採用すると、ループ内分岐が生
じてしまう。
【0016】この結果、ループ最適化処理が煩雑になっ
たり、効率の良いパイプライン処理の実行ができなくな
るなど、処理効率が低下してしまい、計算機の並列実行
による効率向上の効果が妨げられるという問題があった
【0017】本発明は、このような事情を考慮してなさ
れたもので、その目的とするところは、プログラム内の
ループ終了の分岐条件が複数の論理式の論理積、論理和
の組み合わせで表現される場合に、ループ内分岐を起こ
さない方式でコード生成を行うことにより、ソフトウェ
アパイプライニングやループ展開などのループ最適化方
式の適用を容易にし、スーパースカラー計算機、VLI
W計算機上での実行効率の高いコード生成方法を提供す
ることにある。
【0018】
【課題を解決するための手段】本発明は、スーパースカ
ラー、VLIW用最適化処理対象ループについて、ルー
プ終了条件の解析を行い、その解析結果を基に言語仕様
を保ってソフトウェアパイプライニング、ループ展開な
どのループ最適化に適したループ終了コード生成を行う
ことを骨子とする。
【0019】すなわち、本発明に係るコード生成方法は
、複数の命令を並列に実行する電子計算機におけるルー
プ処理に際して、ループ終了条件が複数の論理式の論理
積および論理和の組み合わせである場合に、これら複数
の論理式全体を評価した論理値を用いてループ終了を判
定し、ループ終了コードを生成する。
【0020】具体的には、例えばループ処理をループの
一部の反復の命令を固有の処理装置に割り当てて行う際
に、ループ終了条件が複数の論理式の論理積および論理
和の組み合わせである場合に、各論理式を順次演算ユニ
ットで評価して得られた最終的な論理値を用いてループ
終了を判定し、ループ終了コードを生成する。
【0021】また、ループ処理をループの複数反復分の
命令を1反復内に展開するループ展開処理によって行う
際にも、同様にループ終了条件が複数の論理式の論理積
および論理和の組み合わせである場合に、各論理式を順
次演算ユニットで評価して得られた最終的な論理値を用
いてループ終了を判定し、ループ終了コードを生成すれ
ばよい。
【0022】さらに、ループ終了条件が複数の論理式の
論理積および論理和の組み合わせであって、各論理式に
副作用を伴う演算が挿入されている場合には、個々の論
理式の評価に対する分岐命令を出力してループ終了コー
ドを生成するようにする。
【0023】
【作用】本発明においては、予めプログラム内でループ
最適化対象となるループ部分を抽出してそのループの終
了条件が解析される。この解析の結果、ループ終了条件
が複数の論理式の論理積、論理和の組み合わせで表現さ
れる場合で、言語仕様に適合する場合には、従来逐次計
算機で行っていた論理式の評価毎の分岐命令生成を行わ
ず、複数の論理式の論理積、論理和全体の結果を演算ユ
ニットで計算して評価し、その結果に基づいてループ終
了判定を行うようにループ終了コードの生成が行われる
【0024】このような方法により、不要なループ内分
岐を起こさずにループ終了コードを生成することが可能
となり、ソフトウェアパイプライニングやループ展開な
どのループ最適化方式の適用が容易となって、スーパー
スカラー、VLIW計算機上での命令の実行効率向上が
図られる。
【0025】
【実施例】以下、図面に基づいて本発明の一実施例につ
いて説明する。
【0026】図1は、本発明に基づくコード生成を含む
ループ最適化方式を適用したコンパイラの構成を示す機
能ブロック図である。このコンパイラは、プログラム入
力部21、構文解析部22、ループ抽出部23、ループ
構造解析部24、ループ終了コード生成部25、ループ
最適化部26およびコード生成部27より構成されてい
る。図10は、図1の本発明に特に関係するループ構造
解析部24とループ終了コード生成部25の処理の流れ
を示している。
【0027】図1において、プログラム入力部21で読
み込まれたソースプログラムは、構文解析部22で解析
されて中間テキストに変換され、ループ抽出部23に入
力される。ループ抽出部23は、入力された中間テキス
トを調べてプログラム内のループ部分を抽出し、そのル
ープ部分の内容をループ構造解析部24に渡す。
【0028】ループ構造解析部24は、ループ抽出部2
3によって抽出されたループについてループ終了条件(
分岐条件)を調べ、図5に示すような複数の論理式の論
理積および論理和の組み合わせからなる分岐条件である
か否かを検出する(図10のステップS1)。この検出
結果に従って、ループ終了コードの出力方式を決定する
。また、ループ構造解析部24は図9に示すように、複
数の論理式の間に代入演算など副作用を伴う演算の処理
が挿入されている場合を区別して検出する(図10のス
テップS2)。
【0029】ループ終了コード生成部25は、ループ構
造解析部24の判定結果に基づいてループ終了部分のコ
ード(ループ終了コード)の生成を行う。このループ終
了コードの生成は、次のようにして行われる。まず、図
2のように1つの論理式で表される終了条件に対しては
、従来と同じ方式でループ終了コードを生成する。
【0030】一方、ループ終了の分岐条件が図5のよう
に複数の論理式の論理積、論理和の組み合わせであり、
かつ各論理式評価の際に代入などの副作用をもった処理
が挿入されていない場合は、従来の各論理式評価毎に分
岐命令を出力するコード生成を行わず、論理積、論理和
で結合された論理式全体を評価し、その評価により得ら
れた論理値を用いてループ終了コードを生成する(図1
0のステップS3)。すなわち、各論理式を順次演算ユ
ニットで評価して得られた最終的な論理値を用いてルー
プ終了を判定し、ループ終了コードを生成する。
【0031】このようにして生成されたコード列からな
るアセンブラプログラムを図7に示す。このコード列は
図6に示す従来のコード列に比べると、条件演算部分の
コード数は増加しているが、ループ内分岐(**)が消
えていることが特徴である。ループ内分岐が消えること
で、ソフトウェアパイプライニング、ループ展開などの
ループ最適化手法の適用が容易となる。例えば図7のア
センブラプログラムに対してソフトウェアパイプライニ
ングを施すと、図8に示すようになる。
【0032】なお、図7に見られるようなコード数の増
加に関しては、計算機が複数の演算ユニットを持つスー
パースカラー計算機、VLIW計算機である場合、論理
式評価部分を並列に実行することが可能であるので、あ
まり問題にはならない。
【0033】一方、図9のように論理積および論理和で
結合される論理式中に、代入演算など副作用のある処理
が挿入されている場合は、言語仕様との兼ね合いが問題
になる。C言語の仕様では、&&演算子は第1の被演算
数が0の場合は第2の被演算数は評価されず、||演算
子は第1の被演算数が非0の第2の被演算数は評価され
ないことになっている。従って、図9のアセンブラプロ
グラムで論理和の第1被演算数である「k>=100」
条件が満足されてループが終了する場合、第2被演算数
内での代入演算は、言語仕様上では評価されていてはい
けないことになる。しかし、図10のステップS3によ
ればは論理和の全ての被演算数評価を行った上でループ
終了の分岐条件を判定することになるので、論理変数X
への値の代入が行われてしまう。もし、ループ終了後に
このXの値を使用することがあると、C言語仕様と異な
る動作をしてしまうおそれがある。
【0034】そこで、本実施例ではループ構造解析部2
4において、図9のように複数の論理式に代入演算など
副作用を伴う処理が挿入されている場合を区別して検出
しておき、そのようなループ終了の分岐条件の場合には
、従来と同様の各論理式毎に条件分岐命令を出力してい
くコード生成を行うように、ループ終了コード生成部2
5を制御する(図10のステップS4)。
【0035】ループ最適化部26では、このように変換
した中間コードに対して、前述したソフトウェアパイプ
ライニングやループ展開といったループ最適化を施す。 ループ最適化された中間テキストは、コード生成部27
により機械語で表現されたコードに翻訳され、オブジェ
クトプログラムとして出力される。
【0036】
【発明の効果】以上述べたように、本発明では予めプロ
グラム内でループ最適化対象となるループ部分を認識し
、そのループの終了条件を解析し、ループ終了条件が複
数の論理式の論理積および論理和の組み合わせで表現さ
れる場合には、ループ内分岐を発生してしまう従来の論
理式毎に分岐命令生成を行う方式を採らず、複数の論理
式の論理積、論理和全体の結果を演算ユニットで計算し
、その結果に基づいてループ終了判定を行うようにルー
プ終了コードの生成を行う。
【0037】従って、不要なループ内分岐を起こさずに
コード生成することが可能となるので、ソフトウェアパ
イプライニングやループ展開などのループ最適化の適用
を容易にし、結果としてスーパースカラー、VLIW計
算機上での実行効率の良いコード生成が可能となる。
【0038】スーパースカラー、VLIW計算機でルー
プ最適化を行う場合、複数の演算ユニットを用いて論理
式の評価を行うので、全論理式評価を一度に行うように
コード生成しても、命令実行サイクルの増加は問題には
ならない。
【0039】また、本発明では言語仕様上不正となる論
理式評価、すなわち複数の論理式の論理積および論理和
の組み合わせであって、副作用を伴う演算が挿入されて
いるかどうかの検出を行い、そのような評価のループ終
了条件に対しては、従来の方式と同様に論理式毎の評価
に対する分岐命令を出力してループ終了コードを生成す
るので、言語仕様を保持した実行結果を保証することが
できる。
【図面の簡単な説明】
【図1】  本発明の一実施例に係るコード生成方法を
適用したコンパイラの構成を示す図
【図2】  本発明に係るコード生成方法の処理対象と
なるループを有するソースプログラムの一例を示す図

図3】  図2のソースプログラムを従来の逐次計算機
の命令列に翻訳したアセンブラプログラムを示す図
【図
4】  図2のソースプログラムにソフトウェアパイプ
ライニングを施した場合の実行状態を示す図
【図5】 
 本発明に係るコード生成方法の処理対象となるループ
を有するソースプログラムの他の例を示す図
【図6】 
 図5のソースプログラムを従来の逐次計算機用の命令
列に翻訳したアセンブラプログラムを示す図
【図7】 
 図5のソースプログラムに本発明に係るコード生成方
法を適用したアセンブラプログラムを示す図
【図8】 
 図7のアセンブラプログラムにソフトウェアパイプラ
イニングを施した命令列であるアセンブラプログラムを
示す図
【図9】  本発明に係るコード生成方法の処理対象と
なるループを有するソースプログラムのさらに別の例を
示す図
【図10】  同実施例におけるコード生成方法の処理
手順を示すフローチャート。
【符号の説明】
21…プログラム入力部            22
…構文解析部23…ループ抽出部          
      24…ループ構造解析部 25…ループ終了コード生成部      26…ルー
プ最適化部 27…コード生成部

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】複数の命令を並列に実行する電子計算機に
    おけるループ処理に際して、ループ終了条件が複数の論
    理式の論理積および論理和の組み合わせである場合に、
    これら複数の論理式全体を評価した論理値を用いてルー
    プ終了を判定し、ループ終了コードを生成することを特
    徴とするコード生成方法。
  2. 【請求項2】複数の命令を並列に実行する電子計算機の
    ループ処理をループの一部の反復の命令を固有の処理装
    置に割り当てて行う際に、ループ終了条件が複数の論理
    式の論理積および論理和の組み合わせである場合に、各
    論理式を順次演算ユニットで評価して得られた最終的な
    論理値を用いてループ終了を判定し、ループ終了コード
    を生成することを特徴とするコード生成方法。
  3. 【請求項3】複数の命令を並列に実行する電子計算機の
    ループ処理をループの複数反復分の命令を1反復内に展
    開するループ展開処理によって行う際に、ループ終了条
    件が複数の論理式の論理積および論理和の組み合わせで
    ある場合に、各論理式を順次演算ユニットで評価して得
    られた最終的な論理値を用いてループ終了を判定し、ル
    ープ終了コードを生成することを特徴とするコード生成
    方法。
  4. 【請求項4】前記ループ終了条件が複数の論理式の論理
    積および論理和の組み合わせであって、各論理式に副作
    用を伴う演算が挿入されているループ終了条件に対して
    は、個々の論理式の評価に対する分岐命令を出力してル
    ープ終了コードを生成することを特徴とする請求項1、
    2または3記載のコード生成方法。
JP7325591A 1991-04-05 1991-04-05 コード生成方法 Pending JPH04308937A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7325591A JPH04308937A (ja) 1991-04-05 1991-04-05 コード生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7325591A JPH04308937A (ja) 1991-04-05 1991-04-05 コード生成方法

Publications (1)

Publication Number Publication Date
JPH04308937A true JPH04308937A (ja) 1992-10-30

Family

ID=13512890

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7325591A Pending JPH04308937A (ja) 1991-04-05 1991-04-05 コード生成方法

Country Status (1)

Country Link
JP (1) JPH04308937A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008077625A (ja) * 2006-09-18 2008-04-03 Samsung Electronics Co Ltd ユーザ定義の拡張演算を処理する演算システムおよび方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008077625A (ja) * 2006-09-18 2008-04-03 Samsung Electronics Co Ltd ユーザ定義の拡張演算を処理する演算システムおよび方法

Similar Documents

Publication Publication Date Title
JP3032031B2 (ja) ループ最適化方法及び装置
Hwu et al. The superblock: An effective technique for VLIW and superscalar compilation
US7039909B2 (en) Method and apparatus for performing compiler transformation of software code using fastforward regions and value specialization
US9038042B2 (en) Staged loop instructions
KR101279179B1 (ko) 병렬 프로그램 생성 방법
US8595711B2 (en) Function-level compiler processing optimization
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
JP2004038225A (ja) コンパイラプログラムおよびコンパイル処理方法
Schlansker et al. Critical path reduction for scalar programs
JPH07168717A (ja) 最適化機械コード変換方法およびコンピュータ装置
US20010020294A1 (en) Optimization apparatus that decreases delays in pipeline processing of loop and computer-readable storage medium storing optimization program
Walsh et al. Paragen: a novel technique for the autoparallelisation of sequential programs using gp
Hohenauer et al. Retargetable code optimization with SIMD instructions
JP2001125792A (ja) 最適化促進装置
JPH04308937A (ja) コード生成方法
Lim et al. A worst case timing analysis technique for optimized programs
JP3032030B2 (ja) ループ最適化方法及び装置
US8479179B2 (en) Compiling method, compiling apparatus and computer system for a loop in a program
Rajagopalan et al. Specification of software pipelining using petri nets
JPH04293150A (ja) コンパイル方法
Foley et al. Efficient partitioning of fragment shaders for multiple-output hardware
JPH02176938A (ja) 機械語命令最適化方式
JP2956591B2 (ja) ループ外への条件付き飛び出しがあるループの並列化方法及び装置
Gupta code Optimization as a side effect of instruction scheduling
Santiago et al. Stack-tagged dataflow