(57)【特許請求の範囲】
【請求項１】
命令を逐次実行する情報処理装置であって、
分岐の成否を予測する分岐予測情報と過去の分岐結果についての情報を示す分岐履歴情報とを有する分岐命令を含む命令群を予め記憶する記憶手段と、
前記記憶手段から次に実行すべき命令を読み出す命令フェッチ手段と、
読み出された命令が前記分岐命令であるか否か解読する命令解読手段と、
前記命令が分岐命令であると解読された場合に、その分岐命令の分岐予測情報に基づいて次に実行すべき命令を読み出すよう前記命令フェッチ手段を制御する命令フェッチ制御手段と、
解読された前記分岐命令を実行する実行手段と、
前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐予測情報を生成する分岐予測情報生成手段と、
前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐履歴情報を生成する分岐履歴情報生成手段と、
前記記憶手段に格納された前記分岐命令の分岐予測情報と分岐履歴情報とを前記分岐予測情報生成手段によって生成された分岐予測情報と前記分岐履歴情報生成手段によって生成された分岐履歴情報とに更新する分岐命令更新手段とを備えることを特徴とする情報処理装置。
【請求項２】
前記分岐履歴情報は、その分岐履歴情報を有する分岐命令についての過去の複数の分岐結果に関する要約であることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記分岐履歴情報は、前記分岐命令について過去に分岐が成立した頻度が「極めて多い」、「多い」、「少ない」、「極めて少ない」のいずれかを示すことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記分岐履歴情報生成手段は、
前記分岐命令に含まれていた分岐履歴情報が「極めて少ない」、「少ない」、「多い」のいずれかを示し、かつ、前記分岐結果が「成立」である場合には、それぞれ「少ない」、「多い」、「極めて多い」を示す新たな分岐履歴情報を生成し、
前記分岐命令に含まれていた分岐履歴情報が「極めて多い」、「多い」、「少ない」のいずれかを示し、かつ、前記分岐結果が「不成立」である場合には、それぞれ「多い」、「少ない」、「極めて少ない」を示す新たな分岐履歴情報を生成することを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記予測情報更新手段は、
前記分岐履歴情報が「多い」を示し、かつ、前記分岐結果が「成立」である場合にのみ、「成立」を示す新たな分岐予測情報を生成し、
前記分岐履歴情報が「少ない」を示し、かつ、前記分岐結果が「不成立」である場合にのみ「不成立」を示す新たな分岐予測情報を生成することを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記分岐命令更新手段は、前記分岐予測情報生成手段によって生成された分岐予測情報と前記分岐履歴情報生成手段によって生成された分岐履歴情報とを含む新たな分岐命令を生成し、その分岐命令を前記記憶手段の該当箇所に上書きするものであり、前記該当箇所とは、前記新たな分岐命令が生成される元となった分岐命令が記憶されていた位置であることを特徴とする請求項５記載の情報処理装置。
【請求項７】
前記記憶手段は、
前記命令群を格納する主記憶部と、
前記主記憶部に格納された命令群の一部についての複写を記憶するキャッシュ記憶部と、
前記キャッシュ記憶部の内容が書き換えられた場合に、その変更を前記主記憶部の内容にも反映させるキャッシュ制御手段とを含み、
前記命令フェッチ手段は前記キャッシュ記憶部から前記命令を読み出し、
前記分岐命令更新手段は、前記キャッシュ記憶部に記憶された分岐命令の分岐予測情報及び分岐履歴情報を更新することを特徴とする請求項６記載の情報処理装置。
【請求項８】
前記予測情報更新手段は、
前記分岐履歴情報が「極めて多い」を示し、かつ、前記分岐結果が「成立」である場合にのみ、「成立」を示す新たな分岐予測情報を生成し、
前記分岐履歴情報が「極めて少ない」を示し、かつ、前記分岐結果が「不成立」である場合にのみ「不成立」を示す新たな分岐予測情報を生成することを特徴とする請求項４記載の情報処理装置。
【請求項９】
前記分岐命令更新手段は、前記分岐予測情報生成手段によって生成された分岐予測情報と前記分岐履歴情報生成手段によって生成された分岐履歴情報とを含む新たな分岐命令を生成し、その分岐命令を前記記憶手段の該当箇所に上書きし、前記該当箇所とは、前記新たな分岐命令が生成される元となった分岐命令が記憶されていた位置であることを特徴とする請求項８記載の情報処理装置。
【請求項１０】
前記記憶手段は、
前記命令群を格納する主記憶部と、
前記主記憶部に格納された命令群の一部についての複写を記憶するキャッシュ記憶部と、
前記キャッシュ記憶部の内容が書き換えられた場合に、その変更を前記主記憶部の内容にも反映させるキャッシュ制御手段とを含み、
前記命令フェッチ手段は前記キャッシュ記憶部から前記命令を読み出し、
前記分岐命令更新手段は、前記キャッシュ記憶部に記憶された分岐命令の分岐予測情報及び分岐履歴情報を更新することを特徴とする請求項９記載の情報処理装置。
【請求項１１】
前記分岐履歴情報は、前記分岐命令について過去に分岐が成立した頻度が「多い」又は「少ない」を示すことを特徴とする請求項２記載の情報処理装置。
【請求項１２】
前記分岐履歴情報生成手段は、
前記分岐命令に含まれていた分岐履歴情報が「少ない」を示し、かつ、前記分岐結果が「成立」である場合にのみ、「多い」を示す新たな分岐履歴情報を生成し、
前記分岐命令に含まれていた分岐履歴情報が「多い」を示し、かつ、前記分岐結果が「不成立」である場合にのみ、「少ない」を示す新たな分岐履歴情報を生成することを特徴とする請求項１１記載の情報処理装置。
【請求項１３】
前記予測情報更新手段は、
前記分岐履歴情報が「多い」を示し、かつ、前記分岐結果が「成立」である場合にのみ、「成立」を示す新たな分岐予測情報を生成し、
前記分岐履歴情報が「少ない」を示し、かつ、前記分岐結果が「不成立」である場合にのみ「不成立」を示す新たな分岐予測情報を生成することを特徴とする請求項１２記載の情報処理装置。
【請求項１４】
前記分岐命令更新手段は、前記分岐予測情報生成手段によって生成された分岐予測情報と前記分岐履歴情報生成手段によって生成された分岐履歴情報とを含む新たな分岐命令を生成し、その分岐命令を前記記憶手段の該当箇所に上書きし、前記該当箇所とは、前記新たな分岐命令が生成される元となった分岐命令が記憶されていた位置であることを特徴とする請求項１３記載の情報処理装置。
【請求項１５】
前記記憶手段は、
前記命令群を格納する主記憶部と、
前記主記憶部に格納された命令群の一部についての複写を記憶するキャッシュ記憶部と、
前記キャッシュ記憶部の内容が書き換えられた場合に、その変更を前記主記憶部の内容にも反映させるキャッシュ制御手段とを含み、
前記命令フェッチ手段は前記キャッシュ記憶部から前記命令を読み出し、
前記分岐命令更新手段は、前記キャッシュ記憶部に記憶された分岐命令の分岐予測情報及び分岐履歴情報を更新することを特徴とする請求項１４記載の情報処理装置。
【請求項１６】
前記分岐履歴情報は、その分岐履歴情報を有する分岐命令についての過去の分岐ごとの分岐結果を示すことを特徴とする請求項１記載の情報処理装置。
【請求項１７】
前記分岐履歴情報は、直前及び２回前の分岐結果を示す２ビットであり、
前記分岐履歴情報生成手段は、前記分岐命令が実行された際の分岐結果を用いて新たな分岐履歴情報を生成することを特徴とする請求項１６記載の情報処理装置。
【請求項１８】
前記予測情報更新手段は、前記分岐命令が実行された際の分岐結果と、その分岐命令に含まれていた直前及び２回前の分岐結果とが、それぞれ、「成立」、「不成立」、「成立」である場合には「不成立」を示す新たな分岐予測情報を生成し、「不成立」、「成立」、「不成立」である場合には「成立」を示す新たな分岐予測情報を生成することを特徴とする請求項１７記載の情報処理装置。
【請求項１９】
前記分岐命令更新手段は、前記分岐予測情報生成手段によって生成された分岐予測情報と前記分岐履歴情報生成手段によって生成された分岐履歴情報とを含む新たな分岐命令を生成し、その分岐命令を前記記憶手段の該当箇所に上書きし、前記該当箇所とは、前記新たな分岐命令が生成される元となった分岐命令が記憶されていた位置であることを特徴とする請求項１８記載の情報処理装置。
【請求項２０】
前記記憶手段は、
前記命令群を格納する主記憶部と、
前記主記憶部に格納された命令群の一部についての複写を記憶するキャッシュ記憶部と、
前記キャッシュ記憶部の内容が書き換えられた場合に、その変更を前記主記憶部の内容にも反映させるキャッシュ制御手段とを含み、
前記命令フェッチ手段は前記キャッシュ記憶部から前記命令を読み出し、
前記分岐命令更新手段は、前記キャッシュ記憶部に記憶された分岐命令の分岐予測情報及び分岐履歴情報を更新することを特徴とする請求項１９記載の情報処理装置。
【請求項２１】
分岐予測して命令を先読みするマイクロプロセッサの動作をシミュレーションするプログラムが記録された記録媒体であって、
前記プログラムは、
分岐の成否を予測する分岐予測情報と過去の分岐結果についての情報を示す分岐履歴情報とを有する分岐命令を含む命令群を予め記憶する記憶手段から、次に実行すべき命令を読み出す命令フェッチステップと、
読み出された命令が前記分岐命令であるか否か解読する命令解読ステップと、前記命令が分岐命令であると解読された場合に、その分岐命令の分岐予測情報に基づいて次に実行すべき命令を読み出す分岐予測ステップと、
解読された前記分岐命令を実行する実行ステップと、
前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐予測情報を生成する分岐予測情報生成ステップと、
前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐履歴情報を生成する分岐履歴情報生成ステップと、
前記記憶手段に格納された前記分岐命令の分岐予測情報と分岐履歴情報とを前記分岐予測情報生成ステップによって生成された分岐予測情報と前記分岐履歴情報生成ステップによって生成された分岐履歴情報とに更新する分岐命令更新ステップとをコンピュータに実行させることを特徴とする記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサ等の情報処理装置に関し、特に分岐予測の改良技術に関する。
【０００２】
【従来の技術】
パイプライン構造を採るマイクロプロセッサ等の情報処理装置において、分岐命令の実行によって制御の流れが分岐した場合に生じるパイプラインの乱れを抑える手法の一つに分岐予測がある。高い的中率の分岐予測を行うには、条件付き分岐命令（以下、単に「分岐命令」という。）ごとに分岐の成否を予測する必要がある。そのための方法として、プログラム中の各分岐命令に対応する分岐予測情報を集めた分岐予測テーブルを設けることが考えられる。
【０００３】
ところが、情報処理装置の内部に分岐予測テーブルを持たせたのではハードウェアの増大を招く。
そこで、分岐予測情報を情報処理装置の内部に固定的に保持するのではなく、分岐命令自体に備えることによって、情報処理装置に必要とされるハードウェアを最小限に抑える分岐予測手法が提案されている（例えば、特開昭６３−７５９３４に開示された情報処理装置）。
【０００４】
図１４は、上記従来の情報処理装置用の分岐命令のフォーマットを示す。
この従来の情報処理装置では、分岐命令４０に１ビットの分岐予測情報４０ｂを持たせておき、分岐命令４０の解読時には、その分岐予測情報４０ｂに従って次に実行すべき命令をメモリから先取りする。そして、分岐命令４０の実行が終了すると、その実行結果と分岐予測情報４０ｂを照合し、予測が失敗した場合には、メモリに格納されているその分岐命令４０の分岐予測情報４０ｂを更新するというものである。
【０００５】
これによって、情報処理装置の内部に分岐予測テーブルを設けることを回避している。
【０００６】
【発明が解決しようとする課題】
しかしながら、上記従来の情報処理装置は、情報処理装置に必要とされるハードウェア規模を抑えているものの、分岐予測の的中率が低いために、分岐予測の失敗に伴うペナルティが頻繁に生じるという問題点がある。
つまり、上記従来の情報処理装置は、直前の実行結果を示す１ビットの分岐予測情報４０ｂに基づいて次の命令を先取りするために、例えば、分岐の成立と不成立が交互に繰り返される場合には全ての予測が外れてしまう。そのために、このような分岐命令を実行する度に、先取りしていた命令を無効化しなければならず、情報処理装置の実行の高速化が妨げられる。
【０００７】
そこで本発明は、上記問題点に鑑みてなされたものであり、小規模のハードウェアで実現することができ、かつ、高い的中率の分岐予測を行う情報処理装置を提供することを目的とする。
また、本発明の第２の目的は、上記情報処理装置をソフトウェアで実現するためのプログラムが記録された記録媒体を提供することである。
【０００８】
【課題を解決するための手段】
上記第１の目的を達成するために、本発明に係る情報処理装置は、命令を逐次実行する情報処理装置であって、分岐の成否を予測する分岐予測情報と過去の分岐結果についての情報を示す分岐履歴情報とを有する分岐命令を含む命令群を予め記憶する記憶手段と、前記記憶手段から次に実行すべき命令を読み出す命令フェッチ手段と、読み出された命令が前記分岐命令であるか否か解読する命令解読手段と、前記命令が分岐命令であると解読された場合に、その分岐命令の分岐予測情報に基づいて次に実行すべき命令を読み出すよう前記命令フェッチ手段を制御する命令フェッチ制御手段と、解読された前記分岐命令を実行する実行手段と、前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐予測情報を生成する分岐予測情報生成手段と、前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐履歴情報を生成する分岐履歴情報生成手段と、前記記憶手段に格納された前記分岐命令の分岐予測情報と分岐履歴情報とを前記分岐予測情報生成手段によって生成された分岐予測情報と前記分岐履歴情報生成手段によって生成された分岐履歴情報とに更新する分岐命令更新手段とを備えることを特徴とする。
【０００９】
また、上記第２の目的を達成するために、本発明に係る記録媒体は、分岐予測して命令を先読みするマイクロプロセッサの動作をシミュレーションするプログラムが記録された記録媒体であって、前記プログラムは、分岐の成否を予測する分岐予測情報と過去の分岐結果についての情報を示す分岐履歴情報とを有する分岐命令を含む命令群を予め記憶する記憶手段から、次に実行すべき命令を読み出す命令フェッチステップと、読み出された命令が前記分岐命令であるか否か解読する命令解読ステップと、前記命令が分岐命令であると解読された場合に、その分岐命令の分岐予測情報に基づいて次に実行すべき命令を読み出す分岐予測ステップと、解読された前記分岐命令を実行する実行ステップと、前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐予測情報を生成する分岐予測情報生成ステップと、前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐履歴情報を生成する分岐履歴情報生成ステップと、前記記憶手段に格納された前記分岐命令の分岐予測情報と分岐履歴情報とを前記分岐予測情報生成ステップによって生成された分岐予測情報と前記分岐履歴情報生成ステップによって生成された分岐履歴情報とに更新する分岐命令更新ステップとをコンピュータに実行させることを特徴とする。
【００１１】
【発明の実施の形態】
以下、本発明に係る情報処理装置の実施の形態について、図面を参照しながら説明する。
（情報処理装置の構成）
図１は、本発明に係る情報処理装置１００の構成を示すブロック図である。
【００１２】
本装置１００は、予め用意された３２ビット固定長の命令を逐一にフェッチ・解読・実行するプロセッサシステムであり、メインメモリ９、キャッシュユニット１１、命令フェッチ器１２、命令レジスタ１３、命令解読器１４、命令実行器１５、アドレス制御器８、プログラムカウンタ群１０、アドレス生成器１９、分岐履歴情報生成器１６、分岐予測情報生成器１７及び分岐命令更新器１８から構成される。
【００１３】
これら各構成要素８〜１９は、図示されていないクロック信号に同期して動作する。
また、構成要素１２〜１８は４段のパイプラインを構成している。即ち、命令フェッチ器１２はパイプラインのフェッチ（ＩＦ）ステージを構成し、命令レジスタ１３と命令解読器１４はパイプラインの解読（ＤＥＣ）ステージを構成し、命令実行器１５、分岐履歴情報生成器１６、分岐予測情報生成器１７及び分岐命令更新器１８はパイプラインの実行（ＥＸ）ステージを構成し、さらに命令実行器１５及び分岐命令更新器１８はパイプラインのメモリアクセス（ＭＥＭ）ステージを構成し、各ステージにおける処理は１クロックサイクル内で独立かつ並列に行われる。
【００１４】
メインメモリ９は、ＤＲＡＭ等であり、本装置１００の実行対象となる命令列（プログラム）を格納している。このプログラムには、本装置１００に特有の分岐命令が含まれている。
図２は、その分岐命令のフォーマットを示す図である。
分岐命令２０は、１３ビットのオペコード２０ａ、１ビットの分岐予測情報２０ｂ、２ビットの分岐履歴情報２０ｃ及び１６ビットの分岐先アドレス２０ｄからなる。
【００１５】
オペコード２０ａは、この命令を識別するためのオペレーションコードや分岐条件等を示す。
分岐予測情報２０ｂは、次にこの分岐命令が実行された場合における分岐の成否を予測するものである。具体的には、この分岐予測情報２０ｂと予測内容との関係は以下の通りである。
【００１６】
分岐予測情報２０ｂが「０」である場合は分岐が不成立、
分岐予測情報２０ｂが「１」である場合は分岐が成立、
と予測する。
分岐履歴情報２０ｃは、この分岐命令の過去の複数の分岐結果を要約した情報（統計的にまとめた情報）に相当する。具体的には、この分岐履歴情報２０ｃと過去に分岐が成立した頻度（不成立の場合と比較した頻度）との関係は以下の通りである。
【００１７】
分岐履歴情報２０ｃが「００」である場合は「極めて少ない」、
分岐履歴情報２０ｃが「０１」である場合は「少ない」、
分岐履歴情報２０ｃが「１０」である場合は「多い」、
分岐履歴情報２０ｃが「１１」である場合は「極めて多い」、
を示す。
【００１８】
分岐先アドレス２０ｄは、分岐が成立した場合に分岐すべきアドレス、即ち、次に実行すべき命令が置かれているメインメモリ９上のアドレスを示す。なお、分岐が成立しなかった場合には、次に実行すべき命令は、この分岐命令の直後に置かれた命令である。
キャッシュユニット１１は、命令フェッチ器１２によるメインメモリ９へのアクセスを高速化するものであり、キャッシュメモリ１１ａ、タグメモリ１１ｂ及びキャッシュコントローラ１１ｃから構成される。
【００１９】
キャッシュメモリ１１ａは、ＳＲＡＭ等であり、メインメモリ９に置かれたプログラムの一部をキャッシュブロックと呼ばれる単位で格納する高速メモリである。タグメモリ１１ｂは、そのキャッシュブロックのアドレス等からなるタグディレクトリを記憶する。
キャッシュコントローラ１１ｃは、命令フェッチ器１２から出力されたアドレスとタグメモリ１１ｂの内容を比較することによってキャッシュヒットの有無を検出し、ヒットした場合には命令フェッチ器１２によるキャッシュメモリ１１ａへのアクセスを有効化する。一方、ミスヒットの場合にはＬＲＵ（Least Recently Used）アルゴリズムによりキャッシュブロックを置き換える。また、キャッシュブロックが書き換えられた場合には、ライトバック方式によりそのキャッシュブロックをメインメモリ９に書き込むことで、キャッシュメモリ１１ａとメインメモリ９の内容の一貫性を保っている。
【００２０】
命令フェッチ器１２は、次に解読し実行すべき命令を先取りするものであり、フェッチ用命令カウンタ１０ａから送られてきたフェッチアドレスをキャッシュユニット１１に出力し、そのアドレスに対応する命令をキャッシュメモリ１１ａ（又はメインメモリ９）から読み出して内部の命令バッファ１２ａに一時的に保持する。命令バッファ１２ａは、先取りした１個の命令を保持するレジスタである。
【００２１】
命令レジスタ１３は、解読の対象となる１個の命令を保持するレジスタであり、命令バッファ１２ａに先取りされた命令を次のクロックサイクルで読み出し、解読期間中その命令を保持する。本図では、命令レジスタ１３に分岐命令が保持された場合の格納内容が示されている。
命令解読器１４は、マイクロプログラムを格納したＲＯＭ等からなり、命令レジスタ１３に保持された命令のオペコード１３ａを解読し、その結果を制御信号１４１として命令実行器１５に出力する。また、解読対象が分岐命令である場合には、その分岐命令の分岐予測情報１３ｂを信号線１４２を介して命令実行器１５とアドレス制御器８に通知する。
【００２２】
アドレス制御器８は、命令解読器１４や命令実行器１５からの通知に基づいてアドレス生成器１９及びプログラムカウンタ群１０を制御することにより、プログラムカウンタ群１０を構成する３つのカウンタ（フェッチ用命令カウンタ１０ａ、解読用命令カウンタ１０ｂ、実行用命令カウンタ１０ｃ）の値を更新する。
その結果、フェッチ用命令カウンタ１０ａには命令バッファ１２ａに格納されている命令が置かれていたメインメモリ９上のアドレス（フェッチアドレス）、解読用命令カウンタ１０ｂには命令レジスタ１３に保持されている命令が置かれていたメインメモリ９上のアドレス（解読アドレス）、実行用命令カウンタ１０ｃには命令実行器１５で実行されている命令が置かれていたメインメモリ９上のアドレス（実行アドレス）が保持されることになる。
【００２３】
アドレス生成器１９は、ＡＬＵやセレクタ等からなり、アドレス制御器８による制御の下で、プログラムカウンタ群１０の各カウンタ１０ａ〜１０ｃに対してインクリメントしたり、分岐先アドレス１３ｄをフェッチ用命令カウンタ１０ａに書き込んだり、無効化したりする。
命令実行器１５は、命令解読器１４からの制御信号１４１に従って内部に有する汎用レジスタや演算器等を含む各構成要素を制御することによって各命令に対応した演算やデータ転送等を実行する。
【００２４】
また、命令実行器１５は、実行した命令が分岐命令であった場合には、その実行結果（分岐の成否）を信号線１５１を介して分岐履歴情報生成器１６及び分岐予測情報生成器１７に通知すると共に、分岐予測が外れた場合のペナルティ処理（命令レジスタ１３に転送された命令の無効化及び実行結果に基づく本来の分岐先命令のフェッチ）のために、その実行結果と分岐予測情報１３ｂとを比較しその結果（予測が的中した／外れた）を信号線１５２を介して命令解読器１４及びアドレス制御器８に通知する。
【００２５】
分岐履歴情報生成器１６は、分岐命令が命令実行器１５によって実行された場合に、その分岐命令に含まれていた分岐履歴情報１３ｃとその実行結果（分岐の成否）とに基づいて、その分岐履歴情報を変更すべきか否か判断し、変更すべき場合には新たな分岐履歴情報を生成し、その判断結果（「そのまま維持すべき」か「更新した」か）と新たな分岐履歴情報とを分岐命令更新器１８に出力する。
【００２６】
分岐予測情報生成器１７は、分岐命令が命令実行器１５によって実行された場合に、その分岐命令に含まれていた分岐履歴情報１３ｃとその実行結果（分岐の成否）とに基づいて、その分岐予測情報を変更すべきか否か判断し、変更すべき場合には新たな分岐予測情報を生成し、その判断結果（「そのまま維持すべき」か「更新した」か）と新たな分岐予測情報とを分岐命令更新器１８に出力する。
【００２７】
図３は、分岐履歴情報生成器１６及び分岐予測情報生成器１７の入出力関係を示す真理値表である。つまり、入力値の欄は、分岐履歴情報生成器１６及び分岐予測情報生成器１７それぞれに入力される分岐履歴情報Ｈ1Ｈ0及び実行結果Ｘの全ての組み合わせを示し、出力値の分岐履歴情報Ｎ1Ｎ0欄は、左欄の各入力値の組み合わせに対して分岐履歴情報生成器１６が出力する新たな分岐履歴情報を示し、出力値の分岐予測情報Ｆ欄は、左欄の各入力値の組み合わせに対して分岐予測情報生成器１７が出力する新たな分岐予測情報を示す。なお、図中の記号「−」は、その値が意味を持たないこと、即ち、分岐履歴情報生成器１６（又は分岐予測情報生成器１７）が分岐履歴情報（又は分岐予測情報）を「そのまま維持すべき」旨を別の信号線を用いて分岐命令更新器１８に通知することを示す。
【００２８】
図４は、分岐履歴情報生成器１６の詳細な回路を示す。
分岐履歴情報生成器１６は、３ビットの入力信号（分岐履歴情報Ｈ1Ｈ0及び実行結果Ｘ）に対して、３ビットの信号（分岐履歴情報Ｎ1Ｎ0及び「そのまま維持すべき」旨を示す情報Ｍ1）を分岐命令更新器１８に出力する組み合わせ論理回路として実現されている。
【００２９】
図５は、分岐予測情報生成器１７の詳細な回路を示す。
分岐予測情報生成器１７は、３ビットの入力信号（分岐履歴情報Ｈ1Ｈ0及び実行結果Ｘ）に対して、２ビットの信号（分岐予測情報Ｆ及びその情報を「そのまま維持すべき」旨を示す情報Ｍ0）を分岐命令更新器１８に出力する組み合わせ論理回路として実現されている。なお、上記情報Ｍ1及びＭ0は、上記各情報を「そのまま維持すべき」場合に論理値「１」となる。
【００３０】
図６は、分岐履歴情報２０ｃの値を状態とする分岐命令２０の状態遷移図であり、同時に、図３に示された分岐履歴情報及び分岐予測情報の更新アルゴリズムを示す図である。
図中の４つの楕円は２ビットの分岐履歴情報のとり得る値（状態）に相当し、実線の遷移矢印線は実行結果が分岐成立「１」の場合、破線の遷移矢印線は実行結果が分岐不成立「０」の場合の遷移方向を示す。また、分岐予測情報が明示的に出力（変更）される場合が、遷移矢印線３０ａ、３０ｂの横に添付記載されている。
【００３１】
例えば、実行前における分岐履歴情報が「１０」（過去に分岐が成立した頻度が「多い」）であり、その分岐命令の実行結果が成立「１」であった場合には、分岐履歴情報生成器１６は新たな分岐履歴情報「１１」（過去に分岐が成立した頻度が「極めて多い」）を分岐命令更新器１８に出力すると同時に、分岐予測情報生成器１７は新たな分岐予測情報「１」（成立）を分岐命令更新器１８に出力する。
【００３２】
分岐命令更新器１８は、分岐履歴情報生成器１６からの信号（Ｎ1、Ｎ0、Ｍ1）、分岐予測情報生成器１７からの信号（Ｆ、Ｍ0）及び実行用命令カウンタ１０ｃの値に基づいて、その実行用命令カウンタ１０ｃの値が示すキャッシュメモリ１１ａ（又はメインメモリ９）上のアドレスに置かれた分岐命令の上位１６ビット（オペコード２０ａ、分岐予測情報２０ｂ及び分岐履歴情報２０ｃ）を更新する。但し、分岐履歴情報生成器１６及び分岐予測情報生成器１７の両方から各情報を「そのまま維持すべき」旨の通知を受けた場合及び命令実行器１５によって実行された命令が分岐命令でない旨の通知を受けた場合には、分岐命令更新器１８は上記メインメモリ９（又はキャッシュメモリ１１ａ）に対して何のアクションも起こさない。
【００３３】
図７は、分岐命令更新器１８の詳細な構成を示すブロック図である。
分岐命令更新器１８はさらに、分岐命令記憶部１８ａ、更新判断部１８ｂ、命令生成部１８ｃ及びアドレスゲート部１８ｄから構成される。
分岐命令記憶部１８ａは、命令レジスタ１３に新たな命令が格納されるたびにその命令の上位１６ビット（その命令が分岐命令の場合であれば、オペコード１３ａ、分岐予測情報１３ｂ及び分岐履歴情報１３ｃからなる１６ビット）を取得して記憶するキューバッファであり、解読ステージ及び実行ステージにある２個の命令の各上位１６ビットを保持する。
【００３４】
更新判断部１８ｂは、分岐履歴情報生成器１６から分岐履歴情報の更新の有無に関する信号Ｍ1を、分岐予測情報生成器１７から分岐予測情報の更新の有無に関する信号Ｍ0を取得し、それぞれの信号に基づいて命令生成部１８ｃにおける新たな分岐命令の生成を制御したり、アドレスゲート部１８ｄによるアドレスの出力許否を制御する。
【００３５】
命令生成部１８ｃは、分岐命令記憶部１８ａに記憶された２個の１６ビット命令のうち先に格納されたもの（これは、直前に実行された分岐命令の上位１６ビット部分に相当する）に対して分岐履歴情報生成器１６及び分岐予測情報生成器１７から出力された新たな分岐履歴情報Ｎ1Ｎ0及び分岐予測情報Ｆを上書きすることにより、キャッシュユニット１１（又はメインメモリ９）上の更新すべき分岐命令の上位１６ビット部分を生成する。但し、更新判断部１８ｂから「そのまま維持すべき」旨の信号（Ｍ1及びＭ0）を受けた場合には、その信号に対応する分岐履歴情報及び（又は）分岐予測情報は更新しない。
【００３６】
アドレスゲート部１８ｄは、更新判断部１８ｂに入力された２つの信号Ｍ1，Ｍ0の少なくとも一つが「更新した」旨を示す場合に、実行用命令カウンタ１０ｃの値をキャッシュユニット１１に出力する。
このように、分岐命令更新器１８は、命令実行器１５によって実行された分岐命令の分岐予測情報２０ｂ及び分岐履歴情報２０ｃの少なくとも一方を変更する必要がある場合には、キャッシュメモリ１１ａ（又はメインメモリ９）に置かれた当該分岐命令の上位１６ビット部分に新たな１６ビットを上書きすることで、分岐命令２０自体を更新する。
【００３７】
ここで、上記分岐履歴情報生成器１６、分岐予測情報生成器１７及び分岐命令更新器１８による分岐履歴情報及び分岐予測情報の具体的な変化について、図６の状態遷移図に従って、以下に例示する。
いま、分岐履歴情報２０ｃが「００」で分岐予測情報２０ｂが「０」である分岐命令２０が繰り返し実行されるとする。すると、
第１回目の実行結果が分岐成立であった場合には、分岐履歴情報２０ｃは「０１」に更新され、分岐予測情報２０ｂは変化しない。
【００３８】
第２回目の実行結果が分岐成立であった場合には、分岐履歴情報２０ｃは「１０」に更新され、分岐予測情報２０ｂは変化しない。
第３回目の実行結果が分岐成立であった場合には、分岐履歴情報２０ｃは「１１」に更新され、分岐予測情報２０ｂは「１」に更新される。
第４回目の実行結果が分岐不成立であった場合には、分岐履歴情報２０ｃは「１０」に更新され、分岐予測情報２０ｂは変化しない。
【００３９】
第５回目の実行結果が分岐不成立であった場合には、分岐履歴情報２０ｃは「０１」に更新され、分岐予測情報２０ｂは変化しない。
第６回目の実行結果が分岐不成立であった場合には、分岐履歴情報２０ｃは「００」に更新され、分岐予測情報２０ｂは「０」に更新される。
以上の例示を分岐予測情報２０ｂの値を縦軸にとり、分岐履歴情報２０ｃの値を横軸にとった座標系にプロットすると図８に示されるグラフとなる。
【００４０】
このグラフから判るように、分岐の成立が連続した場合に分岐予測情報２０ｂが「０」から「１」に変化する場合の分岐履歴情報２０ｃの遷移箇所と、分岐の不成立が連続した場合に分岐予測情報２０ｂが「１」から「０」に変化する場合の分岐履歴情報２０ｃの遷移箇所とは相違する。即ち、分岐履歴情報２０ｃが変化する方向により分岐予測情報２０ｂが反転するしきい値が異なる。これは、分岐結果の履歴を入力として分岐予測情報２０ｂを決定する写像においてヒステリシスが存在すると言える。つまり、過去に分岐が成立した頻度と不成立だった頻度において顕著な差がない限り、それまでの分岐予測を尊重（維持）することを意味する。
【００４１】
このヒステリシスによって、例外的に発生する分岐によって分岐予測情報２０ｂが乱されてしまうという不具合や、分岐成立と不成立とを繰り返す場合における分岐予測の全てが外れてしまうという不具合等が回避され、特に、制御系のプログラムにおける分岐予測の的中率が高くなる。
（情報処理装置１００の動作）
次に、以上のように構成された情報処理装置１００の動作について、具体的な分岐命令が実行される場合を例にとって説明する。
【００４２】
図９は、情報処理装置１００におけるパイプライン処理の流れを示す図である。
いま、メインメモリ９に置かれた分岐命令の分岐予測情報２０ｂ及び分岐履歴情報２０ｃの初期値がそれぞれ「０」及び「０１」であるとする。なお、これら初期値は、ソースプログラムの静的な解析によりコンパイラが生成したものである。そして、その分岐命令を含むキャッシュブロックがメインメモリ９から読み出されてキャッシュメモリ１１ａに置かれているとする。
（１）ＩＦステージ
その分岐命令は、命令フェッチ器１２によって、クロックサイクル１の後半（１ｂ）において、キャッシュメモリ１１ａから読み出され命令バッファ１２ａに格納される。
（２）ＤＥＣステージ
次のクロックサイクル２の前半（２ａ）において、命令バッファ１２ａに先読みされていた分岐命令は命令レジスタ１３に転送され、命令解読器１４によって解読される。
【００４３】
具体的には、命令解読器１４は、命令レジスタ１３に保持されたオペコード１３ａを解読することによって解読対象が分岐命令であると判断し、分岐条件の判断を行わせるための制御信号を命令実行器１５に出力すると共に、命令レジスタ１３に保持された分岐予測情報１３ｂをアドレス制御器８に通知する。
アドレス制御器８は、通知された分岐予測情報１３ｂが「０」であるので、この命令の実行結果は分岐不成立と予測し、アドレス生成器１９を制御することによってフェッチ用命令カウンタ１０ａの値をインクリメントさせる。その値（フェッチアドレス）は命令フェッチ器１２を経てキャッシュユニット１１に出力される。
【００４４】
その結果、このクロックサイクル２の後半（２ｂ）におけるＩＦステージにおいては、この分岐命令に後続する命令が命令フェッチ器１２によって読み出され命令バッファ１２ａに格納される。このように、分岐命令が実行される前であるにも拘わらず、分岐命令が有する分岐予測情報に基づく次命令の先読みが行われる。
（３）ＥＸステージ
続くクロックサイクル３の前半（３ａ）において、命令実行器１５は、命令解読器１４からの制御信号に従って、この分岐命令の条件判断を行い、その実行結果（分岐の成否）を分岐履歴情報生成器１６及び分岐予測情報生成器１７に通知すると共に、その予測結果（的中の当否）を命令解読器１４及びアドレス制御器８に通知する。
【００４５】
そして、このクロックサイクル３の後半（３ｂ）において、分岐履歴情報生成器１６及び分岐予測情報生成器１７は、上記通知を受けると同時に命令レジスタ１３に格納されていた分岐履歴情報１３ｃを獲得し、図６に示された遷移に従って、それぞれ、新たな分岐履歴情報及び分岐予測情報を生成（又はそのままに）し、その結果を分岐命令更新器１８に通知する。新たな分岐履歴情報及び（又は）分岐予測情報の通知を受けた分岐命令更新器１８は、それら情報を有する新たな分岐命令の上位１６ビットを生成する。
【００４６】
なお、上記予測が的中しなかった場合には、このクロックサイクル３の後半（３ａ）において、命令実行器１５及び命令フェッチ器１２によるペナルティ処理（命令レジスタ１３に転送された命令の無効化及び実行結果に基づく本来の分岐先命令のフェッチ）が行われる。
（４）ＭＥＭステージ
クロックサイクル４において、分岐命令更新器１８は、分岐履歴情報生成器１６及び分岐予測情報生成器１７から分岐予測情報２０ｂ及び分岐履歴情報２０ｃの少なくとも一つを「更新した」旨の通知を受けていた場合には、直前のクロックサイクル３ｂにおいて生成しておいた分岐命令（の上位１６ビット部分）を、実行用命令カウンタ１０ｃに格納されている実行アドレスが示すキャッシュメモリ１１ａ（又はメインメモリ９）上の分岐命令に上書きする。
【００４７】
このようにして更新されたキャッシュメモリ１１ａ上の分岐命令を含むキャッシュブロックは、キャッシュメモリ１１ａから消去される前に、キャッシュコントローラ１１ｃによって対応するメインメモリ９上の位置に書き込まれる。これによって、再びこの分岐命令がメインメモリ９から読み出されて実行される場合であっても、この分岐命令に含まれた分岐予測情報２０ｂと分岐履歴情報２０ｃは、過去の分岐結果に基づく有効な情報であることが保証される。
【００４８】
以上のようにして、本装置１００では、分岐命令ごとの分岐履歴情報と分岐予測情報は、専用の記憶テーブルではなく、その分岐命令自体に保持される。従って、複数の分岐命令についての分岐履歴情報や分岐予測情報を情報処理装置１００の内部に固定的に備える場合に比べ、情報処理装置１００に必要とされるハードウェアの規模は少なくて済む。
【００４９】
また、本装置１００では、分岐命令は、１ビットの分岐予測情報だけでなく、複数回の分岐結果についての要約を示す２ビットの分岐履歴情報を有し、この分岐履歴情報と直前の分岐結果とに基づいてヒステリシスを有する分岐予測が行われる。従って、１ビットの分岐予測情報だけに基づく分岐予測の場合に比べ、単に予測的中率が高くなるだけでなく、例外的に発生する分岐による悪影響を受けにくい確実な分岐予測が行われる。
【００５０】
なお、本実施形態では、メインメモリ９はＤＲＡＭ等でありキャッシュメモリ１１ａはＳＲＡＭ等からなるとしたが、本発明はこれらに限定されるものではない。
例えば、メインメモリ９はハードディスク等の不揮発性の記憶装置であってもよい。これによって、装置の電源が切断された場合であっても、それまでの実行結果に基づく分岐予測情報２０ｂ及び分岐履歴情報２０ｃはハードディスク等に保存されているので、次の再実行時には、もはや分岐履歴情報を蓄積することなく有効な分岐予測が開始される。
（変形例１）
次に、上記実施形態の情報処理装置１００の変形例を示す。
【００５１】
上記実施形態では、図６に示されるように、分岐予測情報は、分岐履歴情報が「多い」から「極めて多い」に遷移した場合にのみ「成立」に設定され、分岐履歴情報が「少ない」から「極めて少ない」に遷移した場合にのみ「不成立」に設定された。
これを、図１０の状態遷移図における遷移矢印線３１ａ、３１ｂに添付して記載されているように、分岐予測情報は分岐履歴情報が「極めて多い」に滞留することになった場合（即ち、分岐履歴情報が「極めて多い」である分岐命令の実行結果が「成立」となった場合）にのみ「成立」に設定され、分岐履歴情報が「極めて少ない」に滞留することになった場合（即ち、分岐履歴情報が「極めて少ない」である分岐命令の実行結果が「不成立」となった場合）にのみ「不成立」に設定され、他の遷移の場合には変化しない、という更新アルゴリズムに変形することができる。これは、分岐予測情報生成器１７を構成する組み合わせ論理回路における結線を変更することで容易に実現することができる。
【００５２】
この変形例１は、図６と図１０を比較して判るように、上述のヒステリシスの度合を上記実施形態の場合よりも強くした場合に相当する。つまり、実際に生じる分岐結果の成否のばらつきに対して分岐予測情報が変化しにくくなっている。これによって、分岐予測情報の乱れを強く抑止したいシステムや、分岐予測情報の変化を好まないシステム、例えば、実行時の動的な事象よりも静的な情報によって決まる初期値をできるだけ維持したいようなシステムに好適な情報処理装置が実現される。
（変形例２）
また、上記実施形態では、分岐履歴情報は２ビットであったが、これを１ビットに変形することも容易である。
【００５３】
図１１は、分岐履歴情報を１ビットとした場合における分岐履歴情報の更新アルゴリズムを示す状態遷移図である。分岐履歴情報は「多い」と「少ない」のいずれかの状態に属し、各状態はこの分岐命令の直前の実行結果がそれぞれ「成立」、「不成立」だったことを示す。分岐予測情報は、遷移矢印線３２ａに添付して記載されているように、分岐履歴情報が「多い」に滞留することになった場合（即ち、分岐履歴情報が「多い」である分岐命令の実行結果が成立となった場合）にのみ「成立」に設定され、また、遷移矢印線３２ｂに添付して記載されているように、分岐履歴情報が「少ない」に滞留することになった場合（即ち、分岐履歴情報が「少ない」である分岐命令の実行結果が不成立となった場合）にのみ「不成立」に設定され、他の遷移の場合には変化しない。従って、分岐予測情報は、分岐命令の実行結果が成立と不成立を繰り返している場合には変化しないが、同一結果が連続した場合にはその結果に対応する値に設定されることになる。
【００５４】
このような変形例２は、実施形態の分岐履歴情報生成器１６及び分岐予測情報生成器１７における論理回路を削減し、結線を変更することで容易に実現することができる可能であるのは言うまでもない。
この変形例２は、図６と図１１を比較して判るように、上述のヒステリシスの度合を弱くした場合に相当する。つまり、上記実施形態の場合に比べ、分岐予測情報の変化は分岐履歴情報の変化に敏感となる。これによって、上記実施形態の情報処理装置１００に比べ、プログラムの実行結果に敏感な、即ち、例外処理が多発するリアルタイム性の強いシステムに好適な情報処理装置が実現される。
【００５５】
また、この変形例２では、分岐履歴情報は１ビットで済むので、コードサイズが縮小化されたり、命令セットを定義（オペコードのマッピング）する場合における自由度が増す。
（変形例３）
上記実施形態及び２つの変形例は、過去の分岐結果についての統計的要約である分岐履歴情報を有する分岐命令を実行する情報処理装置であったが、これを、過去の分岐ごとに対応するビットの集合からなる分岐履歴情報を有する分岐命令を実行する情報処理装置に変形することも容易である。
【００５６】
つまり、上記実施形態の情報処理装置１００における分岐履歴情報生成器１６及び分岐予測情報生成器１７の機能（入出力変換アルゴリズム）を変更することにより、当該分岐命令の過去の複数回の実行結果をそのまま示すビットの集まりを分岐履歴情報として保持する分岐命令を実行する情報処理装置が実現される。
図１２は、変形例３に係る情報処理装置の分岐履歴情報生成器及び分岐予測情報生成器による更新アルゴリズムを示す真理値表であり、上記実施形態における図３に対応する。
【００５７】
この変形例３においては、上記実施形態と異なり、分岐命令が有する２ビットの分岐履歴情報２０ｃは、下位ビットＨ0が当該分岐命令の直前の実行結果をし（「１」は「成立」、「０」は「不成立」を示す）、上位ビットＨ1が当該分岐命令の２回前の実行結果を示す。
この変形例３の分岐履歴情報生成器は、２ビットのキューバッファであり、命令実行器１５から新たな実行結果Ｘが通知されると、それまで保持していた２ビットＨ1Ｈ0を上位方向へシフトさせながら、その新たな実行結果Ｘを下位ビットＮ0に入力することで、新たな分岐履歴情報Ｎ1Ｎ0を生成する。
【００５８】
また、変形例３の分岐予測情報生成器は、原則として、分岐命令が実行される直前の２ビットの分岐履歴情報Ｈ1Ｈ0と命令実行器１５から通知される実行結果Ｘとを合わせた合計３ビットの値のうち多い論理値（例えば、Ｈ1Ｈ0＝０１でＸ＝１の場合には「１」）を新たな分岐予測情報Ｆとして生成し、例外として、それら３ビットＨ1Ｈ0Ｘが交互に反転する論値値をとる場合にのみ、その反転が継続するような論理値（Ｈ1Ｈ0Ｘ＝０１０の場合には「１」、Ｈ1Ｈ0Ｘ＝１０１の場合には「０」）を新たな分岐予測情報Ｆとして生成する。これは、原則として過去３回の実行結果における多いほうの結果（「成立」又は「不成立」）を次の分岐予測として採用するが、過去３回の実行結果が「成立」と「不成立」とを交互に繰り返している場合に限り、例外として、その繰り返しが継続されるものとして分岐予測する、ことを意味する。
【００５９】
図１３は、変形例３における分岐履歴情報及び分岐予測情報の更新アルゴリズムを示す状態遷移図である。本図は、上記実施形態における図６に対応するが、遷移矢印線に添付記載されている数値は、その遷移を引き起こす原因（即ち、その分岐命令の実行結果Ｘの値）と、その遷移に伴って分岐予測情報生成器から出力される新たな分岐予測情報の値とを示す。
【００６０】
例えば、いま、分岐履歴情報２０ｃが「００」で分岐予測情報２０ｂが「０」である分岐命令２０が繰り返し実行されるとする。すると、
第１回目の実行結果が分岐成立であった（的中しなかった）場合には、分岐履歴情報２０ｃは「０１」に更新され、分岐予測情報２０ｂは「０」に設定される（変化しない）。
【００６１】
第２回目の実行結果が分岐不成立であった（的中した）場合には、分岐履歴情報２０ｃは「１０」に更新され、分岐予測情報２０ｂは「１」に変更される。
第３回目の実行結果が分岐成立であった（的中した）場合には、分岐履歴情報２０ｃは「０１」に更新され、分岐予測情報２０ｂは「０」に変更される。
第４回目の実行結果が分岐不成立であった（的中した）場合には、分岐履歴情報２０ｃは「１０」に更新され、分岐予測情報２０ｂは「１」に変更される。
【００６２】
このように、変形例３に係る情報処理装置によれば、原則的には過去の分岐結果に基づいて分岐予測が行われるが、分岐の成立と不成立が交互に繰り返される場合においては、上記実施形態と異なり、そのトグル現象が繰り返されるものとして分岐予測が行われるので、そのような特殊なプログラムの流れであっても分岐予測が的中する。
【００６３】
以上、本発明に係る情報処理装置について、１つの実施形態と３つの変形例とを示したが、本発明はこれらに限定されるものではない。
分岐予測情報を決定するための条件（分岐履歴情報の値と分岐結果との組み合わせ）、分岐履歴情報を更新するアルゴリズム、分岐履歴情報のビット数等について、とり得る値を組み合わせることで他の変形例も容易になすことができるのは言うまでもない。
【００６４】
例えば、分岐履歴情報として、さらに深い分岐履歴の要約を８段階で示す３ビットを割り当てることもできる。これによって、さらに的中率が高くきめ細かい分岐予測を行うことが可能となる。
但し、１個の分岐命令に占める分岐予測のためのビット数を多くした場合には、命令セットを定義する場合における自由度等において犠牲を払う必要があるため、これらのビット数は予測的中率と装備すべき命令の種類とのトレードオフから決定する必要がある。
【００６５】
また、上記実施形態及び変形例の構成要素は、全て論理回路で実現されることを前提に説明したが、本発明は、ハードウェアによってのみ実現されるのではなく、ソフトウェアによっても実現できることは言うまでもない。
具体的には、上記実施形態の情報処理装置１００の構成要素のうち、命令や数値を格納する記憶手段９、１１ａ、１１ｂ、１２ａ、１３、１０ａ〜１０ｃ等を変数やデータ領域に割当て、残る制御手段８、１１ｃ、１２、１４〜１９等の機能をプログラミング言語を用いて記述すればよい。これによって、本発明に係る情報処理装置は、汎用のコンピュータシステムで実行されるシミュレーションプログラムや仮想マシンとして実現されることになる。そのような本発明に係る情報処理装置を実現するためのプログラムは、ＣＤ−ＲＯＭ等の記録媒体に格納して配布・流通され得る。
【００６６】
さらに、上記実施形態や変形例における分岐命令は、図１４に示された従来の命令フォーマットと異なり、例えば図２に示された命令フォーマットの如く、分岐履歴情報という本発明に固有の情報を有している。かかる特徴的な構造を有する分岐命令は本発明に固有であり、また、そのような分岐命令を含む命令群（プログラム）は、上記プログラムと同様に、フロッピーディスク等の記録媒体や通信回線等を介して配布・流通され得ることは言うまでもない。
【００６７】
【発明の効果】
上記目的を達成するために、本発明に係る情報処理装置は、命令を逐次実行する情報処理装置であって、分岐の成否を予測する分岐予測情報と過去の分岐結果についての情報を示す分岐履歴情報とを有する分岐命令を含む命令群を予め記憶する記憶手段と、前記記憶手段から次に実行すべき命令を読み出す命令フェッチ手段と、読み出された命令が前記分岐命令であるか否か解読する命令解読手段と、前記命令が分岐命令であると解読された場合に、その分岐命令の分岐予測情報に基づいて次に実行すべき命令を読み出すよう前記命令フェッチ手段を制御する命令フェッチ制御手段と、解読された前記分岐命令を実行する実行手段と、前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐予測情報を生成する分岐予測情報生成手段と、前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐履歴情報を生成する分岐履歴情報生成手段と、前記記憶手段に格納された前記分岐命令の分岐予測情報と分岐履歴情報とを前記分岐予測情報生成手段によって生成された分岐予測情報と前記分岐履歴情報生成手段によって生成された分岐履歴情報とに更新する分岐命令更新手段とを備えることを特徴とする。
【００６８】
つまり、本発明に係る情報処理装置では、分岐命令の中に分岐予測情報だけでなく過去の分岐結果を示す分岐履歴情報も含まれている。そして、分岐命令が実行された場合には、その実行結果だけでなく、当該分岐命令に含まれていた分岐履歴情報も考慮されて当該分岐命令の分岐予測情報及び分岐履歴情報が更新される。
【００６９】
従って、直前の１回の実行結果だけでなく、さらに前の実行結果に基づく命令の先取りが行われるので、従来よりも高い的中率の分岐予測が実現される。
また、これら分岐予測情報及び分岐履歴情報は、分岐予測テーブルとして情報処理装置の内部に固定的に置かれるのではなく、記憶手段に格納された分岐命令自体に置かれるので、この分岐予測を実現するために情報処理装置に必要とされるハードウェア規模は小さくて済む。
【００７０】
ここで、前記分岐履歴情報は、その分岐履歴情報を有する分岐命令についての過去の複数の分岐結果に関する要約であるとすることもできる。
これによって、分岐履歴情報は、少ないビット数でより過去の分岐結果を反映させることが可能になると共に、直前の例外的な分岐結果の影響による分岐予測の乱れ（的中率の低下）が防止され、より過去の分岐結果をも考慮した大局的な分岐予測が行われる。
【００７１】
例えば、前記分岐履歴情報は、前記分岐命令について過去に分岐が成立した頻度が「極めて多い」、「多い」、「少ない」、「極めて少ない」のいずれかを示し、前記分岐履歴情報生成手段は、前記分岐命令に含まれていた分岐履歴情報が「極めて少ない」、「少ない」、「多い」のいずれかを示し、かつ、前記分岐結果が「成立」である場合には、それぞれ「少ない」、「多い」、「極めて多い」を示す新たな分岐履歴情報を生成し、前記分岐命令に含まれていた分岐履歴情報が「極めて多い」、「多い」、「少ない」のいずれかを示し、かつ、前記分岐結果が「不成立」である場合には、それぞれ「多い」、「少ない」、「極めて少ない」を示す新たな分岐履歴情報を生成するとすることもできる。
【００７２】
これによって、例えば、わずか２ビットの分岐履歴情報によって３回以上の分岐結果についての統計的要約を示すことも可能となる。
また、前記予測情報更新手段は、前記分岐履歴情報が「多い」を示し、かつ、前記分岐結果が「成立」である場合にのみ、「成立」を示す新たな分岐予測情報を生成し、前記分岐履歴情報が「少ない」を示し、かつ、前記分岐結果が「不成立」である場合にのみ「不成立」を示す新たな分岐予測情報を生成するとすることもできる。
【００７３】
これによって、分岐結果の履歴と分岐予測情報との関係においてヒステリシスを有する分岐予測が行われるので、１ビットの分岐予測情報だけに基づく分岐予測の場合に比べ、予測的中率が高くなるだけでなく、分岐の成立と不成立を短い周期で繰り返すことによる分岐予測の乱れが防止される。
また、前記分岐命令更新手段は、前記分岐予測情報生成手段によって生成された分岐予測情報と前記分岐履歴情報生成手段によって生成された分岐履歴情報とを含む新たな分岐命令を生成し、その分岐命令を前記記憶手段の該当箇所に上書きするものであり、前記該当箇所とは、前記新たな分岐命令が生成される元となった分岐命令が記憶されていた位置であるとすることもできる。
【００７４】
これによって、分岐命令の分岐予測情報や分岐履歴情報は、その分岐命令ごと（それら分岐予測情報及び分岐履歴情報情報を除く分岐命令の他のビットと共に）更新されるので、対象となる分岐命令を記憶手段から読み出して変更した後に書き戻すという手順に比較し、短い手順で分岐予測情報及び分岐履歴情報が更新される。
【００７５】
また、前記記憶手段は、前記命令群を格納する主記憶部と、前記主記憶部に格納された命令群の一部についての複写を記憶するキャッシュ記憶部と、前記キャッシュ記憶部の内容が書き換えられた場合に、その変更を前記主記憶部の内容にも反映させるキャッシュ制御手段とを含み、前記命令フェッチ手段は前記キャッシュ記憶部から前記命令を読み出し、前記分岐命令更新手段は、前記キャッシュ記憶部に記憶された分岐命令の分岐予測情報及び分岐履歴情報を更新するとすることもできる。
【００７６】
これによって、本発明に係る情報処理装置は高速にアクセスできるキャッシュメモリ上の分岐命令を更新するだけで済むので、実行速度が速くなる。
また、前記予測情報更新手段は、前記分岐履歴情報が「極めて多い」を示し、かつ、前記分岐結果が「成立」である場合にのみ、「成立」を示す新たな分岐予測情報を生成し、前記分岐履歴情報が「極めて少ない」を示し、かつ、前記分岐結果が「不成立」である場合にのみ「不成立」を示す新たな分岐予測情報を生成するとすることもできる。
【００７７】
これによって、上記ヒステリシスの度合がより強くなるので、分岐予測の乱れを強く抑止したいシステムのプログラムに好適な情報処理装置が実現される。
また、前記分岐履歴情報は、前記分岐命令について過去に分岐が成立した頻度が「多い」又は「少ない」を示したり、
前記分岐履歴情報生成手段は、前記分岐命令に含まれていた分岐履歴情報が「少ない」を示し、かつ、前記分岐結果が「成立」である場合にのみ、「多い」を示す新たな分岐履歴情報を生成し、前記分岐命令に含まれていた分岐履歴情報が「多い」を示し、かつ、前記分岐結果が「不成立」である場合にのみ、「少ない」を示す新たな分岐履歴情報を生成するとしたり、
前記予測情報更新手段は、前記分岐履歴情報が「多い」を示し、かつ、前記分岐結果が「成立」である場合にのみ、「成立」を示す新たな分岐予測情報を生成し、前記分岐履歴情報が「少ない」を示し、かつ、前記分岐結果が「不成立」である場合にのみ「不成立」を示す新たな分岐予測情報を生成するとすることもできる。
【００７８】
これによって、上記ヒステリシスの度合がより弱くなるので、プログラムの実行結果に敏感な分岐予測、即ち、動的な分岐予測が可能になると共に、分岐履歴情報は少ないビット数で済むので、命令セットを定義する場合における自由度が増す。
また、前記分岐履歴情報は、その分岐履歴情報を有する分岐命令についての過去の分岐ごとの分岐結果を示すとすることもできる。
【００７９】
例えば、前記分岐履歴情報は、直前及び２回前の分岐結果を示す２ビットであり、前記分岐履歴情報生成手段は、前記分岐命令が実行された際の分岐結果を用いて新たな分岐履歴情報を生成するとすることもできる。
これによって、過去の複数の分岐結果の要約ではなく、最新の連続する個々の分岐結果に基づく分岐予測が行われるので、例外的な分岐結果をも考慮した緻密な分岐予測を行う情報処理装置が実現される。
【００８０】
さらに、本発明は、ハードウェアによって実現されるだけでなく、ソフトウェアによっても実現される。
つまり、分岐予測して命令を先読みするマイクロプロセッサの動作をシミュレーションするプログラムが記録された記録媒体であって、前記プログラムは、分岐の成否を予測する分岐予測情報と過去の分岐結果についての情報を示す分岐履歴情報とを有する分岐命令を含む命令群を予め記憶する記憶手段から、次に実行すべき命令を読み出す命令フェッチステップと、読み出された命令が前記分岐命令であるか否か解読する命令解読ステップと、前記命令が分岐命令であると解読された場合に、その分岐命令の分岐予測情報に基づいて次に実行すべき命令を読み出す分岐予測ステップと、解読された前記分岐命令を実行する実行ステップと、前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐予測情報を生成する分岐予測情報生成ステップと、前記分岐命令が実行された際の分岐結果とその分岐命令に含まれていた分岐履歴情報とに基づいて新たな分岐履歴情報を生成する分岐履歴情報生成ステップと、前記記憶手段に格納された前記分岐命令の分岐予測情報と分岐履歴情報とを前記分岐予測情報生成ステップによって生成された分岐予測情報と前記分岐履歴情報生成ステップによって生成された分岐履歴情報とに更新する分岐命令更新ステップとをコンピュータに実行させることを特徴とする記録媒体とすることもできる。
【００８２】
これによって、上記第２の目的が達成される。
以上のように、本発明により、小規模なハードウェア又はソフトウェアで実現され、かつ、高い的中率の分岐予測を行う高機能なマイクロプロセッサや仮想マシン等が実現され、その実用的効果は大きい。
【図面の簡単な説明】
【図１】本発明に係る情報処理装置の構成を示すブロック図である。
【図２】本発明に係る分岐命令のフォーマットを示す図である。
【図３】同情報処理装置の分岐履歴情報生成器１６及び分岐予測情報生成器１７の入出力関係を示す真理値表である。
【図４】同分岐履歴情報生成器１６の詳細な回路図である。
【図５】同分岐予測情報生成器１７の詳細な回路図である。
【図６】同分岐命令の分岐履歴情報及び分岐予測情報の更新アルゴリズムを示す状態遷移図である。
【図７】同情報処理装置の分岐命令更新器１８の詳細な構成を示すブロック図である。
【図８】同分岐命令の分岐予測情報、分岐履歴情報及び分岐結果の関係を示すグラフである。
【図９】同情報処理装置におけるパイプライン処理の流れを示す図である。
【図１０】同情報処理装置の変形例１に係る分岐命令の分岐履歴情報及び分岐予測情報の更新アルゴリズムを示す状態遷移図である。
【図１１】同情報処理装置の変形例２に係る分岐命令の分岐履歴情報及び分岐予測情報の更新アルゴリズムを示す状態遷移図である。
【図１２】同情報処理装置の変形例３に係る分岐命令の分岐履歴情報及び分岐予測情報の更新アルゴリズムを示す真理値表である。
【図１３】同変形例３に係る分岐命令の分岐履歴情報及び分岐予測情報の更新アルゴリズムを示す状態遷移図である。
【図１４】従来の分岐命令のフォーマットを示す図である。
【符号の説明】
８    アドレス制御器
９    メインメモリ
１０    プログラムカウンタ群
１０ａ  フェッチ用命令カウンタ
１０ｂ  解読用命令カウンタ
１０ｃ  実行用命令カウンタ
１１    キャッシュユニット
１１ａ  キャッシュメモリ
１１ｂ  タグメモリ
１１ｃ  キャッシュコントローラ
１２    命令フェッチ器
１２ａ  命令バッファ
１３    命令レジスタ
１４    命令解読器
１５    命令実行器
１６    分岐履歴情報生成器
１７    分岐予測情報生成器
１８    分岐命令更新器
１８ａ  分岐命令記憶部
１８ｂ  更新判断部
１８ｃ  命令生成部
１８ｄ  アドレスゲート部
１９    アドレス生成器
２０    分岐命令
２０ａ  オペコード
２０ｂ  分岐予測情報
２０ｃ  分岐履歴情報
２０ｄ  分岐先アドレス
１００    情報処理装置
【図１】
0003760041.tif 000002
【図２】
0003760041.tif 000003
【図３】
0003760041.tif 000004
【図４】
0003760041.tif 000005
【図５】
0003760041.tif 000006
【図６】
0003760041.tif 000007
【図７】
0003760041.tif 000008
【図８】
0003760041.tif 000009
【図９】
0003760041.tif 000010
【図１０】
0003760041.tif 000011
【図１１】
0003760041.tif 000012
【図１２】
0003760041.tif 000013
【図１３】
0003760041.tif 000014
【図１４】
0003760041.tif 000015