(57)【要約】【課題】キャッシュ・ミス・スレッドをバランシングする技術を提供する。【解決手段】共有ディスパッチ・パイプラインを有する同時マルチスレッド（ＳＭＴ）プロセッサは、キャッシュ・ミス・スレッドを検出する第１の回路を含む。第２の回路は、検出されたキャッシュ・ミスが発生した第１のキャッシュ階層レベルを決定する。第３の回路は、スレッドにおける次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよびスレッドにおける複数の追加グループ（Ｘ）を決定する。追加グループ（Ｘ）は、検出されたキャッシュ・ミスに基づいて動的に構成される。第４の回路は、スレッドにおける任意のグループが、決定されたＮＴＣグループおよび複数の追加グループ（Ｘ）よりも若いかどうかを決定し、キャッシュ・ミス・スレッドからすべての決定されたより若いグループをフラッシュする。【選択図】図８
2020510255.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュ・ミス・スレッドをバランシングする方法であって、
前記キャッシュ・ミス・スレッドのキャッシュ・ミスを検出することと、
前記検出されたキャッシュ・ミスが発生した第１のキャッシュ階層レベルを決定することと、
前記キャッシュ・ミス・スレッドにおける次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよび前記キャッシュ・ミス・スレッドにおける複数の追加グループ（Ｘ）を決定することであって、前記複数の追加グループ（Ｘ）は、前記検出されたキャッシュ・ミスに基づいて動的に構成される、前記決定することと、
前記キャッシュ・ミス・スレッドにおける任意のグループが、前記決定されたＮＴＣグループおよび前記複数の追加グループ（Ｘ）よりも若いかどうかを決定し、前記キャッシュ・ミス・スレッドからすべての前記決定されたより若いグループをフラッシュすることと、
を含む、キャッシュ・ミス・スレッドをバランシングする方法。
【請求項２】
前記複数の追加グループ（Ｘ）はデータ待ち時間に基づく、請求項１に記載の方法。
【請求項３】
前記データ待ち時間は、前記検出されたキャッシュ・ミスが発生した前記第１のキャッシュ階層レベルに基づく、請求項２に記載の方法。
【請求項４】
前記第１のキャッシュ階層レベルよりも高い第２のキャッシュ階層レベルを識別することと、
前記検出されたキャッシュ・ミスが前記第２のキャッシュ階層レベルからであることを決定することと、
前記第２のキャッシュ階層レベルに基づいて、前記ＮＴＣグループおよび前記複数の追加グループのサブセットを決定することと、
ＮＴＣグループおよび前記複数の追加グループの前記サブセットより若い、前記キャッシュ・ミス・スレッド内の少なくとも１つの追加のフラッシュされたグループをフラッシュすることと、
をさらに含む、請求項１に記載の方法。
【請求項５】
前記フラッシュは、有効フラッシュ・ポイントを検出した後に発生する、請求項１に記載の方法。
【請求項６】
前記より若いグループを決定する前に、前記有効フラッシュ・ポイントを検出することは、
前記ＮＴＣグループおよび前記複数の追加グループ（Ｘ）が有効フラッシュ・ポイントを構成するかどうかを決定することと、
前記ＮＴＣグループおよび前記複数の追加グループ（Ｘ）が無効フラッシュ・ポイントを定義する旨の決定に応答して、前記複数の追加グループ（Ｘ）を定義するより大きな値を探索することと、
を含む、請求項５に記載の方法。
【請求項７】
キャッシュ・ミス・スレッドを検出することは、保留中のキャッシュ・ミスを経験している第１のスレッドの第１のグループを検出することを含み、前記キャッシュ・ミス・スレッド内の次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよび複数の追加グループ（Ｘ）を決定することは、前記第１のスレッド内の次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよび前記第１のスレッド内の複数の追加グループ（Ｘ）を決定することを含み、前記キャッシュ・ミス・スレッドからすべての決定されたより若いグループをフラッシュすることは、少なくとも１つの空のグローバル完了テーブルのエントリ・フィールドを提供するように、前記第１のスレッド内の前記ＮＴＣグループおよび前記第１のスレッド内の複数の追加グループ（Ｘ）の後にディスパッチされる、前記第１のスレッドの少なくとも１つのグループを、前記グローバル完了テーブルからフラッシュすることを含む、グローバル完了テーブル上でキャッシュ・ミス・スレッド・バランスを実行するように動作可能な方法であって、前記方法は、前記少なくとも１つの空のグローバル完了テーブルのエントリ・フィールド内に、前記第１のスレッドとは異なる第２のスレッドの新規グループを記憶することをさらに含む、請求項１に記載の方法。
【請求項８】
前記第２のスレッドの前記新規グループは、前記第１のスレッドの前記第１のグループが前記保留中のキャッシュ・ミスを経験している間にディスパッチされる、請求項７に記載の方法。
【請求項９】
前記グローバル完了テーブル内に列挙された前記新規グループは、前記第１のスレッドの前記第１のグループが前記保留中のキャッシュ・ミスを経験している間に実行を完了する、請求項８に記載の方法。
【請求項１０】
前記第１のグループの新規グループは、前記第１のスレッドの前記第１のグループが前記保留中のキャッシュ・ミスを経験している間にディスパッチからブロックされる、請求項９に記載の方法。
【請求項１１】
前記ＮＴＣグループに関連付けられた前記複数の追加グループ（Ｘ）は、前記保留中のキャッシュ・ミスが存在するキャッシュ階層レベルに従って変動するデータ待ち時間に基づいており、前記データ待ち時間は、前記キャッシュ階層レベルからデータを戻すためにかかる時間量として定義される、請求項１０に記載の方法。
【請求項１２】
キャッシュ・ミス・スレッド・バランシングを実行するためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品は、具体化されたプログラム命令を有するコンピュータ可読記憶媒体を含み、前記プログラム命令は、
前記キャッシュ・ミス・スレッドのキャッシュ・ミスを検出することと、
前記検出されたキャッシュ・ミスが発生した第１のキャッシュ階層レベルを決定することと、
前記キャッシュ・ミス・スレッドにおける次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよび前記キャッシュ・ミス・スレッドにおける複数の追加グループ（Ｘ）を決定することであって、前記複数の追加グループ（Ｘ）は、前記検出されたキャッシュ・ミスに基づいて動的に構成される、前記決定することと、
前記スレッドにおける任意のグループが、前記決定されたＮＴＣグループおよび前記複数の追加グループ（Ｘ）よりも若いかどうかを決定し、前記キャッシュ・ミス・スレッドからすべての前記決定されたより若いグループをフラッシュすることと、
を実行するように、データベース処理システムを制御するために、電子コンピュータ・プロセッサによって実行可能である、
コンピュータ・プログラム製品。
【請求項１３】
前記複数の追加グループ（Ｘ）はデータ待ち時間に基づく、請求項１２に記載のコンピュータ・プログラム製品。
【請求項１４】
前記データ待ち時間は、前記検出されたキャッシュ・ミスが発生した前記キャッシュ階層レベルに基づく、請求項１３に記載のコンピュータ・プログラム製品。
【請求項１５】
前記第１のキャッシュ階層レベルよりも高い第２のキャッシュ階層レベルを識別することと、
前記検出されたキャッシュ・ミスが前記第２のキャッシュ階層レベルからであることを決定することと、
前記第２のキャッシュ階層レベルに基づいて、前記ＮＴＣグループおよび前記複数の追加グループのサブセットを決定することと、
ＮＴＣグループおよび前記複数の追加グループの前記サブセットより若い、前記キャッシュ・ミス・スレッド内の少なくとも１つの追加のフラッシュされたグループをフラッシュすることと、
をさらに含む、請求項１２に記載のコンピュータ・プログラム製品。
【請求項１６】
前記フラッシュは、有効フラッシュ・ポイントを検出した後に発生し、前記より若いグループを決定する前に、前記有効フラッシュ・ポイントを検出することは、
前記ＮＴＣグループおよび前記複数の追加グループ（Ｘ）が有効フラッシュ・ポイントを構成するかどうかを決定することと、
前記ＮＴＣグループおよび前記複数の追加グループ（Ｘ）が無効フラッシュ・ポイントを定義する旨の決定に応答して、前記複数の追加グループ（Ｘ）を定義するより大きな値を探索することと、
を含む、請求項１２に記載のコンピュータ・プログラム製品。
【請求項１７】
前記無効フラッシュ・ポイントを決定することに応答して、有効フラッシュ・ポイントが見つかるまで、前記ＮＴＣグループおよび前記複数の追加グループ（Ｘ）を増分することと、
前記増分されたＮＴＣグループおよび複数の追加グループ（Ｘ）が有効フラッシュ・ポイントであることを検出することに応答して、前記増分されたＮＴＣグループおよび複数の追加グループ（Ｘ）に基づいて、前記キャッシュ・ミスに含まれる前記キャッシュ・ミス・スレッドからすべての前記決定されたより若いグループをフラッシュすることと、
をさらに含む、請求項１６に記載のコンピュータ・プログラム製品。
【請求項１８】
キャッシュ・ミス・スレッドを検出する第１の回路と、
前記検出されたキャッシュ・ミスが発生した第１のキャッシュ階層レベルを決定する、第２の回路と、
前記スレッドにおける次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよび前記スレッドにおける複数の追加グループ（Ｘ）を決定する、第３の回路であって、前記複数の追加グループ（Ｘ）は、前記検出されたキャッシュ・ミスに基づいて動的に構成される、第３の回路と、
前記スレッドにおける任意のグループが、前記決定されたＮＴＣグループおよび前記複数の追加グループ（Ｘ）よりも若いかどうかを決定し、前記キャッシュ・ミス・スレッドからすべての前記決定されたより若いグループをフラッシュする、第４の回路と、
を含む、共有ディスパッチ・パイプラインを有する同時マルチスレッド（ＳＭＴ）プロセッサ。
【請求項１９】
前記複数の追加グループ（Ｘ）のサイズはデータ待ち時間に基づく、請求項１８に記載のＳＭＴプロセッサ。
【請求項２０】
前記データ待ち時間は、前記検出されたキャッシュ・ミスが発生した前記第１のキャッシュ階層レベルに基づく、請求項１９に記載のＳＭＴプロセッサ。
【請求項２１】
前記第２の回路は、前記第１のキャッシュ階層レベルよりも高い第２のキャッシュ階層レベルを識別し、前記ＳＭＴプロセッサは、
前記検出されたキャッシュ・ミスが前記第２のキャッシュ階層レベルからであることを決定する、第５の回路と、
前記第２のキャッシュ階層レベルに基づいて、前記ＮＴＣグループおよび前記複数の追加グループのサブセットを識別する、第６の回路と、
をさらに含み、
前記第４の回路は、前記ＮＴＣグループおよび前記複数の追加グループの前記サブセットより若い、前記キャッシュ・ミス・スレッド内の少なくとも１つの追加のフラッシュされたグループをフラッシュし、
前記第２のキャッシュ階層レベルは、前記ＮＴＣグループが、前記第２のキャッシュ階層レベルからデータが戻されることを示す、より長い時間待機している旨の決定に基づく、
請求項２０に記載のＳＭＴプロセッサ。
【請求項２２】
前記第４の回路は、前記ＮＴＣグループおよび前記複数の追加グループ（Ｘ）が有効フラッシュ・ポイントを構成するかどうかを決定する、請求項１８に記載のＳＭＴプロセッサ。
【請求項２３】
前記ＮＴＣグループおよび前記少なくとも１つの追加グループ（Ｘ）の妥当性に基づいて、前記第４の回路は、前記有効フラッシュ・ポイントの検出に応答して、前記ＮＴＣグループおよび前記複数の追加グループ（Ｘ）に基づいて前記キャッシュ・ミスに含められる機能停止またはリソース消費型あるいはその両方のターゲット・スレッドをフラッシュするか、または、前記ＮＴＣグループおよび前記複数の追加グループ（Ｘ）が無効フラッシュ・ポイントである場合、前記フラッシュをブロックする、請求項２２に記載のＳＭＴプロセッサ。
【請求項２４】
グローバル完了テーブル上でキャッシュ・ミス・スレッド・バランスを実行する方法であって、
保留中のキャッシュ・ミスを経験している第１のスレッドの第１のグループを検出することと、
前記第１のスレッド内の次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよび前記第１のスレッド内の複数の追加グループ（Ｘ）を決定することと、
少なくとも１つの空のグローバル完了テーブルのエントリ・フィールドを提供するように、前記第１のスレッド内の前記ＮＴＣグループおよび前記第１のスレッド内の複数の追加グループ（Ｘ）の後にディスパッチされる、前記第１のスレッドの少なくとも１つのグループを、前記グローバル完了テーブルからフラッシュすることと、
前記少なくとも１つの空のグローバル完了テーブルのエントリ・フィールド内に、前記第１のスレッドとは異なる第２のスレッドの新規グループを記憶することと、
を含む、キャッシュ・ミス・スレッド・バランスを実行する方法。
【請求項２５】
前記第２のスレッドの前記新規グループは、前記第１のスレッドの前記第１のグループが前記保留中のキャッシュ・ミスを経験している間にディスパッチされる、請求項２４に記載の方法。
【請求項２６】
前記グローバル完了テーブル内に列挙された前記新規グループは、前記第１のスレッドの前記第１のグループが前記保留中のキャッシュ・ミスを経験している間に実行を完了する、請求項２５に記載の方法。
【請求項２７】
前記第１のグループの新規グループは、前記第１のスレッドの前記第１のグループが前記保留中のキャッシュ・ミスを経験している間にディスパッチからブロックされる、請求項２６に記載の方法。
【請求項２８】
前記ＮＴＣグループに関連付けられた前記複数の追加グループ（Ｘ）は、前記保留中のキャッシュ・ミスが存在するキャッシュ階層レベルに従って変動するデータ待ち時間に基づいており、前記データ待ち時間は、前記キャッシュ階層レベルからデータを戻すためにかかる時間量として定義される、請求項２７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に改善したデータ処理システムに関し、より具体的に言えば、マルチスレッド・データ処理システムにおける保留中のキャッシュ・ミスのフラッシングに関する。
【背景技術】
【０００２】
従来のデータ処理システムおよびマイクロプロセッサ・システムは、コンピューティング・リソースの利用率およびコンピュータ性能を改善するための同時マルチスレッド技法を組み込む。これらのデータ処理システムは、キャッシュ階層レベル（たとえば、Ｌ１、Ｌ２、Ｌ３、Ｌ４、・・・ＬＮ）においてキャッシュ・ミスを経験する、すなわち、生じる可能性がある。キャッシュ・ミスは、所与のキャッシュ・ミスに対応するスレッドに、コンピューティング・リソースの大部分を飽和状態にする可能性および過度に消費させる可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
したがって、当技術分野において、前述の問題に対処する必要がある。
【課題を解決するための手段】
【０００４】
非限定的な実施形態によれば、キャッシュ・ミス・スレッドをバランシングする方法は、キャッシュ・ミス・スレッドのキャッシュ・ミスを検出すること、および、検出されたキャッシュ・ミスが発生した第１のキャッシュ階層レベルを決定することを含む。方法は、キャッシュ・ミス・スレッドにおける次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよびキャッシュ・ミス・スレッドにおける複数の追加グループ（Ｘ）を決定することを、さらに含む。複数の追加グループ（Ｘ）は、検出されたキャッシュ・ミスに基づいて動的に構成される。方法は、キャッシュ・ミス・スレッドにおける任意のグループが、決定されたＮＴＣグループおよび複数の追加グループ（Ｘ）よりも若いかどうかを決定し、キャッシュ・ミス・スレッドからすべての決定されたより若いグループをフラッシュすることを、さらに含む。
【０００５】
別の非限定的な実施形態によれば、コンピュータ・プログラム製品は、キャッシュ・ミス・スレッド・バランシングを実行する。コンピュータ・プログラム製品は、具体化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含む。プログラム命令は、キャッシュ・ミス・スレッドにおけるキャッシュ・ミスを検出するために、および、検出されたキャッシュ・ミスが発生したキャッシュ階層レベルを決定するために、データベース処理システムを制御するように、電子コンピュータ・プロセッサによって実行可能である。電子コンピュータ・プロセッサは、キャッシュ・ミス・スレッドにおける次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよびキャッシュ・ミス・スレッドにおける複数の追加グループ（Ｘ）を決定するために、データベース処理システムをさらに制御する。複数の追加グループ（Ｘ）は、検出されたキャッシュ・ミスに基づいて動的に構成される。電子コンピュータ・プロセッサは、スレッドにおける任意のグループが、決定されたＮＴＣグループおよび複数の追加グループ（Ｘ）よりも若いかどうかを決定し、キャッシュ・ミス・スレッドからすべての決定されたより若いグループをフラッシュするために、データベース処理システムをさらに制御する。
【０００６】
さらに別の非限定的な実施形態によれば、共有ディスパッチ・パイプラインを有する同時マルチスレッド（ＳＭＴ）プロセッサは、キャッシュ・ミス・スレッドを検出する第１の回路を含む。第２の回路は、検出されたキャッシュ・ミスが発生した第１のキャッシュ階層レベルを決定する。第３の回路は、スレッドにおける次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよびスレッドにおける複数の追加グループ（Ｘ）を決定する。追加グループ（Ｘ）は、検出されたキャッシュ・ミスに基づいて動的に構成される。第４の回路は、スレッドにおける任意のグループが、決定されたＮＴＣグループおよび複数の追加グループ（Ｘ）よりも若いかどうかを決定し、キャッシュ・ミス・スレッドからすべての決定されたより若いグループをフラッシュする。
【０００７】
さらに別の非限定的な実施形態によれば、グローバル完了（global completion）テーブル上でキャッシュ・ミス・スレッド・バランスを実行する方法は、保留中のキャッシュ・ミスを経験している、すなわち、生じている第１のスレッドの第１のグループを検出すること、ならびに、第１のスレッドにおける次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループおよび第１のスレッドにおける複数の追加グループ（Ｘ）を決定することを含む。方法は、少なくとも１つの空のグローバル完了テーブルのエントリ・フィールドを提供するように、第１のスレッドにおけるＮＴＣグループおよび第１のスレッドにおける複数の追加グループ（Ｘ）の後にディスパッチされる、第１のスレッドの少なくとも１つのグループを、グローバル完了テーブルからフラッシュすることを、さらに含む。方法は、少なくとも１つの空のグローバル完了テーブルのエントリ・フィールド内に、第１のスレッドとは異なる第２のスレッドの新規グループを記憶することを、さらに含む。
【０００８】
追加の特徴は本発明の技術を介して実現される。他の実施形態は本明細書で詳細に説明され、請求する本発明の一部と見なされる。特徴と共に本発明をより良く理解するために、説明および図面を参照する。
【０００９】
次に、添付の図面を参照しながら、単なる例として本発明の実施形態を説明する。
【図面の簡単な説明】
【００１０】
【図１】非限定的な実施形態による、キャッシュ・ミス・バランシング・システムを実装するように構成された、データ処理システムを示すブロック図である。
【図２】非限定的な実施形態による、キャッシュ・ミス・バランシング・システムを実装可能な機能ユニットおよびレジスタを示す、マルチスレッド・プロセッサ設計を示すブロック図である。
【図３】非限定的な実施形態による、スレッド優先度を制御するための例示的なプロセッサ・パイプラインを示すブロック図である。
【図４】非限定的な実施形態に従った、スレッド・スイッチ制御レジスタ（ＴＳＣＲ）の読み取りおよび書き込みのための、例示的な構成要素を示すブロック図である。
【図５】非限定的な実施形態による、キャッシュ・ミス・バランシング動作を受けるグローバル完了テーブルを示す図である。
【図６】非限定的な実施形態による、キャッシュ・ミス・バランシング動作を受けるグローバル完了テーブルを示す図である。
【図７】非限定的な実施形態による、キャッシュ・ミス・バランシング動作を受けるグローバル完了テーブルを示す図である。
【図８】非限定的な実施形態による、キャッシュ・ミス・スレッド・バランシングを実行するための方法を示す流れ図である。
【図９】非限定的な実施形態による、キャッシュ・ミス・スレッド・バランシングを実行するための方法を示す流れ図である。
【図１０】非限定的な実施形態による、決定されたＮＴＣ＋Ｘが有効フラッシュ・ポイントであるかどうかを確認するための、有効フラッシュ・ポイント（ＶＦＰ）サブベクトルおよび探索レンジ（ＳＲ）サブベクトルを含む、探索ベクトルを示す図である。
【発明を実施するための形態】
【００１１】
キャッシュ・ミス・スレッド・バランシングは、キャッシュ・ミス保留状態時にスレッドが共有リソースを使い尽くすことを防止する。これにより、コア内のスレッドのバランシングを強化し、したがって、同時マルチスレッドを伴うコアの性能全体を向上させる。同時に、キャッシュ・ミスが保留中の最も古い命令を除き、スレッド全体がフラッシュされる。たとえば、キャッシュ・ミスが保留中の次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループが維持され、任意のより若いグループが完全にフラッシュされる。
【００１２】
コンピュータ・プログラムは、順序正しく実行するように見える命令のシーケンスからなる。この順序は、時折、プログラム順と呼ばれる。たとえば、［ｏｂｊｅｃｔ  Ｙ］が［ｏｂｊｅｃｔ  Ｘ］に対応する命令の後にプログラム順に発生する命令に対応する場合、［ｏｂｊｅｃｔ  Ｙ］は［ｏｂｊｅｃｔ  Ｘ］よりも若い。したがって、より若いグループは、ＮＴＣグループおよびキャッシュ・ミスを経験している複数の追加グループのサブセットの後にディスパッチされるグループと呼ぶことができる。ＮＴＣ＋Ｘより若いグループを、ＮＴＣ＋Ｘに対応する命令の後にプログラム順に発生する命令に対応するグループと呼ぶこともできる。これは、このスレッド上で行われてきた作業を無駄にするのみならず、メモリからのデータの到着時に、このスレッドは１つの命令しか完了できない。最も古い命令以外のすべてをフラッシュすることは過剰であり、キャッシュ・ミスが保留中のスレッドの性能に悪影響を与える。たとえば、ＮＴＣおよびすべてのより若いグループを完全にフラッシュすることで、その後他のスレッドによる利用が可能なリソースを割り振り解除する一方で、完了には１つの命令／グループのみが使用可能である。
【００１３】
保留中のキャッシュ・ミスに応答してＮＴＣ＋１をフラッシュする従来のシステムとは異なり、本開示の少なくとも１つの非限定的な実施形態は、スレッドについて「Ｘ」の多くの命令／グループを維持する。すなわち、ＮＴＣは、少なくとも１つの追加グループ「Ｘ」と共に決定される。しかしながら、値「Ｘ」は変動し、各「Ｘ」は、どのキャッシュ・ミスが検出されたかに基づいて構成可能である。したがって、保留中のキャッシュ・ミスのスレッドに対して以前に割り振られたリソースは、他のスレッドのためのスペースを空けるために解除される。データが戻されると、このスレッドは完了するために少なくとも「Ｘ」の命令を有することになり、完了すると、このスレッドはパイプの補充を開始することができる。
【００１４】
次に図１を参照すると、当業者であれば理解されるように、本発明の実施形態は、システム、方法、またはコンピュータ・プログラム製品として具体化され得る。したがって、本発明の実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または、本明細書ではすべてが概して「回路」、「モジュール」、または「システム」と呼ばれ得るソフトウェアおよびハードウェア態様を組み合わせた実施形態の形を取ることができる。さらに、本発明の実施形態は、媒体内に具体化されるコンピュータ使用可能プログラム・コードを有する表現の任意の有形媒体内に具体化されるコンピュータ・プログラム製品の形を取ることができる。
【００１５】
１つまたは複数のコンピュータ使用可能またはコンピュータ可読媒体の、任意の組み合わせが利用され得る。コンピュータ使用可能またはコンピュータ可読媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体の、システム、装置、デバイス、または伝搬媒体であり得るが、限定されない。コンピュータ可読媒体のより特定の例（網羅的でないリスト）は、１本または複数本のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤＲＯＭ）、光記憶デバイス、インターネットまたはイントラネットをサポートするような伝送媒体、あるいは磁気記憶デバイスを、含む。たとえばプログラムは、紙または他の媒体の光学走査を介して、電子的にキャプチャし、その後、コンパイル、解釈、または、他の方法で好適に処理し、その後、必要であればコンピュータ・メモリ内に記憶することが可能であるため、コンピュータ使用可能またはコンピュータ可読媒体は、プログラムが印刷される紙または別の好適な媒体も可能であることに留意されたい。本明細書との関連において、コンピュータ使用可能またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって、あるいはそれらに関連して使用するためのプログラムを、含有、記憶、通信、伝搬、または移送することが可能な、任意の媒体であり得る。コンピュータ使用可能媒体は、コンピュータ使用可能プログラム・コードが、ベースバンド内に、または搬送波の一部として具体化された、伝搬データ信号を含み得る。コンピュータ使用可能プログラム・コードは、ワイヤレス、ワイヤライン、光ファイバ・ケーブル、ＲＦなどを含むが限定されない、任意の適切な媒体を使用して伝送され得る。
【００１６】
本発明の実施形態の動作を実施するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで作成され得る。プログラム・コードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン型ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、あるいは、全体的にリモート・コンピュータまたはサーバ上で、実行可能である。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む、任意のタイプのネットワークを介して、ユーザのコンピュータに接続され得るか、あるいは、外部コンピュータへの接続を（たとえば、インターネット・サービス・プロバイダを使用するインターネットを介して）行うことができる。
【００１７】
下記で、本発明の実施形態による、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャートまたはブロック図あるいはその両方を参照しながら、本発明の実施形態を説明する。フローチャートまたはブロック図あるいはその両方の各ブロック、ならびに、フローチャートまたはブロック図あるいはその両方におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実装可能であることを理解されよう。
【００１８】
これらのコンピュータ・プログラム命令は、機械を生成するために、汎用コンピュータ、特定用途向けコンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供され得、命令は、コンピュータのプロセッサまたは他のプログラム可能データ処理装置を介して実行し、フローチャートまたはブロック図あるいはその両方のブロック内に指定された機能／動作を実装するための手段を作成することになる。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置に特定の様式で機能するように指示することが可能な、コンピュータ可読媒体にも記憶され得、コンピュータ可読媒体に記憶される命令は、フローチャートまたはブロック図あるいはその両方のブロック内に指定された機能／動作を実装する命令手段を含む製品を生成することになる。
【００１９】
コンピュータ・プログラム命令は、コンピュータ実装プロセスを生成するために、コンピュータまたは他のプログラム可能装置上で一連の動作ステップを実行させるように、コンピュータまたは他のプログラム可能データ処理装置上にもロードされ得、コンピュータまたは他のプログラム可能装置上で実行する命令は、フローチャートまたはブロック図あるいはその両方のブロック内に指定された機能／動作を実装するためのプロセスを提供することになる。
【００２０】
図１は、本発明の例示的実施形態に従ったデータ処理システムの図を示す。この例示的な例において、データ処理システム１００は、プロセッサ・ユニット１０４、メモリ１０６、永続ストレージ１０８、通信ユニット１１０、入力／出力（Ｉ／Ｏ）ユニット１１２、およびディスプレイ１１４の間に通信を提供する、通信ファブリック１０２を含む。
【００２１】
プロセッサ・ユニット１０４は、メモリ１０６にロードされるソフトウェアのための命令を実行する働きをする。プロセッサ・ユニット１０４は、特定の実装形態に依存して、１つまたは複数のプロセッサのセットであり得るか、あるいはマルチプロセッサ・コアであり得る。さらに、プロセッサ・ユニット１０４は、主プロセッサが単一チップ上に２次プロセッサと共に存在する、１つまたは複数の異種プロセッサ・システムを使用して実装され得る。別の例示的な例として、プロセッサ・ユニット１０４は、同じタイプの複数のプロセッサを含む対称マルチプロセッサ・システムであり得る。
【００２２】
メモリ１０６および永続ストレージ１０８は、ストレージ・デバイスの例である。ストレージ・デバイスは、一時的または永続的のいずれかで情報を記憶することが可能な任意のハードウェアである。メモリ１０６は、これらの例において、たとえばランダム・アクセス・メモリ、あるいは任意の他の好適な揮発性または不揮発性のストレージ・デバイスであり得る。永続ストレージ１０８は、特定の実装形態に応じて様々な形を取り得る。たとえば、永続ストレージ１０８は、１つまたは複数の構成要素またはデバイスを含み得る。たとえば、永続ストレージ１０８は、ハード・ドライブ、フラッシュ・メモリ、書き換え可能光ディスク、書き換え可能磁気テープ、または上記の何らかの組み合わせであり得る。永続ストレージ１０８によって使用される媒体は、取り外し可能でもあり得る。たとえば、取り外し可能ハード・ドライブを永続ストレージ１０８に使用し得る。
【００２３】
これらの例において、通信ユニット１１０は、他のデータ処理システムまたはデバイスとの通信を提供する。これらの例において、通信ユニット１１０はネットワーク・インターフェース・カードである。通信ユニット１１０は、物理およびワイヤレスのいずれかまたは両方の通信リンクの使用を介して、通信を提供し得る。
【００２４】
入力／出力ユニット１１２は、データ処理システム１００に接続され得る他のデバイスとのデータの入力および出力を可能にする。たとえば、入力／出力ユニット１１２は、キーボードおよびマウスを介するユーザ入力のための接続を提供し得る。さらに、入力／出力ユニット１１２はプリンタに出力を送信し得る。ディスプレイ１１４は、ユーザに情報を表示するための機構を提供する。
【００２５】
オペレーティング・システムのための命令およびアプリケーションまたはプログラムが、永続ストレージ１０８上に配置される。これらの命令は、プロセッサ・ユニット１０４による実行のためにメモリ１０６内にロードされ得る。異なる実施形態のプロセスは、メモリ１０６などのメモリ内に配置され得るコンピュータ実装命令を使用して、プロセッサ・ユニット１０４によって実行され得る。これらの命令はプログラム・コード、コンピュータ使用可能プログラム・コード、またはコンピュータ可読プログラム・コードと呼ばれ、プロセッサ・ユニット１０４内でプロセッサによって読み取られおよび実行され得る。異なる実施形態におけるプログラム・コードは、メモリ１０６または永続ストレージ１０８などの、異なる物理または有形のコンピュータ可読媒体上で具体化され得る。
【００２６】
プログラム・コード１１６は、選択的に取り外し可能であり、プロセッサ・ユニット１０４による実行のために、データ処理システム１００上にロードされるかまたは転送され得る、コンピュータ可読媒体１１８上に、関数形式で配置される。プログラム・コード１１６およびコンピュータ可読媒体１１８は、これらの例においてコンピュータ・プログラム製品１２０を形成する。一例において、コンピュータ可読媒体１１８は、たとえば、永続ストレージ１０８の一部であるハード・ドライブなどの記憶デバイス上に転送するために、永続ストレージ１０８の一部であるドライブまたは他のデバイスに挿入または配置される、光または磁気ディスクなどの、有形の形式であり得る。有形の形式において、コンピュータ可読媒体１１８は、データ処理システム１００に接続されるハード・ドライブ、サム・ドライブ、またはフラッシュ・メモリなどの、永続ストレージの形を取ることもできる。有形の形式のコンピュータ可読媒体１１８は、コンピュータ記録可能記憶媒体とも呼ばれる。いくつかの場合、コンピュータ可読媒体１１８は取り外し可能ではない。
【００２７】
代替として、プログラム・コード１１６は、通信ユニット１１０への通信リンクを介して、または入力／出力ユニット１１２への接続を介して、あるいはその両方を介して、コンピュータ可読媒体１１８からデータ処理システム１００に転送され得る。通信リンクまたは接続あるいはその両方は、例示的な例において物理的またはワイヤレスであり得る。コンピュータ可読媒体は、プログラム・コードを含む通信リンクまたはワイヤレス伝送などの非有形媒体の形を取り得る。
【００２８】
データ処理システム１００について例示される異なる構成要素は、アーキテクチャ面で異なる実施形態が実装可能な様式に限定されることを意味するものではない。異なる例示的な実施形態は、データ処理システム１００について説明された構成要素に加えて、またはそれらの代わりの構成要素を含む、データ処理システムにおいて実装可能である。図１に示される他の構成要素は、図示される例示的な例とは異なる可能性がある。
【００２９】
一例として、データ処理システム１００における記憶デバイスは、データを記憶し得る任意のハードウェア装置である。メモリ１０６、永続ストレージ１０８、およびコンピュータ可読媒体１１８は、有形の形式の記憶デバイスの例である。
【００３０】
別の例において、バス・システムは通信ファブリック１０２を実装するために使用可能であり、システム・バスまたは入力／出力バスなどの、１つまたは複数のバスからなり得る。もちろん、バス・システムは、バス・システムに取り付けられた異なる構成要素またはデバイス間にデータの転送を提供する、任意の好適なタイプのアーキテクチャを使用して実装可能である。追加として、通信ユニットは、モデムまたはネットワーク・アダプタなどの、データの送信および受信に使用される１つまたは複数のデバイスを含み得る。さらに、メモリは、たとえば、メモリ１０６または、通信ファブリック１０２内に存在し得るインターフェースおよびメモリ・コントローラ・ハブ内に見られるようなキャッシュであり得る。
【００３１】
図２は、例示的な実施形態を実装するための機能ユニットおよびレジスタを示すマルチスレッド・プロセッサ設計のブロック図である。プロセッサ２１０は、図１のプロセッサ・ユニット１０４の一例である。少なくとも１つの実施形態において、プロセッサ２１０は同時マルチスレッド（ＳＭＴ）プロセス２１０である。ＳＭＴプロセッサ２１０は、非限定的な実施形態による、キャッシュ・ミス・スレッド・バランスを実行するための１つまたは複数の回路を含む。たとえば、第１の回路は、機能停止またはリソース消費型あるいはその両方のターゲット・スレッドを含む、キャッシュ・ミスを検出することができる。第２の回路は、キャッシュ・ミスが発生したレベルを決定することができる。第３の回路は、スレッドにおける次完了（Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅ（ＮＴＣ））グループを決定し、検出されたキャッシュ・ミスに基づいてスレッド内に少なくとも１つの追加グループ（Ｘ）を動的に設定することができる。第４の回路は、ＮＴＣグループおよび少なくとも１つの追加グループ（Ｘ）に基づいて、キャッシュ・ミスに含まれる機能停止またはリソース消費型あるいはその両方のターゲット・スレッドをフラッシュすることができる。様々な非限定的実施形態によるキャッシュ・ミス・スレッド・バランシングを、下記でより詳細に考察する。
【００３２】
例示的な実施形態において、プロセッサ２１０は単一の集積回路スーパースカラ・マイクロプロセッサである。したがって、本明細書において下記でより詳細に考察するように、プロセッサ２１０は様々なユニット、レジスタ、バッファ、メモリ、および他のセクションを含み、それらはすべて、集積回路によって形成される。加えて、例示的な実施形態において、プロセッサ２１０は、縮小命令セット・コンピュータ（「ＲＩＳＣ」）技法に従って動作する。図２に示されるように、システム・バス２１１はプロセッサ２１０のバス・インターフェース・ユニット（「ＢＩＵ」）２１２に接続する。ＢＩＵ  ２１２は、プロセッサ２１０とシステム・バス２１１との間での情報の転送を制御する。
【００３３】
ＢＩＵ  ２１２は、プロセッサ２１０の命令キャッシュ２１４およびデータ・キャッシュ２１６に接続する。命令およびデータ・キャッシュ２１４および２１６は、一般に、複数レベルのキャッシュ階層、Ｌ１、Ｌ２、Ｌ３、Ｌ４、・・・などとして実装され得る。命令キャッシュ２１４は、命令をシーケンサ・ユニット２１８に出力する。命令キャッシュ２１４からのこうした命令に応答して、シーケンサ・ユニット２１８は、プロセッサ２１０の他の実行回路に命令を選択的に出力する。変換索引バッファ（ＴＬＢ）は、プロセッサが最近アクセスしたメモリ内のページに関する情報を含む、プロセッサのメモリ内のテーブルである。ＴＬＢを使用して、ユーザ・レベル・プログラム・コードに内在するアドレス生成機構から導出される仮想アドレスを、シーケンサ・ユニット２１８およびロード／ストア・ユニット２２８によって生成された場合、所与のアプリケーション・プログラムに割り振られた実メモリ・アドレス・スペースにマッピングする、実アドレスまたは物理アドレスに変換することができる。
【００３４】
例示的な実施形態では、プロセッサ２１０の実行回路要素は、シーケンサ・ユニット２１８に加えて、複数の実行ユニット、すなわち、分岐ユニット２２０、固定小数点ユニットＡ（「ＦＸＵＡ」）２２２、固定小数点ユニットＢ（「ＦＸＵＢ」）２２４、複合固定小数点ユニット（「ＣＦＸＵ」）２２６、ロード／ストア・ユニット（「ＬＳＵ」）２２８、および浮動小数点ユニット（「ＦＰＵ」）２３０を含む。ＦＸＵＡ  ２２２、ＦＸＵＢ  ２２４、ＣＦＸＵ  ２２６、およびＬＳＵ  ２２８は、汎用アーキテクチャ・レジスタ（「ＧＰＲｓ」）２３２および固定小数点リネーム・バッファ２３４からそれらのソース・オペランド情報を入力する。さらに、ＦＸＵＡ  ２２２およびＦＸＵＢ  ２２４は、キャリー・ビット（「ＣＡ」）レジスタ２３９から「キャリー・ビット」を入力する。ＦＸＵＡ  ２２２、ＦＸＵＢ  ２２４、ＣＦＸＵ  ２２６、およびＬＳＵ  ２２８は、それらの動作の結果（宛先オペランド情報）を、固定小数点リネーム・バッファ２３４内の選択されたエントリに記憶するために出力する。加えて、ＣＦＸＵ  ２２６は、ソース・オペランド情報および宛先オペランド情報を、特定用途向けレジスタ処理ユニット（「ＳＰＲユニット」）２３７との間で入力および出力する。
【００３５】
ＦＰＵ  ２３０は、浮動小数点アーキテクチャ・レジスタ（「ＦＰＲｓ」）２３６および浮動小数点リネーム・バッファ２３８からそのソース・オペランド情報を入力する。ＦＰＵ  ２３０は、その動作の結果（宛先オペランド情報）を、浮動小数点リネーム・バッファ２３８内の選択されたエントリに記憶するために出力する。ロード命令に応答して、ＬＳＵ  ２２８はデータ・キャッシュ２１６から情報を入力し、こうした情報をリネーム・バッファ２３４および２３８のうちの選択されたものにコピーする。こうした情報がデータ・キャッシュ２１６に記憶されない場合、データ・キャッシュ２１６は、システム・バス２１１に接続されたシステム・メモリ２６０からこうした情報を（ＢＩＵ  ２１２およびシステム・バス２１１を介して）入力する。さらに、データ・キャッシュ２１６は、データ・キャッシュ２１６からシステム・バス２１１に接続されたシステム・メモリ２６０へ、（ＢＩＵ  ２１２およびシステム・バス２１１を介して）情報を出力することができる。ストア命令に応答して、ＬＳＵ  ２２８は、ＧＰＲｓ  ２３２およびＦＰＲｓ  ２３６のうちの選択された１つから情報を入力し、こうした情報をデータ・キャッシュ２１６にコピーする。
【００３６】
シーケンサ・ユニット２１８はＧＰＲｓ  ２３２およびＦＰＲｓ  ２３６との間で情報を入力および出力する。シーケンサ・ユニット２１８から、分岐ユニット２２０は、命令とプロセッサ２１０の現在の状態を示す信号とを入力する。こうした命令および信号に応答して、分岐ユニット２２０は、プロセッサ２１０による実行のための命令シーケンスを記憶する好適なメモリ・アドレスを示す信号を（シーケンサ・ユニット２１８に）出力する。分岐ユニット２２０からのこうした信号に応答して、シーケンサ・ユニット２１８は、命令キャッシュ２１４から示された命令のシーケンスを命令フェッチ・ユニット２４０にフェッチさせる。命令のシーケンスのうちの１つまたは複数が命令キャッシュ２１４に記憶されない場合、命令キャッシュ２１４は、システム・バス２１１に接続されたシステム・メモリ２６０からこうした命令を（ＢＩＵ  ２１２およびシステム・バス２１１を介して）入力する。シーケンサ・ユニット２１８内に、命令復号ユニットおよび命令ディスパッチ・ユニット（図示せず）が埋め込まれる。命令復号ユニットは命令を復号し、復号された命令を命令ディスパッチ・ユニットに渡す。命令ディスパッチ・ユニットは、各スレッドについて命令復号ユニットからの復号された命令を選択的にグループ分けし、各スレッドについて命令のグループを出力する。
【００３７】
命令キャッシュ２１４から入力された命令に応答して、シーケンサ・ユニット２１８は、実行ユニット２２０、２２２、２２４、２２６、２２８、および２３０のうちの選択されたものに、命令を選択的にディスパッチする。各実行ユニットは、特定クラスの命令のうちの１つまたは複数の命令を実行する。たとえばＦＸＵＡ  ２２２およびＦＸＵＢ  ２２４は、加算、減算、ＡＮＤｉｎｇ、ＯＲｉｎｇ、ＸＯＲｉｎｇなどの第１のクラスの固定小数点数学演算を、ソース・オペランド上で実行する。ＣＦＸＵ  ２２６は、固定小数点乗算および除算などの第２のクラスの固定小数点演算を、ソース・オペランド上で実行する。ＦＰＵ  ２３０は、浮動小数点乗算および除算などの浮動小数点演算を、ソース・オペランド上で実行する。
【００３８】
固定小数点リネーム・バッファ２３４のうちの選択されたものに記憶される情報は、選択されたリネーム・バッファが割り振られる命令によって指定される記憶ロケーション（たとえば、ＧＰＲｓ  ２３２またはキャリー・ビット（ＣＡ）レジスタ２３９のうちの１つ）に関連付けられる。固定小数点リネーム・バッファ２３４のうちの選択されたものに記憶される情報は、シーケンサ・ユニット２１８からの信号に応答して、ＧＰＲｓ  ２３２のうちのその関連付けられたもの（またはＣＡレジスタ２３９）にコピーされる。シーケンサ・ユニット２１８は、情報を生成した命令の「完了」に応答して、固定小数点リネーム・バッファ２３４のうちの選択されたものに記憶される情報のこうしたコピーを指示する。こうしたコピーは「ライトバック」と呼ばれる。
【００３９】
浮動小数点リネーム・バッファ２３８のうちの選択されたものに情報を記憶する際に、こうした情報はＦＰＲｓ  ２３６のうちの１つに関連付けられる。浮動小数点リネーム・バッファ２３８のうちの選択されたものに記憶される情報は、シーケンサ・ユニット２１８からの信号に応答して、ＦＰＲｓ  ２３６のうちのその関連付けられたものにコピーされる。シーケンサ・ユニット２１８は、情報を生成した命令の「完了」に応答して、浮動小数点リネーム・バッファ２３８のうちの選択されたものに記憶された情報のこうしたコピーを指示する。
【００４０】
シーケンサ・ユニット２１８内で、完了バッファ２４８は、実行ユニット内で実行されている複数命令の完了を追跡する。命令または命令のグループが、アプリケーションが指定したシーケンス順で正常に完了した旨の指示の際に、完了バッファ２４８は、関連付けられた汎用レジスタへのそれらの完了した命令の結果の転送を開始するために利用され得る。完了バッファ２４８は、プロセッサ２１０内での有効な（ライブ）命令の追跡を維持するエントリ・フィールドを含む、グローバル完了テーブル（ＧＣＴ）を含む。
【００４１】
追加として、プロセッサ２１０は割込みユニット２５０を含む。割込みユニット２５０は命令キャッシュ２１４に接続する。追加として、図２には示されていないが、割込みユニット２５０は、シーケンサ・ユニット２１８を含むプロセッサ２１０内の他の機能ユニットに接続する。割込みユニット２５０は他の機能ユニットから信号を受信し、エラー処理またはトラップ・プロセスの開始などのアクションを開始する。これらの例において、割込みユニット２５０は、プログラムの実行の間に発生し得る割込みおよび例外を生成する。割込みユニット２５０はタイマー２５２を含む。
【００４２】
追加として、プロセッサ２１０は、図示されていない外部サービス要素に接続するＪＴＡＧポート２５４を含む。ラッチは、プロセッサ２１０のあらゆる要素を含む。ＪＴＡＧポート２５４は、プロセッサ２１０の要素を含むすべてのラッチに接続する。
【００４３】
図３は、例示的実施形態が実装され得るスレッド優先度を制御するための、例示的プロセッサ・パイプラインのブロック図である。特に図３は、たとえば、ＩＢＭコーポレーションのｐシリーズ・サーバ・システム（ＰＯＷＥＲ５（ＴＭ）ベース・システムおよびそれ以降）において使用可能なものなどの、単一のスーパースカラ同時マルチスレッド（ＳＭＴ）マイクロプロセッサ・コア（ＣＰＵ）によって実装される、プロセッサ・パイプラインのフロントエンドを示す。スーパースカラＳＭＴプロセッサの一例が、図２のプロセッサ２１０である。
【００４４】
プロセッサは、プロセッサ・パイプライン内にいくつかのステージを含む。命令フェッチ・ステージと呼ばれる典型的な第１のステージにおいて、プロセッサは、各ステージが１つまたは複数のパイプラインを含む、メモリまたは連想メモリ構造からの命令をフェッチする。その後、復号ステージにおいて、プロセッサは、一般に、命令によって指定される演算を実行するためのあるタイプの機能ユニット、演算のためのソース・オペランド、および演算の結果のための宛先を指定する、異なる制御ビットに、命令を復号する。ディスパッチ・ステージにおいて、プロセッサは、実行ステージを有するユニットに、または場合によっては、介在する予約ステーション、または、最終的に関連付けられた実行ステージ（さらにまた「実行ユニット」）に命令を発行する問題キューに、制御ビットごとの復号命令をディスパッチする。実行ステージは、命令によって指定される動作を処理する。命令によって指定される動作を実行することは、１つまたは複数のオペランドを受け入れること、および１つまたは複数の結果を生成することを含む。完了ステージは、同時実行から生じるプログラム順序問題に対処し、複数の同時に実行される命令は、結果を単一のレジスタ内に堆積させ得る。完了ステージは、割込み命令に続く命令から生じるリカバリ問題も扱い、結果をそれらの宛先レジスタに堆積させる。このステージは、この時点で、命令の実行の結果がレジスタなどの指定されたロケーションに再書き込みされるため、時にはライトバック・ステージとも呼ばれる。
【００４５】
この例示的な例において、プロセッサ・フロントエンド・パイプライン３００は、複数のプログラム（スレッド）を実行させるための命令を保持する、共有命令キャッシュ（ＩＣａｃｈｅ）３０２を含む。プロセッサは、図１のメモリ１０６などのシステム・メモリから命令を取り出し、この命令を命令キャッシュ３０２内に記憶する。
【００４６】
フェッチ・ステージの間、命令フェッチ・ユニット（ＩＦＵ）３０４は、ＩＣａｃｈｅ読み取りポート読み取り（ＰＩ  ｔｏ  Ｐｒ  ３０６）を介して、必要に応じて命令キャッシュ３０２から命令をフェッチする。命令フェッチ・ユニット３０４は、命令アドレスに従って命令キャッシュ３０２からの命令を要求し、一般に、複数のスレッドについて同時に命令キャッシュ３０２からの命令を要求し得る。命令フェッチ・ユニット３０４は、プロセッサによって実行される各スレッドにフェッチ・ステージ優先度レベルを割り当てる、スレッド選択および優先度論理３０８を含む。スレッド選択および優先度論理３０８は、図２の命令フェッチ・ユニット２４０内に組み込むことができる。高優先度が割り当てられたスレッドは、より多くの復号ユニット、より多くのディスパッチ・サイクル、および他のプロセッサ・リソースを受け取ることができるが、優先度の低いスレッドにはより少ないリソースが付与される。スレッドに優先度レベルが割り当てられるため、命令フェッチ・ユニット・パイプライン３１０は、サポートされるスレッドのための命令バッファ（ＩＢＵＦ）３１２にスレッドを（優先度順に）提供する。
【００４７】
復号およびディスパッチ・ステージの間、命令復号およびディスパッチ・ユニット（ＩＤＵ）３１４は、同時スレッドについての命令を復号する。命令復号およびディスパッチ・ユニット３１４は、プロセッサによって実行される各スレッドに割り当てられるディスパッチ優先度レベルを制御する、関連付けられたスレッド選択および優先度論理３１６も有する。スレッド選択および優先度論理３１６は、図２のシーケンサ・ユニット２１８内に埋め込むことが可能であるか、または、スレッド選択および優先度論理３１６は、シーケンサ・ユニット２１８に接続されたスタンドアロン・ユニットであり得る。命令復号およびディスパッチ・ユニット３１４は、優先度付けされた命令を共有ディスパッチ・バッファ３１８に渡す。命令復号およびディスパッチ・ユニット３１４は、その後、必要に応じて、図３に示されたシステム内のディスパッチ・バッファ３１８からバックエンド実行ユニット（図示せず）に命令をディスパッチする。
【００４８】
図３に示されるアーキテクチャは、本発明の実施形態を単に例示および説明する目的で提供されており、いかなるアーキテクチャ上の制限も示唆することは意図されていない。当業者であれば、多くの変形形態が可能であることを理解されよう。
【００４９】
図４は、例示的実施形態に従った、スレッド・スイッチ制御レジスタ（ＴＳＣＲ）４０２などの、スレッド・スイッチ制御レジスタへの読み取りおよび書き込みのための例示的構成要素のブロック図である。スレッド・スイッチ制御レジスタ４０２は、プログラム可能ハードウェア・レジスタを含む。ＳＭＴデータ処理システムにおける各実行スレッドは、独自のスレッド・スイッチ制御レジスタを有する。スレッド・スイッチ制御レジスタ４０２は、複数のスレッド優先度制御設定のうちの１つに関連付けられた、複数のビット（ＴＳＣＲ［０］、ＴＳＣＲ［１］など）を含む。
【００５０】
マルチスレッド・プロセッサは、スレッド・スイッチ制御レジスタ４０２のビットに関連付けられたスレッド優先度制御設定を使用して、命令フローを制御し、様々な処理リソースをセキュアにするために実行スレッド間の競合を扱う。特に、図３のプロセッサ・パイプラインにおけるスレッド選択および優先度論理３０８および３１６は、スレッド・スイッチ制御レジスタから取得した優先度情報を使用して、実行スレッドの優先度レベルを決定および設定する。スレッド・スイッチ制御レジスタ４０２を構成する実際のビット数はフレキシブルであり、各ビットが何を意味するかの位置セマンティクスは、特定の実装にも依存する。
【００５１】
典型的なＳＴＭデータ処理システムにおいて、ハイパーバイザ４０４などのソフトウェア・コントローラは、スレッド・スイッチ制御レジスタ内のビット設定を制御および更新する唯一の構成要素である。ハイパーバイザ４０４は、スレッド・スイッチ制御レジスタ４０２内にデフォルトのスレッド優先度ビット設定を提供し、ビット設定の有効化を変更することもできる。ハイパーバイザ４０４は、実行スレッド全体にわたってフェアネスを維持しながら、ＳＭＴプロセッサのスループット性能を最大にするようにスレッド優先度ビットを設定する。本発明の実施形態は、オンチップまたはオフチップに常駐し得るハイパーバイザ４０４またはハードウェア・コントローラ４０８を介して、スレッド・スイッチ制御レジスタ（ＴＳＣＲ）ビット設定機能の共有制御を可能にするメカニズムを、実行可能にする。ハイパーバイザ４０４は、スレッド・スイッチ制御レジスタ４０２内に存在するビット設定を読み取り、更新されたビット設定をマルチプレクサ４０６に提供する。その後、マルチプレクサ４０６は、ハイパーバイザ４０４によって提供される設定に従って、スレッド・スイッチ制御レジスタ４０２内のビット設定を更新することができる。
【００５２】
スレッド・スイッチ制御レジスタ４０２内のビットの有効化を動的に変更するために、例示的な実施形態においてオン／オフチップのハードウェア・コントローラ４０８が提供され、それによって、ハイパーバイザ４０４によって設定されるデフォルトのスレッド優先度ビット設定をオーバーライドする。ハードウェア・コントローラ４０８は、スレッド・スイッチ制御レジスタ４０２内のビット設定を読み取り、更新されたビット設定をマルチプレクサ４０６に提供する。その後、マルチプレクサ４０６は、ハードウェア・コントローラ４０８によって提供される設定に従って、スレッド・スイッチ制御レジスタ４０２内のビット設定を更新する。ハードウェア・コントローラ４０８によって発せられるハードウェア・オーバーライド信号４１０は、ハイパーバイザ４０４によって提供されるデフォルト・コマンドを介して、マルチプレクサ４０６がハードウェア・コントローラ４０８から更新コマンドを選択できるようにする。ハードウェア・コントローラ４０８は、最終的に、システム・ソフトウェアの制御下にもあり（リンクは図示せず）、通常、最終オーバーライド制御は、ハイパーバイザおよびオペレーティング・システムのようなエンティティを介して提示される（階層）システム・ソフトウェアによって行われる。ハードウェア・コントローラ４０８は、所与のプロセッサ・チップについてのシステム指定パワー・ターゲットに応答して、各プロセッサ・コア内のパワー・レベルを調節するためにデフォルト／事前ＴＳＣＲ設定を変更するための必要性を認識し得る。たとえば、ハードウェア・コントローラ４０８は、所与のプロセッサ・コア（のセット）のために事前に指定された「低パワー」モードを呼び出す必要性を認識し得る。この認識は、ハイパーバイザ４０４によって提示されるデフォルト・ソースからではなくハードウェア・コントローラ４０８から、更新されたＴＳＣＲ設定コマンドを選択する機能をマルチプレクサ４０６に提供するために、ハードウェア・コントローラ４０８がハードウェア・オーバーライド信号４１０を設定することにつながり得る。
【００５３】
ハイパーバイザ４０４とは対照的に、ハードウェア・コントローラ４０８は、システムの電力消費を制御するためにスレッド・スイッチ制御レジスタ４０２内のスレッド優先度設定を動的に制御する。たとえばすでに述べたように、より低電力のモードが望ましい場合、ハードウェア・コントローラ４０８は、結果として低電力消費を適切に生じさせるように優先度ビット設定を更新する。規定された低電力モード・レベル（たとえば、低、中、または高）は、（現在監視されているパワー・レベル、および、システムレベル・ディレクティブによって指定された電力ターゲットとのそれらの関係に応答して）ハードウェア・コントローラ４０８によって自律的に推測されるか、または、システムレベル制御によって直接通信される。スレッド優先度制御ノブを呼び出すか否か、および、どのような新規のＴＳＣＲ設定が望ましい電力低下に影響を与えるはずであるかは、（ハードウェアにおいて、またはコントローラ上で実行するプログラミングされたソフトウェア／ファームウェアを介して、実装される）コントローラに組み込まれる論理の一部である決定事項である。パワー性能効率を向上させるために優先度ビット設定を変更することによって、マルチスレッド・プロセッサのスループット性能が低下する可能性があり、また実行スレッドにわたってフェアネスが低下する可能性がある。しかしながら、あるカテゴリのフラッシュを無効化することで、より高性能のスレッドが大部分のリソースをキャプチャできるようにし得るため、所望の電力消費モードを達成するために優先度ビット設定を変更することで、多くの場合、結果として電力効率の向上および正味スループット性能の向上の両方が生じる。したがって、所望の電力消費モードを達成するために優先度ビット設定を変更することで、フェアネス基準を損なうことと引き換えに、スループット性能を高めることができる。
【００５４】
ＴＳＣＲビット定義は、ＴＳＣＲテーブル内に組織化することができる。少なくとも１つの実施形態において、図４におけるスレッド・スイッチ制御レジスタ４０２の２ビット・フィールド＜ｇｃｔｄｅｃ：２＞は、グローバル完了テーブル（ＧＣＴ）の復号優先度制御を定義する。グローバル完了テーブルは、復号／ディスパッチから完了までマイクロプロセッサ内の有効（ライブ）命令を追跡する、１つまたは複数のエントリ・フィールドを含むハードウェア・エンティティである。物理的には、グローバル完了テーブルは、図２に示される完了バッファ２４８の機能の一部として実装可能である。グローバル完了テーブル復号優先度制御は、グローバル完了テーブルのいくつのエントリがスレッドによって利用されているかに基づいて、スレッドの優先度レベルを変更するためにスレッド・レベルを指定する。実行しているすべてのスレッドが同じソフトウェア設定優先度レベルを有するとき、スレッドがグローバル完了テーブルの指定されたエントリ数よりも多くのエントリを利用している場合、図３のプロセッサ・パイプラインにおけるスレッド選択および優先度論理３０８および３１６は、スレッドの優先度を低下させることになる。たとえば、スレッド・スイッチ制御レジスタ内の＜ｇｃｔｄｅｃ：２＞が「１０」に設定されている場合、スレッドがＧＣＴ内のエントリの数に関してプログラム可能閾値よりも多くの数を使用している場合、スレッドの優先度は低下することになる。スレッド・スイッチ制御レジスタ内の＜ｇｃｔｄｅｃ：２＞が「００」に設定されている場合、グローバル完了テーブルの復号優先度制御は無効化され、いかなる処置も講じられない。この２ビット・フィールド＜ｇｃｔｄｅｃ：２＞は、電力および性能をトレード・オフするためにも使用される。
【００５５】
図４のスレッド・スイッチ制御レジスタ４０２の１ビット・フィールド＜ｂｆ：１＞は、キャッシュ・ミス・バランス・フラッシュの有効化／無効化設定を定義することができる。キャッシュ・ミス・バランス・フラッシュは、リソース利用率フェアネスまたはバランスをリストアするために、システムから、保留中キャッシュ・ミスとも呼ばれる機能停止またはリソース消費型あるいはその両方のターゲット・スレッドを、選択的にフラッシュするスレッド制御機構である。キャッシュ・ミス・バランス・フラッシュ動作は、ＮＴＣ＋Ｘでフラッシュを実行し、キャッシュ・ミスが発生したキャッシュ階層レベル（Ｌ１、Ｌ２、Ｌ３、Ｌ４、・・・Ｌｎ）に基づいて、「Ｘ」は構成可能であり、異なる。キャッシュ・ミス・バランス・フラッシュは、スレッド・スイッチ制御レジスタ内のビット・フィールドを使用して有効化または無効化され得る。
【００５６】
たとえば、図４のスレッド・スイッチ制御レジスタ４０２の２ビット・フィールド＜ｇｃｔｂｆ−ａ：２＞は、Ｌ３キャッシュおよびＴＬＢのミスについて、グローバル完了テーブルのキャッシュ・ミス・バランス・フラッシュ閾値制御を定義することができる。Ｌ３キャッシュまたはＴＬＢのミスは、Ｌ３キャッシュまたはＴＬＢが所望のタグを伴うデータを含まないときに発生する。Ｌ３またはＴＬＢのミスに起因してディスパッチにおいてスレッドが機能停止する場合、スレッドは、キャッシュ・ミス・バランスがフラッシュされ得る。たとえば、スレッド・スイッチ制御レジスタ内のビット・ペア＜ｇｃｔｂｆ−ａ：２＞が「０１」に設定されたとき、スレッドが少なくともプログラム可能な最低数のグローバル完了テーブル・エントリを利用している場合、キャッシュ・ミス・バランス・フラッシュがスレッド上で実行されることになる。ビット・ペア＜ｇｃｔｂｆ−ａ：２＞が「１０」または「１１」に設定されたとき、スレッドがグローバル完了テーブル・エントリの数に関して他の異なるプログラム可能な閾値を利用している場合、マイクロプロセッサは、スレッド上でキャッシュ・ミス・バランス・フラッシュを実行する。スレッド・スイッチ制御レジスタ内の＜ｇｃｔｂｆ−ａ：２＞フィールドを「００」に設定することで、キャッシュ・ミス・バランス・フラッシュ閾値制御を無効化する。
【００５７】
図４のスレッド・スイッチ制御レジスタ４０２の２ビット・フィールド＜ｇｃｔｂｆ−ｂ：２＞５１０は、Ｌ３キャッシュおよびＴＬＢのミスがない状態で、グローバル完了テーブルのキャッシュ・ミス・バランス・フラッシュ閾値制御を定義する。Ｌ３キャッシュまたはＴＬＢのミスがないスレッドは、ビット・ペア＜ｇｃｔｂｆ−ｂ：２＞に基づいてキャッシュ・ミス・バランスがフラッシュされ得る。前述のように、使用されるＧＣＴエントリの数におけるプログラム可能な事前定義された閾値に依存して、所与のスレッドはキャッシュ・ミス・バランスがフラッシュされ得る。＜ｇｃｔｂｆ−ｂ：２＞フィールドを「００」に設定することで、キャッシュ・ミス・バランス・フラッシュ閾値制御を無効化する。
【００５８】
図４のスレッド・スイッチ制御レジスタ４０２の２ビット・フィールド＜ｂｆｍｃ：２＞５１２は、グローバル完了テーブルのキャッシュ・ミス・バランス・フラッシュのカウンタ閾値制御を定義する。スレッドがディスパッチで機能停止し、未処理のＬ３キャッシュまたはＴＬＢミスを有するとき、キャッシュ・ミス・バランス・フラッシュのミス・サイクル・カウンタが特定のサイクル数よりも少ない場合、スレッドにはキャッシュ・ミス・バランス・フラッシュのみが考慮される。＜ｂｆｍｃ：２＞における２ビット符号化（たとえば、「０１」、「１０」、または「１１」）は、このクラスのキャッシュ・ミス・バランス・フラッシュをトリガするために、キャッシュ・ミス・バランス・フラッシュのサイクル・カウンタ値におけるプログラム可能閾値を指定する。＜ｂｆｍｃ：２＞フィールドを符号化パターンのうちの１つ（たとえば、「００」）に設定することで、キャッシュ・ミス・バランス・フラッシュのカウンタ閾値制御機構を無効化する。
【００５９】
図５〜図７に進むと、非限定的な実施形態による、キャッシュ・ミス・バランシング動作を受けるグローバル完了テーブル５００が示されている。図５を参照すると、たとえば第１のサイクル（サイクル０）の間に８つのエントリ５０２ａ〜５０２ｈを有するグローバル完了テーブル５００が示されている。８つのエントリは６つの第１のスレッド・エントリ５０２ａ（Ｔｈ０＿ｇｒｏｕｐ０）、５０２ｂ（Ｔｈ０＿ｇｒｏｕｐ１）、５０２ｃ（Ｔｈ０＿ｇｒｏｕｐ２）、５０２ｄ（Ｔｈ０＿ｇｒｏｕｐ３）、５０２ｇ（Ｔｈ０＿ｇｒｏｕｐ４）、５０２ｈ（Ｔｈ０＿ｇｒｏｕｐ５）と、２つの第２のスレッド・エントリ５０２ｅ（Ｔｈ１＿ｇｒｏｕｐ０）および５０２ｆ（Ｔｈ１＿ｇｒｏｕｐ１）とを含む。第１のサイクル（たとえば、ｃｙｃｌｅ  ０）の間、Ｎｅｘｔ  Ｔｏ  Ｃｏｍｐｌｅｔｅの第１のスレッド・エントリ５０２ａ（たとえば、Ｔｈ０＿ｇｒｏｕｐ０）は、実線のブロック外形によって示されるような保留中のキャッシュ・ミスを経験している一方で、第２のスレッド・エントリ５０２ｅのうちの１つ（たとえば、Ｔｈ１＿ｇｒｏｕｐ０）は、破線のブロック外形によって示されるように完了する。
【００６０】
図６に進むと、第２のサイクル（たとえば、サイクル１）の間のグローバル完了テーブル５００が示されている。５０２ｅ（Ｔｈ１＿Ｇｒｏｕｐ０）のためのリソースは、サイクル０における完了に起因して解放されている。この第２のサイクルの間、第１のスレッド・エントリ５０２ａ（たとえば、Ｔｈ０＿ｇｒｏｕｐ０）は、保留中のキャッシュ・ミスを依然として経験する。しかしながら、ＮＴＣ＋Ｘフラッシュが実行され、「Ｘ」はたとえば２に設定される。したがって、エントリ５０２ｄ（Ｔｈ０＿ｇｒｏｕｐ３）、５０２ｇ（Ｔｈ０＿ｇｒｏｕｐ４）、および５０２ｈ（Ｔｈ０＿ｇｒｏｕｐ５）はフラッシュされ、したがって第２のサイクルの間、テーブル５００内に示されない。したがって、５０２ｄ（Ｔｈ０＿ｇｒｏｕｐ３）、５０２ｇ（Ｔｈ０＿ｇｒｏｕｐ４）、および５０２ｈ（Ｔｈ０＿ｇｒｏｕｐ５）に事前に割り振られたリソースは、次に、新しくディスパッチされたエントリをホストするためにオープンされる。
【００６１】
ＮＴＣ＋Ｘフラッシュと共に、別の第２のスレッド・エントリ、たとえば５０２ｆ（Ｔｈ１＿ｇｒｏｕｐ１）は完了し、新しい第２のスレッド・エントリ５０２ｉ（たとえば、Ｔｈ１＿ｇｒｏｕｐ２）は、点線のブロック外形によって示されるようにディスパッチされる。しかしながら、第１のスレッド・エントリ５０２ａ（たとえば、Ｔｈ０＿ｇｒｏｕｐ０）が依然として保留中のキャッシュ・ミスを経験しているため、新しい第１のスレッド・エントリ（Ｔｈ０＿ｇｒｏｕｐＮ）のディスパッチはブロックされる。
【００６２】
図７に進むと、第３のサイクル（たとえば、サイクル２）の間のグローバル完了テーブル５００が示されている。この次のサイクルの間、第１のスレッド・エントリ５０２ａ（たとえば、Ｔｈ０＿ｇｒｏｕｐ０）は依然として保留中のキャッシュ・ミスを経験している。したがって、新しい第１のスレッド・エントリ（Ｔｈ０＿ｇｒｏｕｐＮ）のディスパッチは再度ブロックされる。しかしながら、別の新しい第２のスレッド５０２ｊ（たとえば、Ｔｈ１＿ｇｒｏｕｐ３）は、点線のブロック外形によって示されるようにディスパッチされる。５０２ｆ（Ｔｈ１＿ｇｒｏｕｐ１）のためのリソースは、サイクル１におけるその完了に起因して解放されている。したがって、第１のスレッド（すなわち、Ｔｈ０）によって保留中のキャッシュ・ミスが経験された、すなわち、生じたにも関わらず、第２のスレッド（すなわち、Ｔｈ１）は、進行し続けることができる。
【００６３】
次に図８および図９を参照すると、非限定的な実施形態による、キャッシュ・ミス・スレッド・バランシングを実行する方法の流れ図が示されている。方法は、動作６００で開始し、動作６０２でキャッシュ・ミスが検出され、キャッシュ・ミスが発生したレベルが決定される。動作６０４で、キャッシュ・ミスが発生したレベルに基づいて、データ待ち時間が決定される。動作６０６で、データ待ち時間に基づいてＮＴＣ＋Ｘが決定される。少なくとも１つの実施形態において、キャッシュ・ミスのレベルに基づいて、異なる待ち時間が存在することになる。たとえば、レベル１（Ｌ１）キャッシュ・ミスでの待ち時間は、レベル２（Ｌ２）キャッシュ・ミスの待ち時間よりも少なく、Ｌ２キャッシュ・ミスの待ち時間はレベル３（Ｌ３）キャッシュ・ミスでの待ち時間よりも少なく、Ｌ３キャッシュ・ミスでの待ち時間はレベル４（Ｌ４）キャッシュ・ミスでの待ち時間よりも少ない。したがって、ＮＴＣ＋Ｘの「Ｘ」は、キャッシュ・ミスのレベルに基づいて変動するかまたは構成可能である。たとえば、Ｌ２キャッシュ・ミスに対応する「Ｘ」は、Ｌ３キャッシュ・ミスに対応する「Ｘ」よりも大きいが、Ｌ３キャッシュ・ミスに対応する「Ｘ」はＬ４キャッシュ・ミスに対応する「Ｘ」よりも大きい。
【００６４】
動作６０８に進むと、現在決定されているＮＴＣ＋Ｘが有効フラッシュ・ポイントであるかどうかに関して決定される。たとえば、フラッシュ動作は命令の最中には実行されない。したがって、現在決定されているＮＴＣ＋Ｘが有効フラッシュ・ポイントではないとき、有効フラッシュ・ポイントを見つけるために、より若いエントリの探索が実行される。ＮＴＣ＋Ｘは動作６１０で増分される。動作６１２で、ＮＴＣ＋Ｘの増分の後、任意の有効フラッシュ・ポイントが存在するかどうかに関して決定される。たとえば、現在決定されているＮＴＣ＋Ｘが命令の境界において存在しない場合、現在のフラッシュ・ポイントは、有効ＮＴＣ＋Ｘが見つかるまで増分される。動作６１２で、有効フラッシュ・ポイントが存在しないとき、動作６１４でフラッシュ動作は実行されず、方法は動作６１６へと進み、スレッド（たとえば、次のスレッド）のディスパッチはブロックされる。しかしながら、動作６１２で１つまたは複数の有効フラッシュ・ポイントが存在するとき、方法は動作６０８へと戻り、増分されたＮＴＣ＋Ｘが有効フラッシュ・ポイントであることを確認する。
【００６５】
動作６０８を再度参照すると、ＮＴＣ＋Ｘが有効フラッシュ・ポイントであるとき、方法は動作６１８へと進み、ＮＴＣ＋Ｘはフラッシュされる。ＮＴＣ＋Ｘフラッシングは、保留中のキャッシュ・ミスを伴うスレッドが、コンピューティング・リソースの飽和および消費過多となることを防止する。少なくとも１つの実施形態において、ＮＴＣ＋Ｘのフラッシング後、対応するスレッドへのデータ・ディスパッチは、（ｉ）ロード・ストア・ユニットが、保留中のキャッシュ・ミスがもはや存在しないことを示すまで、（ｉｉ）対応するスレッドからのグループ完了が発生するまで、または（ｉｉｉ）対応するスレッドが再開するまで、ブロックされる。動作６２０で、フラッシュされたＮＴＣ＋Ｘよりも若いグループが存在するかどうかに関して決定される。より若いグループが存在しない場合、方法は動作６１６で終了する。少なくとも１つの実施形態において、データが戻されたとき、スレッドは完了の準備ができた「Ｘ」のグループを有することになる。
【００６６】
しかしながら、１つまたは複数のより若いグループが存在するとき、動作６２２で、フラッシュされたＮＴＣ＋Ｘよりも若いすべてのグループもフラッシュされ、動作６１６で、方法はスレッド（たとえば、次のスレッド）のディスパッチをブロックする。
【００６７】
動作６５０に進むと、スレッド・ディスパッチがブロックされる間に、データが戻されるかどうかに関して決定される。データが戻されるとき、動作６５２でスレッド（たとえば、次のスレッド）のディスパッチが可能であり、動作６５４で方法は終了する。しかしながら、動作６５０でデータが戻されないとき、方法は動作６５１へと進み、キャッシュ・ミスがより高いキャッシュ・レベルであるかどうかを決定する。キャッシュ・ミスがより高いキャッシュ・レベルでないものと決定されたとき、方法は動作６５０へと戻り、データが戻されるかどうかの分析を続ける。しかしながら、キャッシュ・ミスがより高いレベルであるものと決定されたとき、方法は動作６０４に戻り、キャッシュ階層レベル（たとえば、キャッシュ・ミスが検出された次の最高キャッシュ・レベル）に基づいて、データ待ち時間を決定する。動作６０４で、より高いキャッシュ・レベルに起因して新しいデータ待ち時間が決定され得るため、ＮＴＣグループに関連付けられた追加グループ（Ｘ）が、保留中のキャッシュ・ミスが存在するキャッシュ階層レベルに従って変動するデータ待ち時間に基づくことから、ＮＴＣ＋Ｘを改訂することができる。次いで、更新されたＮＴＣ＋Ｘを使用して、上記の方法を繰り返すことができる。
【００６８】
少なくとも１つの実施形態において、キャッシュ・ミス・バランス動作は、キャッシュ・ミス・バランス・フラッシュの実行前に、有効フラッシュ・ポイントの分析を実行することができる。図１０を参照すると、有効フラッシュ・ポイント（ＶＦＰ）サブベクトルおよび探索レンジ（ＳＲ）サブベクトルを含む、探索ベクトル７００が生成される。探索ベクトル７００は、６４のタグ７０２＿０〜７０２＿６３を含む。探索ベクトル７００は、８つの別個のレンジ、たとえば７０４ａ〜７０４ｈに分割される。したがって、別個のレンジは各々８つのタグを含む。８つのレンジは、最上位ビット・ストラテジ、すなわち３つの最上位ビットを使用して識別可能である。
【００６９】
次いで、レンジ７０４ａ〜７０４ｈのうちのいずれかにフラッシュ・ポイントが存在するかどうかを決定するために、分析が実行可能である。少なくとも１つの実施形態において、有効フラッシュ・ポイントとして選択されるべき第１のレンジは、フラッシュ要求タグに基づく。すなわち、フラッシュ要求タグが常駐するレンジは、第１のレンジが本明細書で説明するキャッシュ・ミス・バランス・フラッシュ動作に従ってフラッシュされるべきであることを示す。少なくとも１つの実施形態において、開始探索レンジをシフト（すなわち、増分）することによって、フラッシングのための後続のレンジを選択することができる。たとえば、フラッシングのための第２のレンジは、ｓｅａｒｃｈ＿ｓｔａｒｔ＿ｒａｎｇｅを１だけ右回転シフトすることによって選択され、フラッシングのための第３のレンジは、ｓｅａｒｃｈ＿ｓｔａｒｔ＿ｒａｎｇｅを２だけ右回転シフトすることなどによって選択される。少なくとも１つの実施形態において、分析は、最も古い有効フラッシュ・グループを識別し、キャッシュ・ミス・バランス・フラッシュを実行するために、識別された最も古い有効フラッシュ・グループを選択する。
【００７０】
有効フラッシュ・ポイント・ベクトルを使用して、有効なＮＴＣ＋Ｘフラッシュ・ポイントを探索することができる。有効フラッシュ・ポイント・ベクトルは、探索されるあらゆるグループ番号について有効なフラッシュ・ビットを含む。対応するグルーブ番号が有効フラッシュ・ポイントを表すことを示すために、有効フラッシュ・ビットは１（「１」）に設定される。待ち時間ベースのＮＴＣ＋Ｘフラッシュ・ポイントに対応するグループ番号で始まる有効フラッシュ・ビット・ベクトルにおいて、最初の１を見つける動作が実行される。最初の１を見つける動作によって、１つのロケーションが見つかった場合、その１つのロケーションは正しい有効なＮＴＣ＋Ｘフラッシュ・ポイントに対応する。最初の１を見つける動作によって「１」が見つからない場合、有効フラッシュ・ポイントは見つからない。最初の１を見つける動作を実行するための回路およびアルゴリズムは周知であり、したがって、それらの実装形態の詳細は省略する。
【００７１】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるためのコンピュータ可読プログラム命令を有する、コンピュータ可読記憶媒体（または媒体）を含み得る。
【００７２】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および記憶することが可能な、有形デバイスであり得る。コンピュータ可読記憶媒体は、たとえば、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または、上記の任意の好適な組み合わせであり得るが、限定されない。コンピュータ可読記憶媒体のより特定の例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピィ・ディスク、パンチカードなどの機械的に符号化されたデバイスまたは命令が記録された溝内の盛り上がった構造、および、上記の任意の好適な組み合わせを含む。本明細書で使用されるようなコンピュータ可読記憶媒体は、電波、または他の自由に伝搬する電磁波、導波路または他の伝送媒体（たとえば、光ファイバ・ケーブルを通過する光パルス）を介して伝搬する電磁波、あるいは、ワイヤを介して伝送される電気信号などの、それ自体が一過性の信号であるものと解釈されるべきではない。
【００７３】
本明細書で説明するコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、あるいは、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはワイヤレス・ネットワーク、あるいはそれらの組み合わせなどのネットワークを介して、外部コンピュータまたは外部記憶デバイスに、ダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイヤウォール、スイッチ、ゲートウェイ・コンピュータ、または、エッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体に記憶するために、コンピュータ可読プログラム命令を転送する。
【００７４】
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き側プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで作成されたソース・コードまたはオブジェクト・コードのいずれかであり得る。コンピュータ可読プログラム命令は、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン型ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、あるいは、全体的にリモート・コンピュータまたはサーバ上で、実行し得る。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む、任意のタイプのネットワークを介して、ユーザのコンピュータに接続され得るか、あるいは、外部コンピュータへの接続を（たとえば、インターネット・サービス・プロバイダを使用するインターネットを介して）行うことができる。いくつかの実施形態において、たとえば、プログラム可能論理回路、フィールド・プログラム可能ゲート・アレイ（ＦＰＧＡ）、またはプログラム可能論理アレイ（ＰＬＡ）を含む、電子回路は、本発明の態様を実行するために、電子回路を個人化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
【００７５】
本発明の態様は、本明細書において、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャートまたはブロック図あるいはその両方を参照しながら説明する。フローチャートまたはブロック図あるいはその両方の各ブロック、ならびに、フローチャートまたはブロック図あるいはその両方におけるブロックの組み合わせは、コンピュータ可読プログラム命令によって実装可能であることを理解されよう。
【００７６】
これらのコンピュータ可読プログラム命令は、機械を生成するために、汎用コンピュータ、特定用途向けコンピュータ、または他のプログラム可能データ処理装置の、プロセッサに提供され得るため、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行する命令は、フローチャートまたはブロック図あるいはその両方のブロック内に指定された機能／動作を実装するための手段を作成することになる。これらのコンピュータ可読プログラム命令は、コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはそれらの組み合わせに、特定の様式で機能するように指示可能な、コンピュータ可読記憶媒体内にも記憶され得るため、命令を記憶しているコンピュータ可読記憶媒体は、フローチャートまたはブロック図あるいはその両方のブロック内に指定された機能／動作の態様を実装する命令を含む、製品を含むことになる。
【００７７】
コンピュータ可読プログラム命令は、コンピュータ実装プロセスを生成するために、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実行させるように、コンピュータ、他のプログラム可能データ処理装置、または他のデバイス上にもロードされ得るため、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行する命令は、フローチャートまたはブロック図あるいはその両方のブロック内に指定された機能／動作を実装することになる。
【００７８】
図面内のフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。この点で、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実装するために１つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替実装形態において、ブロック内に示された機能は、図内に示された順序以外で実行し得る。たとえば、連続して示された２つのブロックは、実際にはほぼ同時に実行され得るか、または、ブロックは時には、関連する機能に依存して、逆の順序で実行され得る。ブロック図またはフローチャートあるいはその両方の各ブロック、および、ブロック図またはフローチャート内のブロックの組み合わせは、指定された機能または動作を実行するか、あるいは特定用途向けハードウェアおよびコンピュータ命令の組み合わせを実施する、特定用途向けハードウェア・ベース・システムによって、実装可能であることも留意されたい。
【００７９】
本明細書で使用される場合、「モジュール」という用語は、１つまたは複数のソフトウェアまたはファームウェア・プログラム、組み合わせ論理回路、または、説明する機能を提供する他の好適な構成要素、あるいはそれらの組み合わせを実行する、特定用途向け集積回路（ＡＳＩＣ）、電子回路、電子コンピュータ・プロセッサ（共有、専用、またはグループ）、およびメモリを指す。ソフトウェア内で実装される場合、モジュールは、処理回路によって読み取り可能であり、方法を実行するために処理回路によって実行するための命令を記憶する、非一過性の機械可読記憶媒体として、メモリ内に具体化することができる。
【００８０】
本発明の様々な実施形態を例示の目的で説明してきたが、網羅的であること、または開示された実施形態に限定されることは意図されていない。当業者であれば、説明した実施形態の範囲および思想を逸脱することなく、多くの修正および変形が明らかとなろう。本明細書で使用される用語は、実施形態の原理、実際の応用例、または市場で見られる技術を超える技術的改良を、最も良く説明するために、あるいは、本明細書で開示される実施形態を当業者が理解できるようにするために、選択されたものである。
【図１】
2020510255.tif 000003
【図２】
2020510255.tif 000004
【図３】
2020510255.tif 000005
【図４】
2020510255.tif 000006
【図５】
2020510255.tif 000007
【図６】
2020510255.tif 000008
【図７】
2020510255.tif 000009
【図８】
2020510255.tif 000010
【図９】
2020510255.tif 000011
【図１０】
2020510255.tif 000012
【国際調査報告】
2020510255.tif 000013
2020510255.tif 000014