JPH08115220A - ループ最適化方法 - Google Patents

ループ最適化方法

Info

Publication number
JPH08115220A
JPH08115220A JP24906994A JP24906994A JPH08115220A JP H08115220 A JPH08115220 A JP H08115220A JP 24906994 A JP24906994 A JP 24906994A JP 24906994 A JP24906994 A JP 24906994A JP H08115220 A JPH08115220 A JP H08115220A
Authority
JP
Japan
Prior art keywords
loop
code
processing
branch
blocks
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
JP24906994A
Other languages
English (en)
Inventor
Takeshi Horiuchi
毅 堀内
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 JP24906994A priority Critical patent/JPH08115220A/ja
Publication of JPH08115220A publication Critical patent/JPH08115220A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】選択型の分岐を含むループを簡単な処理でソフ
トウエアパイプライニングでき、しかも得られるオブジ
ェクトコードが大きくなり過ぎないような方法を提供す
る。 【構成】コンパイラのコード生成部の最適化処理の中
に、図1で示したように、対象ループ抜き出し手段1、
ブロック分割手段2、ブロックを組合せる手段3を備え
ることによって、対象ループを選択型の分岐によってで
きる2つのパタンに分解し、さらにそれぞれを命令スケ
ジューリングする手段4でスケジューリングした後、制
御構造をつける手段5、およびパイプラインの前後処理
を生成する手段6によって、簡単にオブジェクトサイズ
が大きくならないようにソフトウエアアパイプライニン
グ化する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はパイプライン処理を行う
計算機の目的プログラムを生成するコンパイラにおける
ループ最適化方法に関する。
【0002】
【従来の技術】従来、条件分岐を持つループをソフトウ
エアパイプライニング化する技術として、拡張モジュロ
スケジューリング法があることが次記文献に記載されて
いる。
【0003】文献名 Nancy J. Warter, Grant E. Haab, John W. Bockhau
s,”Enhanced Modulo Scheduling for Loops with Cond
itional Branches”,IEEE Micro-25, (Dec. 1992), 170
-179.この方法では、まずIF変換を適用しループ本体を
直線的な条件付コードにしておき、次にデータ依存グラ
フを生成して、ループ本体をモジュロスケジューリング
する。さらにモジュロ変数展開を用いてソフトウエアパ
イプラインステージを生成し、最後に条件分岐演算を挿
入して制御構造を再生成する。つまり、条件分岐を持つ
ループが複数の実行パスを持つためにソフトウエアパイ
プライニングすることが困難になっていることを、IF変
換を適用してループ本体を直線化することによって解決
している。
【0004】
【発明が解決しようとする課題】上記の従来技術では、
モジュロスケジューリングを基にしているため、パイプ
ラインの段数が多くなることがあり、そのプロローグ処
理部、エピローグ処理部を含めると係るループのオブジ
ェクトサイズが元の数倍以上に大きくなることもあっ
た。さらにこの方法では、分岐演算を導入して一度直線
的にしたコードを分岐を含むコードに逆変換しているが
この時にもコードの複製が多く作られオブジェクトサイ
ズが非常に大きくなることがあった。しかも選択的に実
行される部分のコードサイズが大きい方をベースにして
スケジューリングするため、必ずしも効率的なコードに
なるとは限らないにもかかわらず、スケジューリングの
処理は相当複雑になる。
【0005】そこで本発明の第1の目的は、選択型の分
岐があるループに対して簡単な処理でソフトウエアパイ
プライニング化された命令列を得る方法を提供すること
にある。
【0006】第2の目的は、上記のソフトウエアパイプ
ライニング化処理において、オブジェクトサイズが大き
くなりすぎることがないような方法を提供することにあ
る。
【0007】
【課題を解決するための手段】上記第1の目的達成のた
めには、本発明のループ最適化方法では単純に条件実行
を制御する選択分岐の前後でループを分割し、あとは普
通の命令スケジューリングとほとんど同じ処理を適用す
るようにした。これは上記第2の目標達成のためにも役
に立つ。
【0008】さらに上記第2の目的のために、選択的に
実行される部分をソフトウェアパイプライニングにおけ
る同じ1段の中に含まれるようにした。
【0009】
【作用】本発明において、第1の観点では一般のソフト
ウエアパイプライニング化処理に必要なイニシエイショ
ンインタバル(ループ繰り返し間隔)や、段数(パイプ
ラインステージ数)の決定処理が不要となり、普通の命
令スケジューリング処理を行うので命令割り付けの再試
行等もなくなり処理が簡単になる。
【0010】また第2の観点では、選択的に実行される
部分の前後もそれぞれ1段に含まれるようにすることに
よって、ソフトウエアパイプライニングの段数を高々3
段(普通は2段)に抑えることができるのでプロローグ
部、エピローグ部によってオブジェクトサイズが増大す
ることはなくなる。さらに、選択的に実行される部分が
1段に含まれるようにするので、ソフトウエアパイプラ
イニング化したコードの実行パタンが2つに限られ、分
岐の処理に必要となるコードの複製が1つで十分になる
ためオブジェクトサイズの激増を抑えられることにな
る。
【0011】
【実施例】以下、本発明の一実施例を図1から図17を
用いて説明する。なお、本実施例によって本発明が限定
されるものではない。
【0012】まず、図2でコンパイラの処理の流れを説
明する。コンパイラの本体8への入力である原始プログ
ラム7は、構文解析部9で処理をされた後、コード生成
部10の入力となる。このコード生成部10は、最適化処理
部11を含む。その最適化処理部11の中には従来の最適化
処理方法の他に本発明のキーとなる選択型の分岐を含む
ループに関するソフトウエアパイプライニング化処理
(図1)が含まれており、ここでの処理を受けることに
よって、出力である効率が改善された目的プログラム12
となる。
【0013】次に、図1で選択型の分岐を含むループに
関するソフトウエアパイプライニング化処理について説
明する。本処理に入ると、まず処理1で対象とするルー
プを抜き出す。ここで対象とするループの条件は、その
本体が図3で示したような形状をしており、ブロック
A,B1,B2,Cのそれぞれが分岐を含まない基本ブロ
ックになっていることである。そのようなループ本体の
ブロックの依存関係は図4に示した通りである。またル
ープによっては基本ブロックB1,B2のいずれか、また
は基本ブロックCがないものもある。そのような場合の
ブロックの依存関係を図5の(a),(b),(c)に示した。図
4の依存関係において、基本ブロックB1が実行される
と必ず基本ブロックCが、基本ブロックB2が実行され
ると必ず基本ブロックCが実行されることを考慮し、処
理2でブロックの分割を行う。図4の依存関係からは図
6に示したような3つのブロックに分割される。次に処
理3において、処理2で分割されたブロックを組合せ
る。組合せ方は分岐の前までを1段目に、分岐の後を2
段目にして分岐の両パタンについて作成する。したがっ
て図4、図6の場合には図7で示したような2つの組合
せができることになる。図7(a)は分岐の条件が真であ
る場合、図7(b)は偽である場合に実行されるブロック
の組合せであり、それぞれその場合の全ての命令を含ん
でいる。図5の(a),(b),(c)で示したパタンの場合には
それぞれ順に図8の(a),(b),(c)のような組合せにな
る。その後処理3で作られた2つのブロックの組合せ
を、繰り返しがずれていることにだけ注意して普通に命
令スケジューリングする。命令スケジューリングの詳細
については後で図11から図15を用いて説明する。そ
して命令スケジューリングが終った2つのブロックに対
し、処理5で制御構造をつけることにより1つのループ
を構成するように変換する。先の図7の例に処理5を適
用し制御構造をつけたものを図9に示した。図中13,17
は図7の各組合せをスケジューリングしたもの、14は元
の条件が成立しない時にラベル#4で示した命令へ分岐す
る手段、15は繰り返し回数から値1を減じそれが0でな
いならラベル#1で示した命令へ分岐する手段、16はラベ
ル#5で示した命令へ分岐する手段、18は元の条件が成立
する時にラベル#2で示した命令へ分岐する手段、19は繰
り返し回数から値1を減じそれが0でないならラベル#2
で示した命令へ分岐する手段である。13,17においてブ
ロックAとその他の命令とはループ1回分ずれているの
で、このような制御構造をつけることにより、1回前で
条件が成立した時には13を、成立しなかった時には17を
実行することができるようになる。処理3におけるブロ
ック分割において、図4で示した元の基本ブロックがC
または基本ブロックAが大きい場合には、図10(a)の
ようにブロックCを独立させてブロックの分割を3つに
したり、図10(b)のようにブロックAをA’とA”の
2つに分割し、パイプラインの段数を3段にすることも
できる。この場合においても、選択的に実行されるブロ
ックBの命令が2つ以上の段にまたがることがないよう
にしているので、実行パタンが2通りに限られることに
変わりはなく、オブジェクトサイズが激増することはな
い。そして最後に処理6によってプロローグ処理および
エピローグ処理のコードを作成する。プロローグ処理は
1つだけであり、図9では13の前に置かれる。また、エ
ピローグ処理は、最後の条件が真になったか偽になった
か、つまりB1を実行するかB2を実行するかによって2
種類存在する。B1を実行する場合のエピローグは15と1
6の間に、B2を実行する場合のエピローグは19の後ろに
置かれる。以上の処理で選択型の分岐を含むループのソ
フトウエアパイプライニング化されたコードを得ること
になる。
【0014】具体的な処理を図11から図17を用いて
説明する。例として図11に示したようなループを考え
る。これは分岐を1つだけ含んでおり、その他に分岐が
ないので本発明の適用対象となる。つまり図1の処理1
で抜き出されることになる。ただし、このIF文にはelse
側の命令がないので、図3のB2がない場合に相当し、
各基本ブロックの依存関係は図5の(b)のようになる。
これを次の処理2でブロック分割すると、1行目のTの
計算は必ず行われるので図12の(a)に示したように1
つのブロックになる。2行目のIF文の条件が成立した場
合、3行目のTの計算が行われさらに4行目も実行され
るのでそれらを1つとして図12の(b)に示したブロッ
クが作られる。2行目のIF文の条件が成立しなかった場
合は4行目だけが実行されるのでそれだけで図12の
(c)に示したブロックを作る。ここでできた図12の
(a),(b),(c)3つのブロックのオブジェクトコードはそ
れぞれ図13の(a),(b),(c)のようになる。そして、次
の処理3のブロックの組合せは、図8の(b)のようにIF
文の条件が真の時に実行される(a)と(b)の組合せと、条
件が偽の時に実行される(a)と(c)の組合せになる。次に
処理4に従ってそれぞれを命令スケジューリングする。
ここで注意するべきことは、(a)と(b)、および(a)と(c)
ではそれぞれループの繰り返しが1つずれていることで
ある。各命令語間の依存関係を(a)と(b)の組合せについ
ては図14の(a)に、(a)と(c)の組合せについては図1
4の(b)にそれぞれ示した。図中点線で示した依存関係
は、繰り返しがずれているために使用と定義の順が逆に
ならねばならないことを示している。また、各頂点の右
下にある下線を付けた数字は、スケジューリングに使用
する重みを示したものである。これをある種の2命令の
スーパースカラのプロセッサを想定し、各頂点間の依存
を乱さぬようにスケジューリングした結果を図15に示
した。この表の上から順に命令を取り出せば目的となる
命令列になる。処理5の制御構造をつけるのは単純な作
業なので説明は省略する。処理6の前後処理コードの生
成は、プロローグコードはAだけを実行すればよいので
図16の(a)のようになる。エピローグコードは、最後
の条件が真であった場合にはBとCを行わなければなら
ないので図16の(b)のように、偽であった場合はCの
みを行えば良いので図16の(c)のようなる。以上で全
ての処理が終ったので、図15および図16、それと図
9で示された枠組みから、最終的なオブジェクトコード
を作ると図17に示したようになる。
【0015】
【発明の効果】以上の様に、本発明によれば、処理のや
りなおしなどの複雑な処理もなく簡単に選択型の分岐を
含んだループをソフトウエアパイプライニング化するこ
とができるようになる。
【0016】また、生成するオブジェクトコードの段数
を2段または3段に制限することができるため、プロロ
ーグコード、およびエピローグコードの大きさを抑える
ことができるようになる。
【0017】さらに、選択的に実行される部分を1段に
収めることによって実行パタンを2つに制限することが
できるため、ループ本体を構成するために必要な複製が
1つで済むようになり、この点でもオブジェクトコード
の大きさを抑えることができるようになる。
【図面の簡単な説明】
【図1】本発明のキーとなる部分の流れ図である。
【図2】本発明の一実施例を示すブロック図である。
【図3】本発明の適用対象となるループの本体の一般形
を表す図である。
【図4】図3のループに含まれる基本ブロックの依存関
係を表す図である。
【図5】図3以外の形状をしたループの基本ブロックの
依存関係を表す図である。
【図6】図3のループから切り出されるブロックを表す
図である。
【図7】図6のブロックを実行パタンによって組合せた
例である。
【図8】図5のそれぞれに対してブロックの組合せを示
した図である。
【図9】図3のループから生成されるループの本体を示
した図である。
【図10】図3のループを3段でソフトウエアパイプラ
イニング化する場合のブロックの組合せを示した図であ
る。
【図11】具体例として用いたループのソースコードで
ある。
【図12】図11のループをブロック分割した例であ
る。
【図13】図12の各ブロックに対応するオブジェクト
リストの一例である。
【図14】図13からできるブロックの組合せに対する
命令語の依存グラフである。
【図15】図14の依存グラフから命令スケジューリン
グによって命令語をタイムスロットに割り付けた例であ
る。
【図16】図11のループをソフトウエアパイプライニ
ング化した時のプロローグコードとエピローグコードの
例である。
【図17】図11のループをソフトウエアパイプライニ
ングしてできるオブジェクトコードの一例である。
【符号の説明】
1…対象となるループを抜き出す手段。 2…連続して実行される部分を1つのブロックとして切
り出す見積もる手段。 3…条件の真偽によってできる実行パタンごとにブロッ
クを組合せる手段。 4…ブロックの各組合せを命令スケジューリングする手
段。 5…2つの組合せに制御構造をつけて1つのループにな
るようにする手段。 6…プロローグコードおよびエピローグコードを生成す
る手段。

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】パイプライン処理を行う計算機の目的プロ
    グラムを生成するコンパイラにおいて、IF型の選択分
    岐を含むループをソフトウエアパイプライニング化する
    にあたり、係る選択分岐によりできる異なる実行パスに
    含まれる命令語からなる命令列を別々に作成し、それぞ
    れの命令列の間を条件判定の結果に従って切り換えるよ
    うにすることを特徴とするループ最適化方法。
  2. 【請求項2】請求項1記載の最適化方法において、各実
    行パスごとの命令列を作成するにあたり、条件実行を制
    御する選択分岐の前と後とでソフトウェアパイプライニ
    ングにおける段を分割することを特徴とするループ最適
    化方法。
  3. 【請求項3】請求項1記載の最適化方法において、選択
    的に実行される部分をソフトウェアパイプライニングに
    おける同じ1段の中に含まれるようにすることを特徴と
    するループ最適化方法。
JP24906994A 1994-10-14 1994-10-14 ループ最適化方法 Pending JPH08115220A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP24906994A JPH08115220A (ja) 1994-10-14 1994-10-14 ループ最適化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP24906994A JPH08115220A (ja) 1994-10-14 1994-10-14 ループ最適化方法

Publications (1)

Publication Number Publication Date
JPH08115220A true JPH08115220A (ja) 1996-05-07

Family

ID=17187550

Family Applications (1)

Application Number Title Priority Date Filing Date
JP24906994A Pending JPH08115220A (ja) 1994-10-14 1994-10-14 ループ最適化方法

Country Status (1)

Country Link
JP (1) JPH08115220A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8549507B2 (en) 2007-03-23 2013-10-01 Samsung Electronics Co., Ltd. Loop coalescing method and loop coalescing device
US9395962B2 (en) 2011-11-15 2016-07-19 Samsung Electronics Co., Ltd. Apparatus and method for executing external operations in prologue or epilogue of a software-pipelined loop

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8549507B2 (en) 2007-03-23 2013-10-01 Samsung Electronics Co., Ltd. Loop coalescing method and loop coalescing device
US9395962B2 (en) 2011-11-15 2016-07-19 Samsung Electronics Co., Ltd. Apparatus and method for executing external operations in prologue or epilogue of a software-pipelined loop

Similar Documents

Publication Publication Date Title
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US5920724A (en) Software pipelining a hyperblock loop
JP3032031B2 (ja) ループ最適化方法及び装置
JP2921190B2 (ja) 並列実行方式
KR100638501B1 (ko) 다중 명령 컴퓨터 프로그램을 구성하는 방법
WO1997036228A9 (en) Software pipelining a hyperblock loop
US20100153937A1 (en) System and method for parallel execution of a program
JPH0738158B2 (ja) コード最適化方法およびコンパイラ・システム
US6564372B1 (en) Critical path optimization-unzipping
US7073169B2 (en) Compiler device with branch instruction inserting unit
JPH08115220A (ja) ループ最適化方法
JPH04293150A (ja) コンパイル方法
KR20150040663A (ko) 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
JP3032030B2 (ja) ループ最適化方法及び装置
Govindarajan et al. Co-scheduling hardware and software pipelines
KR101118593B1 (ko) Vliw 명령어 처리 장치 및 방법
US5875317A (en) Boosting control method and processor apparatus having boosting control portion
JPH1196018A (ja) コンパイル装置及び方法並びにコンパイル実行プログラムを記録したコンピュータ読み取り可能な記録媒体
JPH02253473A (ja) ベクトル処理システム
JPH0659933A (ja) コード変換装置
JPS63138427A (ja) 配列に対する命令のスケジユ−リング処理方式
JP2004046747A (ja) ベクトル化方式
JP3367438B2 (ja) 条件実行処理装置
JPH0573335A (ja) プログラムの自動インライン展開方式
JPH0377141A (ja) コンパイル処理装置