JP3705367B2 - 命令処理方法 - Google Patents
命令処理方法 Download PDFInfo
- Publication number
- JP3705367B2 JP3705367B2 JP2004152762A JP2004152762A JP3705367B2 JP 3705367 B2 JP3705367 B2 JP 3705367B2 JP 2004152762 A JP2004152762 A JP 2004152762A JP 2004152762 A JP2004152762 A JP 2004152762A JP 3705367 B2 JP3705367 B2 JP 3705367B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- processing device
- outside
- branch
- long word
- 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 - Fee Related
Links
Images
Landscapes
- Advance Control (AREA)
Description
本発明は、長語命令を用いる命令処理に係るものであり、並列性を高めた長語命令の生成方法と、生成した長語命令を処理する命令処理装置に関する。
まず従来の一般的な長語命令方式(以下、VLIW方式)を用いる命令処理装置(同プロセッサ)について述べる。
図8には、長語命令(同VLIW命令)流の生成のもととなる、もとのプログラムの構造の例を示す。計算機のプログラムの構造は、実行開始点もしくはある分岐命令の分岐先を先頭とする命令の連続を命令流とみたてると、図に示したようにそれぞれの命令流が互いに分岐命令によって結合された木構造のようにみることができる。
図8には、長語命令(同VLIW命令)流の生成のもととなる、もとのプログラムの構造の例を示す。計算機のプログラムの構造は、実行開始点もしくはある分岐命令の分岐先を先頭とする命令の連続を命令流とみたてると、図に示したようにそれぞれの命令流が互いに分岐命令によって結合された木構造のようにみることができる。
従来では図8に示したような木構造を持つプログラムをVLIW方式のプロセッサで実行しようとする場合、第一の方式として、次のものが説明されている。
まずプログラムのコンパイル時において分岐の方向の予想を立て、例えば図8中の命令流1を選んでこの中で命令の移動を行う。そしてデータに関する依存関係を保ちつつ、できるだけ広い範囲の命令をまとめてVLIW命令を生成している。これをトレース・スケジューリング法と呼ぶ。
この時分岐の予想が外れて図8中の命令流2または3へ分岐が行われて実行が移ったときのために、命令流1の下流から分岐命令を越えて移動した命令の効果を打ち消すような付加的な命令を追加する。この付加的な命令の追加によって、生成されるVLIW命令の量は激しく増加する。
またこの方式では、条件分岐の分岐方向の予想がたてやすいことが一つの条件である。しかし、繰り返し計算などが多く分岐方向の予想が容易である科学技術計算プログラムの他に、オペレーティング・システムやコンパイラなど分岐の予想の立てづらいプログラムも多く存在する。これらの理由から、命令の移動できる範囲には限界があり、多くの命令を移動して高い並列度を得ることは難しい。
また、第二のパーコレーション・スケジューリング法と呼ばれる方式では、命令流1と2、あるいは命令流2と3を同時に見てその範囲内で命令の移動を行ってVLIW命令の生成を行う。この方式では条件分岐の分岐方向を予想する必要はなくなる。
しかしここでもプログラムの正しさを保つために、必要な部分では命令流の組み合わせで場合分けを行ったコピーを生成する。このためこの方式においても、生成されるVLIW命令量の激しい増加が問題となる(例えば、非特許文献1参照。)。
まずプログラムのコンパイル時において分岐の方向の予想を立て、例えば図8中の命令流1を選んでこの中で命令の移動を行う。そしてデータに関する依存関係を保ちつつ、できるだけ広い範囲の命令をまとめてVLIW命令を生成している。これをトレース・スケジューリング法と呼ぶ。
この時分岐の予想が外れて図8中の命令流2または3へ分岐が行われて実行が移ったときのために、命令流1の下流から分岐命令を越えて移動した命令の効果を打ち消すような付加的な命令を追加する。この付加的な命令の追加によって、生成されるVLIW命令の量は激しく増加する。
またこの方式では、条件分岐の分岐方向の予想がたてやすいことが一つの条件である。しかし、繰り返し計算などが多く分岐方向の予想が容易である科学技術計算プログラムの他に、オペレーティング・システムやコンパイラなど分岐の予想の立てづらいプログラムも多く存在する。これらの理由から、命令の移動できる範囲には限界があり、多くの命令を移動して高い並列度を得ることは難しい。
また、第二のパーコレーション・スケジューリング法と呼ばれる方式では、命令流1と2、あるいは命令流2と3を同時に見てその範囲内で命令の移動を行ってVLIW命令の生成を行う。この方式では条件分岐の分岐方向を予想する必要はなくなる。
しかしここでもプログラムの正しさを保つために、必要な部分では命令流の組み合わせで場合分けを行ったコピーを生成する。このためこの方式においても、生成されるVLIW命令量の激しい増加が問題となる(例えば、非特許文献1参照。)。
分岐命令を越えて命令を移動しVLIW命令列の生成を行う場合、分岐の結果の予想が外れた時に、移動した命令の効果をハードウェアで取り消してしまうことも考えられる。このような目的のために、従来から提案されてきた方式には2種類のものがある。
一つはブースティングと呼ばれる方式である。この方式では、分岐命令を越えて移動した命令は投機的実行と呼ぶ特別なモードで実行し、実行結果をハードウェアで一時的に蓄えておく。
例えば、分岐の方向を予め予想して、その方向から分岐命令を越えて命令の移動を行い、移動した命令の実行結果を二重化レジスタなどで蓄える。
この二重化レジスタなどで蓄えられた実行結果は、分岐命令が実行されて分岐の生起/不生起が決定されるとそれに応じて有効化あるいは無効化される。
このような方式では、前述のトレース・スケジューリングのように分岐の方向の予想が立てやすいことが条件となり、予想の立てづらい多くのプログラムでは高い並列度を得ることが困難である。また実行結果を一時的に蓄えるために二重化ファイルなどのハードウェアコストがかかる。このためいくつもの分岐命令を越えて広い範囲から命令を移動させることは難しい(例えば、非特許文献2参照。)。
一つはブースティングと呼ばれる方式である。この方式では、分岐命令を越えて移動した命令は投機的実行と呼ぶ特別なモードで実行し、実行結果をハードウェアで一時的に蓄えておく。
例えば、分岐の方向を予め予想して、その方向から分岐命令を越えて命令の移動を行い、移動した命令の実行結果を二重化レジスタなどで蓄える。
この二重化レジスタなどで蓄えられた実行結果は、分岐命令が実行されて分岐の生起/不生起が決定されるとそれに応じて有効化あるいは無効化される。
このような方式では、前述のトレース・スケジューリングのように分岐の方向の予想が立てやすいことが条件となり、予想の立てづらい多くのプログラムでは高い並列度を得ることが困難である。また実行結果を一時的に蓄えるために二重化ファイルなどのハードウェアコストがかかる。このためいくつもの分岐命令を越えて広い範囲から命令を移動させることは難しい(例えば、非特許文献2参照。)。
分岐命令を越えて移動した命令の効果をハードウェアで取り消せるようにした方式の二番目としては、命令の実行に条件を付けて命令の実行そのものを選択的に取り消せるようにした条件付きの命令実行機構が挙げられる。しかし従来のものでは、VLIW方式のプロセッサに応用する上で充分効果をあげることは困難であった。
例えば、条件分岐命令およびメモリ書き込みを行うストア命令についてその実行を選択的に許可するguard expressionと呼ぶ条件記述を持つことが提案されている。
この例では分岐操作がプロセッサの内部パイプラインによって実行されるのに長い時間がかかることが前提である。この時、分岐先の命令をその分岐命令における分岐条件と同じ条件を記述したguard expressionを加えて実行することにより、パイプラインによる分岐の実行と並列に実行することを可能とする。
ここではguard expressionには条件分岐命令における分岐条件と同じく、さまざまなプログラムの構造の記述が可能なだけの複雑な論理演算による条件記述ができることが求められている。
これは命令の形式の複雑化およびハードウェアのコストの増大を招くので、VLIW方式のプロセッサには効率の良い実装を行うことが困難である。また分岐命令自体は依然として実行されるので、guard expressionによって並列に実行できる命令数が充分ない場合には、分岐命令自体のオーバーヘッドが顕著に現われてしまっていた(例えば、非特許文献3参照。)。
例えば、条件分岐命令およびメモリ書き込みを行うストア命令についてその実行を選択的に許可するguard expressionと呼ぶ条件記述を持つことが提案されている。
この例では分岐操作がプロセッサの内部パイプラインによって実行されるのに長い時間がかかることが前提である。この時、分岐先の命令をその分岐命令における分岐条件と同じ条件を記述したguard expressionを加えて実行することにより、パイプラインによる分岐の実行と並列に実行することを可能とする。
ここではguard expressionには条件分岐命令における分岐条件と同じく、さまざまなプログラムの構造の記述が可能なだけの複雑な論理演算による条件記述ができることが求められている。
これは命令の形式の複雑化およびハードウェアのコストの増大を招くので、VLIW方式のプロセッサには効率の良い実装を行うことが困難である。また分岐命令自体は依然として実行されるので、guard expressionによって並列に実行できる命令数が充分ない場合には、分岐命令自体のオーバーヘッドが顕著に現われてしまっていた(例えば、非特許文献3参照。)。
同様な条件付き実行機構として、すべての命令にその命令の実行が許される条件を、いくつもの条件フラグを用いて記述する方式が提案されている。
この方式においても、条件フラグの導入により条件の記述はいくらか簡単にはなったものの、未だ複雑である。また条件付き実行機構によって分岐命令は削減されるが、後に述べるような本発明の方式とは異なり、実際に実行される命令流をあくまで一つに限ることによって、プログラムをプロセッサ内部においても正しく実行しようとする。このため並列度の抽出および命令のスケジューリングにおいて大きな制限がある。
更に従来までのVLIW方式のプロセッサでは、単一のプログラムから命令流を取り出すのが前提であり、複数のプログラムから多数の命令流を取り出して静的に並列度の高いVLIW命令を生成するようなことは考慮されていなかった(例えば、非特許文献4参照。)。
この方式においても、条件フラグの導入により条件の記述はいくらか簡単にはなったものの、未だ複雑である。また条件付き実行機構によって分岐命令は削減されるが、後に述べるような本発明の方式とは異なり、実際に実行される命令流をあくまで一つに限ることによって、プログラムをプロセッサ内部においても正しく実行しようとする。このため並列度の抽出および命令のスケジューリングにおいて大きな制限がある。
更に従来までのVLIW方式のプロセッサでは、単一のプログラムから命令流を取り出すのが前提であり、複数のプログラムから多数の命令流を取り出して静的に並列度の高いVLIW命令を生成するようなことは考慮されていなかった(例えば、非特許文献4参照。)。
情報処理Vol.31 No.6 pp.763−772の解説「VLIW計算機のためのコンパイラ技術」(中谷登志男、情報処理学会、1990年6月)
Proceesings of the 17th Internatio−nal Symposium on Computer Architect−ure pp.344−354の論文「Boosting Beyond Static Scheduling in a Superscalar Processor」(Michael D. Smith、 Monica S.Lam、and Mark A.Horowits、IEEE、1990)
Proceedings of the 13th Intern−ational Symposium on Computer Archi−tecture pp.386−395の論文「Highly Concur−rent Scalar Processing」(Peter Y.T.Hsu and Edward S.Davidson、IEEE、1986)
情報処理学会論文誌Vol.34 No.12 pp.2599−2611の論文「拡張VLIWプロセッサGIFTにおける命令レベル並列処理機構」(小松秀昭ほか、情報処理学会、1993年12月)
上記のように、従来のVLIW方式のプロセッサでは、ソース・プログラムとの整合性を厳密に保っている。即ち、命令を分岐命令を越えて移動させる場合は、その実行をすべて取り消せるように付加的な命令を加え、VLIW命令列の生成を行っていた。
この制約は非常に大きく、付加的な命令も多くなり、命令の移動には限界がある。このため得られる並列性が充分でなく、ハードウェアが提供できる並列度を充分使い切れていなかった。プロセッサ内の演算器の数を増やすなどハードウェアを強化したとしても、それに見合うような性能向上が得られないという問題があった。
この制約は非常に大きく、付加的な命令も多くなり、命令の移動には限界がある。このため得られる並列性が充分でなく、ハードウェアが提供できる並列度を充分使い切れていなかった。プロセッサ内の演算器の数を増やすなどハードウェアを強化したとしても、それに見合うような性能向上が得られないという問題があった。
更に、従来提案されているような条件付き実行機構も、同じく仮に実行しようとした命令をすべて取り消すために複雑なハードウェアや命令形式が必要となる。このためVLIW方式のプロセッサへ適用して高い効果をあげることは難しい。
また従来は、複数のプログラムからそれぞれ独立した実行条件を持つ命令流を取り出して、単一のVLIW命令列を生成するような応用はまったく考慮されていなかった。従って、複数のプログラムから取り出した多数の命令流を用いて、静的に単一のVLIW命令列へ合成して高い並列度を得ることは非常に困難であった。
また従来は、複数のプログラムからそれぞれ独立した実行条件を持つ命令流を取り出して、単一のVLIW命令列を生成するような応用はまったく考慮されていなかった。従って、複数のプログラムから取り出した多数の命令流を用いて、静的に単一のVLIW命令列へ合成して高い並列度を得ることは非常に困難であった。
本発明の目的は、一つ以上のプログラムから複数の命令流を取り出し、高い並列度を持ったVLIW命令列を生成することにある。
本発明の他の目的は、上記生成したVLIW命令列を実行するための手段を提供することにある。
本発明の他の目的は、上記生成したVLIW命令列を実行するための手段を提供することにある。
上記目的を達成するため、本発明の長語命令生成方法は、
1以上のプログラムから、n個(nは2以上)の演算命令フィールドを持ち各演算命令フィールドにはそれぞれの演算命令か無操作命令を指定することによって最大n個の演算を指定することのできる長語命令からなる新たな長語命令流を静的に生成する長語命令生成方法であり、
元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、命令処理装置内部あるいは外部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第1種の演算と、命令処理装置内部あるいは外部のデータを用いて演算を行い、演算結果を命令処理装置外部に出力し、その出力動作を、命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第2種の演算とに変換し、
各長語命令を前記第1種の演算i個(iは0個以上)と前記第2種の演算j個(jは0個以上)で構成するようにしている。
また、元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、命令処理装置内部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第1種の演算と、演算に用いるデータを命令処理装置外部から入力するか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行い、該入力動作または出力動作を、命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第2種の演算とに変換し、
各長語命令を前記第1種の演算i個(iは0個以上)と前記第2種の演算j個(jは0個以上)で構成するようにしている。
さらに、前記の長語命令を構成する演算として、命令処理装置内部もしくは外部のデータの値を用いて条件判定をすることにより次に実行する長語命令の場所を長語命令流中の別個の場所へ選択的に変更する第3種の演算である条件分岐演算を生成し、各長語命令を前記第1種の演算i個(iは0個以上)と前記第2種の演算j個(jは0個以上)と前記第3種の演算k個(kは0個以上)で構成するようにしている。
1以上のプログラムから、n個(nは2以上)の演算命令フィールドを持ち各演算命令フィールドにはそれぞれの演算命令か無操作命令を指定することによって最大n個の演算を指定することのできる長語命令からなる新たな長語命令流を静的に生成する長語命令生成方法であり、
元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、命令処理装置内部あるいは外部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第1種の演算と、命令処理装置内部あるいは外部のデータを用いて演算を行い、演算結果を命令処理装置外部に出力し、その出力動作を、命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第2種の演算とに変換し、
各長語命令を前記第1種の演算i個(iは0個以上)と前記第2種の演算j個(jは0個以上)で構成するようにしている。
また、元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、命令処理装置内部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第1種の演算と、演算に用いるデータを命令処理装置外部から入力するか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行い、該入力動作または出力動作を、命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第2種の演算とに変換し、
各長語命令を前記第1種の演算i個(iは0個以上)と前記第2種の演算j個(jは0個以上)で構成するようにしている。
さらに、前記の長語命令を構成する演算として、命令処理装置内部もしくは外部のデータの値を用いて条件判定をすることにより次に実行する長語命令の場所を長語命令流中の別個の場所へ選択的に変更する第3種の演算である条件分岐演算を生成し、各長語命令を前記第1種の演算i個(iは0個以上)と前記第2種の演算j個(jは0個以上)と前記第3種の演算k個(kは0個以上)で構成するようにしている。
また、本発明の命令処理装置は、
n個(nは1以上)の演算ユニットを持ち、最大n個の演算を並列に実行する手段を有する命令処理装置であって、前記n個の演算ユニットは、命令処理装置内部あるいは外部のデータを用いて演算を行い、結果を命令処理装置内部に蓄える演算を処理する第1種の演算ユニットi個(iは0以上)と、命令処理装置内部あるいは外部のデータを用いて演算を行い、演算結果を命令処理装置外部に出力する演算を処理し、かつ命令処理装置内部もしくは外部のデータの値によってその出力動作を選択的に取り消す手段を有する第2種の演算ユニットj個(jは0以上)を備えるようにしている。
また、前記n個の演算ユニットは、命令処理装置内部のデータを用いて演算を行い、結果も命令処理装置内部に蓄える演算を処理する第1種の演算ユニットi個(iは0以上)と、演算に用いるデータを命令処理装置外部から得るか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行う演算を処理し、かつ命令処理装置内部もしくは外部のデータの値によってその入力動作または出力動作を選択的に取り消す手段を有する第2種の演算ユニットj個(jは0以上)を備えるようにしている。
さらに、前記n個の演算ユニットの中に、命令処理装置内部もしくは外部のデータの値を用いて条件判定をすることにより次に実行する長語命令の場所を長語命令流中の別個の場所へ選択的に変更する条件分岐演算を処理する第3種の演算ユニットk個(kは0以上)を備えるようにしている。
n個(nは1以上)の演算ユニットを持ち、最大n個の演算を並列に実行する手段を有する命令処理装置であって、前記n個の演算ユニットは、命令処理装置内部あるいは外部のデータを用いて演算を行い、結果を命令処理装置内部に蓄える演算を処理する第1種の演算ユニットi個(iは0以上)と、命令処理装置内部あるいは外部のデータを用いて演算を行い、演算結果を命令処理装置外部に出力する演算を処理し、かつ命令処理装置内部もしくは外部のデータの値によってその出力動作を選択的に取り消す手段を有する第2種の演算ユニットj個(jは0以上)を備えるようにしている。
また、前記n個の演算ユニットは、命令処理装置内部のデータを用いて演算を行い、結果も命令処理装置内部に蓄える演算を処理する第1種の演算ユニットi個(iは0以上)と、演算に用いるデータを命令処理装置外部から得るか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行う演算を処理し、かつ命令処理装置内部もしくは外部のデータの値によってその入力動作または出力動作を選択的に取り消す手段を有する第2種の演算ユニットj個(jは0以上)を備えるようにしている。
さらに、前記n個の演算ユニットの中に、命令処理装置内部もしくは外部のデータの値を用いて条件判定をすることにより次に実行する長語命令の場所を長語命令流中の別個の場所へ選択的に変更する条件分岐演算を処理する第3種の演算ユニットk個(kは0以上)を備えるようにしている。
本発明によれば、一つ以上のプログラムの計算木から複数の命令流を取り出して、高い並列度を持ったVLIW命令列を生成することができる。
また、生成したVLIW命令列をその高い並列度で実行することができる。
また、生成したVLIW命令列をその高い並列度で実行することができる。
本発明の一実施例を図によって、説明する。
図1は、本発明によるVLIW命令の生成方法の例である。元のプログラムが図1(a)に示したような命令流1、2、及び3からなるとき、まず初めにこれらの間を結合している条件分岐命令をすべて取り除く。
次に図1(b)に示すようにそれぞれの命令流中の演算命令を、データの依存関係を保ちながらVLIW命令へ合成する。すなわち、各点線内の独立命令がVLIW命令化される。
この時プロセッサ外部へデータを出力するストア命令については、元の命令流2の実行条件を参照してストア動作を行うように、条件付きストア命令に置き換える。
このようにすることによって分岐命令は消滅し、命令を自由に移動して高い並列度をもったVLIW命令を生成することが可能となる。
図1のVLIW命令生成方法で最も特徴的な点は、図1(a)に示した元のプログラムの構造のままでは最終的には分岐命令によって命令流1、2、または3のいずれかが選ばれて実行されるのに対し、図1(b)に示したようにVLIW命令を生成すると、命令流2に含まれていたストア命令が条件付きとなる以外は、命令流1、2、3のすべての演算命令が実行されてしまうことである。
次に図1(b)に示すようにそれぞれの命令流中の演算命令を、データの依存関係を保ちながらVLIW命令へ合成する。すなわち、各点線内の独立命令がVLIW命令化される。
この時プロセッサ外部へデータを出力するストア命令については、元の命令流2の実行条件を参照してストア動作を行うように、条件付きストア命令に置き換える。
このようにすることによって分岐命令は消滅し、命令を自由に移動して高い並列度をもったVLIW命令を生成することが可能となる。
図1のVLIW命令生成方法で最も特徴的な点は、図1(a)に示した元のプログラムの構造のままでは最終的には分岐命令によって命令流1、2、または3のいずれかが選ばれて実行されるのに対し、図1(b)に示したようにVLIW命令を生成すると、命令流2に含まれていたストア命令が条件付きとなる以外は、命令流1、2、3のすべての演算命令が実行されてしまうことである。
図2は、本発明によるVLIW命令の形式の例である。
図2(a)はプロセッサ外部に値を出力するストア命令を条件付きとした例である。
図中の各演算命令フィールド中、OPには演算の種類あるいは無操作命令であることの指定、Radrにはロード命令またはストア命令で用いるアドレス計算に用いるレジスタ、Dispにはアドレス計算に用いるディスプレースメントの指定を行う。
またRdistにはロード命令または演算命令で結果を格納するレジスタを、Rsrc、 Rsrc1、 Rsrc2にはストア命令または演算命令で演算に用いるデータを格納しているレジスタを指定する。
最後にRcondには条件付きストア命令での条件判定の対象となるデータ(すなわち、図1(a)における条件分岐命令における条件判定に用いられるデータに対応する)を格納しているレジスタを指定する。
この形式によって図1のようなVLIW命令の生成が可能となる。
図2(a)はプロセッサ外部に値を出力するストア命令を条件付きとした例である。
図中の各演算命令フィールド中、OPには演算の種類あるいは無操作命令であることの指定、Radrにはロード命令またはストア命令で用いるアドレス計算に用いるレジスタ、Dispにはアドレス計算に用いるディスプレースメントの指定を行う。
またRdistにはロード命令または演算命令で結果を格納するレジスタを、Rsrc、 Rsrc1、 Rsrc2にはストア命令または演算命令で演算に用いるデータを格納しているレジスタを指定する。
最後にRcondには条件付きストア命令での条件判定の対象となるデータ(すなわち、図1(a)における条件分岐命令における条件判定に用いられるデータに対応する)を格納しているレジスタを指定する。
この形式によって図1のようなVLIW命令の生成が可能となる。
図2(b)はストア命令と共にロード命令も条件付きとして構成した例である。
図中Rdataにはロード命令ではロードした結果を格納するレジスタ、ストア命令ではストアするデータを格納しているレジスタを指定する。
このようにロード命令による入力動作も条件的な取り消しができる構成としなければならない場合は二つある。
一つは、そのシステムでデータメモリの中に非破壊読み出しのできない部分があり、本来はそのロード命令の属する命令流の実行条件が成立していなくて行われないはずの入力動作を行ってしまうと、副作用が生じる場合である。
また二つ目は、データメモリからの入力動作に時間的に大きなコストがかかる部分があり、同じく本来は行われないはずの入力動作を行ってしまうと、プログラムの実行時間が長くなってしまう場合である。
これらの状況が生じないシステムでは、選択的に入力動作を取り消す必要はなく、必要でないロード・データが得られても、単に読み捨ててしまうような命令列を生成すればよい。
図中Rdataにはロード命令ではロードした結果を格納するレジスタ、ストア命令ではストアするデータを格納しているレジスタを指定する。
このようにロード命令による入力動作も条件的な取り消しができる構成としなければならない場合は二つある。
一つは、そのシステムでデータメモリの中に非破壊読み出しのできない部分があり、本来はそのロード命令の属する命令流の実行条件が成立していなくて行われないはずの入力動作を行ってしまうと、副作用が生じる場合である。
また二つ目は、データメモリからの入力動作に時間的に大きなコストがかかる部分があり、同じく本来は行われないはずの入力動作を行ってしまうと、プログラムの実行時間が長くなってしまう場合である。
これらの状況が生じないシステムでは、選択的に入力動作を取り消す必要はなく、必要でないロード・データが得られても、単に読み捨ててしまうような命令列を生成すればよい。
図2(c)には、(b)に対して、分岐命令も付加した形式の例を示す。
ここで、この分岐命令は元のプログラム中に含まれていたものではないことに注意を要する。
即ち、図1で示したように元のプログラム中の分岐命令は一旦すべて取り除かれてVLIW命令が生成される。その過程においてVLIW命令に合成すべき元の命令流の数がそのときのVLIW命令の並列度(図2(c)ではロード/ストア命令2、演算命令4の計6)に対して過度に増え過ぎたとき、一部の命令流をその実行条件で排除して残りの命令流からVLIW命令流を生成できるようにするために、後から付加するものである。
例えば図1の例で言えば、命令流の数を3から2に減らそうとするとき、分岐先には命令流2と3、分岐しなかったときの実行先には命令流1と2から合成したVLIW命令流を置き、分岐条件として命令流3の実行条件、すなわち、命令流2から命令流3へ分岐する分岐条件、を用いた条件分岐命令を付加すればよい。 この場合には、命令流2の命令は分岐の有無にかかわらずVLIW命令に含まれることになる。
ここで、この分岐命令は元のプログラム中に含まれていたものではないことに注意を要する。
即ち、図1で示したように元のプログラム中の分岐命令は一旦すべて取り除かれてVLIW命令が生成される。その過程においてVLIW命令に合成すべき元の命令流の数がそのときのVLIW命令の並列度(図2(c)ではロード/ストア命令2、演算命令4の計6)に対して過度に増え過ぎたとき、一部の命令流をその実行条件で排除して残りの命令流からVLIW命令流を生成できるようにするために、後から付加するものである。
例えば図1の例で言えば、命令流の数を3から2に減らそうとするとき、分岐先には命令流2と3、分岐しなかったときの実行先には命令流1と2から合成したVLIW命令流を置き、分岐条件として命令流3の実行条件、すなわち、命令流2から命令流3へ分岐する分岐条件、を用いた条件分岐命令を付加すればよい。 この場合には、命令流2の命令は分岐の有無にかかわらずVLIW命令に含まれることになる。
図3は、図2(a)のVLIW命令を実行するように構成したのプロセッサの例である。
図中にはまた、主記憶2が示されている。主記憶2にはVLIW命令列が格納され、プロセッサからの要求に従ってVLIW命令の供給を行う。更にこれに加えてプロセッサ外部のデータ記憶要素としても働き、プロセッサからの要求に従って、データの入出力を行う。この主記憶2には命令キャッシュあるいはデータキャッシュを含んでいてもよい。
プロセッサ内は、図3の例では1個の命令フェッチ部10、1個の命令発行部11、1個のロードユニット12、1個のストアユニット13、4個の内部演算ユニット14、1個の汎用レジスタファイル16と、これらの構成要素を相互に結合するデータパスからなる。更に図3では、ストア命令について条件付き実行機構を実現するために、1個のストア条件判定ユニット15が設けられている。
図3において最も特徴的なことは、汎用レジスタファイル16に一つ以上の命令流用の汎用レジスタ群が保持されていることである。これらの汎用レジスタ群の各命令流への割り当てはVLIW命令生成時に静的に行われる。
これらの汎用レジスタ群では、それぞれの命令流で用いる演算のデータに加えて、その命令流へ分岐が生じて実行される条件を、データとして保持している。
そしてそれぞれの命令流を並列に実行してしまい、ストア命令によるプロセッサ外部に対する出力動作のみをその汎用レジスタに保持した実行条件で選択的に取り消すのである。このようにすることによって、並列度を大きく高めることができる。
図中にはまた、主記憶2が示されている。主記憶2にはVLIW命令列が格納され、プロセッサからの要求に従ってVLIW命令の供給を行う。更にこれに加えてプロセッサ外部のデータ記憶要素としても働き、プロセッサからの要求に従って、データの入出力を行う。この主記憶2には命令キャッシュあるいはデータキャッシュを含んでいてもよい。
プロセッサ内は、図3の例では1個の命令フェッチ部10、1個の命令発行部11、1個のロードユニット12、1個のストアユニット13、4個の内部演算ユニット14、1個の汎用レジスタファイル16と、これらの構成要素を相互に結合するデータパスからなる。更に図3では、ストア命令について条件付き実行機構を実現するために、1個のストア条件判定ユニット15が設けられている。
図3において最も特徴的なことは、汎用レジスタファイル16に一つ以上の命令流用の汎用レジスタ群が保持されていることである。これらの汎用レジスタ群の各命令流への割り当てはVLIW命令生成時に静的に行われる。
これらの汎用レジスタ群では、それぞれの命令流で用いる演算のデータに加えて、その命令流へ分岐が生じて実行される条件を、データとして保持している。
そしてそれぞれの命令流を並列に実行してしまい、ストア命令によるプロセッサ外部に対する出力動作のみをその汎用レジスタに保持した実行条件で選択的に取り消すのである。このようにすることによって、並列度を大きく高めることができる。
以下、図3の例における各部の機能を説明する。
命令フェッチ部10の機能は、命令メモリに対して要求を出し、図2に示したようなVLIW命令を一つずつ読み出し命令発行部11に送ることである。命令フェッチ部10の中には次のVLIW命令を読み出す位置を示すプログラムカウンタが含まれる。その値は図中の命令フェッチ部から主記憶2へのアドレスパス101(IAdr)に出力されている。
主記憶2から読み出されたVLIW命令はデータパス102(IData)によって送られてくる。
命令発行部11では、まず命令フェッチ部10より供給されたVLIW命令の各演算フィールドを調べる。そしてそれぞれが無操作命令(nop命令)でないとき、対応する演算ユニットに命令を発行する。この時それぞれの演算フィールドの命令で指定されるソースオペランド・レジスタの値も汎用レジスタファイル16から読み出し、それぞれの演算ユニットへ供給する。
演算ユニットは、プロセッサ外部からのデータの入力を行うロード命令を処理するロードユニット12、プロセッサ外部へのデータの出力を行うストア命令を処理するストアユニット13、及びプロセッサ内部のデータ即ち図3では汎用レジスタファイル16からのデータを用いて演算を行い、結果もプロセッサ内、汎用レジスタファイル16に格納する命令を処理する内部演算ユニット14の三つの種類に分かれる。
これらの演算ユニットはパイプライン化されており、VLIW命令が1ワード読み込まれる毎に命令発行部11から発行された命令をそれぞれ受け取ることができるものとする。
命令フェッチ部10の機能は、命令メモリに対して要求を出し、図2に示したようなVLIW命令を一つずつ読み出し命令発行部11に送ることである。命令フェッチ部10の中には次のVLIW命令を読み出す位置を示すプログラムカウンタが含まれる。その値は図中の命令フェッチ部から主記憶2へのアドレスパス101(IAdr)に出力されている。
主記憶2から読み出されたVLIW命令はデータパス102(IData)によって送られてくる。
命令発行部11では、まず命令フェッチ部10より供給されたVLIW命令の各演算フィールドを調べる。そしてそれぞれが無操作命令(nop命令)でないとき、対応する演算ユニットに命令を発行する。この時それぞれの演算フィールドの命令で指定されるソースオペランド・レジスタの値も汎用レジスタファイル16から読み出し、それぞれの演算ユニットへ供給する。
演算ユニットは、プロセッサ外部からのデータの入力を行うロード命令を処理するロードユニット12、プロセッサ外部へのデータの出力を行うストア命令を処理するストアユニット13、及びプロセッサ内部のデータ即ち図3では汎用レジスタファイル16からのデータを用いて演算を行い、結果もプロセッサ内、汎用レジスタファイル16に格納する命令を処理する内部演算ユニット14の三つの種類に分かれる。
これらの演算ユニットはパイプライン化されており、VLIW命令が1ワード読み込まれる毎に命令発行部11から発行された命令をそれぞれ受け取ることができるものとする。
内部演算ユニット14は、それぞれ汎用レジスタファイル16より2個までのデータを受け取って、命令発行部11より発行された演算命令を実行する。演算結果は汎用レジスタファイル16中の、命令で指定されたレジスタに書き戻される。
ロードユニット12は、命令発行部11よりロード命令を受け取ると同時に、ロードを行うアドレス計算に用いるレジスタの値を汎用レジスタフィアル16より受け取って処理を開始する。
読み出したレジスタの値と命令中のディスプレースメント値からロードを行うアドレスを決定し、アドレスパス121(Adr)に出力する。主記憶より読み出されたデータはデータパス122(Data)によってロードユニット12に供給され、汎用レジスタファイル16中の命令で指定されたレジスタに格納される。
ストアユニット13は、命令発行部11よりストア命令を受け取ると同時に、ストアを行うアドレス計算に用いるレジスタの値及びストアするためのデータを汎用レジスタフィアル16より受け取って処理を開始する。
読み出したレジスタの値と命令中のディスプレースメント値からストアを行うアドレスを決定し、アドレスパス131(Adr)に出力する。また同時にデータパス132(Data)にはストアするデータを出力して、ストア判定ユニット15に送る。
ストア判定ユニット15では命令発行部11よりストアする条件指定の選択信号と、汎用レジスタファイル16より条件判定の対象となるデータを受け取って条件判定を行う。
条件が成立したら、ストアユニット13より供給されたストア・アドレス及びデータをアドレスパス151(Adr)、データパス152(Data)に出力して主記憶に送り、ストア動作を完了させる。
条件が不成立の場合はストアユニット13より供給されたアドレス及びデータはアドレスパス151、データパス152へ出力されない。
ロードユニット12は、命令発行部11よりロード命令を受け取ると同時に、ロードを行うアドレス計算に用いるレジスタの値を汎用レジスタフィアル16より受け取って処理を開始する。
読み出したレジスタの値と命令中のディスプレースメント値からロードを行うアドレスを決定し、アドレスパス121(Adr)に出力する。主記憶より読み出されたデータはデータパス122(Data)によってロードユニット12に供給され、汎用レジスタファイル16中の命令で指定されたレジスタに格納される。
ストアユニット13は、命令発行部11よりストア命令を受け取ると同時に、ストアを行うアドレス計算に用いるレジスタの値及びストアするためのデータを汎用レジスタフィアル16より受け取って処理を開始する。
読み出したレジスタの値と命令中のディスプレースメント値からストアを行うアドレスを決定し、アドレスパス131(Adr)に出力する。また同時にデータパス132(Data)にはストアするデータを出力して、ストア判定ユニット15に送る。
ストア判定ユニット15では命令発行部11よりストアする条件指定の選択信号と、汎用レジスタファイル16より条件判定の対象となるデータを受け取って条件判定を行う。
条件が成立したら、ストアユニット13より供給されたストア・アドレス及びデータをアドレスパス151(Adr)、データパス152(Data)に出力して主記憶に送り、ストア動作を完了させる。
条件が不成立の場合はストアユニット13より供給されたアドレス及びデータはアドレスパス151、データパス152へ出力されない。
以上のような各演算ユニットの動作は独立して並列に行われるので、汎用レジスタファイル16からのデータの供給及び書き戻しには、この並列動作を妨げないだけの能力が要求される。
このため図3の例では、汎用レジスタファイル16は読み出しポート12、書き込みポート5の計17ポートのマルチポートレジスタファイルとなっている。
同様に主記憶2に対してもロード/ストアユニットの動作を妨げないだけのデータ供給/書き込み能力が要求される。
図3では二つの読み出しポート及び一つの書き込みポートを持つマルチポートメモリとなっている。このような主記憶の構成は、キャッシュなどを用いることによって容易に実現できる。
このため図3の例では、汎用レジスタファイル16は読み出しポート12、書き込みポート5の計17ポートのマルチポートレジスタファイルとなっている。
同様に主記憶2に対してもロード/ストアユニットの動作を妨げないだけのデータ供給/書き込み能力が要求される。
図3では二つの読み出しポート及び一つの書き込みポートを持つマルチポートメモリとなっている。このような主記憶の構成は、キャッシュなどを用いることによって容易に実現できる。
図4にストア判定ユニット15の一実施例を示す。
入出力動作を許可するか否かの実行条件のデータは、汎用レジスタファイル16よりデータパス161(Rcond)によって供給されて、条件データバッファ41に蓄えられる。条件データバッファ41に蓄えられた値は条件判定回路43により正(+)、負(−)、零(=0)、非零(≠0)の各条件について判定される。
どの条件判定の結果が選ばれるかは、命令発行部11からの条件指定のための選択信号によりセレクタ44によって決定される。
これによって選ばれた条件判定の結果が成立していた時のみ出力ゲート42が開かれ、アドレスパス131、データパス132に供給されたストア・アドレス及びストア・データがアドレスパス151及びデータパス152に出力されて主記憶2へ送られる。これによって条件付きのストア命令の処理が実現される。
入出力動作を許可するか否かの実行条件のデータは、汎用レジスタファイル16よりデータパス161(Rcond)によって供給されて、条件データバッファ41に蓄えられる。条件データバッファ41に蓄えられた値は条件判定回路43により正(+)、負(−)、零(=0)、非零(≠0)の各条件について判定される。
どの条件判定の結果が選ばれるかは、命令発行部11からの条件指定のための選択信号によりセレクタ44によって決定される。
これによって選ばれた条件判定の結果が成立していた時のみ出力ゲート42が開かれ、アドレスパス131、データパス132に供給されたストア・アドレス及びストア・データがアドレスパス151及びデータパス152に出力されて主記憶2へ送られる。これによって条件付きのストア命令の処理が実現される。
図5は、図2(b)の形式のVLIW命令を実行するように構成したプロセッサの例である。
図5ではロード命令もストア命令と同じく条件付きとするために、ロード/ストア動作の両方に対して条件的に実行を取り消すことのできるロード/ストア判定ユニット18を2個備えている。
これらはロード命令及びストア命令のいずれをも処理することのできる2個のロード/ストアユニット17と主記憶2との間にそれぞれ位置する。
このロード/ストア判定ユニット18は、命令発行部11から条件指定の選択信号、ロード/ストアユニット17よりロード/ストア動作を行うアドレス及びデータと、ロードかストアを指定する制御信号(図示省略されている)、汎用レジスタファイル16より実行条件のデータ(Rcond)を受け取ることによって動作する。
命令発行部11からの条件指定の選択信号によって先の図4のストア判定ユニット15と同じく判定すべき条件を選択し、選択された条件が成立している時にのみ、ロード/ストアユニット17からのロード/ストア要求を主記憶2に伝え、ロード/ストア処理を実行する。以上の他は、図5の構成例は図3の構成例と同じである。
図5ではロード命令もストア命令と同じく条件付きとするために、ロード/ストア動作の両方に対して条件的に実行を取り消すことのできるロード/ストア判定ユニット18を2個備えている。
これらはロード命令及びストア命令のいずれをも処理することのできる2個のロード/ストアユニット17と主記憶2との間にそれぞれ位置する。
このロード/ストア判定ユニット18は、命令発行部11から条件指定の選択信号、ロード/ストアユニット17よりロード/ストア動作を行うアドレス及びデータと、ロードかストアを指定する制御信号(図示省略されている)、汎用レジスタファイル16より実行条件のデータ(Rcond)を受け取ることによって動作する。
命令発行部11からの条件指定の選択信号によって先の図4のストア判定ユニット15と同じく判定すべき条件を選択し、選択された条件が成立している時にのみ、ロード/ストアユニット17からのロード/ストア要求を主記憶2に伝え、ロード/ストア処理を実行する。以上の他は、図5の構成例は図3の構成例と同じである。
図6は、図2(c)の形式のVLIW命令を実行するように構成したプロセッサの例である。
図6では図5の構成例に対して、更に条件分岐命令を処理する条件分岐処理ユニット19が付加されている。
条件分岐処理ユニット19は、命令フェッチ部10からデータパス191(NextAdr)に次のVLIW命令読み出しアドレスを、命令発行部11から条件分岐命令として分岐先オフセットや条件指定の選択信号を、汎用レジスタファイル16からはデータパス162(Rcond)に実行条件のデータを受け取ることで処理を行う。
指定された条件が成立している時のみ、与えられた次のVLIW命令読み出しアドレスや分岐先オフセットを用いて計算した分岐先をデータパス192(BranchAdr)に出力して命令フェッチ部10に伝達し、VLIW命令の読み出しアドレスを変更することで分岐を行わせる。
図6では図5の構成例に対して、更に条件分岐命令を処理する条件分岐処理ユニット19が付加されている。
条件分岐処理ユニット19は、命令フェッチ部10からデータパス191(NextAdr)に次のVLIW命令読み出しアドレスを、命令発行部11から条件分岐命令として分岐先オフセットや条件指定の選択信号を、汎用レジスタファイル16からはデータパス162(Rcond)に実行条件のデータを受け取ることで処理を行う。
指定された条件が成立している時のみ、与えられた次のVLIW命令読み出しアドレスや分岐先オフセットを用いて計算した分岐先をデータパス192(BranchAdr)に出力して命令フェッチ部10に伝達し、VLIW命令の読み出しアドレスを変更することで分岐を行わせる。
図7は条件分岐処理ユニット19の一実施例である。
分岐を行うか否かの実行条件のデータは汎用レジスタファイル16よりデータパス162(Rcond)によって供給され、条件データバッファ51に蓄えられる。条件データバッファ51に蓄えられた値は条件判定回路53により正(+)、負(−)、零(=0)、非零(≠0)の各条件について判定される。どの条件判定の結果が選ばれるかは、命令発行部11からの条件指定のための選択信号によりセレクタ54によって決定される。
これによって選ばれた条件判定の結果が成立していた時のみ出力ゲート52が開かれる。分岐先は命令発行部11からの分岐先オフセットと命令フェッチ部10からの次のVLIW命令読み出しアドレスNextAdrを用いて分岐先加算器55により計算される。この計算された分岐先が分岐先出力ゲート52が開かれることによってデータパス192(BranchAdr)に出力され、命令フェッチ部10へ伝達される。
分岐を行うか否かの実行条件のデータは汎用レジスタファイル16よりデータパス162(Rcond)によって供給され、条件データバッファ51に蓄えられる。条件データバッファ51に蓄えられた値は条件判定回路53により正(+)、負(−)、零(=0)、非零(≠0)の各条件について判定される。どの条件判定の結果が選ばれるかは、命令発行部11からの条件指定のための選択信号によりセレクタ54によって決定される。
これによって選ばれた条件判定の結果が成立していた時のみ出力ゲート52が開かれる。分岐先は命令発行部11からの分岐先オフセットと命令フェッチ部10からの次のVLIW命令読み出しアドレスNextAdrを用いて分岐先加算器55により計算される。この計算された分岐先が分岐先出力ゲート52が開かれることによってデータパス192(BranchAdr)に出力され、命令フェッチ部10へ伝達される。
次に実際に用いられるVLIW命令列の例を説明する。
図9に示したのは、図2の本発明によるVLIW命令の生成方式により生成したVLIW命令列と、従来の一般的なVLIWの命令列の比較例である。
図9(a)に示したようなC言語のソースプログラムがあるとき、従来のVLIW方式のプロセッサで実行される命令列は図9(b)に示すようになる。ここで、変数a、b及びdの値は予め汎用レジスタ%1、%2及び%4にそれぞれ保持されているものとする。また、ポインタ変数cは汎用レジスタ%6に保持されているものとする。
従来の一般的なVLIW命令列では、基本的には条件分岐はすべて条件分岐命令にコンパイルする必要がある。このため図9(b)のように並列実行可能な命令が少なくなり、ほとんどの演算命令フィールドがnop命令となるので、充分な性能が得られない。
そこでこれと同等な、図2(b)の本発明による条件付き実行機構を備えるVLIW命令列の例を図9(c)に示す。図9(b)と図9(c)では演算器の数など、ハードウェアの提供する並列度は同じである。従って、VLIW命令の演算命令フィールドの構成も同等なものとなる。
ここで図9(c)では、if側とelse側のどちらの命令流が実行されてよいのかを示す情報が、汎用レジスタ%3の値が零か非零かで表現されている。またストア命令(st_z、 st_nz命令)が条件的にその動作を取り消すことができる(st_z命令は第1オペランドの汎用レジスタ%3の値が零であればデータメモリへのストア動作を行い、st_nz命令では非零であればストア動作を行う)。
このため条件分岐があっても分岐命令を使わずに最適化することができる。これにより図9(c)の例では、分岐命令フィールドを持たないVLIW命令形式となっている。
以上に加えて、本発明の方式での特徴としては、レジスタ上の値の更新は条件処理とは独立してそのまま実行してしまうということが挙げられる。
即ちthen側における変数dの更新処理(d=d+20)について、別のレジスタ%8を新たに割り付けることにより、if−then−else節の他の部分と並列に実行するように1ワード目に割り付けられている(命令add %4、20、%8)。
ラベルL1以降の部分の命令流から抽出された命令では、レジスタ%8が変数dであると読み替えて命令を生成すればよい。
以上の結果、図9(b)の例では5ワードであったものが図9(c)では2ワードとなっており、倍以上の効率化が得られている。
図9に示したのは、図2の本発明によるVLIW命令の生成方式により生成したVLIW命令列と、従来の一般的なVLIWの命令列の比較例である。
図9(a)に示したようなC言語のソースプログラムがあるとき、従来のVLIW方式のプロセッサで実行される命令列は図9(b)に示すようになる。ここで、変数a、b及びdの値は予め汎用レジスタ%1、%2及び%4にそれぞれ保持されているものとする。また、ポインタ変数cは汎用レジスタ%6に保持されているものとする。
従来の一般的なVLIW命令列では、基本的には条件分岐はすべて条件分岐命令にコンパイルする必要がある。このため図9(b)のように並列実行可能な命令が少なくなり、ほとんどの演算命令フィールドがnop命令となるので、充分な性能が得られない。
そこでこれと同等な、図2(b)の本発明による条件付き実行機構を備えるVLIW命令列の例を図9(c)に示す。図9(b)と図9(c)では演算器の数など、ハードウェアの提供する並列度は同じである。従って、VLIW命令の演算命令フィールドの構成も同等なものとなる。
ここで図9(c)では、if側とelse側のどちらの命令流が実行されてよいのかを示す情報が、汎用レジスタ%3の値が零か非零かで表現されている。またストア命令(st_z、 st_nz命令)が条件的にその動作を取り消すことができる(st_z命令は第1オペランドの汎用レジスタ%3の値が零であればデータメモリへのストア動作を行い、st_nz命令では非零であればストア動作を行う)。
このため条件分岐があっても分岐命令を使わずに最適化することができる。これにより図9(c)の例では、分岐命令フィールドを持たないVLIW命令形式となっている。
以上に加えて、本発明の方式での特徴としては、レジスタ上の値の更新は条件処理とは独立してそのまま実行してしまうということが挙げられる。
即ちthen側における変数dの更新処理(d=d+20)について、別のレジスタ%8を新たに割り付けることにより、if−then−else節の他の部分と並列に実行するように1ワード目に割り付けられている(命令add %4、20、%8)。
ラベルL1以降の部分の命令流から抽出された命令では、レジスタ%8が変数dであると読み替えて命令を生成すればよい。
以上の結果、図9(b)の例では5ワードであったものが図9(c)では2ワードとなっており、倍以上の効率化が得られている。
最後に、複数のプログラムから命令流を取り出してVLIW命令へ合成した例を図10に示す。
図10では二つのプログラムa、bより命令流を1から5までの計5個を取り出して一つのVLIW命令に合成している。
まず、すべての分岐命令を取り除くことによりそれぞれの命令流を分離独立させる。
そして命令流1から5を併せて、データ依存関係を保ちながら一つのVLIW命令列に合成する。すなわち、図の各点線で囲まれた命令は夫々独立しており、点線内の各命令が演算器の種類、個数に合わせてVLIW命令化される。
その際図10では命令流2および5にそれぞれ一つずつあるストア命令を、それぞれの命令流の実行条件を参照してストア動作をおこなう条件付きストア命令に置き換える。
このようにすると、それぞれのプログラムに固有の分岐命令が消滅し、元の各プログラムの命令流中の各命令がデータ依存関係のみで関係付けられる。これによって、複数のプログラムの命令流から一つのVLIW命令流を生成することが可能となり、より高い並列度を得ることができる。
図10では二つのプログラムa、bより命令流を1から5までの計5個を取り出して一つのVLIW命令に合成している。
まず、すべての分岐命令を取り除くことによりそれぞれの命令流を分離独立させる。
そして命令流1から5を併せて、データ依存関係を保ちながら一つのVLIW命令列に合成する。すなわち、図の各点線で囲まれた命令は夫々独立しており、点線内の各命令が演算器の種類、個数に合わせてVLIW命令化される。
その際図10では命令流2および5にそれぞれ一つずつあるストア命令を、それぞれの命令流の実行条件を参照してストア動作をおこなう条件付きストア命令に置き換える。
このようにすると、それぞれのプログラムに固有の分岐命令が消滅し、元の各プログラムの命令流中の各命令がデータ依存関係のみで関係付けられる。これによって、複数のプログラムの命令流から一つのVLIW命令流を生成することが可能となり、より高い並列度を得ることができる。
2 主記憶
10 命令フェッチ部
11 命令発行部
12 ロードユニット
13 ストアユニット
14 内部演算ユニット
15 ストア条件判定ユニット
16 汎用レジスタファイル
17 ロード/ストアユニット
18 ロード/ストア判定ユニット
19 条件分岐処理ユニット
41、51 条件データバッファ
42、52 出力ゲート
43、53 条件判定回路
44、54 セレクタ
55 分岐先加算器
10 命令フェッチ部
11 命令発行部
12 ロードユニット
13 ストアユニット
14 内部演算ユニット
15 ストア条件判定ユニット
16 汎用レジスタファイル
17 ロード/ストアユニット
18 ロード/ストア判定ユニット
19 条件分岐処理ユニット
41、51 条件データバッファ
42、52 出力ゲート
43、53 条件判定回路
44、54 セレクタ
55 分岐先加算器
Claims (2)
- 1以上の元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、
命令処理装置内部あるいは外部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第1種の演算と、
命令処理装置内部あるいは外部のデータを用いて演算を行い、演算結果を命令処理装置外部に出力し、その出力動作を、命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第2種の演算とに変換し、
もって、一つの長語命令あたり前記第1種の演算i個(iは0個以上)と前記第2種の演算j個(jは0個以上)を含む最大n個(nは2以上)が割り当てられ、それぞれ割り当てられた前記最大n個の演算をそれぞれの命令フィールドで指定する長語命令からなる長語命令流を生成し、
該生成した長語命令流の各長語命令の処理は、
該長語命令を構成する複数命令フィールドが示す演算のうちの前記第1種の演算を、前記命令処理装置内部または外部のデータを用いて演算を行い、結果を命令処理装置内部に蓄える複数の第1種の演算ユニットでそれぞれ行い、
該長語命令を構成する複数命令フィールドが示す演算のうちの前記第2種の演算を、前記命令処理装置内部または外部のデータを用いて演算を行い、演算結果を前記命令処理装置外部に出力する演算を処理し、かつ命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果によってその出力動作を選択的に取り消す手段を有する一つ以上の第2種の演算ユニットでそれぞれ行うことにより並列処理することを特徴とする命令処理方法。 - 1以上の元の各プログラムの中から、プログラムの実行開始点及び条件分岐命令の分岐先を起点とする連続した命令列を一つ以上の命令流として抽出し、かつ条件分岐命令をすべて取り除くことによって分離独立した命令流とし、
該命令流中の演算を、
命令処理装置内部あるいは外部のデータを用い、前記取り除いた元の条件分岐命令にかかわらず演算を実行し、結果を命令処理装置内部に蓄える第1種の演算と、
演算に用いるデータを命令処理装置外部から入力するか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行い、該入力動作又は出力動作を、
命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果により選択的に取り消す第2種の演算とに変換し、
もって、一つの長語命令あたり前記第1種の演算i個(iは0個以上)と前記第2種の演算j個(jは0個以上)を含む最大n個(nは2以上)が割り当てられ、それぞれ割り当てられた前記最大n個の演算をそれぞれの命令フィールドで指定する長語命令からなる長語命令流を生成し、
該生成した長語命令流の各長語命令の処理は、
該長語命令を構成する複数命令フィールドが示す演算のうちの前記第1種の演算を、前記命令処理装置内部または外部のデータを用いて演算を行い、結果を命令処理装置内部に蓄える複数の第1種の演算ユニットでそれぞれ行い、
該長語命令を構成する複数命令フィールドが示す演算のうちの前記第2種の演算を、演算に用いるデータを命令処理装置外部から得るか、演算結果を命令処理装置外部に出力するか、もしくはその両方を行う演算を処理し、かつ命令処理装置内部または外部のデータの値により元の条件分岐命令の分岐条件の判定をして判定結果によってその入力動作または出力動作を選択的に取り消す手段を有する一つ以上の第2種の演算ユニットでそれぞれ行うことにより並列処理することを特徴とする命令処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004152762A JP3705367B2 (ja) | 2004-05-24 | 2004-05-24 | 命令処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004152762A JP3705367B2 (ja) | 2004-05-24 | 2004-05-24 | 命令処理方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP22249794A Division JP3578493B2 (ja) | 1994-08-24 | 1994-08-24 | 長語命令生成方法および命令処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004240999A JP2004240999A (ja) | 2004-08-26 |
JP3705367B2 true JP3705367B2 (ja) | 2005-10-12 |
Family
ID=32960064
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004152762A Expired - Fee Related JP3705367B2 (ja) | 2004-05-24 | 2004-05-24 | 命令処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3705367B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4771079B2 (ja) * | 2006-07-03 | 2011-09-14 | 日本電気株式会社 | Vliw型プロセッサ |
JP5326314B2 (ja) * | 2008-03-21 | 2013-10-30 | 富士通株式会社 | プロセサおよび情報処理装置 |
-
2004
- 2004-05-24 JP JP2004152762A patent/JP3705367B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004240999A (ja) | 2004-08-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5303356A (en) | System for issuing instructions for parallel execution subsequent to branch into a group of member instructions with compoundability in dictation tag | |
US6113650A (en) | Compiler for optimization in generating instruction sequence and compiling method | |
US5526499A (en) | Speculative load instruction rescheduler for a compiler which moves load instructions across basic block boundaries while avoiding program exceptions | |
US5333280A (en) | Parallel pipelined instruction processing system for very long instruction word | |
US5710902A (en) | Instruction dependency chain indentifier | |
EP2951681B1 (en) | Solution to divergent branches in a simd core using hardware pointers | |
JP3547139B2 (ja) | プロセッサ | |
JPH09311786A (ja) | データ処理装置 | |
US20110302394A1 (en) | System and method for processing regular expressions using simd and parallel streams | |
EP2951682B1 (en) | Hardware and software solutions to divergent branches in a parallel pipeline | |
US20170031682A1 (en) | Element size increasing instruction | |
KR101016257B1 (ko) | 프로세서 및 정보 처리 장치 | |
CN107038019A (zh) | 单指令多数据计算系统中处理指令的方法及计算系统 | |
US6862676B1 (en) | Superscalar processor having content addressable memory structures for determining dependencies | |
JPH07104784B2 (ja) | デジタルデータ処理装置 | |
JP2874351B2 (ja) | 並列パイプライン命令処理装置 | |
JP3705367B2 (ja) | 命令処理方法 | |
US7437544B2 (en) | Data processing apparatus and method for executing a sequence of instructions including a multiple iteration instruction | |
JP3578493B2 (ja) | 長語命令生成方法および命令処理装置 | |
KR100512655B1 (ko) | 레지스터 이동 연산 | |
JPH04506878A (ja) | データ処理装置 | |
JP2007334819A (ja) | ベクトルリネーミング方式およびベクトル型計算機 | |
CN113015958A (zh) | 实现掩蔽向量指令的系统和方法 | |
EP0825529A2 (en) | System for preparing instructions for instruction parallel processor and system with mechanism for branching in the middle of a compound instruction | |
JPH06290057A (ja) | ループ最適化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040524 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050628 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050719 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |