JP2629474B2 - 並列パイプライン命令処理装置の命令実行処理方式 - Google Patents
並列パイプライン命令処理装置の命令実行処理方式Info
- Publication number
- JP2629474B2 JP2629474B2 JP6820391A JP6820391A JP2629474B2 JP 2629474 B2 JP2629474 B2 JP 2629474B2 JP 6820391 A JP6820391 A JP 6820391A JP 6820391 A JP6820391 A JP 6820391A JP 2629474 B2 JP2629474 B2 JP 2629474B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- block
- branch
- instructions
- basic
- 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
Links
Landscapes
- Advance Control (AREA)
Description
【0001】
【産業上の利用分野】本発明は情報処理装置に関し、特
に複数命令を並列して実行する並列命令処理装置の分岐
命令実行時の命令実行選択処理方式に関する。
に複数命令を並列して実行する並列命令処理装置の分岐
命令実行時の命令実行選択処理方式に関する。
【0002】
【従来の技術】従来、計算機システムの高性能化を図る
方法として、命令パイプライン処理およびVLIW(V
ery Long Instruction Wor
d)型並列命令処理の二つの処理方式を組み合わせた並
列パイプライン命令処理方式がある。この処理方式を説
明するために、命令パイプライン処理と、VLIW型並
列命令処理について説明する。
方法として、命令パイプライン処理およびVLIW(V
ery Long Instruction Wor
d)型並列命令処理の二つの処理方式を組み合わせた並
列パイプライン命令処理方式がある。この処理方式を説
明するために、命令パイプライン処理と、VLIW型並
列命令処理について説明する。
【0003】命令パイプライン処理とは、命令の実行を
複数のステージに分割し、各々のステージを担当する個
別のハードウェア・ユニットを設け、命令実行の各ステ
ージがオーバーラップして実行される処理である。各ス
テージの実行時間が同一で、それがマシンサイクルに等
しい場合、1マシン・サイクル毎に演算結果を得ること
ができる。従って、命令パイプライン処理においては、
命令やデータが定常的に供給され、各ステージで遊び時
間が生じないような場合に最大性能が発揮される。
複数のステージに分割し、各々のステージを担当する個
別のハードウェア・ユニットを設け、命令実行の各ステ
ージがオーバーラップして実行される処理である。各ス
テージの実行時間が同一で、それがマシンサイクルに等
しい場合、1マシン・サイクル毎に演算結果を得ること
ができる。従って、命令パイプライン処理においては、
命令やデータが定常的に供給され、各ステージで遊び時
間が生じないような場合に最大性能が発揮される。
【0004】この命令パイプライン処理を乱す要因の一
つとして、条件分岐命令の実行がある。条件分岐命令の
分岐条件が成立するか否かはパイプラインの後の方にな
らないとわからない。もし、分岐条件が成立した場合に
は、すでに命令パイプラインに取込まれている命令を無
効果し、分岐先命令の取り込みからやり直さなければな
らない。このように、分岐条件が成立し、分岐が実行さ
れた場合には命令パイプライン処理に遅延が生じ(分岐
遅延)、全体の処理性能が低下してしまう。
つとして、条件分岐命令の実行がある。条件分岐命令の
分岐条件が成立するか否かはパイプラインの後の方にな
らないとわからない。もし、分岐条件が成立した場合に
は、すでに命令パイプラインに取込まれている命令を無
効果し、分岐先命令の取り込みからやり直さなければな
らない。このように、分岐条件が成立し、分岐が実行さ
れた場合には命令パイプライン処理に遅延が生じ(分岐
遅延)、全体の処理性能が低下してしまう。
【0005】一方、VLIW型並列命令処理とは、複数
の命令フィールドからなる比較的長い命令(以下命令ブ
ロックという)をひとつの命令として処理するもので、
各々の命令フィールドが多数の演算器,レジスタ,相互
結合網,メモリなどを独立に制御できる処理である。こ
のVLIW型命令処理方式では、コンパイル時にソース
・プログラムから並列演算可能なものを抽出して、ひと
つの命令ブロックに合成するため、並列演算器の数に近
い命令並列度が得られる場合に高速処理が達成できる。
しかし、命令並列度が低い場合には、命令フィールドに
空きが生じ、処理性能は低下する。
の命令フィールドからなる比較的長い命令(以下命令ブ
ロックという)をひとつの命令として処理するもので、
各々の命令フィールドが多数の演算器,レジスタ,相互
結合網,メモリなどを独立に制御できる処理である。こ
のVLIW型命令処理方式では、コンパイル時にソース
・プログラムから並列演算可能なものを抽出して、ひと
つの命令ブロックに合成するため、並列演算器の数に近
い命令並列度が得られる場合に高速処理が達成できる。
しかし、命令並列度が低い場合には、命令フィールドに
空きが生じ、処理性能は低下する。
【0006】以上に説明したVLIW型並列命令処理
と、命令パイプライン処理の両方を組み合わせた命令処
理方式が並列パイプライン命令処理方式である。
と、命令パイプライン処理の両方を組み合わせた命令処
理方式が並列パイプライン命令処理方式である。
【0007】この並列パイプライン命令処理方式では、
命令フォーマットの中に分岐命令専用のフィールドを設
け、分岐命令処理ユニットを他の命令処理ユニットから
分離することにより、分岐系命令の処理を高速化してい
る。そして、分岐命令と他の命令とを並列処理するわけ
である。
命令フォーマットの中に分岐命令専用のフィールドを設
け、分岐命令処理ユニットを他の命令処理ユニットから
分離することにより、分岐系命令の処理を高速化してい
る。そして、分岐命令と他の命令とを並列処理するわけ
である。
【0008】従来までに演算系命令とロード・ストア命
令の並列処理が実現されていたことから、実際には、 ・演算系命令の処理ユニット ・ロード・ストア命令の処理ユニット ・分岐系命令の処理ユニット の3つのユニットを並列処理することが可能な処理方式
となっている。
令の並列処理が実現されていたことから、実際には、 ・演算系命令の処理ユニット ・ロード・ストア命令の処理ユニット ・分岐系命令の処理ユニット の3つのユニットを並列処理することが可能な処理方式
となっている。
【0009】分岐命令処理専用ユニットを追加すること
により、条件分岐命令が高速に実行され、条件分岐が発
生した場合にも分岐による遅延は発生せず、命令パイプ
ライン処理の流れを乱すことはない。また、独立した命
令処理ユニットを並列に制御するために、命令フォーマ
ットとしては、各命令ユニットを制御する複数の命令フ
ィールドからなるVLIW型命令が採用されている。
により、条件分岐命令が高速に実行され、条件分岐が発
生した場合にも分岐による遅延は発生せず、命令パイプ
ライン処理の流れを乱すことはない。また、独立した命
令処理ユニットを並列に制御するために、命令フォーマ
ットとしては、各命令ユニットを制御する複数の命令フ
ィールドからなるVLIW型命令が採用されている。
【0010】さて、この並列パイプライン命令処理方式
を持つ並列命令処理装置の性能は、ひとつの命令ブロッ
クの中にどれだけ多くの命令機能を埋め込めるかによっ
て左右される。プログラムの最適化手法には、局所的最
適化と広域的最適化の二つの方法があるが、いま、基本
的演算操作の系列で、その出口を除いて分岐操作がな
く、かつその入り口を除いて外から分岐されることのな
い系列(以下基本ブロックという)に注目すると、局所
的最適化はその各基本ブロック内でデータの依存関係を
調べ、並列実行可能な基本演算操作を検出して、VLI
W型命令として合成する最適化であり、広域的最適化は
基本ブロック間で基本的演算操作の移動を伴った最適化
である。しかし、並列パイプライン命令処理方式の並列
命令処理装置では、条件分岐命令が非常に多く、基本ブ
ロック長が短いためにこれらの最適化により大きな効果
が得られない。
を持つ並列命令処理装置の性能は、ひとつの命令ブロッ
クの中にどれだけ多くの命令機能を埋め込めるかによっ
て左右される。プログラムの最適化手法には、局所的最
適化と広域的最適化の二つの方法があるが、いま、基本
的演算操作の系列で、その出口を除いて分岐操作がな
く、かつその入り口を除いて外から分岐されることのな
い系列(以下基本ブロックという)に注目すると、局所
的最適化はその各基本ブロック内でデータの依存関係を
調べ、並列実行可能な基本演算操作を検出して、VLI
W型命令として合成する最適化であり、広域的最適化は
基本ブロック間で基本的演算操作の移動を伴った最適化
である。しかし、並列パイプライン命令処理方式の並列
命令処理装置では、条件分岐命令が非常に多く、基本ブ
ロック長が短いためにこれらの最適化により大きな効果
が得られない。
【0011】従来、この並列パイプライン命令処理方式
を持つ並列命令処理装置では、条件分岐に非常に偏りの
ある場合(化学技術計算等の応用)に特に有効なトレー
ス・スケジューリング法と呼ばれる最適化方式が用いら
れている。
を持つ並列命令処理装置では、条件分岐に非常に偏りの
ある場合(化学技術計算等の応用)に特に有効なトレー
ス・スケジューリング法と呼ばれる最適化方式が用いら
れている。
【0012】図21および図22はトレース・スケジュ
ーリング法の概要を示す模式図である。
ーリング法の概要を示す模式図である。
【0013】図21(a)〜(d)の四角で囲った部分
が基本ブロックであり、この中に基本演算命令が並んで
いる。図21(a)はあるプログラムのフロー構造を示
しており、この場合の最適化手順は次に示すようにな
る。
が基本ブロックであり、この中に基本演算命令が並んで
いる。図21(a)はあるプログラムのフロー構造を示
しており、この場合の最適化手順は次に示すようにな
る。
【0014】ステップ1:図21(a)のフローグラフ
をサンプル・プログラムの実行などのデータにより解析
し、高い確率で実行されるパス(以後トレースという)
を見つける。ここでは、図21(b)の斜線部で示すパ
スをトレースとする。
をサンプル・プログラムの実行などのデータにより解析
し、高い確率で実行されるパス(以後トレースという)
を見つける。ここでは、図21(b)の斜線部で示すパ
スをトレースとする。
【0015】ステップ2:ステップ1で見つけたトレー
ス内でのデータ依存関係に注目して、並列実行可能な演
算操作を検出して、逐次VLIW型命令として合成して
トレース内最適化を行う(図21(c))。この過程で
トレース内に存在する基本演算命令操作を移動する。
ス内でのデータ依存関係に注目して、並列実行可能な演
算操作を検出して、逐次VLIW型命令として合成して
トレース内最適化を行う(図21(c))。この過程で
トレース内に存在する基本演算命令操作を移動する。
【0016】ステップ3:トレース内での基本演算命令
の移動に伴って、図21(d)に示すようにトレース外
のコードの修正を行う。図中、Rで示したブロックは合
流点で付加されたブロック、Sで示したブロックは分岐
点で付加されたブロックである。
の移動に伴って、図21(d)に示すようにトレース外
のコードの修正を行う。図中、Rで示したブロックは合
流点で付加されたブロック、Sで示したブロックは分岐
点で付加されたブロックである。
【0017】ステップ4:ステップ3で修正したトレー
ス外のコードに対して、上記のステップを繰り返す。
ス外のコードに対して、上記のステップを繰り返す。
【0018】ここでステップ3のトレース外のコード修
正について説明する。
正について説明する。
【0019】図22(a)は合流点の処理を示す。ステ
ップ2のトレース上のコード移動により、m11,m12,
m13,m31,m32,m33,m34(図22(a)のx1 )
がm11,m12,m32,m33,m13,m31,m34(図22
(a)のx2 )となったとする。この時、新合流点m 31
は下流に「旧合流点の上流にあるトレース上の演算操
作」がない点に定め、この図では系列Aは新合流点m31
で合流する。しかし、旧合流点m 31の下流にあった処理
m32,m33が新合流点の上流に移動しているので、この
ままでは系列Aからのパスで処理m32,m33が実行され
ないことになる。そこで、系列Aに処理m32,m33(x
3 )を追加している。
ップ2のトレース上のコード移動により、m11,m12,
m13,m31,m32,m33,m34(図22(a)のx1 )
がm11,m12,m32,m33,m13,m31,m34(図22
(a)のx2 )となったとする。この時、新合流点m 31
は下流に「旧合流点の上流にあるトレース上の演算操
作」がない点に定め、この図では系列Aは新合流点m31
で合流する。しかし、旧合流点m 31の下流にあった処理
m32,m33が新合流点の上流に移動しているので、この
ままでは系列Aからのパスで処理m32,m33が実行され
ないことになる。そこで、系列Aに処理m32,m33(x
3 )を追加している。
【0020】一方、分岐点では図22(b)のような処
理になる。ステップ2のトレース上のコード移動によ
り、m11,m12,m13,m14,m21,m22,m23(図2
2(b)x4 )がm11,m13,m14,m12,m21,
m22,m23(図22(b)x5 )になったとする。新分
岐点m14と変わらないが、この分岐点m 14の上流にあっ
た処理m12が新分岐点m 14の下流に移動しているので、
このままでは系列Bのパスでm12が実行されないことに
なる。そこで、系列Bに処理m12(x6 )を付加してい
る。
理になる。ステップ2のトレース上のコード移動によ
り、m11,m12,m13,m14,m21,m22,m23(図2
2(b)x4 )がm11,m13,m14,m12,m21,
m22,m23(図22(b)x5 )になったとする。新分
岐点m14と変わらないが、この分岐点m 14の上流にあっ
た処理m12が新分岐点m 14の下流に移動しているので、
このままでは系列Bのパスでm12が実行されないことに
なる。そこで、系列Bに処理m12(x6 )を付加してい
る。
【0021】
【発明が解決しようとする課題】上述した並列パイプラ
イン処理方式においては、条件分岐命令を含む命令ブロ
ックの分岐命令以外の命令は、分岐条件が成立しても成
立しなくても実行される。そのため条件分岐命令を含む
命令ブロックの分岐命令以外の命令としては、分岐条件
の成立・不成立に関わらず実行可能な命令を抽出して埋
め込む必要がある。
イン処理方式においては、条件分岐命令を含む命令ブロ
ックの分岐命令以外の命令は、分岐条件が成立しても成
立しなくても実行される。そのため条件分岐命令を含む
命令ブロックの分岐命令以外の命令としては、分岐条件
の成立・不成立に関わらず実行可能な命令を抽出して埋
め込む必要がある。
【0022】例えば、命令パイプライン方式の命令処理
装置を4つ並列に並べ、4つのフィールドを持つVLI
W型の命令を実行する並列パイプライン命令処理装置を
考えてみる。この並列パイプラインのステージの1つは
分岐命令だけを実行する分岐命令専用ステージとなって
おり、条件分岐による遅延の生じない並列パイプライン
命令処理装置である。
装置を4つ並列に並べ、4つのフィールドを持つVLI
W型の命令を実行する並列パイプライン命令処理装置を
考えてみる。この並列パイプラインのステージの1つは
分岐命令だけを実行する分岐命令専用ステージとなって
おり、条件分岐による遅延の生じない並列パイプライン
命令処理装置である。
【0023】この場合、条件分岐命令を含む命令ブロッ
クの条件分岐命令以外の命令フィールドは3つあり、そ
の3つのフィールドには、分岐条件の成立の如何に関わ
らず実行可能な命令を埋め込む必要がある。しかし、実
行可能な命令が埋め込めなかった場合には、最高3つの
空きフィールドができてしまう。
クの条件分岐命令以外の命令フィールドは3つあり、そ
の3つのフィールドには、分岐条件の成立の如何に関わ
らず実行可能な命令を埋め込む必要がある。しかし、実
行可能な命令が埋め込めなかった場合には、最高3つの
空きフィールドができてしまう。
【0024】並列でない命令パイプラインにおける遅延
分岐機構において、分岐命令直後の命令スロットに有効
な1命令を埋め込むことですら、現在の最新コンパイラ
技術を用いた場合でも、約80〜90パーセントの率と
なっている。このことを考えると、並列パイプライン処
理装置における条件分岐命令を含む命令ブロックの3つ
の命令フィールドに実行可能な命令を埋め込んで活用す
る命令スケジューリングはきわめて難しく、ほとんどの
部分にNOP命令を埋め込まなければならなくなる。
分岐機構において、分岐命令直後の命令スロットに有効
な1命令を埋め込むことですら、現在の最新コンパイラ
技術を用いた場合でも、約80〜90パーセントの率と
なっている。このことを考えると、並列パイプライン処
理装置における条件分岐命令を含む命令ブロックの3つ
の命令フィールドに実行可能な命令を埋め込んで活用す
る命令スケジューリングはきわめて難しく、ほとんどの
部分にNOP命令を埋め込まなければならなくなる。
【0025】従って、分岐による遅延の生じない並列パ
イプライン命令処理装置においても、条件分岐命令を含
む命令ブロックに空き命令フィールドが増え、条件分岐
命令を含む命令ブロックの実行時にその処理性能が著し
く低下するという問題点がある。
イプライン命令処理装置においても、条件分岐命令を含
む命令ブロックに空き命令フィールドが増え、条件分岐
命令を含む命令ブロックの実行時にその処理性能が著し
く低下するという問題点がある。
【0026】また、上述のようにトレース・スケジュー
リング法は、長いトレース上の基本的演算操作を対象と
して最適化がなされる。従って、効果は大きいが、その
反面ブロックの複写が頻繁に発生するため生成されるプ
ログラムのコードサイズが非常に大きくなってしまうと
いう欠点がある。また、合成されるVLIW命令の条件
分岐命令を含む命令ブロックのその他複数の命令フィー
ルドは、分岐条件の成立の如何に関わらずに実行可能な
命令を埋め込まなければならない。
リング法は、長いトレース上の基本的演算操作を対象と
して最適化がなされる。従って、効果は大きいが、その
反面ブロックの複写が頻繁に発生するため生成されるプ
ログラムのコードサイズが非常に大きくなってしまうと
いう欠点がある。また、合成されるVLIW命令の条件
分岐命令を含む命令ブロックのその他複数の命令フィー
ルドは、分岐条件の成立の如何に関わらずに実行可能な
命令を埋め込まなければならない。
【0027】しかし、並列でない命令パイプラインにお
ける遅延分岐機構において、分岐命令直後の命令スロッ
トに有効な1命令を埋め込むことでさえ、現在の最新コ
ンパイラ技術では約80%〜90%の率である。従っ
て、この分岐命令以外の複数のフィールドに命令を埋め
込んで活用するような命令スケジューリングは非常に難
しく、ほとんどのフィールドのNOP命令を埋め込むこ
とになり、条件分岐命令を含む命令ブロックに空き命令
フィールドが増え、条件分岐命令を含む命令ブロックの
実行時にその処理性能が著しく低下するという問題点が
発生する。
ける遅延分岐機構において、分岐命令直後の命令スロッ
トに有効な1命令を埋め込むことでさえ、現在の最新コ
ンパイラ技術では約80%〜90%の率である。従っ
て、この分岐命令以外の複数のフィールドに命令を埋め
込んで活用するような命令スケジューリングは非常に難
しく、ほとんどのフィールドのNOP命令を埋め込むこ
とになり、条件分岐命令を含む命令ブロックに空き命令
フィールドが増え、条件分岐命令を含む命令ブロックの
実行時にその処理性能が著しく低下するという問題点が
発生する。
【0028】本発明の目的は、条件分岐命令を含む命令
ブロックの条件分岐以外の命令に、分岐条件の成立・不
成立に応じて命令実行を選択することが可能な命令実行
選択機能を設けることにより、条件分岐命令を含む命令
ブロックにおける命令フィールドの空きフィールド増加
を防ぎ、処理性能を向上させた並列パイプライン命令処
理装置の命令処理方式を提供することにある。
ブロックの条件分岐以外の命令に、分岐条件の成立・不
成立に応じて命令実行を選択することが可能な命令実行
選択機能を設けることにより、条件分岐命令を含む命令
ブロックにおける命令フィールドの空きフィールド増加
を防ぎ、処理性能を向上させた並列パイプライン命令処
理装置の命令処理方式を提供することにある。
【0029】本発明の他の目的は、実行選択処理を用い
た有効なコードを生成できるため、ループの実行処理時
間が短縮され、処理性能を向上させた並列パイプライン
命令処理装置の命令処理方式を提供することにある。
た有効なコードを生成できるため、ループの実行処理時
間が短縮され、処理性能を向上させた並列パイプライン
命令処理装置の命令処理方式を提供することにある。
【0030】
【課題を解決するための手段】本発明の構成は、複数の
命令実行ユニットを備えて複数命令を並列して実行する
ことにより、分岐遅延を生じないようにした並列パイプ
ライン命令処理装置の命令実行処理方式において、この
命令処理装置の処理単位となる命令で並列実行される複
数の命令フィールドで構成される一つの命令ブロックの
分岐命令フィールドに条件分岐命令がある場合、その命
令ブロックの条件分岐命令以外の各命令について、条件
分岐時に命令を実行するか否かを選択する命令実行選択
手段を設けることにより、前記条件分岐命令を含む命令
ブロックの空き命令フィールドを少くしたことを特徴と
する。
命令実行ユニットを備えて複数命令を並列して実行する
ことにより、分岐遅延を生じないようにした並列パイプ
ライン命令処理装置の命令実行処理方式において、この
命令処理装置の処理単位となる命令で並列実行される複
数の命令フィールドで構成される一つの命令ブロックの
分岐命令フィールドに条件分岐命令がある場合、その命
令ブロックの条件分岐命令以外の各命令について、条件
分岐時に命令を実行するか否かを選択する命令実行選択
手段を設けることにより、前記条件分岐命令を含む命令
ブロックの空き命令フィールドを少くしたことを特徴と
する。
【0031】本発明において、複数の基本ブロックの連
結により構成されるループの有無を検出するループ検出
手段と、前記ループの先頭に位置する基本ブロックであ
るヘッダ・ブロックを構成する命令の中で、そのループ
の終端に位置する基本ブロックであるテイラ・ブロック
の空き命令フィールドに移動することのできる命令を検
出する命令検出手段と、前記ヘッタ・ブロックを構成す
る1個以上の命令ブロックに相当する命令を前記テイラ
・ブロックに移動可能な場合に移動する移動手段と、こ
の移動した命令を複写して新たな命令ブロックを生成す
る命令生成手段と、この命令生成手段により新たに生成
された命令ブロック群からなる基本ブロックを前記ルー
プの前記ヘッダ・ブロックの直前に挿入してプログラム
フローを再構築する再構築手段とを備え、前記ループ内
の命令ブロック総数を少なくしてコード最適化を行なう
ようにすることができる。
結により構成されるループの有無を検出するループ検出
手段と、前記ループの先頭に位置する基本ブロックであ
るヘッダ・ブロックを構成する命令の中で、そのループ
の終端に位置する基本ブロックであるテイラ・ブロック
の空き命令フィールドに移動することのできる命令を検
出する命令検出手段と、前記ヘッタ・ブロックを構成す
る1個以上の命令ブロックに相当する命令を前記テイラ
・ブロックに移動可能な場合に移動する移動手段と、こ
の移動した命令を複写して新たな命令ブロックを生成す
る命令生成手段と、この命令生成手段により新たに生成
された命令ブロック群からなる基本ブロックを前記ルー
プの前記ヘッダ・ブロックの直前に挿入してプログラム
フローを再構築する再構築手段とを備え、前記ループ内
の命令ブロック総数を少なくしてコード最適化を行なう
ようにすることができる。
【0032】
【実施例】図1は本発明の一実施例の並列パイプライン
命令処理装置の命令ブロックが実行される場合のブロッ
ク図である。
命令処理装置の命令ブロックが実行される場合のブロッ
ク図である。
【0033】命令列フェッチ手段2は、アドレス・バス
32で指定される命令ブロックを、命令ブロック・メモ
リ1から命令ブロック・バス31を介してフェッチす
る。図2に示した命令(1),命令(2),命令
(3)、および分岐命令の各命令は、命令バス33〜3
6を介して、それぞれ命令実行ユニット3〜5、および
分岐命令実行ユニット6に転送される。各命令実行ユニ
ット3〜5は、転送された各命令をデコードし、各命令
で使用するオペランドを各々レジスタ・リード・バス3
7〜40を介してデータ・レジスタ7からフェッチす
る。そして、各命令をそれぞれ実行し、その命令実行結
果をレジスタ・ライト・バス49〜52を介してそれぞ
れデータ・レジスタ7に書き戻す。
32で指定される命令ブロックを、命令ブロック・メモ
リ1から命令ブロック・バス31を介してフェッチす
る。図2に示した命令(1),命令(2),命令
(3)、および分岐命令の各命令は、命令バス33〜3
6を介して、それぞれ命令実行ユニット3〜5、および
分岐命令実行ユニット6に転送される。各命令実行ユニ
ット3〜5は、転送された各命令をデコードし、各命令
で使用するオペランドを各々レジスタ・リード・バス3
7〜40を介してデータ・レジスタ7からフェッチす
る。そして、各命令をそれぞれ実行し、その命令実行結
果をレジスタ・ライト・バス49〜52を介してそれぞ
れデータ・レジスタ7に書き戻す。
【0034】一方、分岐命令実行ユニット6は、転送さ
れた分岐命令をデコードし、分岐先アドレスの生成を実
行する。それと同時に、内部に保持している命令ブロッ
ク・アドレスをインクリメントし、次アドレスを生成す
る。そして、レジスタ・リード・バス40を介して与え
られたオペランドを参照して分岐条件の成立/不成立を
判定し、分岐が発生する場合には分岐先アドレスを、分
岐が発生しない場合には次アドレスをアドレス・バス3
2に出力する。
れた分岐命令をデコードし、分岐先アドレスの生成を実
行する。それと同時に、内部に保持している命令ブロッ
ク・アドレスをインクリメントし、次アドレスを生成す
る。そして、レジスタ・リード・バス40を介して与え
られたオペランドを参照して分岐条件の成立/不成立を
判定し、分岐が発生する場合には分岐先アドレスを、分
岐が発生しない場合には次アドレスをアドレス・バス3
2に出力する。
【0035】また、分岐命令が同時に次アドレスをレジ
スタへ格納する動作を伴うもの、すなわちブランチ・ア
ンド・リンク命令の場合には、分岐先アドレスがアドレ
ス・バス32に出力されるとともに、次アドレスがレジ
スタ・ライト・バス52を介してデータ・レジスタ7に
書き戻される。この並列パイプライン命令処理装置の第
4の命令実行ユニットは分岐命令専用であり、条件分岐
による遅延を生ずることなく次アドレス、または分岐先
アドレスをアドレス・バスに出力することが可能であ
る。
スタへ格納する動作を伴うもの、すなわちブランチ・ア
ンド・リンク命令の場合には、分岐先アドレスがアドレ
ス・バス32に出力されるとともに、次アドレスがレジ
スタ・ライト・バス52を介してデータ・レジスタ7に
書き戻される。この並列パイプライン命令処理装置の第
4の命令実行ユニットは分岐命令専用であり、条件分岐
による遅延を生ずることなく次アドレス、または分岐先
アドレスをアドレス・バスに出力することが可能であ
る。
【0036】さて、以上説明した分岐遅延の生じない並
列パイプライン命令処理装置における条件分岐命令と実
行選択機能付き命令を含むプログラム・シーケンスの流
れについて説明する。
列パイプライン命令処理装置における条件分岐命令と実
行選択機能付き命令を含むプログラム・シーケンスの流
れについて説明する。
【0037】この並列パイプライン命令処理装置におけ
る命令は、図2に示すように、4つの命令からなる命令
ブロックである。各命令ブロックに埋め込まれる4つの
命令フィールドを、MSB側からフィールド1,フィー
ルド2,フィールド3,フィールド4とよび、フィール
ド4が分岐命令フィールドとなる。
る命令は、図2に示すように、4つの命令からなる命令
ブロックである。各命令ブロックに埋め込まれる4つの
命令フィールドを、MSB側からフィールド1,フィー
ルド2,フィールド3,フィールド4とよび、フィール
ド4が分岐命令フィールドとなる。
【0038】この場合のプログラム・シーケンスは、図
3に示すように、命令ブロック1には分岐命令がなく、
命令フィールド4にはNOP命令が埋め込まれている。
従って、この命令ブロック1はそのまま実行される。命
令ブロック2には、命令フィールド4に条件分岐命令が
埋め込まれている。このとき分岐条件が成立すれば、プ
ログラムのシーケンスは命令ブロックAに移る。分岐条
件が成立しなければ、シーケンスはそのまま次の命令ブ
ロック3に移る。従って、命令4〜6は通常であれば分
岐命令成立時にも、分岐命令不成立時にも実行される。
3に示すように、命令ブロック1には分岐命令がなく、
命令フィールド4にはNOP命令が埋め込まれている。
従って、この命令ブロック1はそのまま実行される。命
令ブロック2には、命令フィールド4に条件分岐命令が
埋め込まれている。このとき分岐条件が成立すれば、プ
ログラムのシーケンスは命令ブロックAに移る。分岐条
件が成立しなければ、シーケンスはそのまま次の命令ブ
ロック3に移る。従って、命令4〜6は通常であれば分
岐命令成立時にも、分岐命令不成立時にも実行される。
【0039】いま、図3の命令ブロック2が、図4に示
すような、命令ブロックであったとする。この図4の命
令ブロックでは、命令フィールド1,3に論理シフト命
令(lsl…Logical Sift Left)、
命令フィールド2に加算命令、命令フィールド4には条
件分岐命令(レジスタ“r23”の値が“0”の場合に
分岐条件成立)が埋め込まれている。
すような、命令ブロックであったとする。この図4の命
令ブロックでは、命令フィールド1,3に論理シフト命
令(lsl…Logical Sift Left)、
命令フィールド2に加算命令、命令フィールド4には条
件分岐命令(レジスタ“r23”の値が“0”の場合に
分岐条件成立)が埋め込まれている。
【0040】ここで、命令フィールド2の加算命令の先
頭には、“+”記号が付加されている。図5はこの加算
命令のオブジェクト・フォーマットの模式的配置図であ
る。このオブジェクト・コードは32ビット長で、オペ
コード,ソース・レジスタ1,ソース・レジスタ2,デ
スティネーション・レジスタの各フィールドにオブジェ
クト・コードが埋め込まれている。図5の0,1ビット
目は、命令実行選択フィールドであり、その命令ブロッ
クの条件分岐命令の条件の状態により、命令を実行する
か否かを選択するためのフィールドである。
頭には、“+”記号が付加されている。図5はこの加算
命令のオブジェクト・フォーマットの模式的配置図であ
る。このオブジェクト・コードは32ビット長で、オペ
コード,ソース・レジスタ1,ソース・レジスタ2,デ
スティネーション・レジスタの各フィールドにオブジェ
クト・コードが埋め込まれている。図5の0,1ビット
目は、命令実行選択フィールドであり、その命令ブロッ
クの条件分岐命令の条件の状態により、命令を実行する
か否かを選択するためのフィールドである。
【0041】図4の命令ブロックの場合、命令フィール
ド4に条件分岐命令があり、分岐条件が成立した場合に
のみ命令フィールド2の命令を実行したい。このため、
フィールド2の命令の先頭に“+”記号が付加されてい
る。この時、オブジェクト・コードの命令実行選択フィ
ールドにはコード“01”が埋められる。これにより、
この命令ブロック実行時に分岐条件が成立すれば命令フ
ィールド2の命令は実行され、条件が成立しなかった場
合にはこの命令は実行されない。
ド4に条件分岐命令があり、分岐条件が成立した場合に
のみ命令フィールド2の命令を実行したい。このため、
フィールド2の命令の先頭に“+”記号が付加されてい
る。この時、オブジェクト・コードの命令実行選択フィ
ールドにはコード“01”が埋められる。これにより、
この命令ブロック実行時に分岐条件が成立すれば命令フ
ィールド2の命令は実行され、条件が成立しなかった場
合にはこの命令は実行されない。
【0042】逆に、分岐条件が成立しなかった場合にの
みその命令を実行したいときには、その命令の先頭に
“−”記号を付加する。このときオブジェクト・コード
の命令実行選択フィールドには、コード“10”が埋め
られる。また、分岐条件の成立,不成立に関わらず実行
してよい命令の場合には、そのまま命令を記述する。こ
のときオブジェクト・コードの命令実行選択フィールド
には、コード“00”が埋め込まれる。
みその命令を実行したいときには、その命令の先頭に
“−”記号を付加する。このときオブジェクト・コード
の命令実行選択フィールドには、コード“10”が埋め
られる。また、分岐条件の成立,不成立に関わらず実行
してよい命令の場合には、そのまま命令を記述する。こ
のときオブジェクト・コードの命令実行選択フィールド
には、コード“00”が埋め込まれる。
【0043】次に、図4に示す命令ブロックが実行され
る手順を説明する。
る手順を説明する。
【0044】命令ブロック・フェッチ手段2は、アドレ
ス・バス32で指定される命令ブロックを命令ブロック
・メモリ1から命令ブロック・バス31を介してフェッ
チする。そして、図4の各フィールドの命令(命令4,
命令5,命令6,分岐命令)を命令バス33〜36を介
して、オペランド・フェッチ手段14〜17に転送して
出力する。このとき、図4の命令フィールド2について
は、命令実行選択フィールドが“+”であるため、実行
先端プラス信号53が命令実行手段20に出力される。
その他の命令フィールドについては、実行選択フィール
ドに“00”コードが埋まっているため、実行選択信号
が出力されない。
ス・バス32で指定される命令ブロックを命令ブロック
・メモリ1から命令ブロック・バス31を介してフェッ
チする。そして、図4の各フィールドの命令(命令4,
命令5,命令6,分岐命令)を命令バス33〜36を介
して、オペランド・フェッチ手段14〜17に転送して
出力する。このとき、図4の命令フィールド2について
は、命令実行選択フィールドが“+”であるため、実行
先端プラス信号53が命令実行手段20に出力される。
その他の命令フィールドについては、実行選択フィール
ドに“00”コードが埋まっているため、実行選択信号
が出力されない。
【0045】次にオペランド・フェッチ手段14〜17
は、転送された命令をデコードして必要なオペランドを
データ・レジスタ7からレジスタ・リード・バス37〜
40を介してフェッチする。以上の動作については4つ
の命令実行ユニット3〜5について同じである。
は、転送された命令をデコードして必要なオペランドを
データ・レジスタ7からレジスタ・リード・バス37〜
40を介してフェッチする。以上の動作については4つ
の命令実行ユニット3〜5について同じである。
【0046】分岐命令実行ユニット6のアドレス生成手
段18は、内部に保持している命令ブロック・アドレス
をインクリメントし、次アドレスを生成する。これと同
時に、命令バス36を介して与えられた分岐命令をデコ
ードし、分岐先アドレスの生成を実行する。そしてソー
ス・オペランド・バス41を介して与えられたオペラン
ドを参照して分岐条件の成立/不成立を判定し、分岐が
発生する場合には分岐先アドレスを、分岐が発生しない
場合には次アドレスをアドレス・バス32に出力する。
段18は、内部に保持している命令ブロック・アドレス
をインクリメントし、次アドレスを生成する。これと同
時に、命令バス36を介して与えられた分岐命令をデコ
ードし、分岐先アドレスの生成を実行する。そしてソー
ス・オペランド・バス41を介して与えられたオペラン
ドを参照して分岐条件の成立/不成立を判定し、分岐が
発生する場合には分岐先アドレスを、分岐が発生しない
場合には次アドレスをアドレス・バス32に出力する。
【0047】もし、分岐条件が成立し分岐が発生する場
合には、分岐条件成立信号54の“1”が命令実行手段
19〜21に出力され、分岐が発生しない場合には、分
岐条件成立信号54の“0”が出力される。そして、分
岐命令が、次のアドレスの退避を必要とするブランチ・
アンド・リンク命令だった場合には、分岐先アドレスが
アドレス・バス32に出力され、分岐条件成立信号
“1”が出力されるとともに、次アドレスがデスティネ
ーション・オペランド・バス45を介してオペランド・
ライト手段22に出力される。オペランド・ライト手段
22は、次アドレスをオペランドとしてレジスタ・ライ
ト・バス52を介してデータ・レジスタ13に書き込
む。
合には、分岐条件成立信号54の“1”が命令実行手段
19〜21に出力され、分岐が発生しない場合には、分
岐条件成立信号54の“0”が出力される。そして、分
岐命令が、次のアドレスの退避を必要とするブランチ・
アンド・リンク命令だった場合には、分岐先アドレスが
アドレス・バス32に出力され、分岐条件成立信号
“1”が出力されるとともに、次アドレスがデスティネ
ーション・オペランド・バス45を介してオペランド・
ライト手段22に出力される。オペランド・ライト手段
22は、次アドレスをオペランドとしてレジスタ・ライ
ト・バス52を介してデータ・レジスタ13に書き込
む。
【0048】また命令実行手段19,21は、ソース・
オペランド・バス42,44を介して転送されたオペラ
ンドを用いて命令を実行し、その結果をデスティネーシ
ョン・レジスタ・バス46,48を介してオペランド・
ライト手段23,25に転送する。オペランド・ライト
手段23,25は各結果オペランドを各命令が指定する
レジスタにレジスタ・ライト・バス49,51を介して
それぞれ書き込む。
オペランド・バス42,44を介して転送されたオペラ
ンドを用いて命令を実行し、その結果をデスティネーシ
ョン・レジスタ・バス46,48を介してオペランド・
ライト手段23,25に転送する。オペランド・ライト
手段23,25は各結果オペランドを各命令が指定する
レジスタにレジスタ・ライト・バス49,51を介して
それぞれ書き込む。
【0049】一方、命令実行手段20は、実行選択プラ
ス信号53がアクティブになっている。このとき分岐条
件成立信号54がともにアクティブになっていれば、命
令実行手段20はソース・オペランド・バス43を介し
て転送されたオペランドを用いて命令を実行し、その結
果をデスティネーション・レジスタ・バス47を介して
オペランド・ライト手段24に転送し、オペランド・ラ
イト手段24はその結果オペランドを命令が指定するレ
ジスタにレジスタ・ライト・バス50を介してデータ・
レジスタ7に書き込む。
ス信号53がアクティブになっている。このとき分岐条
件成立信号54がともにアクティブになっていれば、命
令実行手段20はソース・オペランド・バス43を介し
て転送されたオペランドを用いて命令を実行し、その結
果をデスティネーション・レジスタ・バス47を介して
オペランド・ライト手段24に転送し、オペランド・ラ
イト手段24はその結果オペランドを命令が指定するレ
ジスタにレジスタ・ライト・バス50を介してデータ・
レジスタ7に書き込む。
【0050】しかし、分岐条件成立信号54がインアク
ティブであれば、実行選択プラス信号53がアクティブ
なので、この命令の実行は行われず、従って、この場合
には命令実行手段20およびオペランド・ライト手段2
4はともに何もしない。
ティブであれば、実行選択プラス信号53がアクティブ
なので、この命令の実行は行われず、従って、この場合
には命令実行手段20およびオペランド・ライト手段2
4はともに何もしない。
【0051】以上の実施例では、命令実行選択フィール
ドが“+”の場合について説明したが、命令実行選択フ
ィールドが“−”の場合には、同様に命令ブロック・フ
ェッチ手段から実行選択マイナス信号が該当する命令実
行手段に出力される。このとき、分岐条件成立信号がア
クティブになっていれば、命令実行は行われず、分岐条
件成立信号がインアクティブな場合に命令が実行される
ことになる。これは、表1,表2に要約される。
ドが“+”の場合について説明したが、命令実行選択フ
ィールドが“−”の場合には、同様に命令ブロック・フ
ェッチ手段から実行選択マイナス信号が該当する命令実
行手段に出力される。このとき、分岐条件成立信号がア
クティブになっていれば、命令実行は行われず、分岐条
件成立信号がインアクティブな場合に命令が実行される
ことになる。これは、表1,表2に要約される。
【0052】表1の命令実行選択フィールドと実行選択
信号53の関係を示す表においては、命令実行選択フィ
ールドが“+”の時は分岐条件が成立した場合に限りそ
の命令を実行し、“−”の時は分岐条件が不成立の場合
に限り命令を実行する。命令実行選択フィールドが何も
指定されていない場合は、分岐条件の成立の如何に関わ
らず命令を実行する。
信号53の関係を示す表においては、命令実行選択フィ
ールドが“+”の時は分岐条件が成立した場合に限りそ
の命令を実行し、“−”の時は分岐条件が不成立の場合
に限り命令を実行する。命令実行選択フィールドが何も
指定されていない場合は、分岐条件の成立の如何に関わ
らず命令を実行する。
【0053】
【0054】表2はその実行選択信号と分岐条件成立信
号の値と命令実行手段による結果の出力の関係を示す表
であり、命令実行手段の結果が出力されないということ
は命令が実行されたいことと同等である。
号の値と命令実行手段による結果の出力の関係を示す表
であり、命令実行手段の結果が出力されないということ
は命令が実行されたいことと同等である。
【0055】
【0056】以上説明したように、この方式は、条件分
岐命令を含む命令ブロックのその他複数の命令フィール
ドの各命令に、分岐条件の成立・不成立に応じて命令実
行を選択することが可能な命令実行選択機能を備えてい
るので、条件分岐命令を含む命令ブロックに、分岐条件
が成立あるいは不成立の場合にだけ実行する命令を埋め
込むことが可能になり、空きフィールドの増加を防ぐこ
とが出来る。
岐命令を含む命令ブロックのその他複数の命令フィール
ドの各命令に、分岐条件の成立・不成立に応じて命令実
行を選択することが可能な命令実行選択機能を備えてい
るので、条件分岐命令を含む命令ブロックに、分岐条件
が成立あるいは不成立の場合にだけ実行する命令を埋め
込むことが可能になり、空きフィールドの増加を防ぐこ
とが出来る。
【0057】このVLIW型並列命令処理方式におい
て、一つの命令ブロックに、なるべく多くの命令を埋め
込むように命令を並列化していく命令並列化方式とし
て、トップ・アライン、ミドル・アライン命令並列化方
式がある。
て、一つの命令ブロックに、なるべく多くの命令を埋め
込むように命令を並列化していく命令並列化方式とし
て、トップ・アライン、ミドル・アライン命令並列化方
式がある。
【0058】トップ・アライン命令並列化方式は、実行
サイクルの早い命令ブロックから順番に、命令を埋め込
んでいく。つまり、最初はサイクル0の命令ブロックに
なるべく多くの命令を埋め込み、サイクル0の命令ブロ
ックにそれ以上命令が埋められなくなったら、次にサイ
クル1の命令ブロックを対象として命令を埋め込む。サ
イクル1の命令ブロックがそれ以上埋められなくなった
ら、次にサイクル2の命令ブロック、…というようにな
る。
サイクルの早い命令ブロックから順番に、命令を埋め込
んでいく。つまり、最初はサイクル0の命令ブロックに
なるべく多くの命令を埋め込み、サイクル0の命令ブロ
ックにそれ以上命令が埋められなくなったら、次にサイ
クル1の命令ブロックを対象として命令を埋め込む。サ
イクル1の命令ブロックがそれ以上埋められなくなった
ら、次にサイクル2の命令ブロック、…というようにな
る。
【0059】さて、サイクルnの命令ブロックに命令を
埋めて行くに当たり、そのサイクルの命令ブロックに埋
め込むことができる命令を、データ・レディ状態の命令
という。
埋めて行くに当たり、そのサイクルの命令ブロックに埋
め込むことができる命令を、データ・レディ状態の命令
という。
【0060】ここのデータ・レディ状態の命令とは、そ
の命令で参照するオペランド・データをそれ以前に直接
評価している命令があれば、その命令が現サイクルより
も前のサイクルの命令ブロックにすでに配置されている
ことをいう。つまり、扱うオペランド・データがそれ以
前のサイクルで評価済みで、正しい値が設定されている
とき、はじめてその命令はオペランド・データを参照可
能な状態になり、データ・レディ状態といえる。
の命令で参照するオペランド・データをそれ以前に直接
評価している命令があれば、その命令が現サイクルより
も前のサイクルの命令ブロックにすでに配置されている
ことをいう。つまり、扱うオペランド・データがそれ以
前のサイクルで評価済みで、正しい値が設定されている
とき、はじめてその命令はオペランド・データを参照可
能な状態になり、データ・レディ状態といえる。
【0061】このように、ある命令を実行するに当た
り、その命令が扱うオペランドとデータの依存関係があ
る他の命令で、その命令よりも前のサイクルで実行され
なければならないような命令を、その命令の前者とよ
び、その命令よりも後または同じサイクルで実行されな
ければならない命令をその命令の後者と呼ぶ。従って、
データ・レディ状態の命令とは、その命令のすべての前
者が配置済みであるような命令をいう。
り、その命令が扱うオペランドとデータの依存関係があ
る他の命令で、その命令よりも前のサイクルで実行され
なければならないような命令を、その命令の前者とよ
び、その命令よりも後または同じサイクルで実行されな
ければならない命令をその命令の後者と呼ぶ。従って、
データ・レディ状態の命令とは、その命令のすべての前
者が配置済みであるような命令をいう。
【0062】トップ・アライン方式ではデータ・レディ
状態の命令の中から、なるべくその命令ブロックに多く
の命令が埋め込めるように命令を選んで命令ブロックを
構成していく。もし、現サイクルの命令ブロックに配置
可能なデータ・レディ状態の命令が数多く存在する場
合、トップ・アライン方式は、データ・レディ状態の命
令の中から、最も命令の高さの高いものから順に配置し
てゆく。
状態の命令の中から、なるべくその命令ブロックに多く
の命令が埋め込めるように命令を選んで命令ブロックを
構成していく。もし、現サイクルの命令ブロックに配置
可能なデータ・レディ状態の命令が数多く存在する場
合、トップ・アライン方式は、データ・レディ状態の命
令の中から、最も命令の高さの高いものから順に配置し
てゆく。
【0063】この命令の高さとは、基本ブロック内で、
その命令の後者、そのまた後者というように命令をたど
っていき、後者を持たない命令にたどりつくまでの道の
りの最も長い(最もサイクルの長い)パスのサイクル数
のことである。
その命令の後者、そのまた後者というように命令をたど
っていき、後者を持たない命令にたどりつくまでの道の
りの最も長い(最もサイクルの長い)パスのサイクル数
のことである。
【0064】このようなトップ・アライン方式では、基
本ブロックの入口に近い命令ブロックで、比較的命令フ
ィールドの命令充填率がよく、基本ブロックの出口に近
くなるに従って充填率は悪くなる。
本ブロックの入口に近い命令ブロックで、比較的命令フ
ィールドの命令充填率がよく、基本ブロックの出口に近
くなるに従って充填率は悪くなる。
【0065】次にミドル・アライン命令並列化方式につ
いて説明する。
いて説明する。
【0066】ミドル・アライン命令並列化方式では、ま
ず、基本ブロック内のすべての命令の高さの中から、基
本ブロックの中で最も高い命令の高さを2で割った値を
もとめ、それを基本の高さとする。
ず、基本ブロック内のすべての命令の高さの中から、基
本ブロックの中で最も高い命令の高さを2で割った値を
もとめ、それを基本の高さとする。
【0067】ここで基本の高さをもつ命令を最初に配置
するブロックを命令ブロック0とし、命令ブロック0よ
り前に実行される命令ブロックをマイナス・ブロック、
命令ブロック0よりも後に実行される命令ブロックをプ
ラス・ブロックとよぶ。このとき、命令を埋めていく対
象となる命令ブロックは、図6に示すように最初に命令
ブロック0、次にマイナス・ブロックの命令ブロック
1、次にプラス・ブロックの命令ブロック2、次にマイ
ナス・ブロックの命令ブロック3…というような順にな
る。
するブロックを命令ブロック0とし、命令ブロック0よ
り前に実行される命令ブロックをマイナス・ブロック、
命令ブロック0よりも後に実行される命令ブロックをプ
ラス・ブロックとよぶ。このとき、命令を埋めていく対
象となる命令ブロックは、図6に示すように最初に命令
ブロック0、次にマイナス・ブロックの命令ブロック
1、次にプラス・ブロックの命令ブロック2、次にマイ
ナス・ブロックの命令ブロック3…というような順にな
る。
【0068】このミドル・アライン方式では、最初にサ
イクル0の命令ブロックに基本の高さの命令を配置し、
ここで配置された命令をもとにして、以降、なるべくサ
イクル0の命令ブロックに近い命令ブロックになるべく
多くの命令を埋め込むようにする。配置対象とする命令
ブロックは前述のようにマイナス・ブロック、プラス・
ブロック交互になる。
イクル0の命令ブロックに基本の高さの命令を配置し、
ここで配置された命令をもとにして、以降、なるべくサ
イクル0の命令ブロックに近い命令ブロックになるべく
多くの命令を埋め込むようにする。配置対象とする命令
ブロックは前述のようにマイナス・ブロック、プラス・
ブロック交互になる。
【0069】基本的には、マイナス・ブロックの命令ブ
ロックには、そのサイクルより後で実行されるブロック
に配置済みの命令の前者で、命令の高さがすでに配置済
みの命令より1大きい命令を配置することができる。も
し、配置対象としているマイナス・ブロックに配置可能
な命令が数多く存在する場合には、それらの命令の中か
ら最も命令の深さの深いものから順に配置していく。
ロックには、そのサイクルより後で実行されるブロック
に配置済みの命令の前者で、命令の高さがすでに配置済
みの命令より1大きい命令を配置することができる。も
し、配置対象としているマイナス・ブロックに配置可能
な命令が数多く存在する場合には、それらの命令の中か
ら最も命令の深さの深いものから順に配置していく。
【0070】ここでいう命令の深さとは、基本ブロック
内で、その命令の前者、そのまた前者というように命令
をたどっていき、最後に前者のない命令にたどりつくま
での道のりの最も長い(最もサイクルの長い)パスのサ
イクル数のことである。
内で、その命令の前者、そのまた前者というように命令
をたどっていき、最後に前者のない命令にたどりつくま
での道のりの最も長い(最もサイクルの長い)パスのサ
イクル数のことである。
【0071】同様にプラス・ブロックの命令ブロックに
は、そのサイクルより前で実行されるブロックに配置済
みの命令の後者で、その命令の深さが、すでに配置済み
の命令より1大きい命令を配置することができる。も
し、配置対象となる命令が数多く存在する場合には、そ
れらの命令の中から最も高さの高さ命令から配置してい
く。
は、そのサイクルより前で実行されるブロックに配置済
みの命令の後者で、その命令の深さが、すでに配置済み
の命令より1大きい命令を配置することができる。も
し、配置対象となる命令が数多く存在する場合には、そ
れらの命令の中から最も高さの高さ命令から配置してい
く。
【0072】図7(a),(b)に命令実行選択機能を
利用して行われるループ最適化の例を示す。まず図7
(a)のようなプログラム・フローの基本ブロックを考
える。基本ブロック1の最初の命令ブロックには命令フ
ィールド(1),(2)にだけ有効な命令が埋め込まれ
ている。そして、基本ブロック2の最終命令ブロックに
は分岐フィールド(3)にだけ、条件分岐命令が埋め込
まれていたとする。基本ブロック2の最終命令ブロック
の分岐条件が成立すると、プログラム・フローは、基本
ブロック1に戻るようなループになっている。
利用して行われるループ最適化の例を示す。まず図7
(a)のようなプログラム・フローの基本ブロックを考
える。基本ブロック1の最初の命令ブロックには命令フ
ィールド(1),(2)にだけ有効な命令が埋め込まれ
ている。そして、基本ブロック2の最終命令ブロックに
は分岐フィールド(3)にだけ、条件分岐命令が埋め込
まれていたとする。基本ブロック2の最終命令ブロック
の分岐条件が成立すると、プログラム・フローは、基本
ブロック1に戻るようなループになっている。
【0073】このとき命令実行選択機能を利用して命令
を図7(b)のように移動することができる。つまり、
基本ブロック1の先頭命令ブロックに埋め込まれている
命令(1),(2)を、基本ブロック2の最終ブロック
の空き命令フィールドに“+”付きで移動し、基本ブロ
ック1の最初の命令ブロックを削除する。それと同時
に、基本ブロック0を新たに作り、基本ブロック1の直
前に挿入する。以上の命令の操作により、基本ブロック
1の命令ブロック数が減り、結果的にプログラムの意味
を変えることなくループにかかるクロック数を減少する
ことができる。このような命令実行選択機能を利用した
最適化を行うには、基本ブロックの先頭ブロックと最終
ブロックにはなるべく3つの空きフィールドがあること
が望ましい。
を図7(b)のように移動することができる。つまり、
基本ブロック1の先頭命令ブロックに埋め込まれている
命令(1),(2)を、基本ブロック2の最終ブロック
の空き命令フィールドに“+”付きで移動し、基本ブロ
ック1の最初の命令ブロックを削除する。それと同時
に、基本ブロック0を新たに作り、基本ブロック1の直
前に挿入する。以上の命令の操作により、基本ブロック
1の命令ブロック数が減り、結果的にプログラムの意味
を変えることなくループにかかるクロック数を減少する
ことができる。このような命令実行選択機能を利用した
最適化を行うには、基本ブロックの先頭ブロックと最終
ブロックにはなるべく3つの空きフィールドがあること
が望ましい。
【0074】この場合、もし基本ブロック1の先頭命令
ブロックに埋め込まれている命令数が基本ブロック2の
最終命令ブロックの空き命令フィールド数より多かった
場合には、基本ブロック1の先頭命令ブロックのすべて
の命令を基本ブロック2に移動することができないの
で、基本ブロック1の命令ブロック数を減らすことがで
きず、最適化ができなくなる。従って、この命令実行選
択機能を利用しての最適化を効果的に行うには、トップ
・アライン方式より、ミドル・アライン方式で並列化さ
れることが望ましい。
ブロックに埋め込まれている命令数が基本ブロック2の
最終命令ブロックの空き命令フィールド数より多かった
場合には、基本ブロック1の先頭命令ブロックのすべて
の命令を基本ブロック2に移動することができないの
で、基本ブロック1の命令ブロック数を減らすことがで
きず、最適化ができなくなる。従って、この命令実行選
択機能を利用しての最適化を効果的に行うには、トップ
・アライン方式より、ミドル・アライン方式で並列化さ
れることが望ましい。
【0075】ここで並列化の対象となる基本ブロックの
最終命令が分岐系命令でない場合について考えてみる。
このとき、その基本ブロックの最終命令ブロックに他の
基本ブロックから命令が“+”“−”付きで移動してく
ることはなく、最終命令ブロックに空き命令フィールド
が多い必要はない。逆にその基本ブロックの先頭命令ブ
ロックに配置された命令は、その基本ブロックの前に実
行される基本ブロックに“+”“−”付きで移動する可
能性がある。従って、その基本ブロックの最終命令が分
岐系命令でない場合には、基本ブロックの先頭ブロック
において、空き命令フィールドが多くなるように並列化
してある方が、命令実行選択機能を用いての最適化が行
われやすくなる。
最終命令が分岐系命令でない場合について考えてみる。
このとき、その基本ブロックの最終命令ブロックに他の
基本ブロックから命令が“+”“−”付きで移動してく
ることはなく、最終命令ブロックに空き命令フィールド
が多い必要はない。逆にその基本ブロックの先頭命令ブ
ロックに配置された命令は、その基本ブロックの前に実
行される基本ブロックに“+”“−”付きで移動する可
能性がある。従って、その基本ブロックの最終命令が分
岐系命令でない場合には、基本ブロックの先頭ブロック
において、空き命令フィールドが多くなるように並列化
してある方が、命令実行選択機能を用いての最適化が行
われやすくなる。
【0076】この従来のミドル・アライン並列化方式で
は、基本ブロック内の命令数や、各命令のデータの依存
関係に応じて、先頭ブロックよりも最終ブロックにおけ
る空き命令フィールドの方が多い場合が生じる。もし、
ある基本ブロックが分岐系命令を含まない基本ブロック
で、命令数が7、各命令間にデータの依存関係がまった
くなかった場合を考えてみる。このときベース・ブロッ
ク、マイナス・ブロック、プラス・ブロックの順で命令
を配置した場合には、表3(a)のように最終命令ブロ
ックで命令の空きフィールドが増え、ベース・ブロッ
ク、プラス・ブロック、マイナス・ブロックの順で命令
を配置した場合には、図表3(b)に示すように先頭命
令ブロックで空き命令フィールドが多くなる。
は、基本ブロック内の命令数や、各命令のデータの依存
関係に応じて、先頭ブロックよりも最終ブロックにおけ
る空き命令フィールドの方が多い場合が生じる。もし、
ある基本ブロックが分岐系命令を含まない基本ブロック
で、命令数が7、各命令間にデータの依存関係がまった
くなかった場合を考えてみる。このときベース・ブロッ
ク、マイナス・ブロック、プラス・ブロックの順で命令
を配置した場合には、表3(a)のように最終命令ブロ
ックで命令の空きフィールドが増え、ベース・ブロッ
ク、プラス・ブロック、マイナス・ブロックの順で命令
を配置した場合には、図表3(b)に示すように先頭命
令ブロックで空き命令フィールドが多くなる。
【0077】
【0078】このようにミドル・アライン方式では、基
本ブロック内の命令数や、各命令間のデータの依存関係
に応じて、たとえ、基本ブロックに分岐命令が含まれて
いないことがわかっていても、先頭命令ブロックでの空
き命令フィールドを多くするように配置することは困難
である。
本ブロック内の命令数や、各命令間のデータの依存関係
に応じて、たとえ、基本ブロックに分岐命令が含まれて
いないことがわかっていても、先頭命令ブロックでの空
き命令フィールドを多くするように配置することは困難
である。
【0079】つまり、従来のミドル・アライン命令並列
化方式においても、分岐系命令を含まない基本ブロック
を並列化する場合には、命令実行選択機能を用いての最
適化が場合によっては効果的に行われないことがある。
化方式においても、分岐系命令を含まない基本ブロック
を並列化する場合には、命令実行選択機能を用いての最
適化が場合によっては効果的に行われないことがある。
【0080】図8は本発明の第2の実施例を説明するフ
ローチャートである。本実施例は、命令パイプライン方
式の命令処理装置を4つ並列に並べ、すべての命令を1
クロックで実行可能なVLIW型並列パイプライン処理
装置の場合であり、命令パイプラインのステージの1つ
は分岐命令だけを実行する分岐命令専用ステージとなっ
ており、条件分岐による遅延が生じず、結果としてすべ
ての命令を1クロックで実行可能になっているものとす
る。
ローチャートである。本実施例は、命令パイプライン方
式の命令処理装置を4つ並列に並べ、すべての命令を1
クロックで実行可能なVLIW型並列パイプライン処理
装置の場合であり、命令パイプラインのステージの1つ
は分岐命令だけを実行する分岐命令専用ステージとなっ
ており、条件分岐による遅延が生じず、結果としてすべ
ての命令を1クロックで実行可能になっているものとす
る。
【0081】図8のステップS1において、並列化の対
象となる基本ブロックの最終命令が分岐系命令であるか
否かを調べる。ここで最終命令が分岐系命令であれば、
このブロックに対しては、ステップS2でミドル・アラ
イン方式により並列化を行う。もしも、最終命令が分岐
系命令でなければ、このブロックに対して、ステップS
3でボトム・アライン方式により並列化を行う。
象となる基本ブロックの最終命令が分岐系命令であるか
否かを調べる。ここで最終命令が分岐系命令であれば、
このブロックに対しては、ステップS2でミドル・アラ
イン方式により並列化を行う。もしも、最終命令が分岐
系命令でなければ、このブロックに対して、ステップS
3でボトム・アライン方式により並列化を行う。
【0082】図9,10は図8のミドル・アライン並列
化方式およびボトム・アライン並列化方式についてフロ
ー・チャートを示す。
化方式およびボトム・アライン並列化方式についてフロ
ー・チャートを示す。
【0083】まず、図9のフロー・チャートに従ってミ
ドル・アライン方式について簡単に説明する。ここで表
4にある基本ブロックに対応する命令文の列を、表4の
各命令の高さと深さを表5に、各命令の前者,後者に当
たる命令とその2命令のデータ依存関係を表6に示す。
ドル・アライン方式について簡単に説明する。ここで表
4にある基本ブロックに対応する命令文の列を、表4の
各命令の高さと深さを表5に、各命令の前者,後者に当
たる命令とその2命令のデータ依存関係を表6に示す。
【0084】
【0085】
【0086】
【0087】ここでは、データ依存関係の種類として、
次の3種類を考慮する。
次の3種類を考慮する。
【0088】 1.WR(Write−Read)辺で結ばれる命令 前者の命令で書き込んだデータを、後者の命令で参照し
ている。
ている。
【0089】 2.RW(Read−Write)辺で結ばれる命令 前者の命令で参照しているデータに、後者の命令で書き
込んでいる。
込んでいる。
【0090】 3.WW(Write−Write)辺で結ばれる命令 前者の命令で書き込んだデータに、後者の命令でも書き
込んでいる。
込んでいる。
【0091】WR辺やWW辺で結ばれる命令の場合、後
者の命令は必ず前者の命令の次のクロック以降で実行さ
れなければならない。しかし、RW辺で結ばれる命令の
場合、後者の命令は前者の命令と同一クロックか、また
はそれ以降で実行されれば良いことになる。
者の命令は必ず前者の命令の次のクロック以降で実行さ
れなければならない。しかし、RW辺で結ばれる命令の
場合、後者の命令は前者の命令と同一クロックか、また
はそれ以降で実行されれば良いことになる。
【0092】図9のステップS11で、その基本ブロッ
ク内のすべての命令の高さの中から、基本となる高さを
求める。これは、その基本ブロックの中で最も高い命令
の高さを2で割った値(小数点切り上げ)とする。表4
の基本ブロックの場合、基本の高さは3になる(表5参
照)。
ク内のすべての命令の高さの中から、基本となる高さを
求める。これは、その基本ブロックの中で最も高い命令
の高さを2で割った値(小数点切り上げ)とする。表4
の基本ブロックの場合、基本の高さは3になる(表5参
照)。
【0093】なお、これ以降、基本の高さを持つ命令を
最初に配置するブロックをベース・ブロックとし、ベー
ス・ブロックより前に実行される命令ブロックをマイナ
ス・ブロック、ベース・ブロックよりも後に実行される
ブロックをプラス・ブロックとよぶ。このとき、命令を
埋めていく対象となる命令ブロックは、図6に示すよう
に最初にベース・ブロックの命令ブロック0、次にマイ
ナス・ブロックの命令ブロック1、次にプラス・ブロッ
クの命令ブロック2、次にマイナス・ブロックの命令ブ
ロック3…というような順であるとする。
最初に配置するブロックをベース・ブロックとし、ベー
ス・ブロックより前に実行される命令ブロックをマイナ
ス・ブロック、ベース・ブロックよりも後に実行される
ブロックをプラス・ブロックとよぶ。このとき、命令を
埋めていく対象となる命令ブロックは、図6に示すよう
に最初にベース・ブロックの命令ブロック0、次にマイ
ナス・ブロックの命令ブロック1、次にプラス・ブロッ
クの命令ブロック2、次にマイナス・ブロックの命令ブ
ロック3…というような順であるとする。
【0094】次にステップS12において、表4の基本
ブロックの最後の命令は分岐命令であるので、分岐命令
の命令文9を退避しておく。分岐命令は必ずその基本ブ
ロックの最後の命令ブロックで実行されなければならな
いので、退避することにより、以降の配置ロジックの対
象からはずしておくのである。
ブロックの最後の命令は分岐命令であるので、分岐命令
の命令文9を退避しておく。分岐命令は必ずその基本ブ
ロックの最後の命令ブロックで実行されなければならな
いので、退避することにより、以降の配置ロジックの対
象からはずしておくのである。
【0095】そして、ステップS13で、ベース・ブロ
ックのブロック0に命令を配置していく。ステップS1
3でベース・ブロックに配置可能な命令は、次の3条件
に当てはまる命令である。
ックのブロック0に命令を配置していく。ステップS1
3でベース・ブロックに配置可能な命令は、次の3条件
に当てはまる命令である。
【0096】 (1)基本の高さを持つ命令 (2)すでに配置済みの命令とRW辺で結ばれる命令
で、他の配置済みの命令 とは依存関係のない命令 (3)基本の高さ以下の高さを持ち、かつ、すべての祖
先がまだ未配置である命令この命令を配置するに当って
は、(1)に該当するすべての命令を配置し、なおかつ
空き命令フィールドがある時に(2)に該当するすべて
の命令を配置、さらに空き命令フィールドがある時に
(3)に該当する命令を配置していく。また、(1)
(2)(3)各々の条件に当てはまる命令が複数存在す
る場合には、命令深さの深いものから先に配置してい
く。
で、他の配置済みの命令 とは依存関係のない命令 (3)基本の高さ以下の高さを持ち、かつ、すべての祖
先がまだ未配置である命令この命令を配置するに当って
は、(1)に該当するすべての命令を配置し、なおかつ
空き命令フィールドがある時に(2)に該当するすべて
の命令を配置、さらに空き命令フィールドがある時に
(3)に該当する命令を配置していく。また、(1)
(2)(3)各々の条件に当てはまる命令が複数存在す
る場合には、命令深さの深いものから先に配置してい
く。
【0097】表5の基本ブロックでは、まず、(1)の
条件に当てはまる基本の高さを持つ命令文(5),
(6)をその命令の深さの順に(6),(5)の順でベ
ース・ブロックに配置する。さらに(2)の条件に当て
はまる命令(2)を配置する。ここで、分岐系命令以外
の命令を配置する空き命令フィールドはなくなるので、
ブロック0への配置を終了する。このときの命令ブロッ
クの配置状態は表7(a)のようになる。さらに、ステ
ップS14でまだ未配置の命令が残っているので、ステ
ップS15に進む。
条件に当てはまる基本の高さを持つ命令文(5),
(6)をその命令の深さの順に(6),(5)の順でベ
ース・ブロックに配置する。さらに(2)の条件に当て
はまる命令(2)を配置する。ここで、分岐系命令以外
の命令を配置する空き命令フィールドはなくなるので、
ブロック0への配置を終了する。このときの命令ブロッ
クの配置状態は表7(a)のようになる。さらに、ステ
ップS14でまだ未配置の命令が残っているので、ステ
ップS15に進む。
【0098】
【0099】このステップS15のマイナス・ブロック
に配置可能な命令は、未配置な命令で、かつ、次の4条
件にあてはまる命令である。
に配置可能な命令は、未配置な命令で、かつ、次の4条
件にあてはまる命令である。
【0100】 (1)基本の高さを持つ命令 (2)次ブロック以降に実行される命令ブロックに配置
された命令の前者で、高さが(後者の命令の高さ+1)
である命令 (3)現ブロックに配置済みの命令とRW辺で結ばれる
前者の命令で、かつ、そのブロックの他の命令の前者で
ない命令 (4)基本の高さ以下の高さを持ち、かつ、すべての祖
先がまだ未配置である命令命令を配置するに当たって
は、(1)に該当するすべての命令を配置し、なおかつ
空き命令フィールドがある時に(2)に該当するすべて
の命令を配置、さらに空き命令フィールドがある時に
(3)に該当する命令を配置、さらに空き命令フィール
ドがある時に(4)に該当する命令を配置していく。ま
た、各々の条件に当てはめる命令が複数存在する場合に
は、命令の深さの深いものから先に配置していく。
された命令の前者で、高さが(後者の命令の高さ+1)
である命令 (3)現ブロックに配置済みの命令とRW辺で結ばれる
前者の命令で、かつ、そのブロックの他の命令の前者で
ない命令 (4)基本の高さ以下の高さを持ち、かつ、すべての祖
先がまだ未配置である命令命令を配置するに当たって
は、(1)に該当するすべての命令を配置し、なおかつ
空き命令フィールドがある時に(2)に該当するすべて
の命令を配置、さらに空き命令フィールドがある時に
(3)に該当する命令を配置、さらに空き命令フィール
ドがある時に(4)に該当する命令を配置していく。ま
た、各々の条件に当てはめる命令が複数存在する場合に
は、命令の深さの深いものから先に配置していく。
【0101】表4の基本ブロックでは、まず、(1)の
条件に当てはまる未配置の命令はなく、(2)の条件に
当てはまる命令(1),(4)を、命令の深さの深い順
(4),(1)で命令ブロック1に配置する。命令ブロ
ック1には、まだ空き命令フィールドはあるが、(3)
(4)の条件にあてはまる命令がないので命令ブロック
1への命令配置を終了する。このときの命令ブロックの
配置状態は表7(b)のようになる。さらにステップS
16で、まだ未配置の命令が残っているので次にステッ
プ7に進む。ステップS17のプラス・ブロックに配置
可能な命令は、未配置な命令で、かつ、次の4条件にあ
てはまる命令である。
条件に当てはまる未配置の命令はなく、(2)の条件に
当てはまる命令(1),(4)を、命令の深さの深い順
(4),(1)で命令ブロック1に配置する。命令ブロ
ック1には、まだ空き命令フィールドはあるが、(3)
(4)の条件にあてはまる命令がないので命令ブロック
1への命令配置を終了する。このときの命令ブロックの
配置状態は表7(b)のようになる。さらにステップS
16で、まだ未配置の命令が残っているので次にステッ
プ7に進む。ステップS17のプラス・ブロックに配置
可能な命令は、未配置な命令で、かつ、次の4条件にあ
てはまる命令である。
【0102】 (1)基本の高さを持つ命令 (2)前ブロック以前に実行される命令ブロックに配置
された命令の後者で、 深さが(前者の命令の深さ+1)である命令 (3)現ブロックに配置済みの命令とRW辺で結ばれる
後者の命令で、かつ、 そのブロックの他の命令の後者でない命令 (4)基本の高さ以下の高さを持ち、かつ、すべての祖
先が配置済みである命令命令を配置するに当たっては、
(1)に該当するすべての命令を配置し、なおかつ空き
命令フィールドがある時に(2)に該当するすべての命
令を配置、さらに空き命令フィールドがある時に(3)
に該当する命令を配置、更に空き命令フィールドがある
時に(4)に該当する命令を配置していく。また、各々
の条件に当てはまる命令が複数存在する場合には、
(2)(3)(4)については命令の高さの高いものか
ら、(1)については命令の深さの深いものから先に配
置していく。
された命令の後者で、 深さが(前者の命令の深さ+1)である命令 (3)現ブロックに配置済みの命令とRW辺で結ばれる
後者の命令で、かつ、 そのブロックの他の命令の後者でない命令 (4)基本の高さ以下の高さを持ち、かつ、すべての祖
先が配置済みである命令命令を配置するに当たっては、
(1)に該当するすべての命令を配置し、なおかつ空き
命令フィールドがある時に(2)に該当するすべての命
令を配置、さらに空き命令フィールドがある時に(3)
に該当する命令を配置、更に空き命令フィールドがある
時に(4)に該当する命令を配置していく。また、各々
の条件に当てはまる命令が複数存在する場合には、
(2)(3)(4)については命令の高さの高いものか
ら、(1)については命令の深さの深いものから先に配
置していく。
【0103】表4の基本ブロックでは、(1)の条件に
当てはまる未配置の命令はなく、(2)の条件に当ては
まる命令(7),(8)を命令ブロック2に配置する。
命令ブロック2には、まだ空き命令フィールドはある
が、(3)(4)の条件にあてはまる命令がないので命
令ブロック2への命令配置を終了する。このときの命令
ブロックの配置状態は表7(c)のようになる。さらに
ステップS18で、まだ未配置の命令が残っているので
次にステップS15に進む。
当てはまる未配置の命令はなく、(2)の条件に当ては
まる命令(7),(8)を命令ブロック2に配置する。
命令ブロック2には、まだ空き命令フィールドはある
が、(3)(4)の条件にあてはまる命令がないので命
令ブロック2への命令配置を終了する。このときの命令
ブロックの配置状態は表7(c)のようになる。さらに
ステップS18で、まだ未配置の命令が残っているので
次にステップS15に進む。
【0104】ステップS15で、表4の基本ブロックで
未配置の命令(3)(2)の条件に当はまるため命令ブ
ロック3に配置される。この時点で命令ブロックの配置
状態は表7(d)のようになる。そして、ステップS1
6で未配置の命令はないのでステップS19に進む。
未配置の命令(3)(2)の条件に当はまるため命令ブ
ロック3に配置される。この時点で命令ブロックの配置
状態は表7(d)のようになる。そして、ステップS1
6で未配置の命令はないのでステップS19に進む。
【0105】ステップS19では、退避されていた命令
(9)を適切な場所へ配置する。退避されていた命令が
その時点での最終ブロックに配置されている命令の後者
でない場合には、その命令をその時点での最終ブロック
の分岐命令フィールドに配置する。しかし、最終ブロッ
クに配置されている命令の後者である場合には、新しい
命令ブロックを最終ブロックとして追加して、その命令
ブロックの分岐命令フィールドに分岐命令を配置する。
(9)を適切な場所へ配置する。退避されていた命令が
その時点での最終ブロックに配置されている命令の後者
でない場合には、その命令をその時点での最終ブロック
の分岐命令フィールドに配置する。しかし、最終ブロッ
クに配置されている命令の後者である場合には、新しい
命令ブロックを最終ブロックとして追加して、その命令
ブロックの分岐命令フィールドに分岐命令を配置する。
【0106】表4の基本ブロックの場合、命令(9)は
この時点での最終ブロックに配置されている命令の後者
にあたるので、新しい命令ブロックを追加して、その分
岐命令フィールドに命令(9)を配置する。この時点で
並列化処理は終了し、配置された命令ブロックは表7
(e)のようになる。
この時点での最終ブロックに配置されている命令の後者
にあたるので、新しい命令ブロックを追加して、その分
岐命令フィールドに命令(9)を配置する。この時点で
並列化処理は終了し、配置された命令ブロックは表7
(e)のようになる。
【0107】次に、図10のフロー・チャートに従っ
て、ボトム・アライン並列化方式について説明する。ボ
トム・アライン並列化方式を説明するに当たり、表8
に、ある基本ブロックに対応す命令文の列を、表8の各
命令の高さと深さを表9に、また、各命令の前者,後者
に当たる命令その2命令のデータ依存関係を表10に示
す。
て、ボトム・アライン並列化方式について説明する。ボ
トム・アライン並列化方式を説明するに当たり、表8
に、ある基本ブロックに対応す命令文の列を、表8の各
命令の高さと深さを表9に、また、各命令の前者,後者
に当たる命令その2命令のデータ依存関係を表10に示
す。
【0108】
【0109】
【0110】
【0111】なお、ボトム・アライン並列化方式では、
実行サイクルの遅い命令ブロックから順番に命令を埋め
込んでいく。つまり、最終サイクルの命令ブロックを命
令ブロック0とし、命令ブロック0になるべく多くの命
令を配置し、それ以上命令が埋められなくなったら、次
にその一つ前のサイクルの命令ブロック1を対象として
命令を配置する。命令ブロック1にそれ以上命令が配置
できなくなったら、次に、さらにその一つ前のサイクル
の命令ブロック、…というようにである。
実行サイクルの遅い命令ブロックから順番に命令を埋め
込んでいく。つまり、最終サイクルの命令ブロックを命
令ブロック0とし、命令ブロック0になるべく多くの命
令を配置し、それ以上命令が埋められなくなったら、次
にその一つ前のサイクルの命令ブロック1を対象として
命令を配置する。命令ブロック1にそれ以上命令が配置
できなくなったら、次に、さらにその一つ前のサイクル
の命令ブロック、…というようにである。
【0112】まず、図10のステップS21では、まず
後者のない命令を、命令の深さの深い順に命令ブロック
0に配置していく。表8の場合には命令(3)(4)
(6)(7)が後者のない命令である(表10)。この
中から、命令の深さの深いものから順に命令ブロック0
に配置していく。命令の深さは表9に示すように
(3),(4)は深さ1で同じだが、(6)は2、
(7)は3である。したがって、命令ブロック0に命令
(7)(6)(1)を配置した段階で命令の空きフィー
ルドがなくなる。そこで、ステップS22からステップ
S25へ進む。この時点では、まだ未配置の命令がある
ので、ステップS26で、現対象ブロック,命令ブロッ
ク0への命令配置を終了し、次の命令ブロック1に配置
対象をかえて、ステップ1に進む。このとき命令ブロッ
クの配置状態は表11(a)のようになる。
後者のない命令を、命令の深さの深い順に命令ブロック
0に配置していく。表8の場合には命令(3)(4)
(6)(7)が後者のない命令である(表10)。この
中から、命令の深さの深いものから順に命令ブロック0
に配置していく。命令の深さは表9に示すように
(3),(4)は深さ1で同じだが、(6)は2、
(7)は3である。したがって、命令ブロック0に命令
(7)(6)(1)を配置した段階で命令の空きフィー
ルドがなくなる。そこで、ステップS22からステップ
S25へ進む。この時点では、まだ未配置の命令がある
ので、ステップS26で、現対象ブロック,命令ブロッ
ク0への命令配置を終了し、次の命令ブロック1に配置
対象をかえて、ステップ1に進む。このとき命令ブロッ
クの配置状態は表11(a)のようになる。
【0113】
【0114】ステップS21で、この時点で後者のな
い、または、後者が配置済みの命令は命令(2)〜
(5)である。これらの命令を、命令の深さの順に配置
すると命令(5)(2)(3)が命令ブロック1に配置
される。この時点で空き命令フィールドがなくなるの
で、ステップS22からステップS25へ進み、命令
(4)が未配置なのでステップS26へ進み、命令ブロ
ック1への命令配置を終了し、次の命令ブロック2に配
置対象をかえる。このとき命令ブロックの配置状態は表
11(b)のようになる。
い、または、後者が配置済みの命令は命令(2)〜
(5)である。これらの命令を、命令の深さの順に配置
すると命令(5)(2)(3)が命令ブロック1に配置
される。この時点で空き命令フィールドがなくなるの
で、ステップS22からステップS25へ進み、命令
(4)が未配置なのでステップS26へ進み、命令ブロ
ック1への命令配置を終了し、次の命令ブロック2に配
置対象をかえる。このとき命令ブロックの配置状態は表
11(b)のようになる。
【0115】さらにステップS21で、後者がすべて配
置済みの命令(4)を命令ブロック2に配置する。ステ
ップS21で、まだ空き命令フィールドはあるが、ステ
ップ23で未配置の命令が残っていないので、この時点
ですべての命令の配置を終了する。最終的に命令の配置
状況は、表11(c)のようになる。なお、表8の基本
ブロックの命令をミドル・アライン命令並列化方式で並
列化すると、表12のようになる。ボトム・アライン命
令並列化方式に比べ、基本ブロックの先頭命令ブロック
で、空き命令フィールドが少ないことが明かである。
置済みの命令(4)を命令ブロック2に配置する。ステ
ップS21で、まだ空き命令フィールドはあるが、ステ
ップ23で未配置の命令が残っていないので、この時点
ですべての命令の配置を終了する。最終的に命令の配置
状況は、表11(c)のようになる。なお、表8の基本
ブロックの命令をミドル・アライン命令並列化方式で並
列化すると、表12のようになる。ボトム・アライン命
令並列化方式に比べ、基本ブロックの先頭命令ブロック
で、空き命令フィールドが少ないことが明かである。
【0116】
【0117】この並列命令実行選択処理方式を有するパ
イプライン命令処理装置は、並列パイプライン命令処理
装置のコード生成時の問題を解決するための方式である
が、このコード生成方式では並列命令実行選択処理方式
を有効に利用する最適化コードを生成することができな
い。このようなパイプライン命令処理装置に有効なコー
ドを最適化するには、プログラムの実行時間の大部分が
費やされるループに対して有効なコードを生成する必要
がある。
イプライン命令処理装置は、並列パイプライン命令処理
装置のコード生成時の問題を解決するための方式である
が、このコード生成方式では並列命令実行選択処理方式
を有効に利用する最適化コードを生成することができな
い。このようなパイプライン命令処理装置に有効なコー
ドを最適化するには、プログラムの実行時間の大部分が
費やされるループに対して有効なコードを生成する必要
がある。
【0118】図11,図12は本発明の第3の実施例の
コード最適化方式およびそのループ最適化部を説明する
フローチャートであり、図13,図14は並列命令実行
選択処理方式のあるパイプライン命令処理装置における
最適化する前および最適化後のプログラム・シーケンス
図である。本実施例も図1の並列命令実行選択処理方式
をもつパイプライン命令処理装置を用いるとする。な
お、ここではプログラムは現在の最適化コンパイラ技術
で得られる局所的最適化および大域的最適化はすでに施
されていると仮定しているので、図13のプログラムは
ループ内不変コードのループ外移動や誘導変数(ループ
の繰り返しによって一定値ずつ変化する変数)に最適化
した最適化後のプログラム・シーケンスを示している。
コード最適化方式およびそのループ最適化部を説明する
フローチャートであり、図13,図14は並列命令実行
選択処理方式のあるパイプライン命令処理装置における
最適化する前および最適化後のプログラム・シーケンス
図である。本実施例も図1の並列命令実行選択処理方式
をもつパイプライン命令処理装置を用いるとする。な
お、ここではプログラムは現在の最適化コンパイラ技術
で得られる局所的最適化および大域的最適化はすでに施
されていると仮定しているので、図13のプログラムは
ループ内不変コードのループ外移動や誘導変数(ループ
の繰り返しによって一定値ずつ変化する変数)に最適化
した最適化後のプログラム・シーケンスを示している。
【0119】図11において、ステップ101で「基本
ブロックの分割」を行う。この「基本ブロック」とは、
先頭の命令から最後の命令まで一つずつ順番に実行され
る一連の基本的演算操作である。分岐命令が分岐フィー
ルドに存在すると基本ブロックが切れるため、途中に分
岐命令はなく、「基本ブロックの入口」は基本ブロック
の先頭命令ブロック、「基本ブロックの出口」は基本ブ
ロックの最後の命令ブロックとなる。なお、説明の簡略
化のため、プログラムの各命令は、できる限り基本ブロ
ックの入口と出口の命令ブロックの空きフィールドを増
大するように配置されていると仮定する。
ブロックの分割」を行う。この「基本ブロック」とは、
先頭の命令から最後の命令まで一つずつ順番に実行され
る一連の基本的演算操作である。分岐命令が分岐フィー
ルドに存在すると基本ブロックが切れるため、途中に分
岐命令はなく、「基本ブロックの入口」は基本ブロック
の先頭命令ブロック、「基本ブロックの出口」は基本ブ
ロックの最後の命令ブロックとなる。なお、説明の簡略
化のため、プログラムの各命令は、できる限り基本ブロ
ックの入口と出口の命令ブロックの空きフィールドを増
大するように配置されていると仮定する。
【0120】次のステップ102は、「フロー解析」で
あり、ラベルの定義/参照関係を解析し、基本ブロック
間の流れを求める。この制御の流れは、「前者」と「後
者」で示され、制御の流れが基本ブロックAから基本ブ
ロックBに移るとき(これを「基本ブロックA→基本ブ
ロックB」と記述する)、基本ブロックAは基本ブロッ
クBの前者であり、基本ブロックBは基本ブロックAの
後者である。
あり、ラベルの定義/参照関係を解析し、基本ブロック
間の流れを求める。この制御の流れは、「前者」と「後
者」で示され、制御の流れが基本ブロックAから基本ブ
ロックBに移るとき(これを「基本ブロックA→基本ブ
ロックB」と記述する)、基本ブロックAは基本ブロッ
クBの前者であり、基本ブロックBは基本ブロックAの
後者である。
【0121】次のステップ103で、「深さ優先順序の
計算」を行う。この「深さ優先順序」とは、プログラム
の最初の基本ブロックからはじめて、できる限り速く最
初の基本ブロックから離れるように(深さ優先)、基本
ブロックを訪れるようにプログラムを探索した結果で、
プログラムの全基本ブロックの並びである。
計算」を行う。この「深さ優先順序」とは、プログラム
の最初の基本ブロックからはじめて、できる限り速く最
初の基本ブロックから離れるように(深さ優先)、基本
ブロックを訪れるようにプログラムを探索した結果で、
プログラムの全基本ブロックの並びである。
【0122】次のステップ104で、「支配者の検出」
を行う。この「支配者」とは、各基本ブロックに対して
自分が実行される前に必ず実行される基本ブロックであ
る。
を行う。この「支配者」とは、各基本ブロックに対して
自分が実行される前に必ず実行される基本ブロックであ
る。
【0123】次のステップ105で、「自然なループの
構成」を行う。この「自然なループ」とは、逆向きの辺
“A→B”(基本ブロックBが基本ブロックAを支配し
ている辺“A→B”)において、Bを通らずにAに到達
可能な基本ブロックにAとBを加えた基本ブロックの並
びである。基本ブロックBをこの自然なループのヘッダ
・ブロック、基本ブロックAをテイラ・ブロックと呼
ぶ。
構成」を行う。この「自然なループ」とは、逆向きの辺
“A→B”(基本ブロックBが基本ブロックAを支配し
ている辺“A→B”)において、Bを通らずにAに到達
可能な基本ブロックにAとBを加えた基本ブロックの並
びである。基本ブロックBをこの自然なループのヘッダ
・ブロック、基本ブロックAをテイラ・ブロックと呼
ぶ。
【0124】次のステップ106で、「生きている変数
の解析」を行う。レジスタaとプログラム中のある点p
に対して、点pでのレジスタaの値が点を始点とするあ
る経路内で使用できるかということを解析し、使用でき
れば「生きている」といい、使用できなければ点pでレ
ジスタaは「死んでいる」という。生きている変数の解
析の目的は、各基本ブロックの出口において生きている
変数の集合を求めることである。
の解析」を行う。レジスタaとプログラム中のある点p
に対して、点pでのレジスタaの値が点を始点とするあ
る経路内で使用できるかということを解析し、使用でき
れば「生きている」といい、使用できなければ点pでレ
ジスタaは「死んでいる」という。生きている変数の解
析の目的は、各基本ブロックの出口において生きている
変数の集合を求めることである。
【0125】さらにステップ107で、「ループ最適
化」を行う。ここではステップ105で構成した各自然
なループに対してコード最適化を施し、並列命令実行選
択処理方式を持つパイプライン命令処理装置に有効なコ
ードを生成する。ループの長さ(ループを構成する命令
ブロックの数)を短くし、ループを実行するのに必要な
時間を短くする。
化」を行う。ここではステップ105で構成した各自然
なループに対してコード最適化を施し、並列命令実行選
択処理方式を持つパイプライン命令処理装置に有効なコ
ードを生成する。ループの長さ(ループを構成する命令
ブロックの数)を短くし、ループを実行するのに必要な
時間を短くする。
【0126】図12のステップ107のループ最適化部
において、ステップ111〜113は、「ループ最適化
が可能かどうかの前判定」を行う。
において、ステップ111〜113は、「ループ最適化
が可能かどうかの前判定」を行う。
【0127】まず、ステップ111では、テイラ・ブロ
ックの出口の空フィールド数yを求める。
ックの出口の空フィールド数yを求める。
【0128】次のステップ112では、ステップ111
で求めたyの値により、最適化が可能かどうか判定し、
空きフィールド数y=0の場合は最適化できないので終
了する。
で求めたyの値により、最適化が可能かどうか判定し、
空きフィールド数y=0の場合は最適化できないので終
了する。
【0129】次のステップ113では、ヘッダ・ブロッ
クの入口の命令ブロックおよびテイラ・ブロックの出口
の命令ブロックのレジスタの定義/参照のデータによ
り、最適化が可能かどうかを判定する。ヘッダ・ブロッ
クの入口の命令ブロックでの定義または参照されている
レジスタがテイラ・ブロックの出口の命令ブロックで定
義されている場合(定義/参照の依存関係がある場合)
は最適化ができないので終了する。
クの入口の命令ブロックおよびテイラ・ブロックの出口
の命令ブロックのレジスタの定義/参照のデータによ
り、最適化が可能かどうかを判定する。ヘッダ・ブロッ
クの入口の命令ブロックでの定義または参照されている
レジスタがテイラ・ブロックの出口の命令ブロックで定
義されている場合(定義/参照の依存関係がある場合)
は最適化ができないので終了する。
【0130】ステップ114〜119は、実際の最適化
処理を示す。
処理を示す。
【0131】まずステップ114では、ヘッダ・ブロッ
クの入口の命令ブロックの命令数xを求め、次のステッ
プ115では、ヘッダ・ブロックの入口の命令ブロック
の命令[命令数x]の内、テイラ・ブロックに実行選択
処理を用いずに移動可能な命令[命令数z]および移動
可能な空き命令フィールドmを求める。定義するレジス
タがヘッダ・ブロックの出口の生きている変数に含まれ
ていない命令が移動可能な命令である。また、移動可能
な命令の定義するレジスタが参照されている命令ブロッ
クおよびその命令ブロック以降、かつ参照するレジスタ
が参照されている命令ブロック以降の命令ブロックの空
き命令フィールドが移動可能な空き命令フィールドであ
る。
クの入口の命令ブロックの命令数xを求め、次のステッ
プ115では、ヘッダ・ブロックの入口の命令ブロック
の命令[命令数x]の内、テイラ・ブロックに実行選択
処理を用いずに移動可能な命令[命令数z]および移動
可能な空き命令フィールドmを求める。定義するレジス
タがヘッダ・ブロックの出口の生きている変数に含まれ
ていない命令が移動可能な命令である。また、移動可能
な命令の定義するレジスタが参照されている命令ブロッ
クおよびその命令ブロック以降、かつ参照するレジスタ
が参照されている命令ブロック以降の命令ブロックの空
き命令フィールドが移動可能な空き命令フィールドであ
る。
【0132】次のステップ116では、x(ステップ1
14)とy(ステップ111)、z(ステップ115)
の値により、最適化が可能かどうか判定し、(x−z)
>yの場合は最適化できないので終了する。
14)とy(ステップ111)、z(ステップ115)
の値により、最適化が可能かどうか判定し、(x−z)
>yの場合は最適化できないので終了する。
【0133】次のステップ117〜119は、コードの
移動/複写およびループの再構成を示す。まず、ステッ
プ117でz(ステップ115)にカウントとしたヘッ
ダ・ブロックの入口の命令ブロックの命令をテイラ・ブ
ロックの空きフィールドmに移動する。また、zに挙げ
られなかったヘッダ・ブロックの入口の命令ブロックの
命令は、テイラ・ブロックの出口の空きフィールドに実
行選択処理[+]付で移動する。
移動/複写およびループの再構成を示す。まず、ステッ
プ117でz(ステップ115)にカウントとしたヘッ
ダ・ブロックの入口の命令ブロックの命令をテイラ・ブ
ロックの空きフィールドmに移動する。また、zに挙げ
られなかったヘッダ・ブロックの入口の命令ブロックの
命令は、テイラ・ブロックの出口の空きフィールドに実
行選択処理[+]付で移動する。
【0134】次に、ステップ118で新しい基本ブロッ
クを生成し、ステップ117で移動したヘッダ・ブロッ
クの入口の命令ブロックの命令を複写する。
クを生成し、ステップ117で移動したヘッダ・ブロッ
クの入口の命令ブロックの命令を複写する。
【0135】最後に、ステップ119で、ループの再構
成を行なう。具体的には、ヘッダ・ブロックの先頭の命
令ブロックをヘッダ・ブロックから削除する。これによ
り、ループの長さ(ループを構成する命令ブロックの
数)が1命令ブロック短くなる。また、次に挙げるよう
なフロー情報や分岐先の変更等を行なう。
成を行なう。具体的には、ヘッダ・ブロックの先頭の命
令ブロックをヘッダ・ブロックから削除する。これによ
り、ループの長さ(ループを構成する命令ブロックの
数)が1命令ブロック短くなる。また、次に挙げるよう
なフロー情報や分岐先の変更等を行なう。
【0136】a)ヘッダブロックの前者をテイラ・ブロ
ックとステップ118で生成した新しい基本ブロックF
とする。
ックとステップ118で生成した新しい基本ブロックF
とする。
【0137】b)テイラ・ブロック以外にヘッダ・ブロ
ックを後者とする基本ブロックの後者を、ヘッダ・ブロ
ックからステップ118の新しい基本ブロックFに変更
できる。
ックを後者とする基本ブロックの後者を、ヘッダ・ブロ
ックからステップ118の新しい基本ブロックFに変更
できる。
【0138】c)b)で後者を変更した基本ブロックの
分岐先がヘッダ・ブロックであった場合には、分岐先を
ステップ118の新しい基本ブロックに変更する。
分岐先がヘッダ・ブロックであった場合には、分岐先を
ステップ118の新しい基本ブロックに変更する。
【0139】d)ステップ118の新しい基本ブロック
の前者を、b)で後者を変更した全ての基本ブロックに
する。
の前者を、b)で後者を変更した全ての基本ブロックに
する。
【0140】e)ステップ118の新しい基本ブロック
の後者をヘッダ・ブロックにする。
の後者をヘッダ・ブロックにする。
【0141】図13に示すプログラム・シーケンスに対
して最適化を行うと、図14のプログラム・シーケンス
が得られる。逆向きの辺“E→B”をもつ自然なループ
が最適化が可能であるとすると、命令5〜命令7からな
るヘッダ・ブロックBの入口の命令ブロックの命令につ
いて、ステップ117でまず命令数zにカウントされた
命令6をテイラ・ブロックE内に移動し、残りの命令
(命令5と命令7)をテイラ・ブロックEの出口の命令
ブロックに実行選択処理[+]付で移動する。次にステ
ップ118で命令5〜命令7からなる命令ブロックひと
つをもつ基本ブロックFを生成する。
して最適化を行うと、図14のプログラム・シーケンス
が得られる。逆向きの辺“E→B”をもつ自然なループ
が最適化が可能であるとすると、命令5〜命令7からな
るヘッダ・ブロックBの入口の命令ブロックの命令につ
いて、ステップ117でまず命令数zにカウントされた
命令6をテイラ・ブロックE内に移動し、残りの命令
(命令5と命令7)をテイラ・ブロックEの出口の命令
ブロックに実行選択処理[+]付で移動する。次にステ
ップ118で命令5〜命令7からなる命令ブロックひと
つをもつ基本ブロックFを生成する。
【0142】最後にステップ119でループの再構成を
行い、ヘッダブロックBの先頭の命令ブロック(命令
5,命令6,命令7,NOP)をヘッダ・ブロックから
削除して図14に示すフローに変更される。
行い、ヘッダブロックBの先頭の命令ブロック(命令
5,命令6,命令7,NOP)をヘッダ・ブロックから
削除して図14に示すフローに変更される。
【0143】この場合、ヘッダ・ブロックBの先頭の命
令ブロック(命令5〜NOP)がループから削除され一
命令ブロック分短くなるので、基本ブロックB〜Fのル
ープにおける繰返し命令処理時間が短縮されることにな
る。
令ブロック(命令5〜NOP)がループから削除され一
命令ブロック分短くなるので、基本ブロックB〜Fのル
ープにおける繰返し命令処理時間が短縮されることにな
る。
【0144】図15および図16は本発明の第4の実施
例のフローチャートである。第3の実施例は「自然なル
ープ」の場合を示したが、本実施例は分岐しない場合を
示している。また図17〜図20は並列命令実行選択処
理方式を持つパイプライン命令処理装置のプログラム・
シーケンスに対する本実施例のコード最適化の例であ
る。図17〜図20の各ケースにおいて、(a)は本実
施例の最適化をおこなう前のプログラム・シーケンス、
(b)は最適化後のプログラム・シーケンスである。な
お、ここでは(a)のプログラムは、現在の最適化コン
パイラ技術で提供されている局所的最適化および大域最
適化はすでに施されていると仮定する。
例のフローチャートである。第3の実施例は「自然なル
ープ」の場合を示したが、本実施例は分岐しない場合を
示している。また図17〜図20は並列命令実行選択処
理方式を持つパイプライン命令処理装置のプログラム・
シーケンスに対する本実施例のコード最適化の例であ
る。図17〜図20の各ケースにおいて、(a)は本実
施例の最適化をおこなう前のプログラム・シーケンス、
(b)は最適化後のプログラム・シーケンスである。な
お、ここでは(a)のプログラムは、現在の最適化コン
パイラ技術で提供されている局所的最適化および大域最
適化はすでに施されていると仮定する。
【0145】図15において、第3の実施例と相違する
個所は、ステップ106がなく、ステップ102a,1
07aが変更された点にある。
個所は、ステップ106がなく、ステップ102a,1
07aが変更された点にある。
【0146】ステップ102aは、「フロー解析」であ
り、ラベルの定義/参照関係を解析し、基本ブロック間
の制御の流れを求める。制御の流れは、「前者」と「後
者」、および「辺の種類(分岐成立辺,分岐不成立辺ま
たは関数呼び出し辺)」で示す。前者から後者への制御
が移行するような辺は分岐成立辺、前者の分岐フィール
ドに関数呼び出し命令があり関数からの帰還後に後者の
制御が移行するような辺は関数呼び出し辺、それ以外の
辺が分岐不成立辺である。ステップ102aにより、基
本ブロック間のすべての制御の流れが辺の種類によって
分類される。
り、ラベルの定義/参照関係を解析し、基本ブロック間
の制御の流れを求める。制御の流れは、「前者」と「後
者」、および「辺の種類(分岐成立辺,分岐不成立辺ま
たは関数呼び出し辺)」で示す。前者から後者への制御
が移行するような辺は分岐成立辺、前者の分岐フィール
ドに関数呼び出し命令があり関数からの帰還後に後者の
制御が移行するような辺は関数呼び出し辺、それ以外の
辺が分岐不成立辺である。ステップ102aにより、基
本ブロック間のすべての制御の流れが辺の種類によって
分類される。
【0147】ステップ107aは、「コード最適化」で
ある。ステップ102aのフロー解析の結果から、分岐
不成立辺を取り出し、各分岐不成立辺に対してコード最
適化を施し、分岐が成立しないフローの実行時間を短く
する。図16にステップ107aのコード最適化の詳細
フローを示す。最適化をおこなう分岐不成立分を辺‘A
→B’(A:前者ブロック・B:後者ブロック)とす
る。
ある。ステップ102aのフロー解析の結果から、分岐
不成立辺を取り出し、各分岐不成立辺に対してコード最
適化を施し、分岐が成立しないフローの実行時間を短く
する。図16にステップ107aのコード最適化の詳細
フローを示す。最適化をおこなう分岐不成立分を辺‘A
→B’(A:前者ブロック・B:後者ブロック)とす
る。
【0148】ステップ110〜ステップ113は、「最
適化が可能かどうかの前判定」である。ステップ110
では、分岐不成立辺の後者である基本ブロックBの命令
ブロック数および基本ブロックBの分岐フィールドの情
報から、最適化が可能かどうか判定する。次の条件(図
16では条件αと記述する)が満たされる場合は最適化
ができない。
適化が可能かどうかの前判定」である。ステップ110
では、分岐不成立辺の後者である基本ブロックBの命令
ブロック数および基本ブロックBの分岐フィールドの情
報から、最適化が可能かどうか判定する。次の条件(図
16では条件αと記述する)が満たされる場合は最適化
ができない。
【0149】 条件 1)[基本ブロックB=1命令ブロック] 2)[基本ブロックBの分岐フィールドに分岐命令があ
る] ステップ111では、分岐不成立辺の前者である基本ブ
ロックAの出口の空きフィールド数yを求める。ステッ
プ112では、ステップ111で求めたyの値により、
最適化が可能かどうか判定する。[空きフィールド数y
=0]の場合は最適化できないので終了する。
る] ステップ111では、分岐不成立辺の前者である基本ブ
ロックAの出口の空きフィールド数yを求める。ステッ
プ112では、ステップ111で求めたyの値により、
最適化が可能かどうか判定する。[空きフィールド数y
=0]の場合は最適化できないので終了する。
【0150】次のステップ113では、基本ブロックB
の入口の命令ブロックおよび基本ブロックAの出口の命
令ブロックのレジスタの定義/参照のデータにより、最
適化が可能かどうか判定する。基本ブロックBの入口の
命令ブロックでの定義または参照されているレジスタが
基本ブロックAの出口の命令ブロックで定義されている
場合(定義/参照の依存関係がある場合)は最適化がで
きないので終了となる。
の入口の命令ブロックおよび基本ブロックAの出口の命
令ブロックのレジスタの定義/参照のデータにより、最
適化が可能かどうか判定する。基本ブロックBの入口の
命令ブロックでの定義または参照されているレジスタが
基本ブロックAの出口の命令ブロックで定義されている
場合(定義/参照の依存関係がある場合)は最適化がで
きないので終了となる。
【0151】ステップ114〜ステップ119aは、実
際の最適化処理である。まず、ステップ114では、基
本ブロックBの入口の命令ブロックの命令数xを求め
る。
際の最適化処理である。まず、ステップ114では、基
本ブロックBの入口の命令ブロックの命令数xを求め
る。
【0152】ステップ115では、基本ブロックBの入
口の命令ブロックの命令[命令数x]の内、基本ブロッ
クAに実行選択処理[−]を用いずに移動可能な命令
[命令数z]および移動可能な空きフィールドmを求め
る。基本ブロックBの入口の命令ブロックの命令の内、
その定義するレジスタが後者ブロックBの出口の生きて
いる変数に含まれていない命令が移動可能である。ま
た、移動可能な命令の定義するレジスタが基本ブロック
A中で参照されている命令ブロックおよびその命令ブロ
ック以降、かつ参照するレジスタが定義されている命令
ブロック以降の命令ブロックの空きフィールドが移動可
能な空きフィールドである。
口の命令ブロックの命令[命令数x]の内、基本ブロッ
クAに実行選択処理[−]を用いずに移動可能な命令
[命令数z]および移動可能な空きフィールドmを求め
る。基本ブロックBの入口の命令ブロックの命令の内、
その定義するレジスタが後者ブロックBの出口の生きて
いる変数に含まれていない命令が移動可能である。ま
た、移動可能な命令の定義するレジスタが基本ブロック
A中で参照されている命令ブロックおよびその命令ブロ
ック以降、かつ参照するレジスタが定義されている命令
ブロック以降の命令ブロックの空きフィールドが移動可
能な空きフィールドである。
【0153】ステップ116では、x(ステップ11
4)とy(ステップ111)、z(ステップ115)の
値により、最適化が可能かどうか判定する。[(x−
z)>y]の場合は最適化できず終了となる。
4)とy(ステップ111)、z(ステップ115)の
値により、最適化が可能かどうか判定する。[(x−
z)>y]の場合は最適化できず終了となる。
【0154】ステップ117aは、コードの移動/複写
およびプログラム・フローの変更である。まず、ステッ
プ117aでz(ステップ115)にカウントとして基
本ブロックBの入口の命令ブロックの命令を基本ブロッ
クA(前者ブロック)に移動する。移動する場所は空き
フィールドmである。zに挙げられなかった後者ブロッ
クBの入口の命令ブロックの命令は、前者ブロックAの
出口の空きフィールドに実行選択処理[−]付で移動す
る(ステップ117a)。もし基本ブロックAを前者と
する分岐成立辺が存在しない場合は、基本ブロックBの
入口の命令ブロックの命令はすべて実行選択処理を用い
ずに移動できる。
およびプログラム・フローの変更である。まず、ステッ
プ117aでz(ステップ115)にカウントとして基
本ブロックBの入口の命令ブロックの命令を基本ブロッ
クA(前者ブロック)に移動する。移動する場所は空き
フィールドmである。zに挙げられなかった後者ブロッ
クBの入口の命令ブロックの命令は、前者ブロックAの
出口の空きフィールドに実行選択処理[−]付で移動す
る(ステップ117a)。もし基本ブロックAを前者と
する分岐成立辺が存在しない場合は、基本ブロックBの
入口の命令ブロックの命令はすべて実行選択処理を用い
ずに移動できる。
【0155】次に、118aで基本ブロックBを後者と
する分岐成立辺が存在する場合には、新しい基本ブロッ
クCを生成し、ステップ117aで移動した基本ブロッ
クBの入口の命令ブロックの命令を複写する(ステップ
118a)。
する分岐成立辺が存在する場合には、新しい基本ブロッ
クCを生成し、ステップ117aで移動した基本ブロッ
クBの入口の命令ブロックの命令を複写する(ステップ
118a)。
【0156】最後にプログラム・フローを変更する(ス
テップ119a)。具体的には、分岐不成立辺の後者で
ある基本ブロックBの先頭の命令ブロックを基本ブロッ
クBから削除し、フロー情報や分岐先の変更等をおこな
う(図17〜図20)。これにより、分岐が成立しない
フローにおいて、実行時間が1命令ブロック分短くな
る。
テップ119a)。具体的には、分岐不成立辺の後者で
ある基本ブロックBの先頭の命令ブロックを基本ブロッ
クBから削除し、フロー情報や分岐先の変更等をおこな
う(図17〜図20)。これにより、分岐が成立しない
フローにおいて、実行時間が1命令ブロック分短くな
る。
【0157】ここで、図17〜図20によりフロー情報
や分岐先の変更について説明する。図中の各ケースにお
いて、(a)は本実施例の最適化を行なう前のプログラ
ム・シーケンス、(b)は最適化後のプログラム・シー
ケンスを示し、図中では説明の簡略化のため以下の略記
を用いる。
や分岐先の変更について説明する。図中の各ケースにお
いて、(a)は本実施例の最適化を行なう前のプログラ
ム・シーケンス、(b)は最適化後のプログラム・シー
ケンスを示し、図中では説明の簡略化のため以下の略記
を用いる。
【0158】 図17は(分岐成立辺XからBが存在しない)かつ(最
適化前:B=1命令ブロック)の場合のプログラム・シ
ーケンス図である。
適化前:B=1命令ブロック)の場合のプログラム・シ
ーケンス図である。
【0159】a)基本ブロックAの後者に、基本ブロッ
クBの後者である基本ブロックDを追加する。
クBの後者である基本ブロックDを追加する。
【0160】b)基本ブロックAの後者から基本ブロッ
クBを取り除く。
クBを取り除く。
【0161】c)基本ブロックDの[前者:基本ブロッ
クB]を基本ブロックAに置き換える。
クB]を基本ブロックAに置き換える。
【0162】図18は、(分岐成立辺XからBが存在し
ない)かつ(最適化前:B≠1命令ブロック)の場合の
プログラム・シーケンス図であり、この場合は、特に何
もしない。
ない)かつ(最適化前:B≠1命令ブロック)の場合の
プログラム・シーケンス図であり、この場合は、特に何
もしない。
【0163】図19は、(分岐成立辺からBが存在す
る)かつ(最適化前:B=1命令ブロック)の場合の図
である。
る)かつ(最適化前:B=1命令ブロック)の場合の図
である。
【0164】a)基本ブロックBを後者とする基本ブロ
ックA以外の基本ブロックX(X1 、…Xn )の[後
者:基本ブロックB]を基本ブロックCに置き換える。
ックA以外の基本ブロックX(X1 、…Xn )の[後
者:基本ブロックB]を基本ブロックCに置き換える。
【0165】b)基本ブロックXの[分岐先:基本ブロ
ックB]を基本ブロックCに変更する。
ックB]を基本ブロックCに変更する。
【0166】c)基本ブロックAの後者を“基本ブロッ
クBの後者ブロックD・基本ブロックAの分岐先ブロッ
ク”にする。
クBの後者ブロックD・基本ブロックAの分岐先ブロッ
ク”にする。
【0167】d)基本ブロックCの前者を基本ブロック
Xとする。
Xとする。
【0168】e)基本ブロックCの後者を基本ブロック
Dとする。
Dとする。
【0169】f)基本ブロックCの分岐フィールドに基
本ブロックDへの無条件分岐命令を埋め込む。
本ブロックDへの無条件分岐命令を埋め込む。
【0170】g)基本ブロックDの前者のうち、基本ブ
ロックB以外の基本ブロックをY(Y1 ,…Yn )とす
る。基本ブロックDの前者を“基本ブロックY・基本ブ
ロックA・基本ブロックC”とする。
ロックB以外の基本ブロックをY(Y1 ,…Yn )とす
る。基本ブロックDの前者を“基本ブロックY・基本ブ
ロックA・基本ブロックC”とする。
【0171】図20は、(分岐成立辺からBが存在す
る)かつ(最適化前:B≠1命令ブロック)の場合のプ
ログラム・シーケンス図である。
る)かつ(最適化前:B≠1命令ブロック)の場合のプ
ログラム・シーケンス図である。
【0172】a)基本ブロックBを後者とする基本ブロ
ックA以外の基本ブロックX(X1 、…Xn )の[後
者:基本ブロックB]を基本ブロックCに置き換える。
ックA以外の基本ブロックX(X1 、…Xn )の[後
者:基本ブロックB]を基本ブロックCに置き換える。
【0173】b)基本ブロックXの[分岐先:基本ブロ
ックB]を基本ブロックCに変更する。
ックB]を基本ブロックCに変更する。
【0174】c)基本ブロックAの前者を“基本ブロッ
クA.基本ブロックC”にする。
クA.基本ブロックC”にする。
【0175】d)基本ブロックCの前者を基本ブロック
Xとする。
Xとする。
【0176】e)基本ブロックCの後者を基本ブロック
Bとする。
Bとする。
【0177】f)基本ブロックCの分岐フィールドに基
本ブロックBへの無条件分岐命令を埋め込む。
本ブロックBへの無条件分岐命令を埋め込む。
【0178】
【発明の効果】以上説明したように本発明は、分岐遅延
の生じない並列パイプライン処理方式において、条件分
岐命令を含む命令ブロックの分岐命令以外の命令につい
て、分岐条件の成立/不成立により、実行するかしない
かを選択できるため、分岐命令ブロックの空きフィール
ド増加を抑え、並列パイプライン命令処理装置の処理性
能が向上するという効果がある。また、プログラムの実
行時間の大部分が費やされるループに対して、実行選択
処理を用いた有効なコードを生成できるため、ループの
プログラム実行時間が短縮され、パイプライン命令処理
装置の処理能力を向上することができるという効果があ
る。
の生じない並列パイプライン処理方式において、条件分
岐命令を含む命令ブロックの分岐命令以外の命令につい
て、分岐条件の成立/不成立により、実行するかしない
かを選択できるため、分岐命令ブロックの空きフィール
ド増加を抑え、並列パイプライン命令処理装置の処理性
能が向上するという効果がある。また、プログラムの実
行時間の大部分が費やされるループに対して、実行選択
処理を用いた有効なコードを生成できるため、ループの
プログラム実行時間が短縮され、パイプライン命令処理
装置の処理能力を向上することができるという効果があ
る。
【図1】本発明の一実施例を説明するシステムのブロッ
ク図。
ク図。
【図2】図1のシステムに用いられる命令ブロックの配
置図。
置図。
【図3】図1のシステムに用いられるプログラム・シー
ケンスの配置図。
ケンスの配置図。
【図4】図3の命令ブロック2の具体例の命令ブロック
の配置図。
の配置図。
【図5】図3の加算命令のオブジェクト・フォーマット
の模式的配置図。
の模式的配置図。
【図6】一般のミドル・アライン命令並列化方式におけ
る命令ブロックの配置図。
る命令ブロックの配置図。
【図7】命令実行選択機能を利用したループ最適化を説
明するブロック配置図。
明するブロック配置図。
【図8】本発明の第2の実施例を説明するフローチャー
ト。
ト。
【図9】図8のミドル・アライン並列化方式を説明する
フローチャート。
フローチャート。
【図10】図8のボトム・アライン並列化方式を説明す
るフローチャート。
るフローチャート。
【図11】本発明の第3の実施例を説明するフローチャ
ート。
ート。
【図12】図11のループ最適化部を説明するフローチ
ャート。
ャート。
【図13】図12の最適化前のプログラム・シーケンス
図。
図。
【図14】図12の最適化後のプログラム・シーケンス
図。
図。
【図15】本発明の第4の実施例を説明するフローチャ
ート。
ート。
【図16】図15のコード最適化部を説明するフローチ
ャート。
ャート。
【図17】図16のプログラムフローを変更した第1の
場合の最適化前後のプログラム・シーケンス図。
場合の最適化前後のプログラム・シーケンス図。
【図18】図16のプログラムフローを変更した第2の
場合の最適化前後のプログラムシーケンス図。
場合の最適化前後のプログラムシーケンス図。
【図19】図16のプログラムフローを変更した第3の
場合の最適化前後のプログラム・シーケンス図。
場合の最適化前後のプログラム・シーケンス図。
【図20】図16のプログラムフローを変更した第4の
場合の最適化前後のプログラムシーケンス図。
場合の最適化前後のプログラムシーケンス図。
【図21】トレース・スケジューリング法の概要を説明
する模式図。
する模式図。
【図22】トレース・スケジューリング法の合流および
分岐の処理方法を説明する模式図。
分岐の処理方法を説明する模式図。
1 命令ブロック・メモリ 2 命令ブロック・フェッチ手段 3〜5 命令実行ユニット 6 分岐命令実行ユニット 7 データ・レジスタ 14〜17 オペランド・フェッチ手段 18 アドレス生成手段 19〜21 命令実行手段 22〜25 オペランド・ライト手段 31 命令ブロック・バス 32 アドレス・バス 37〜40 レジスタ・リード・バス 41〜44 ソース・オペランド・バス 45〜48 デスティネーション・オペランド・バス 49〜52 レジスタ・ライト・バス 53 実行選択プラス信号 54 分岐条件成立信号 101〜107,111〜119、S1〜S3,S11
〜S19,S21〜S 26 処理ステップ
〜S19,S21〜S 26 処理ステップ
Claims (5)
- 【請求項1】 複数の命令実行ユニットを備えて複数命
令を並列して実行することにより、分岐遅延を生じない
ようにした並列パイプライン命令処理装置の命令実行処
理方式において、この命令処理装置の処理単位となる命
令で並列実行される複数の命令フィールドで構成される
一つの命令ブロックの分岐命令フィールドに条件分岐命
令がある場合、その命令ブロックの条件分岐命令以外の
各命令について、条件分岐時に命令を実行するか否かを
選択する命令実行選択手段を設けることにより、前記条
件分岐命令を含む命令ブロックの空き命令フィールドを
少くしたことを特徴とする並列パイプライン命令処理装
置の命令実行処理方式。 - 【請求項2】 プログラムの制御フローおよびプログラ
ムのデータ・フローを解析する第1,第2の解析手段
と、前記第1の解析手段で検出した、入口と出口以外で
は停止したり分岐したりしない連続した命令文のかたま
りである基本ブロックを対象として前記第2の解析手段
で得られるデータ・フロー情報をもとにプログラム内の
命令を並列化する第1の並列化手段とを有し、この第1
の並列化手段により、前記基本ブロック内の命令を基本
ブロックの中央付近のサイクルで命令充填率がよく、基
本ブロックの入口や出口の付近では空き命令フィールド
が多くなるように配置する請求項1記載の並列パイプラ
イン命令処理装置の命令実行処理方式。 - 【請求項3】 基本ブロックの最終命令が分岐系命令で
あるか否かを調べる分岐点検手段と、第1,第2の解析
手段の情報に基づき前記基本ブロック内の命令を基本ブ
ロックの出口付近で命令充填率が良くなるように並列化
する第2の並列化手段とを備え、前記分岐点検手段によ
り得られた情報に基づき、その基本ブロックの最終命令
が分岐系命令でなければ、前記第2の並列化手段により
命令を並列化し、その基本ブロックの最終命令が分岐系
命令であれば、第1の並列化手段により命令を並列化す
る請求項2記載の並列パイプライン命令処理装置の命令
実行処理方式。 - 【請求項4】 複数の基本ブロックの連結により構成さ
れるループの有無を検出するループ検出手段と、前記ル
ープの先頭に位置する基本ブロックであるヘッダ・ブロ
ックを構成する命令の中で、そのループの終端に位置す
る基本ブロックであるテイラ・ブロックの空き命令フィ
ールドに移動することのできる命令を検出する命令検出
手段と、前記ヘッダ・ブロックを構成する1個以上の命
令ブロックに相当する命令を前記テイラ・ブロックに移
動可能な場合に移動する移動手段と、この移動した命令
を複写して新たな命令ブロックを生成する命令生成手段
と、この命令生成手段により新たに生成された命令ブロ
ック群からなる基本ブロックを前記ループの前記ヘッダ
・ブロックの直前に挿入してプログラムフローを再構築
する再構築手段とを備え、前記ループ内の命令ブロック
総数を少なくしてコード最適化を行なう請求項1記載の
並列パイプライン命令処理装置の命令実行処理方式。 - 【請求項5】 分岐不成立により論理的に連続する基本
ブロックに対して、後続する基本ブロックを構成する命
令の中で、先行する基本ブロックの空き命令フィールド
に移動することのできる命令を検出する命令検出手段
と、後続する基本ブロックを構成する1個以上の命令ブ
ロックに相当する命令を先行する基本ブロックに移動可
能な場合に移動する移動手段と、この移動した命令を複
写して新たな命令フロックを生成してプログラムフロー
全体を再構築する再構築手段とを備える請求項1記載の
並列パイプライン命令処理装置の命令実行処理方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP6820391A JP2629474B2 (ja) | 1990-04-06 | 1991-04-01 | 並列パイプライン命令処理装置の命令実行処理方式 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2-91581 | 1990-04-06 | ||
JP9158190 | 1990-04-06 | ||
JP6820391A JP2629474B2 (ja) | 1990-04-06 | 1991-04-01 | 並列パイプライン命令処理装置の命令実行処理方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH04215130A JPH04215130A (ja) | 1992-08-05 |
JP2629474B2 true JP2629474B2 (ja) | 1997-07-09 |
Family
ID=26409432
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP6820391A Expired - Lifetime JP2629474B2 (ja) | 1990-04-06 | 1991-04-01 | 並列パイプライン命令処理装置の命令実行処理方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2629474B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04347731A (ja) * | 1991-05-24 | 1992-12-02 | Nec Corp | 並列命令処理装置 |
JP2636136B2 (ja) * | 1993-04-27 | 1997-07-30 | 工業技術院長 | 演算処理装置及び演算処理方法 |
-
1991
- 1991-04-01 JP JP6820391A patent/JP2629474B2/ja not_active Expired - Lifetime
Non-Patent Citations (1)
Title |
---|
情報処理学会第41回(平成2年後期)全国大会講演論文集、(平2−9−4)PP.6−115〜6−116 |
Also Published As
Publication number | Publication date |
---|---|
JPH04215130A (ja) | 1992-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0454985B1 (en) | Scalable compound instruction set machine architecture | |
KR101702651B1 (ko) | 하드웨어 포인터를 이용한 simd 코어 내 분기 해법 | |
US5710902A (en) | Instruction dependency chain indentifier | |
US6044222A (en) | System, method, and program product for loop instruction scheduling hardware lookahead | |
EP0454984B1 (en) | General purpose compounding technique for instruction-level processors | |
US9038042B2 (en) | Staged loop instructions | |
JP4042604B2 (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
US5386562A (en) | Circular scheduling method and apparatus for executing computer programs by moving independent instructions out of a loop | |
US8006072B2 (en) | Reducing data hazards in pipelined processors to provide high processor utilization | |
US8677330B2 (en) | Processors and compiling methods for processors | |
EP0515016A2 (en) | Instruction scheduler for a computer | |
JPH02217926A (ja) | コード生成方法 | |
JP2009524866A (ja) | プログラムの並列実行のためのシステム及び方法 | |
US9830164B2 (en) | Hardware and software solutions to divergent branches in a parallel pipeline | |
US6738893B1 (en) | Method and apparatus for scheduling to reduce space and increase speed of microprocessor operations | |
US6061367A (en) | Processor with pipelining structure and method for high-speed calculation with pipelining processors | |
EP0442623A2 (en) | Reducing pipeline delays in compilers by code hoisting | |
US7565658B2 (en) | Hidden job start preparation in an instruction-parallel processor system | |
KR20150040662A (ko) | 모듈로 스케줄링 방법, 모듈로 스케줄링 장치, 모듈로 스케줄링에 따라서 동작하는 재구성 가능한 프로세서 및 재구성 가능한 프로세서의 동작 방법 | |
WO2004003738A2 (en) | Generating code for a configurable microprocessor | |
JP2629474B2 (ja) | 並列パイプライン命令処理装置の命令実行処理方式 | |
CN113220347B (zh) | 基于多级流水线的指令处理方法、浮点型dsp以及音频设备 | |
KR20150040663A (ko) | 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치 | |
JPH06290057A (ja) | ループ最適化方法 | |
JPH1196018A (ja) | コンパイル装置及び方法並びにコンパイル実行プログラムを記録したコンピュータ読み取り可能な記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 19970225 |