JPH0391035A - 命令列スケジューリング処理方法 - Google Patents

命令列スケジューリング処理方法

Info

Publication number
JPH0391035A
JPH0391035A JP22736389A JP22736389A JPH0391035A JP H0391035 A JPH0391035 A JP H0391035A JP 22736389 A JP22736389 A JP 22736389A JP 22736389 A JP22736389 A JP 22736389A JP H0391035 A JPH0391035 A JP H0391035A
Authority
JP
Japan
Prior art keywords
instruction
instructions
processing method
instruction sequence
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.)
Pending
Application number
JP22736389A
Other languages
English (en)
Inventor
Makoto Sato
真琴 佐藤
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 JP22736389A priority Critical patent/JPH0391035A/ja
Publication of JPH0391035A publication Critical patent/JPH0391035A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は命令をパイプライン処理方式で実行しデータ依
存関係のある特定の複数命令列が隣接するとき、該命令
列を、該命令列を構成する個々の命令の実行時間の和よ
りも高速に実行せしめる縮約実行ia構を有する計算機
システムに対するコンパイラにおける命令列スケジュー
リング処理方法〔従来の技術〕 先行命令がある資源へ値を書き込み、その後続命令が同
一資源がら値を読み出す、または、先行命令がある資源
から値を読み出し、その後続命令が同一資源へ値を書き
込むときに、このような2命令はデータ依存関係がある
。という。
命令をパイプライン処理方式で実行する計算機システム
においては、先行命令があるレジスタへの書き込みを行
い、その後続命令が向−レジスタからオペランドを読み
出す(即ち、この2命令はデータ依存関係がある)場合
に、先行命令がレジスタへの書き込みを完了するまで、
後続命令はレジスタからオペランドの読み出しを行うこ
とができず、処理に遅延が生じる。このようなレジスタ
上で発生するオペランドの競合を、レジスタ・オペラン
ド・コンフリクト、または、単に、オペランド・コンフ
リクトと呼ぶ。
縮約実行a構とは、データ依存関係のある特定の複数命
令列がIll接するとき、該命令列を高速に実行せしめ
る機構であり、例えば、先行命令がロード命令である場
合には、先行命令i後続命令とのIllでオペランド・
コンフリクトが発生しているときにも、先行命令と後続
命令の演算処理を同時に行うことができるような機構で
ある。このような縮約実行機構の実現方法については、
特開Ill’(63−12029号公報、特開昭63−
131230号公報、特開11g63−236138号
公報に記載されている。
従来の命令列スケジューリング方法は、特開昭62−2
17325号公報や、特開昭62−282333号公報
に記載のように、ある資源を定義する命令による。
同じ資源を使用する後続命令の実行開始時刻の遅延と、
資源の定義・使用関係に基づく命令列の実行順序のみを
考慮して行なわれていた。
〔発明が解決しようとするiilIIIM)上記従来技
術は、縮約実行11能な命令列について考慮されておら
ず、隣接して並べられた特定の複数命令列に対する縮約
実行機構を有する計算機システムに対しても同様に適用
しようとすると。
プログラム中に分散している縮約実行11能な命令列を
みつけて、実際に縮約実行可能なように隣接して並べる
ことは行なわれず、また、縮約実行F+■能な命令列が
、たとえ隣接して並べられていても。
命令列スケジューリングの処理過程においで、引き離さ
れるかも知れず、また、縮約実行機構を持たない計算機
システムでは、ある命令列によりかくされていた命令の
遅延が、縮約実行機構をもつ計算機システムではその命
令列の縮約実行によって起こる実行時間の減少により遅
延がみえてきても、遅延なしと誤った判断をして、命令
列スケジューリングをしない、という問題を生じる。
従って、本発明の一つの目的は、命令をパイプライン処
理方式で実行し、データ依存関係のある特定の複数命令
列が隣接するとき、該命令列を。
該命令列を構成する個々の命令の実行時間の和よりも高
速に実行せしめる縮約実行可能をもつ計算機システムに
対する命令列スケジューリング処理において、縮約実行
可能な命令列を効率良くみつけ、それらを並べかえ隣接
せしめる命令列スケジューリング処理方法を提供するこ
とである。
零発1す1の他の目的は、縮約実行機構を持つ計算機シ
ステムが、さらに、データ依存関係のない特定の複数命
令列が隣接するとき、該命令列を、該命令列を構成する
個々の命令の実行時間の和よりも高速に実行せしめる並
列実行機構を持つときの命令列スケジューリング処理に
おいて、縮約および並列実行可能な命令列を効率良くみ
つけ、それらを並べかえ隣接せしめる命令列スケジュー
リング処理方法を提供することである。
本発明の他の目的は、縮約および並列実行機構を持つ計
算機システムに対する命令列スケジューリング処理にお
いて、縮約および並列実行of能な命令列を効率良くみ
つけ、それらを並べかえ隣接せしめ、しかもある資源を
定義する命令の直後に該資源を使用する命令がきたとき
に生ずる後続命令の実行開始時刻の遅れによるパイプラ
インの空き時間の少ない命令列スケジューリング処理方
法を提供することにある。
本発明の他の目的は、縮約実行機構を持つ計算機システ
ムに対する命令列スケジューリング処理において、縮約
実行可能な命令列をみつけ、それらを並べかえ隣接せし
め、しかもパイプラインの空き時間の少ない命令列スケ
ジューリング処理方法を提供することにある。
〔課題を解決するための手段〕
上記目的を達成するために、本発明の命令列スケジュー
リング処理方法は、処理単位内の全命令について命令間
のデータ依存関係を調べ、それに基づいて縮約候補命令
列をみつけ、縮約候補命令列をグループ化して一命令の
如く扱うことを1丁能にし、それにともなって、命令間
のデータ依存関係を修正し、それによってデータ依存関
係に矛ノ19の起こらないことを判定し、該修正された
データ依存関係に基づいて順次、命令を取り出し並べる
ものである。
また、上記目的を達成するために、本発明の命令列スケ
ジューリング処理方法は、修正されたデータ依存関係情
報に基づく命令の実行順序関係を守り、直前に取り出し
並べられた命令または命令列と並列実行が可能な命令を
優先して取り出し並べるものである。
また、上記目的を達成するために、本発明の命令列スケ
ジューリング処理方法は、既に取り出し並べられた命令
列による実行開始時刻の遅れの小さな命令を、直前に取
り出し並べられた命令または命令列と並列実行1j能な
命令に優先して取り出し並べるものである。
また、上記目的を達成するために、本発明の命令列スケ
ジューリング処理方法は、並べかえてもプログラムの意
味が変わらないことと、並べかえ隣接せしめることによ
るプログラムの実行時間の減少量が、パイプラインの空
き時間の増加量を上まわることを判定して命令列を並べ
かえ隣接せしめ、該命令列をグループ化して一命令の如
く扱うことを可能にし、プログラムにパイプラインの空
きが生じている場合に、該パイプラインの空き時間を最
小にするように、該パイプラインの空きの原因となる命
令をプログラムの意味を変えない範囲で繰上げまたは繰
下げるものである。
〔実施例〕
(実施例1) 以下1本発明の一実施例を第1図から第10図までを参
照しながら説明する。第1図は本実施例の構成を示すブ
ロック図である0本実施例のコンパイラ20は、ソース
プログラムlOf&試み込んで解析し、中間コード30
を出力する解析部21と、中間コード30に対して最適
化を行なう最適化部22と、中間コード30にレジスタ
を割当てるレジスタ割当て部23と、中間コード30か
ら最適化されたオブジェクトコード60を生成する最適
化コード生成部24とから構成されている。
最適化コード生成部24は、中間コード30からオブジ
ェクトコード60を生成するコード生成部40と、オブ
ジェクトコード60を、命令群を直線的に実行できる最
大の命令群単位であるブロックに切分けるブロック切分
は部41と、ブロック内の命令列から縮約または並列実
行可能な命令列を集め、それらが縮約実行−iJ能な状
態を保持しながら、しかもパイプラインの空き時間を少
なくするように最適な順序で命令列を並べかえるコード
最適化部42とから構成されている。
コード最適化部42は、ブロック内の各命令の付加清明
を保持する情報テーブル50を生成する情報テーブル生
成部421と、命令間の資源の定義・使用関係を調べる
依存関係解析部422と。
依存関係m折部422の結果より、縮約実行可能な特定
の命令列を検出し、それらが縮約実行可能であることを
情報テーブル50に書き込み、さらにそれら命令列が縮
約実行されることにより変化する依存関係を修正する縮
約実行命令列検出・縮約化処理部423と、各命令上と
直接データ依存関係を持ち、かつ該令令工に後続する命
令2との間のパイプラインの空き時間を計算し、該計算
された各々の値と該後続する命令2の評価値との和をと
り、それらの値の最大値を該命令1の評価値とすること
により評価値を再帰的に計算する評価値計算部424と
、縮約実行゛可能な命令列の縮約実行性を保持し、また
一方、並列実行可能な命令列を捜しながら、パイプライ
ンの空き時間を少なくするように最適な順序で命令列を
並べかえる命令列スケジューリング部425とから構成
されている。
本実施例では、縮約命令列検出・縮約化処理部423を
設けることにより、ブロック内で、縮約実行11f能な
すべての命令列をあらかじめ検出しておき、それら命令
列の縮約実行性を保持した状態で、並列実行可能な命令
列を捜しながら命令列スケジューリングする所に特徴が
ある。
次に1本発明に直接かかわるコード最適化部42の動作
を第2図の命令列を人力とした場合について説明する。
この図では、命令列の意味を表わす暮の他に、人力され
た命令列と命令列スケジューリング処理後の命令列とに
ついて実行時IIII。
遅延時間、高速実行命令対(縮約実行命令対または並列
実行命令対)を比較するための欄を設けた。
ここで、意味の欄の矢印は、矢印の右側にあるものの内
容が、矢印の左側にあるものに代入されることを表わし
ている1例えば、番号lの命令は、メモリ上のXという
値を浮動小数点レジスタ(ト“H)工3に代入すること
を示し、#号3の命令は、レジスタF L< 15とレ
ジスタ1−’ R13の内容の和をレジスタFR15に
代入することを示す、また実行時間は、その命令が実行
されるのに要する時間を示し、Oとあるのは、その命令
は直前の命令と縮約実行されるため、事実上、時間がか
からないことを示す1本実施例及び次の実施例では縮約
実行可能な命令列とは、あるレジスタへのロード命令と
、そのレジスタも再定義するRR形式の演算系の命令と
の対、あるいは、RR形式の演算系の命令と、その命令
が定義したレジスタのストア命令との対のことである。
第2IJ!iにおいては、番号5.6の命令列と1番号
8,10の命令列が、それぞれFROと1−” R13
へのロード命令である、LERo、5  、LE工3.
Y、及び、それぞれのレジスタを再定義するRR形式の
演算系の命令である、MERo、9  、SとR工3.
6 、とから構成されているので、上記、縮約実行可能
な命令列に相当する。また、並列実行可能な命令列とは
固定小数点レジスタを使う命令と浮動小数点レジスタを
快う命令との対のことである。第2図においてはこれに
該当する命令列はない、高速実行命令対の欄は5このよ
うに高速実行(縮約実行または並列実行)可能な命令対
に「*jを付けたものである。ここで1番号8.10の
命令列にこの印が付けられていないのは、第2図の順序
で命令が実行された場合、番号8.工Oの命令列は、l
!llIり合っていないので、縮約実行機構に、縮約実
行可能であることを認識されず、従って、縮約実行され
ないからである。また遅延時間の欄は、直前の命令の実
行終了から、その命令の実行開始までの待ち時間を表わ
し、遅延は2命令とも演算系で、直前の命令が定義した
資源をその命令が使用する場合に起こる0例えば、番号
3の命令が定義したレジスタ)/R15は、番号4の命
令で使用されているので遅延時間が1だけ生じている。
コード最適化部42の最初の処理部である情報テーブル
生成部421は、第2図の命令列を人力とし、それから
第3図で示された情報テーブル50を作成する。ここで
、オブジェクト・コード以外の榴は、Oに初期化されて
いる。これらの欄のうち、@2.第3の欄は次の依存関
係解析部422で説明し、第4.第5.第6の欄は縮約
実行命令列検出・縮約化処理部423で、第7の欄は#
価値計算部424で、第8の欄は命令列スケジューリン
グ部425で説明する。
依存関係M折部422は、第3図の情報テーブルのオブ
ジェクトコードを人力とし、ある命令が定義した資源を
別の命令が使用する、またはある命令が使用した資源を
別の命令が定義する、という命令間のデータ依存関係を
調べ、ある命令とデータ依存関係を持ち、しかもその命
令より以前に実行しなければならない命令列(先行命令
列と呼ぶ)のリストを作って先行命令リストとし、また
ある命令とデータ依存関係を持ち、しかもその命令より
後に実行しなければならない命令列(後続命令列と呼ぶ
)のリストを作って後続命令リストとする。但し、ブロ
ックの最後の命令が分岐命令で、ブロック内に後続命令
リストを持たない命令があれば、分岐命令をその命令の
後続命令とする。
ここで例として第2図の番号8,10の命令についてデ
ータ依存関係を調べる。まず、番号8の命令は第2図に
よるとレジスタ)/K13を定義している6同じく第2
図によると、#号8の命令より以前に実行され、しかも
ト’R13を使用しているのは番号2と3の命令であり
1番号8の命令より後で実行され、しかもFR13を使
用しているのは番号IOの命令である1次に、番号10
の命令はレジスタFR13を使用かつ定義しており、ま
たレジスタFR6を使用している。よって、番号10の
命令より以前に実行され、しかもレジスタFl(13ま
たはFRBを定義しているのは、番号8.9の命令であ
る。これらの関係を図示したのが第4A図である。ここ
で70は番号8の命令の先行命令リスト、71は該命令
の後続命令リストを示し、72は番号10の命令の先行
命令リストを示す、また矢印は、矢印の先端部のアドレ
スが矢印の基点のある欄に格納されていることを示す。
この図ではブロック内のすべての命令の依存関係を表わ
しにくいので、もつと模式的にグラフで表わしたのが第
5A図である。第5八図中の円内の番号は第2図中の各
命令に付された番号を示し。
その番号により各命令を代表している。また、円同志を
結ぶ矢印は、結ばれた2命令の間にデータ依存関係があ
ることを示し、特に矢印の向きは実行の順序を示してい
る。このとき、矢印の基点にある命令が矢印の先端にあ
る命令の先行命令となり、逆に矢印の先端にある命令が
矢印の基点にある命令の後続命令となる。
縮約実行命令列検出・縮約化処理部423は、依存関係
解析部422の解析結果をもとにして、まず、縮約実行
可能な命令列を、各命令の後続命令リストや、さらにそ
のリスト中の命令の後続命令リストというようにして、
縮約実行可能な最大の命令数に達するまで探索を続けて
検出する1次に、今得られた縮約実行可能な命令列の各
構成命令に対して、それらが、縮約実行されるという情
報を与え、さらにその中の一つの命令に対して、他の縮
約実行命令とのデータ依存関係情報を代表して与える。
具体的には、縮約実行可能な命令列に対して、情報テー
ブル内のそれらに対応する縮約実行可能フラグの欄に値
1を入れ、縮約実行命令連結ポインタの欄にその縮約実
行命令列を構成する、自分自身とは、異なる命令のオブ
ジェクトコτドの欄の先頭アドレスを入れていき、その
ポインタをたどることにより、その縮約実行命令列を構
成するすべての命令がみつけられるようにし、さらに、
他の縮約実行命令のデータ依存関係情報を代表してもつ
命令に対しては、対応する主命令フラグ欄に王を入れ、
その命令の先行命令リスト、後続命令リストに他の縮約
実行命令の先行命令リスト、後続命令リストを連結する
0次に、今辿続されたリストの中で、これらの縮約実行
可能な命令列を指し示しているものを除く、これにより
縮約実行命令列は、主命令フラグが1である命令により
代表され、これを通常の一命令の如く扱うことにより、
縮約実行性を保持したまま処理される。
この処理をフローチャートとして表したのが第6図であ
る。ここで、第6図中の、スタックとは、上下という順
序をもったデータの集まりであって、それに対して、一
番上のデータをとり出すという操作と、一番上のデータ
の上に他のデータを積むという操作と、スタック中のデ
ータの数を数えるという三つの操作だけが許されるもの
のことである、ここでは例として、第4A図で依存関係
を調べた番号8,10の命令がこのフローチャートに従
って処理される様子を示す、まず、番号8の命令は、こ
れより番号の小さい命令と縮行実行されることはないの
で、縮約実行命令フラグド1はOのままであり、第6回
の判定J61はYESである8次に処理P61に従い、
番号8の命令をスタックエに、そのアドレスをスタック
3につむ0判定J62はYESであり、処理P62に進
む、#号8の命令の後続命令リストは第4A図中の71
で、それが指し示す番号10の命令は、スタック1の命
令と縮約実行可能だからスタック2につむ。
判定J63はNOなので処理IJ63に進み、スタック
1の番号8の命令の上にスタック2から取った番号10
の命令をつみ、そのアドレスをスタック3につむ1次に
判定J62に戻り、Noなので。
処理P64を経て判定J64に至る。この時点での三つ
のスタックの状態を表したのが第7図である0判定J4
はNoなので処理P65に進み、情報テーブルの番号1
0の命令の縮約実行命令フラグド1の欄に1を、縮約実
行命令連結ポインタPの欄に番号8の命令のアドレスを
入れ、変数TI4MPに番号10の命令のアドレスを入
れる6判定J65はYESなので処理P66に進み、情
報テーブルの番号8の命令のト’1.?’2の欄に1を
入れ、Pの欄に1°E M P即ち、番号10の命令の
アドレスを入れ、この番号8の命令の先行命令リストに
番号10の命令の先行命令リストをつなぎ、番号8の命
令の後続命令リストは、番号10の命令が後続命令リス
トをもたないので、そのままにしておく、この時点の情
報テーブルの状態を表したのが第4B図である。ここで
、73は連結された先行命令リスト、71は後続命令リ
ストである0次に処理P67に移り、スタック3から番
号10の命令のアドレスをとり出す、第4B図により、
後続命令リストア1から番号10の命令のアドレスをと
り去り、後続命令リストの先頭アドレスの欄をOにする
0判定J66はNoなので再び処理P61に移り、スタ
ック3から番号8の命令のアドレスをとり出し第4B図
中の先行命令リストア3から。
番号8の命令を指す部分を除く0判定J66はYESな
ので、これで番号8の命令に対する処理を終了する。こ
の結果、得られる情報テーブルの状態を表したのが第4
C図である。この処理を第2図のすべての命令に対して
実行した結果を模式的にグラフで表わしたのが第5B図
である。この図で、縮約化処理された命令5,6及び8
,10は、それぞれ−命令のように命令56,810と
表わしである。また、矢印で示されるデータ依存関係も
、命令810のところで修正されている。
ここで1円の右下に書かれた数字は次で説明する評価値
を表わしている。
評価値計算部424は、縮約実行命令列検出・縮約化処
理部423の結果をもとにして、各命令1について、該
命令1と直接データ依存関係を持ち、かつ該命令lに後
続する命令2との間のパイプラインの空き時間を計算し
、該計算された各々の値と、該後続する命令2の評価値
との和をとり。
それらの値の最大値を該命令lの評価値とすることによ
り評価値を再帰的に計算する。
但し、後続命令をもたない命令の評価値は、どれも0と
する。第5B図の各日の右下に付した数字が各命令の評
価値である1例えば、命令810は後続命令をもたない
ので評価値は0である。また、命令9は第2図より命令
10と、従って今の場合、命令810との間に1サイク
ルのパイプラインの空き時間があるので、命令810の
評価値Oとの和をとって、評価値は王である。
命令列スケジューリング部425は、評価値計算部42
4の結果をもとにして、第8図で示されたフローチャー
トに従い、縮約実行0J能な命令列の縮約実行性を保持
し、また一方、並列実行可能な命令列を捜しながら、パ
イプラインの空き時間を少なくするようにスケジューリ
ングされた命令列を出力する。ここで、第8図に書かれ
ているグラフGとは、第5B図で表わされた円と矢印か
ら成る有向グラフのことである。このフローチャートに
従って、第2図の命令列を処理している過程を示したの
が第9図である。この図で、2命令が「1」でくくられ
ているのは、それらが縮約実行命令であることを表わし
ている。ここで、例として第2図の命令列を処理して、
一つ目の命令を出力する過棉を第8図、5B図、9図を
使って説明する。まず、第5B図で、先行命令のないの
は、命令lと命令56だから、第8図の処理P81にお
けるSは命令1と命令56からなる集合である。
次の処理F82ではS全体をえらび1次の判定J81は
、出力した命令がないので、Noであり、第3図の情報
テーブルにおける待ち時間(1゛)の欄は最初、0と初
期設定されているので1判定J82はYESである。第
5B図より命令1と命令56の評価値はそれぞれ2とl
であるので、処理P83において、命令1がえらばれる
。この時点の状態を表わしたのが、第9図の命令列出力
回数がlの欄である6次に処、1lP84では何も処理
が行われず、処理P85において、グラフGから命令工
が除かれ、Sは命令56と2と3からなる集合となる1
次の処理P86により、命令56の1゛は−lとなり、
命令2と3の1′については命゛令1からの遅延時間が
Oであることと、′1°の値がOに初期設定されている
ことより、Oとなる。Sは空集合でないので、判定J8
3はNoとなり、以後同様な処理を続ける。この処理の
結果、出力された命令列をまとめたのが第10図である
。第2図に比べて遅延時間が3からOになり、実行時間
と遅延時間の和も12から8へと減少している。
(実施例2) 次に、本発明の第2の実施例を第1図、第2図と、第1
工図から第18図までを参照しながら説1男する0本実
施例は、彫工図中のコード最適化部42を第王1図のコ
ード最適化部43で置きかえたものである0本実施例の
コード最適化部43は。
命令群を直線的に実行できる最大の命令群車位であるブ
ロック内の各命令の付加情報を保持する情報テーブル5
1を生成する情報テーブル生成部110と、現在処理し
ている命令、またはこの命令を含む縮約または並列実行
命令列(以下、高速実行命令列と呼ぶ)と、その次に実
行される命令とが、縮約または並列実行可能(以下、高
速実行可能と呼ぶ)かどうかを判定し、もし可能であれ
ば、そのことを情報テーブル51に書き込む第1高速実
行命令列検出・単命令化処理部111と、現在処理して
いる命令、またはこの命令を含む高速実行命令列が、そ
れ以前に実行された命令または高速実行命令列によって
定義された資源を使用しているため、その実行が遅れて
いる場合、この遅れと遅れの原因となる命令または高速
実行命令列を検出し、この命令または高速実行命令列を
そのまま前方に移動することにより、現在処理している
命令または高速実行命令列の実行時間の遅れを減少させ
、しかも、移動した命令または高速実行命令の1元の位
置の前後の命令または命令列が。
^速実付可能かどうか判定し、もし−r=J能であれば
、そのことを情報テーブル51に書き込む命令列再配置
部112と、現在処理している命令が車命令化されてい
なければ、この現命令より以前に実行される命令群から
高速実行可能な命令または命令列を検出し、現命令をそ
の命令または命令列の直後に移動したときの現命令の実
行時間の遅れが。
現命令の実行時間以下ならば、現命令をその命令または
命令列の直後に移動し、現命令がそれらと高速実行0I
能であることを情報テーブル51に書き込む第2高速実
行命令列検出・単命令化処理部113と、処理を一つ先
の命令に進める命令ポインタ更新部114と、ブロック
内にまだ処理されていない命令があるかどうかを判定し
、まだあれば彫工高速実行命令列検出・単命令化処理部
111に戻り、なければ次の命令列出力部116に進む
残余命令判定部115と、コード最適化の終了した命令
列を出力して、最適化されたオブジェクトコードとする
命令列出力部1.16とから構成されている。
本実施例は、ブロック内の命令列をブロックの先頭から
ブロックの最後に向かって一命令ずつ走査していき、そ
の度ごとに高速実行命令列検出・単命令化処理を行ない
、それら高速実行命令列のA’N m実行性を保持しな
がら命令列をスケジューリングする所に特徴がある。
次に、コード最適化部43の動作を、実施例1で用いた
第2図の命令列を人力とした場合について説明する。
コード最適化部43の最初の処理部である情報テーブル
生成部110は、第2図の命令列を人力とし、それを第
I2図で示された情報テーブル51に入れる。ここで、
オブジェクト・コード以外の欄は、0に初期化されてい
る。高速実行命令フラグの欄は、連続して並べられた命
令列が高速実行可能ならば、それぞれの命令に対して値
1が入れられ、そのうち一番前に並べられた命令は、そ
の最先頭命令フラグの欄に値1が入れられ、−番最後に
並べられた命令は、その最後尾命令フラグの欄に値lが
入れられる。このようにして、これらの欄をみることに
より、他の命令と高速実行可能命令列を容易に区別する
ことができ、また、隣り合う高速実行命令列を区別する
のも容易である。さらにある高速実行命令列の直後に別
の命令を置いて、全体として高速実行可能なとき、元の
高速実行命令列の最後の命令の最後遅命令フラグをlか
らOにし、また、後で付は加えた命令の高速実行命令フ
ラグと最後遅フラグを1にすることにより、この付加さ
れた命令列が高速実行1=J能であることの記述が容易
にできる。以下、簡単のため、高速実行命令フラグ、最
先頭命令フラグ、最後遅命令フラグをそれぞれ、Fl、
F2.F3とかく。
第1高辿実行命令列検出・単命令化処理部は、第12図
の情報テーブルのオブジェクトコードを入力とし、現在
処理している命令がそれ以前の命令または命令列と単命
令化されているかどうかを調べ、もし単命令化されてい
れば、現命令を含む高速実行命令列と、次に実行される
命令とが高速実行1了能かどうか判定し、もしnJ能で
あれば、そのことを情報テーブル51に書き込む、即ち
、現命令はもと、高速実行命令列の最後の命令だったの
で、F3=1であるが、これをF3=0と変え、次に実
行される命令が高速実行命令列の最後の命令なので、F
l=1.F3=1とする。また、現命令がそれ以前の命
令と単命令化されていなければ、現命令と次に実行され
る命令とが高速実行可能かどうか判定し、もし可能であ
れば、そのことを情報テーブル51に書き込む、即ち、
 r+bj命令は高速実行可能で、現命令は先頭にあり
、次命令は最後にあるので、現命令については、ト’1
=l’2=1、次命令については、Fl=F3=1とな
る。
この処理をフローチャートで表わしたのが第13図であ
る。ここでは例として、第2図の番号5の命令を現在処
理している場合を扱う、番号5の命令に対して、第13
図の判定J130はNOとなる。#号5と6の命令は、
高速実行可能なので、判定J132はYESとなり2番
号5の命令に対してFl = )’ 2 ;1、番号6
の命令に対してト′1= 1−’ 3 =↓となる。
命令列再配置部112は、第12図の情報テーブルのオ
ブジェクトコードを人力とし、現在処理している命令ま
たはこの命令を含む高速実行命令列が、それ以前に実行
された命令または高速実行命令列によって定義された資
源を使用しているため、その実行が遅れているかどうか
を判定する。
もし遅れていなければ、この処理を終了し、もし遅れて
いれば、この遅れの原因となる命令または高速実行命令
列を検出し、これら命令または命令列をプログラムの意
味を変えずに移動できる移動uJ能範囲を前方に求め、
これら命令または命令列をその範囲内に移動させたとき
、この範囲以前の命令により、これら命令または命令列
の実行に遅れを生じないような移動可能部分範囲を求め
る。
もしその部分範囲が空集合であれば、この処理を終了し
、もし空集合でなければ、その部分11@囲内にこれら
命令または命令列と高速実行可能な命令または命令列が
あれば、そこへ移動して、高速実行可能であることを情
報テーブルに書き込み、また高速実行可能な命令または
命令列がなければ。
その部分範囲内に、実行に遅延の生じている命令または
命令列があるかどうかを調べ、もしあれば。
そのような命令または命令列のうち、部分範vA内でも
つとも前方にあるものを選び、それの直前にこの命令ま
たは命令列を移動し、もしなければ、部分範囲のもつと
も前方の位置にこの命令または命令列を移動させる。こ
うして現在処理している命令またはこの命令を含む高速
実行命令列の実行の遅れのJIK囚となる命令または命
令列を移動させた場合、移動前のこと命令または命令列
を前後にある命令列が、高速実行可能かどうかを調べ、
もし可能ならば、そのことを情報テーブル51に書き込
む、最後に、現命令と移動した命令または命令列とでは
さまれた命令列の遅延情報を更新する。
以上の処理をフローチャートで表わしたのが第14図で
ある。この図で「命令(列)」とあるのは、「命令はた
は命令列jを表わし、「単命令化処理」とあるのは、前
から順に命令1,2と並べられた命令列に対して、第1
511!!lのフローチャートで表わされた処理を行な
うものである。
第15w1で表わされた単命令化処理では、まず命令1
が単命令化iI能かどうかが判定され1次に命令2が単
命令化可能かどうかが判定される。ともにYESならば
、命令1に対しては高速実行命令列の最後の命令から、
最初でも直後でもない命令になるからF’ 3 = O
とし、命令2に対しては高速実行命令列の最初の命令か
ら、最初でも最後でもない命令になるからF2=Oとな
る。また、最初の判定がYESで、次の判定がNoなら
ば、命令1に対しては、今説明したと同様にF3=Oと
し、命令2に対しては、単命令化されてない命令が、高
速実行命令列の最後の命令になるので、ド1 = F’
 3 = 1とする。また、最初の判定がN。
で1次の判定がYESならば、命令王に対しては、単命
令化されていない命令が、高速実行命令列の最初の命令
になるので、F1=)’2=1とし、命令2に対しては
、高速実行命令の最初の命令から、最初でも最後でもな
い命令になるので、F2 = 0とする。また、二つの
判定ともNoならば、命令1に対しては、今説明したと
同様に1−’ 1 = 1−’ 2 ==1で、命令2
に対しても、単命令化されていない命命が、高速実行命
令の最後の命令になるので。
!−’ 1 = F 3 :工とする。
ここでは例として、第2図番号4の命令を現在処理中の
上記現命令とした場合について、第14図の動作を具体
例にもとづき説明する0番号4の命令の実行は、番号3
の命令により遅らせられるので、第14図の判走J工4
oはYESとなる。
次の処理PL40における命令工とは今の場合、命令3
であり、処理P140により求まる命令3の移動可能範
囲は、レジスタ13の定義・使用関係により、番号1の
命令と番号2の命令の間である。処理P工41により求
まる部分範囲2は、番号3の命令を番号1と2の命令の
間においたとき、番号3の命令は遅延を生じないので、
やはり番号1と2の命令の間である。従って、判定J1
41゜J142.J143はNoとなる0次に処理P1
44により、番号3の命令は1番号1と2の命令の間に
移動させられる0判定J 144は1番号2と4の命令
が高速実行可能でないのでNoとなり、最後に処理)’
146を実行して、命令列再配置部112の処理を終了
する。
第2高速実行命令列検出・軍命令化処理部113は、現
在処理している命令が単命令化されているかどうか判定
し、もし単命令化されているなら、この処理を終了し、
もしそうでなければ、この現命令をこれより前方にある
移動可能範囲内におくとき、現命令と高速実行可能な命
令または命令列があるかどうかを判定する。もしなけれ
ばこの処理を終了し、もしあるならば、現命令をその命
令または命令列の直後においたときに、現命令の実行に
遅延が生じるかどうかを判定し、もし生じるAらば、現
命令の実行時間とその遅延時間を比べて、遅延時間の方
が大きければ、・この処理を終了し、逆に遅延時間の方
が小さいがまたは等しいとき、または遅延が生じないと
きには、現命令をそのd′6速実行可能な命令または命
令の直後におき。
第15図で示された単命令化処理を行なう。
命令ポインタ更新部114は、情報テーブル51におい
て、現在処理されている命令の位置を指しているポイン
タの値を次に実行される命令の位置を指す処理を行なう
残余命令判定部115は、命令ポインタ更新部114で
更新されたポインタの値が、情報テーブルの最後尾を指
しているかどうが調べ、もし指していたら1次の命令列
出力部116へ進み、もし指していなければ、第1高速
実行命令列検出・軍命令化処理部111に戻る。
命令列出力部116は、順序を変更された情報テーブル
51の命令列をオブジェクトコードとして出力する。
第17図は、第2図の命令列を入力としたとき本実施例
のコード最適化部43が処理していく過程を示したもの
である。この図で、点線の矩形は命令列再配置部112
の動作の説明のところで用いた部分範囲2を表わし、記
号r>」は現命令を記号「〉」は現命令の実行に遅延を
生じさせる命令を表わしている。また、矢印は命令が移
動したことを表わし、記号r (Jは、それでくくられ
た2命令が高速実行可能であることを示す、また、命令
の右側にある記号「()」でくくられた数字は、その命
令の実行の遅延時間を表わす、この図で(A)から(B
)への命令順序の変換は、命令列再配置部112のとこ
ろで、また、(B)から(C)への命令列の単命令化は
、第1高速実行命令列検出・軍命令化処理部111で説
明した。
(D)から(E)、(臣)から(ド)への処理も同様に
命令列再配置部112でなされ、(F)の番号8,1o
の命令列の単命令化は、第14図の処理P145により
なされる。
以上のコード最適化部43により、第2図の命令列は処
理されて、第18図のようになる。第2図に比べて遅延
時間が3からOになり、実行時間と遅延時間の和も工2
から8へと減少している。
〔発明の効果〕
本発明は1以上説明したように、命令をパイプライン処
理方式で実行しデータ依存関係のある、特定の複数命令
列が隣接するとき、該命令列を。
該命令列を構成する個々の命令の実行時間の和よりも高
速に実行せしめる縮約実行機構をもつ計算機システムに
対して、その縮約実行性を生かし、かつ命令の遅延を削
減させることができるので、実行効率の高いオブジェク
トプログラムを生成できるという効果がある。
【図面の簡単な説明】
第1図は本発明の一実施例の構成を示すブロック図、第
2図は本実施例及び次の実施例の動作を説明するための
人力の一例、第3図は第2図の命令列に対して生成され
た本実施例の情報テーブル、第4A図は第2図の命令列
中の2命令に対してデータ依な関係を解析した結果得ら
れる情報テーブルの様子、第4B、4C図は第4A図の
2命令が縮約化処理されろ過程を示した図、第5A図は
第2図の命令列に対してデータ依存関係を解析した結果
得られるグラフ、第5B図は第4Alfiに縮約実行命
令列検出・縮約化処理を施こして得られるグラフに#価
値を付したもの、第6図は縮約実行命令列検出・縮約化
処理部のフローチャート、第7図は第4A図の2命令を
縮約化処理している途中におけるスタックの様子を示し
た図、第8図は命令列スケジューリング部のフローチャ
ート、第9図は命令列スケジューリングの処理過程を示
す図、第1(11は本実施例のコード最適化部により第
2r51の命令列が処理された結果得られた命令列を示
した図である。 第11図は第2の実施例のコード最適化部の構成を示す
ブロック図、第12図は第2図の命令列に対して生成さ
れた本実施例の情報テーブル、第I3図は第1高速実行
命令列検出・軍命令化処理部のフローチャート、第14
図は命令列再配置部のフローチャート、第I5図は第1
4図の単命令化処理のフローチャート、第16@は第2
高速実行命令列検出・軍命令化処理部のフローチャート
。 第17図は本実施例のコード最適化部により第2図の命
令列が処理される過程を示した図、第18図はその結果
得られた命令列を示した図である。 50・・・tfI報テーブル、60・・・オブジェクト
コード、42・・・コード最適化部、421・・・情報
テーブル生成部、422・・・依存関係解析部、423
・・・縮約実行命令列検出・縮約化処理部、424・・
・評価値計算部、425・・・命令スケジューリング部
。 名 図 鵠 図 ■ 名 スタ・γり1 スタ・1り2 スタ・ツク3 第 4A 図 名 48 図 第 C ■ b の め ■ め 0 ■ 某 11 の 名 /ス 図 垢 3 閃 第 2イ1 図 第 S 図 系 1b 図 (A) (9) 某 /’7 図 (I3) (C) (I″) (ド)

Claims (1)

  1. 【特許請求の範囲】 1、命令をパイプライン処理方式で実行し、データ依存
    関係のある特定の複数命令列が隣接するとき、該命令列
    を、該命令列を構成する個々の命令の実行時間の和より
    も高速に実行せしめる縮約実行機構をもつ計算機システ
    ムに対して、ソースプログラムからオブジェクトプログ
    ラムを生成するコンパイル方法において、 隣接せしめることにより縮約実行可能な縮約候補命令列
    をみつけ、該命令列を並べかえて隣接せしめる命令列ス
    ケジユーリング処理方法。 2、請求項1記載の命令列スケジユーリング処理方法に
    おいて、 並べかえてもプログラムの意味が変わらないことを判定
    してから並べかえる命令列スケージユーリング処理方法
    。 3、請求項1記載の命令列スケジユーリング処理方法に
    おいて、 処理単位内の全命令について命令間のデータ依存関係を
    調べ、 それに基づいて縮約候補命令列をみつける命令列スケジ
    ユーリング処理方法。 4、請求項3記載の命令列スケジューリング処理方法に
    おいて、 該縮約候補命令列をグループ化して一命令の如く扱うこ
    とを可能にし、 それにともなつて、命命間のデータ依存関係を修正し、 該修正されたデータ依存関係に基づいて順次、命令を取
    り出し並べることにより縮約候補命令へ列を隣接せしめ
    る命令列スケジユーリング処理方法。 5、請求項4記載の命令列スケジユーリング処理方法に
    おいて、 グループ化してデータ依存関係を修正することにより、
    データ依存関係に矛盾の起こらないことを判定して行う
    命令スケジユーリング処理方法。 6、請求項2記載の命令列スケジユーリング処理方法に
    おいて、 並べかえ隣接せしめることによるプログラムの実行時間
    の減少量が、ある資源を定義する命令の直後に該資源を
    使用する命令がきたときに生ずる後続命令の実行開始時
    刻の遅れによるパイプラインの空き時間の増加量を上ま
    わることを判定して並べかえる命令列スケジユーリング
    処理方法。 7、請求項2記載の命令列スケジユーリング処理方法に
    おいて、 請求項6記載のパイプラインの空き時間の増加量が最小
    になる位置に並べかえ隣接せしめる命令列スケジユーリ
    ング処理方法。 8、請求項2記載の命令列スケジユーリング処理方法に
    おいて、 隣接させた命令列をグループ化して一命令の如く扱うこ
    とを可能にし、プログラムにパイプラインの空きが生じ
    ている場合に、該パイプラインの空き時間を最小にする
    ように、該パイプラインの空きの原因となる命令をプロ
    グラムの意味を変えない範囲で繰上げまたは繰下げる命
    令列スケジユーリング処理方法。 9、請求項8記載の命令列スケジユーリング処理方法に
    おいて、 特にプログラムを1パスで走査しながら行う命令列スケ
    ジユーリング処理方法。 10、請求項8記載の命令列スケジユーリング処理方法
    において、 並べかえることによる実行時間の減少分がパイプライン
    の空き時間の増加量に等しい時も並べかえる命令列スケ
    ジユーリング処理方法。 11、請求項1記載の命令列スケジユーリング処理方法
    において、 さらに該計算機システムが、データ依存関係のない特定
    の複数命令列が隣接するとき、該命令列を、該命令列を
    構成する個々の命令の実行時間の和よりも高速に実行せ
    しめる並列実行機構を持つとき、 隣接せしめることにより並列実行可能な並列候補命令列
    もみつけ、 該命令列も並べかえて隣接せしめる命令列スケジユーリ
    ング処理方法。 12、請求項11記載の命令処スケジユーリング処理方
    法において、 並べかえてもプログラムの意味が変わらないことを判定
    して並べかえ隣接せしめる命令列スケジューリング処理
    方法。 13、請求項12記載の命令列スケジユーリング処理方
    法において、 該隣接させた命令列をグループ化して一命令の如く扱う
    ことを可能にし、 プログラムに請求項6記載のパイプラインの空きが生じ
    ている場合に、該パイプラインの空き時間を最小にする
    ように、パイプラインの空きの原因となる命令をプログ
    ラムの意味を変えない範囲で繰上げまたは繰下げる命令
    列スケジユーリング処理方法。 14、請求項5記載の命令列スケジユーリング処理方法
    において、 さらに、該計算機システムが請求項11記載の並列実行
    機構をもつとき、 該修正されたデータ依存関係情報に基づく命令の実行順
    序関係を守り、 直前に取り出された命令または命令列と並列実行が可能
    な命令を優先して取り出し並べる命令列スケジユーリン
    グ処理方法。 15、請求項5記載の命令列スケジユーリング処理方法
    において、 各命令1と直接データ依存関係を持ち、かつ該命令1に
    後続する命令2との間のパイプラインの空き時間を計算
    し、該計算された各々の値と該後続する命令2の評価値
    との和を取り、それらの値の最大値を該命令1の評価値
    とすることにより評価値を再帰的に計算し、該評価値の
    大きいものより順に取り出し並べる命令列スケジユーリ
    ング処理方法。 16、請求項14記載の命令列スケジユーリング処理方
    法において、 並列実行可能な命令を請求項15記載の評価値に優先し
    て取り出し並べる命令列スケジユーリング処理方法。 17、請求項14記載の命令列スケジユーリング処理方
    法において、 既に取り出し並べられた命令列による実行開始時刻の遅
    れの小さな命令を、直前に取り出し並べられた命令と並
    列実行可能な命令に優先して取り出し並べる命令列スケ
    ジユーリング処理方法。
JP22736389A 1989-09-04 1989-09-04 命令列スケジューリング処理方法 Pending JPH0391035A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP22736389A JPH0391035A (ja) 1989-09-04 1989-09-04 命令列スケジューリング処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP22736389A JPH0391035A (ja) 1989-09-04 1989-09-04 命令列スケジューリング処理方法

Publications (1)

Publication Number Publication Date
JPH0391035A true JPH0391035A (ja) 1991-04-16

Family

ID=16859628

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22736389A Pending JPH0391035A (ja) 1989-09-04 1989-09-04 命令列スケジューリング処理方法

Country Status (1)

Country Link
JP (1) JPH0391035A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06208462A (ja) * 1991-02-27 1994-07-26 Sun Microsyst Inc パイプラインプロセッサ用のコストを基にしてヒューリスティックに命令をスケージューリングする方法および装置
JP2014531680A (ja) * 2011-10-03 2014-11-27 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation デコード時間命令最適化を用いた、強化されたアプリケーション・バイナリ・インターフェース(abi)のためのコードのコンパイル

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06208462A (ja) * 1991-02-27 1994-07-26 Sun Microsyst Inc パイプラインプロセッサ用のコストを基にしてヒューリスティックに命令をスケージューリングする方法および装置
JP2014531680A (ja) * 2011-10-03 2014-11-27 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation デコード時間命令最適化を用いた、強化されたアプリケーション・バイナリ・インターフェース(abi)のためのコードのコンパイル

Similar Documents

Publication Publication Date Title
Rosen et al. Global value numbers and redundant computations
JP3280449B2 (ja) コンパイル装置
JP2004302706A (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
JP2500079B2 (ja) プログラムの最適化方法及びコンパイラ・システム
JP2006338616A (ja) コンパイラ装置
EP1977316A1 (en) A system and method for parallel execution of a program
JPH0721034A (ja) 文字列複写処理方法
US6564372B1 (en) Critical path optimization-unzipping
US7661100B2 (en) Method and system for determining total code execution time in a data processor
JPH0391035A (ja) 命令列スケジューリング処理方法
JP3318051B2 (ja) 翻訳処理方法
RU2206119C2 (ru) Способ получения объектного кода
JPH04293150A (ja) コンパイル方法
Allan et al. Petri net versus module scheduling for software pipelining
Vishkin A no-busy-wait balanced tree parallel algorithmic paradigm
JPS62217325A (ja) アセンブラコ−ド最適化方式
EP0481617A2 (en) Instruction scheduler for a computer
JPH04252336A (ja) プログラム最適化処理装置
JPH06295246A (ja) 命令スケジューリング方式
JPS63138427A (ja) 配列に対する命令のスケジユ−リング処理方式
JP3057904B2 (ja) ベクトル化方式
Prabhu et al. Global mobility based scheduling
JP3921722B2 (ja) コンパイラ処理装置
JPH0713962A (ja) コンパイラ装置
JPS5846439A (ja) 計算機のプログラム編集方法