(57)【要約】【課題】命令バッファに保持された命令を効率よく利用し、命令フェッチ性能を向上させる。【解決手段】命令フェッチ要求に基づいて取得された命令を保持する命令バッファと、命令をデコードし実行する命令実行制御部と、分岐命令アドレスと分岐先命令アドレスの差を示す移動距離フラグを含む分岐履歴を保持して命令の分岐予測を行う分岐予測機構と、命令フェッチ要求を発行する命令フェッチ制御部とを有し、分岐予測結果が分岐成立である場合、分岐予測結果を出力するまでに発行されたＮ回のシーケンシャル方向の命令フェッチ要求に対応するアドレスに分岐先命令アドレスが含まれると移動距離フラグに基づいて判断したとき、制御部が分岐先命令アドレスに対する命令フェッチ要求を発行せずに、シーケンシャル方向の命令フェッチ要求に基づいて命令バッファに保持された命令を命令実行制御部に出力させる。【選択図】図２
2013131036.tif 000002
【特許請求の範囲】
【請求項１】
命令を記憶する記憶部と、
前記記憶部が記憶する命令を取得する命令フェッチ要求に基づいて前記記憶部から取得された命令を保持する命令バッファと、
前記命令バッファが出力した命令をデコードする命令デコード部と、
前記命令デコード部がデコードした命令を実行する実行部と、
前記実行部が実行した命令のうち、分岐命令のアドレスである分岐命令アドレスと分岐先の命令のアドレスである分岐先命令アドレスとの差を示す距離情報を含む分岐履歴情報を保持し、前記保持した分岐履歴情報を用いて命令フェッチ要求に基づいて取得される命令の分岐予測を行う分岐予測部と、
前記命令フェッチ要求を発行するとともに、第１のアドレスに対する命令フェッチ要求を発行してから、前記分岐予測部が前記発行された命令フェッチ要求に基づいて取得される第１の命令の分岐予測結果を出力するまでに、前記第１のアドレスに所定の値を加算した第２のアドレスに対する命令フェッチ要求を発行する制御部とを有し、
前記分岐予測部が前記第１の命令の分岐予測結果が分岐成立であると予測した場合、前記第２のアドレスに対する命令フェッチ要求に対応するアドレスに前記分岐成立であると予測された分岐先命令アドレスが含まれると前記距離情報に基づいて判断したとき、前記制御部が、前記分岐先命令アドレスに対する命令フェッチ要求を発行せずに、前記第２のアドレスに対する命令フェッチ要求に基づいて前記命令バッファに保持された命令を前記命令デコード部に出力させることを特徴とする演算処理装置。
【請求項２】
前記制御部は、
前記分岐予測部が、前記第１の命令の分岐予測結果が分岐成立であると予測した場合、前記距離情報に基づいて、命令バッファに保持された命令のうち、前記第１のアドレスに係る命令フェッチ要求により保持された命令を無効にすることを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記分岐予測部が保持する前記分岐履歴情報はさらに、
分岐命令アドレス、分岐先命令アドレスを含むことを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
命令を記憶する記憶部を有する演算処理装置の制御方法において、
前記演算処理装置が有する制御部が、第１のアドレスに対する命令を取得する命令フェッチ要求を発行し、
前記演算処理装置が有する命令バッファが、前記記憶部が記憶する命令を取得する命令フェッチ要求に基づいて前記記憶部から取得された命令を保持し、
前記演算処理装置が有する実行部が実行した命令のうち、分岐命令のアドレスである分岐命令アドレスと分岐先の命令のアドレスである分岐先命令アドレスとの差を示す距離情報を含む分岐履歴情報を保持し、前記保持した分岐履歴情報を用いて命令フェッチ要求に基づいて取得される命令の分岐予測を行う分岐予測部と、
前記制御部が、前記分岐予測部が前記発行された命令フェッチ要求に基づいて取得される第１の命令の分岐予測結果を出力するまでに、前記第１のアドレスに所定の値を加算した第２のアドレスに対する命令フェッチ要求を発行し、
前記分岐予測部が前記第１の命令の分岐予測結果が分岐成立であると予測した場合、前記第２のアドレスに対する命令フェッチ要求に対応するアドレスに前記分岐成立であると予測された分岐先命令アドレスが含まれると前記距離情報に基づいて判断したとき、前記制御部が、前記分岐先命令アドレスに対する命令フェッチ要求を発行せずに、前記第２のアドレスに対する命令フェッチ要求に基づいて前記命令バッファに保持された命令を出力させ、
前記演算処理装置が有する命令デコード部が、前記命令バッファが出力した命令をデコードし、
前記実行部が、前記命令デコード部がデコードした命令を実行することを特徴とする演算処理装置の制御方法。
【請求項５】
前記演算処理装置の制御方法において、
前記分岐予測部が、前記第１の命令の分岐予測結果が分岐成立であると予測した場合、前記距離情報に基づいて、命令バッファに保持された命令のうち、前記第１のアドレスに係る命令フェッチ要求により保持された命令を無効にすることを特徴とする請求項４記載の演算処理装置の制御方法。
【請求項６】
前記演算処理装置の制御方法において、
前記分岐予測部が保持する前記分岐履歴情報はさらに、
分岐命令アドレス、分岐先命令アドレスを含むことを特徴とする請求項４又は５記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置における命令フェッチを高速化する方法として、命令キャッシュ部が出力する命令を保持する命令バッファを、命令キャッシュ部と命令デコーダとの間に設けて、命令を先読み（フェッチ）する方法がある。命令はシーケンシャル方向（命令アドレスが増加する方向）に実行されることが多いため、現在実行中の命令に対してシーケンシャル方向の命令を先読みすることで性能向上を図ることが可能である。命令バッファは、複数のエントリを有し、１つのエントリには１回の命令フェッチリクエストに対して命令キャッシュ部から転送される命令が格納される。
【０００３】
しかし、前述した命令の先読みは、分岐命令によって命令の実行順序が変わる場合には、先読みされた命令を格納している命令バッファのエントリをキャンセルした後に分岐先命令の命令フェッチを行う必要があるので性能が低下する。この性能低下を軽減する方法として、命令デコード時に分岐命令自体が保有する分岐変位情報（分岐命令と分岐先命令とのアドレス値の差）を利用して、分岐先命令が先読みされて命令バッファに格納されているか否かを判断する。そして、命令が先読みされていると判断された場合には、命令バッファに格納された命令をキャンセルせずに利用する方法が提案されている（例えば、特許文献１参照。）。
【０００４】
分岐先命令の命令アドレスである分岐先アドレスの指定方法としては、命令相対アドレス指定やレジスタ相対アドレス指定がある。命令相対アドレス指定は、分岐命令自身の命令アドレスである分岐命令アドレスと分岐先アドレスとの差を指定する方法である。レジスタ相対アドレス指定は、１つ以上のレジスタの値と、分岐命令に含まれる即値の加算結果を使って分岐先アドレスを指定する方法である。レジスタ相対アドレス指定の分岐命令の場合には、当該分岐命令の直前に実行される命令がレジスタ値を書き換える可能性があるために、命令デコード時点では分岐先アドレスは確定していない。したがって、命令デコード時に分岐先命令が先読みされて命令バッファに格納されているか否かを判断することができない。
【０００５】
また、命令制御装置の動作周波数の向上に伴い、命令フェッチリクエストを命令キャッシュ部に発行してから、命令キャッシュ部が命令を出力するまでには、数サイクルの時間がかかる。特に、命令フェッチリクエストにより要求した命令が命令キャッシュ部にない場合には、主記憶装置又は共有キャッシュメモリ等から命令キャッシュ部への命令の転送が必要になり、さらに長い時間がかかる。そのため、命令デコーダで命令が分岐命令であるか否かをデコードした後に分岐先命令の命令フェッチを行うような方式では性能向上を図ることができない。
【０００６】
これを改善する方法として、分岐予測機構を設けて、分岐命令のデコード前に分岐先アドレスを予測し、分岐先アドレスにある分岐先命令を先読みする方法がある。分岐予測機構は、過去に実行された分岐命令の情報（分岐命令アドレス、分岐先アドレス、分岐の成否、等）を分岐履歴として保存しておき、命令フェッチ時に命令アドレスを用いて分岐履歴を検索することで、分岐の成否及び分岐先アドレスを予測する。例えば、分岐命令アドレスと分岐先アドレスとを保持する分岐予測機構と、命令バッファとを備え、分岐予測が誤りであった場合の命令処理を高速化する方法が提案されている（例えば、特許文献２参照。）。
【０００７】
図９及び図１０を参照して、従来の分岐予測動作について説明する。
分岐予測を行うには、過去に実行された分岐命令の情報が必要である。命令デコードの結果、デコードした命令が分岐命令であることが確定した場合には、命令デコーダから分岐命令制御部１０１に分岐命令が送信される。分岐命令制御部１０１は、分岐命令を基に、分岐命令の分岐の成否を調べ、分岐成立の場合には分岐先アドレスの確定を待ってから、その分岐命令に関する分岐命令情報Ｎ１０１を分岐予測機構１０２に送信する。分岐予測機構１０２に送信される分岐命令情報Ｎ１０１は、分岐の成否、分岐命令アドレス、分岐先アドレスを含む。分岐予測機構１０２は、図１０に示すように、分岐命令制御部１０１から送信されてきた分岐命令情報Ｎ１０１の分岐命令アドレス１１２及び分岐先アドレス１１３を分岐履歴１１１−１、１１１−２、…、１１１−ｎとして保存する。
【０００８】
命令フェッチ制御部１０３は、命令キャッシュ部に命令フェッチリクエストを発行するとともに、命令アドレス制御指示Ｎ１０２及び命令バッファ制御指示Ｎ１０３を、命令バッファ・命令アドレス制御部１０４に出力する。命令バッファ・命令アドレス制御部１０４は、制御指示Ｎ１０２及びＮ１０３を受けると、命令キャッシュ部に命令フェッチアドレスを出力するとともに、命令キャッシュ部から転送される命令を格納するための命令バッファのエントリを割り当てる。
【０００９】
その後、命令フェッチ制御部１０３は、命令フェッチリクエストとともに出力された命令アドレスの通知Ｎ１０５を分岐予測機構１０２へ行うように命令バッファ・命令アドレス制御部１０４に対して指示する。また、命令フェッチ制御部１０３は、その命令アドレスに対する分岐予測指示Ｎ１０４を分岐予測機構１０２に出力する。分岐予測機構１０２は、分岐予測指示Ｎ１０４を受けると、命令バッファ・命令アドレス制御部１０４から通知された命令アドレスを用いて分岐履歴を検索し、その分岐予測結果（分岐の成否）Ｎ１０６を命令フェッチ制御部１０３に通知する。分岐予測機構１０２は、分岐成立と予測した場合には、さらに分岐履歴における分岐先アドレスを分岐先予測アドレスＮ１０７として命令バッファ・命令アドレス制御部１０４に通知する。
【００１０】
ここで、分岐予測時に行われる分岐履歴の検索には時間を要するため、分岐予測結果は命令フェッチリクエストを発行したＮサイクル後（Ｎは１以上の整数）に判明する。分岐先予測アドレスに対する命令フェッチリクエストの発行は、分岐予測結果の判明後に行われるため、先の命令フェッチリクエストを発行してから（Ｎ＋１）サイクル後に行われることになる。つまり、分岐命令アドレスの命令フェッチリクエストを発行してから分岐先予測アドレスの命令フェッチリクエストが発行されるまでの間にはＮサイクルの間隔がある。
【００１１】
このＮサイクルの期間は、分岐の成否や分岐先予測アドレスが不明であるため、シーケンシャル方向に命令アドレスを加算しての命令フェッチリクエストをＮ回発行することによって、命令がシーケンシャル方向に順に実行された場合の性能向上が図られる。分岐予測結果が分岐成立でない場合には、そのＮ回のシーケンシャル方向での命令フェッチリクエストはそのまま使われる。一方、分岐予測結果が分岐成立である場合には、命令フェッチ制御部１０３は、そのＮ回の命令フェッチリクエストに対して割り当てられた命令バッファのエントリにキャンセル指示を出した後に、分岐先予測アドレスに対する命令フェッチリクエストを発行する。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開平１０−１２４３１４号公報
【特許文献２】特許第３８５２７８２号公報
【特許文献３】特許第３５２２１３５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
前述した従来の分岐予測動作において、命令デコード前に行われる分岐予測の時点では、分岐先予測アドレスと分岐命令アドレスとの差に関する情報がない。そのため、分岐予測結果が分岐成立であり、分岐予測結果の判明前に行われるシーケンシャル方向のＮ回の命令フェッチリクエストに分岐先予測アドレスに対する命令フェッチリクエストが含まれる場合でも、そのＮ回の命令フェッチリクエストについてはキャンセルされる。そして、再度分岐先予測アドレスに対する命令フェッチリクエストが発行されるという処理になり、性能が低下するという問題があった。
【００１４】
この問題を解決する方法として、分岐予測の時点で分岐先予測アドレスと分岐命令アドレスとの差を計算し、それを利用して分岐予測結果の判明前に行われるシーケンシャル方向のＮ回の命令フェッチリクエストに分岐先予測アドレスに対する命令フェッチリクエストが含まれるか否かを判断する方法が考えられる。しかしながら、命令アドレスのビット数が多い場合には、分岐先予測アドレスと分岐命令アドレスとの差を計算するための回路の規模が大きくなり、計算する時間もかかり、分岐予測結果の判明と同一のタイミングで計算を行うことは困難である。したがって、分岐予測結果が判明してから、さらに１〜数サイクルが経過しないと分岐先予測アドレスと分岐命令アドレスとの差が得られず、命令フェッチの高速化を図ることができない。
【００１５】
１つの側面では、本発明の目的は、分岐予測を行う演算処理装置にて、命令バッファに保持されている命令を効率よく利用し、命令フェッチの性能を向上させることにある。
【課題を解決するための手段】
【００１６】
演算処理装置の一態様は、命令を記憶する記憶部と、命令フェッチ要求に基づいて記憶部から取得された命令を保持する命令バッファと、命令バッファが出力した命令をデコードする命令デコード部と、命令デコード部がデコードした命令を実行する実行部と、実行部が実行した命令のうち、分岐命令のアドレスである分岐命令アドレスと分岐先の命令のアドレスである分岐先命令アドレスとの差を示す距離情報を含む分岐履歴情報を保持し、保持した分岐履歴情報を用いて命令フェッチ要求に基づいて取得される命令の分岐予測を行う分岐予測部と、命令フェッチ要求を発行する制御部とを有する。制御部は、第１のアドレスに対する命令フェッチ要求を発行してから、分岐予測部が前記発行された命令フェッチ要求に基づいて取得される第１の命令の分岐予測結果を出力するまでに、第１のアドレスに所定の値を加算した第２のアドレスに対する命令フェッチ要求を発行する。分岐予測部が第１の命令の分岐予測結果が分岐成立であると予測した場合、第２のアドレスに対する命令フェッチ要求に対応するアドレスに分岐成立であると予測された分岐先命令アドレスが含まれると距離情報に基づいて判断したとき、制御部が、分岐先命令アドレスに対する命令フェッチ要求を発行せずに、第２のアドレスに対する命令フェッチ要求に基づいて命令バッファに保持された命令を命令デコード部に出力させる。
【発明の効果】
【００１７】
発明の一態様においては、既に発行されている命令フェッチ要求の内に予測された分岐先のアドレスに対応する命令フェッチ要求が含まれる場合には、命令バッファに保持されている命令をそのまま使用するので、命令バッファに保持されている命令を効率よく利用し、命令フェッチの性能を向上させることができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施形態における演算処理装置の構成例を示す図である。
【図２】本実施形態における命令制御装置の構成例を示す図である。
【図３】本実施形態における分岐予測動作を説明するための図である。
【図４】本実施形態における分岐予測機構に保存される分岐履歴を示す図である。
【図５】本実施形態における命令フェッチ動作の一例を示すフローチャートである。
【図６】本実施形態における命令フェッチ動作を説明するための図である。
【図７】本実施形態における命令フェッチキャンセル制御を示す図である。
【図８】本実施形態における命令バッファキャンセル制御を示す図である。
【図９】従来の分岐予測動作を説明するための図である。
【図１０】図９に示す分岐予測機構に保存される分岐履歴を示す図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施形態を図面に基づいて説明する。
図１は、本発明の一実施形態における演算処理装置（ＣＰＵ：Central Processing Unit）の構成例を示すブロック図である。演算処理装置１０は、命令フェッチ部１１、命令実行制御部１２、プログラマブルレジスタ１３、演算部１４、命令キャッシュ部１５、データキャッシュ部１６、及び２次キャッシュ部１７を有する。
【００２０】
命令フェッチ部１１は、命令キャッシュ部１５に命令の取り出しを指示し、その応答として供給された命令を内部の命令バッファに保持する。また、命令フェッチ部１１は、命令バッファに保持した命令を命令実行制御部１２に供給する。命令実行制御部１２は、命令フェッチ部１１から供給された命令をデコードし、デコード結果に応じて処理を実行する。デコード結果に応じて実行される処理は、例えば演算部１４への命令発行、プログラマブルレジスタ１３の読み出しや更新制御、データキャッシュ部１６の読み出しや更新制御などである。
【００２１】
プログラマブルレジスタ１３は、プログラムカウンタ（ＰＣ：Program Counter）、汎用レジスタ（ＧＰＲ：General Purpose Register）、浮動小数点レジスタ（ＦＰＲ：Floating Point Register）などのソフトウェアから読み書き可能なレジスタ群である。プログラマブルレジスタ１３は、命令実行制御部１２からの指示に従って、演算部１４へレジスタ値を供給したり演算部１４による演算結果を格納したりする。演算部１４は、命令実行制御部１２からの指示に従って、整数演算、浮動小数点演算、主記憶アドレス演算などの各種演算を行う。
【００２２】
命令キャッシュ部１５、データキャッシュ部１６、及び２次キャッシュ部１７は、主記憶１８に記憶されているデータの一部を格納する記憶部である。命令フェッチ部１１から要求された命令が命令キャッシュ部１５に存在すれば、その命令が命令キャッシュ部１５から読み出されて供給され、命令キャッシュ部１５に存在しなければ、２次キャッシュ部１７、主記憶１８と順に命令の要求が行われる。同様に、命令実行制御部１２から要求されたデータがデータキャッシュ部１６に存在すれば、そのデータがデータキャッシュ部１６から読み出されて供給され、データキャッシュ部１６に存在しなければ、２次キャッシュ部１７、主記憶１８と順にデータの要求が行われる。
【００２３】
図２は、本実施形態における命令制御装置の構成例の概要を示すブロック図である。
命令フェッチ部１１は、命令キャッシュ部２５に命令の出力を指示し、出力された命令を命令バッファに保持し、保持した命令を命令実行制御部が有する命令デコーダ２６に供給する。命令フェッチ部１１は、命令フェッチ制御部２１、分岐予測機構２２、命令アドレス制御部２３、及び命令バッファ２４を有する。
【００２４】
命令フェッチ制御部２１は、分岐予測機構２２から供給される分岐予測結果を利用して命令アドレス制御部２３に命令フェッチアドレスの生成を指示する。また、命令フェッチ制御部２１は、命令アドレス制御部２３から送信される命令フェッチアドレスに対する分岐予測の実行を分岐予測機構２２に指示する。また、命令フェッチ制御部２１は、命令キャッシュ部２５に命令フェッチリクエストを発行するとともに、命令バッファ２４の制御を行う。命令フェッチ制御部２１による命令バッファ２４の制御は、命令フェッチリクエストを発行してから命令バッファが保持している全ての命令が命令デコーダ２６に供給されるまで行われる。
【００２５】
分岐予測機構２２は、過去に実行された分岐命令の情報（分岐命令アドレス、分岐先アドレス、分岐の成否、等）を分岐履歴として保存し、保存した分岐履歴を用いて分岐予測を行う。分岐予測機構２２は、命令フェッチ制御部２１から分岐予測の実行が指示されると、命令アドレス制御部２３から通知された命令フェッチアドレスを用いて分岐履歴を検索し、その分岐予測結果を命令フェッチ制御部２１に通知する。また、分岐予測機構２２は、分岐成立と予測した場合には、分岐履歴における分岐先アドレスを分岐先予測アドレスとして命令アドレス制御部２３に通知する。
【００２６】
命令アドレス制御部２３は、命令フェッチ制御部２１からの指示に応じて、シーケンシャル方向にアドレス値を所定値だけ増加させた命令アドレス又は分岐予測機構２２から供給された分岐先予測アドレスを選択する。命令アドレス制御部２３は、選択したアドレスを命令フェッチアドレスとして命令キャッシュ部２５及び分岐予測機構２２に送信し、その命令フェッチアドレスを命令バッファ２４のエントリ毎に保持する。命令バッファ２４は、命令フェッチリクエストに対応して命令キャッシュ部２５から送信されてきた命令を保持する。なお、シーケンシャル方向にアドレス値を増加させるときの所定値は、１回の命令フェッチリクエストに対して命令キャッシュ部２５から転送され命令バッファ２４のエントリに保持される命令の量に応じた値である。例えば、命令キャッシュ部２５から転送され命令バッファ２４のエントリに保持される命令の量が３２バイトである場合には、シーケンシャル方向にアドレス値を８命令分である３２ずつ増加させれば良い。
【００２７】
命令アドレス制御部２３及び命令バッファ２４は、複数のエントリを有する。各エントリＩＢＲ０、ＩＢＲ１、…、ＩＢＲ７は、命令フェッチアドレスとして送信された命令アドレスＩＡＤ、及びそれに対応する命令ＩＤＴ、命令アドレスＩＡＤが有効であるか否かを示すバリッドビットＩＡＤＦ、命令ＩＤＴが有効であるか否かを示すバリッドビットＩＤＴＦを含む。各エントリは、保持している命令ＩＤＴの命令デコーダ２６への供給が完了するとクリアされ（エントリが無効であることを示すようにバリッドビットＩＡＤＦ、ＩＤＴＦが制御され）、新たな命令フェッチリクエストに使用される。なお、図２においては、８つのエントリＩＢＲ０、ＩＢＲ１、…、ＩＢＲ７を有する例を示しているが、エントリの数は任意である。また、図２に示した例では、各エントリに２つのバリッドビットＩＡＤＦ、ＩＤＴＦを設けているが、各エントリに少なくとも１つのバリッドビットを備えていれば良い。
【００２８】
命令フェッチの開始から命令が命令デコーダに供給されるまでは、本実施形態に示す例ではＩＡサイクル、ＩＴサイクル、ＩＭサイクル、ＩＢサイクル、ＩＲサイクル、Ｄサイクルの処理があり、最短で５サイクルかかる。なお、以下の説明は、ＩＡサイクルの２サイクル後に分岐予測結果が得られるとともに、命令フェッチリクエストに対応する命令が命令キャッシュ部２５に存在する場合の例である。
ＩＡサイクルでは、命令フェッチ制御部２１から命令キャッシュ部２５に命令フェッチリクエストが発行され、同時に命令アドレス制御部２３から命令キャッシュ部２５に命令フェッチアドレスが送信される。また、この命令フェッチリクエストに対応するエントリが割り当てられる。
【００２９】
ＩＴサイクルでは、命令キャッシュ部２５にて命令フェッチアドレスに応じてタグが検索される。また、命令アドレス制御部２３はＩＡサイクルで生成した命令フェッチアドレスを分岐予測機構２２に送信し、分岐予測機構２２は、この命令フェッチアドレスを用いて分岐予測を行う。
ＩＭサイクルでは、命令キャッシュ部２５にてＩＴサイクルで検索されたタグと命令フェッチアドレスとの一致判断が行われる。また、分岐予測機構２２は分岐予測結果を命令フェッチ制御部２１に送信し、分岐成立と予測した場合には、さらに分岐先予測アドレスを命令アドレス制御部２３に送信する。
【００３０】
ＩＢサイクルでは、ＩＡサイクルで発行された命令フェッチリクエストに対する命令が命令キャッシュ部２５から命令バッファ２４に送信される。また、ＩＡサイクルで発行された命令フェッチリクエストについての分岐予測結果が分岐成立であった場合には、分岐先予測アドレスに対する命令フェッチリクエストが命令フェッチ制御部２１から命令キャッシュ部２５に発行される。同時に、その分岐先予測アドレスが命令フェッチアドレスとして命令アドレス制御部２３から命令キャッシュ部２５に送信される。
【００３１】
ＩＲサイクルでは、ＩＢサイクルで命令バッファ２４に送信された命令の有効性を示す信号が命令キャッシュ部２５から命令フェッチ制御部２１に送信される。また、命令バッファ２４から命令デコーダ２６に命令が送信される。命令バッファ２４のエントリ内のすべての命令が命令デコーダ２６に送信されるとそのエントリは開放される。
Ｄサイクルでは、命令デコーダ２６で命令のデコードが行われる。
【００３２】
ここで、本実施形態では、分岐予測機構が保存する分岐履歴に、分岐命令自身の命令アドレスである分岐命令アドレスと分岐先命令の命令アドレスである分岐先アドレスとがどのくらい離れているかを示す移動距離フラグを持たせる。移動距離フラグは、１サイクル毎にシーケンシャル方向にアドレス値を所定値ずつ増加させて命令フェッチリクエストを順次発行するとした場合に、分岐命令アドレスの命令フェッチリクエストを発行してから分岐先アドレスの命令フェッチリクエストを発行するまでのサイクル数に相当する情報である。例えば、命令バッファのエントリに保持される命令の量がＭバイトであるとすると、分岐先アドレスが分岐命令アドレス＋Ｍ×Ｐ以上、かつ分岐命令アドレス＋Ｍ×（Ｐ＋１）未満の場合にはＰの値、それ以外の場合には０を移動距離フラグとして使用する。言い換えれば、移動距離フラグは、分岐命令アドレスと分岐先アドレスとの差が一定範囲以内であることを示す情報である。なお、Ｐは１〜Ｎ（Ｎは、分岐命令アドレスの命令フェッチリクエストを発行してから、分岐予測結果に基づく分岐先アドレスの命令フェッチリクエストが発行されるまでのサイクル数）までの任意の整数である。
【００３３】
そして、本実施形態では、分岐予測により分岐成立と予測された場合には、分岐予測結果とともに移動距離フラグを命令フェッチ制御部に供給し、移動距離フラグを用いて、以下のように命令バッファの制御を行う。
（１）移動距離フラグが０である場合
従来と同様にＮ回のシーケンシャル方向の命令フェッチリクエストについてキャンセルし、新規に分岐先予測アドレスに対する命令フェッチリクエストを発行する。
（２）移動距離フラグが１である場合
すでに発行された命令フェッチリクエストについてキャンセルは行わずに、そのまま使用する。
（３）移動距離フラグがＰ（＞１）である場合
分岐命令アドレスの命令フェッチリクエストを発行した後の（Ｐ−１）回分のシーケンシャル方向の命令フェッチリクエストについてキャンセルし、Ｐ回目以降の命令フェッチリクエストについてはそのまま使用する。
【００３４】
このように移動距離フラグを分岐履歴に持つことで、分岐予測結果の判明前に行われるＮ回のシーケンシャル方向の命令フェッチリクエストに分岐先予測アドレスに対する命令フェッチリクエストが含まれるか否かを、分岐予測結果の判明と同時に判断することができる。そして、分岐先予測アドレスに対する命令フェッチリクエストが含まれると判断した場合には、その命令フェッチリクエストについてキャンセルせずにそのまま使用することで、命令フェッチの高速化を図り、性能を向上させることができる。また、分岐命令アドレスと分岐先アドレスとのアドレス値の差を、サイクル数によりコード化して移動距離フラグとして分岐履歴に含ませることで、わずかなデータ量の増分ですみ移動距離フラグの付加に伴うデータ量の増加を抑制できる。
【００３５】
次に、本実施形態における命令制御装置の動作について説明する。
図３は、本実施形態における命令制御装置での分岐予測動作を説明するための図である。分岐予測を行うには、過去に実行された分岐命令の情報が必要である。命令デコードの結果、命令が分岐命令であることが確定した場合には、命令デコーダから分岐命令制御部３１に分岐命令が送信される。分岐命令制御部３１は、分岐命令を基に、分岐命令の分岐の成否を調べ、分岐成立の場合には分岐先アドレスの確定を待ってから、その分岐命令に関する分岐命令情報Ｎ３１を分岐予測機構３２に送信する。分岐予測機構３２に送信される分岐命令情報Ｎ３１は、分岐の成否、分岐命令アドレス、分岐先アドレスを含む。
【００３６】
分岐予測機構３２は、分岐命令制御部３１から送信されてきた分岐命令情報Ｎ３１の分岐命令アドレス及び分岐先アドレスに基づいて、分岐命令アドレスと分岐先アドレスとの差から移動距離フラグを算出する。そして、分岐予測機構２２は、図４に示すように、送信されてきた分岐命令情報Ｎ３１の分岐命令アドレス４２及び分岐先アドレス４３に加え、算出した移動距離フラグ４４を分岐履歴４１−１、４１−２、…、４１−ｎとして保存する。
【００３７】
命令フェッチ制御部３３は、ＩＡサイクルで命令キャッシュ部に命令フェッチリクエストを発行するとともに、命令アドレス制御指示Ｎ３２及び命令バッファ制御指示Ｎ３３を、命令バッファ・命令アドレス制御部３４に出力する。命令バッファ・命令アドレス制御部３４は、命令フェッチリクエストに対応して出力された命令アドレス制御指示Ｎ３２及び命令バッファ制御指示Ｎ３３を受けると、命令キャッシュ部に命令フェッチアドレスを出力するとともに、命令キャッシュ部から転送される命令を格納するための命令バッファのエントリを割り当てる。
【００３８】
その後のＩＴサイクルで、命令フェッチ制御部３３は、命令フェッチリクエストとともに出力された命令フェッチアドレスの通知Ｎ３５を分岐予測機構３２へ行うように命令バッファ・命令アドレス制御部３４に対して指示する。また、命令フェッチ制御部３３は、その命令フェッチアドレスに対する分岐予測指示Ｎ３４を分岐予測機構３２に出力する。
【００３９】
分岐予測機構３２は、分岐予測指示Ｎ３４を受けると、命令バッファ・命令アドレス制御部３４から通知された命令フェッチアドレスを用いて分岐履歴を検索し、その分岐予測結果（分岐の成否）Ｎ３６を命令フェッチ制御部３３に通知する。分岐予測機構３２は、分岐成立と予測した場合には、分岐予測結果Ｎ３６として分岐履歴における移動距離フラグの内容もあわせて命令フェッチ制御部３３に通知する。また、分岐予測機構３２は、分岐成立と予測した場合には、分岐履歴における分岐先アドレスを分岐先予測アドレスＮ３７として命令バッファ・命令アドレス制御部３４に通知する。
【００４０】
分岐予測結果が命令フェッチリクエストを発行したＮサイクル後に判明する場合、命令フェッチ制御部３３は、分岐予測結果を得るまでにＮ回のシーケンシャル方向での命令フェッチリクエストを発行し、各リクエストに対応させてＮ個の命令バッファのエントリを既に確保している。命令フェッチ制御部３３は、分岐予測元の命令フェッチリクエストについての分岐予測結果を分岐予測機構３２から得ると、その分岐予測結果に応じて、次のような制御を行う。
（Ａ）分岐予測結果が分岐不成立であった場合
すでに発行されているＮ回のシーケンシャル方向での命令フェッチリクエストについてキャンセルは行わずに、そのまま使用する。
（Ｂ）分岐予測結果が分岐成立であり、かつ移動距離フラグが０である場合
すでに発行されているＮ回のシーケンシャル方向の命令フェッチリクエストについてキャンセルし、そのリクエスト用に確保していた命令バッファのエントリの開放を指示する。また、分岐先予測アドレスに対する命令フェッチリクエストを新規に発行し、そのリクエストに対応する命令バッファのエントリを確保する。
（Ｃ）分岐予測結果が分岐成立であり、かつ移動距離フラグが１である場合
すでに発行されているＮ回のシーケンシャル方向での命令フェッチリクエストについてキャンセルは行わない。分岐予測元の命令フェッチリクエストを発行した直後のサイクルで発行されている命令フェッチリクエストを、分岐先予測アドレスに対する命令フェッチリクエストのかわりとして、そのまま使用する。
（Ｄ）分岐予測結果が分岐成立であり、かつ移動距離フラグがＰ（１＜Ｐ≦Ｎ）である場合
すでに発行されているＮ回のシーケンシャル方向での命令フェッチリクエストのうち、分岐元の命令フェッチリクエストを発行した後の（Ｐ−１）回分のシーケンシャル方向の命令フェッチリクエストについてキャンセルし、そのリクエスト用に確保していた命令バッファのエントリの開放を指示する。また、Ｐ回目以降の命令フェッチリクエストについては、Ｐ回目の命令フェッチリクエストを分岐先予測アドレスに対する命令フェッチリクエストのかわりとするようにして、そのまま使用する。
【００４１】
前述した（Ａ）〜（Ｄ）の制御において、命令フェッチリクエストのキャンセル及び命令バッファのエントリの開放は、対応する命令アドレス制御部２３及び命令バッファ２４のエントリのバリッドビットを制御することにより行われる。
【００４２】
図５は、本実施形態における命令制御装置による命令フェッチ動作の一例を示すフローチャートである。図５においては、命令フェッチアドレスがＡである命令フェッチリクエストについての分岐予測結果に応じた動作を一例として示している。また、シーケンシャル方向での命令フェッチリクエストではアドレス値を８命令分である３２バイト分ずつ増加させ、また、命令フェッチリクエストを発行した２サイクル後に分岐予測結果が判明するものとする。したがって、図５に示した例においては、分岐先アドレスが分岐命令アドレス＋３２バイト以上かつ分岐命令アドレス＋６４バイト未満に相当する場合には、分岐履歴における移動フラグとして１が保存される。また、分岐先アドレスが分岐命令アドレス＋６４バイト以上かつ分岐命令アドレス＋９６バイト未満に相当する場合には、分岐履歴における移動フラグとして２が保存される。それ以外の場合には、分岐履歴における移動距離フラグとして０が保存される。
【００４３】
まず、命令フェッチ制御部２１が命令キャッシュ部２５に命令フェッチリクエストを発行するとともに、命令アドレス制御部２３が命令キャッシュ部２５に命令フェッチアドレスＡを送信し、命令フェッチの要求を行う（Ｓ１１）。また、この命令フェッチリクエストに対応するエントリが割り当てられる。ここでは、エントリＩＢＲ０が命令フェッチアドレスＡに対して割り当てられるものとし、エントリＩＢＲ０のバリッドビットＩＡＤＦ、ＩＤＴＦが有効を示すように設定され、命令キャッシュ部２５からの命令ＩＤＴがエントリＩＢＲ０に格納される。
【００４４】
ここで、命令フェッチ制御部２１が分岐予測機構２２から命令フェッチアドレスＡを用いた分岐予測の結果を受け取るまでには２サイクルかかるので、その間に２回分のシーケンシャル方向の命令フェッチリクエストが発行される。すなわち、ステップＳ１１と同様にして、命令フェッチアドレス（Ａ＋３２）に対する命令フェッチリクエストが発行され（Ｓ１２）、その後に命令フェッチアドレス（Ａ＋６４）に対する命令フェッチリクエストが発行される（Ｓ１３）。また、それぞれの命令フェッチリクエストに対してエントリＩＢＲ１、ＩＢＲ２が割り当てられ、そのバリッドビットＩＡＤＦ、ＩＤＴＦが有効を示すように制御され、命令フェッチリクエストに対する応答として供給される命令ＩＤＴが格納される。
【００４５】
命令フェッチ制御部２１は、分岐予測機構２２から命令フェッチアドレスＡを用いた分岐予測の結果を受け取ると、その分岐予測結果が分岐成立である場合には、ステップＳ１５へ進み、分岐成立でない場合には当該分岐予測結果に応じた動作を終了する（Ｓ１４）。分岐予測結果が分岐成立である場合に、命令フェッチ制御部２１は、分岐予測結果とともに分岐予測機構２２から供給された移動距離フラグを用いて以下のような制御を行う（Ｓ１５）。
【００４６】
移動距離フラグが０である場合には、命令フェッチ制御部２１は、２回のシーケンシャル方向の命令フェッチリクエストについてキャンセルし、その命令フェッチリクエストに対して割り当てた命令バッファのエントリＩＢＲ１、ＩＢＲ２を開放する（Ｓ１６）。すなわち、命令フェッチ制御部２１は、エントリＩＢＲ１、ＩＢＲ２のバリッドビットＩＡＤＦ、ＩＤＴＦが無効である旨を示すように設定する。また、命令フェッチアドレスを分岐先予測アドレスＴＧＴとする分岐先予測アドレスに対する命令フェッチリクエストを発行し、その命令フェッチリクエストに対応するエントリとして、エントリＩＢＲ３を割り当てる（Ｓ１７）。分岐先予測アドレスに対する命令フェッチリクエストの応答として供給される命令ＩＤＴは、命令バッファのエントリＩＢＲ３に格納された後、命令デコーダ２６に供給される。
【００４７】
このように移動距離フラグが０である場合には、図６（Ａ）に示すように、サイクル１で命令フェッチアドレスＡに対する命令フェッチリクエストが発行された後、サイクル３で命令フェッチアドレスＡについての分岐予測結果が判明すると、この間に発行された２回のシーケンシャル方向の命令フェッチリクエストについてキャンセルされる。そして、サイクル４で分岐先予測アドレスＴＧＴに対する命令フェッチリクエストが発行されて、以降の処理が実行される。
【００４８】
また、移動距離フラグが１である場合には、命令フェッチ制御部２１は、２回のシーケンシャル方向の命令フェッチリクエストについてのキャンセルは行わない。すなわち、エントリＩＢＲ１、ＩＢＲ２のバリッドビットＩＡＤＦ、ＩＤＴＦは有効であることを示す状態で維持される。命令フェッチ制御部２１は、既に発行されている命令フェッチアドレス（Ａ＋３２）に対する命令フェッチリクエストを、分岐先予測アドレスＴＧＴに対する命令フェッチリクエストのかわりに使用する（Ｓ１８）。また、命令フェッチ制御部２１は、既に発行されている命令フェッチアドレス（Ａ＋６４）に対する命令フェッチリクエストを分岐先予測アドレスＴＧＴの次のアドレス（ＴＧＴ＋３２）に対する命令フェッチリクエストのかわりに使用する。
【００４９】
図６（Ｂ）に示すように、サイクル１で命令フェッチアドレスＡに対する命令フェッチリクエストが発行された後、サイクル３で命令フェッチアドレスＡについての分岐予測結果が判明する。その分岐予測結果が分岐成立かつ移動距離フラグが１である場合には、この間に発行されたシーケンシャル方向の命令フェッチリクエストについてはキャンセルせずに、そのまま使用されて、以降の処理が実行される。これにより、図６（Ａ）に示した場合と比較すると、２サイクルの性能向上効果が得られる。
【００５０】
また、移動距離フラグが２である場合には、命令フェッチ制御部２１は、既に発行されている命令フェッチアドレス（Ａ＋３２）についてキャンセルし、その命令フェッチリクエストに対して割り当てた命令バッファのエントリＩＢＲ１を開放する（Ｓ１９）。一方、命令フェッチ制御部２１は、既に発行されている命令フェッチアドレス（Ａ＋６４）に対する命令フェッチリクエストについてはキャンセルせずに、分岐先予測アドレスＴＧＴに対する命令フェッチリクエストのかわりに使用する（Ｓ２０）。すなわち、エントリＩＢＲ１のバリッドビットＩＡＤＦ、ＩＤＴＦは無効である旨を示すように設定され、エントリＩＢＲ２のバリッドビットＩＡＤＦ、ＩＤＴＦは有効であることを示す状態で維持される。
【００５１】
図６（Ｃ）に示すように、サイクル１（ＩＡサイクル）で命令フェッチアドレスＡに対する命令フェッチリクエストが発行された後、サイクル３（ＩＭサイクル）で命令フェッチアドレスＡについての分岐予測結果が判明する。その分岐予測結果が分岐成立かつ移動距離フラグが２である場合には、既に発行された１回目のシーケンシャル方向の命令フェッチリクエストについてはキャンセルされ、２回目のシーケンシャル方向の命令フェッチリクエストについてはキャンセルせずにそのまま使用されて、以降の処理が実行される。これにより、図６（Ａ）に示した場合と比較すると、１サイクルの性能向上効果が得られる。
【００５２】
命令フェッチリクエストについてのキャンセルに係る制御（命令フェッチキャンセル制御）、及び命令バッファのエントリの開放に係る制御（命令バッファキャンセル）について説明する。これらの制御は、命令フェッチ制御部２１により実現される。
【００５３】
図７は、命令フェッチキャンセル制御の例を示す図である。ＩＡサイクルにおいて命令フェッチリクエストが発行されると、その発行されたリクエストについての処理がどの処理サイクルにいるかを示す情報として、ＩＴ＿ＶＡＬＩＤ（７１）、ＩＭ＿ＶＡＬＩＤ（７２）、ＩＢ＿ＶＡＬＩＤ（７３）が順番にセットされる。
【００５４】
また、そのリクエストについての分岐予測結果がＩＭサイクルにおいて分岐予測機構２２から通知されると、命令フェッチ制御部２１は、分岐予測結果に基づいて各フラグ７４〜７６をセットする。命令フェッチ制御部２１は、分岐成立であると予測された分岐予測結果を受けた場合には、ＩＢサイクル分岐成立予測（７４）をセットする。さらに、命令フェッチ制御部２１は、分岐予測結果とともに受けた移動距離フラグの値をデコードし、値が１のときにはＩＢサイクル移動距離フラグ１（７５）をセットし、値が２のときにはＩＢサイクル移動距離フラグ２（７６）をセットする。
【００５５】
命令フェッチ制御部２１は、１サイクル後のＩＢサイクルにおいて、この３つのフラグ７４〜７６を使って分岐命令後に発行された２つ命令フェッチリクエストをキャンセルするか否かを制御する。ここで、図６に示したように、分岐命令の処理サイクルがＩＢサイクルであるとき、分岐予測結果が判明するまでの間に発行されたシーケンシャル方向の命令フェッチリクエストの処理サイクルはＩＭサイクル及びＩＴサイクルである。
【００５６】
ＩＴ＿ＶＡＬＩＤ（７１）が１、かつ、ＩＢサイクル分岐成立予測（７４）が１、かつ、ＩＢサイクル移動距離フラグ１（７５）及びＩＢサイクル移動距離フラグ２（７６）がいずれも０の場合には、ＡＮＤゲート（論理積演算回路）７７の入力がすべて１となる。したがって、ＡＮＤゲート７７により出力されるＩＴサイクル命令フェッチキャンセル信号ＩＦＣ−ＩＴは１となる。ＩＴサイクル命令フェッチキャンセル信号ＩＦＣ−ＩＴは、値が１であるときに、今現在ＩＴサイクルにいる命令フェッチリクエストのキャンセルを指示する信号である。
【００５７】
また、ＩＭ＿ＶＡＬＩＤ（７２）が１、かつ、ＩＢサイクル分岐成立予測（７４）が１、かつ、ＩＢサイクル移動距離フラグ１（７５）が０の場合には、ＡＮＤゲート７８の入力がすべて１となる。したがって、ＡＮＤゲート７８により出力されるＩＭサイクル命令フェッチキャンセル信号ＩＦＣ−ＩＭは１となる。ＩＭサイクル命令フェッチキャンセル信号ＩＦＣ−ＩＭは、値が１であるときに、今現在ＩＭサイクルにいる命令フェッチリクエストのキャンセルを指示する信号である。
【００５８】
すなわち、ＩＢサイクル移動距離フラグ１（７５）が１の場合には、ＩＴサイクル命令フェッチキャンセル信号ＩＦＣ−ＩＴとＩＭサイクル命令フェッチキャンセル信号ＩＦＣ−ＩＭはいずれも抑止される（値が０）。また、ＩＢサイクル移動距離フラグ２（７６）が１の場合には、ＩＭサイクル命令フェッチキャンセル信号ＩＦＣ−ＩＭが抑止される（値が０）。
【００５９】
図８は、命令バッファキャンセル制御の例を示す図である。ＩＡサイクルにおいて命令フェッチリクエストが発行されると、その発行された命令フェッチリクエストに対応する命令バッファのエントリが割り当てられる。この命令バッファのエントリ番号（ＩＢＲ＿ＩＤ）は、命令フェッチリクエストの処理サイクルに対応して、ＩＡ＿ＩＢＲ＿ＩＤ（８１）、ＩＴ＿ＩＢＲ＿ＩＤ（８２）、ＩＭ＿ＩＢＲ＿ＩＤ（８３）、ＩＢ＿ＩＢＲ＿ＩＤ（８４）に順番にセットされる。
【００６０】
供給されるＩＴサイクル命令フェッチキャンセル信号ＩＦＣ−ＩＴの値が１である場合には、ＩＴサイクルの命令バッファのエントリ番号であるＩＴ＿ＩＢＲ＿ＩＤ（８２）が指すエントリに対するキャンセル信号ＣＡ０〜ＣＡ７が処理部８５より発行される。同様に、ＩＭサイクル命令フェッチキャンセル信号の値が１である場合には、ＩＭサイクルの命令バッファのエントリ番号であるＩＭ＿ＩＢＲ＿ＩＤ（８３）が指すエントリに対するキャンセル信号ＣＢ０〜ＣＢ７が処理部８６より発行される。
【００６１】
処理部８５より発行されたキャンセル信号ＣＡｉ及び処理部８６より発行されたキャンセル信号ＣＢｉは、ＯＲゲート（論理和演算回路）８７−ｉに入力され、その演算結果がエントリのキャンセル信号ＩＢＲＣｉとして出力される。なお、ｉは添え字であり、ｉ＝０〜７の整数である。エントリのキャンセル信号ＩＢＲＣｉの値が１になると、そのエントリのバリッドビットＩＡＤＦ、ＩＤＴＦが無効である旨を示すように設定され、エントリはクリアされる。
【００６２】
本実施形態によれば、分岐予測結果が判明するのと同じタイミングで、移動距離フラグにより分岐命令アドレスと分岐先アドレスとの差に関する情報が得られる。そのため、分岐予測結果が判明するまでの間に行われるＮ回のシーケンシャル方向の命令フェッチリクエストに分岐先予測アドレスに対応する命令フェッチリクエストが含まれるか否かを分岐予測結果の判明と同時に判断することが可能となる。これによって、分岐先予測アドレスに対応する命令フェッチリクエストが含まれる場合には、そのリクエストにより命令バッファのエントリに保持された命令をキャンセルせずにそのまま使用する。したがって、命令バッファのエントリをそのまま利用できる可能性が高まり、命令バッファに保持されている命令を効率よく利用し、命令フェッチの性能を向上させることができる。また、分岐予測機構に登録されている移動距離フラグを利用するため、レジスタ相対アドレス指定の分岐命令の場合であっても、命令バッファを有効利用することが可能になる。
【００６３】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６４】
１０  演算処理装置
１１  命令フェッチ部
１２  命令実行制御部
１３  プログラマブルレジスタ
１４  演算部
１５  命令キャッシュ部
１６  データキャッシュ部
１７  ２次キャッシュ部
１８  主記憶
２１  命令フェッチ制御部
２２  分岐予測機構
２３  命令アドレス制御部
２４  命令バッファ
２５  命令キャッシュ部
２６  命令デコーダ
【図１】
2013131036.tif 000003
【図２】
2013131036.tif 000004
【図３】
2013131036.tif 000005
【図４】
2013131036.tif 000006
【図５】
2013131036.tif 000007
【図６】
2013131036.tif 000008
【図７】
2013131036.tif 000009
【図８】
2013131036.tif 000010
【図９】
2013131036.tif 000011
【図１０】
2013131036.tif 000012