説明

演算処理装置及び演算処理装置の制御方法

【課題】効率的なスレッド選択を可能にする演算処理装置を提供することを課題とする。
【解決手段】複数のスレッドの命令アドレス又は予測対象の分岐命令の分岐先アドレスを選択して複数のスレッドのアドレスを出力する第1のセレクタ(SL1〜SLn)と、第1のセレクタが出力した複数のスレッドのアドレスのうち1個を選択する第2のセレクタ(313)と、第1のサイクルステージで、第2のセレクタが選択したアドレスの分岐命令が分岐するかを示す分岐方向を選択されたアドレスに基づき予測して出力するとともに、第1のサイクルステージより後の第2のサイクルステージで、予測対象の分岐命令の分岐先アドレスを選択されたアドレスに基づき予測して出力する分岐予測回路(204)と、分岐予測回路が出力した分岐方向に基づき、第1セレクタ及び第2のセレクタによるスレッドのアドレスの選択を制御するスレッド調停回路(311)とを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【0002】
まず、演算処理装置であるパイプラインプロセッサと分岐予測について説明する。パイプライン化されたプロセッサ(パイプラインプロセッサ)の単純な実装では、プログラム実行中に分岐命令を実行した場合、命令フェッチから分岐命令実行までのパイプラインステージの段数分のクロックサイクルだけ、パイプラインが停止(ストール)し、パイプライン処理の効率が低下する。
【0003】
これを防ぐため、パイプラインプロセッサでは、分岐命令をフェッチした場合、分岐先の命令アドレスもしくは、分岐方向として分岐する場合にはtakenと予想し又は分岐しない場合はnot takenと予想し、もしくは、これらtakenとnot takenの両方を予測し、分岐命令の実行完了を待たずに命令フェッチを続行する分岐予測処理が行われることが一般的である。分岐予測により、プロセッサのパイプラインに命令を流し続けることでパイプラインの処理効率を向上させることができる。
【0004】
分岐予測には、分岐先予測又は分岐方向予測又はそれら両方を含む。分岐先予測とは、ある分岐命令の次に実行される命令(分岐先命令)の命令アドレスを予測することである。分岐方向予測とは、ある分岐命令が分岐する(taken)か分岐しない(not-taken)かを予測することである。分岐予測方式の一例としては、特許文献1が知られている。
【0005】
分岐予測の方式には、分岐予測レイテンシが小さいが分岐予測精度の劣る静的分岐予測と、分岐予測レイテンシが大きいが分岐予測精度の高い動的分岐予測とがある。静的分岐予測とは、例えば、後続アドレスを単純に読み込む(not-takenと仮定)、あるいは、命令コード上の予測ビットを利用するといったものである。動的分岐予測とは、実行したプログラムの過去の分岐履歴を参照し、プログラムの分岐の挙動の規則性を用いて実行の完了していない分岐命令による分岐方向又は分岐先命令アドレス又はそれら両方を予測するものである。
【0006】
動的分岐予測は大規模履歴を利用するなど、動的分岐予測を使用しない場合よりも複雑な回路を必要とし、複数クロックサイクルを分岐予測完了まで要することが普通である。パイプライン段数や同時命令実行数の多いプロセッサコアでは、分岐予測の失敗による性能、電力面での効率低下は大きく、予測精度の高い動的分岐予測回路を用いることが一般的である。
【0007】
次に、マルチスレッディングについて説明する。1960年ごろより、レイテンシの長い演算器を効率的に利用するため、パイプライン化し、複数スレッドで時分割多重化して用いるシステムが登場している。
【0008】
現代のコンピュータシステムでは、プロセッサ内での演算レイテンシと比較して、メモリ読み書きにかかる時間であるメモリレイテンシが大きくなっており、メモリレイテンシを隠蔽してプロセッサのスループットを向上させる手段として、ハードウエアによるマルチスレッド処理方式であるハードウエアマルチスレッディングを採用することが、スループット指向のプロセッサで一般化している。
【0009】
スレッドを実行するハードウエア資源であるハードウエアスレッド(ストランドとも呼ばれる)とは、プロセッサコア内に1セット以上保持される、アーキテクチャ状態及びそれより派生するプロセッサ状態のことを指す。したがって、殆どの場合、命令フェッチ部の処理で扱われる命令フェッチアドレスは、スレッド毎に異なる値を持つ。
【0010】
ハードウエアマルチスレッディングとは、単一プロセッサコア内部で、複数のハードウエアスレッドをサイクル単位の時分割で切り替え、又は、同一サイクル内で同時に処理する方式である。
【0011】
マイクロアーキテクチャに関する用語のハードウエアスレッドやマルチスレッディングと、オペレーティングシステムなどソフトウエア関連分野の用語のスレッドやマルチスレッディングとでは定義が異なることが普通である。以降、前述の意味で用いる。
【0012】
複数スレッドの命令を並列実行することで、複数スレッド間での演算器利用の効率向上、あるいは、複数スレッド間でのメモリアクセスと演算器利用との平行(オーバラップ)化が実現され、プロセッサのスループットが向上する。
【0013】
複数スレッドを平行して処理するために、ハードウエアで複数スレッドを処理するプロセッサ(マルチスレッドプロセッサ)では、命令フェッチの段階ではサイクル単位で、対象とするスレッドを切り替えて命令をフェッチすることが一般的である。フェッチするスレッドを切り替える時間的単位は最小で1クロックサイクルであり、それより時間的粒度が大きい方式もある。前者は一般にFGMT(Fine-grained multithreading)などと呼ばれ、後者はVMT(Vertical multithreading)又はCGMT(Coarse-grained multithreading)などと呼ばれる。
【0014】
命令フェッチ部のスレッド切り替え(スレッドスケジューリング)の方式としては、例えば、ラウンドロビンで行う方式がある。これは、スケジュールするスレッドをサイクル毎に予め決めておいた順番で切り替えていく方法である。
【0015】
また、インタリーブされた複数の命令スレッドを優先規則に従ってサイクル単位で処理するデータ・プロセッサであって、命令スレッドに関連した事象又は条件に基づいて、特定の命令スレッドに割り当てられた優先度を調整するプロセッサが知られている(例えば、特許文献2参照)。
【0016】
また、インタリーブされた複数の命令スレッドを優先規則に従ってサイクル単位で処理するデータ・プロセッサであって、命令スレッドに関連した事象又は条件に基づいて処理する、特定の命令スレッドを選択するプロセッサが知られている(例えば、特許文献3参照)。
【0017】
また、複数の命令スレッドを処理する能力を有するプロセッサであって、処理のために命令スレッドをインタリーブする方法にランダム化を導入し、同時に命令スレッド間のインタリービングの全体的な比率又は程度をある所望の比率又は程度に維持するプロセッサが知られている(例えば、特許文献4参照)。
【0018】
また、条件分岐命令の次に、どの命令を実行するかを予測し、あらかじめその命令列を読み込んでおくことが可能な分岐予測機構を備えた計算機装置において、分岐予測機構に加えて、条件分岐方向のヒントを得る手段と、特定の命令の実行結果から条件分岐方向のヒントを取得する手段と、上記ヒントを分岐予測装置に伝える手段と、ヒントに従って分岐方向を決定する手段を設けた分岐予測装置が知られている(例えば、特許文献5参照)。
【0019】
また、マルチスレッディングプロセッサにおけるスケジューリング方法であって、実行可能な複数のスレッドを割り当て、実行するスレッド数をマルチスレッディングプロセッサの動作状態に応じて動的に決定し、割り当てられた複数スレッドから決定された数のスレッドを選択し、同一期間内に選択されたスレッドの命令をフェッチし実行するスケジューリング方法が知られている(例えば、特許文献6参照)。
【先行技術文献】
【特許文献】
【0020】
【特許文献1】特開平6−89173号公報
【特許文献2】特許第4179555号公報
【特許文献3】特許第4086808号公報
【特許文献4】特許第4086809号公報
【特許文献5】特開2001−5665号公報
【特許文献6】国際公開第04/044745号
【発明の概要】
【発明が解決しようとする課題】
【0021】
まず、レイテンシの課題を説明する。命令フェッチを時分割でスレッドごとに行うパイプラインプロセッサでは、あるスレッドの命令フェッチ開始から分岐予測の結果が出るまでのレイテンシと、時分割で起こるスレッド切り替えのタイミングが合わない場合がある。スレッド切り替えのタイミングが合わない場合とは、あるスレッドの分岐予測結果が出ていても、分岐予測結果を受け取って命令フェッチを行うパイプラインステージが別のスレッドを処理している場合である。パイプラインステージが別のスレッドを処理している場合、分岐予測結果が即座に使われず、分岐予測レイテンシが余計に延びる結果となる。分岐予測レイテンシが延びることが原因で、当該スレッドの実行サイクル数が増大しうる。例えば、純粋なラウンドロビン方式のスレッドスケジューリングを用いた場合で、分岐予測レイテンシのサイクル数が、ハードウエアスレッド数の倍数でない場合、分岐予測結果が次の命令フェッチに利用されるまでのサイクル数が、ハードウエアマルチスレッディング動作を行ったことにより、単一スレッド動作を行った場合と比較して、増大する。
【0022】
次に、スループットの課題を説明する。分岐方向を先見しない従来方式でスレッドスケジューリングを行うプロセッサコアでは、命令フェッチ開始から分岐予測結果が出るまでのサイクル数(分岐予測レイテンシ)が、ハードウエアで扱うスレッド数より大きい場合は、分岐予測レイテンシの全てをハードウエアマルチスレッディングによって隠蔽することはできない。そのため、動的分岐予測器による分岐予測結果をすぐに命令フェッチに用いることができず、パイプラインがストール、あるいは、動的分岐予測器によらない低レイテンシだが不正確な静的分岐予測を用いざるを得なくなる。不正確な分岐予測を用いることで、不必要な命令フェッチが起こる可能性が高まり、命令フェッチスループットが低下する。命令フェッチスループットの低下は、プロセッサ全体の命令実行効率をも低下させうる。動的分岐予測完了が間に合わなかった場合にアドレスが連続する後続命令をフェッチする(分岐しないと仮定する)静的分岐予測制御を用いるマルチスレッドプロセッサでは、分岐しないと予測していた場合に、分岐命令の実際の実行結果が分岐するであった場合は、命令フェッチパイプラインのスループットを浪費する。予測された分岐方向が分岐する場合、次のアドレスの後続命令をフェッチしても実行されることはなく、その後続命令のパイプライン処理をキャンセルして予測された分岐先命令のフェッチをやり直すため、必ず無駄となる。これによりマルチスレッドプロセッサではスループット性能の低下を起こし、また、電力を空費する結果となる。
【0023】
また、プロセッサ内部には、キャッシュ、TLB(Translation Lookaside Buffer)、分岐履歴表などの、命令フェッチ履歴により内容が蓄積される記憶資源を持つことが一般的である。これらの記憶資源が不正確な命令フェッチにより内容が汚染され、プロセッサの性能低下につながる可能性がある。
【0024】
1つの側面では、本発明は、効率的なスレッド選択を可能にすることを目的とする。
【課題を解決するための手段】
【0025】
演算処理装置は、複数のスレッドの命令を複数のサイクルステージ毎に実行する演算処理装置において、入力した複数のスレッドの命令の命令アドレス又は予測対象の分岐命令の分岐先アドレスを選択して、前記複数のスレッドのアドレスを出力する第1のセレクタと、前記第1のセレクタが出力した複数のスレッドのアドレスのうち、いずれか1個のスレッドのアドレスを選択する第2のセレクタと、前記複数のサイクルステージのうち第1のサイクルステージで、前記第2のセレクタが選択したアドレスの分岐命令が分岐するかを示す分岐方向を前記選択されたアドレスに基づき予測して出力するとともに、前記第1のサイクルステージより後の第2のサイクルステージで、前記予測対象の分岐命令の分岐先アドレスを前記選択されたアドレスに基づき予測して出力する分岐予測回路と、前記分岐予測回路が出力した前記分岐方向に基づき、前記第1セレクタ及び第2のセレクタによるスレッドのアドレスの選択を制御するスレッド調停回路と、を有する。
【発明の効果】
【0026】
演算処理装置において、効率的なスレッド選択が可能となる。
【図面の簡単な説明】
【0027】
【図1】実施形態による情報処理装置の構成例を示す図である。
【図2】演算処理装置の構成例を示す図である。
【図3】参考技術による命令フェッチ部及び分岐予測回路の構成例を示す図である。
【図4】図3の演算処理装置のパイプライン処理例を示す図である。
【図5】本実施形態による命令フェッチ部及び分岐予測回路の構成例を示す図である。
【図6】図5の演算処理装置のパイプライン処理例を示す図である。
【図7】図5の演算処理装置の他のパイプライン処理例を示す図である。
【図8】命令フェッチ部及び一次命令キャッシュの構成例を示す図である。
【図9】図5の分岐方向予測回路の構成例を示す図である。
【図10】図5の分岐方向予測回路の他の構成例を示す図である。
【図11】図5のスレッド調停回路の構成例を示す図である。
【図12】図5のスレッド調停回路の他の構成例を示す図である。
【発明を実施するための形態】
【0028】
図1は、実施形態による情報処理装置の構成例を示す図である。情報処理装置は、例えば、マルチスレッド演算処理装置(プロセッサ)101をサーバなどに組み込んだシステムであり、複数の演算処理装置101、複数のメモリ102、及びインターコネクト制御部103を有する。演算処理装置101は、例えば中央演算処理装置(CPU)であり、インターコネクト制御部103に接続される。複数の演算処理装置101には、それぞれ、複数のメモリ102が接続される。インターコネクト制御部103は、外部装置104に対して入出力制御を行う。
【0029】
図2は、演算処理装置101の構成例を示す図である。演算処理装置101は、アウトオブオーダ実行及びパイプライン機能を有する。命令フェッチステージ221では、命令フェッチ部203、命令バッファ206、分岐予測回路204、一次命令キャッシュ205及び二次キャッシュ202などが動作する。
【0030】
命令フェッチ部203は、分岐予測回路204から入力したフェッチする命令の予測分岐先アドレス、分岐制御部211から入力した分岐演算により確定した分岐先アドレス、及び命令フェッチ部203内で生成した分岐しない場合のフェッチする命令の連続した次のアドレスのうちから1つのアドレスを選択し、次の命令フェッチアドレスを確定する。命令フェッチ部203は、確定した命令フェッチアドレスを一次命令キャッシュ205に出力し、該当するアドレスから命令コードをフェッチする。一次命令キャッシュ205は、二次キャッシュ202の一部の情報を格納し、二次キャッシュ202はメモリ102(図1)の一部の情報を格納している。一次命令キャッシュ205に該当するアドレスのデータが存在しない場合は二次キャッシュ202から、二次キャッシュ202に該当するデータが存在しない場合はメモリ102からデータをフェッチする。本実施形態では、メモリ102は演算処理装置101の外部に配置しているため、外部にあるメモリ102との入出力制御はメモリコントローラ201を介して行われる。一次命令キャッシュ205、二次キャッシュ202、又はメモリ102の該当するアドレスからフェッチされた命令コードは、命令バッファ206に格納される。
【0031】
分岐予測回路204は、上記の命令フェッチと並行して分岐予測を実行する。分岐予測回路204は、命令フェッチ部203から出力された命令フェッチアドレスを入力し、それを基に分岐予測を行い、分岐する又は分岐しないを示す分岐方向と分岐先アドレスとを命令フェッチ部203に出力する。命令フェッチ部203は、予測された分岐方向が分岐する旨を示す場合に、次の命令フェッチアドレスとして、予測された分岐先アドレスを選択する。分岐しない旨の分岐方向が予測された場合は、連続した次のアドレスが命令フェッチアドレスとして選択される。
【0032】
命令発行ステージ222では、命令デコーダ207、命令発行制御部208が動作する。命令デコーダ207は、命令バッファ206から命令コードを受け取り、命令の種別や必要な実行資源などを解析し、解析結果を命令発行制御部208に出力する。命令発行制御部208は、リザベーションステーションの構造を持ち、命令で参照するレジスタなどの依存性を見て、依存性のあるレジスタの更新状況や同じ演算器などの実行資源を用いる命令の実行状況などから、実行資源が命令を実行可能かどうかを判断し、実行可能なら各実行資源に対してレジスタ番号やオペランドアドレスなど命令実行に必要な情報を、一次オペランドキャッシュ209及び演算器210に出力する。また、命令発行制御部208は、実行可能となるまで命令を格納しておくバッファの役割も担う。
【0033】
命令実行ステージ223では、演算器210、一次オペランドキャッシュ209、分岐制御部211などの実行資源が動作する。演算器210は、必要に応じてレジスタ212や一次オペランドキャッシュ209からデータを入力し、四則演算や論理演算、三角関数演算、アドレス計算などの命令に対応した演算を実行し、演算結果をレジスタ212やキャッシュ209に出力する。一次オペランドキャッシュ209は、一次命令キャッシュ205と同様に、二次キャッシュ202の一部の情報を格納しているものであり、ロード命令によりメモリ102(図1)から演算器210又はレジスタ212へデータをロードし、ストア命令により演算器210又はレジスタ212からメモリ102へデータをストアする。各実行資源は、命令実行の完了通知を命令完了制御部213へ出力する。
【0034】
分岐制御部211は、命令デコーダ207から分岐命令の種別を入力し、演算器210から分岐先アドレスや分岐条件となる演算の結果を入力し、演算結果が分岐条件を満たしていれば分岐する、満たしていなければ分岐しないことの判断を行い、分岐方向を確定する。また、分岐制御部211は、演算結果と分岐予測時の分岐先アドレスと分岐方向が一致するかどうかの判断や、分岐命令の順序関係の制御も行う。分岐制御部211は、演算結果と予測とが一致した場合は命令完了制御部213へ分岐命令の完了通知を出力する。また、分岐制御部211は、演算結果と予測とが一致しなかった場合は分岐予測失敗を意味するので、命令完了制御部213へ分岐命令の完了通知と共に後続命令のキャンセル及び再命令フェッチ要求を出力する。
【0035】
命令完了ステージ224では、命令完了制御部213、レジスタ212、分岐履歴更新部214が動作する。命令完了制御部213は、各命令実行資源から入力した完了通知を基に、コミットスタックエントリに格納された命令コード順に命令完了処理を行い、レジスタ212の更新指示を出力する。レジスタ212は、命令完了制御部213からレジスタ更新指示を入力すると、演算器210や一次オペランドキャッシュ209から入力する演算結果のデータを基にレジスタ212の更新を実行する。分岐履歴更新部214は、分岐制御部211から入力する分岐演算の結果を基に、分岐予測回路204の履歴更新データを生成し、分岐予測回路204に出力し、分岐予測回路204の履歴データの更新を実行する。
【0036】
図3は、参考技術による命令フェッチ部203及び分岐予測回路204の構成例を示す図である。命令フェッチ部203は、第1のセレクタSL1〜SLn、パイプラインレジスタRG1〜RGn、スレッド調停回路311、パイプラインレジスタ312及び第2のセレクタ313を有する。分岐予測回路204は、大規模履歴テーブル321、パイプラインレジスタ322及び分岐予測論理回路323を有する。命令フェッチステージ221では、パイプライン処理により分岐予測を行う。分岐予測レイテンシが、Aステージ301、Tステージ302及びMステージ303の3サイクルである命令フェッチパイプラインの一例を示す。Aステージ301では、命令アドレス生成が行われる。Tステージ302では、分岐先アドレスの履歴読み出しが行われる。Mステージ303では、分岐予測の完了処理が行われる。命令フェッチステージ221のパイプライン段数やパイプラインレジスタの位置、パイプラインステージの機能、ハードウエアスレッド数などは任意に構成されうる。
【0037】
n個の第1のセレクタSL1〜SLnは、スレッド調停回路311の制御により、それぞれ、n個のスレッドの命令アドレスAA1〜AAn又は分岐先アドレスADを選択し、n個のスレッドのアドレスAB1〜ABnを出力する。ここで、nは2以上の整数である。例えば、セレクタSL1は、第1のスレッドの命令アドレスAA1及び分岐先アドレスADを入力し、第1のスレッドのアドレスAB1を出力する。セレクタSL2は、第2のスレッドの命令アドレスAA2及び分岐先アドレスADを入力し、第2のスレッドのアドレスAB2を出力する。n個のパイプラインレジスタRG1〜RGnは、それぞれ、フリップフロップで構成され、クロック信号に同期して、n個のスレッドのアドレスAB1〜ABnをラッチして出力する。スレッド調停回路311は、n個のスレッドのうちの次にフェッチする命令のスレッド番号SNを出力する。パイプラインレジスタ312は、クロック信号に同期して、スレッド番号SNをラッチして出力する。
【0038】
Aステージ301では、第2のセレクタ313は、n個のスレッドのアドレスAB1〜ABnの中から、スレッド番号SNが示す1個のスレッドの命令アドレスACを選択して出力する。命令アドレスACは、フェッチするアドレスであり、一次命令キャッシュ205へ出力されるとともに、次の分岐予測に用いるために、パイラインレジスタを介して分岐予測回路204に出力される。
【0039】
Tステージ302では、分岐予測回路204が動的分岐予測を行う。具体的には、分岐予測回路204内の大規模履歴テーブル321は、分岐命令の命令アドレスACに対する分岐方向及び分岐先アドレスの履歴情報を記憶し、命令アドレスACに応じた分岐方向及び分岐先アドレスをパイプラインレジスタ322に出力する。大規模履歴テーブル321は、高い分岐予測精度と引き換えに予測結果が出るまで、長いレイテンシを必要とする。パイプラインレジスタ322は、クロック信号に同期して、分岐方向及び分岐先アドレスをラッチして出力する。
【0040】
Mステージ303では、分岐予測回路204内の分岐予測論理回路323は、パイプラインレジスタ322から分岐命令の分岐方向及び分岐先アドレスを入力し、スレッド選択情報SIをスレッド調停回路311に出力し、分岐命令の分岐先アドレスADを第1のセレクタSL1〜SLnに出力する。スレッド選択情報SIは、分岐方向及びその分岐命令のスレッド番号SNを含む。
【0041】
第1のセレクタSL1〜SLnは、スレッド調停回路311の制御により、スレッド選択情報SI内の分岐方向が分岐する旨を示す場合は、分岐先アドレスADを選択し、スレッド選択情報SI内の分岐方向が分岐しない旨を示す場合は、後続の命令アドレスAA1〜AAnを選択する。
【0042】
また、スレッド調停回路311は、スレッド選択情報SI内のスレッド番号SNをパイプラインレジスタ312に出力する。パイプラインレジスタ312は、クロック信号に同期して、スレッド番号SNをラッチして出力する。第2のセレクタ313は、パイプラインレジスタ312が出力するスレッド番号SNに応じて、アドレスAB1〜ABnの中から1つを選択し、命令アドレスACとして出力する。例えば、第2のセレクタ313は、スレッド番号SNが1番のときには、第1のスレッドのアドレスAB1を選択し、スレッド番号SNが2番のときには、第2のスレッドのアドレスAB2を選択する。
【0043】
図4は、図3の演算処理装置101のパイプライン処理例を示す図である。ここでは、演算処理装置101が第1のスレッド及び第2のスレッドの2スレッドを切り替えてフェッチし、フェッチ開始から分岐先アドレスADの確定までのレイテンシが3サイクルである例を示す。右方向の矢印は時間順を示し、下方向の矢印は命令の処理順を示す。
【0044】
第1のスレッドは、分岐命令A、後続命令B及び分岐先命令Cを有する。第2のスレッドは、命令X及び命令Yを有する。第1のスレッドと第2のスレッドとの間には制御依存関係はなく、性能に対する影響を除き、実行結果に影響を与えることなく、自由にスレッド選択できる。この例では、第1のスレッドと第2のスレッドを交互に命令フェッチしている。具体的には、命令フェッチは、分岐命令A(第1のスレッド)、命令X(第2のスレッド)、後続命令B(第1のスレッド)、命令Y(第2のスレッド)、分岐先命令C(第1のスレッド)の順で行われる。
【0045】
後続命令B(第1のスレッド)は、分岐命令A(第1のスレッド)の命令アドレスに連続した次のアドレスにある命令であり、分岐命令A(第1のスレッド)の実行結果により分岐しない場合に実行される命令である。分岐先命令C(第1のスレッド)は、分岐命令A(第1のスレッド)の実行結果により分岐する場合に実行される分岐先アドレスの命令である。
【0046】
まず、時刻t1において、着目する分岐命令AのAステージ301が実行される。
【0047】
次に、時刻t2において、分岐命令AのTステージ302が実行され、命令XのAステージ301が実行される。
【0048】
次に、時刻t3では、分岐命令AのMステージ303が実行され、命令XのTステージ302が実行され、後続命令BのAステージ301が実行される。分岐命令AのMステージ303でスレッド選択情報SI及び分岐先アドレスADが確定し、時刻t5で分岐先命令CをAステージ301でフェッチ開始することが可能になる。例えば、スレッド選択情報SIが分岐する旨を示す場合を例に説明する。
【0049】
時刻t3では、分岐先アドレスADが確定しておらず、分岐先命令Cを命令フェッチすることは不可能である。そのため、時刻t3では、分岐しないと仮定する静的分岐予測により、後続命令Bをフェッチしている。
【0050】
時刻t4で、後続命令BがAステージ301の終了の際に、分岐命令Aの分岐先予測が完了し、分岐先アドレスADが確定し、後続命令Bではなく、分岐先命令Cが次の命令であると予測される。このため、時刻t4では、後続命令Bはキャンセルされる。
【0051】
なお、時刻t3で、第2のスレッドの命令YのAステージ301を実行する場合、後続命令Bのキャンセルは回避されるが、後続命令BのAステージ301の時点で分岐予測結果が出ておらず、分岐予測結果を用いて第2のスレッドをスケジュールし、意図的にキャンセルを回避することは不可能である。
【0052】
時刻t4では、スレッド選択情報SIが分岐する旨を示すので、後続命令Bがキャンセルされ、分岐命令AのBステージ304(図8)が実行され、命令XのMステージ303が実行され、命令YのAステージ301が実行される。ここで、Bステージ304は、命令を後段に伝送するステージである。
【0053】
次に、時刻t5では、命令XのBステージ304が実行され、命令YのTステージ302が実行され、分岐先命令CのAステージ301が実行される。
【0054】
次に、時刻t6では、命令YのMステージ303が実行され、分岐先命令CのTステージ302が実行される。
【0055】
次に、時刻t7では、命令YのBステージ304が実行され、分岐先命令CのMステージ303が実行される。
【0056】
次に、時刻t8では、分岐先命令CのBステージ304が実行される。
【0057】
なお、時刻t4では、分岐先アドレスADの予測結果が出ているため、命令Yではなく分岐先命令CのAステージ301を実行することも可能である。その場合は、第2のスレッドの命令YのAステージ301が遅れ、第1のスレッドの命令フェッチ状態に悪影響を与えることになる。
【0058】
上記の例では、第2のスレッドの命令Yではなく、第1のスレッドの分岐先命令Cを遅らせるスケジューリング結果となっている。いずれの場合でも、後続命令Bのフェッチにより上から3つ目の命令スロットを消費したことにより、第1のスレッド又は第2のスレッドのいずれかの命令フェッチが遅れることになる。
【0059】
図5は、本実施形態による命令フェッチ部203及び分岐予測回路204の構成例を示す図である。図5の演算処理装置101は、図3の演算処理装置101に対して、分岐方向予測回路501を追加したものである。以下、図5の演算処理装置101が図3の演算処理装置101と異なる点を説明する。
【0060】
分岐方向予測回路501は、分岐予測回路204内に設けられ、小規模履歴テーブル502、分岐方向予測論理回路503及びパイプラインレジスタ504を有する。Tステージ302では、小規模履歴テーブル502は、代表的な一部の分岐命令の命令アドレスACに対する分岐方向の履歴情報を記憶し、命令アドレスACに応じた分岐方向を分岐方向予測論理回路503に出力する。分岐方向予測論理回路503は、小規模履歴テーブル502が出力する分岐方向を基に分岐方向BDを出力する。パイプラインレジスタ504は、クロック信号に同期して、パイプラインレジスタ312が出力するスレッド番号SNをラッチして出力する。スレッド選択情報SIは、分岐方向予測論理回路503が出力する分岐方向BD及びフリップフロップ504が出力するスレッド番号SNを含み、スレッド調停回路311に入力される。次に、Mステージ303では、分岐予測論理回路323は、分岐先アドレスADを第1のセレクタSL1〜SLnに出力する。
【0061】
Tステージ302における分岐方向予測論理回路503が出力する分岐方向BDは、Mステージ303における分岐予測論理回路323が出力する分岐先アドレスADよりも先に結果が出ている。分岐方向BDは、スレッド番号SNと共に、スレッド調停回路311に入力され、次に命令フェッチを行うスレッドが決定される。これにより、分岐することが予測される分岐命令のスレッドをスケジュールしないことが可能となる。その詳細は、後に図6を参照しながら説明する。
【0062】
本実施形態では、大規模履歴テーブル321を有する図3の分岐予測回路204よりも低レイテンシの分岐方向予測回路501を設ける。小規模履歴テーブル502は、1つ以上の少数の分岐命令の分岐方向(分岐先)を記憶するエントリを記憶する。これにより、小規模履歴テーブル502に保持したエントリにヒットする場合において、分岐方向予測のレイテンシを短縮し、分岐命令のフェッチ開始から命令フェッチのスレッド選択に反映されるまでのレイテンシを短縮する。
【0063】
小規模履歴テーブル502及び大規模履歴テーブル321は、図2の分岐履歴更新部214により更新される。記憶素子としての小規模履歴テーブル502と大規模履歴テーブル321との特性には、素子遅延と記憶密度との間で利害得失がある。小規模履歴テーブル502の記憶素子は、大規模履歴テーブル321の記憶素子に対して、遅延時間が短いが、記憶密度(回路量に対するデータ容量)が低い。大規模履歴テーブル321は、小規模履歴テーブル502に対して遅延が大きいが、記憶密度が高い。性能向上や回路量削減のために、記憶素子の最適な使い分けが行われる。大規模履歴テーブル321は、例えばSRAMであり、多数のエントリを記憶する。小規模履歴テーブル502は、例えばラッチ回路であり、少数のエントリ(例えば1個)を記憶する。小規模履歴テーブル502のエントリ数は、大規模履歴テーブル321のエントリ数よりも少ない。分岐方向予測回路501の構成例は、後に図9及び図10を参照しながら説明する。
【0064】
分岐先アドレスADの予測完了に先行して、分岐方向BDの予測が完了する。予測された分岐方向BDが分岐する旨を示す場合は、次のアドレスの後続命令をフェッチしても実行されることはなく、パイプライン処理をキャンセル(命令処理の取り消し)して、予測された分岐先命令のフェッチをやり直すため、必ず無駄となる。この場合、分岐方向BDの予測が完了した際に、分岐先アドレスADはまだ予測されていないことから、分岐先命令をフェッチすることはできない。そこで、スレッド調停回路311において、別のスレッドをスケジュールすることにより、命令のキャンセルを回避し、命令フェッチスループットの効率化を図る。以下、その詳細を説明する。
【0065】
図6は、図5の演算処理装置101のパイプライン処理例を示す図である。以下、図6が図4と異なる点を説明する。時刻t2において、分岐命令AのTステージ302では、命令アドレスACが小規模履歴テーブル(分岐方向予測テーブル)502にヒットし、分岐方向予測論理回路503は、分岐する旨を示す分岐方向BDを出力する。スレッド選択情報SIは、スレッド調停回路311に入力される。スレッド選択情報SIは、分岐方向BD及びスレッド番号SNを含む。この場合、スレッド番号SNは、命令Xが属する第2のスレッドの番号である。
【0066】
次に、時刻t3では、第2のセレクタ313は、スレッド調停回路311の制御により、スレッド番号SNが示す第2のスレッドの命令Yを選択し、命令YのAステージ301が実行される。また、時刻t3では、分岐命令AのMステージ303が実行され、分岐予測論理回路323は、分岐先アドレスADを第1のセレクタSL1〜SLnに出力する。第1のセレクタSL1〜SLnは、スレッド調停回路311の制御により、分岐する旨を示す分岐方向BDを基に、分岐先アドレスADを選択する。
【0067】
次に、時刻t4では、分岐先命令CのAステージ301が実行される。具体的には、第2のセレクタ313は、スレッド調停回路311の制御により、分岐する旨を示す分岐方向BDを基に、分岐命令Aが属する第1のスレッドのアドレスAB1を選択し、分岐先命令CのAステージ301を実行する。本実施形態によれば、時刻t3の分岐命令AのMステージ303の直後に、時刻t4の分岐先命令CのAステージ301を実行することができる。これにより、図6では、図4に比べ、分岐先命令Cの命令フェッチレイテンシが短縮される。
【0068】
分岐方向BDの予測結果を用いて、第2のスレッドの命令X及び命令Yをスケジューリングすることにより、図4のような後続命令Bのキャンセルを回避することができる。これにより、図6では、図4に比べ、第2のスレッドの命令Yは、命令フェッチ時刻が早くなる。
【0069】
後続命令Bのキャンセルは回避され、命令フェッチスループットが効率化されたことにあわせ、上記のように命令フェッチレイテンシ及び命令フェッチスループットの両面で、命令フェッチ部203の効率が向上する。
【0070】
図7は、図5の演算処理装置101の他のパイプライン処理例を示す図であり、分岐方向BDが分岐しない旨を示す場合を示す。以下、図7が図6と異なる点を説明する。第2のセレクタ313は、スレッド調停回路311の制御により、基本的に第1のスレッド及び第2のスレッドを交互に選択する。
【0071】
時刻t2において、分岐命令AのTステージ302では、命令アドレスACが小規模履歴テーブル(分岐方向予測テーブル)502にヒットせず、分岐方向予測論理回路503は、分岐しない旨を示す分岐方向BDを出力する。スレッド選択情報SIは、スレッド調停回路311に入力される。スレッド選択情報SIは、分岐方向BD及びスレッド番号SNを含む。
【0072】
次に、時刻t3では、第2のセレクタ313は、スレッド調停回路311の制御により、分岐しない旨を示す分岐方向BDを基に、第1のスレッドの後続命令Bを選択し、後続命令BのAステージ301が実行される。後続命令Bは、時刻t4でTステージ302が実行され、時刻t5でMステージ303が実行され、時刻t6でBステージ304が実行される。
【0073】
次に、時刻t4では、第2のスレッドの命令YのAステージ301が実行される。具体的には、第2のセレクタ313は、スレッド調停回路311の制御により、分岐しない旨を示す分岐方向BDを基に、第2のスレッドの命令Yを選択し、命令YのAステージ301を実行する。命令Yは、時刻t5でTステージ302が実行され、時刻t6でMステージ303が実行され、時刻t7でBステージ304が実行される。
【0074】
本実施形態によれば、分岐しない旨の分岐方向BDが予測された場合にも、効率的なパイプライン処理を行うことができる。
【0075】
以上のように、分岐予測回路204は、第2のセレクタ313により選択されたアドレスACを基に、選択されたアドレスACの命令が分岐命令である場合にその分岐命令が分岐するか否かを示す分岐方向BDを予測してTステージ(第1のサイクルステージ)302で出力し、そのTステージ(第1のサイクルステージ)302より後のMステージ(第2のサイクルステージ)303で上記の分岐命令の分岐先アドレスADを予測して出力する。
【0076】
分岐予測回路204は、過去の分岐命令の分岐履歴を記憶する大規模履歴テーブル(第1の履歴テーブル)321と、過去の分岐命令の分岐履歴を記憶する小規模履歴テーブル(第2の履歴テーブル)502とを有する。分岐予測回路204は、大規模履歴テーブル321を用いて分岐先アドレスADを予測し、小規模履歴テーブル502を用いて分岐方向BDを予測する。
【0077】
スレッド調停回路311は、分岐予測回路204により出力される分岐方向BDを基に第1のセレクタSL1〜SLn及び第2のセレクタ313の選択を制御する。第1のセレクタSL1〜SLnは、分岐予測回路204により出力される分岐先アドレスADを入力する。
【0078】
第1のセレクタSL1〜SLnは、予測された分岐方向BDが分岐する旨を示す場合には分岐先アドレスADを選択し、予測された分岐方向BDが分岐しない旨を示す場合にはn個のスレッドの命令アドレスAA1〜AAnを選択する。
【0079】
第2のセレクタ313は、予測された分岐方向BDが分岐する旨を示す場合(図6)には分岐命令Aが属する第1のスレッドとは異なる第2のスレッドの命令Yのアドレスを選択し、予測された分岐方向BDが分岐しない旨を示す場合(図7)には分岐命令Aが属する第1のスレッドと同じ第1のスレッドの後続命令Bのアドレスを選択する。
【0080】
図8は、命令フェッチ部203及び一次命令キャッシュ205の構成例を示す図である。命令フェッチ部203は、Aステージ301、Tステージ302、Mステージ303、Bステージ304及びRステージ305のパイプラインを有する。Aステージ301は、命令アドレス生成の機能を有する。Tステージ302は、分岐先アドレスの履歴読み出しの機能を有する。Mステージ303は、分岐予測の完了を行う機能を有する。Bステージ304は、命令フェッチパイプラインのその他後段の機能(命令の伝送処理)を有する。Rステージ305は、命令バッファの処理である。一次命令キャッシュ205は、命令アドレスをインデックスとしてタグ・データを読み出し、タグ・データと比較し、一致した命令を命令バッファ206に出力する。
【0081】
本実施形態では、Tステージ302で分岐方向BDの予測が完了し、Mステージ303で分岐先アドレスADの予測が完了し、効率的なパイライン処理を行うことができる。
【0082】
図9は、図5の分岐方向予測回路501の構成例を示す図である。比較器902及び論理積(AND)回路903は、図5の分岐方向予測論理回路503に対応する。命令アドレスACは、上位ビットアドレスであるタグAC1及び下位ビットアドレスであるインデックスAC2に分割される。パイプラインレジスタ901は、クロック信号に同期して、タグAC1をラッチして出力する。小規模履歴テーブル(分岐方向予測テーブル)502は、1個以上の少数のエントリを記憶し、低レイテンシのラッチ回路などの素子を用いて構成する。エントリは、インデックスAC2に対応する分岐方向BA及びタグAC3である。小規模履歴テーブル502は、インデックスAC2を入力し、インデックスAC2に対応する分岐方向BA及びタグAC3を出力する。比較回路902は、フリップフロップ901が出力するタグAC1及び小規模履歴テーブル502が出力するタグAC3を比較し、両者が一致しているとき(ヒットのとき)には「1」を予測有効信号BBとして出力し、両者が不一致のとき(ミスのとき)には「0」を予測有効信号BBとして出力する。論理積回路903は、予測有効信号BB及び分岐方向BAの論理積信号を分岐方向BDとして出力する。予測有効信号BBが「1」のときには、分岐方向BDは分岐方向BAと同じになり、予測有効信号BBが「0」のときには、分岐方向BDは「0」になる。分岐方向BDは、「1」が分岐する旨を示し、「0」が分岐しない旨を示す。
【0083】
なお、分岐予測回路204は、分岐命令に限らず他の命令も予測対象とするとことができる。その場合、分岐予測回路204は、命令が分岐命令であるかを含めて予測し、命令が分岐命令であるかどうかは後段の命令デコーダ207で確定する。
【0084】
高遅延の大規模履歴テーブル321の記憶素子は、例えば高密度素子のRAM(ランダムアクセスメモリ:Random Access Memory)である。低遅延の小規模履歴テーブル502の記憶素子は、大規模履歴テーブル321に対して、低遅延な素子を用いた記憶素子であれば良い。小規模履歴テーブル502の記憶素子は、例えばラッチ回路又はフリップフロップであるが、これらに限られない。低遅延な分岐方向予測回路501は、CAM(Content Addressable Memory)によって構成しても良い。
【0085】
小規模履歴テーブル502は、ダイレクトマップであってもセットアソシアティブであってもフルアソシアティブであっても良い。エントリ数は、1エントリ以上あれば良い。小規模履歴テーブル502のインデックスのビット幅は問わない。インデックスは、命令アドレスの関数であれば良い。例えば、命令アドレスの任意のハッシュをインデックスとしても良い。タグAC1は、予測精度と引き換えに、ビット幅を減らしてもよい。
【0086】
また、分岐予測回路204は、低遅延な分岐方向予測回路501とは別に、予測精度の高い分岐方向予測回路を持っていても良い。
【0087】
図10は、図5の分岐方向予測回路501の他の構成例を示す図である。図10の分岐方向予測回路501は、図9の分岐方向予測回路501に対して、論理積回路903を削除したものである。以下、図10が図9と異なる点を説明する。小規模履歴テーブル502は、分岐方向BAを省略し、分岐すると予想される分岐命令のみに対応するエントリを記憶する。小規模履歴テーブル502は、インデックスAC2に対応するタグAC3を出力する。比較回路902は、タグAC1及びAC3を比較し、両者が一致するときには「1」の分岐方向BDを出力し、両者が不一致のときには「0」の分岐方向BDを出力する。
【0088】
図11は、図5のスレッド調停回路311の構成例を示す図である。ここでは、第1のスレッド及び第2のスレッドの2スレッドを調停する場合を例に示す。スレッド番号SNは、「0」が第1のスレッドを示し、「1」が第2のスレッドを示す。排他的論理和回路1104は、インバータ1102の出力信号及びスレッド番号SNの排他的論理和信号を出力する。論理積回路1105は、排他的論理和回路1104の出力信号の論理反転信号と分岐方向BDとの論理積信号を出力する。ラッチ回路1101は、クロック信号に同期して、排他的論理和回路1103の出力信号をラッチして出力する。インバータ1102は、フリップフロップ1101の出力信号の論理反転信号を出力する。排他的論理和回路1103は、インバータ1102の出力信号と論理積回路1105の出力信号との排他的論理和信号をスレッド番号SNとして第2のセレクタ313に出力する。第2のセレクタは、スレッド番号SNが「0」のときには第1のスレッドのアドレスAB1を選択し、スレッド番号SNが「1」のときには第2のスレッドのアドレスAB2を選択し、アドレスACを出力する。
【0089】
まず、図7のように分岐方向BDが分岐しない旨を示す場合を説明する。その場合、分岐方向BDは「0」であり、論理積回路1105は「0」を出力する。すると、排他的論理和回路1103は、インバータ1102の出力信号をそのまま出力する。例えば、フリップフロップ1101の出力信号が「1」の場合、インバータ1102は「0」の信号を出力し、排他的論理和回路1103は「0」のスレッド番号SNを第2のセレクタ313に出力する。第2のセレクタ313は、スレッド番号SNが「0」であるので、第1のスレッドのアドレスAB1を選択し、命令アドレスACとして出力する。
【0090】
次に、フリップフロップ1101は、排他的論理和回路1103から「0」のスレッド番号SNを入力し、「0」の信号を出力する。すると、インバータ1102は「1」の信号を出力し、排他的論理和回路1103は「1」のスレッド番号SNを第2のセレクタ313に出力する。第2のセレクタ313は、スレッド番号SNが「1」であるので、第2のスレッドのアドレスAB2を選択し、命令アドレスACとして出力する。
【0091】
以後、同様に、第2のセレクタ313は、第1のスレッドのアドレスAB1と第2のスレッドのアドレスAB2とを交互に選択して出力する。
【0092】
次に、図6のように分岐方向BDが分岐する旨を示す場合を説明する。その場合、分岐方向BDは「1」であり、スレッド番号SNは分岐命令Aが属する第1のスレッドを示す「0」である。例えば、図6の時刻t2では、命令XのAステージ301が実行される。その時、命令Xは、第2のスレッドであるので、その後、インバータ1102は「0」の信号を出力する。すると、排他的論理和回路1104は、「0」のスレッド番号SNとインバータ1102の「0」の出力信号との排他的論理和信号として「0」の信号を出力し、論理積回路1105は「1」の信号を出力する。すると、排他的論理和回路1103は、インバータ1102の出力信号の論理反転信号をスレッド番号SNとして出力する。この場合、インバータ1102の出力信号が「0」であるので、スレッド番号SNは「1」になる。第2のセレクタ313は、スレッド番号SNが「1」であるので、第2のスレッドのアドレスAB2を選択し、命令アドレスACとして出力する。その結果、図6の時刻t3では、第2のスレッドの命令YのAステージ301が実行される。
【0093】
図12は、図5のスレッド調停回路311の他の構成例を示す図であり、2個以上のスレッドの調停を行うことができる。スレッド調停回路311は、n個のプライオリティエンコーダPE1〜PEn、スケジューラ1201及びセレクタ1202を有する。スレッド選択情報SIは、分岐方向BD及びスレッド番号SNを含む。n個のプライオリティエンコーダPE1〜PEnは、スレッド選択情報SIを基に、それぞれの優先順位に従い、n個のスレッドの中でフェッチ可能なスレッドの番号を1つ出力する。n個のプライオリティエンコーダPE1〜PEnは、それぞれ優先順位が異なる。例えば、第1のプライオリティエンコーダPE1は、第1のスレッドが最も優先順位が高く、第nのプライオリティエンコーダPEnは、第nのスレッドが最も優先順位が高い。セレクタ1202は、スケジューラ1201の制御により、n個のプライオリティエンコーダPE1〜PEnの出力信号のうちの1個を選択して出力する。スケジューラ1201は、n個のプライオリティエンコーダPE1〜PEnの出力信号が均等に選ばれるように制御することにより、特定のスレッドの選択回数が多くなりすぎることを防止できる。なお、スケジューラ1201は、任意のスケジューリングポリシーによって、いずれかのスレッドを優先して選択するように制御してもよい。
【0094】
また、命令フェッチ部203と命令デコーダ207との間には、命令バッファ206があってもなくても良い。命令フェッチ部203は、パイプライン化され、複数スレッドに対しサイクル粒度の時分割で、命令コードと分岐予測回路204により命令フェッチ制御を行う装置であれば良い。命令フェッチ部203は、同一スレッドの複数命令を同一サイクルに同時にフェッチするものであっても良い。
【0095】
また、パイプライン段数は問わず、分岐予測レイテンシも問わない。パイプラインの構成方式は、同期、非同期を問わず、ウェーブパイプラインを構成してもよい。
【0096】
また、1コアあたり複数の命令フェッチ部203を持つ演算処理装置であっても良い。すなわち、命令フェッチ部203より後段の回路を、他の命令フェッチ部203と共用しても良い。言い換えると、複数の命令フェッチ部203と合わせて全体で、同一サイクルで複数スレッドに対する命令フェッチ制御を構成してもよい。
【0097】
また、ハードウエアスレッド数は2スレッド又はそれ以上であってもよい。基本とするスレッドスケジューリング方式は問わず、ラウンドロビン方式以外のスケジューリング方式であっても、命令フェッチに先行して分岐方向を予測することで、不要な命令フェッチを避けることができる。
【0098】
また、演算処理装置101が採用する命令セットアーキテクチャは問わない。RISC(縮小命令セットコンピュータ:Reduced Instruction Set Computer)であってもCISC(複合命令 セットコンピュータ:Complex Instruction Set Computer)であってもVLIW(超長命令語:Very Long Instruction Word)であっても良い。
【0099】
また、命令デコーダ207の形式は、問わず、順序制御又はスーパースカラであっても、VLIWであっても良く、静的・動的なコード変換を行ってもよい。
【0100】
また、命令実行部の形態は問わない。命令実行部は、単一サイクル実行であっても、パイプライン制御であっても、順序制御であっても良く、スーパースカラ実行であっても良く、アウトオブオーダ実行であってもインオーダ実行であってもよい。演算器制御は、SIMD(Single Instruction Multiple Data)型であってもよく、プロセッサコア外の演算資源を制御する形態であってもよい。また、命令完了形式は、問わず、投機的実行や正確な割り込みを実現していてもしていなくてもよい。
【0101】
以上のように、本実施形態によれば、分岐先アドレスADの予測に先行して分岐方向BDを予測することにより、効率的なスレッド選択が可能になり、処理速度を向上させることができる。
【0102】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【0103】
204 分岐予測回路
205 一次命令キャッシュ
301 Aステージ
302 Tステージ
303 Mステージ
311 スレッド調停回路
312 パイプラインレジスタ
313 第2のセレクタ
321 大規模履歴テーブル
322 パイプラインレジスタ
323 分岐予測論理回路
501 分岐方向予測回路
502 小規模履歴テーブル
503 分岐方向予測論理回路
504 パイプラインレジスタ
SL1〜SLn 第1のセレクタ

【特許請求の範囲】
【請求項1】
複数のスレッドの命令を複数のサイクルステージ毎に実行する演算処理装置において、
入力した複数のスレッドの命令の命令アドレス又は予測対象の分岐命令の分岐先アドレスを選択して、前記複数のスレッドのアドレスを出力する第1のセレクタと、
前記第1のセレクタが出力した複数のスレッドのアドレスのうち、いずれか1個のスレッドのアドレスを選択する第2のセレクタと、
前記複数のサイクルステージのうち第1のサイクルステージで、前記第2のセレクタが選択したアドレスの分岐命令が分岐するかを示す分岐方向を前記選択されたアドレスに基づき予測して出力するとともに、前記第1のサイクルステージより後の第2のサイクルステージで、前記予測対象の分岐命令の分岐先アドレスを前記選択されたアドレスに基づき予測して出力する分岐予測回路と、
前記分岐予測回路が出力した前記分岐方向に基づき、前記第1セレクタ及び第2のセレクタによるスレッドのアドレスの選択を制御するスレッド調停回路と、を有することを特徴とする演算処理装置。
【請求項2】
前記分岐予測回路は、
過去の分岐命令の分岐方向及び分岐先アドレスの履歴を記憶する第1の履歴テーブルを用いて前記予測対象分岐命令の分岐先アドレスを予測し、
過去の分岐命令の分岐方向の履歴を記憶する第2の履歴テーブルを用いて前記予測対象分岐命令の分岐方向を予測することを特徴とする請求項1記載の演算処理装置。
【請求項3】
前記第2の履歴テーブルのエントリ数は、前記第1の履歴テーブルのエントリ数よりも少ないことを特徴とする請求項2記載の演算処理装置。
【請求項4】
前記第1のセレクタは、
前記予測された分岐方向が分岐する旨を示す場合には前記分岐先アドレスを選択し、前記予測された分岐方向が分岐しない旨を示す場合には前記複数のスレッドの命令の命令アドレスを選択することを特徴とする請求項1〜3のいずれか1項に記載の演算処理装置。
【請求項5】
前記第2のセレクタは、
前記予測された分岐方向が分岐する旨を示す場合、前記複数のスレッドのうち前記分岐命令が属するスレッドと異なるスレッドのアドレスを選択し、前記予測された分岐方向が分岐しない旨を示す場合、前記分岐命令が属するスレッドと同じスレッドのアドレスを選択することを特徴とする請求項1〜4のいずれか1項に記載の演算処理装置。
【請求項6】
複数のスレッドの命令を複数のサイクルステージ毎に実行する演算処理装置の制御方法において、
前記演算処理装置が有する第1のセレクタが、入力した複数のスレッドの命令の命令アドレス又は予測対象の分岐命令の分岐先アドレスを選択して複数のスレッドのアドレスを出力し、
前記演算処理装置が有する第2のセレクタが、前記第1のセレクタが出力した複数のスレッドのアドレスのうち、いずれか1個のスレッドのアドレスを選択し、
前記演算処理装置が有する分岐予測回路が、前記複数のサイクルステージのうち第1のサイクルステージで、前記第2のセレクタが選択したアドレスの分岐命令が分岐するかを示す分岐方向を、前記選択されたアドレスに基づき予測して出力するとともに、前記複数のサイクルステージのうち前記第1のサイクルステージより後の第2のサイクルステージで、前記予測対象の分岐命令の分岐先アドレスを前記選択されたアドレスに基づき予測して出力することを特徴とする演算処理装置の制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2013−69129(P2013−69129A)
【公開日】平成25年4月18日(2013.4.18)
【国際特許分類】
【出願番号】特願2011−207354(P2011−207354)
【出願日】平成23年9月22日(2011.9.22)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】