JP3553845B2 - プロセッサ、コンパイラ、コイパイル方法及び記録媒体 - Google Patents
プロセッサ、コンパイラ、コイパイル方法及び記録媒体 Download PDFInfo
- Publication number
- JP3553845B2 JP3553845B2 JP2000047146A JP2000047146A JP3553845B2 JP 3553845 B2 JP3553845 B2 JP 3553845B2 JP 2000047146 A JP2000047146 A JP 2000047146A JP 2000047146 A JP2000047146 A JP 2000047146A JP 3553845 B2 JP3553845 B2 JP 3553845B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- instructions
- parallel
- executed
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、プロセッサ、コンパイラ、コンパイル方法及び記録媒体に関し、特に並列処理において性能の向上と拡張性及び互換性の確保を図る技術に関する。
【0002】
【従来の技術】
近年のマイクロプロセッサ応用製品の高機能化及び高速化に伴い、高い処理性能を持つマイクロプロセッサ(以下、単に「プロセッサ」という。)が望まれている。一般に、各命令のスループットを高めるために、1つの命令をいくつかの処理単位(ここでは「ステージ」と呼ぶ)に分割し、各ステージを別々のハードウェアで実行することにより、複数の命令を並行して処理できるようにするパイプライン方式が採用されている。しかし、さらなる性能向上のためには、命令レベルでの並列処理を行うことが必須である。つまり、1サイクルに複数の命令を同時に実行することが必要となる。
【0003】
命令レベルの並列処理を実現する方法として、動的なスケジューリングによるものと静的なスケジューリングによるものがある。動的なスケジューリングによるものの代表例としてスーパースカラ方式がある。この方式では、実行時に命令コードを解読後、ハードウェアの命令発行制御部にて動的に命令間の依存関係を解析して並列実行可能か否かを判定し、適切な組み合わせの命令を並列実行する。
【0004】
静的なスケジューリングによるものの代表例としてVLIW(Very Long Instruction Word)方式がある。この方式は、実行コード生成時にコンパイラ等により静的に命令間の依存関係を解析し、命令コードの移動を行って実行効率の良い命令ストリームを生成する。一般のVLIW方式では、同時実行可能な複数の命令を一つの固定長の命令供給単位(ここでは「パケット」と呼ぶ)に記述する。この方式を採ると、ハードウェアで命令間の依存解析を行う必要がないため、ハードウェアを単純化できるというメリットがある。
【0005】
しかしながら、単純なVLIW方式では、毎サイクル固定長のパケットを発行するため、並列実行可能なオペレーションが存在しない場合には、演算を行わないことを明示する無動作命令(nop命令)を配置する必要がある。この無動作命令により、コードサイズが非常に増大するという問題点がある。
【0006】
そこで、この問題を解決する従来技術として、特許公報第2797833号にて開示されているように、各命令に並列実行の境界であるか否かの情報を持たせ、各サイクルで並列実行の境界までの命令を実行する、という方法がある。つまり、静的に並列実行イメージを求め、その情報を命令に付与しておき、実行時に命令内の情報を参照して適切な命令数だけ可変個数実行することになる。これにより、無動作命令の挿入が不要となり、コードサイズが増大するという問題点を解決している。
【0007】
【発明が解決しようとする課題】
前述のスーパースカラ方式では、動的にハードウェアで命令間の依存関係を解析する必要があるため、ハードウェア量が増大するという問題点がある。又、ハードウェアが複雑になるため遅延が増大し、動作周波数を上げにくいという問題点もある。更に、同時実行可能な命令数が増えるにつれて、依存関係を解析すべき命令の組み合わせが急激に増加するため、上記の問題点は急激に悪化することになる。
【0008】
そこで、さらなる並列化を目指す場合、VLIW方式などの静的スケジューリングを行う方式が主流となってくる。しかしながら、通常の固定長命令のVLIW方式では、無動作命令(nop命令)の挿入によりコードサイズが非常に大きくなるという問題点がある。この問題も、並列度が増すにつれて更に悪化する。これは、並列度が大きくなればなるほどnop命令を挿入せざるを得ない状況が増えてくるからである。
【0009】
VLIW方式のコードサイズ増加の問題を解決する手段として、前述のように各命令に並列実行の境界であるか否かを示す情報を持たせる、という方法がある。この方法を採ることによって無動作命令によるコードサイズ増加の問題点は解決される。
【0010】
しかしながら、上記方式では、静的に並列実行される命令の組み合わせが決定されるため、実行フローにかかわらず、並列実行の境界が固定されてしまい、動的なスケジューリングを行う方式に比べて性能面で劣るという問題点がある。
【0011】
又、静的に並列実行の境界が決定しているため、並列度向上等のハードウェアの拡張があった場合、そのままの実行コードでは性能を向上させにくいという問題点がある。
【0012】
そこで、本発明はかかる問題点に鑑みてなされたものであり、命令レベルの並列実行に際して、ハードウェアの簡単化を達成しつつ、性能の劣化を抑え、又拡張性や互換性を確保するようなプロセッサを提供することを目的とする。
【0013】
【課題を解決するための手段】
本願の請求項1の発明は、複数の命令からなる複合命令を記憶装置から読み出す命令読み出し手段と、前記複数の命令を解読する解読手段と、前記命令内の並列実行の可否を示す並列実行情報を参照して、同時実行する命令の集合を決定する命令発行制御手段と、夫々の命令中に指定されたオペレーションを並列して実行する複数の演算部を含む実行手段とを備え、前記命令内に条件によりそのうちの1つが選択される前記並列実行情報を複数個備えることを特徴とするものである。
【0014】
本願の請求項2の発明は、請求項1のプロセッサにおいて、前記命令内の前記並列実行情報は、前記命令と該命令に後続する命令とが並列に実行できるか否かを示す情報であることを特徴とするものである。
【0015】
本願の請求項3の発明は、複数の命令からなる複合命令を記憶装置から読み出す命令読み出し手段と、前記複数の命令を解読する解読手段と、前記命令内の並列実行の可否を示す並列実行情報を参照して、同時実行する命令の集合を決定する命令発行制御手段と、前記複数の命令中に各命令の動作が指定され、前記指定に基づいて複数のオペレーションを実行する実行手段とを備え、前記命令内の並列実行情報は、その命令が属する基本ブロックの命令が先行基本ブロックの命令から命令順に実行される場合に適用され、当該命令とその命令に後続する命令が並列に実行できるかどうかを示す第1の並列実行境界情報と、当該命令が属する基本ブロックに分岐があった場合以降に適用され、当該分岐があった命令とその命令に後続する命令が並列に実行できるかどうかを示す第2の並列実行境界情報とを含むものであり、前記命令発行制御手段は、前記命令の実行の流れが変化したこともしくは変化しなかったことを検出する実行フロー検出手段と、前記実行フロー検出手段の検出結果を参照して、前記命令内の複数種類の並列実行の可否を示す並列実行情報のうち、いずれの並列実行情報を有効とするかを選択する並列実行情報選択手段と、を備えることを特徴とするものである。
【0016】
本願の請求項4の発明は、請求項3のプロセッサにおいて、前記命令内に該命令が分岐命令の飛び先対象となっているか否かを示す分岐ラベル情報を備え、前記実行フロー検出手段は、前記命令内の前記分岐ラベル情報と、前記実行手段からの前サイクルで分岐が成立したか否かの情報とを基にして実行の流れの変化の検出を行うことを特徴とするものである。
【0017】
本願の請求項5の発明は、請求項3のプロセッサにおいて、前記実行フロー検出手段は、前記実行手段からの前サイクルで分岐したか否かの情報を基にして実行の流れの変化の検出を行い、前記並列実行情報選択手段は、現在の実行フローの状態を記憶する実行フロー記憶手段を備え、前記実行フロー検出手段からの情報に応じて実行フロー記憶手段の内容を更新することを特徴とするものである。
【0018】
本願の請求項6の発明は、請求項3のプロセッサにおいて、前記実行フロー検出手段は、前記実行手段からの前サイクルの分岐命令の分岐先アドレスに関する情報と、現在の命令のアドレスとを比較することにより実行の流れの変化の検出を行うことを特徴とするものである。
【0019】
本願の請求項7の発明は、複数の命令からなる複合命令を記憶装置から読み出す命令読み出し手段と、前記複数の命令を解読する解読手段と、前記各命令内の並列実行の可否を示す複数の並列実行情報を参照して、同時実行する命令の集合を決定する命令発行制御手段と、前記複数の命令中に各命令の動作が指定され、前記指定に基づいて複数のオペレーションを実行する実行手段とを備え、夫々の命令中に指定されたオペレーションを並列して実行する複数の演算部を含む実行手段とを備え、前記命令内の並列実行情報は、並列実行数に応じて夫々あらかじめ設定され、当該命令とその命令に後続する命令が並列に実行できるかどうかを示す並列実行境界情報であり、前記命令発行制御手段は、前記実行手段が備える演算器の種類や個数によって分類される複数の実行モードのうち、現在動作しているモードを記憶する実行モード記憶手段と、前記実行モード記憶手段の内容を参照して、前記命令内の複数種類の並列実行の可否を示す並列実行情報のうち、いずれの並列実行情報を有効とするかを選択する並列実行情報選択手段と、を備えることを特徴とするものである。
【0020】
本願の請求項8の発明は、請求項7のプロセッサにおいて、前記複数の実行モードのうちのあるモードでは、前記命令発行制御手段は、前記命令読み出し手段によって読み出された複数の命令のうち、演算資源の制約によりどれだけの命令を同時実行できるかを検出する演算資源制約検出部を備え、前記並列実行情報選択手段の出力と前記演算資源制約検出部の出力とに基づいて命令の発行を制御することを特徴とするものである。
【0021】
本願の請求項9の発明は、請求項8のプロセッサにおいて、前記演算資源制約検出部は、前記命令読み出し手段によって読み出された複数の命令に対して、順にそれまでに発行可能とした命令の集合に加えて該命令を発行可能であるか否かを判定していくことを特徴とするものである。
【0022】
本願の請求項10の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、基本ブロックの分岐先対象となっている命令以降の命令群を処理対象として、並列実行すべき複数の命令が隣接するように命令の並べ替えを行う命令再配置ステップと、前記基本ブロックの先頭の命令に先行する他の基本ブロックの最終グループの命令を含む当該基本ブロックの命令群を処理対象として、並列実行可能な命令の集合を再びグループとして区分する命令再集合化ステップと、前記命令再配置ステップと前記命令再集合化ステップの結果に基づき、命令内にそれぞれの前記スケジューリングに対応した並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするものである。
【0023】
本願の請求項11の発明は、請求項10のコンパイル方法において、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、前記ソースコードから生成された命令のうち、前記プログラム内で分岐先の対象となっていることを示す命令について、該命令にそのことを明示する情報を付加する分岐ラベル情報付加ステップを備えることを特徴とするものである。
【0024】
本願の請求項12の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、第1のハードウェア制約に基づいて命令の並べ替えを行う命令再配置ステップと、前記第1のハードウェア制約と異なる少なくとも1つのハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするものである。
【0025】
本願の請求項13の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、各命令間の依存関係にのみ基づいて命令の並べ替えを行う命令再配置ステップと、プログラムが実行されるハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするものである。
【0026】
本願の請求項14の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、プログラムが実行されるハードウェアの制約に基づいて命令の並べ替えを行う命令再配置ステップと、各命令間の依存関係にのみ基づいて並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするものである。
【0027】
本願の請求項15の発明は、請求項12〜14のいずれか1項のコンパイル方法において、前記命令再配置ステップは、並列実行可能な各命令集合に含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化ステップを備えることを特徴とするものである。
【0028】
本願の請求項16の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、命令を並べ替え、並列実行可能な命令の集合をグループとして区分する命令再配置ステップを備え、前記命令再配置ステップは、並列実行可能な各命令グループに含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化ステップを備えることを特徴とするものである。
【0029】
本願の請求項17の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、前記命令スケジューリング手段は、並列実行可能な命令の集合をグループとして区分する命令集合化手段とを含み、基本ブロックの分岐先対象となっている命令以降の命令群を処理対象として、並列実行すべき複数の命令が隣接するように命令の並べ替えを行う命令再配置手段と、前記基本ブロックの先頭の命令に先行する他の基本ブロックの最終グループの命令を含む当該ブロックの命令群を処理対象として、並列実行可能な命令の集合を再びグループとして区分する命令再集合化手段と、前記命令再配置手段と前記命令再集合化手段の結果に基づき、命令内にそれぞれの前記スケジューリングに対応した並列実行の可否を示す並列実行情報を付加する並列実行情報付加手段と、を備えることを特徴とするものである。
【0030】
本願の請求項18の発明は、請求項17のコンパイラにおいて、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、前記ソースコードから生成された命令のうち、前記プログラム内で分岐先の対象となっていることを示す命令について、該命令にそのことを明示する情報を付加する分岐ラベル情報付加手段を備えることを特徴とするものである。
【0031】
本願の請求項19の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、前記命令スケジューリング手段は、並列実行可能な命令の集合をグループとして区分する命令集合化手段とを含み、第1のハードウェア制約に基づいて命令の並べ替えを行う命令再配置手段と、前記第1のハードウェア制約と異なる少なくとも1つのハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化手段と、前記命令集合化手段と前記少なくとも1つの命令再集合化手段の結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加手段と、を備えることを特徴とするものである。
【0032】
本願の請求項20の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、前記命令スケジューリング手段は、命令の集合をグループとして区分する命令集合化手段を含み、各命令間の依存関係にのみ基づいて命令の並べ替えを行う命令再配置手段と、プログラムが実行されるハードウェアの制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化手段と、前記命令集合化手段と前記少なくとも1つの命令再集合化手段の結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加手段と、を備えることを特徴とするものである。
【0033】
本願の請求項21の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、前記命令スケジューリング手段は、並列実行可能な命令の集合をグループとして区分する命令集合化手段を含み、プログラムが実行されるハードウェアの制約に基づいて命令の並べ替えを行う命令再配置手段と、各命令間の依存関係にのみ基づいて並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化手段と、前記命令集合化手段と前記少なくとも1つの命令再集合化手段の結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加手段と、を備えることを特徴とするものである。
【0034】
本願の請求項22の発明は、請求項18〜21のいずれか1項のコンパイラにおいて、前記命令再配置手段は、並列実行可能な各命令集合に含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化手段を備えることを特徴とするものである。
【0035】
本願の請求項23の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、前記命令スケジューリング手段は、命令を並べ替え、並列実行可能な命令の集合をグループとして区分する命令再配置手段を備え、前記命令再配置手段は、並列実行可能な各命令グループに含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化手段を備えることを特徴とするものである。
【0036】
本願の請求項24の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、基本ブロックの分岐先対象となっている命令以降の命令群を処理対象として、並列実行すべき複数の命令が隣接するように命令の並べ替えを行う命令再配置ステップと、前記基本ブロックの先頭の命令に先行する他の基本ブロックの最終グループの命令を含む当該基本ブロックの命令群を処理対象として、並列実行可能な命令の集合を再びグループとして区分する命令再集合化ステップと、前記命令再配置ステップと前記命令再集合化ステップの結果に基づき、命令内にそれぞれの前記スケジューリングに対応した並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするものである。
【0037】
本願の請求項25の発明は、請求項24のプログラムを記録した記録媒体において、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、前記ソースコードから生成された命令のうち、前記プログラム内で分岐先の対象となっていることを示す命令について、該命令にそのことを明示する情報を付加する分岐ラベル情報付加ステップを備えることを特徴とするものである。
【0038】
本願の請求項26の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、第1のハードウェア制約に基づいて命令の並べ替えを行う命令再配置ステップと、前記第1のハードウェア制約と異なる少なくとも1つのハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするプログラムを記録したものである。
【0039】
本願の請求項27の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、各命令間の依存関係にのみ基づいて命令の並べ替えを行う命令再配置ステップと、プログラムが実行されるハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするものである。
【0040】
本願の請求項28の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、プログラムが実行されるハードウェアの制約に基づいて命令の並べ替えを行う命令再配置ステップと、各命令間の依存関係にのみ基づいて並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするものである。
【0041】
本願の請求項29の発明は、請求項26〜28のいずれか1項の記録媒体において、前記命令再配置ステップは、並列実行可能な各命令集合に含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化ステップを備えることを特徴とするものである。
【0042】
本願の請求項30の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、前記命令スケジューリングステップは、命令を並べ替え、並列実行可能な命令の集合をグループとして区分する命令再配置ステップを備え、前記命令再配置ステップは、並列実行可能な各命令グループに含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化ステップを備えることを特徴とするものである。
【0045】
【発明の実施の形態】
以下、本発明に係るプロセッサ、コンパイラ、コンパイル方法及び記録媒体の実施の形態について、図面を用いて詳細に説明する。
[実施の形態1]
(命令フォーマットとアーキテクチャの概要)
まず、本発明に係るプロセッサが解読実行する命令の構造について説明する。図1(a)〜(c)は本プロセッサの命令フォーマットを示す図である。本プロセッサの各命令は、32ビットの固定長であり、各命令は1ビットの並列実行境界情報を2つ保持している。夫々、並列実行境界情報A10と並列実行境界情報B11とする。この情報は、当該命令とそれに後続する命令との間に並列実行の境界が存在するか否かを示すものである。具体的には、並列実行境界情報が“1”の時はその命令と後続命令の間に並列実行の境界が存在し、並列実行境界情報が“0”の時には並列実行の境界が存在しないことになる。この情報の利用方法については後で述べる。
【0046】
又、各命令は1ビットの分岐ラベル情報12を保持している。この情報は、この命令が分岐命令の分岐先となっているか否かを示すものである。この情報の利用方法については後で述べる。
【0047】
各命令の命令長から並列実行境界情報と分岐ラベル情報を除いた29ビットの部分にてオペレーションを指定する。具体的には、“Op1”、“Op2”及び“Op3”のフィールドでは、オペレーションの種類を表すオペコードを、“Rs”のフィールドでは、ソースオペランドとなるレジスタのレジスタ番号を、“Rd”のフィールドでは、デスティネーションオペランドとなるレジスタのレジスタ番号を指定する。又、“imm”のフィールドでは、演算用定数オペランドを指定する。そして、“disp”のフィールドでは、変位(ディスプレースメント)を指定する。
【0048】
次に、本プロセッサのアーキテクチャの概要について説明する。本プロセッサは、静的な並列スケジューリングを前提としたプロセッサであって、命令の供給と発行の概念は図2のようになる。命令の供給は、図2(a)に示すように毎サイクル128ビット固定長の命令供給単位(ここでは「パケット」と呼ぶ。)で4命令ずつ供給する。そして、命令の実行は、同図(b)に示すように1サイクルで並列実行の境界までの命令(ここでは「実行単位」と呼ぶ)を同時実行する。つまり、各サイクルにおいて並列実行境界情報が“1”である命令までの命令を並列実行することになる。ここで、各命令には2つの並列実行境界情報が存在するが、そのいずれを選択するかについては後で述べる。供給されながら実行されずに残った命令は、命令バッファに蓄積され、次のサイクル以降で実行の対象となる。ここでは、問題を単純にするため命令供給不足が起きないように十分な命令供給バンド幅があることを想定している。
【0049】
つまり、このアーキテクチャでは、固定長のパケット単位で命令を供給しておき、静的に求めた情報を元に、各サイクルにおいて並列度に応じた適切な数の命令を発行していく、ということになる。この手法をとることにより、通常の固定長命令のVLIW方式で発生していた無動作命令(nop命令)が全く無くなり、コードサイズを削減することができる。
【0050】
(プロセッサのハードウェア構成)
次に、本プロセッサのハードウェア構成を説明する。図3は、本実施の形態に係るプロセッサのハードウェア構成を示すブロック図である。本プロセッサは、1サイクルに最大2つの命令を並列実行するプロセッサであり、大きく分けて、命令供給発行部20、解読部30、実行部40から構成される。
【0051】
命令供給発行部20は、図示されていない外部メモリより複数の命令から成る複合命令を読出して解読部30に出力する命令読み出し手段であり、命令フェッチ部21、命令バッファ22及び命令レジスタ23からなる。
【0052】
命令フェッチ部21は、32ビットのIA(インストラクションアドレス)バス及び128ビットのID(インストラクションデータ)バスを通じて図示されていない外部メモリから命令のブロックをフェッチし、内部の命令キャッシュに保持すると共に、PC部42から出力されたアドレスに相当する命令群を命令バッファ22に供給する。
【0053】
命令バッファ22は、128ビットのバッファを2個備えており、命令フェッチ部21によって供給された命令を蓄積しておくために用いられる。命令バッファ22へは、命令フェッチ部21から128ビット単位でパケットが供給される。命令バッファ22に蓄積された命令は、命令レジスタ23の適切なレジスタに出力される。
【0054】
命令レジスタ23は、2個の32ビットレジスタからなり、命令バッファ22から送られてきた命令を保持するためのものである。命令レジスタ23の周辺については、別の図面において更に詳細な構成を示している。
【0055】
解読部30は、命令レジスタ23に保持された命令を解読し、その解読結果に応じた制御信号を実行部40に出力するものであり、大きく分けて、命令発行制御部31と命令デコーダ32からなる。
【0056】
命令発行制御部31は、命令レジスタ23の2個のレジスタに保持された命令に対して、命令内の並列実行境界情報を参照することによって、並列実行の境界を越えた命令について、その命令の発行を無効化するといった発行に関する制御を行う。尚、命令発行制御部31については、別の図面において更に詳細な動作説明を行う。
【0057】
命令デコーダ32は、命令レジスタ23に格納された命令群を解読する装置であり、第1命令デコーダ33及び第2命令デコーダ34からなる。これらのデコーダは、基本的に1サイクルに1つの命令を解読し、実行部40に制御信号を与える。又、命令内に置かれた定数オペランドについては、各命令デコーダ33又は34から実行部40のデータバス48に転送される。
【0058】
実行部40は、解読部30での解読結果に基づいて、最大2つの命令を並列実行する回路ユニットであり、実行制御部41、PC部42、レジスタファイル43、第1演算部44、第2演算部45、オペランドアクセス部47及びデータバス48、49からなる。
【0059】
実行制御部41は、解読部30での解読結果に基づいて実行部40の各構成要素42〜49を制御する制御回路や配線の総称であり、タイミング制御、動作許可禁止制御、ステータス管理、割り込み制御等の回路を有する。
【0060】
PC(プログラムカウンタ)部42は、次に解読実行すべき命令が置かれている図示されていない外部メモリ上のアドレスを命令供給発行部20の命令フェッチ部21に出力するものである。
【0061】
レジスタファイル43は、64個の32ビットレジスタR0〜R63から構成される。これらのレジスタに格納された値は、第1命令デコーダ33及び第2命令デコーダ34での解読結果に基づいて、データバス48を経由して第1演算部44及び第2演算部45に転送され、そこで演算が施され、又はそこを単に通過した後に、データバス49を経由してレジスタファイル43又はオペランドアクセス部47に送られる。
【0062】
第1演算部44及び第2演算部45は、夫々2個の32ビットデータに対して算術論理演算を行うALUや乗算器と、シフト演算を行うバレルシフタを内部に有し、実行制御部41による制御の下で演算を実行する。
【0063】
オペランドアクセス部47は、レジスタファイル43と図示されていない外部メモリとの間でオペランドの転送を行う回路である。具体的には、例えば、命令内で、オペコードとして“ld”(ロード)が置かれていた場合には、外部メモリに置かれていた1ワード(32ビット)のデータがオペランドアクセス部47を経てレジスタファイル43の指定されたレジスタにロードされ、又、オペコードとして“st”(ストア)が置かれていた場合には、レジスタファイル43の指定されたレジスタの格納値が外部メモリにストアされる。
【0064】
上記PC部42、レジスタファイル43、第1演算部44、第2演算部45及びオペランドアクセス部47は、図示されるように、データバス48(L1バス、R1バス、L2バス、R2バス)及びデータバス49(D1バス、D2バス)で接続されている。尚、L1バス及びR1バスは夫々第1演算部44の2つの入力ポートに、L2バス及びR2バスは夫々第2演算部45の2つの入力ポートに、D1バス及びD2バスは夫々第1演算部44及び第2演算部45の出力ポートに接続されている。
【0065】
(命令レジスタ23周辺の構成と命令発行制御部31の動作)
次に、命令レジスタ23周辺の構成を示し、命令発行制御部31の動作を説明する。図4は、命令レジスタ23周辺の構成を示すブロック図である。図中、破線の矢印は制御信号を表す。命令レジスタ23は命令レジスタA231及び命令レジスタB232の2個の32ビットレジスタからなる。命令レジスタ23には、命令バッファ22から命令が供給される。
【0066】
図中第1,第2の各命令デコーダ33と34は、32ビットの命令を入力とし、それを解読して、その命令の動作に関する制御信号を実行制御部41に出力するとともに、命令内に配置された定数オペランドを出力する。図4の50〜51が各命令の定数オペランドである。
【0067】
又、各命令デコーダ33,34には、制御信号として1ビットの無動作命令フラグが入力される。このフラグを“1”にセットすると、そのデコーダは出力として無動作命令を出力する。つまり、無動作命令フラグをセットすることにより、その命令デコーダの命令としてのデコードを無効化することができる。
【0068】
ここで、命令レジスタ23に格納された命令の発行の制御を行う命令発行制御部31の構成及び動作について説明する。このプロセッサは基本ブロック単位で命令の処理が行われる。基本ブロックは分岐等で流れが変化することなく処理が進行する一連の命令である。従って基本ブロックの先頭にはラベルが記されており、他のブロックからの分岐命令等で分岐された状態から基本ブロックが開始する。図5は本プロセッサの命令発行制御部31とその周辺回路の構成を示したものである。命令発行制御部31は、論理和回路311、実行フロー検出部312を含む実行フロー検出手段313と、1ビットの実行フローフラグ314、マルチプレクサ(MUX)315から成る並列実行情報選択手段316を備えており、並列実行境界情報A10と並列実行境界情報B11のいずれの情報を並列実行の境界として使用するかを選択するものである。実行フローフラグ314は現在の実行フローの状態を記憶する実行フロー記憶手段である。
【0069】
命令発行制御部31には、前サイクルにおいて分岐が成立したか否かの1ビットの信号が実行部40から毎サイクル入力される。実行フロー検出部312はこれに基づいてフローの変化を検出するものであって、変化が検出されたときに実行フローフラグ314に検出信号を出力する。又命令レジスタA231,命令レジスタB232の夫々の分岐ラベル情報の論理和を論理和回路311で検出し、その出力を実行フローフラグ314に出力する。実行フローフラグ314は、命令レジスタA231の命令もしくは命令レジスタB232の命令が分岐先となる命令である場合のみ、上記検出信号の値で更新される。これは、命令レジスタA231及び命令レジスタB232に格納された命令内の分岐ラベル情報12を参照することにより制御される。MUX(マルチプレクサ)315はこの実行フローフラグ314の内容により並列実行境界情報A10,B11のいずれかを選択する。
【0070】
命令発行制御部31は、以上の方法で並列実行境界の情報を得て、しかるべき制御を行う。
【0071】
まず、この情報から、命令レジスタ23に格納された命令の内どこまでをこのサイクルで発行するのかを求める。そして、どれだけの命令が発行されずに残ったのかの情報を命令バッファ22内の命令バッファ制御部223に伝達する。
【0072】
次に命令デコーダ32を制御し、このサイクルで発行される命令についてのみ解読を行うように制御する。これは、命令内のしかるべき並列実行境界情報を参照して、命令レジスタ23内の命令の中で、発行されずに残るものに関しては、その命令のデコードを無効化する。
【0073】
具体的な動作は以下の通りである。命令発行制御部31に毎サイクル入力される分岐成立信号は、前サイクルで分岐が成立したときにのみ“1”となっている。まず、命令レジスタA231及び命令レジスタB232に格納された命令内の分岐ラベル情報12を参照し、いずれかが“1”である場合には実行フローフラグ314の内容を分岐成立の検出信号の内容で更新する。つまり、命令レジスタ内の命令に分岐で制御が移った場合には、実行フローフラグ314が“1”になることになる。
【0074】
そして、実行フローフラグ314を参照して、MUX315は並列実行境界情報A10と並列実行境界情報B11のいずれの情報を用いるかを選択する。実行フローフラグ314が“0”のときには並列実行境界情報A10が、“1”のときには並列実行境界情報B11が選択されることになる。
【0075】
こうして選択された並列実行境界情報が“1”のときには、命令レジスタB232の命令は発行されずに残るので、第2命令デコーダ34のデコードを無効化する。すなわち、命令発行制御部31が第2命令デコーダ34に対して制御信号“1”を出力し、第2命令デコーダ34の無動作命令フラグを“1”にセットする。図4において、命令発行制御部31から第2命令デコーダ34への破線がこの動作に相当する。
【0076】
このように、並列実行境界情報と実行フローに関する情報を参照することにより、必要に応じて命令デコーダの無動作フラグを設定し、命令としてのデコードを無効化する。
【0077】
このように、図1に示したような命令フォーマットをとり、図5に示したような単純な回路を用意するだけで、必要最低限の情報を参照して実行フローに対応した命令発行制御を高速に行うことができる。
【0078】
(プロセッサの動作)
次に、具体的な命令を解読実行した場合の本実施の形態のプロセッサの動作について説明する。図6は、分岐先ラベルを含むプログラムの一部を示す図である。このプログラムは、4個の命令で構成されており、各命令の処理内容は、ニーモニックで表現されている。具体的には、ニーモニック“mov”は、定数及びレジスタの格納値のレジスタへの転送を表し、ニーモニック“add”は、定数及びレジスタの格納値とレジスタの格納値との加算を表し、ニーモニック“ld”は、メモリの内容のレジスタへの転送を表している。
【0079】
又、“Rn(n=0〜63)”はレジスタファイル43の中の一つのレジスタを示す。そして、各命令の並列実行境界情報A10と並列実行境界情報B11についても“0”又は“1”で示してある。分岐ラベル情報12に関しては、ラベル“Label”の付いている命令2のみ“1”になっている。
【0080】
このプログラムには、シーケンシャルに命令1から命令2に制御が移る場合と、ラベル“Label”への分岐によって命令2に制御が移る場合との2通りの場合がある。このプロセッサでは命令2は命令2〜4を含む基本ブロックの先頭部分であり、命令1はこれに先行する他の基本ブロックの最後の命令である。尚、基本ブロックとは、命令の処理が常に順に実行される一連の命令をいい、通常その先頭の部分にはラベルが付される。
【0081】
図7に上記夫々の場合のプログラムの実行イメージを示す。図7(a)が命令1から命令2に制御が移る場合を、図7(b)が命令2に分岐してくる場合を示している。
【0082】
図6及び図7を用いて、夫々の場合における各実行単位ごとの本プロセッサの動作を説明する。
【0083】
(命令1から命令2に制御が移る場合)
(実行単位1)
命令1、命令2、命令3及び命令4を含むパケットがメモリから供給され、命令1と命令2が順に命令レジスタ23に転送される。次に命令発行制御部31が各命令の分岐ラベル情報12を参照する。命令2の分岐ラベル情報12が“1”であるので、実行フローフラグ314を分岐成立信号で更新する。前サイクルで分岐が成立していないので、この場合は実行フローフラグ314に“0”が設定される。
【0084】
次に、参照すべき並列実行境界情報を選択する。実行フローフラグ314の値が“0”であるので、並列実行境界情報Aが選択される。命令レジスタA231に格納された命令1の並列実行境界情報Aは“0”であるので、第2命令デコーダ34の解読結果は無効化せず、命令1と命令2の2個の命令を発行することになる。発行されずに残った命令3と命令4は、命令バッファ22に蓄積される。
【0085】
実行部40では、レジスタR0の格納値がレジスタR1に転送され、メモリ内のレジスタR2で示されるアドレスの格納値がレジスタR3に転送される。
【0086】
(実行単位2)
命令バッファに蓄積されていた命令3と命令4とが、順に命令レジスタ23に転送される。いずれの命令の分岐ラベル情報12も“0”であるため、実行フローフラグ314は更新されない。
【0087】
次に、参照すべき並列実行境界情報を選択する。実行フローフラグ314の値が“0”であるので、並列実行境界情報Aが選択される。命令レジスタA231に格納された命令3の並列実行境界情報Aは“0”であるので、第2命令デコーダ34の解読結果は無効化せず、命令3と命令4の2個の命令を発行することになる。これで供給されたすべての命令が発行されたことになる。
【0088】
実行部40では、レジスタR1の格納値がレジスタR4に転送され、レジスタR3の格納値にレジスタR1の格納値が加えられてレジスタR3に格納される。
【0089】
以上のように、命令1から命令2に制御が移る場合、即ちある基本ブロックからこれに引き続く基本ブロックに分岐せずに命令が実行される場合には、並列実行境界情報Aのみが用いられる。これにより本プロセッサにおいて図6のプログラムは図7(a)に示す2つの実行単位で実行される。
【0090】
(命令2に分岐してくる場合)
(実行単位1)
命令1、命令2、命令3及び命令4を含むパケットがメモリから供給される。ただし、分岐先のプログラムカウンタは命令2のアドレスを示しているので、命令2と命令3が順に命令レジスタ23に転送される。次に命令発行制御部31が各命令の分岐ラベル情報12を参照する。命令2の分岐ラベル情報12が“1”であるので、実行フローフラグ314を分岐成立信号で更新する。前サイクルで分岐が成立しているため、分岐成立信号は“1”であり、実行フローフラグ314に“1”が設定される。
【0091】
次に、参照すべき並列実行境界情報を選択する。実行フローフラグ314の値が“1”であるので、並列実行境界情報Bが選択される。命令レジスタA231に格納された命令2の並列実行境界情報Bは“0”であるので、第2命令デコーダ34の解読結果は無効化せず、命令2と命令3の2個の命令を発行することになる。発行されずに残った命令4は、命令バッファ22に蓄積される。
【0092】
実行部40では、メモリ内のレジスタR2で示されるアドレスの格納値がレジスタR3に転送され、レジスタR1の格納値がレジスタR4に転送される。
【0093】
(実行単位2)
命令バッファに蓄積されていた命令4が、命令レジスタ23に転送される。命令4の分岐ラベル情報12は“0”であるため、実行フローフラグ314は更新されず、“1”である。
【0094】
次に、参照すべき並列実行境界情報を選択する。実行フローフラグ314の値が“1”であるので、並列実行境界情報Bが選択される。命令レジスタA231に格納された命令4の並列実行境界情報Bは“1”であるので、第2命令デコーダ34の解読結果は無効化し、命令4のみを発行することになる。これで供給されたすべての命令が発行されたことになる。
【0095】
実行部40では、レジスタR3の格納値にレジスタR1の格納値が加えられてレジスタR3に格納される。
【0096】
以上のように、命令2に分岐してくる場合、即ち命令2から始まる基本ブロックはその直前の基本ブロックと連続しない場合に、命令2からの基本ブロックでは並列実行境界情報Bが適用される。従って本プロセッサにおいて図6のプログラムは図7(b)に示す2つの実行単位で実行される。
【0097】
(従来の単一の並列実行境界情報を持つプロセッサとの比較)
次に、図6に示した処理を、従来技術として挙げた単一の並列実行境界情報を持つプロセッサに行わせた場合を仮定して、本発明に係るプロセッサの場合と比較する。
【0098】
単一の並列境界情報を持つ従来のプロセッサの命令フォーマットは、図1の本発明のプロセッサの命令フォーマットの2つの並列実行境界情報を1つにし、分岐ラベル情報12を取り除いたものになる。すなわち、命令内にはオペレーションに関する情報以外には1ビットの並列実行境界情報のみ保持することになる。
【0099】
命令発行制御部では、命令レジスタAに格納された命令の並列実行境界情報に応じて第2命令デコーダの解読結果を無効化する、という単純な制御を行う。
【0100】
図8は図6に示したプログラムの処理を単一の並列実行境界情報を持つプロセッサで実行させるプログラムを示す図である。図8のプログラムは、並列実行境界情報、分岐ラベル以外の部分は図6のプログラムと同一となる。並列実行境界情報は、基本ブロック単位でスケジューリングされた境界情報を1つだけ持つことになる。この例では、命令2に分岐ラベルが付いているので、命令1と命令2との間に基本ブロックの境界があることになる。
【0101】
図9に図8のプログラムの従来のプロセッサにおける実行イメージを示す。図9(a)が命令1から命令2に制御が移る場合を、図9(b)が命令2に分岐してくる場合を示している。
【0102】
図8及び図9を用いて、夫々の場合における各実行単位ごとの従来のプロセッサの動作を説明する。
【0103】
(命令1から命令2に制御が移る場合)
(実行単位1)
命令1、命令2、命令3及び命令4を含むパケットがメモリから供給され、命令1と命令2が順に命令レジスタに転送される。次に、命令発行制御部が命令レジスタAに格納された命令1の並列実行境界情報を参照して、命令の発行を制御する。命令1の並列実行境界情報は“1”であるので、第2命令デコーダの解読結果を無効化し、命令1のみを発行することになる。発行されずに残った命令2、命令3及び命令4は、命令バッファに蓄積される。
【0104】
実行部では、レジスタR0の格納値がレジスタR1に転送される。
【0105】
(実行単位2)
命令バッファに蓄積されていた命令2と命令3とが、順に命令レジスタに転送される。次に、命令発行制御部が命令レジスタAに格納された命令2の並列実行境界情報を参照して、命令の発行を制御する。命令2の並列実行境界情報は“0”であるので、第2命令デコーダの解読結果は無効化せず、命令2と命令3の2個の命令を発行することになる。発行されずに残った命令4は、命令バッファに蓄積される。
【0106】
実行部では、メモリ内のレジスタR2で示されるアドレスの格納値がレジスタR3に転送され、レジスタR1の格納値がレジスタR4に転送される。
【0107】
(実行単位3)
命令バッファに蓄積されていた命令4が、命令レジスタに転送される。命令レジスタAに格納された命令4の並列実行境界情報が“1”であるので、第2命令デコーダの解読結果は無効化し、命令4のみを発行することになる。これで供給されたすべての命令が発行されたことになる。
【0108】
実行部では、レジスタR3の格納値にレジスタR1の格納値が加えられてレジスタR3に格納される。
【0109】
以上のように、命令1から命令2に制御が移る場合、単一の並列実行境界情報を持つ従来のプロセッサにおいて図8のプログラムは3つの実行単位で実行される。
【0110】
(命令2に分岐してくる場合)
(実行単位1)
命令1、命令2、命令3及び命令4を含むパケットがメモリから供給される。ただし、分岐先のプログラムカウンタは命令2のアドレスを示しているので、命令2と命令3が順に命令レジスタに転送される。次に、命令発行制御部が命令レジスタAに格納された命令2の並列実行境界情報を参照して、命令の発行を制御する。命令2の並列実行境界情報は“0”であるので、第2命令デコーダの解読結果は無効化せず、命令2と命令3の2個の命令を発行することになる。発行されずに残った命令4は、命令バッファに蓄積される。
【0111】
実行部では、メモリ内のレジスタR2で示されるアドレスの格納値がレジスタR3に転送され、レジスタR1の格納値がレジスタR4に転送される。
【0112】
(実行単位2)
命令バッファに蓄積されていた命令4が、命令レジスタに転送される。命令レジスタAに格納された命令4の並列実行境界情報が“1”であるので、第2命令デコーダの解読結果は無効化し、命令4のみを発行することになる。これで供給されたすべての命令が発行されたことになる。
【0113】
実行部では、レジスタR3の格納値にレジスタR1の格納値が加えられてレジスタR3に格納される。
【0114】
以上のように、命令2に分岐してくる場合、単一の並列実行境界情報を持つ従来のプロセッサにおいて、図8のプログラムは2つの実行単位で実行される。
【0115】
図7と図9の実行イメージを比較するとわかるように、単一の並列実行境界情報を持つ従来のプロセッサでは3つの実行単位で実行するのに対して、本実施の形態では命令1から命令2に制御が移る場合、2つの実行単位で実行される。その結果、本実施の形態のプロセッサでは実行サイクル数を減少させることができる。
【0116】
[実施の形態2]
次に上述の実施の形態1におけるプロセッサで実行するコードを生成するコンパイラ、及びそのコンパイル方法についての実施の形態について説明する。
【0117】
(用語説明)
まず本説明で用いる用語の説明を行なう。
・オブジェクトコード
再配置可能情報を含んだ対象プロセッサ向け機械語プログラム。連結編集を行ない未確定アドレスを決定することにより実行形式コードに変換することができる。
・プレデセッサ
ある命令を実行する為に、それ以前に実行しておく必要のある命令。
・実行グループ
コンパイラによって、同一サイクルに並列実行可能であるものをグループ化した命令群。
【0118】
(対象プロセッサ)
本コンパイラが対象とするプロセッサは、上記実施の形態1で説明したプロセッサである。このプロセッサは、コンパイラにて付与された並列実行境界情報A10と並列実行境界情報B11を参照することにより実行グループを生成し、ハードウェアでは並列実行可能か否かの判定を行なわない。したがって、並列実行境界間すなわち実行グループ内に、同時実行可能な命令が正しく配置されていることは、コンパイラが保証することになる。並列実行境界間に配置できる命令に対する制限は以下の通り。命令は以下の2条件が満たされた場合のみ並列実行ができる。
(1)並列実行グループ中の命令の総数は2を越えない。
(2)並列実行グループ中の命令が使用する対象プロセッサ資源の総和は、2ALUユニット、1メモリアクセスユニット、1分岐ユニットを越えない。
【0119】
又、対象プロセッサは並列実行グループ中の命令を必ずしも同時に実行するわけではない。命令の供給が追い付かないなどの理由で並列実行グループを2回以上に分けて実行することもある。このためコンパイラは、並列実行グループが2回以上に分割されて実行される場合であっても、プログラムの意味動作が正しくなるように、命令群中の命令順を設定する必要がある。
【0120】
(コンパイラの構成)
図10は、本発明の実施形態におけるコンパイラの構成及び関連するデータを示すブロック図である。本コンパイラは高級言語で書かれたソースコード130からオブジェクトコード140を生成するプログラム処理装置であり、コンパイラ上流部100、アセンブラコード生成部101、命令スケジューリング部102、オブジェクトコード生成部103からなる。
【0121】
コンパイラ上流部100は、ファイル形式で保存されている高級言語ソースコード130を読み込み、構文解析及び意味解析を行なって内部形式コードを生成する。更に必要に応じて、最終的に生成される実行形式コードのサイズやその実行時間が短くなるように内部形式コードを最適化する。
【0122】
アセンブラコード生成部101は、コンパイラ上流部100により生成、最適化された内部形式コードからアセンブラコードを生成する。
【0123】
コンパイラ上流部100及びアセンブラコード生成部101での処理は本発明の主眼ではなく、又、従来のコンパイラで行なわれてきた処理と同等であるので、詳細は省略する。
【0124】
(命令スケジューリング部102)
命令スケジューリング部102は、アセンブラコード生成部101で生成されたアセンブラコードに対し命令間の依存関係の解析、命令の再配置(命令順の並べ替え)及び並列実行境界の付加を行ない、アセンブラコードを対象プロセッサ向けに並列化する。命令スケジューリング部102は、依存関係解析部110、命令再配置部111、命令再集合化部112、実行境界付加部113から構成される。
【0125】
命令スケジューリング部102は基本的に基本ブロック単位で処理を行うが、当該基本ブロックの先頭の命令が分岐先になっている場合、すなわち分岐ラベル付き命令である場合、当該基本ブロックのみを処理単位とし、並列実行境界情報Bを設定するスケジューリングと、当該基本ブロックに先行する他の基本ブロックの最終実行グループの命令群を加えたものを処理単位とし、並列実行境界情報Aを設定するスケジューリングとの2通りのスケジューリングを行う。そして夫々で得られた並列実行の境界に関する情報B及びAを2つの並列実行境界情報に夫々設定する。
【0126】
図11に命令スケジューリング部102のフローチャートを示す。まず、ステップS1において当該基本ブロックのみを処理単位とするスケジューリングを行う。依存関係解析部110と命令再配置部111が動作する。次に、ステップS2において当該基本ブロックの先頭命令が分岐ラベル付き命令である場合には、ステップS3で先行する基本ブロックの最終実行グループの命令を加えた処理単位でのスケジューリングを行う。この場合に命令再集合化部112が動作する。この際、当該基本ブロックの先頭の命令の分岐ラベル情報12の設定も行う。最後に、ステップS4において並列実行境界付加部113にて2つの並列実行境界情報を設定する。
【0127】
各部の詳細な動作は以下の通りである。
依存関係解析部110は、処理対象に含まれる命令間の依存関係を解析し依存グラフとして表現する。命令間の依存関係には以下の3種類がある。
・データ依存関係
ある資源を定義する命令と、同じ資源を参照する命令間の依存関係。
・逆依存関係
ある資源を参照する命令と、同じ資源を定義する命令間の依存関係。
・出力依存関係
ある資源を定義する命令と、同じ資源を定義する命令間の依存関係。
いずれの依存関係にある命令も、元の命令順を変更するとプログラムの意味が異なってしまう為、命令並べ替え時においても依存関係は守る必要がある。
【0128】
依存関係解析部110では、処理対象に含まれる各命令毎に、これに対応するノード(節)を、又、各依存関係毎に、これに対応するエッジ(矢印)を生成し、依存グラフを生成する。例として図12のアセンブラコードに対する依存グラフを図13に示す。図13中、実線はデータ依存関係を、破線は逆依存関係を示す。依存グラフの生成方法は例えば、論文 Instruction scheduling in the TOBEY compiler (R.J.Blainey, IBMJ.RES.DEVELOP. VOL.38 NO.5 SEPTEMBER 1994) に開示されている。
【0129】
命令再配置部111は、依存関係解析部110で生成された依存グラフを用いて、処理対象の命令を並べ替え、対象プロセッサ向けの並列化されたアセンブラコードを生成する。命令再配置部111の処理の詳細は以下の通りである。
【0130】
図14は、命令再配置部111での処理手順を示すフローチャートである。命令再配置部111は、依存関係解析部110が生成した依存グラフの全てのノードについて、以下の処理(ステップS12〜S19)を繰り返す(ループ1)(ステップS11、S20)。
【0131】
まず、命令再配置部111は、現時点で配置候補となり得るノードを依存グラフより抽出し配置候補集合とする(ステップS12)。ここで配置候補となり得るノードとは、「プレデセッサが全て配置完了済み」であるノードである。
【0132】
次に、命令再配置部111は、配置候補ノード集合の全ての候補ノードについて、以下の処理(ステップS14〜S17)を繰り返す(ループ2)(ステップS13、S18)。
【0133】
次に、配置候補ノード集合から現時点で配置することが最良と思われるノード(以下、単に「最良ノード」と呼ぶ。)を取り出す(ステップS14)。最良ノードの決定方法については後述する。
【0134】
続いて最良ノードが、実際に配置可能か否かを判断し、可能な場合は仮配置する(ステップS15)。この判断は、最良ノードが前述の演算器の制約、命令数の制約及び命令デコーダの制約を満たすかどうかによって決定する。
【0135】
続いて、現時点で仮配置されているノード集合を調べ、更に命令を配置することができるか否かを判断する(ステップS16)。配置不可と判断された場合はループ2を終了し処理をステップS19へ移す。
【0136】
配置可能と判断された場合、最良ノードが配置されたことによって新たに配置候補となり得るノードが生じたか否かを判断し、新たな配置候補が生じた場合はこれを配置候補ノードに追加する(ステップS17)。ステップS17で新たに配置候補にできるのは、「(現在配置しようとしている)最良ノードのみをプレデセッサとして持ち、且つ、最良ノードとの依存関係が逆依存もしくは出力依存」のノードである。つまりここで新たな配置候補になることができるノードは、最良ノードと同じサイクルで実行することはできるが、最良ノードより前のサイクルでは実行できないノードである。
【0137】
ループ2が終了した後、仮配置ノード集合に含まれているノードを確定する(ステップS19)。具体的には、仮配置ノード集合に含まれているノードに対応する命令を元の命令列から取り出し、実行境界付加部22へ渡すための新たな命令列に再配置する。この段階で配置候補ノードの一部が、同時に実行する命令群としてまとめられ確定したことになる。ステップS13〜ステップS19の一連の処理が「命令集合化ステップ」に相当する。
【0138】
次に、ステップS14における最良ノードの決定方法について述べる。最良ノードは、依存グラフ、仮配置領域を参照して、処理対象の命令全体を最も短時間で実行できるであろう命令をヒューリスティックに選び出す。ここでは現時点での依存グラフにおいて依存グラフの終端までの命令の実行時間総和が最も多いものを選ぶ。この条件に合致する命令が多数ある場合には、元の命令順が早い命令を最良ノードとする。
【0139】
命令再集合化部112は、まず当該基本ブロックの先頭の命令の分岐ラベル情報12を設定する。
【0140】
次に、当該基本ブロックに加えてスケジューリングの処理対象とする命令群を求める。これは、先行基本ブロックを末尾の直前の命令からサーチし、並列実行境界情報Aと並列実行境界情報Bが夫々“1”に設定されている命令を探す。そして両方の並列実行境界情報に“1”が発見される直前の命令までを処理対象に加える。
【0141】
求められた処理対象に対して、上記命令再配置部111のような命令の並べ替えは行わず、依存関係解析部110で解析した情報とハードウェア資源の制約の情報を元に、既に再配置されている命令の先頭から順にできるだけ多くの命令が同時に並列実行できるように集合化していく。
【0142】
並列実行境界付加部113は、命令再配置部111のステップS19で配置が確定した命令群の末尾毎に並列実行境界情報Bを設定し、命令再集合化部112で決定された命令群の末尾毎に並列実行境界情報Aを設定する。ただし、当該基本ブロックの先頭の命令が分岐ラベル付き命令でなく、命令再集合化部112が動作しなかった場合には、並列実行境界情報Aは並列実行境界情報Bと同一とする。
【0143】
図10に戻って、オブジェクトコード生成部103は、命令スケジューリング部102が出力したアセンブラコードをオブジェクトコード140に変換し、ファイルとして出力する。
【0144】
(コンパイラの動作)
次に、本コンパイラの特徴的な構成要素の動作について、具体的な命令を用いて説明する。図15(a)は、ソースコードをコンパイラ上流部100に入力し、アセンブラコード生成部101を経て生成されたアセンブラコード、図15(b)はその基本ブロックと処理ブロックを示す。命令スケジューリング部102は図15(a)のコードを入力として受け取る。図15(a)に含まれる各命令の意味は以下の通りである。
・命令1…メモリ内のレジスタR5で示されるアドレスの格納値をレジスタR0に転送する命令。
・命令2…レジスタR5の格納値に定数0x2(16進数の2)を加算してレジスタR5に格納する命令。
・命令3…レジスタR0の格納値をレジスタR1に転送する命令。
・命令4…メモリ内のレジスタR2で示されるアドレスの格納値をレジスタR3に転送する命令。
・命令5…レジスタR1の格納値をレジスタR4に転送する命令。
・命令6…レジスタR3の格納値にレジスタR1の格納値を加えてレジスタR3に格納する命令。
これらの命令列は、命令4に分岐ラベルが設定されているため、命令1〜命令3を含む基本ブロック161と命令4〜命令6を含む基本ブロック162から成る。命令スケジューリング部102は、基本ブロック単位で処理を行う。
【0145】
各基本ブロックに対する命令スケジューリング部102の動作について図11を用いて説明する。まず最初の基本ブロック(命令1〜命令3)について基本ブロック161内の命令を対象としてスケジューリングを行う(ステップS1)。詳細は省略するが、依存関係解析部110と命令再配置部111が起動され、命令の配置は命令1、命令2、命令3の順序のままで、最初のサイクルで命令1と命令2を実行し、次のサイクルで命令3を実行するように集合化される。
【0146】
次に、先頭の命令(命令1)が分岐ラベル付き命令かどうかを判定する(ステップS2)。命令1は分岐ラベル付き命令でないので、ステップS4に進む。
【0147】
最後に、並列実行境界の設定を行う(ステップS4)。ここで並列実行境界付加部113が起動され、上記の集合化による命令群の末尾に並列実行境界Bを設定する。具体的には、命令2と命令3の並列実行境界情報Bに“1”を設定し、命令1に関しては“0”を設定する。又、この基本ブロックに関しては先頭がラベル分命令でなく、命令再集合化部112が起動されなかったので、並列実行境界情報Aには、並列実行境界情報Bと同一のものを設定する。
【0148】
これで最初の基本ブロック161(命令1〜命令3)に関する処理は完了し、次の基本ブロック162(命令4〜命令6)に移る。最初の基本ブロック161と同様にこの基本ブロック162を処理単位とするスケジューリングを行う(ステップS1)。詳細は省略するが、依存関係解析部110と命令再配置部111が起動され、命令の配置は命令4、命令5、命令6の順序のままで、最初のサイクルで命令4と命令5を実行し、次のサイクルで命令6を実行するように集合化される。
【0149】
次に、先頭の命令(命令4)が分岐ラベル付き命令かどうかを判定する(ステップS2)。命令4は分岐ラベル付き命令なので、命令4の分岐ラベル情報12に“1”を設定して、ステップS3に進む。
【0150】
次に、先行する基本ブロック161の最終実行グループを含む処理単位でのスケジューリングを行う(ステップS3)。ここでは、命令再集合化部112が起動される。先行する基本ブロック161を末尾の直前の命令(命令2)から逆順にサーチしていき、並列実行境界情報Aと並列実行境界情報Bが“1”に設定されているかどうかをチェックする。この場合は、命令2の並列実行境界情報Aと並列実行境界情報Bが共に“1”なので、その直前の命令3までが先行基本ブロックの最終実行グループということになる。したがって、命令4〜命令6に命令3を加えたものを処理単位としてスケジューリングを行う。
【0151】
このスケジューリングでは、命令の並べ替えは行わず、命令間の依存関係と演算資源の制約のみで命令の集合化を行う。結果的に、最初のサイクルで命令3と命令4とを実行し、次のサイクルで命令5と命令6とを実行するように集合化される。
【0152】
最後に、並列実行境界の設定を行う(ステップS4)。ここで並列実行境界付加部113が起動され、上記ステップS1の命令再配置部111での集合化による命令群の末尾に並列実行境界情報Bを設定する。具体的には、命令5と命令6の並列実行境界情報Bに“1”を設定し、命令4に関しては“0”を設定する。又、上記ステップS3の命令再集合化部112での集合化による命令群の末尾に並列実行境界Aを設定する。具体的には、命令4と命令6の並列実行境界情報Aに“1”を設定し、命令3と命令5に関しては“0”を設定する。以上で命令スケジューリング部102の処理が完了する。即ち命令3に関しては“0”に書換えることになる。
【0153】
続いてオブジェクトコード生成部103が起動され、オブジェクトコードが出力される。最終的な実行形式コードを図16に示す。実際の実行形式コードは128ビット単位にまとめられたビット列である。
【0154】
図15に示したプログラムには、シーケンシャルに命令1から順に命令4へ制御が移る場合と、ラベル“Label”への分岐によって命令4に制御が移る場合との2通りの場合がある。
【0155】
上記2つの場合夫々の、図16の実行形式コードの実行イメージを図17に示す。図17を見てわかるように、図16の実行形式コードは、命令1からシーケンシャルに制御が移る場合には3つの実行グループで実行され、命令4に分岐してくる場合には、2つの実行グループで実行される。
【0156】
(従来のコンパイラとの比較)
次に、図15(a)に示したアセンブラコードを、本発明のコンパイラの構成をとらない従来のコンパイラにてコンパイルした場合を仮定して、本発明に係るコンパイラの場合と比較する。
【0157】
従来のコンパイラにおいても、基本ブロック単位でスケジューリングを行う。ただし、命令内には単一の並列実行境界情報しか保持しない。
【0158】
まず、最初の基本ブロック(命令1〜命令3)を処理単位とするスケジューリングを行う。詳細は省略するが、本発明のコンパイラのステップS1の場合と同様に、命令の配置は命令1、命令2、命令3の順序のままで、最初のサイクルで命令1と命令2を実行し、次のサイクルで命令3を実行するように集合化される。
【0159】
次に、上記の集合化の結果を元に並列実行境界を設定する。具体的には、命令2と命令3の並列実行境界情報に“1”を設定し、命令1に関しては“0”を設定する。
【0160】
これで最初の基本ブロック(命令1〜命令3)に関する処理は完了し、後続する基本ブロック(命令4〜命令6)に移る。
【0161】
最初の基本ブロックと同様に、この基本ブロックを処理単位とするスケジューリングを行う。詳細は省略するが、本発明のコンパイラのステップS1の場合と同様に、命令の配置は命令4、命令5、命令6の順序のままで、最初のサイクルで命令4と命令5を実行し、次のサイクルで命令6を実行するように集合化される。
【0162】
次に、上記の集合化の結果を元に並列実行境界を設定する。具体的には、命令5と命令6の並列実行境界情報に“1”を設定し、命令4に関しては“0”を設定する。以上で命令スケジューリング処理が完了する。
【0163】
結果として生成される実行形式コードを図18に示す。図17と同様に、シーケンシャルに命令1から順に命令4へ制御が移る場合と、ラベル“Label”への分岐によって命令4に制御が移る場合との2通りの場合夫々についての、図18の実行形式コードの実行イメージを図19に示す。
【0164】
図19を見てわかるように、図18の実行形式コードは、命令1からシーケンシャルに制御が移る場合には4つの実行グループで実行され、命令4に分岐してくる場合には、2つの実行グループで実行される。
【0165】
図17と図19を比較すると、命令1からシーケンシャルに制御が移る場合に、従来のコンパイラの生成コードでは、本発明のコンパイラの生成コードの場合に比べ、実行グループが1つ増えている。つまり、実行サイクル数が1サイクル増していることになる。このように実行グループ数が増加したのは、本実施の形態の命令スケジューリング部102のような構成をとらなかったために、複数の実行フローに対して固定された単一の並列実行境界を利用しなければならなかったことに起因する。
【0166】
本実施の形態で示されるコンパイラをフロッピーディスク、ハードディスク、CD―ROM、MO、DVDなどの記録媒体に入れることにより本実施の形態で示されるコンパイラを、コンピュータで実現できる。
【0167】
又、本実施の形態で示されるコンパイラにより生成された実行形式コードをフロッピーディスク、ハードディスク、CD―ROM、MO、DVD、半導体メモリなどの記録媒体に入れることもできる。
【0168】
[実施の形態3]
次に、上記実施の形態1と同様に命令内に並列実行境界情報を複数個持つが、その情報の利用方法の異なるプロセッサの実施の形態について説明する。本プロセッサのハードウェア構成については、大部分は前述の第1の実施の形態のプロセッサと同一であるが、並列実行境界情報の扱いのみが異なる。複数の並列実行境界情報は、プロセッサの並列度に応じて選択的に使用される。具体的には、命令発行制御部の構成が異なることになる。
【0169】
(命令発行制御部の構成と動作)
図20は、本実施の形態のプロセッサの命令発行制御部150とその周辺回路の構成を示すブロック図であり、図21は命令デコーダとその周辺回路の構成を示すブロック図である。命令発行制御部150は、1ビットの並列度モードフラグ151を備えている。このフラグが“0”の場合は2並列のモードで動作していることを示し、“1”の場合には3並列以上のモードで動作していることを示す。
【0170】
又、命令発行制御部150は、演算資源制約検出部152を備えている。これは、3並列以上のモードで動作している場合、参照する並列実行境界情報はデータ依存に関する境界は示すが、並列度すなわち演算資源数による境界は示していない。したがって、このモードの場合にはハードウェアで動的に演算資源数による制約を検出する必要がある。2並列モードの場合には、演算資源制約検出部152は常に“0”を出力する。並列度モードフラグ151の出力は2つのマルチプレクサ(MUX)152,153に出力される。MUX153は命令レジスタA231の2つの並列実行境界情報A10,B11を並列モードフラグの出力に応じて選択するものであり、MUX154は命令レジスタB232の2つの並列実行境界情報A10,B11のいずれかを選択するものである。
【0171】
命令発行制御部150は、各命令内の並列実行境界情報、並列度モードフラグ151及び演算資源制約検出部152から並列実行の境界の情報を得てしかるべき制御を行う。オア回路155はマルチプレクサ153と演算資源制約検出部152からの出力の論理和が成立すれば、第2命令デコーダ34に無動作命令を出力するものであり、オア回路156はマルチプレクサ154の出力と演算資源制約検出部152の出力の論理和が成立すれば、第3命令デコーダ35に無動作命令を出力するものである。
【0172】
まず、この情報から、命令レジスタに格納された命令の内どこまでをこのサイクルで発行するのかを求める。そして、どれだけの命令が発行されずに残ったのかの情報を命令バッファ内の命令バッファ制御部に伝達する。
【0173】
次に命令デコーダを制御し、このサイクルで発行される命令についてのみ解読を行うように制御する。これは、命令内のしかるべき並列実行境界情報を参照して、命令レジスタ内の命令の中で、発行されずに残るものに関しては、その命令のデコードを無効化する。
【0174】
具体的な動作は以下の通りである。命令発行制御部150の並列度モードフラグ151には、あらかじめ“0”もしくは“1”が設定されている。
【0175】
並列度モードフラグ151が“0”の場合、すなわち2並列モードで動作している場合、命令内の並列実行境界情報Aに2並列動作を想定した並列実行境界情報が設定されているので、並列実行境界情報Aを選択するようにセレクタを制御する。演算資源制約検出部152は常に“0”を出力するので、制御には影響を及ぼさない。
【0176】
具体的には、命令レジスタA231の命令の並列実行境界情報Aが“1”の場合に第2命令デコーダ34の無動作命令フラグを“1”に設定してデコードを無効化し、命令レジスタB232の命令の並列実行境界情報Aが“1”の場合に第3命令デコーダ35の無動作命令フラグを“1”に設定してデコードを無効化する。
【0177】
並列度モードフラグ151が“1”の場合、すなわち3並列以上のモードで動作している場合は、命令内の並列実行境界情報Bを参照する。ここでは、3並列で動作する場合を考える。3並列動作するプロセッサの構成は、図3の2並列のプロセッサの、命令に関連する部分をすべて2個から3個にしただけのものである。具体的には、命令レジスタ内のレジスタ数、命令デコーダ数、演算部が夫々1つずつ増えることになる。
【0178】
並列実行境界情報Bは、データ依存に関する境界情報しか示していないので、演算資源による制約は、演算資源制約検出部152で動的に検出することになる。
【0179】
演算資源制約検出部152は、当該サイクルで現在までに発行可能としている命令群に加えて、後続する命令レジスタの命令を発行することが可能であるか否かを出力する。具体的には、命令レジスタA231の命令に加えて命令レジスタB232の命令を発行することが不可能である場合、第2命令デコーダ34の無動作命令フラグを設定するために“1”を出力し、同様に命令レジスタA231と命令レジスタB232の命令に加えて命令レジスタC233の命令を発行することが不可能である場合、第3命令デコーダ35の無動作命令フラグを設定するために“1”を出力する。
【0180】
全体としては、命令内の並列実行境界情報Bと演算資源制約検出部152の出力のいずれかが“1”である場合に、該当する命令デコーダの無動作フラグを“1”に設定する。
【0181】
このように、必要に応じて適切な命令デコーダの無動作フラグを設定し、命令としてのデコードを無効化する。
【0182】
このように、図1に示したような命令フォーマットをとり、図20,図21に示したような単純な回路を用意するだけで、命令コードを変更することなく、複数の並列度のプロセッサに対応した命令発行制御を高速に行うことができる。
【0183】
(プロセッサの動作)
次に、本プロセッサの具体的な動作について説明する。図22は、アセンブラコードによるプログラムの一例を示す図である。このプログラムは、7個の命令で構成されており、表記は図6のプログラムと同じである。ニーモニック“st”は、レジスタの格納値のメモリへの転送を表している。
【0184】
図23に、図22のプログラムを2並列のプロセッサで実行した場合と3並列のプロセッサで実行した場合の実行イメージを示す。図23(a)が2並列のプロセッサで実行した場合を、図23(b)が3並列のプロセッサで実行した場合を示している。図22及び図23を用いて、夫々の場合の本プロセッサの動作を説明する。
【0185】
(2並列プロセッサの場合)
2並列プロセッサで動作する場合、まず最初に命令発行制御部150の並列度モードフラグ151を“0”にセットしておく。これにより、各サイクルにおいて命令発行制御部150では、並列実行の境界として並列実行境界情報Aを使用するように制御される。
【0186】
具体的には、命令2、命令4、命令6及び命令7の並列実行境界情報Aが“1”に設定されているので、図23(a)に示したように4つの実行単位で実行されることになる。
【0187】
(3並列プロセッサの場合)
3並列プロセッサで動作する場合、まず最初に命令発行制御部150の並列度モードフラグ151を“1”にセットしておく。これにより、各サイクルにおける命令発行制御には、並列実行境界情報Bの情報と演算資源制約検出部152の出力を使用することになる。
【0188】
具体的には、並列実行境界情報Bは命令4と命令7しか“1”に設定されていないが、3並列分の演算資源しか搭載していないことによる制約を演算資源制約検出部152が検出する。従って図23(b)に示すように、最初のサイクルでは命令1、命令2及び命令3の3つの命令が発行される。
【0189】
次のサイクルでは、命令4の並列実行境界情報Bの情報により命令4のみが発行される。
【0190】
その次のサイクルで残りの命令5、命令6及び命令7の3つの命令を発行することが可能であり、全体として図23(b)に示したように3つの実行単位で実行されることになる。これからわかるように、3並列のモードで実行することにより、2並列のプロセッサの場合に比べて実行単位の数を1つ減らすことができる。
【0191】
又、上記のプログラムを4並列のプロセッサで動作させた場合、2並列から3並列の場合と同様の構成の拡張を行ったと考えると、並列度モードフラグ“1”にセットして動作し、最初のサイクルで命令4の並列実行境界情報Bの情報により命令1〜命令4までの4つの命令が発行され、次のサイクルで残りの命令5〜命令7の命令を発行することが可能であり、全体として2つの実行単位で実行される。つまり、3並列から4並列に拡張することによっても、実行単位の数を更に1つ減らすことができる。
【0192】
3並列の場合に比べて最初のサイクルでの発行命令数を増やすことができたのは、演算資源制約検出部152の出力が変化したからである。
【0193】
従来の静的なスケジューリングを行うプロセッサでは、並列度向上等のハードウェアの拡張を行っても、並列実行の境界が固定されているため実行単位の数は変わらず、性能向上のためには動作周波数を向上させるか、プログラムを再コンパイルするしかなかった。
【0194】
それに対して、本実施の形態の構成をとることにより、ハードウェアの拡張に応じた並列実行境界情報を使用できるようになり、プログラムの再コンパイルなしで性能を向上させることができるようになる。
【0195】
[実施の形態4]
次に上述の実施の形態3におけるプロセッサで実行するコードを生成するコンパイラ、及びそのコンパイル方法についての実施の形態について説明する。本コンパイラの構成については、大部分は前述の実施の形態2のコンパイラと同一であるが、複数の並列実行境界情報の扱いのみが異なる。複数の並列実行境界情報は、プロセッサの並列度に応じて選択的に使用される。具体的には、命令スケジューリング部の構成が異なることになる。図24は実施の形態2のおけるコンパイラの構成及び関連するデータを示すブロック図である。
【0196】
(命令スケジューリング部)
本実施の形態のコンパイラの命令スケジューリング部102Aは、実施の形態2における命令スケジューリング部102と同様に、依存関係解析部110、命令再配置部111A、命令再集合化部112、並列実行境界付加部113から構成されるが、異なる点は命令再配置部111Aの再配置の方法と命令再配置部111Aが命令均一化部121を備えるという点である。
【0197】
命令スケジューリング部102Aは基本ブロック単位で処理を行う。ただし、ハードウェアの並列度に応じた複数の並列実行境界情報を設定する。
【0198】
図25に、本実施の形態のコンパイラの命令スケジューリング部102Aのフローチャートを示す。まず、依存関係解析部110と命令再配置部111Aが起動され、当該基本ブロックに関して、依存関係のみを考慮したスケジューリングを行う(ステップS21)。ここでは、搭載する演算器の数による制約は考慮しない。ここで、命令再配置の際、命令再配置部111Aの命令均一化部121が起動され、依存関係が許す限り、各実行グループに含まれる命令数が均一になるように配置される。これによって、ハードウェアの拡張に応じて効率良く性能を向上させることができる。命令均一化部121については、後の例で説明している。
【0199】
次に、命令再集合化部112が起動され、命令の並べ替えは行わないが、依存関係解析部110による情報と、2並列のハードウェアの演算資源の制約の情報をもとに、先頭から順にできるだけ多くの命令が同時実行できるように集合化していく(ステップS22)。
【0200】
最後に、並列実行境界付加部113が起動され、命令再配置部111Aで配置が確定した命令群の末尾に並列実行境界情報Bを設定し、命令再集合化部で決定した命令群の末尾毎に並列実行境界情報Aを設定する(ステップS23)。
【0201】
(コンパイラの動作)
次に、本コンパイラの特徴的な構成要素の動作について具体的な命令を用いて説明する。最初の例としては、図22のアセンブラコードを用いる。命令スケジューリング部の動作について、図25を用いて説明する。まず依存関係解析部111が起動される。図22のアセンブラコードの依存グラフを図26に示す。
【0202】
次に命令再配置部111Aにて、図26の依存グラフをもとにして、依存関係のみを考慮したスケジューリングを行う(ステップS21)。この例では、命令の順序は変わらず、命令1及び命令2と、命令5との間にデータ依存関係が存在するので、命令5の直前の命令4までを1つの命令グループとし、残りの3命令をもう1つの命令グループとする。この例に関しては命令均一化部121の効果は現れない。
【0203】
次に、命令再集合化部112にて依存関係と演算資源制約を考慮したスケジューリングを行う(ステップS22)。ここでは、並列度2を想定して最大2命令発行を演算資源の制約としてスケジューリングを行う。その結果、命令1と命令2、命令3と命令4、命令5と命令6、命令7が夫々実行グループをなす。
【0204】
最後に、並列実行境界付加部113にて、命令再配置部111Aでの決定にしたがって並列実行境界情報Bを設定し、命令再集合化部112での決定にしたがって並列実行境界情報Aを設定する(ステップS23)。具体的には、命令4及び命令7の並列実行境界情報Bに“1”が設定され、命令2、命令4、命令6及び命令7の並列実行境界情報Aに“1”が設定される。
【0205】
以上が命令スケジューリング部の動作である。このような構成をとることにより、実施の形態3のプロセッサの動作例で示した実行形式コードを生成することが可能となり、再コンパイルすることなくハードウェアの拡張に応じて性能を向上させることができるようになる。
【0206】
次に、命令再配置部111Aに備えられた命令均一化部の動作について、例を用いて説明する。図27はプログラムの一例を示す図である。このプログラムでは、命令1と命令6との間のデータ依存関係以外には依存関係は存在しない。このプログラムを2並列のプロセッサで実行した場合、一般的なスケジューリングを行って並列実行境界情報Aを設定しておけば、3つの実行グループで実行することができ、又これ以上実行グループを減らすことはできない。
【0207】
図27のプログラムを命令均一化部121を持つ本実施の形態の構成の命令再配置部111Aでスケジューリングした場合の実行コードと3並列のプロセッサで実行した場合の実行イメージを図28に示す。図28では、命令再配置部111Aの動作に着目するため並列実行境界情報Bのみを示している。
【0208】
命令再配置部111Aでは、まず依存関係のみを考慮してスケジューリングを行う(ステップS21)。この例では命令1と命令6との間にのみ依存関係が存在するので命令1と命令6とを別々にした2つの命令グループを生成することが決定される。この後、命令均一化部121が起動され、依存関係が存在しない命令の移動を行い、基本ブロック内の各命令グループの命令数をなるべく均一にすることを試みる。この例では、初期段階では命令1〜命令5までの5命令と命令6の1命令を夫々命令グループとするようにスケジューリングされるが、命令均一化部121によって命令4及び命令5が後ろの命令グループに移動される。具体的には、命令3の並列実行境界情報Bに“1”を設定する。これによって、各命令グループの命令数は共に3命令となる。
【0209】
図28に示すように、生成された実行コードの3並列プロセッサでの実行イメージを見ると、図27のプログラムが2つの実行グループで実行されていることがわかる。
【0210】
同様に、図27のプログラムを命令均一化部を持たない構成の命令再配置部でスケジューリングした場合を仮定し、実行コードと3並列のプロセッサで実行した場合の実行イメージを図29に示す。
【0211】
図27のプログラムでは、命令1と命令6の間にしか依存関係が存在しないため、命令均一化部を持たない構成の命令再配置部では、命令1〜命令5までの5命令と命令6の1命令を夫々命令グループとするようにスケジューリングされてしまう。具体的には、命令5の並列実行境界情報Bに“1”を設定してしまう。
【0212】
その結果、実行イメージを見るとわかるように、3並列のプロセッサで実行しても3つの実行グループで実行されてしまい、本発明のコンパイラによる生成コードの場合に比べて実行サイクル数が1サイクル増加する。又、このコードをたとえ4並列のプロセッサで実行しても3つの実行グループで実行されてしまうことが容易に類推できる。
【0213】
このように、命令再配置部内に命令均一化部121を備えることにより、並列度の向上に応じて効率的に性能を向上させることが可能となる。
【0214】
本実施の形態で示されるコンパイラをフロッピーディスク、ハードディスク、CD―ROM、MO、DVDなどの記録媒体に入れることにより本実施の形態で示されるコンパイラを、コンピュータで実現できる。
【0215】
又、本実施の形態で示されるコンパイラにより生成された実行形式コードをフロッピーディスク、ハードディスク、CD―ROM、MO、DVD、半導体メモリなどの記録媒体に入れることもできる。
【0216】
以上、本発明に係るプロセッサ及びコンパイラについて、実施の形態に基づいて説明したが、本発明はこれらの実施の形態に限られないことは勿論である。即ち、以下のような形態が考えられる。
【0217】
(1)上記実施の形態のプロセッサ及びコンパイラでは、命令フォーマット内に2個の並列実行境界情報を持たせることを想定していたが、本発明はこの並列実行境界の個数に限定されるものではない。並列実行境界情報を3個以上持たせることも可能である。
【0218】
(2)上記実施の形態のプロセッサ及びコンパイラでは、固定長の命令を実行することを想定していたが、本発明はこの命令フォーマットに限定されるものではない。可変長の命令フォーマットを採用しても本発明の有意性は保たれる。
【0219】
(3)上記実施の形態1のプロセッサ及び上記実施の形態2のコンパイラでは、命令フォーマット内に分岐ラベル情報を持たせていたが、この情報は必ずしも必要ではない。分岐ラベル情報を持たなくても、実行部からの分岐成立もしくは不成立を示す信号に応じて命令発行制御部内に備えた実行フロー状態を示すフラグを切り替え、そのフラグに応じていずれの並列実行境界情報を選択するかを選択することにより、実行フローに対応する効果を得ることが可能である。これによって、命令コードサイズの増加を抑えることができる。
【0220】
(4)上記実施の形態1のプロセッサでは、実行フローの検出のために、実行部から分岐が成立したか否かの信号を入力していたが、この信号は必ずしも必要ではない。実行部からは分岐命令であることと、分岐先のアドレスの情報を受け取り、現在の命令のアドレスと比較することによって実行フローを検出するような構成にしてもよい。この場合の命令発行制御部31Aの構成を図30に示す。ここでは比較器317を用いてプログラムカウンタからの現在実行される命令のアドレスと実行部より出力される分岐先のアドレス情報とが比較され、この出力によって実行フローの流れを検出する。従って比較器317が実行フロー検出手段の機能を達成している。
【0221】
(5)実施の形態3のプロセッサ及び実施の形態4のコンパイラでは、複数の並列実行境界情報として、ある特定の並列度に特化した情報と依存関係のみの情報とを持たせることを想定していたが、依存関係のみの情報は必ずしも必要ではない。複数の並列実行境界情報として、各並列度に夫々特化した情報を複数個もたせてもよい。
【0222】
(6)上記実施の形態3のプロセッサでは、依存関係のみによる並列実行境界情報を選択した場合、ハードウェアで演算資源制約検出部にて動的に演算資源の制約を検出していたが、この演算資源制約検出部は必ずしも必要ではない。並列度すなわち同時発行数のみの制約であれば、命令レジスタに投入する命令の個数もしくは命令デコーダの個数を制限しておくことにより、制約を満たすことが可能である。
【0223】
(7)又実施の形態4のコンパイラでは、命令再配置部中に命令均一化部121を設けている。命令均一化部121は実行グループの命令数が均一になるように並列化するものであるが、命令数だけでなく命令サイズを均一化するように構成することもできる。又従来の1つだけの並列実行境界情報を有する命令をグループ化する際に命令均一化部を用いて均一化することによっても、実行速度を向上させることができる。
【0224】
(8)又第4の実施の形態では、命令再配置ステップを命令間の依存関係にのみ基づいて並べ替えて行うようにしたが、ハードウェア制約に基づいて並べ替えを行うようにしてもよい。又命令再集合化ステップではハードウェア制約に基づいて命令の集合を再びグループ分けすることとしたが、命令再配置ステップと異なるハードウェア制約に基づいて、又は命令間の依存関係のみに基づいて、並列実行可能な命令の集合を再びグループ化するようにしてもよい。
【0225】
【発明の効果】
以上の説明から明らかなように、本願の請求項1,2のプロセッサ及び請求項31,32の記録媒体のプログラムを実行することで、静的なスケジューリングを採用しながらも、並列実行の境界が固定されることなく、柔軟な並列実行が可能となる。
【0226】
又本願の請求項3〜6のプロセッサによれば、静的なスケジューリングを採用しながらも、並列実行の境界が固定されることなく、実行フローに応じた並列実行が可能となる。又動的な並列依存解析を行うハードウェアを不要としてハードウェア簡単化を図りながらも、性能の劣化を抑えることが可能となる。
【0227】
更に本願の請求項4のプロセッサ及び請求項25の記録媒体のプログラムを実行することにより、前記命令内に該命令が分岐命令の飛び先対象となっているか否かを示す分岐ラベル情報を備え、前記実行フロー検出部は、前記命令内の前記分岐ラベル情報と、前記実行手段からの前サイクルで分岐が成立したか否かの情報とを基にして実行の流れの変化の検出を行うことにより、単純な回路を用意するだけで、上記発明の効果を得るための実行フローの変化の検出を容易に行うことが可能となる。又請求項11,18のコンパイラ及びコイパイル方法によれば、このようなプログラムを作成することができる。
【0228】
又本願の請求項7〜9ののプロセッサによれば、静的なスケジューリングを採用しながらも、プログラムを再コンパイルすることなく、複数の並列度のハードウェアに対応した並列実行が可能となり、互換性を確保することができる。
【0229】
更に本願の請求項8,9のプロセッサは、演算資源の制約によりどれだけの命令を同時実行できるかを検出する演算資源制約検出部を備え、前記並列実行情報選択手段の出力と前記演算資源制約検出部の出力とに基づいて命令の発行を制御することにより、静的なスケジューリングを採用しながらも、ハードウェアの並列度を拡張した際に、以前の並列実行境界に制約されることなく、ハードウェアの拡張に応じた性能向上を図ることが可能となる。
【0230】
又本願の請求項10,11,17,18のコンパイラ及びコンパイル方法、請求項24,25の記録媒体によれば、静的なスケジューリングを採用しながらも、並列実行の境界が固定されることなく、実行フローに応じた並列実行を可能とする実行形式コードが生成され、動的な並列依存解析を行うハードウェアを不要としてハードウェア簡単化を図りながら、性能の劣化を抑えることが可能となる。
【0231】
又本願の請求項12〜15,19〜22のコンパイラ及びコンパイル方法、請求項26〜29の記録媒体によれば、静的なスケジューリングを採用しながらも、プログラムを再コンパイルすることなく、複数の並列度のハードウェアに対応した並列実行を可能とする実行形式コードが生成され、互換性を確保することができる。
【0232】
更に本願の請求項13,14,20,21のコンパイラ及びコンパイル方法、請求項27,28の記録媒体によれば、前記命令再配置ステップ及び前記命令集合化ステップ、もしくは命令再集合化ステップのうちの1つは、ハードウェア演算資源を全く考慮せず、各命令間の依存関係にのみ基づいて命令をグループ化するため、静的なスケジューリングを採用しながらも、ハードウェアの並列度を拡張した際に、以前の並列実行境界に制約されることなく、ハードウェアの拡張に応じた性能向上を図ることのできる実行形式コードの生成が可能となる。
【0233】
又本願の請求項16,23のコンパイラ及びコンパイル方法、請求項30の記録媒体によれば、ハードウェアの並列度を拡張した際に、どのような並列度にも対応して効率良く性能向上を図ることのできる実行形式コードの生成が可能となる。
【図面の簡単な説明】
【図1】本発明の実施の形態に係るプロセッサが実行する命令の構造を示す図である。
【図2】同プロセッサにおける命令の供給と発行の概念を示す図である。
【図3】同プロセッサのハードウェア構成を示すブロック図である。
【図4】同プロセッサの命令レジスタ23周辺の構成を示すブロック図である。
【図5】同プロセッサの命令発行制御部31とその周辺の回路構成を示す図である。
【図6】分岐先ラベルを含むプログラムの一部を示す図である。
【図7】図6のプログラムの実行イメージを示す図である。
【図8】図6のプログラムの処理を従来の単一の並列実行境界情報を持つプロセッサに行わせるプログラムを示す図である。
【図9】図8のプログラムの実行イメージを示す図である。
【図10】本発明の実施の形態2のおけるコンパイラの構成及び関連するデータを示すブロック図である。
【図11】同コンパイラにおける命令スケジューリング部102の処理手順を示すフローチャートである。
【図12】アセンブラコードの一例を示す図である。
【図13】図11に対応する依存グラフである。
【図14】同コンパイラにおける命令再配置部111の処理手順を示すフローチャートである。
【図15】アセンブラコードとその基本ブロックの一例を示す図である。
【図16】図15に対応する実行形式コードを示す図である。
【図17】図16の実行形式コードの実行イメージを示す図である。
【図18】図15のコードを従来のコンパイラでスケジューリングした場合の実行形式コードの一例を示す図である。
【図19】図18の実行形式コードの実行イメージを示す図である。
【図20】本発明の実施の形態3に係るプロセッサの命令発行制御部150とその周辺の回路構成を示す図である。
【図21】命令デコーダとその周辺回路の構成を示す図である。
【図22】プログラムの一例を示す図である。
【図23】図22のプログラムの実行イメージを示す図である。
【図24】実施の形態2のおけるコンパイラの構成及び関連するデータを示すブロック図である。
【図25】本発明の実施の形態に係るコンパイラの命令スケジューリング部のフローチャートを示す図である。
【図26】図22のプログラムの依存グラフを示す図である。
【図27】プログラムの一例を示す図である。
【図28】図27のプログラムに対応する実行形式コードとその実行イメージを示す図である。
【図29】図27のプログラムを命令再配置部内に命令均一化部を持たないコンパイラでスケジューリングした場合の実行形式コードとその実行イメージを示す図である。
【図30】本発明に係るプロセッサの命令発行制御部とその周辺の回路構成を示す図である。
【符号の説明】
10 並列実行境界情報A
11 並列実行境界情報B
20 命令供給発行部
21 命令フェッチ部
22 命令バッファ
23 命令レジスタ
231命令レジスタA
232命令レジスタB
30 解読部
31 命令発行制御部
32 命令デコーダ
33 第1命令デコーダ
34 第2命令デコーダ
35 第3命令デコーダ
40 実行部
41 実行制御部
42 PC部
43 レジスタファイル
44 第1演算部
45 第2演算部
47 オペランドアクセス部
48,49 データバス
100 コンパイラ上流部
101 アセンブラコード生成部
102,102A 命令スケジューリング部
103 オブジェクトコード生成部
110 依存関係解析部
111,111A 命令再配置部
112 命令再集合化部
113 並列実行境界付加部
120 命令集合化部
121 命令均一化部
130 ソースコード
140 オブジェクトコード
150 命令発行制御部
151 並列モードフラグ
152 演算資源制約検出部
153,154 マルチプレクサ
312 実行フロー検出部
313 実行フロー検出手段
314 実行フローフラグ
315 マルチプレクサ
316 並列実行情報選択手段
Claims (30)
- 複数の命令からなる複合命令を記憶装置から読み出す命令読み出し手段と、
前記複数の命令を解読する解読手段と、
前記命令内の並列実行の可否を示す並列実行情報を参照して、同時実行する命令の集合を決定する命令発行制御手段と、
夫々の命令中に指定されたオペレーションを並列して実行する複数の演算部を含む実行手段とを備え、
前記命令内に条件によりそのうちの1つが選択される前記並列実行情報を複数個備えることを特徴とするプロセッサ。 - 前記命令内の前記並列実行情報は、前記命令と該命令に後続する命令とが並列に実行できるか否かを示す情報であることを特徴とする請求項1記載のプロセッサ。
- 複数の命令からなる複合命令を記憶装置から読み出す命令読み出し手段と、
前記複数の命令を解読する解読手段と、
前記命令内の並列実行の可否を示す並列実行情報を参照して、同時実行する命令の集合を決定する命令発行制御手段と、
前記複数の命令中に各命令の動作が指定され、前記指定に基づいて複数のオペレーションを実行する実行手段とを備え、
前記命令内の並列実行情報は、
その命令が属する基本ブロックの命令が先行基本ブロックの命令から命令順に実行される場合に適用され、当該命令とその命令に後続する命令が並列に実行できるかどうかを示す第1の並列実行境界情報と、
当該命令が属する基本ブロックに分岐があった場合以降に適用され、当該分岐があった命令とその命令に後続する命令が並列に実行できるかどうかを示す第2の並列実行境界情報とを含むものであり、
前記命令発行制御手段は、
前記命令の実行の流れが変化したこともしくは変化しなかったことを検出する実行フロー検出手段と、
前記実行フロー検出手段の検出結果を参照して、前記命令内の複数種類の並列実行の可否を示す並列実行情報のうち、いずれの並列実行情報を有効とするかを選択する並列実行情報選択手段と、を備えることを特徴とするプロセッサ。 - 前記命令内に該命令が分岐命令の飛び先対象となっているか否かを示す分岐ラベル情報を備え、
前記実行フロー検出手段は、前記命令内の前記分岐ラベル情報と、前記実行手段からの前サイクルで分岐が成立したか否かの情報とを基にして実行の流れの変化の検出を行うことを特徴とする請求項3記載のプロセッサ。 - 前記実行フロー検出手段は、
前記実行手段からの前サイクルで分岐したか否かの情報を基にして実行の流れの変化の検出を行い、
前記並列実行情報選択手段は、
現在の実行フローの状態を記憶する実行フロー記憶手段を備え、前記実行フロー検出手段からの情報に応じて実行フロー記憶手段の内容を更新することを特徴とする請求項3記載のプロセッサ。 - 前記実行フロー検出手段は、前記実行手段からの前サイクルの分岐命令の分岐先アドレスに関する情報と、現在の命令のアドレスとを比較することにより実行の流れの変化の検出を行うことを特徴とする請求項3記載のプロセッサ。
- 複数の命令からなる複合命令を記憶装置から読み出す命令読み出し手段と、
前記複数の命令を解読する解読手段と、
前記各命令内の並列実行の可否を示す複数の並列実行情報を参照して、同時実行する命令の集合を決定する命令発行制御手段と、
前記複数の命令中に各命令の動作が指定され、前記指定に基づいて複数のオペレーションを実行する実行手段とを備え、
夫々の命令中に指定されたオペレーションを並列して実行する複数の演算部を含む実行手段とを備え、
前記命令内の並列実行情報は、
並列実行数に応じて夫々あらかじめ設定され、当該命令とその命令に後続する命令が並列に実行できるかどうかを示す並列実行境界情報であり、
前記命令発行制御手段は、
前記実行手段が備える演算器の種類や個数によって分類される複数の実行モードのうち、現在動作しているモードを記憶する実行モード記憶手段と、
前記実行モード記憶手段の内容を参照して、前記命令内の複数種類の並列実行の可否を示す並列実行情報のうち、いずれの並列実行情報を有効とするかを選択する並列実行情報選択手段と、を備えることを特徴とするプロセッサ。 - 前記複数の実行モードのうちのあるモードでは、
前記命令発行制御手段は、
前記命令読み出し手段によって読み出された複数の命令のうち、演算資源の制約によりどれだけの命令を同時実行できるかを検出する演算資源制約検出部を備え、
前記並列実行情報選択手段の出力と前記演算資源制約検出部の出力とに基づいて命令の発行を制御することを特徴とする請求項7記載のプロセッサ。 - 前記演算資源制約検出部は、
前記命令読み出し手段によって読み出された複数の命令に対して、順にそれまでに発行可能とした命令の集合に加えて該命令を発行可能であるか否かを判定していくことを特徴とする請求項8記載のプロセッサ。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、基本ブロックの分岐先対象となっている命令以降の命令群を処理対象として、並列実行すべき複数の命令が隣接するように命令の並べ替えを行う命令再配置ステップと、
前記基本ブロックの先頭の命令に先行する他の基本ブロックの最終グループの命令を含む当該基本ブロックの命令群を処理対象として、並列実行可能な命令の集合を再びグループとして区分する命令再集合化ステップと、
前記命令再配置ステップと前記命令再集合化ステップの結果に基づき、命令内にそれぞれの前記スケジューリングに対応した並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするコンパイル方法。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、
前記ソースコードから生成された命令のうち、前記プログラム内で分岐先の対象となっていることを示す命令について、該命令にそのことを明示する情報を付加する分岐ラベル情報付加ステップを備えることを特徴とする請求項10記載のコンパイル方法。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、第1のハードウェア制約に基づいて命令の並べ替えを行う命令再配置ステップと、
前記第1のハードウェア制約と異なる少なくとも1つのハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、
前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするコンパイル方法。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、各命令間の依存関係にのみ基づいて命令の並べ替えを行う命令再配置ステップと、
プログラムが実行されるハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、
前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするコンパイル方法。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、プログラムが実行されるハードウェアの制約に基づいて命令の並べ替えを行う命令再配置ステップと、
各命令間の依存関係にのみ基づいて並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、
前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするコンパイル方法。 - 前記命令再配置ステップは、
並列実行可能な各命令集合に含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化ステップを備えることを特徴とする請求項12〜14のいずれか1項記載のコンパイル方法。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイル方法であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
命令を並べ替え、並列実行可能な命令の集合をグループとして区分する命令再配置ステップを備え、
前記命令再配置ステップは、並列実行可能な各命令グループに含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化ステップを備えることを特徴とするコンパイル方法。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、
前記命令スケジューリング手段は、
並列実行可能な命令の集合をグループとして区分する命令集合化手段とを含み、基本ブロックの分岐先対象となっている命令以降の命令群を処理対象として、並列実行すべき複数の命令が隣接するように命令の並べ替えを行う命令再配置手段と、
前記基本ブロックの先頭の命令に先行する他の基本ブロックの最終グループの命令を含む当該ブロックの命令群を処理対象として、並列実行可能な命令の集合を再びグループとして区分する命令再集合化手段と、
前記命令再配置手段と前記命令再集合化手段の結果に基づき、命令内にそれぞれの前記スケジューリングに対応した並列実行の可否を示す並列実行情報を付加する並列実行情報付加手段と、を備えることを特徴とするコンパイラ。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、
前記ソースコードから生成された命令のうち、前記プログラム内で分岐先の対象となっていることを示す命令について、該命令にそのことを明示する情報を付加する分岐ラベル情報付加手段を備えることを特徴とする請求項17記載のコンパイラ。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、
前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、
前記命令スケジューリング手段は、
並列実行可能な命令の集合をグループとして区分する命令集合化手段とを含み、第1のハードウェア制約に基づいて命令の並べ替えを行う命令再配置手段と、
前記第1のハードウェア制約と異なる少なくとも1つのハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化手段と、
前記命令集合化手段と前記少なくとも1つの命令再集合化手段の結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加手段と、を備えることを特徴とするコンパイラ。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、
前記命令スケジューリング手段は、
命令の集合をグループとして区分する命令集合化手段を含み、各命令間の依存関係にのみ基づいて命令の並べ替えを行う命令再配置手段と、
プログラムが実行されるハードウェアの制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化手段と、
前記命令集合化手段と前記少なくとも1つの命令再集合化手段の結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加手段と、を備えることを特徴とするコンパイラ。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、
前記命令スケジューリング手段は、
並列実行可能な命令の集合をグループとして区分する命令集合化手段を含み、プログラムが実行されるハードウェアの制約に基づいて命令の並べ替えを行う命令再配置手段と、
各命令間の依存関係にのみ基づいて並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化手段と、
前記命令集合化手段と前記少なくとも1つの命令再集合化手段の結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加手段と、を備えることを特徴とするコンパイラ。 - 前記命令再配置手段は、
並列実行可能な各命令集合に含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化手段を備えることを特徴とする請求項18〜21のいずれか1項記載のコンパイラ。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するコンパイラであって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリング手段を備え、
前記命令スケジューリング手段は、
命令を並べ替え、並列実行可能な命令の集合をグループとして区分する命令再配置手段を備え、
前記命令再配置手段は、並列実行可能な各命令グループに含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化手段を備えることを特徴とするコンパイラ。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、基本ブロックの分岐先対象となっている命令以降の命令群を処理対象として、並列実行すべき複数の命令が隣接するように命令の並べ替えを行う命令再配置ステップと、
前記基本ブロックの先頭の命令に先行する他の基本ブロックの最終グループの命令を含む当該基本ブロックの命令群を処理対象として、並列実行可能な命令の集合を再びグループとして区分する命令再集合化ステップと、
前記命令再配置ステップと前記命令再集合化ステップの結果に基づき、命令内にそれぞれの前記スケジューリングに対応した並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするプログラムを記録した記録媒体。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、
前記ソースコードから生成された命令のうち、前記プログラム内で分岐先の対象となっていることを示す命令について、該命令にそのことを明示する情報を付加する分岐ラベル情報付加ステップを備えることを特徴とする請求項24記載のプログラムを記録した記録媒体。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、第1のハードウェア制約に基づいて命令の並べ替えを行う命令再配置ステップと、
前記第1のハードウェア制約と異なる少なくとも1つのハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、
前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするプログラムを記録した記録媒体。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、各命令間の依存関係にのみ基づいて命令の並べ替えを行う命令再配置ステップと、
プログラムが実行されるハードウェア制約に基づいて、夫々並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、
前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするプログラムを記録した記録媒体。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
並列実行可能な命令の集合をグループとして区分する命令集合化ステップを含み、プログラムが実行されるハードウェアの制約に基づいて命令の並べ替えを行う命令再配置ステップと、
各命令間の依存関係にのみ基づいて並列実行可能な命令の集合を再びグループとして区分する少なくとも1つの命令再集合化ステップと、
前記命令集合化ステップと前記少なくとも1つの命令再集合化ステップの結果に基づき、命令内に複数の並列実行の可否を示す並列実行情報を付加する並列実行情報付加ステップと、を備えることを特徴とするプログラムを記録した記録媒体。 - 前記命令再配置ステップは、
並列実行可能な各命令集合に含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化ステップを備えることを特徴とする請求項26〜28のいずれか1項記載の記録媒体。 - 高級言語で記述されたプログラムのソースコードを実行形式コードに変換するプログラムを記録した記録媒体であって、
前記ソースコードから生成された命令を、並列実行すべき複数の命令が隣接するように並べ直す命令スケジューリングステップを備え、
前記命令スケジューリングステップは、
命令を並べ替え、並列実行可能な命令の集合をグループとして区分する命令再配置ステップを備え、
前記命令再配置ステップは、並列実行可能な各命令グループに含まれる命令の数もしくはサイズが均一になるように再配置する命令均一化ステップを備えることを特徴とするプログラムを記録した記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000047146A JP3553845B2 (ja) | 2000-02-24 | 2000-02-24 | プロセッサ、コンパイラ、コイパイル方法及び記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000047146A JP3553845B2 (ja) | 2000-02-24 | 2000-02-24 | プロセッサ、コンパイラ、コイパイル方法及び記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001236227A JP2001236227A (ja) | 2001-08-31 |
JP3553845B2 true JP3553845B2 (ja) | 2004-08-11 |
Family
ID=18569445
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000047146A Expired - Fee Related JP3553845B2 (ja) | 2000-02-24 | 2000-02-24 | プロセッサ、コンパイラ、コイパイル方法及び記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3553845B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3564445B2 (ja) * | 2001-09-20 | 2004-09-08 | 松下電器産業株式会社 | プロセッサ、コンパイル装置及びコンパイル方法 |
JP2006012185A (ja) * | 2005-08-02 | 2006-01-12 | Matsushita Electric Ind Co Ltd | プロセッサ |
JP5703729B2 (ja) | 2010-12-09 | 2015-04-22 | 富士ゼロックス株式会社 | データ処理装置及びプログラム |
JP6245573B2 (ja) | 2013-11-25 | 2017-12-13 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 制御フロー・グラフ上の実行パスの実行頻度情報を得るための方法、並びに、当該情報を得るためのコンピュータ及びそのコンピュータ・プログラム |
-
2000
- 2000-02-24 JP JP2000047146A patent/JP3553845B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2001236227A (ja) | 2001-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3564445B2 (ja) | プロセッサ、コンパイル装置及びコンパイル方法 | |
US6490673B1 (en) | Processor, compiling apparatus, and compile program recorded on a recording medium | |
US8161266B2 (en) | Replicating opcode to other lanes and modifying argument register to others in vector portion for parallel operation | |
JP4979875B2 (ja) | リターゲッタブルコンパイルシステム及び方法 | |
US9329866B2 (en) | Methods and apparatus for adapting pipeline stage latency based on instruction type | |
USRE41751E1 (en) | Instruction converting apparatus using parallel execution code | |
JP3553845B2 (ja) | プロセッサ、コンパイラ、コイパイル方法及び記録媒体 | |
US9201657B2 (en) | Lower power assembler | |
US7302555B2 (en) | Zero overhead branching and looping in time stationary processors | |
JP4125847B2 (ja) | プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体 | |
Zhou et al. | Tree traversal scheduling: A global instruction scheduling technique for VLIW/EPIC processors | |
JP3727324B2 (ja) | プロセッサ及びコンパイル装置 | |
Seto et al. | Custom instruction generation with high-level synthesis | |
US6704855B1 (en) | Method and apparatus for reducing encoding needs and ports to shared resources in a processor | |
JP4006887B2 (ja) | コンパイラ、プロセッサおよび記録媒体 | |
Pettersson | Parallel instruction decoding for DSP controllers with decoupled execution units | |
JP2006012185A (ja) | プロセッサ | |
Ramarao | A hybrid partitioning and scheduling technique for branch decoupling |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040205 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040224 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040326 |
|
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: 20040420 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040430 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090514 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100514 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110514 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |