複数のスレッドの命令を複数のサイクルステージ毎に実行する演算処理装置において、入力した複数のスレッドの命令の命令アドレス又は予測対象の分岐命令の分岐先アドレスを選択して、前記複数のスレッドのアドレスを出力する第1のセレクタと、前記第1のセレクタが出力した複数のスレッドのアドレスのうち、いずれか1個のスレッドのアドレスを選択する第2のセレクタと、前記複数のサイクルステージのうち第1のサイクルステージで、前記第2のセレクタが選択したアドレスの分岐命令が分岐するかを示す分岐方向を前記選択されたアドレスに基づき予測して出力するとともに、前記第1のサイクルステージより後の第2のサイクルステージで、前記予測対象の分岐命令の分岐先アドレスを前記選択されたアドレスに基づき予測して出力する分岐予測回路と、前記分岐予測回路が出力した前記分岐方向に基づき、前記第1セレクタ及び第2のセレクタによるスレッドのアドレスの選択を制御するスレッド調停回路と、を有することを特徴とする演算処理装置。前記分岐予測回路は、過去の分岐命令の分岐方向及び分岐先アドレスの履歴を記憶する第1の履歴テーブルを用いて前記予測対象分岐命令の分岐先アドレスを予測し、過去の分岐命令の分岐方向の履歴を記憶する第2の履歴テーブルを用いて前記予測対象分岐命令の分岐方向を予測することを特徴とする請求項1記載の演算処理装置。前記第2の履歴テーブルのエントリ数は、前記第1の履歴テーブルのエントリ数よりも少ないことを特徴とする請求項2記載の演算処理装置。前記第1のセレクタは、前記予測された分岐方向が分岐する旨を示す場合には前記分岐先アドレスを選択し、前記予測された分岐方向が分岐しない旨を示す場合には前記複数のスレッドの命令の命令アドレスを選択することを特徴とする請求項1~3のいずれか1項に記載の演算処理装置。前記第2のセレクタは、前記予測された分岐方向が分岐する旨を示す場合、前記複数のスレッドのうち前記分岐命令が属するスレッドと異なるスレッドのアドレスを選択し、前記予測された分岐方向が分岐しない旨を示す場合、前記分岐命令が属するスレッドと同じスレッドのアドレスを選択することを特徴とする請求項1~4のいずれか1項に記載の演算処理装置。複数のスレッドの命令を複数のサイクルステージ毎に実行する演算処理装置の制御方法において、前記演算処理装置が有する第1のセレクタが、入力した複数のスレッドの命令の命令アドレス又は予測対象の分岐命令の分岐先アドレスを選択して複数のスレッドのアドレスを出力し、前記演算処理装置が有する第2のセレクタが、前記第1のセレクタが出力した複数のスレッドのアドレスのうち、いずれか1個のスレッドのアドレスを選択し、前記演算処理装置が有する分岐予測回路が、前記複数のサイクルステージのうち第1のサイクルステージで、前記第2のセレクタが選択したアドレスの分岐命令が分岐するかを示す分岐方向を、前記選択されたアドレスに基づき予測して出力するとともに、前記複数のサイクルステージのうち前記第1のサイクルステージより後の第2のサイクルステージで、前記予測対象の分岐命令の分岐先アドレスを前記選択されたアドレスに基づき予測して出力することを特徴とする演算処理装置の制御方法。まず、レイテンシの課題を説明する。命令フェッチを時分割でスレッドごとに行うパイプラインプロセッサでは、あるスレッドの命令フェッチ開始から分岐予測の結果が出るまでのレイテンシと、時分割で起こるスレッド切り替えのタイミングが合わない場合がある。スレッド切り替えのタイミングが合わない場合とは、あるスレッドの分岐予測結果が出ていても、分岐予測結果を受け取って命令フェッチを行うパイプラインステージが別のスレッドを処理している場合である。パイプラインステージが別のスレッドを処理している場合、分岐予測結果が即座に使われず、分岐予測レイテンシが余計に延びる結果となる。分岐予測レイテンシが延びることが原因で、当該スレッドの実行サイクル数が増大しうる。例えば、純粋なラウンドロビン方式のスレッドスケジューリングを用いた場合で、分岐予測レイテンシのサイクル数が、ハードウエアスレッド数の倍数でない場合、分岐予測結果が次の命令フェッチに利用されるまでのサイクル数が、ハードウエアマルチスレッディング動作を行ったことにより、単一スレッド動作を行った場合と比較して、増大する。次に、スループットの課題を説明する。分岐方向を先見しない従来方式でスレッドスケジューリングを行うプロセッサコアでは、命令フェッチ開始から分岐予測結果が出るまでのサイクル数分岐予測レイテンシが、ハードウエアで扱うスレッド数より大きい場合は、分岐予測レイテンシの全てをハードウエアマルチスレッディングによって隠蔽することはできない。そのため、動的分岐予測器による分岐予測結果をすぐに命令フェッチに用いることができず、パイプラインがストール、あるいは、動的分岐予測器によらない低レイテンシだが不正確な静的分岐予測を用いざるを得なくなる。不正確な分岐予測を用いることで、不必要な命令フェッチが起こる可能性が高まり、命令フェッチスループットが低下する。命令フェッチスループットの低下は、プロセッサ全体の命令実行効率をも低下させうる。動的分岐予測完了が間に合わなかった場合にアドレスが連続する後続命令をフェッチする分岐しないと仮定する静的分岐予測制御を用いるマルチスレッドプロセッサでは、分岐しないと予測していた場合に、分岐命令の実際の実行結果が分岐するであった場合は、命令フェッチパイプラインのスループットを浪費する。予測された分岐方向が分岐する場合、次のアドレスの後続命令をフェッチしても実行されることはなく、その後続命令のパイプライン処理をキャンセルして予測された分岐先命令のフェッチをやり直すため、必ず無駄となる。これによりマルチスレッドプロセッサではスループット性能の低下を起こし、また、電力を空費する結果となる。また、プロセッサ内部には、キャッシュ、TLBTranslationLookasideBuffer、分岐履歴表などの、命令フェッチ履歴により内容が蓄積される記憶資源を持つことが一般的である。これらの記憶資源が不正確な命令フェッチにより内容が汚染され、プロセッサの性能低下につながる可能性がある。1つの側面では、本発明は、効率的なスレッド選択を可能にすることを目的とする。演算処理装置は、複数のスレッドの命令を複数のサイクルステージ毎に実行する演算処理装置において、入力した複数のスレッドの命令の命令アドレス又は予測対象の分岐命令の分岐先アドレスを選択して、前記複数のスレッドのアドレスを出力する第1のセレクタと、前記第1のセレクタが出力した複数のスレッドのアドレスのうち、いずれか1個のスレッドのアドレスを選択する第2のセレクタと、前記複数のサイクルステージのうち第1のサイクルステージで、前記第2のセレクタが選択したアドレスの分岐命令が分岐するかを示す分岐方向を前記選択されたアドレスに基づき予測して出力するとともに、前記第1のサイクルステージより後の第2のサイクルステージで、前記予測対象の分岐命令の分岐先アドレスを前記選択されたアドレスに基づき予測して出力する分岐予測回路と、前記分岐予測回路が出力した前記分岐方向に基づき、前記第1セレクタ及び第2のセレクタによるスレッドのアドレスの選択を制御するスレッド調停回路と、を有する。演算処理装置において、効率的なスレッド選択が可能となる。図1は、実施形態による情報処理装置の構成例を示す図である。情報処理装置は、例えば、マルチスレッド演算処理装置プロセッサ101をサーバなどに組み込んだシステムであり、複数の演算処理装置101、複数のメモリ102、及びインターコネクト制御部103を有する。演算処理装置101は、例えば中央演算処理装置CPUであり、インターコネクト制御部103に接続される。複数の演算処理装置101には、それぞれ、複数のメモリ102が接続される。インターコネクト制御部103は、外部装置104に対して入出力制御を行う。図2は、演算処理装置101の構成例を示す図である。演算処理装置101は、アウトオブオーダ実行及びパイプライン機能を有する。命令フェッチステージ221では、命令フェッチ部203、命令バッファ206、分岐予測回路204、一次命令キャッシュ205及び二次キャッシュ202などが動作する。命令フェッチ部203は、分岐予測回路204から入力したフェッチする命令の予測分岐先アドレス、分岐制御部211から入力した分岐演算により確定した分岐先アドレス、及び命令フェッチ部203内で生成した分岐しない場合のフェッチする命令の連続した次のアドレスのうちから1つのアドレスを選択し、次の命令フェッチアドレスを確定する。命令フェッチ部203は、確定した命令フェッチアドレスを一次命令キャッシュ205に出力し、該当するアドレスから命令コードをフェッチする。一次命令キャッシュ205は、二次キャッシュ202の一部の情報を格納し、二次キャッシュ202はメモリ102図1の一部の情報を格納している。一次命令キャッシュ205に該当するアドレスのデータが存在しない場合は二次キャッシュ202から、二次キャッシュ202に該当するデータが存在しない場合はメモリ102からデータをフェッチする。本実施形態では、メモリ102は演算処理装置101の外部に配置しているため、外部にあるメモリ102との入出力制御はメモリコントローラ201を介して行われる。一次命令キャッシュ205、二次キャッシュ202、又はメモリ102の該当するアドレスからフェッチされた命令コードは、命令バッファ206に格納される。分岐予測回路204は、上記の命令フェッチと並行して分岐予測を実行する。分岐予測回路204は、命令フェッチ部203から出力された命令フェッチアドレスを入力し、それを基に分岐予測を行い、分岐する又は分岐しないを示す分岐方向と分岐先アドレスとを命令フェッチ部203に出力する。命令フェッチ部203は、予測された分岐方向が分岐する旨を示す場合に、次の命令フェッチアドレスとして、予測された分岐先アドレスを選択する。分岐しない旨の分岐方向が予測された場合は、連続した次のアドレスが命令フェッチアドレスとして選択される。命令発行ステージ222では、命令デコーダ207、命令発行制御部208が動作する。命令デコーダ207は、命令バッファ206から命令コードを受け取り、命令の種別や必要な実行資源などを解析し、解析結果を命令発行制御部208に出力する。命令発行制御部208は、リザベーションステーションの構造を持ち、命令で参照するレジスタなどの依存性を見て、依存性のあるレジスタの更新状況や同じ演算器などの実行資源を用いる命令の実行状況などから、実行資源が命令を実行可能かどうかを判断し、実行可能なら各実行資源に対してレジスタ番号やオペランドアドレスなど命令実行に必要な情報を、一次オペランドキャッシュ209及び演算器210に出力する。また、命令発行制御部208は、実行可能となるまで命令を格納しておくバッファの役割も担う。命令実行ステージ223では、演算器210、一次オペランドキャッシュ209、分岐制御部211などの実行資源が動作する。演算器210は、必要に応じてレジスタ212や一次オペランドキャッシュ209からデータを入力し、四則演算や論理演算、三角関数演算、アドレス計算などの命令に対応した演算を実行し、演算結果をレジスタ212やキャッシュ209に出力する。一次オペランドキャッシュ209は、一次命令キャッシュ205と同様に、二次キャッシュ202の一部の情報を格納しているものであり、ロード命令によりメモリ102図1から演算器210又はレジスタ212へデータをロードし、ストア命令により演算器210又はレジスタ212からメモリ102へデータをストアする。各実行資源は、命令実行の完了通知を命令完了制御部213へ出力する。分岐制御部211は、命令デコーダ207から分岐命令の種別を入力し、演算器210から分岐先アドレスや分岐条件となる演算の結果を入力し、演算結果が分岐条件を満たしていれば分岐する、満たしていなければ分岐しないことの判断を行い、分岐方向を確定する。また、分岐制御部211は、演算結果と分岐予測時の分岐先アドレスと分岐方向が一致するかどうかの判断や、分岐命令の順序関係の制御も行う。分岐制御部211は、演算結果と予測とが一致した場合は命令完了制御部213へ分岐命令の完了通知を出力する。また、分岐制御部211は、演算結果と予測とが一致しなかった場合は分岐予測失敗を意味するので、命令完了制御部213へ分岐命令の完了通知と共に後続命令のキャンセル及び再命令フェッチ要求を出力する。命令完了ステージ224では、命令完了制御部213、レジスタ212、分岐履歴更新部214が動作する。命令完了制御部213は、各命令実行資源から入力した完了通知を基に、コミットスタックエントリに格納された命令コード順に命令完了処理を行い、レジスタ212の更新指示を出力する。レジスタ212は、命令完了制御部213からレジスタ更新指示を入力すると、演算器210や一次オペランドキャッシュ209から入力する演算結果のデータを基にレジスタ212の更新を実行する。分岐履歴更新部214は、分岐制御部211から入力する分岐演算の結果を基に、分岐予測回路204の履歴更新データを生成し、分岐予測回路204に出力し、分岐予測回路204の履歴データの更新を実行する。図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のパイプライン段数やパイプラインレジスタの位置、パイプラインステージの機能、ハードウエアスレッド数などは任意に構成されうる。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をラッチして出力する。Aステージ301では、第2のセレクタ313は、n個のスレッドのアドレスAB1~ABnの中から、スレッド番号SNが示す1個のスレッドの命令アドレスACを選択して出力する。命令アドレスACは、フェッチするアドレスであり、一次命令キャッシュ205へ出力されるとともに、次の分岐予測に用いるために、パイラインレジスタを介して分岐予測回路204に出力される。Tステージ302では、分岐予測回路204が動的分岐予測を行う。具体的には、分岐予測回路204内の大規模履歴テーブル321は、分岐命令の命令アドレスACに対する分岐方向及び分岐先アドレスの履歴情報を記憶し、命令アドレスACに応じた分岐方向及び分岐先アドレスをパイプラインレジスタ322に出力する。大規模履歴テーブル321は、高い分岐予測精度と引き換えに予測結果が出るまで、長いレイテンシを必要とする。パイプラインレジスタ322は、クロック信号に同期して、分岐方向及び分岐先アドレスをラッチして出力する。Mステージ303では、分岐予測回路204内の分岐予測論理回路323は、パイプラインレジスタ322から分岐命令の分岐方向及び分岐先アドレスを入力し、スレッド選択情報SIをスレッド調停回路311に出力し、分岐命令の分岐先アドレスADを第1のセレクタSL1~SLnに出力する。スレッド選択情報SIは、分岐方向及びその分岐命令のスレッド番号SNを含む。第1のセレクタSL1~SLnは、スレッド調停回路311の制御により、スレッド選択情報SI内の分岐方向が分岐する旨を示す場合は、分岐先アドレスADを選択し、スレッド選択情報SI内の分岐方向が分岐しない旨を示す場合は、後続の命令アドレスAA1~AAnを選択する。また、スレッド調停回路311は、スレッド選択情報SI内のスレッド番号SNをパイプラインレジスタ312に出力する。パイプラインレジスタ312は、クロック信号に同期して、スレッド番号SNをラッチして出力する。第2のセレクタ313は、パイプラインレジスタ312が出力するスレッド番号SNに応じて、アドレスAB1~ABnの中から1つを選択し、命令アドレスACとして出力する。例えば、第2のセレクタ313は、スレッド番号SNが1番のときには、第1のスレッドのアドレスAB1を選択し、スレッド番号SNが2番のときには、第2のスレッドのアドレスAB2を選択する。図4は、図3の演算処理装置101のパイプライン処理例を示す図である。ここでは、演算処理装置101が第1のスレッド及び第2のスレッドの2スレッドを切り替えてフェッチし、フェッチ開始から分岐先アドレスADの確定までのレイテンシが3サイクルである例を示す。右方向の矢印は時間順を示し、下方向の矢印は命令の処理順を示す。第1のスレッドは、分岐命令A、後続命令B及び分岐先命令Cを有する。第2のスレッドは、命令X及び命令Yを有する。第1のスレッドと第2のスレッドとの間には制御依存関係はなく、性能に対する影響を除き、実行結果に影響を与えることなく、自由にスレッド選択できる。この例では、第1のスレッドと第2のスレッドを交互に命令フェッチしている。具体的には、命令フェッチは、分岐命令A第1のスレッド、命令X第2のスレッド、後続命令B第1のスレッド、命令Y第2のスレッド、分岐先命令C第1のスレッドの順で行われる。後続命令B第1のスレッドは、分岐命令A第1のスレッドの命令アドレスに連続した次のアドレスにある命令であり、分岐命令A第1のスレッドの実行結果により分岐しない場合に実行される命令である。分岐先命令C第1のスレッドは、分岐命令A第1のスレッドの実行結果により分岐する場合に実行される分岐先アドレスの命令である。まず、時刻t1において、着目する分岐命令AのAステージ301が実行される。次に、時刻t2において、分岐命令AのTステージ302が実行され、命令XのAステージ301が実行される。次に、時刻t3では、分岐命令AのMステージ303が実行され、命令XのTステージ302が実行され、後続命令BのAステージ301が実行される。分岐命令AのMステージ303でスレッド選択情報SI及び分岐先アドレスADが確定し、時刻t5で分岐先命令CをAステージ301でフェッチ開始することが可能になる。例えば、スレッド選択情報SIが分岐する旨を示す場合を例に説明する。時刻t3では、分岐先アドレスADが確定しておらず、分岐先命令Cを命令フェッチすることは不可能である。そのため、時刻t3では、分岐しないと仮定する静的分岐予測により、後続命令Bをフェッチしている。時刻t4で、後続命令BがAステージ301の終了の際に、分岐命令Aの分岐先予測が完了し、分岐先アドレスADが確定し、後続命令Bではなく、分岐先命令Cが次の命令であると予測される。このため、時刻t4では、後続命令Bはキャンセルされる。なお、時刻t3で、第2のスレッドの命令YのAステージ301を実行する場合、後続命令Bのキャンセルは回避されるが、後続命令BのAステージ301の時点で分岐予測結果が出ておらず、分岐予測結果を用いて第2のスレッドをスケジュールし、意図的にキャンセルを回避することは不可能である。時刻t4では、スレッド選択情報SIが分岐する旨を示すので、後続命令Bがキャンセルされ、分岐命令AのBステージ304図8が実行され、命令XのMステージ303が実行され、命令YのAステージ301が実行される。ここで、Bステージ304は、命令を後段に伝送するステージである。次に、時刻t5では、命令XのBステージ304が実行され、命令YのTステージ302が実行され、分岐先命令CのAステージ301が実行される。次に、時刻t6では、命令YのMステージ303が実行され、分岐先命令CのTステージ302が実行される。次に、時刻t7では、命令YのBステージ304が実行され、分岐先命令CのMステージ303が実行される。次に、時刻t8では、分岐先命令CのBステージ304が実行される。なお、時刻t4では、分岐先アドレスADの予測結果が出ているため、命令Yではなく分岐先命令CのAステージ301を実行することも可能である。その場合は、第2のスレッドの命令YのAステージ301が遅れ、第1のスレッドの命令フェッチ状態に悪影響を与えることになる。上記の例では、第2のスレッドの命令Yではなく、第1のスレッドの分岐先命令Cを遅らせるスケジューリング結果となっている。いずれの場合でも、後続命令Bのフェッチにより上から3つ目の命令スロットを消費したことにより、第1のスレッド又は第2のスレッドのいずれかの命令フェッチが遅れることになる。図5は、本実施形態による命令フェッチ部203及び分岐予測回路204の構成例を示す図である。図5の演算処理装置101は、図3の演算処理装置101に対して、分岐方向予測回路501を追加したものである。以下、図5の演算処理装置101が図3の演算処理装置101と異なる点を説明する。分岐方向予測回路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に出力する。Tステージ302における分岐方向予測論理回路503が出力する分岐方向BDは、Mステージ303における分岐予測論理回路323が出力する分岐先アドレスADよりも先に結果が出ている。分岐方向BDは、スレッド番号SNと共に、スレッド調停回路311に入力され、次に命令フェッチを行うスレッドが決定される。これにより、分岐することが予測される分岐命令のスレッドをスケジュールしないことが可能となる。その詳細は、後に図6を参照しながら説明する。本実施形態では、大規模履歴テーブル321を有する図3の分岐予測回路204よりも低レイテンシの分岐方向予測回路501を設ける。小規模履歴テーブル502は、1つ以上の少数の分岐命令の分岐方向分岐先を記憶するエントリを記憶する。これにより、小規模履歴テーブル502に保持したエントリにヒットする場合において、分岐方向予測のレイテンシを短縮し、分岐命令のフェッチ開始から命令フェッチのスレッド選択に反映されるまでのレイテンシを短縮する。小規模履歴テーブル502及び大規模履歴テーブル321は、図2の分岐履歴更新部214により更新される。記憶素子としての小規模履歴テーブル502と大規模履歴テーブル321との特性には、素子遅延と記憶密度との間で利害得失がある。小規模履歴テーブル502の記憶素子は、大規模履歴テーブル321の記憶素子に対して、遅延時間が短いが、記憶密度回路量に対するデータ容量が低い。大規模履歴テーブル321は、小規模履歴テーブル502に対して遅延が大きいが、記憶密度が高い。性能向上や回路量削減のために、記憶素子の最適な使い分けが行われる。大規模履歴テーブル321は、例えばSRAMであり、多数のエントリを記憶する。小規模履歴テーブル502は、例えばラッチ回路であり、少数のエントリ例えば1個を記憶する。小規模履歴テーブル502のエントリ数は、大規模履歴テーブル321のエントリ数よりも少ない。分岐方向予測回路501の構成例は、後に図9及び図10を参照しながら説明する。分岐先アドレスADの予測完了に先行して、分岐方向BDの予測が完了する。予測された分岐方向BDが分岐する旨を示す場合は、次のアドレスの後続命令をフェッチしても実行されることはなく、パイプライン処理をキャンセル命令処理の取り消しして、予測された分岐先命令のフェッチをやり直すため、必ず無駄となる。この場合、分岐方向BDの予測が完了した際に、分岐先アドレスADはまだ予測されていないことから、分岐先命令をフェッチすることはできない。そこで、スレッド調停回路311において、別のスレッドをスケジュールすることにより、命令のキャンセルを回避し、命令フェッチスループットの効率化を図る。以下、その詳細を説明する。図6は、図5の演算処理装置101のパイプライン処理例を示す図である。以下、図6が図4と異なる点を説明する。時刻t2において、分岐命令AのTステージ302では、命令アドレスACが小規模履歴テーブル分岐方向予測テーブル502にヒットし、分岐方向予測論理回路503は、分岐する旨を示す分岐方向BDを出力する。スレッド選択情報SIは、スレッド調停回路311に入力される。スレッド選択情報SIは、分岐方向BD及びスレッド番号SNを含む。この場合、スレッド番号SNは、命令Xが属する第2のスレッドの番号である。次に、時刻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を選択する。次に、時刻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の命令フェッチレイテンシが短縮される。分岐方向BDの予測結果を用いて、第2のスレッドの命令X及び命令Yをスケジューリングすることにより、図4のような後続命令Bのキャンセルを回避することができる。これにより、図6では、図4に比べ、第2のスレッドの命令Yは、命令フェッチ時刻が早くなる。後続命令Bのキャンセルは回避され、命令フェッチスループットが効率化されたことにあわせ、上記のように命令フェッチレイテンシ及び命令フェッチスループットの両面で、命令フェッチ部203の効率が向上する。図7は、図5の演算処理装置101の他のパイプライン処理例を示す図であり、分岐方向BDが分岐しない旨を示す場合を示す。以下、図7が図6と異なる点を説明する。第2のセレクタ313は、スレッド調停回路311の制御により、基本的に第1のスレッド及び第2のスレッドを交互に選択する。時刻t2において、分岐命令AのTステージ302では、命令アドレスACが小規模履歴テーブル分岐方向予測テーブル502にヒットせず、分岐方向予測論理回路503は、分岐しない旨を示す分岐方向BDを出力する。スレッド選択情報SIは、スレッド調停回路311に入力される。スレッド選択情報SIは、分岐方向BD及びスレッド番号SNを含む。次に、時刻t3では、第2のセレクタ313は、スレッド調停回路311の制御により、分岐しない旨を示す分岐方向BDを基に、第1のスレッドの後続命令Bを選択し、後続命令BのAステージ301が実行される。後続命令Bは、時刻t4でTステージ302が実行され、時刻t5でMステージ303が実行され、時刻t6でBステージ304が実行される。次に、時刻t4では、第2のスレッドの命令YのAステージ301が実行される。具体的には、第2のセレクタ313は、スレッド調停回路311の制御により、分岐しない旨を示す分岐方向BDを基に、第2のスレッドの命令Yを選択し、命令YのAステージ301を実行する。命令Yは、時刻t5でTステージ302が実行され、時刻t6でMステージ303が実行され、時刻t7でBステージ304が実行される。本実施形態によれば、分岐しない旨の分岐方向BDが予測された場合にも、効率的なパイプライン処理を行うことができる。以上のように、分岐予測回路204は、第2のセレクタ313により選択されたアドレスACを基に、選択されたアドレスACの命令が分岐命令である場合にその分岐命令が分岐するか否かを示す分岐方向BDを予測してTステージ第1のサイクルステージ302で出力し、そのTステージ第1のサイクルステージ302より後のMステージ第2のサイクルステージ303で上記の分岐命令の分岐先アドレスADを予測して出力する。分岐予測回路204は、過去の分岐命令の分岐履歴を記憶する大規模履歴テーブル第1の履歴テーブル321と、過去の分岐命令の分岐履歴を記憶する小規模履歴テーブル第2の履歴テーブル502とを有する。分岐予測回路204は、大規模履歴テーブル321を用いて分岐先アドレスADを予測し、小規模履歴テーブル502を用いて分岐方向BDを予測する。スレッド調停回路311は、分岐予測回路204により出力される分岐方向BDを基に第1のセレクタSL1~SLn及び第2のセレクタ313の選択を制御する。第1のセレクタSL1~SLnは、分岐予測回路204により出力される分岐先アドレスADを入力する。第1のセレクタSL1~SLnは、予測された分岐方向BDが分岐する旨を示す場合には分岐先アドレスADを選択し、予測された分岐方向BDが分岐しない旨を示す場合にはn個のスレッドの命令アドレスAA1~AAnを選択する。第2のセレクタ313は、予測された分岐方向BDが分岐する旨を示す場合図6には分岐命令Aが属する第1のスレッドとは異なる第2のスレッドの命令Yのアドレスを選択し、予測された分岐方向BDが分岐しない旨を示す場合図7には分岐命令Aが属する第1のスレッドと同じ第1のスレッドの後続命令Bのアドレスを選択する。図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に出力する。本実施形態では、Tステージ302で分岐方向BDの予測が完了し、Mステージ303で分岐先アドレスADの予測が完了し、効率的なパイライン処理を行うことができる。図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が分岐しない旨を示す。なお、分岐予測回路204は、分岐命令に限らず他の命令も予測対象とするとことができる。その場合、分岐予測回路204は、命令が分岐命令であるかを含めて予測し、命令が分岐命令であるかどうかは後段の命令デコーダ207で確定する。高遅延の大規模履歴テーブル321の記憶素子は、例えば高密度素子のRAMランダムアクセスメモリ:RandomAccessMemoryである。低遅延の小規模履歴テーブル502の記憶素子は、大規模履歴テーブル321に対して、低遅延な素子を用いた記憶素子であれば良い。小規模履歴テーブル502の記憶素子は、例えばラッチ回路又はフリップフロップであるが、これらに限られない。低遅延な分岐方向予測回路501は、CAMContentAddressableMemoryによって構成しても良い。小規模履歴テーブル502は、ダイレクトマップであってもセットアソシアティブであってもフルアソシアティブであっても良い。エントリ数は、1エントリ以上あれば良い。小規模履歴テーブル502のインデックスのビット幅は問わない。インデックスは、命令アドレスの関数であれば良い。例えば、命令アドレスの任意のハッシュをインデックスとしても良い。タグAC1は、予測精度と引き換えに、ビット幅を減らしてもよい。また、分岐予測回路204は、低遅延な分岐方向予測回路501とは別に、予測精度の高い分岐方向予測回路を持っていても良い。図10は、図5の分岐方向予測回路501の他の構成例を示す図である。図10の分岐方向予測回路501は、図9の分岐方向予測回路501に対して、論理積回路903を削除したものである。以下、図10が図9と異なる点を説明する。小規模履歴テーブル502は、分岐方向BAを省略し、分岐すると予想される分岐命令のみに対応するエントリを記憶する。小規模履歴テーブル502は、インデックスAC2に対応するタグAC3を出力する。比較回路902は、タグAC1及びAC3を比較し、両者が一致するときには1の分岐方向BDを出力し、両者が不一致のときには0の分岐方向BDを出力する。図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を出力する。まず、図7のように分岐方向BDが分岐しない旨を示す場合を説明する。その場合、分岐方向BDは0であり、論理積回路1105は0を出力する。すると、排他的論理和回路1103は、インバータ1102の出力信号をそのまま出力する。例えば、フリップフロップ1101の出力信号が1の場合、インバータ1102は0の信号を出力し、排他的論理和回路1103は0のスレッド番号SNを第2のセレクタ313に出力する。第2のセレクタ313は、スレッド番号SNが0であるので、第1のスレッドのアドレスAB1を選択し、命令アドレスACとして出力する。次に、フリップフロップ1101は、排他的論理和回路1103から0のスレッド番号SNを入力し、0の信号を出力する。すると、インバータ1102は1の信号を出力し、排他的論理和回路1103は1のスレッド番号SNを第2のセレクタ313に出力する。第2のセレクタ313は、スレッド番号SNが1であるので、第2のスレッドのアドレスAB2を選択し、命令アドレスACとして出力する。以後、同様に、第2のセレクタ313は、第1のスレッドのアドレスAB1と第2のスレッドのアドレスAB2とを交互に選択して出力する。次に、図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が実行される。図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は、任意のスケジューリングポリシーによって、いずれかのスレッドを優先して選択するように制御してもよい。また、命令フェッチ部203と命令デコーダ207との間には、命令バッファ206があってもなくても良い。命令フェッチ部203は、パイプライン化され、複数スレッドに対しサイクル粒度の時分割で、命令コードと分岐予測回路204により命令フェッチ制御を行う装置であれば良い。命令フェッチ部203は、同一スレッドの複数命令を同一サイクルに同時にフェッチするものであっても良い。また、パイプライン段数は問わず、分岐予測レイテンシも問わない。パイプラインの構成方式は、同期、非同期を問わず、ウェーブパイプラインを構成してもよい。また、1コアあたり複数の命令フェッチ部203を持つ演算処理装置であっても良い。すなわち、命令フェッチ部203より後段の回路を、他の命令フェッチ部203と共用しても良い。言い換えると、複数の命令フェッチ部203と合わせて全体で、同一サイクルで複数スレッドに対する命令フェッチ制御を構成してもよい。また、ハードウエアスレッド数は2スレッド又はそれ以上であってもよい。基本とするスレッドスケジューリング方式は問わず、ラウンドロビン方式以外のスケジューリング方式であっても、命令フェッチに先行して分岐方向を予測することで、不要な命令フェッチを避けることができる。また、演算処理装置101が採用する命令セットアーキテクチャは問わない。RISC縮小命令セットコンピュータ:ReducedInstructionSetComputerであってもCISC複合命令セットコンピュータ:ComplexInstructionSetComputerであってもVLIW超長命令語:VeryLongInstructionWordであっても良い。また、命令デコーダ207の形式は、問わず、順序制御又はスーパースカラであっても、VLIWであっても良く、静的動的なコード変換を行ってもよい。また、命令実行部の形態は問わない。命令実行部は、単一サイクル実行であっても、パイプライン制御であっても、順序制御であっても良く、スーパースカラ実行であっても良く、アウトオブオーダ実行であってもインオーダ実行であってもよい。演算器制御は、SIMDSingleInstructionMultipleData型であってもよく、プロセッサコア外の演算資源を制御する形態であってもよい。また、命令完了形式は、問わず、投機的実行や正確な割り込みを実現していてもしていなくてもよい。以上のように、本実施形態によれば、分岐先アドレスADの予測に先行して分岐方向BDを予測することにより、効率的なスレッド選択が可能になり、処理速度を向上させることができる。なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。