(57)【特許請求の範囲】
【請求項１】
分岐予測のための信頼性閾値ベースの対抗パス実行のためのコンピュータ・システムであって、前記システムは、
第１のスレッドの実行中に遭遇した第１の分岐命令について、分岐予測が、プライマリ・パス及び対抗パスを示すかを判定することと、
前記第１のスレッドにより前記プライマリ・パスを実行することと、
前記分岐予測の信頼性を判定することと、
前記分岐予測の前記信頼性を信頼性閾値と比較することと、
前記分岐予測の前記信頼性が前記信頼性閾値を下回ることに基づいて、前記第１の分岐命令の前記対抗パスを実行するため前記第１のスレッドと並列に実行される第２のスレッドを開始することと、
を実行するプロセッサを含むシステム。
【請求項２】
前記プライマリ・パス及び前記対抗パスのうちの一方が前記第１の分岐命令の正解パスを含むか否かに関し、前記第１の分岐命令の分岐決定を判定することと、
前記第１の分岐命令の前記分岐決定が、前記対抗パスが前記第１の分岐命令の正解パスであると示すことに基づいて、前記第１のスレッドをアボートすることと、
前記第１の分岐命令の前記分岐決定が、前記プライマリ・パスが前記第１の分岐命令の正解パスであると示すことに基づいて、前記第２のスレッドをアボートすることと、
をさらに含む、請求項１に記載のコンピュータ・システム。
【請求項３】
前記第２のスレッドは、前記プロセッサのトランザクション・メモリ内で実行されるトランザクションとして開始され、
前記第１の分岐命令の前記分岐決定が、前記対抗パスが前記第１の分岐命令の前記正解パスであると示すことに基づいて、前記第２のスレッドに対応する前記トランザクションを終了し、コミットすることと、
前記第１の分岐命令の前記分岐決定が、前記プライマリ・パスが前記第１の分岐命令の前記正解パスであると示すことに基づいて、前記第２のスレッドに対応する前記トランザクションをロール・バックすることと、
をさらに含む、請求項２に記載のコンピュータ・システム。
【請求項４】
前記プロセッサは、同時マルチスレッド動作するＳＭＴプロセッサを含み、付加的に、前記プロセッサによって現在処理されているスレッド総数が前記ＳＭＴプロセッサの最大スレッド数を下回ることに基づき、前記第２のスレッドを開始する、請求項１に記載のコンピュータ・システム。
【請求項５】
前記信頼性閾値は、前記プロセッサによって現在処理されている前記スレッド総数に基づいて変化する、請求項４に記載のコンピュータ・システム。
【請求項６】
前記プロセッサによって現在処理されている前記スレッド総数が、前記プロセッサの前記最大スレッド数に等しいことに基づいて、
第２の分岐命令の対抗パスに対応する、前記プロセッサ内で現在実行されている第３のスレッドと関連付けられた分岐予測の信頼性を判定することと、
前記第２の分岐命令と関連付けられた前記信頼性を、前記第１の分岐命令と関連付けられた前記信頼性と比較することと、
前記第２の分岐命令と関連付けられた前記信頼性が前記第１の分岐命令と関連付けられた前記信頼性を下回ることに基づいて、前記第３のスレッドをアボートし、前記第１の分岐命令の前記対抗パスを実行する前記第２のスレッドを開始することと、
をさらに含む、請求項４に記載のコンピュータ・システム。
【請求項７】
前記第１の分岐命令についての前記分岐予測は、前記プロセッサの分岐成立バッファ／分岐履歴テーブル（ＢＴＢ／ＢＨＴ）における前記第１の分岐命令に対応するエントリ内の飽和予測カウンタに基づいて判定され、前記分岐予測の前記信頼性は、前記第１の分岐命令に対応する前記エントリ内の正解カウンタ及び不正解カウンタに基づいて判定される、請求項１に記載のコンピュータ・システム。
【請求項８】
前記分岐予測の前記信頼性は、前記正解カウンタの値を、前記正解カウンタの値と前記不正解カウンタの値の和で除算したものに等しい、請求項７に記載のコンピュータ・システム。
【請求項９】
前記第１の分岐命令の分岐決定を判定することと、
前記第１の分岐命令の前記分岐決定が、前記対抗パスが前記第１の分岐命令の正解パスであると示すことに基づいて、前記第１の分岐命令に対応する前記エントリ内の前記不正解カウンタをインクリメントすることと、
前記第１の分岐命令の前記分岐決定が、前記プライマリ・パスが前記第１の分岐命令の正解パスであると示すことに基づいて、前記第１の分岐命令に対応する前記エントリ内の前記正解カウンタをインクリメントすることと、
をさらに含む、請求項７に記載のコンピュータ・システム。
【請求項１０】
前記第１のスレッドの実行の優先順位が前記第２のスレッドの実行の優先順位より高く、前記第１のスレッドの実行の前記優先順位及び前記第２のスレッドの実行の前記優先順位は、前記判定された信頼性に基づいてさらに判定される、請求項１に記載のコンピュータ・システム。
【請求項１１】
分岐予測のための信頼性閾値ベースの対抗パス実行のためのコンピュータ実装方法であって、前記方法は、
コンピュータのプロセッサにより、第１のスレッドの実行中に遭遇した第１の分岐命令について、分岐予測が、プライマリ・パス及び対抗パスを示すかを、判定することと、
前記第１のスレッドにより前記プライマリ・パスを実行することと、
前記分岐予測の信頼性を判定することと、
前記分岐予測の前記信頼性を信頼性閾値と比較することと、
前記分岐予測の前記信頼性が前記信頼性閾値を下回ることに基づいて、前記第１の分岐命令の前記対抗パスを実行し、前記第１のスレッドと並列に実行される第２のスレッドを開始することと、
を含む、方法。
【請求項１２】
前記方法は、
前記プライマリ・パス及び前記対抗パスのうちの一方が前記第１の分岐命令の正解パスを含むかどうかに関して前記第１の分岐命令の分岐決定を判定することと、
前記第１の分岐命令の前記分岐決定が、前記対抗パスが前記第１の分岐命令の正解パスであると示すことに基づいて、前記第１のスレッドをアボートすることと、
前記第１の分岐命令の前記分岐決定が、前記プライマリ・パスが前記第１の分岐命令の正解パスであると示すことに基づいて、前記第２のスレッドをアボートすることと、
をさらに含む、請求項１１に記載の方法。
【請求項１３】
分岐予測のための信頼性閾値ベースの対抗パス実行を実施するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
プロセッサに対し、
第１のスレッドの実行中に遭遇した第１の分岐命令について、分岐予測が、プライマリ・パス及び対抗パスを示すかを判定することと、
前記第１のスレッドにより前記プライマリ・パスを実行することと、
前記分岐予測の信頼性を判定することと、
前記分岐予測の前記信頼性を信頼性閾値と比較することと、
前記分岐予測の前記信頼性が前記信頼性閾値を下回ることに基づいて、前記第１の分岐命令の前記対抗パスを実行し、前記第１のスレッドと並列して実行される第２のスレッドを開始することと、
を含む、コンピュータ・プログラム。
【請求項１４】
前記第１の分岐命令の分岐決定が、前記プライマリ・パス及び前記対抗パスのうちの一方が前記第１の分岐命令の正解パスを含むか否かを判定することと、
前記第１の分岐命令の前記分岐決定が、前記対抗パスが前記第１の分岐命令の正解パスであると示すことに基づいて、前記第１のスレッドをアボートすることと、
前記第１の分岐命令の前記分岐決定が、前記プライマリ・パスが前記第１の分岐命令の正解パスであると示すことに基づいて、前記第２のスレッドをアボートすることと、
をさらに含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１５】
前記第２のスレッドは、前記プロセッサのトランザクション・メモリ内で実行されるトランザクションとして開始され、
前記第１の分岐命令の前記分岐決定が、前記対抗パスが前記第１の分岐命令の前記正解パスであると示すことに基づいて、前記第２のスレッドに対応する前記トランザクションを終了し、コミットすることと、
前記第１の分岐命令の前記分岐決定が、前記プライマリ・パスが前記第１の分岐命令の前記正解パスであると示すことに基づいて、前記第２のスレッドに対応する前記トランザクションをロール・バックすることと、
をさらに含む、請求項１４に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してコンピュータ・プロセッサにおける分岐予測に関し、より詳細には、分岐予測のための信頼性閾値ベースの対抗パス実行に関する。
【背景技術】
【０００２】
コンピュータ・システム内のプロセッサは、一連の小ステップの連鎖又は操作で命令を実行することによって命令を処理することができる。場合によっては、プロセッサによって処理される命令の数を増やすために、従って、プロセッサの速度を上げるために、プロセッサをパイプライン化することができる。パイプライン化とは、プロセッサ内に、別個のステージ（段、stage）を設け、各々のステージが、命令を実行するのに必要な小ステップのうちの１つ又は複数を行なうことを言う。パイプラインにおいて命令を実行することの一例として、第１の命令を受信したとき、第１のパイプライン・ステージは、命令の小部分（small part）を処理することができる。第１のパイプライン・ステージが命令の小部分の処理を完了すると、第２のパイプライン・ステージは、第１の命令の別の小部分の処理を開始することができ、その間に、第１のパイプライン・ステージは、第２の命令の小部分を受信し、その処理を開始することができる。従って、プロセッサは、２つ又はそれより多い命令を同時に並列に処理することができる。
【０００３】
コンピュータ・プログラムは、分岐命令を含むことができ、この分岐命令により、分岐命令によって定められた条件が満たされた場合に、コンピュータ・プログラムが１つの命令からターゲット命令に分岐する（これにより、もしあれば順次命令がスキップされる）。条件が満たされない場合には、ターゲット命令に分岐することなく、分岐命令の後の次の順次命令を実行することができる。典型的には、分岐命令が実行され、その条件がテストされるまで、条件のテストの結果は未知である。従って、条件がテストされるまで、分岐命令後に実行される正しい次の命令を知ることはできない。
【０００４】
命令を実行するためにパイプラインが用いられる場合、分岐命令がパイプラインの幾つかのステージを通過した後、分岐決定（branch resolution）まで、分岐命令の結果を知ることができない。従って、分岐命令が分岐条件の結果を判定するのに必要なステージを通過するまで、分岐命令後に実行される正しい次の命令を知ることができない。場合によっては、分岐決定まで、パイプラインにおける命令の実行をストールすることができる（例えば、命令を実行するために、分岐命令に先行するパイプライン・ステージを用いることはできない）。パイプラインをストールする場合、同数の命令を並列に実行するために、パイプラインは用いられておらず、プロセッサ全体の効率が低下する。
【０００５】
他の場合においては、プロセッサの効率を改善するために、分岐予測を用いて分岐命令の結果を予測することができる。例えば、分岐命令に遭遇すると、プロセッサは、条件の結果が分かった後に、どの命令又はパスが実行されるかを予測することができる。次に、分岐命令の発行時にパイプラインをストールする代わりに、プロセッサは、予測される次の命令から始まる命令の発行を続けることができる。分岐命令の予測パス（predicted path）は、プライマリ・パス（primary path）と呼ぶことができ、非予測パス（non-predicted path)は、対抗パス（opposing path）と呼ぶことができる。
【０００６】
しかしながら、場合によっては、分岐予測が正しくないことがある（例えば、プロセッサは、分岐命令の１つの結果を予測するが、分岐決定時に、反対の結果がもたらされることがある）。分岐命令の結果が誤って予測された場合、分岐予測に基づいてパイプラインに発行された予測命令をパイプラインから除去して、チェックポイントでチェックされる予定だった、これらの命令の効果を取り消すことができる。これは、パイプラインのフラッシュと呼ばれる。次いで、パイプラインをフラッシュした後、分岐命令についての、対抗パスに対応する正しい次の命令をパイプラインに発行し、命令の実行を続行することができる。分岐命令の結果が誤って予測され、プライマリ・パスに対応する誤って予測された命令のグループがパイプラインからフラッシュされ、これによりパイプラインによって行われた前の作業が取り消された場合、プロセッサの効率が悪化することがある。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
分岐予測のための信頼性閾値ベースの対抗パス実行のためのコンピュータ・システム、コンピュータ実装方法及びコンピュータ・プログラム製品を提供する。
【課題を解決するための手段】
【０００８】
実施形態は、分岐予測のための信頼性閾値ベースの対抗パス実行のためのシステム、方法、及びコンピュータ・プログラム製品を含む。１つの態様は、第１のスレッドの実行中に遭遇した第１の分岐命令についての分岐予測を判定することを含み、ここで、分岐予測は第１の分岐命令についてのプライマリ・パス及び対抗パスを示す。別の態様は、第１のスレッドにより、プライマリ・パスを実行することを含む。別の態様は、分岐予測の信頼性を判定することと、分岐予測の信頼性を信頼性閾値と比較することを含む。さらに別の態様は、分岐予測の信頼性が信頼性閾値を下回ることに基づいて、第１の分岐命令の対抗パスを実行する第２のスレッドを開始することを含み、ここで、第２のスレッドは第１のスレッドと並列して実行される。
【０００９】
実施形態と見なされる主題は、本明細書の最後にある特許請求の範囲において具体的に示され、明確に特許請求される。実施形態の上記及び他の特徴、並びに利点は、添付図面と併せて用いられる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１０】
【図１】１つの実施形態による、分岐予測のための信頼性閾値ベースの対抗パス実行のためのコンピュータ・システムを示す。
【図２】１つの実施形態によるパイプラインを示す。
【図３】１つの実施形態による分岐ターゲット・バッファ／分岐履歴テーブルを示す。
【図４】１つの実施形態による、分岐ターゲット・バッファ／分岐履歴テーブルについてのエントリを示す。
【図５】１つの実施形態による、分岐予測のための信頼性閾値ベースの対抗パス実行のためのプロセス・フローを示す。
【図６】１つの実施形態による、分岐予測のための信頼性閾値ベースの対抗パス実行のためのプロセス・フローを示す。
【図７】１つの実施形態による、分岐予測のための信頼性閾値ベースの対抗パス実行の実行を示す。
【図８】１つの実施形態によるコンピュータ・プログラム製品を示す。
【発明を実施するための形態】
【００１１】
分岐予測のための信頼性閾値ベースの対抗パス実行のためのシステム及び方法の実施形態が提供され、例示的な実施形態が以下に詳細に論じられる。分岐命令は、高信頼性又は低信頼性で予測することができる。信頼性のレベルは、プロセッサにおいて定められた信頼性閾値に基づいて判定することができる。低信頼性で予測された分岐命令については、予測パス（即ち、プライマリ・パス）及び非予測パス（即ち、対抗パス）の両方を、その分岐命令を含むプログラムに対応する２つの別個のスレッドとして並列して実行することができる。分岐命令の条件の決定時に正解パス（correct path）が判定されると、正解パスに対応するスレッドを、プログラムのための主スレッドとして実行し続けることができ、一方、不正解パス（incorrect path）に対応するスレッドをアボートすることができる。対抗パス・スレッドが正解パスであると判定された場合、アボートされたプライマリ・パス・スレッドに代わって、対抗パス・スレッドがプログラムのための主スレッドとなる。各分岐命令に対して、正しい及び誤った分岐予測を追跡するカウンタを分岐ターゲット・バッファ／分岐履歴テーブル（ＢＴＢ／ＢＨＴ）内に保持して、予測信頼性の相対的に正確な判定を可能にすることができる。
【００１２】
プロセッサは、複数のスレッドを並列実行することができる同時マルチスレッド（ＳＭＴ）プロセッサを含むことができる。ＳＭＴプロセッサは、ＳＭＴプロセッサにより一度に処理することができる設定された最大スレッド数を有することができる。プロセッサは、トランザクション・メモリ・リソースを付加的に含むことができる。トランザクション・メモリは、１組の命令をトランザクションとして定めることを可能にし、トランザクションの実行の結果を、プロセッサのキャッシュ・ストレージの代わりに、トランザクション・メモリ内に格納することができる。トランザクションがアボートされた場合、プロセッサは、トランザクションの結果を無効にし、トランザクション・メモリ内に残すことによって、トランザクションを含む命令の組をトランザクションの開始まで戻すことができる。トランザクションが成功裡に完了した場合、トランザクションの結果をコミットすることができる、即ち、トランザクション・メモリからキャッシュ・ストレージ内に転送することができる。分岐命令の対抗パスに対応するスレッドは、トランザクション・メモリ・リソースを用いて、トランザクションとして実行することができる。従って、分岐決定時に対抗パスに対応するスレッドが不正解パスであると判定された場合、対抗パス・スレッドがアボートされるときに、対抗パス・スレッドの結果を戻すことができる。一方、分岐決定時に対抗パス・スレッドが正解パスであると判定された場合、トランザクションは終了し、対抗パス・スレッドによって実施された操作は、トランザクション・メモリからキャッシュ・ストレージ内にコミットすることができる。
【００１３】
図１は、分岐予測のための信頼性閾値ベースの対抗パス実行のためのコンピューティング・システム１００の例証的な実施形態を示す。コンピューティング・システム１００は、パイプライン１０２を有するプロセッサ１０１を含む。プロセッサ１０１は、コンピューティング・システム１００の主メモリ１０８と通信を行い、アプリケーション１０９などのコンピュータ・プログラムの実行中に発行された命令は、パイプライン１０２によって処理される。プロセッサ１０１は、ＳＭＴリソース１０３を用いて同時に複数のスレッドを並列実行することができるＳＭＴプロセッサである。プロセッサ１０１は、トランザクション・メモリ１０４を付加的に含む。トランザクションとして定められた命令の組について、トランザクションがコミットされるまで、トランザクションによって実施される全ての操作の結果をトランザクション・メモリ１０４内に格納し、コミット時に、トランザクションの結果をトランザクション・メモリ１０４からキャッシュ・ストレージ１０７内に転送することができる。キャッシュ・ストレージ１０７は、これらに限定されるものではないが、命令キャッシュ及びデータ・キャッシュを含む任意の適切な数及びタイプのキャッシュを含むことができる。分岐予測は分岐予測論理１０５によって処理される。ＢＴＢ／ＢＨＴ  １０６は、分岐予測に用いられる分岐命令アドレスに対応するエントリを保持し、図３及び図４に関して以下により詳細に論じられる。分岐予測論理１０５はまた、ＢＴＢ／ＢＨＴ  １０６内の情報に基づいてなされた分岐予測の信頼性に基づいて、分岐命令の対抗パスについてのスレッドを開始するかどうかを判断する。この判断は、分岐予測論理１０５において予め定められた信頼性閾値と、現在ＳＭＴリソース１０３によって処理されているスレッド数とに基づいて行うことができる。幾つかの実施形態においては、対抗パス・スレッドを開始するかどうかを判断するために分岐予測論理１０５により用いられる信頼性閾値が、可変の信頼性閾値を含むことができ、こうした実施形態において、信頼性閾値は、現在ＳＭＴリソース１０３によって処理されている並列スレッドの数に基づいて変化し得る。例えば、現在プライマリ・スレッドだけが実行されている場合、信頼性閾値は比較的低くすることができ、付加的な対抗スレッドが実行を開始すると、信頼性閾値を増大させることができる。付加的に、幾つかの実施形態において、実行中、スレッドは、スレッドと関連付けられた予測信頼性、及びスレッドがプライマリ・スレッドであるか又は対抗スレッドであるかに基づいて、プロセッサ１０１のリソースにより高い優先順位でアクセスすることができる。分岐予測論理１０５は付加的に、分岐決定時に不正であると判定されたスレッドのアボートを開始することができる。
【００１４】
図２は、図１のパイプライン１０２を含むことができる、複数のステージ２０１−２０８を有するパイプライン２００の例証的な実施形態を示す。命令は、パイプライン２００を通って、フェッチ・ステージ２０１からライトバック（write-back）ステージ２０８へと進む。フェッチ、デコード、及びディスパッチ・ステージ２０１−２０３の間、命令は、イン・オーダー式（in-order）に処理される。発行／実行ステージ２０４の間、命令の実行に必要なデータが利用可能になると、命令は、アウト・オブ・オーダー式（out-of-order）に実行することができる。次に、命令は、リオーダ（reorder）ステージ２０５において順序変更され、完了、チェックポイント及びライトバック・ステージ２０６−２０８の間、イン・オーダー式に実行される。種々の実施形態において、分岐命令の分岐予測は、パイプラインのフロントエンドで、例えばフェッチ・ステージ２０１、デコード・ステージ２０２の間又はより早くに行うことができ、分岐命令の分岐決定は、発行／実行ステージ２０４の間に行うことができる。チェックポイント・ステージ２０７において、命令の実行中に、エラー（例えば、トランジスタが予期しないビット反転（bit flip）に直面したなど）が発生したかどうかを判断する。エラーが発生しなかった場合、ライトバック・ステージ２０８において、命令の結果をプロセッサのキャッシュ・ストレージ１０７内に書き込むことができる。図２は、例示のみを目的として示され、種々の実施形態において、パイプラインは、任意の適切な数のステージを有することができる。
【００１５】
図３は、図１のＢＴＢ／ＢＨＴ  １０６および関連した論理を含むことができる、ＢＴＢ／ＢＨＴ  ３０２を含むシステム３００の１つの実施形態を示す。図３に示されるＢＴＢ／ＢＨＴ  ３０２は、フルアソシアティブ（fully associative）式ＢＴＢ／ＢＨＴを含む。分岐命令アドレスを含む検索アドレスが、ＢＴＢ／ＢＨＴ  ３０２により、検索アドレス入力３０１上で分岐予測論理１０５から受信され、エントリ３０３Ａ−３０３Ｎのいずれかが、検索アドレス入力３０１上で受信した検索アドレスに対応するかどうかが判断される。検索アドレスに一致する、例えばエントリ３０３Ａなどのエントリが、ＢＴＢ／ＢＨＴ  ３０２内に存在すると判断された場合、ヒット論理３０４は、エントリ３０３Ａからのターゲット・アドレス及び予測データを判断し、これらをターゲット・アドレス及び予測出力３０５上で分岐予測論理１０５に出力する。予測データは、分岐方向予測、ターゲット・アドレス予測、及び信頼性データを含むことができ、図４に関して以下により詳細に論じられる。図３は例示のみを目的として示され、ＢＴＢ／ＢＨＴは、任意の適切な数のエントリを含むことができ、種々の実施形態において、エントリを編成して２つ又はそれより多い合同クラスにすることができる。
【００１６】
図４は、図３に示されたＢＴＢ／ＢＨＴエントリ３０３Ａ−３０３Ｎの各々を含むことができる、ＢＴＢ／ＢＨＴエントリ４００の一実施形態を示す。ＢＴＢ／ＢＨＴエントリ４００は、分岐命令の命令アドレスに対応するタグ４０１を含み、タグ４０１が検索アドレスに一致した場合、エントリ３０３Ａ−３０３Ｎのエントリは、検索アドレス入力３０１上で受信した特定の検索アドレスに一致すると判定される。ＢＴＢ／ＢＨＴエントリ４００は、ターゲットのアドレス、即ち、エントリ４００に対応する成立した分岐命令の後に実行される次の命令のアドレスを含むターゲット・アドレス４０２をさらに含む。飽和予測カウンタ４０３は、ターゲット・アドレス４０２に対応する命令が、予測パス、即ちプライマリ・パスであるか、又は非予測パス、即ち対抗パスであるかを示す。幾つかの実施形態において、飽和予測カウンタ４０３は、２ビットの飽和カウンタを含むことができ、飽和予測カウンタ４０３は、分岐予測に用いることができる任意の適切なカウンタを含むことができ、かつ、任意の適切な方法でインクリメント及びデクリメントすることができる。
【００１７】
プロセッサ１０１における付加的なスレッドの実行のためのＳＭＴリソース１０３は限られているため、信頼性閾値を下回る信頼性を有する分岐命令のみが、新しい対抗パス・スレッドを開始することができる。正解（correct）カウンタ４０４及び不正解（incorrect）カウンタ４０５は、エントリ４００に対応する分岐命令についての正しい予測及び正しくない予測の数を追跡し、飽和予測カウンタ４０３によって与えられる分岐予測の信頼性を判定するのに用いられる。飽和予測カウンタ４０３によって与えられる予測の信頼性は、正解カウンタ４０４の値を、正解カウンタ４０４の値と不正解カウンタ４０５の値の和で除算した値により与えることができる。エントリ４００に対応する分岐命令の分岐決定時に、分岐方向が、飽和予測カウンタ４０３により正しく予測されたと判断された場合、正解カウンタ４０４がインクリメントされ、分岐方向が正しくなく予測されたと判断された場合、不正解カウンタ４０５がインクリメントされる。正解カウンタ４０４又は不正解カウンタ４０５のインクリメント、及び、飽和予測カウンタ４０３のインクリメント／デクリメントは、エントリ４００に対応する分岐命令の分岐決定後に任意の適切な時点で行うことができる。幾つかの実施形態において、正解カウンタ４０４及び不正解カウンタ４０５は各々、４ビットのカウンタを含むことができ、正解／不正解カウンタ４０４／４０５の一方が飽和した（即ち、最大カウンタ値に達した）場合、両方のカウンタ４０４／４０５を２で除算して、カウンタ値を右に１ビットだけシフトさせ、最上位ビットであったビットを保持することができる。
【００１８】
図５−図６は、分岐予測のための信頼性閾値ベースの対抗パス実行のための方法５００の実施形態のフローチャートを示す。方法５００は、図１−図４を参照して論じられる。最初に、図５のブロック５０１において、コンピュータ・プログラムに対応する主スレッドの実行中、分岐命令に遭遇し、分岐命令の命令アドレスに対応するタグ４０１を有するエントリを求めて、ＢＴＢ／ＢＨＴ  １０６／３０２を検索する。ＢＴＢ／ＢＨＴ  １０６／３０２において対応するエントリ（例えば、エントリ３０３Ａ／４００）が決定されると、次に、ブロック５０２において、決定されたエントリ３０３Ａ／４００内の飽和予測カウンタ４０３に基づいて、分岐命令についての分岐予測が行われる。飽和予測カウンタ４０３は、ターゲット・アドレス４０２に対応する命令が、予測される次の命令であるか（即ち、分岐成立したか）どうかを示す。次に、ブロック５０３において、分岐予測論理１０５により、正解カウンタ４０４及び不正解カウンタ４０５に基づいて、ブロック５０２で行われた分岐予測についての信頼性を判定する。信頼性は、正解カウンタ４０４の値を、正解カウンタ４０４の値と不正解カウンタ４０５の値の和で除算した値と等しくすることができる。次に、フローはブロック５０４に進み、そこで、分岐予測論理１０５により、ブロック５０３で判定した信頼性を信頼性閾値と比較する。種々の実施形態においては、信頼性閾値は、任意の適切な値を有することができ、幾つかの実施形態においては、可変の信頼性閾値を含むことができる。こうした実施形態において、信頼性閾値は、現在ＳＭＴリソース１０３によって処理されている並列スレッドの数に基づいて変化し得る。
【００１９】
ブロック５０４において、判定された信頼性が信頼性閾値を上回ると判断された場合、フローはブロック５０５に進み、そこで、主スレッドは、ブロック５０２において行われた予測によって示されるように、プライマリ・パスを辿ってコンピュータ・プログラムの実行を続行する。プライマリ・パス・スレッドは、ブロック５０２において飽和予測カウンタ４０３により与えられた分岐予測に応じて、コンピュータ・プログラム内のエントリ３０３Ａ／４００に対応する不成立の（not taken）分岐命令に続く次の命令に相当するか、又は、エントリ３０３Ａ／４００内で定められたターゲット・アドレス４０２に対応する命令への成立した(taken)分岐を経由することができる。次いで、ブロック５０５において開始されたプライマリ・パス・スレッドが、ブロック５０６における分岐決定に到達すると、ブロック５０２において行われた予測が正しかったかどうかを判定し、分岐決定に基づいて、分岐命令に対応するＢＴＢ／ＢＨＴエントリ３０３Ａ／４００内のカウンタを更新する。予測が正しい場合、分岐命令に対応するＢＴＢ／ＢＨＴエントリ３０３Ａ／４００内の正解カウンタ４０４がインクリメントされる。予測が正しくない場合、パイプライン１０２がフラッシュされ、分岐命令に対応するＢＴＢ／ＢＨＴエントリ３０３Ａ／４００内の不正解カウンタ４０５がインクリメントされる。飽和予測カウンタ４０３もまた、正しい又は正しくない分岐予測を反映するように更新される。
【００２０】
しかしながら、ブロック５０４において、分岐予測の信頼性が信頼性閾値を下回ると判定された場合、フローはブロック５０４からブロック５０７に進み、そこで主スレッドは、プライマリ・パスに対応する実行を続行し、分岐予測論理１０５により、非予測（即ち、対抗）パスのための新しい並列スレッドが開始される。対抗パス・スレッドは、ブロック５０２において飽和予測カウンタ４０３により与えられる分岐予測に応じて、コンピュータ・プログラム内のエントリ３０３Ａ／４００に対応する分岐命令に続く次の順次命令に対応することができ、又は、エントリ３０３Ａ／４００内で定められたターゲット・アドレス４０２に対応する命令に対応することができる。対抗パス・スレッドは、ＳＭＴリソース１０３により処理される。対抗パス・スレッドに対応する命令の組は、トランザクション・メモリ１０４を用いてトランザクションとして定めることができるので、対抗パス・スレッドにより完了された操作の結果は、分岐の完了までトランザクション・メモリ１０４内に格納される。
【００２１】
ＳＭＴリソース１０３には一度に処理することができる最大スレッド数がある場合があるので、ブロック５０７における対抗パス・スレッドの開始は、プロセッサ１０１内のＳＭＴリソース１０３によって現在処理されているスレッドの数に従うものとすることができる。プロセッサ１０１内で実行されているスレッドの数がこの最大数である場合、幾つかの実施形態においては、ブロック５０７において、対抗パス・スレッドが開始されないことがある。他の実施形態においては、対抗パス・スレッドについて、ブロック５０３で判断された信頼性を、現在ＳＭＴリソース１０３によって実行されている別の既存の対抗パス・スレッドの信頼性と比較することができ、現在の対抗パス・スレッドが既存の対抗パス・スレッドより低い信頼性を有する場合、既存の対抗パス・スレッドをアボートし、代わりに現在の対抗パス・スレッドを開始することができる。幾つかの実施形態では、プライマリ・パス・スレッドは、対抗パス・スレッドより高い優先順位を有することができる。幾つかの実施形態においては、ブロック５０３で判断された信頼性に基づいて、優先順位レベルを割り当てることもできる。
【００２２】
方法５００のブロック５０７から、フローは、図６のブロック５０８に進み、そこで、パイプライン１０２／２００においてＢＴＢ／ＢＨＴエントリ４００／３０３Ａに対応する分岐命令の分岐決定が行われ、分岐命令についての正解パスが判明する。次に、ブロック５０９において、ブロック５０８の分岐決定に基づいて、分岐命令についてブロック５０２で行われた分岐予測が正しいかどうかを判定する。ブロック５０９において、分岐予測が正しいと判定された場合、フローはブロック５１０に進み、そこで、分岐予測論理１０５により、対抗パス・スレッドがアボートされる。対抗パス・スレッドをアボートすることは、トランザクション・メモリ１０４により、対抗パス・スレッドに対応するトランザクションをロール・バックすること（rolling back）を含むことができる。プライマリ・パス・スレッドはコンピュータ・プログラムの実行を続行する。最後に、ブロック５１１において、分岐命令に対応するＢＴＢ／ＢＨＴエントリ３０３Ａ／４００内の正解カウンタ４０４がインクリメントされ、飽和予測カウンタ４０３もまた、正しい分岐予測を反映するように更新される。
【００２３】
しかしながら、ブロック５０８において、ブロック５０７の分岐決定に基づき、分岐命令についてブロック５０２で行われた分岐予測が正しくないと判定された場合、フローはブロック５０９からブロック５１２に進み、そこで、分岐予測論理１０５により、プライマリ・パス・スレッドをアボートする。幾つかの実施形態においては、プライマリ・パス・スレッドをアボートすることは、パイプライン１０１／２００内のプライマリ・パス・スレッドに対応するいずれかの命令をフラッシュすることを含むことができる。次に、ブロック５１３において、分岐命令に対応するＢＴＢ／ＢＨＴエントリ３０３Ａ／４００内の不正解カウンタ４０５がインクリメントされ、飽和予測カウンタ４０３もまた、正しい分岐予測を反映するように更新される。最後に、ブロック５１４において、対抗パス・スレッドに対応するトランザクションを終了し、トランザクション・メモリ１０４からキャッシュ・ストレージ１０７にコミットし、対抗パス・スレッドは、コンピュータ・プログラムのための主スレッドとして実行を続行する。分岐決定はアウト・オブ・オーダー式に行われ、完了はイン・オーダー式に行われるので、分岐がパイプライン１０２／２００内の完了ステージ２０６に到達した後、トランザクションをコミットすることができる。場合によっては、より古い分岐に対応する別のスレッドが、分岐予測を誤り、より新しい分岐が分岐決定に到達した後、より新しい分岐が完了に到達する前に、この新しい分岐をフラッシュ・アウトすることも可能である。
【００２４】
図５−図６の方法５００のブロック５１０及び５１２において実施されるように、スレッドをアボートすることにより、アボートされたスレッド専用であったＳＭＴリソース１０３の一部分をフリー・プールに戻して、将来の低信頼性分岐予測のために対抗パス・スレッドの開始に用いられるようにすることが可能になる。プロセッサ１０１内のＳＭＴリソース１０３がサポートするスレッドの数に応じて、付加的な対抗パス・スレッドを、プライマリ・パス・スレッド又は対抗パス・スレッドの下のトランザクションとして開始することができる。プライマリ・パス・スレッド又は対抗パス・スレッド内で、信頼性閾度を下回る予測信頼性を有する分岐命令に遭遇した場合、図７に示されるように、ＳＭＴリソース１０３がサポートする最大スレッド数まで、付加的な対抗パス・スレッドを開始することができる。
【００２５】
図７は、分岐予測のための信頼性閾値ベースの対抗パス実行の一例を示す。図７の例は、４つの最大スレッド限度を有するＳＭＴリソースを有するプロセッサ上で実行される。図７に示されるように、プロセッサによるプログラムの実行中、所定の信頼性閾値を下回る信頼性を有する低信頼性の分岐６０１に遭遇する。分岐６０１が低信頼性のものであるとの判断により、対抗パス・スレッド６０３が、プライマリ・パス・レッド６０２と並列して開始される。プライマリ・パス・スレッド６０２は、低信頼性の分岐命令６１０についての予測パスを含み、対抗パス・スレッド６０３は、非予測パスを含む。対抗パス・スレッド６０３は、トランザクションとして開始することができる。プライマリ・パス・スレッド６０２は、低信頼性の分岐命令６０１を含むプログラムの主スレッドである。プライマリ・パス・スレッド６０２の実行中、信頼性閾値を上回る信頼性を有する高信頼性の分岐命令６０４に遭遇する。分岐６０４は高信頼性の分岐命令であるので、プライマリ・パス・スレッド６０２は、高信頼性の分岐６０４に遭遇した後、プライマリ・パス・スレッド６０５として実行を続行し、高信頼性の分岐６０４に関して、対抗パス・スレッドは開始されない。次に、プライマリ・パス・スレッド６０２の更なる実行中、別の低信頼性の分岐命令６０６に遭遇し、別のプライマリ−対抗パス・スレッド６０７を、プライマリ−プライマリ・パス・スレッド６０７と並列して開始させる。プライマリ−対抗パス・スレッド６０８もまた、トランザクションとして開始することができる。
【００２６】
プライマリ・パス・スレッド６０２と並列して行われる対抗パス・スレッド６０３の実行において、最初に、高信頼性の分岐命令６０９に遭遇すると、対抗パス・スレッド６０３は、高信頼性の分岐命令６０９の後、対抗パス・スレッド６１０として実行を続行し、付加的な対抗パス・スレッドは開始されない。次いで、対抗パス・スレッド６１０の実行中、低信頼性の分岐命令６１１に遭遇し、対抗−対抗パス・スレッド６１３を、対抗−プライマリ・パス・スレッド６１２と並列して開始させる。対抗−プライマリ・パス・スレッド６１２は、対抗−対抗パス・スレッド６１３に対してプライマリ・パスである。対抗−対抗パス・スレッド６１３も、トランザクションとして開始することができる。プライマリ−プライマリ・パス・スレッド６０７、プライマリ−対抗パス・スレッド６０８、対抗−プライマリ・パス・スレッド６１２、及び対抗−対抗パス・スレッド６１３は全て、プロセッサ内のＳＭＴリソースを用いて、並列して実行することができる。幾つかの実施形態においては、フェッチ・ステージ２０１、デコード・ステージ２０２、及び発行ステージ２０４を含むパイプライン１０２／２００のフロントエンドは、スレッド６０７−６０８及び６１２−６１３の全てに対して等しくすることができ、他の実施形態においては、特定のスレッドがプライマリ・スレッドであるかどうか及び／又はスレッドと関連付けられた信頼値に基づいて、スレッド６０７−６０８及び６１２−６１３の幾つかのスレッドに、パイプライン１０２／２００のリソースに対するより高い優先順位のアクセスを与えることができる。例えば、相対的に高い信頼性を有するプライマリ・スレッドは、対応するより高い優先順位を有することができる。
【００２７】
図７の例ではプロセッサ内のＳＭＴリソースは、４つの最大スレッド限度を有するので、これら４つのスレッドのうちの１つがアボートされるまで、付加的なスレッドを開始することはできない。プライマリ−プライマリ・パス・スレッド６０７及びプライマリ−対抗パス・スレッド６０８のうちの一方は、低信頼性の分岐命令６０６の分岐決定時にアボートされ、対抗−プライマリ・パス・スレッド６１２及び対抗−対抗パス・スレッド６１３のうちの一方は、低信頼性の分岐命令６１１の分岐決定時にアボートされる。プライマリ−プライマリ・パス・スレッド６０７及びプライマリ−対抗パス・スレッド６０８、又は、対抗−プライマリ・パス・スレッド６１２及び対抗−対抗パス・スレッド６１３は、低信頼性の分岐命令６０１の分岐決定時にアボートされる。
【００２８】
幾つかの実施形態において、プライマリ−プライマリ・パス・スレッド６０７、プライマリ−対抗パス・スレッド６０８、対抗−プライマリ・パス・スレッド６１２、及び対抗−対抗パス・スレッド６１３のいずれかの実行において、付加的な低信頼性の分岐命令に遭遇した場合、その付加的な低信頼性の分岐命令についての予測の信頼性を、低信頼性の分岐命令６０６及び６１１の信頼性と比較することができ、付加的な低信頼性の分岐命令が、低信頼性の分岐命令６０６及び６１１より低い信頼性を有する場合、プライマリ−対抗パス・スレッド６０８又は対抗−対抗パス・スレッド６１３をそれぞれアボートすることができ、アボートされたスレッドの代わりに、付加的な低信頼性の分岐命令についての対抗パスを開始することができる。
【００２９】
当業者であれば理解するように、本発明の１つ又は複数の態様は、システム、方法又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の１つ又は複数の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形態をとることができ、本明細書においては、これらは全て、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の１つ又は複数の態様は、媒体内に具体化されたコンピュータ可読プログラム・コードを有する、１つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形態をとることができる。
【００３０】
１つ又は複数のコンピュータ可読媒体のいずれかの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子、磁気、光学、電磁気、赤外線若しくは半導体のシステム、装置若しくはデバイス、又はこれらのいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例（非網羅的なリスト）として、以下のもの、即ち、１つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク型読み出し専用メモリ（ＣＤ−ＲＯＭ）、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈においては、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって又はそれらと関連して用いるためのプログラムを収容又は格納することが可能な、任意の有形媒体とすることができる。
【００３１】
ここで図８を参照すると、一例において、コンピュータ・プログラム７００は、例えば、１つ又は複数の実施形態を提供し、容易にするように、その上にコンピュータ可読プログラム・コード手段又は論理７０４を格納するための、有形及び／又は非一時的とすることができる１つ又は複数のコンピュータ可読ストレージ媒体７０２を含む。
【００３２】
プログラム・コードは、有形の媒体（これらに限定されるものではないが、電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープ等）上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。こうしたプログラム・コードは、コンパイラ、又は、例えば実行時に本発明の態様を実施する命令をアセンブルするためのアセンブラを用いて作成することができる。
【００３３】
技術的効果及び利点として、コンピューティング・システムにおけるプロセッサ効率の増大が挙げられる。
【００３４】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「１つの（a）」、「１つの（an）」及び「その（the）」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む（comprise）」及び／又は「含んでいる（comprising）」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び／又はコンポーネントの存在を指示するが、１つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び／又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
【００３５】
以下の特許請求の範囲における全ての手段又はステップと機能との組み合わせ（ミーンズ又はステップ・プラス・ファンクション）要素の対応する構造、材料、動作、及び均等物は、その機能を、明確に特許請求される他の特許請求された要素との組み合わせで実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。実施形態の説明は、例証及び説明を目的として提示されたものであり、網羅的であること又は実施形態を開示された形態に限定することを意図したものではない。当業者には、本発明の範囲から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、原理及び実際的用途を最も良く説明するために、そして、当業者が、企図した特定の用途に適した種々の修正を伴う実施形態を理解できるように、選択され、説明された。
【００３６】
実施形態の態様に関する操作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、ＳｍａｌｌＴａｌｋ、Ｃ＋＋等のようなオブジェクト指向型プログラミング言語、及び、「Ｃ」プログラミング言語、又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、１つ又は複数のプログラミング言語のいずれかの組み合わせで書くことができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、スタンドアロンのソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて）。
【００３７】
実施形態の態様は、実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又は概略図を参照して、上述される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するための手段を作り出すようにすることができる。
【００３８】
これらのコンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装する命令を含む製品を製造するようにすることもできる。
【００３９】
コンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにもすることもできる。
【００４０】
図面内のフローチャート及びブロック図は、種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された２つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び／又はフローチャート図の各ブロック、並びにブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
【符号の説明】
【００４１】
１００：コンピューティング・システム
１０１：プロセッサ
１０２、２００：パイプライン
１０３：ＳＭＴリソース
１０４：トランザクション・メモリ
１０５：分岐予測論理
１０６、３０２：ＢＴＢ／ＢＨＴ
１０７：キャッシュ・ストレージ
１０８：主メモリ
１０９：アプリケーション
２０１：フェッチ・ステージ
２０２：デコード・ステージ
２０３：ディスパッチ・ステージ
２０４：発行／実行ステージ
２０５：順序変更ステージ
２０６：完了ステージ
２０７：チェックポイント・ステージ
２０８：ライトバック・ステージ
３００：システム
３０１：検索アドレス入力
３０３Ａ−３０３Ｎ、４００：ＢＴＢ／ＢＨＴエントリ
３０４：ヒット論理
３０５：ターゲット・アドレス及び予測出力
４０１：タグ
４０２：ターゲット・アドレス
４０３：飽和予測カウンタ
４０４：正解カウンタ
４０５：不正解カウンタ
【図１】
0006304694.tif 000002
【図２】
0006304694.tif 000003
【図３】
0006304694.tif 000004
【図４】
0006304694.tif 000005
【図５】
0006304694.tif 000006
【図６】
0006304694.tif 000007
【図７】
0006304694.tif 000008
【図８】
0006304694.tif 000009