(57)【特許請求の範囲】
【請求項１】
マイクロプロセッサであって、
当該マイクロプロセッサによって以前に実行された命令の特徴の予測履歴を保持するためのストレージを有する予測ユニットであり、該予測ユニットは、前記予測履歴を蓄積し、前記予測履歴を使用して、その後の命令実行に関連した予測を行い、
前記ストレージが、前記予測履歴を蓄積するために別々に制御可能な複数の部分を含む、予測ユニットと、
前記マイクロプロセッサがオペレーティング・システム・ルーチンを実行していることを検知し、且つ前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記ストレージの前記複数の部分のうちのフラクションのみを使用して前記予測履歴を蓄積するように前記予測ユニットを制御する制御ユニットと、を含み、
オペレーティング・システム・ルーチン識別子のテーブルをさらに含み、それぞれの識別子が、それぞれのオペレーティング・システム・ルーチンを識別し、それぞれの各オペレーティング・システム・ルーチンは、前記ストレージの前記複数の部分のうちのフラクションを指定するような関連する制御情報を有し、前記制御ユニットは、前記マイクロプロセッサが関連付けられたオペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、前記制御情報を使用するように前記予測ユニットを制御する、
マイクロプロセッサ。
【請求項２】
前記予測ユニットのストレージは、複数のウェイを有する連想キャッシュ・メモリを含み、
前記フラクションによって、前記ストレージの前記複数のウェイのうちのフラクションを指定し、前記制御ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用するように前記予測ユニットを制御する、
請求項１に記載のマイクロプロセッサ。
【請求項３】
前記予測ユニットのストレージは、複数のセットを有するインデックス付けされたキャッシュ・メモリを含み、
前記フラクションによって、前記ストレージの前記複数のセットのうちのフラクションを指定し、前記制御ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用するように前記予測ユニットを制御する、
請求項１に記載のマイクロプロセッサ。
【請求項４】
前記予測ユニットのストレージは、複数のエントリーを有するキューを含み、
前記フラクションによって、前記ストレージの前記複数のエントリーのうちのフラクションを指定し、前記制御ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用するように前記予測ユニットを制御する、
請求項１に記載のマイクロプロセッサ。
【請求項５】
前記オペレーティング・システム・ルーチン識別子及び関連付けられた制御情報は、所定のオペレーティング・システムがロードされているという検知に応答して、デバイス・ドライバによって前記マイクロプロセッサに提供される、
請求項１に記載のマイクロプロセッサ。
【請求項６】
前記オペレーティング・システム・ルーチン識別子及び関連付けられた制御情報は、所定のソフトウェア・アプリケーションが実行されているという検知に応答して、デバイス・ドライバによって前記マイクロプロセッサに提供される、
請求項１に記載のマイクロプロセッサ。
【請求項７】
前記予測ユニットは、メモリ曖昧性解消ユニットを含む、
請求項１に記載のマイクロプロセッサ。
【請求項８】
前記予測ユニットは、分岐予測ユニットを含む、
請求項１に記載のマイクロプロセッサ。
【請求項９】
前記予測ユニットは、データ・プリフェッチ・ユニットを含む、
請求項１に記載のマイクロプロセッサ。
【請求項１０】
マイクロプロセッサを動作させる方法であって、前記マイクロプロセッサは、該マイクロプロセッサによって以前に実行された命令の特徴の予測履歴を保持するためのストレージを備えた予測ユニットを有し、前記予測ユニットが、前記予測履歴を蓄積し、該予測履歴を使用して、その後の命令実行に関連した予測を行い、前記ストレージが、前記予測履歴を蓄積するために別々に制御可能な複数の部分を含み、当該方法が、
前記マイクロプロセッサがオペレーティング・システム・ルーチンを実行していることを検知するステップと、
前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記ストレージの前記複数の部分のうちのフラクションのみを使用して前記予測履歴を蓄積するように前記予測ユニットを制御するステップと、を含み、
オペレーティング・システム・ルーチン識別子を受け取るステップをさらに含み、それぞれの識別子が、それぞれのオペレーティング・システム・ルーチンを識別し、それぞれの各オペレーティング・システム・ルーチンは、前記ストレージの前記複数の部分のうちのフラクションを指定する関連する制御情報を有し、制御ユニットは、前記マイクロプロセッサが関連付けられたオペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、前記制御情報を使用するように前記予測ユニットを制御する、
方法。
【請求項１１】
前記予測ユニットのストレージは、複数のウェイを有する連想キャッシュ・メモリを含み、前記フラクションによって、前記ストレージの前記複数のウェイのうちのフラクションを指定し、前記予測ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用する、
請求項１０に記載の方法。
【請求項１２】
前記予測ユニットのストレージは、複数のセットを有するインデックス付けされたキャッシュ・メモリを含み、前記フラクションによって、前記ストレージの前記複数のセットのうちのフラクションを指定し、前記予測ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用する、
請求項１０に記載の方法。
【請求項１３】
前記予測ユニットのストレージは、複数のエントリーを有するキューを含み、前記フラクションによって、前記ストレージの前記複数のエントリーのうちのフラクションを指定し、前記予測ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用する、
請求項１０に記載の方法。
【請求項１４】
前記オペレーティング・システム・ルーチン識別子及び関連付けられた制御情報は、所定のオペレーティング・システムがロードされているという検知に応答して、デバイス・ドライバによって前記マイクロプロセッサに提供される、
請求項１０に記載の方法。
【請求項１５】
前記オペレーティング・システム・ルーチン識別子及び関連付けられた制御情報は、所定のソフトウェア・アプリケーションが実行されているという検知に応答して、デバイス・ドライバによって前記マイクロプロセッサに提供される、
請求項１０に記載の方法。
【請求項１６】
その後の命令の実行を予測するために予測ユニットによって使用される、以前に実行された命令の予測履歴を蓄積するストレージを有する前記予測ユニットを有するマイクロプロセッサのパフォーマンスを改善するための方法であって、前記予測ユニットは、前記予測履歴を蓄積するために前記ストレージのフラクションのみを使用するように動的に制御可能であり、当該方法が、
ソフトウェア・アプリケーションによって呼び出された複数のオペレーティング・システム・ルーチンを識別するステップと、
前記複数のオペレーティング・システム・ルーチンのそれぞれによって実行された命令のそれぞれの数をカウントするステップと、
実行された命令の前記それぞれの数に基づいて、前記複数のオペレーティング・システム・ルーチンのサブセットを選択するステップと、
前記ソフトウェア・アプリケーションのパフォーマンスを最適化する前記フラクションの値を特定するために、前記複数のオペレーティング・システム・ルーチンの前記サブセットに関する前記予測ユニットのストレージの前記フラクションの値を変えることによってパフォーマンス分析を行うステップと、を含む、
方法。
【請求項１７】
前記複数のオペレーティング・システム・ルーチンの前記サブセットを選択する前記ステップは、前記複数のオペレーティング・システム・ルーチンのうちで、それぞれの数が、前記サブセットから除外される前記複数のオペレーティング・システム・ルーチンと比べて中程度の数の範囲内にあるオペレーティング・システム・ルーチンを前記サブセット内に含めるステップを含む、
請求項１６に記載の方法。
【請求項１８】
前記複数のオペレーティング・システム・ルーチンのそれぞれによって実行された命令の前記それぞれの数をカウントする前記ステップは、前記複数のオペレーティング・システム・ルーチンのそれぞれによって実行された命令の平均及び合計のそれぞれの数をカウントするステップを含む、
請求項１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１４年１月２７日に出願された米国特許非仮出願第１４／１６５，３５４号の一部継続出願（ＣＩＰ：ｃｏｎｔｉｎｕａｔｉｏｎ−ｉｎ−ｐａｒｔ）であり、その米国特許非仮出願第１４／１６５，３５４号は、２０１３年６月１０日に出願された米国特許仮出願第６１／８３３，０４４号に基づく優先権を主張するものであり、それらの出願のそれぞれは、その全体が参照によって本明細書に組み込まれる。本出願は、２０１４年１０月２８日に出願された米国特許仮出願第６２／０６９，６０２号に基づく優先権を主張するものであり、その米国特許仮出願第６２／０６９，６０２号は、その全体が参照によって本明細書に組み込まれる。
【背景技術】
【０００２】
現代のマイクロプロセッサは、自らのパフォーマンスを改善するためにさまざまな予測技術を採用している。たとえば、分岐予測子は、分岐命令が受け入れられるか、又は受け入れられないかどうかを予測し、受け入れられる場合には、その分岐命令のターゲット・アドレスを予測する。動的分岐予測子は、さまざまな分岐命令実行の結果の履歴を蓄積し、その履歴に基づいて自らの予測を行う。動的分岐予測子の予測精度は主に、その動的分岐予測子が蓄積することができる履歴の量の関数である。所与の時間内にプログラムによって実行される分岐命令のセットが、予測履歴内に含まれるのに十分なだけ小さい限り、精度は非常に高くなることが可能である。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかしながら、予測精度は、特定のイベントによって大幅に低減される場合がある。そのような１つのイベントは、現在実行中のプログラムが一時的に割り込みを受けて、その間に別のプログラムを実行する場合である。たとえば、パケットが、ネットワーク・インターフェース・コントローラによって受信される場合があり、そのネットワーク・インターフェース・コントローラは、割り込みをプロセッサにシグナリングする。プロセッサは、その割り込みにサービス提供するためにコントロールをオペレーティング・システムへ移し、それによって、現在実行中のプログラムＡは、実行中のプログラムＡにオペレーティング・システムがコントロールを戻すまで、一時的に停止される。プロセッサがオペレーティング・システムの分岐命令を実行している間に、そのことは、プログラムＡのための分岐予測子内の予測履歴を汚していることになる。これによって、プログラムＡの分岐を予測するための分岐予測子の精度が低減される可能性が高い。
【課題を解決するための手段】
【０００４】
一態様においては、本発明は、マイクロプロセッサを提供する。そのマイクロプロセッサは、そのマイクロプロセッサによって以前に実行された命令の特徴の予測履歴を保持するためのストレージを有する予測ユニットを含む。予測ユニットは、予測履歴を蓄積し、その予測履歴を使用して、その後の命令実行に関連した予測を行う。ストレージは、予測履歴を蓄積するために別々に制御可能な複数の部分を含む。マイクロプロセッサはまた、制御ユニットを含み、その制御ユニットは、マイクロプロセッサがオペレーティング・システム・ルーチンを実行していることを検知し、マイクロプロセッサがオペレーティング・システム・ルーチンを実行している間に、予測履歴を蓄積するために、ストレージの複数の部分のうちのフラクションのみを使用するように予測ユニットを制御する。
【０００５】
別の態様においては、本発明は、マイクロプロセッサによって以前に実行された命令の特徴の予測履歴を保持するためのストレージを備えた予測ユニットを有するマイクロプロセッサを機能させるための方法を提供し、予測ユニットは、予測履歴を蓄積し、その予測履歴を使用して、その後の命令実行に関連した予測を行い、ストレージは、予測履歴を蓄積するために別々に制御可能な複数の部分を含む。この方法は、マイクロプロセッサがオペレーティング・システム・ルーチンを実行していることを検知するステップと、マイクロプロセッサがオペレーティング・システム・ルーチンを実行している間に、予測履歴を蓄積するために、ストレージの複数の部分のうちのフラクションのみを使用するように予測ユニットを制御するステップとを含む。
【０００６】
さらに別の態様においては、本発明は、その後の命令の実行を予測するために、予測ユニットによって使用された以前に実行された命令の予測履歴を蓄積するストレージを有する予測ユニットを有するマイクロプロセッサのパフォーマンスを改善するための方法を提供し、予測ユニットは、予測履歴を蓄積するためにストレージのフラクションのみを使用するように動的に制御可能である。この方法は、ソフトウェア・アプリケーションによって呼び出された複数のオペレーティング・システム・ルーチンを識別するステップと、それらの複数のオペレーティング・システム・ルーチンのそれぞれによって実行された命令のそれぞれの数をカウントするステップとを含む。この方法はまた、実行された命令のそれぞれの数に基づいて、複数のオペレーティング・システム・ルーチンのサブセットを選択するステップを含む。この方法はまた、ソフトウェア・アプリケーションのパフォーマンスを最適化するフラクションの値を特定するために、複数のオペレーティング・システム・ルーチンのサブセットに関する予測ユニットのストレージのフラクションの値を変えることによってパフォーマンス分析を行うステップを含む。
【図面の簡単な説明】
【０００７】
【図１】マイクロプロセッサのブロック図である。
【図２】図１のマイクロプロセッサのオペレーションを示すフローチャートである。
【図３】代替実施形態による、図１のマイクロプロセッサのオペレーションを示すフローチャートである。
【図４】代替実施形態による、図１のマイクロプロセッサのオペレーションを示すフローチャートである。
【図５】制御情報テーブルを示すブロック図である。
【図６】予測履歴キャッシュを示すブロック図である。
【図７】代替実施形態による、予測履歴キャッシュを示すブロック図である。
【図８】予測履歴キューを示すブロック図である。
【図９】図５のテーブルに投入する値を生成するためのプロセスを示すフローチャートである。
【図１０】図１のマイクロプロセッサを含むシステムのオペレーションを示すフローチャートである。
【図１１】代替実施形態による、図１のマイクロプロセッサを含むシステムのオペレーションを示すフローチャートである。
【発明を実施するための形態】
【０００８】
予測履歴の蓄積及びこの予測履歴を使用した予測ユニット（分岐予測子、データ・プリフェッチャー、及びストア衝突検知予測子など）による予測を選択的に一時停止して、動的な予測が一時停止されている間に静的な予測を使用することを選ぶことによってマイクロプロセッサのパフォーマンスを改善することができる実施形態について説明する。より具体的には、マイクロプロセッサがいくつかのスレッドを実行している一方でその他のスレッドを実行していない間に、予測履歴の蓄積及び使用を一時停止することが可能である。たとえば、一時停止は、スレッドが実行している特権レベル、より具体的には、リング０とも呼ばれる、ｘ８６アーキテクチャー・プロセッサの現在特権レベル（ＣＰＬ：ｃｕｒｒｅｎｔ  ｐｒｉｖｉｌｅｇｅ  ｌｅｖｅｌ）ゼロなどのスーパーバイザ特権レベルでスレッドが実行しているか否かに基づいて選択的にすることが可能である。別の例に関しては、一時停止は、スレッドが割り込みハンドラであるかどうかなど、スレッドのタイプに基づいて選択的にすることが可能である。さらに別の例に関しては、一時停止は、新しいスレッドへの移行がシステム・コール命令に応答して行われたかどうかに基づいて選択的にすることが可能である。さらに別の例に関しては、マイクロプロセッサが、スレッドの前の実行インスタンスに関する情報を収集し、一時停止は、命令の長さ及びパフォーマンス情報などの情報に基づいて選択的にすることが可能である。さらなる例に関しては、一時停止は、スレッドのアイデンティティーに基づいて選択的にすることが可能である。スレッド・アイデンティティーは、たとえば、移行をもたらしたイベントのタイプ、イベントが発生したときのプロセッサのアーキテクチャー状態、及びそれらの組合せに基づいて特定することが可能である。イベント・タイプは、たとえば、システム・コールの実行、ソフトウェア割り込み命令の実行、特権間又はタスク・スイッチ・プロシージャー・コールの実行、及び例外状況の検知を含むことができる。さらにまた、マイクロプロセッサは、予測履歴の蓄積及び使用の一時停止中に、予測履歴をローカル・ストレージに保存して復元することができる。
【０００９】
用語集
予測ユニットは、マイクロプロセッサ上で実行される命令のストリームが取るであろうアクションに関する予測を行うマイクロプロセッサのハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組合せである。予測は、分岐命令が、マイクロプロセッサに指示して、分岐命令のターゲット・アドレスの予測；ストリームの命令によってアクセスされるであろうデータの予測；ストア衝突が生じるかどうかの予測；の分岐を行うかどうかの予測含むことができるが、それらには限定されない。予測ユニットは、マイクロプロセッサによって実行される命令の特徴の履歴に基づいて予測を行い、その予測は、動的な予測と呼ばれる。予測ユニットは、マイクロプロセッサがストリームの命令を実行する際に、履歴を蓄積する。履歴は、分岐命令が、マイクロプロセッサに指示して、受け入れられた分岐命令のターゲット・アドレス；ストリームの命令によってロード又は格納されたデータのアドレス；キャッシュ可能なメモリ・ロケーションを指定するストア命令に関連した情報、たとえば、ストア命令のアドレス、ストア・アドレスを計算するために使用されたソースの識別子、ストア・データが依存する命令の並べ替えバッファ・インデックス、以前にストア命令と衝突したロード命令のアドレス及び並べ替えバッファ・インデックス、衝突するロード命令とストア命令との間における並べ替えバッファ・インデックス差分、衝突するロード命令がリプレイされた回数のインジケータなど；の分岐を行うかどうかの結果を含むことができるが、それらには限定されない。予測ユニットは、履歴に基づかずに予測を行うこともでき、その予測は、静的な予測と呼ばれる。
【００１０】
マイクロプロセッサの特権レベルは、マイクロプロセッサの命令セット・アーキテクチャーによって定義され、メモリ領域、Ｉ／Ｏポート、及び命令セットの特定の命令などのシステム・リソースへの現在実行中のプログラムのアクセスを制御する。
【００１１】
スレッドは、マイクロプロセッサによって実行される一連の命令である。
【００１２】
プロセスは、オペレーティング・システムによってその他のプロセスとともに管理されるスレッド及びその関連付けられた状態である。オペレーティング・システムは、プロセスにプロセス識別子を割り振る。
【００１３】
ここで図１を参照すると、マイクロプロセッサ１００のブロック図が示されている。マイクロプロセッサ１００は、予測ユニット１０９を含む。予測ユニット１０９は、制御ユニット１２４及び予測履歴ストレージ１０８に結合されている。制御ユニット１２４は、リタイア済み(retired)命令カウンタ１１３と、パフォーマンス・カウンタ１１４と、現在特権レベル・レジスタ１１１と、最適化情報１１２を保持するためのストレージとに結合される。一実施形態においては、マイクロプロセッサ１００は、命令キャッシュと、命令変換ユニット又は命令デコーダと、レジスタ・リネーミング・ユニットと、リザベーション・ステーションと、データ・キャッシュと、実行ユニットと、メモリ・サブシステムと、並べ替えバッファを含むリタイア・ユニットとを含む機能ユニット（図示せず）の１つ又は複数のパイプラインを含む。好ましくは、マイクロプロセッサ１００は、スーパースカラのアウトオブオーダー（順序に関係ない）実行のマイクロアーキテクチャーを含む。予測ユニット１０９は、マイクロプロセッサ１００のさまざまな機能ユニット内に組み込むことが可能であり、又は機能ユニットそのものとすることが可能である。
【００１４】
予測ユニット１０９は、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組合せを含む。予測ユニット１０９は、予測履歴１３２Ａを格納するためのストレージ・アレイを含む分岐予測ユニット１０２と、予測履歴１３２Ｂを格納するためのストレージ・アレイを含むデータ・プリフェッチ・ユニット１０４と、予測履歴１３２Ｃを格納するためのストレージ・アレイを含むストア衝突予測ユニット１０６とを含む。それらの予測履歴は、個別に予測履歴１３２と呼ばれ、又は総称して予測履歴１３２と呼ばれる。予測ユニット１０９は、推論的なオペレーションを通じてマイクロプロセッサ１００のパフォーマンスを改善すること及び／又は電力消費を低減することを試みる目的で、命令／データ処理のさまざまな態様に関する予測を行うために各自の予測履歴１３２を使用する。より具体的には、分岐予測ユニット１０２は、マイクロプロセッサ１００によって実行された分岐命令の命令アドレス、（受け入れられた、又は受け入れられなかった）指示、及びターゲット・アドレスの履歴を蓄積して、分岐予測ユニット１０２が、それらの分岐命令のその後の実行インスタンスの指示及びターゲット・アドレスを動的に予測することを可能にする。動的な分岐予測技術は、分岐予測の技術分野においては、よく知られている。データ・プリフェッチ・ユニット１０４は、キャッシュ可能なメモリ領域へのプログラム命令によるアクセスの履歴を蓄積して、キャッシュ可能なメモリ領域からのどのデータがプログラムによって今後アクセスされることになるかを予測するために使用するメモリ・アクセス・パターンを検知して、その予測されたデータを、プログラムがそのデータを要求する前に、システム・メモリからマイクロプロセッサ１００のキャッシュ・メモリへとプリフェッチして、メモリ・アクセス時間を低減する（システム・メモリの待ち時間は、キャッシュ・メモリの待ち時間よりもはるかに長いためである）。動的なデータ・プリフェッチ技術は、データ・プリフェッチングの技術分野においては、よく知られている。ストア衝突予測ユニット１０６は、キャッシュ可能なメモリ位置を指定するストア命令の履歴を蓄積して、ストア衝突がいつ生じることになるかを予測する。ストア衝突は、より新しいロード命令が、より古いストア命令のデータと重なるデータを指定する場合に生じる。ストア衝突を予測することによって、マイクロプロセッサ１００が、データをストア命令からロード命令へ推論的に転送すること、及び／又は衝突するロード命令を、より古いストア命令に対して順序から外れて実行するのを回避することを可能にすることができる。実施形態は、これらの特定のタイプの予測ユニットに限定されるものではなく、命令がマイクロプロセッサ１００によって実行される際にそれらの命令の特徴の履歴を蓄積するその他のタイプの予測ユニットを含むことができ、それらの特徴は、予測ユニットが、マイクロプロセッサ１００のパフォーマンスを高めること、及び／又はその電力消費を低減することを試みるために、その後に実行される命令の複数の態様に関する予測を行うこと、又はその他の推論的なオペレーションを実行することを可能にする上で役立つということを理解されたい。
【００１５】
予測ユニット１０９のうちのそれぞれによって行われる動的な予測、すなわち、予測履歴１３２を使用して行われる予測に加えて、予測ユニット１０９のうちのそれぞれはまた、静的な予測、すなわち、予測履歴１３２の使用を伴わずに行われる予測を行うように構成される。たとえば、一実施形態においては、分岐予測ユニット１０２は、逆方向であるターゲット・アドレスを有するすべての分岐命令（たとえば、負の値であるオフセットを有する相対分岐）が受け入れられ、順方向であるターゲット・アドレスを有するすべての分岐命令が受け入れられないであろうと静的に予測し、これは、以前に実行された命令のいかなる履歴も必要としない。別の例に関しては、一実施形態において、データ・プリフェッチ・ユニット１０４は、キャッシュ可能なメモリにプログラムがアクセスしたことを検知した場合には、データの次なるシーケンシャル・キャッシュ・ラインが必要とされるであろうと静的に予測し、したがって、データの次なるシーケンシャル・キャッシュ・ラインをプリフェッチする。静的な予測方法も、中央処理装置の技術分野においては、よく知られている。
【００１６】
一実施形態においては、予測履歴ストレージ１０８は、以降でさらに詳細に説明するように、ユーザ特権レベルからスーパーバイザ特権レベルへの移行など、１つのスレッドを実行させることから、別のスレッドを実行させることへの移行をマイクロプロセッサ１００に行わせるイベントに応答して予測履歴１３２を保存するために、及びスーパーバイザ特権レベルからユーザ特権レベルへ戻る移行、好ましくは、スーパーバイザ特権レベルへの移行が実行されたときに実行していたのとは異なるユーザ・プロセスへ戻る場合の移行をマイクロプロセッサ１００に行わせるイベントに応答して予測履歴１３２を復元するために、予測ユニット１０９によって使用される。
【００１７】
現在特権レベル・レジスタ１１１は、マイクロプロセッサ１００の現在特権レベルを格納する。カリフォルニア州サンタクララのインテル・コーポレーションによるＩｎｔｅｌ  ６４及びＩＡ−３２アーキテクチャー・ソフトウェア開発者のマニュアル、合併巻：１、２Ａ、２Ｂ、２Ｃ、３Ｂ、及び３Ｃ、注文番号３２５４６４−０４３ＵＳ、２０１２年５月において効果的に説明されているｘ８６アーキテクチャー（別称として、Ｉｎｔｅｌ  ＩＡ−３２アーキテクチャー及び／又はＩｎｔｅｌ  ６４アーキテクチャーとして知られている）にマイクロプロセッサ１００が実施形態においては実質的に準拠している。とりわけ、ｘ８６の実施形態においては、現在特権レベル・レジスタ１１１は、マイクロプロセッサ１００が、現在特権レベル０、１、２、又は３において、すなわち、リング０、リング１、リング２、又はリング３において実行しているかどうかを示す。リング０は、最も特権の高いレベルであり、リング３は、最も特権の低いレベル（ユーザ特権レベル）である。リング０、１、及び２は、スーパーバイザ特権レベルである。
【００１８】
リタイア済み命令カウンタ１１３は、命令がリタイアするたびにインクリメントを行う。以降でさらに詳細に説明するように、マイクロプロセッサ１００がスレッドを実行させることを開始したときの、たとえばリング０に入ったときの命令カウンタ１１３の値を、マイクロプロセッサ１００が別のスレッドを実行することを開始したときの、たとえばリング０から出たときの命令カウンタ１１３の値から差し引くことによって、制御ユニット１２４は、いくつの命令がそのスレッドによってリタイアされたかを特定することができる。一実施形態においては、命令カウンタ１１３は、リタイアしたマクロ命令（すなわち、ｘ８６命令などのアーキテクチャー命令）の数をカウントし、その一方で別の実施形態においては、命令カウンタ１１３は、リタイアしたマイクロ命令（すなわち、マイクロプロセッサ１００のマイクロアーキテクチャー命令セットによって定義された非アーキテクチャー命令であり、マイクロプロセッサ１００の命令トランスレータによってマクロ命令がこの非アーキテクチャー命令へと変換され、この非アーキテクチャー命令は、マイクロプロセッサ１００の実行ユニットによって実行される）の数をカウントする。
【００１９】
パフォーマンス・カウンタ１１４は、マイクロプロセッサ１００のパフォーマンス及び／又は電力消費に関連した多くの態様をカウントする複数のカウンタを含む。一実施形態においては、パフォーマンス・カウンタ１１４は、予測された分岐命令；正しく予測された分岐命令；誤って予測された分岐命令；データ・プリフェッチによって割り当てられたキャッシュ・ライン；非プリフェッチ・メカニズム、たとえば、デマンド・ロード／ストア又はダイレクト・メモリ・アクセス（ＤＭＡ）要求によって割り当てられたキャッシュ・ライン；データ・プリフェッチによって割り当てられたキャッシュ・ラインへのプログラム・アクセス；使用される前にエビクト(evict)されるデータ・プリフェッチによって割り当てられたキャッシュ・ライン；ストア衝突予測；検知された実際のストア衝突；をカウントする。
【００２０】
最適化情報１１２は、本明細書において、特に図３の実施形態に関してさらに詳細に説明するように、たとえば、スーパーバイザ・レベルのオペレーション中に、予測履歴１３２の蓄積及び使用を選択的に一時停止するために使用される。
【００２１】
制御ユニット１２４は、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組合せを含む。制御ユニット１２４は、自分の入力（主に現在特権レベル１１１、最適化情報１１２、リタイア済み命令カウンタ１１３、パフォーマンス・カウンタ１１４、スレッド移行イベント・タイプ、及びアーキテクチャー状態）に基づいて、予測ユニット１０９に対して、各自の予測履歴１３２を蓄積すること及びそれらの予測履歴１３２を使用して予測を行うことを継続するように、若しくは一時停止するように、並びに／又は予測子履歴ストア１０８に予測履歴１３２を保存するように／予測子履歴ストア１０８から予測履歴１３２を復元するように制御を行う。一実施形態においては、制御ユニット１２４は、ハードウェア状態マシン、マイクロコード、又はハードウェア状態マシン及びマイクロコードの組合せを含む。一実施形態においては、マイクロコードは、マイクロプロセッサ１００の実行ユニットによって実行される命令を含む。
【００２２】
一実施形態においては、マイクロコードのフェッチングを制御するマイクロコード・ユニット（図示せず）が、自分自身のフェッチ・ユニット、又はシーケンサを含み、ユーザ・プログラムの分岐命令のみを予測する分岐予測ユニット１０２を採用しない。
【００２３】
次いで図２を参照すると、図１のマイクロプロセッサ１００のオペレーションを示すフローチャートが示されている。フローは、ブロック２０２において開始する。
【００２４】
ブロック２０２において、ユーザ特権レベル、たとえばリング３で機能するスレッドを実行している間に、予測ユニット１０９のうちのそれぞれは、マイクロプロセッサ１００がそのスレッドの命令を処理している際に、各自の予測履歴１３２を蓄積し、その予測履歴１３２を使用して動的な予測を行う。フローは、ブロック２１２へ進む。
【００２５】
ブロック２１２において、制御ユニット１２４は、スーパーバイザ特権レベル、たとえばリング０で機能するようマイクロプロセッサ１００に指示するイベントを検知する。そのイベントはまた、マイクロプロセッサ１００に、現在実行中のスレッドとは異なるスレッドへコントロールを移す。そのイベントの例としては、システム・コール命令（たとえば、ｘ８６  ＳＹＳＥＮＴＥＲ／ＳＹＳＣＡＬＬ命令）、ソフトウェア割り込み（たとえば、ｘ８６  ＩＮＴ命令）、又は特権レベル間若しくはタスク・スイッチ・プロシージャー・コール命令（たとえば、ｘ８６  ＣＡＬＬ命令）などの命令の実行；及びハードウェア割り込み（たとえば、タイマー・ティック、Ｉ／Ｏデバイス）又はページ・フォールトなどの例外状況の検知が含まれるが、それらには限定されない。一実施形態においては、そのイベントは、マイクロプロセッサ１００に、コントロールをマイクロコードへ移し、マイクロコードは、さまざまなオペレーション（たとえば、許可チェック）を実行した後に、そのイベントを取り扱うことになるオペレーティング・システムのリング０スレッド又はルーチンへコントロールを移す。フローは、ブロック２２２へ進む。
【００２６】
ブロック２２２において、制御ユニット１２４は、ブロック２１２において検知されたイベントに応答して、予測ユニット１０９に対して、マイクロプロセッサ１００がスーパーバイザ特権レベルで新しいスレッドを実行している間は、各自の予測履歴１３２を蓄積すること及びその予測履歴を使用して予測を行うことを一時停止するようにコントロールを行う。しかしながら、予測ユニット１０９は、予測履歴１３２の使用を必要としない静的な予測を引き続き行う。一実施形態においては、制御ユニット１２４は、予測ユニット１０９のうちのいくつかに関しては、予測履歴１３２を蓄積すること及び予測を行うことを一時停止することができるが、その他の予測ユニット１０９に関しては、蓄積すること及び予測を行うことを一時停止することはできない。さらに、どの予測ユニット１０９を一時停止するか、及びどれを一時停止しないかに関する決定は、マイクロプロセッサ１００が機能する際に動的にすることが可能である。たとえば、一時停止する予測ユニット１０９のサブセット及び一時停止しない予測ユニット１０９のサブセットは、オペレーティング・システム又はＢＩＯＳなどによってプログラム可能とすることができる。別の例に関しては、それらのサブセットは、ユーザによって、又はサービス担当者によって、マイクロプロセッサ１００の製造中に、又は現場において飛ぶことがあるヒューズを介して構成可能とすることができる。別の例に関しては、サブセットは、以降で図３の実施形態に関して説明するように、実行することになる特定のリング０スレッドに基づいて特定することが可能である。フローは、ブロック２３２へ進む。
【００２７】
ブロック２３２において、制御ユニット１２４は、ユーザ特権レベル、たとえばリング３で機能するようマイクロプロセッサ１００に指示するイベントを検知する。そのイベントはまた、マイクロプロセッサ１００に、現在実行中のスレッドとは異なるスレッドへコントロールを移す。そのイベントの例としては、システム・コール・リターン命令（たとえば、ｘ８６  ＳＹＳＥＸＩＴ／ＳＹＳＲＥＴ命令）、割り込み若しくは例外からのリターン（たとえば、ｘ８６  ＩＲＥＴ命令）、又はプロシージャー命令からの特権レベル間リターン（たとえば、ｘ８６  ＲＥＴＦ命令）などの命令の実行が含まれるが、それらには限定されない。一実施形態においては、そのイベントは、マイクロプロセッサ１００に、コントロールをマイクロコードへ移し、マイクロコードは、さまざまなオペレーションを実行した後に、リング３プロセスへコントロールを移す。フローは、ブロック２４２へ進む。
【００２８】
ブロック２４２において、予測ユニット１０９は、マイクロプロセッサ１００が命令を処理している際に、各自の予測履歴１３２を蓄積すること及び予測履歴１３２を使用して動的な予測を行うことを再開する。フローは、ブロック２４２において終了する。
【００２９】
確認されるように、ブロック２４２においてコントロールが戻される先のリング３プロセスが、ブロック２１２においてイベントによって割り込まれたのと同じリング３プロセスである場合には、予測履歴１３２は、リング０移行の前の状態、すなわち、リング３プロセスが割り込まれたときの状態と同じはずである。なぜなら、それらの予測履歴１３２は、リング０スレッドによって汚されていないためである。したがって、予測ユニット１０９は、有利なことに、イベントの後にリング３プロセスのスレッドに関して前と同じぐらい正確な動的な予測を引き続き行うことになる可能性が非常に高い。また、リング０スレッドを実行しているときの予測パフォーマンスは、リング３プロセスを実行しているときの予測パフォーマンスよりも低くなる可能性が高い。なぜなら、リング０スレッド予測に関しては、静的な予測のみが使用されることになるからである。しかしながら、リング０スレッド及び／又はリング３プロセスの特徴に応じて、リング３プロセス予測履歴の汚れが少なくなること又はなくなることに起因するリング３パフォーマンスの改善が、特にリング０スレッドの稼働が短時間及び／又は低頻度である場合には、リング０パフォーマンスにおけるロスよりも優勢となることを期待して、リング０スレッドを実行しているときのパフォーマンスを犠牲にすることが有利である場合がある。
【００３０】
次いで図３を参照すると、代替実施形態による、図１のマイクロプロセッサ１００のオペレーションを示すフローチャートが示されている。図３のいくつかのブロックは、図２のブロックと同じであり、同じ番号が付けられている。好ましくは、リセット時に、制御ユニット１２４は、以降でさらに詳細に説明する最適化情報１１２のデータ構造を初期化する。フローは、ブロック２０２において開始する。
【００３１】
ブロック２０２において、スレッドがユーザ特権レベル、たとえばリング３で機能している間に、予測ユニット１０９のうちのそれぞれは、マイクロプロセッサ１００が命令を処理している際に、各自の予測履歴１３２を蓄積し、その予測履歴１３２を使用して動的な予測を行う。フローは、ブロック２１２へ進む。
【００３２】
ブロック２１２において、制御ユニット１２４は、スーパーバイザ特権レベル、たとえばリング０で機能するようマイクロプロセッサ１００に指示する、及びマイクロプロセッサ１００に、現在実行中のスレッドとは異なるスレッドへコントロールを移すイベントを検知する。フローは、ブロック３１１へ進む。
【００３３】
ブロック３１１において、制御ユニット１２４は、リング０において実行することになるスレッドを識別することを試みて、リング０スレッドに関する識別子を生成する。一実施形態においては、以降で説明する最適化情報１１２のデータ構造は、制御ユニット１２４によってマイクロプロセッサ１００のプライベート・メモリ内に保持されているテーブルを含む。そのテーブル内のそれぞれのエントリーは、別々のリング０スレッド識別子に関連付けられている。リング０スレッド識別子を生成するために採用されている機能は、スレッド移行が検知されたときのマイクロプロセッサ１００のイベント・タイプ及び状態値などのさまざまな入力を受け取ることができる。イベント・タイプは、図２のブロック２１２に関して上述されているさまざまなイベント・タイプのうちの１つとすることが可能であるが、それらの例には限定されない。状態値は、汎用レジスタ値、モデル固有のレジスタ値、システム・コールを行ったリング３プロセスの命令ポインタ（ＩＰ：ｉｎｓｔｒｕｃｔｉｏｎ  ｐｏｉｎｔｅｒ）又はプログラム・カウンタ（ＰＣ）値、ソフトウェア割り込み、特権間又はタスク・スイッチ・プロシージャー・コール、及び割り込み又は例外に関連付けられた割り込みベクトル番号とすることが可能であるが、これらの例には限定されない。状態値の入力は、イベント・タイプに応じて変えることが可能である。たとえば、リング３プロセスが、（たとえば、ｘ８６  ＳＹＳＥＮＴＥＲ命令を介して）Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録商標）オペレーティング・システムに対してシステム・コールを行った場合には、Ｗｉｎｄｏｗｓは、ｘ８６  ＥＡＸレジスタ内の値に、そしていくつかのインスタンスにおいては、その他のレジスタの値に応じて、別々のスレッドを実行させるということが確認されている。したがって、一実施形態においては、イベント・タイプがシステム・コール命令である場合には、制御ユニット１２４は、ＥＡＸレジスタの値を検査し、別々のＥＡＸ値ごとに別々のリング０識別子を生成する。その他のオペレーティング・システムに関しては、その他の実施形態が想定される。別の例に関しては、制御ユニット１２４は、別々の割り込みベクトル値ごとに別々のリング０識別子値を生成することができる。フローは、ブロック３１３へ進む。
【００３４】
ブロック３１３において、制御ユニット１２４は、ブロック３１１において生成されたリング０識別子を最適化情報１１２のデータ構造内で探して、リング０識別子によって識別されたリング０スレッドに関連付けられた最適化情報１１２を得る。一実施形態においては、リング０識別子が最適化情報１１２のデータ構造内に存在しない場合には、制御ユニット１２４は、デフォルトのリング０エントリー・アクション（すなわち、予測履歴１３２を蓄積するか否か、及びその予測履歴１３２を使用して動的な予測を行うか否かに関してリング０へのエントリーに関連付けられたデフォルトのアクション）を実行し、リング０識別子に関する最適化情報１１２のデータ構造内にエントリーを割り当てる。一実施形態においては、デフォルトのリング０エントリー・アクションは、予測履歴１３２を蓄積すること及びそれらの予測履歴１３２を使用して予測を行うことを一時停止することである。リング０識別子が存在している場合には、制御ユニット１２４は、関連付けられた最適化情報１１２に基づいて、デフォルトのリング０エントリー・アクションをオーバーライドするかどうかを決定する。一実施形態においては、最適化情報１１２は、リング０スレッドに関連付けられた長さを含み、制御ユニット１２４は、リング０スレッドの長さが所定の長さよりも短い場合には、予測履歴１３２を蓄積及び使用することを一時停止することを、及びそうでない場合には、予測履歴１３２を蓄積及び使用することを継続することを決定する。一実施形態においては、その長さは、リタイア済み命令カウンタ１１３を使用して得られる、リング０スレッドの前の実行中にリタイアされた命令の数として表される。一実施形態においては、最適化情報１１２は、リング０スレッドの前の実行インスタンス中に、及び／又はリング０スレッドの前の実行インスタンスの後のリング３プロセスの前の実行中に、予測履歴１３２に基づいて行われた予測の有効性に関する情報を含む。一実施形態においては、その有効性は、パフォーマンス・カウンタ１１４を使用して得られる。フローは、決定ブロック３１５へ進む。
【００３５】
決定ブロック３１５において、制御ユニット１２４は、予測履歴１３２を蓄積すること及びそれらの予測履歴１３２を使用して予測を行うことを一時停止するかどうかを決定する。そうである場合には、フローはブロック２２２へ進み、そうでない場合には、フローはブロック３２１へ進む。予測履歴１３２を蓄積するか否か、及びその予測履歴１３２を使用して動的な予測を行うか否かの決定が、スレッド識別子に関連付けられた最適化情報１１２に基づいて行われる実施形態について説明しているが、その決定は、基準によって行ってもよい。たとえば、制御ユニット１２４は、最適化情報１１２への参照を伴わずに、実行中の移行が行われている先の新しいスレッドのアイデンティティー又は特徴に基づいて（説明されているさまざまな入力の任意の組合せを使用して）決定を行うことができる。すなわち、新しいスレッドの特徴（たとえば、新しいスレッドへの移行に関連付けられているイベント・タイプ及び／若しくはアーキテクチャー状態、たとえば図２関して説明されているような特権レベル、又は新しいスレッドが割り込みハンドラであるかどうか）は、予測履歴１３２を蓄積するか否か、及びその予測履歴１３２を使用して動的な予測を行うか否か、すなわち、予測履歴１３２を蓄積すること及びその予測履歴１３２を使用して動的な予測を行うことを選択的に一時停止するかどうかの決定の基礎となるには十分であると言える。一般的に言えば、このアプローチは、稼働が著しく短時間及び／又は低頻度であるスレッドに関して、予測履歴１３２を蓄積すること及びその予測履歴１３２を使用して動的な予測を行うことを一時停止することであり、その理由は、より低劣な予測精度を伴うそれらの特徴を有するスレッドを、その他の著しく長時間及び／又は高頻度の稼働のスレッドの予測履歴１３２を汚さないことと引き換えに実行させることは、その他のスレッドに関する予測精度が高まり、マイクロプロセッサ１００の全体的なパフォーマンスが高まる結果となる可能性が高いということである。
【００３６】
ブロック２２２において、制御ユニット１２４は、ブロック２１２において検知されたイベントに応答して、予測ユニット１０９に対して、マイクロプロセッサ１００がスーパーバイザ特権レベルで実行している間は、各自の予測履歴１３２を蓄積すること及びその予測履歴を使用して予測を行うことを一時停止するように制御を行う。しかしながら、予測ユニット１０９は、予測履歴１３２の使用を必要としない静的な予測を引き続き行う。フローは、ブロック３２１へ進む。
【００３７】
ブロック３２１において、リング０スレッドが実行している間に、制御ユニット１２４は、パフォーマンス・カウンタ１１４を介した予測有効性、及びリタイア済み命令カウンタ１１３からのスレッドの長さなど、リング０スレッドに関する最適化情報を継続的に収集する。一実施形態においては、制御ユニット１２４は、予測ユニット１０９によって行われる動的な予測に加えて、静的な予測に関する予測有効性を収集する。一実施形態においては、制御ユニット１２４はまた、リング３スレッドに関する予測有効性情報を収集する。好ましくは、静的に予測されたスレッドのパフォーマンスが許容可能である場合には、制御ユニット１２４は、そのスレッドが実行しているときに、特にその他のスレッドのパフォーマンスが著しく改善されているならば、予測履歴の蓄積及び使用を引き続き一時停止することができ、そうでない場合には、制御ユニット１２４は、そのスレッドが実行しているときに、予測履歴を蓄積及び使用することができる。フローは、ブロック２３２へ進む。
【００３８】
ブロック２３２において、制御ユニット１２４は、ユーザ特権レベル、たとえばリング３で機能するよう、及び現在実行中のスレッドとは異なるスレッドへコントロールを移すようマイクロプロセッサ１００に指示するイベントを検知する。フローは、ブロック３３３へ進む。
【００３９】
ブロック３３３において、制御ユニット１２４は、ブロック３２１において収集された最適化情報を使用して、リング０スレッドに関連付けられた最適化情報１１２のデータ構造のエントリーを更新する。一実施形態においては、その更新は、エントリー内の最適化情報１１２を、新たに収集された最適化情報と単に置き換えることを含む。その他の実施形態においては、その更新は、収集された最適化情報を使用して計算を行うこと、及びそれらの計算を使用して最適化情報１１２を更新することを含む。たとえば、制御ユニット１２４は、リング０スレッドの最後のＮ回の実行に基づいて、リタイアした命令の数及び／又は予測有効性の平均を計算することができる。さらに、その平均は、加重平均又はローリング平均であってもよい。加えて、制御ユニット１２４は、最適化情報１１２から除外するために極値を選別することができる。さらに、最適化情報１１２のデータ構造を保持するさまざまな方法が想定される。たとえば、一実施形態においては、制御ユニット１２４は、自分がデフォルトのリング０エントリー・アクションをオーバーライドしたいと望む対象のリング０スレッドに関する最適化情報１１２のデータ構造内のエントリーのみを保持する。すなわち、制御ユニット１２４が、ブロック３１３においてリング０スレッド識別子を探して、それを最適化情報１１２のデータ構造内で見つけ出した場合には、制御ユニット１２４は、デフォルトのアクションをオーバーライドすることを決定ブロック３１５において決定する。フローは、決定ブロック３３５へ進む。
【００４０】
決定ブロック３３５において、制御ユニット１２４は、予測履歴１３２を蓄積及び使用することがブロック２２２において一時停止されたかどうかを特定する。そうである場合には、フローはブロック２４２へ進み、そうでない場合には、予測ユニット１０９は、予測履歴１３２を蓄積しており、引き続き予測履歴１３２を蓄積して、それらの予測履歴１３２を使用して予測を行い、フローは終了する。
【００４１】
ブロック２４２において、予測ユニット１０９は、マイクロプロセッサ１００が命令を処理している際に、各自の予測履歴１３２を蓄積すること及び予測履歴１３２を使用して動的な予測を行うことを再開する。フローは、ブロック２４２において終了する。
【００４２】
次いで図４を参照すると、代替実施形態による、図１のマイクロプロセッサ１００のオペレーションを示すフローチャートが示されている。図４のいくつかのブロックは、図２のブロックと同じであり、同じ番号が付けられている。フローは、ブロック２０２において開始する。
【００４３】
ブロック２０２において、スレッドがユーザ特権レベル、たとえばリング３で機能している間に、予測ユニット１０９のうちのそれぞれは、マイクロプロセッサ１００が命令を処理している際に、各自の予測履歴１３２を蓄積し、その予測履歴１３２を使用して動的な予測を行う。フローは、ブロック２１２へ進む。
【００４４】
ブロック２１２において、制御ユニット１２４は、スーパーバイザ特権レベル、たとえばリング０で機能するようマイクロプロセッサ１００に指示する、及びマイクロプロセッサ１００に、現在実行中のスレッドとは異なるスレッドへコントロールを移すイベントを検知する。フローは、ブロック２２２へ進む。
【００４５】
ブロック２２２において、制御ユニット１２４は、ブロック２１２において検知されたイベントに応答して、予測ユニット１０９に対して、マイクロプロセッサ１００がスーパーバイザ特権レベルで新しいスレッドを実行している間は、各自の予測履歴１３２を蓄積すること及びその予測履歴を使用して予測を行うことを一時停止するように制御を行う。しかしながら、予測ユニット１０９は、予測履歴１３２の使用を必要としない静的な予測を引き続き行う。フローは、ブロック４１３へ進む。
【００４６】
ブロック４１３において、制御ユニット１２４は、予測履歴１３２の現在のインスタンスを予測履歴ストレージ１０８に格納する。一実施形態においては、制御ユニット１２４は、所与の予測履歴１３２の一部分のみを保存して、保存を実行するために必要とされる時間の量を低減する。たとえば、分岐予測ユニット１０２の予測履歴１３２Ａが相対的に大きい（たとえば、８ＫＢである）場合には、制御ユニット１２４は、予測履歴１３２Ａ全体よりもむしろ、最も新しくアクセスされたエントリー（たとえば、５１２バイト）のみを保存することができる。一実施形態においては、制御ユニット１２４は、予測履歴１３２の保存されていない部分を無効にする。さらに、一実施形態においては、制御ユニット１２４は、予測ユニット１０９のうちのすべてではなく、予測ユニット１０９のうちのいくつかのみに関する予測履歴１３２を保存する。たとえば、予測ユニット１０９の第１のサブセットの予測有効性が、リング０スレッドによって割り込まれた場合に、予測ユニット１０９の第２のサブセットよりもさらにいっそう大幅に悪影響を与えるということが特定された場合には、制御ユニット１２４は、第２のサブセットではなく第１のサブセットの予測履歴１３２を保存してもよい。好ましくは、制御ユニット１２４は、一意のリング３識別子によって識別される別々のリング３プロセスにそれぞれが関連付けられた複数のエントリーを予測履歴ストレージ１０８内に保持する。一実施形態においては、リング３プロセスは、上述のＩｎｔｅｌ６４及びＩＡ−３２アーキテクチャー・ソフトウェア開発者のマニュアルのボリューム３Ａの４−４６ページ〜４−６２ページのセクション４．１０において説明されているような自分のｘ８６プロセスコンテキスト識別子（ＰＣＩＤ）によって識別される。別の実施形態においては、リング３プロセスは、ｘ８６  ＣＲ３制御レジスタへとロードされる、リング３プロセスによって使用されるページ・ディレクトリのアドレスによって識別される。一実施形態においては、制御ユニット１２４は、予測履歴ストレージ１０８を先入れ先出しバッファとして保持する。別の実施形態においては、制御ユニット１２４は、最も古く使用された、又は最も低頻度で使用されたなど、より洗練された代替ポリシーを採用する。好ましくは、予測履歴ストレージ１０８への予測履歴１３２の保存は、マイクロプロセッサ１００の機能ユニットがリング０スレッドの命令を引き続き処理していて、リング０スレッドの実行時間が予測履歴の保存時間よりも長くなる可能性が高い間に、実行される。しかしながら、有利なことに、予測履歴の保存と、リング０命令の処理との間において、予測履歴１３２を格納するストレージ・アレイの読み取りポート及び書き込みポートにアクセスするための競合がない。なぜなら、予測履歴１３２のアレイは、予測履歴を蓄積する目的でアクセスされている（すなわち、書き込まれている）、又はリング０命令を処理する目的で予測を行う（すなわち、読み取りを行う）のではなく、予測履歴を保存する目的で読み取られているだけだからである。これは有利である。なぜなら、予測履歴の保存に対応するために必要とされるさらなるハードウェアの量が最���化されるからであり、それは、その目的のためにストレージ・アレイ上にさらなる読み取りポートを含む必要がないからである。フローは、ブロック２３２へ進む。
【００４７】
ブロック２３２において、制御ユニット１２４は、ユーザ特権レベル、たとえばリング３で機能するよう、及び現在実行中のスレッドとは異なるスレッドへコントロールを移すようマイクロプロセッサ１００に指示するイベントを検知する。フローは、ブロック４３３へ進む。
【００４８】
決定ブロック４３３において、制御ユニット１２４は、コントロールが移行される先の新しいリング３スレッドと、ブロック２１２においてコントロールが移行した元の古いリング３スレッドとが、同じプロセスの一部であるかどうかを特定する。ブロック４１３に関して上述したように、制御ユニット１２４は、ｘ８６  ＰＣＩＤなど、２つのスレッドに関連付けられたプロセス識別子同士を比較することによって、この特定を行うことができる。新しいリング３スレッド・プロセスが、古いリング３スレッド・プロセスとは異なる場合には、フローはブロック４３５へ進み、そうでない場合には、フローはブロック２４２へ進む。
【００４９】
ブロック４３５において、制御ユニット１２４は、新しいリング３プロセスに関する予測履歴１３２を予測履歴ストレージ１０８から復元する。すなわち、制御ユニット１２４は、新しいリング３プロセス識別子を使用して、その予測履歴を予測履歴ストレージ１０８内で見つけ出し、そのリング３プロセス識別子に基づいて予測履歴ストレージ１０８から予測ユニット１０９の予測履歴１３２をロードする。好ましくは、予測履歴ストレージ１０８からの予測履歴１３２の復元は、リング０からリング３への移行を実行するマイクロコードの命令をマイクロプロセッサ１００の機能ユニットが引き続き処理している間に、実行される。マイクロコードの実行時間は、かなりの数のクロック・サイクルになることがあり、予測履歴１３２の復元を実行するために必要とされる時間よりも長くなることがあり、これは有利である場合がある。それは、リング移行マイクロコードと、予測履歴の復元との間において、予測履歴１３２のストレージ・アレイの読み取りポート及び書き込みポートにアクセスするための競合がほとんど又はまったくないと言えるからであり、なぜなら、予測履歴１３２のアレイのうちの多くは、予測履歴を蓄積する目的でアクセスされている（すなわち、書き込まれている）、又はリング０命令を処理する目的で予測を行う（すなわち、読み取りを行う）のではなく、予測履歴を復元する目的でそうされているだけだからである。たとえば、一実施形態においては、マイクロコード・ユニットは、分岐予測ユニット１０２を採用しておらず、すなわち、分岐予測ユニット１０２は、マイクロコード命令に関する予測を行わない。別の例に関しては、一実施形態において、リング移行マイクロコードは、システム・メモリにアクセスせず、したがって、データ・プリフェッチ・ユニット１０４は、リング移行マイクロコードに関するデータ・プリフェッチを行う必要がなく、ストア衝突予測ユニット１０６は、リング移行マイクロコードに関する予測を行う必要がない。これは有利である。なぜなら、予測履歴の復元に対応するために必要とされるさらなるハードウェアの量が最小化されるからであり、それは、その目的のためにストレージ・アレイ上にさらなる書き込みポートを含む必要がないからである。フローは、ブロック２４２へ進む。
【００５０】
ブロック２４２において、予測ユニット１０９は、マイクロプロセッサ１００が命令を処理している際に、各自の予測履歴１３２を蓄積すること及び予測履歴１３２を使用して動的な予測を行うことを再開する。フローは、ブロック２４２において終了する。
【００５１】
有利なことに、新しいリング３スレッドの命令の処理は、古いリング３スレッドに関連付けられた予測履歴１３２を汚しておらず、この結果、両方のリング３スレッドに関する予測精度を高めることができる。
【００５２】
予測履歴１３２を蓄積及び使用するのを一時停止しないことを制御ユニット１２４が決定する対象のリング０スレッドに関連付けられている、たとえば、相対的に長いリング０スレッドに関する、並びに／又は、リング０スレッドの前の実行インスタンス及び／若しくはリング３プロセス中に行われた予測の有効性に基づいて、予測履歴１３２を蓄積及び使用することに値するリング０スレッドに関する予測履歴１３２を制御ユニット１２４が保存及び復元するように図３の実施形態及び図４の実施形態が効果的に組み合わされるその他の実施形態も想定される。上述したように、リング３からリング０へ、及びその逆へマイクロプロセッサ１００が移行するために必要とされる時間は、相当な数のクロック・サイクルになることがあり、その間は、予測履歴１３２を蓄積する必要も、それらの予測履歴１３２を使用して予測を行う必要もなく、したがって、この時間中には、制御ユニット１２４は、著しいパフォーマンス・ペナルティーを（たとえあったとしても）実質的には伴わずに、関連のある予測履歴１３２を予測履歴ストレージ１０８に保存すること／予測履歴ストレージ１０８から復元することが可能である。そのような実施形態においては、保存及び復元が完了するまで、マイクロプロセッサ１００による命令実行を停止することを回避できるように、保存及び復元される予測履歴１３２の量を、リング０からリング３への移行及びリング３からリング０への移行中に保存及び復元することが可能である量に制限することが特に有利である場合がある。
【００５３】
加えて、マイクロプロセッサ１００が、１つの特権レベルから別の特権レベルへのスレッド移行に応答して、予測履歴の蓄積及び予測を行うためのその予測履歴の使用を選択的に一時停止する実施形態が説明されているが、マイクロプロセッサ１００が、同じ特権レベル内でのスレッド移行に応答して、予測履歴の蓄積及び予測を行うためのその予測履歴の使用を選択的に一時停止又は再開するその他の実施形態も想定される。たとえば、マイクロプロセッサ１００は、特権レベルの変更を含まないイベントを検知することによってスレッド移行を検知すること、並びにそれに応答して、予測履歴の蓄積及び予測を行うためのその予測履歴の使用を一時停止又は再開することを決定することが可能である。たとえば、マイクロプロセッサ１００は、特定のＩＰ値における、及び汎用レジスタ値など、その他のアーキテクチャー状態の特定の値を伴ういくつかのインスタンスにおける命令（サブルーチン・コール又はリターン命令など）の実行を単に検知することができる。別の例に関しては、マイクロプロセッサ１００は、一連の命令及び／又はＩＰ値を検知することができる。
【００５４】
ＯＳルーチンのための予測履歴ストレージのフラクショナルな使用
次いで図５を参照すると、制御情報テーブル５００を示すブロック図が示されている。制御情報テーブル５００は、図１の最適化情報１１２を保持するためのストレージの一実施形態である。テーブル５００は、オペレーティング・システム（ＯＳ）ルーチン識別子５０２及び関連付けられた制御情報５０４をそれぞれが保持する複数のエントリーを含む。ＯＳルーチン識別子５０２は、ＯＳルーチンが実行を開始したときに制御ユニット１２４がそのＯＳルーチンを識別することを可能にする状態値（たとえば、ｘ８６  ＳＹＳＣＡＬＬ命令が実行されたときのＯＳルーチンのＩＰ及び汎用レジスタ値）など、最適化情報１１２に関して上述したようなさまざまな情報を含むことができる。制御情報５０４は、数ある中でもフラクション(fraction)を指定する。予測履歴１３２のストレージは、予測履歴を蓄積するために別々に制御可能である諸部分を含む。すなわち、制御ユニット１２４は、ＯＳルーチンが実行している間に、予測履歴を蓄積するために予測履歴ストレージ１３２の諸部分のうちのフラクションのみを使用するように予測ユニット１０９を制御することができ、そのフラクションは、実行しているＯＳルーチンに基づいて変えることが可能である。たとえば、予測履歴ストレージ１３２は、ウェイ(way)ごとに配列することが可能であり（たとえば、図６を参照されたい）、又は予測履歴ストレージ１３２は、セットごとに配列することが可能であり（たとえば、図７を参照されたい）、又は予測履歴ストレージ１３２は、エントリーのキュー(queue)として配列することが可能である（たとえば、図８を参照されたい）。これらのケースのそれぞれにおいては、予測履歴ストレージ１３２内のウェイ／セット／エントリーは、予測履歴を蓄積するために別々に制御可能とすることができ、ＯＳルーチンに関連付けられた制御情報５０４内のフラクションは、以降でさらに詳細に説明するように、関連付けられたＯＳルーチンが実行している間に、予測履歴を蓄積するために使用される予測履歴１３２のストレージのフラクションを指定する。好ましくは、制御情報５０４は、マイクロプロセッサ１００の予測ユニット１０９のうちのそれぞれの予測履歴１３２のストレージに関するフラクションを指定する。
【００５５】
一実施形態においては、テーブル５００内の情報は、マイクロプロセッサ１００の製造前に特定され、そのマイクロプロセッサ１００の中に、たとえば、マイクロプロセッサ１００のマイクロコード内に形成される。そのマイクロコードは、マイクロコード・パッチによって現場でアップグレード可能であり、たとえば、マイクロプロセッサ１００を含むシステムのＢＩＯＳによって達成することが可能である。加えて、マイクロプロセッサ１００用のデバイス・ドライバが、システムのオペレーション中に情報５００をマイクロプロセッサ１００へダウンロードすることができる。一実施形態においては、デバイス・ドライバは、所定のソフトウェア・アプリケーションが実行しているということを検知し、それに応答して、情報５００をマイクロプロセッサ１００へダウンロードし、これは有利なことに、情報５００内のフラクションが、特定の関心のあるソフトウェア・アプリケーションのパフォーマンスを最適化するために、より細かい粒度で適合されることを可能にする。
【００５６】
次いで図６を参照すると、予測履歴キャッシュ６００を示すブロック図が示されている。予測履歴キャッシュ６００は、複数のウェイ６０２を有する連想キャッシュで配列されたキャッシュ・メモリを含む。図６の実施形態は、８つのウェイ６０２を含んでいるが、異なる数のウェイを伴うその他の実施形態も想定される。ウェイ６０２は、予測履歴１３２を保持するためのストレージである。一例として、予測履歴キャッシュ６００のウェイ６０２内のそれぞれのエントリーは、上述したように、分岐予測（たとえば、分岐ターゲット・キャッシュ・データ）又はデータ・プリフェッチングを実行するために使用した予測履歴を保持することができる。有利なことに、ウェイ６０２同士は、予測履歴１３２を蓄積するために別々に制御可能である。たとえば、図５のテーブル５００内のＯＳ識別子５０２のうちの１つによって識別されたＯＳルーチンが、実行中として検知された場合には、予測履歴キャッシュ６００は、その実行中のＯＳルーチンに関連付けられた制御情報５０４からフラクションを受け取り、Ｎ個のウェイ６０２のみが、予測履歴１３２を蓄積するために使用されることを可能にし、予測履歴１３２において、Ｎはフラクションの分子であり、フラクションの分母は、予測履歴キャッシュ６００内のウェイ６０２の合計数である。たとえば、制御ユニット１２４は、予測履歴キャッシュ６００の合計８つのウェイ６０２のうちの２つのウェイ６０２のみが、関連付けられたＯＳルーチンが実行している間に、予測履歴１３２を蓄積するために使用することを可能にすることができる。一実施形態においては、許容可能なウェイ６０２（たとえば、ウェイ４及び５のみ）が、制御情報５０４内で指定される。示されていないが、ウェイ６０２ごとの配列に加えて、図６の予測履歴キャッシュ６００は、以降で図７に関して説明する様式と同様に、インデックス入力によってインデックス付けされた複数のセットとして配列されることも可能であるということを理解されたい。
【００５７】
次いで図７を参照すると、代替実施形態による、予測履歴キャッシュ７００を示すブロック図が示されている。予測履歴キャッシュ７００は、複数のセット７０２のうちの１つを選択するためのインデックス入力７０４（たとえば、命令のメモリ・アドレス、又はロード／ストア・アドレス）によってインデックス付けされた複数のセット７０２を有するインデックス付けされたキャッシュで配列されたキャッシュ・メモリを含む。図７の実施形態は、８つのセット７０２を含んでいるが、異なる数のセットを伴うその他の実施形態も想定される。セット７０２は、予測履歴１３２を保持するためのストレージである。一例として、予測履歴キャッシュ７００のセット７０２内のそれぞれのエントリーは、上述したように、分岐予測又はデータ・プリフェッチングを実行するために使用した予測履歴を保持することができる。有利なことに、セット７０２同士は、予測履歴１３２を蓄積するために別々に制御可能である。たとえば、図５のテーブル５００内のＯＳ識別子５０２のうちの１つによって識別されたＯＳルーチンが、実行中として検知された場合には、予測履歴キャッシュ７００は、その実行中のＯＳルーチンに関連付けられた制御情報５０４からフラクションを受け取り、Ｎ個のセット７０２のみが、予測履歴１３２を蓄積するために使用することを可能にし、予測履歴１３２において、Ｎはフラクションの分子であり、フラクションの分母は、予測履歴キャッシュ７００内のセット７０２の合計数である。たとえば、制御ユニット１２４は、予測履歴キャッシュ７００の合計８つのセット７０２のうちの２つのセット７０２のみが、関連付けられたＯＳルーチンが実行している間に、予測履歴１３２を蓄積するために使用することを可能にすることができる。一実施形態においては、許容可能なセット７０２（たとえば、セット０及び１のみ）が、制御情報５０４内で指定される。たとえば、制御ユニット１２４は、ＯＳルーチンが実行しているときに、予測履歴１３２を蓄積するために使用される特定のセット７０２を限定するためにインデックス７０４の上位ビットを所定の値に修正するように予測履歴キャッシュ７００を制御することができる。たとえば、６４個のセット７０２（６ビットのインデックス７０４）を前提とすると、制御ユニット１２４は、インデックス７０４の上位７ビットをゼロに修正することによって、関連付けられたＯＳルーチンに関する予測履歴を蓄積するためにセット０及び１のみを使用するように予測履歴キャッシュ７００を制御することができる。示されていないが、セット７０２ごとの配列に加えて、図７の予測履歴キャッシュ７００は、図６に関して上述した様式と同様に、複数のウェイとして配列することも可能であるということを理解されたい。
【００５８】
次いで図８を参照すると、予測履歴キュー８００を示すブロック図が示されている。予測履歴キュー８００は、予測履歴１３２を保持するためのストレージを含む。そのストレージは、キューとして配列されている。キュー・ストレージ８００は、関連付けられたＯＳフラグ８０４をそれぞれが有する予測履歴キュー・エントリー８０２を含む。ＯＳフラグ８０４は、エントリー８０２がＯＳルーチンに、又はユーザ・ルーチンに関連付けられているかどうかを示す。一例として、それぞれの予測履歴キュー・エントリー８０２は、上述のように、メモリ曖昧性解消、たとえば、ストア衝突検知を実行するために使用された予測履歴を保持することができる。たとえば、エントリー８０２は、ストア・アドレス；そのストア・アドレスを計算するために使用されたストア命令のソースに関する情報；以前にストアが衝突したロード命令のＩＰ値；まだ生成されていなかったアドレスを有するさらに古いストア命令と自分のロード・アドレスが衝突したことに起因して正しくないデータを受け取ったためにリプレイされたロード命令の並べ替えバッファ・インデックスと、衝突しているストア命令との間における差分；及び並べ替えバッファ・インデックス、たとえば、ストア命令のインデックス、又はストア命令が自分のストア・データに関して依存している命令のインデックス、ロード命令が実行されたときに利用可能ではなかったストア・データを有するさらに古いストア命令と自分のロード・アドレスが衝突したことに起因して正しくないデータを受け取ったためにリプレイされたロード命令の最も新しいインスタンスのインデックスを保持することができる。同様の情報を格納する予測履歴キュー８００の例は、２００９年１０月２３日に出願された米国特許非仮出願第１２／６０４，７６７号に関連してさらに詳細に説明されており、その米国特許非仮出願第１２／６０４，７６７号は、２００９年５月２９日に出願された米国特許仮出願第６１／１８２，２８３号に対する優先権を主張するものであり、それらの出願のそれぞれは、その全体が参照によって本明細書に組み込まれる。
【００５９】
一実施形態においては、予測履歴キュー８００は、現在ＯＳルーチンに関連付けられている、たとえば、自分のＯＳフラグ８０４が設定されている有効なエントリー８０２の数を追跡把握するカウンタを含む。図５のテーブル５００内のＯＳ識別子５０２のうちの１つによって識別されたＯＳルーチンが、実行中として検知された場合には、予測履歴キュー８００は、その実行中のＯＳルーチンに関連付けられた制御情報５０４からフラクションを受け取り、Ｎ個のエントリー８０２のみがＯＳルーチンによって占められることを可能にし、ＯＳルーチンにおいて、Ｎはフラクションの分子であり、フラクションの分母は、キュー８００内のエントリー８０２の合計数である。一実施形態においては、キュー８００は、新しいエントリー８０２をプッシュしているときに、Ｎ個のＯＳルーチン・エントリー８０２のうちの最も古いものをエビクトする。一実施形態においては、キュー８００は、最も古く使用された（ＬＲＵ）情報を保持し、新しいエントリー８０２をプッシュしているときに、Ｎ個のＯＳルーチン・エントリー８０２のうちの最も古く使用されたもの（ｔｈｅ  ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）をエビクトする。一実施形態においては、ＯＳルーチン・エントリーが予測履歴キュー８００内へプッシュしたいときに、キュー８００が満杯でない場合には、キュー８００は、別のＯＳエントリーをエビクトすることなくプッシュすることを可能にし、すなわち、このケースにおいては、キュー８００は、Ｎ個を超えるＯＳエントリーが存在することを一時的に可能にする。好ましくは、Ｎは、動的に構成可能である。
【００６０】
次いで図９を参照すると、図５のテーブル５００に投入する値を生成するためのプロセスを示すフローチャートが示されている。フローは、ブロック９０２において開始する。
【００６１】
ブロック９０２において、さまざまなソフトウェア・アプリケーション（たとえば、ポピュラーな又はクリティカルなソフトウェア・アプリケーション、ベンチマークなど）が、ソフトウェア・アプリケーションによって呼び出されるさまざまなオペレーティング・システム・ルーチンを識別するためにプロファイルされる。それらのソフトウェア・アプリケーションは、それらのソフトウェア・アプリケーションによって呼び出されることが可能であるＯＳルーチンの自分自身のセットをそれぞれが有するさまざまなオペレーティング・システム、たとえば、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標）、Ａｐｐｌｅ  Ｍａｃ  ＯＳ  Ｘ（登録商標）、及びＧｏｏｇｌｅ（登録商標）  Ａｎｄｒｏｉｄ（登録商標）オペレーティング・システム上でプロファイルされることが可能である。フローは、ブロック９０４へ進む。
【００６２】
ブロック９０４においては、ブロック９０２において識別されたＯＳルーチンのそれぞれに関して、そのＯＳルーチンが呼び出されるたびにそのＯＳルーチンによって実行された命令の数がカウントされる。次いで、ＯＳルーチンに関して、実行された命令の合計数が算出され、その合計を、そのＯＳルーチンが呼び出された回数によって割った値として、実行された命令の平均数が算出される。一実施形態においては、命令の平均数及び合計数が、オペレーティング・システムごとに加えて、アプリケーションごとにも算出される。代替実施形態においては、実行された命令の数よりもむしろ、ＯＳルーチンにおいて費やされたマイクロプロセッサ１００のクロック・サイクルの平均数及び合計数が計算される。フローは、ブロック９０６へ進む。
【００６３】
ブロック９０６においては、ブロック９０２において識別されたＯＳルーチンのそれぞれに関して、そのＯＳルーチンが、３つのカテゴリーのうちの１つに収まるものとして分類される。第１のカテゴリーは、ＯＳルーチンによって実行された相対的に少ない数の命令を有するものとして分類され、第２のカテゴリーは、ＯＳルーチンによって実行された中くらいの数の命令を有するものとして分類され、第３のカテゴリーは、ＯＳルーチンによって実行された相対的に多い数の命令を有するものとして分類される。直観的には、第１のカテゴリーのＯＳルーチンは、そのＯＳルーチンを呼び出すユーザ・コード（すなわち、ソフトウェア・アプリケーションの命令）に関連付けられた予測履歴１３２を著しく汚す可能性が低く、及びそれにより、ユーザ・コード命令の予測の精度を低減することによってユーザ・コードのパフォーマンスに悪影響を及ぼす可能性が低い。逆に、第３のカテゴリーのＯＳルーチンは、自分の予測履歴の蓄積に基づいて自分の命令の予測から著しく利益を得る可能性が高い。別の言い方をすると、第３のカテゴリーのＯＳルーチンは、そのＯＳルーチンを呼び出すユーザ・コードを有するソフトウェア・アプリケーションのパフォーマンスに著しく悪影響を及ぼす可能性が高い。なぜなら、そのソフトウェア・アプリケーションのパフォーマンスは、そのソフトウェア・アプリケーションが呼び出すＯＳルーチンのパフォーマンスに少なくとも部分的に依存しており、多数の命令を実行するＯＳルーチンは、自分の予測履歴に基づいて自分の命令の予測の利益を有さない場合には、低速で実行する可能性が高いからである。最後に、第２のカテゴリーのＯＳルーチンは、そのパフォーマンスに悪影響を及ぼすのに十分なだけユーザ・コード予測履歴を汚す可能性が高いが、この悪影響がそのＯＳルーチンのパフォーマンスの向上によって相殺されるかどうかは不確かである。別の言い方をすると、予測ユニット１０９のストレージのフラクションのみを使用して第２のカテゴリーのＯＳルーチンの予測履歴を蓄積することによって、ソフトウェア・アプリケーションの全体的なパフォーマンスを改善することが可能である。好ましくは、分類を実行するために、実行された命令の平均数と実行された命令の合計数との両方が分析される。これは、たとえＯＳルーチンが相対的に短くても（すなわち、命令の平均数を見ているだけならば、第１のカテゴリーに入るとしても）、そのＯＳルーチンが相対的に頻繁に呼び出されている場合には、そのＯＳルーチンが高速で実行すること（すなわち、予測履歴の蓄積から利益を得ること）が重要になることがあるため、そのＯＳルーチンがブロック９０８ごとに分析する必要が生じることがあるが、そのＯＳルーチンは、非常に短いので、予測履歴の蓄積から著しく利益を得ることができないことがあるためである。有利なことに、ＯＳルーチンのサブセットを選択して第２のカテゴリーに入れることによって、ブロック９０８において実行しなければならないパフォーマンス分析の量が大幅に低減されることが可能である。フローは、ブロック９０８へ進む。
【００６４】
ブロック９０８においては、最適なフラクション値を特定するために、ブロック９０６において選択されて第２のカテゴリーに入れられたＯＳルーチンのうちのそれぞれに関する予測履歴を蓄積するために使用される予測ユニット１０９の予測履歴ストレージ（たとえば、図６、７、及び８の６００、７００、及び８００）のフラクションを変えることによって、ソフトウェア・アプリケーションのパフォーマンス分析が行われる。すなわち、図５のテーブル５００は、関連のあるＯＳルーチンに関連付けられたＯＳルーチン識別子５０２をロードされ、制御情報５０４の複数の値のさまざまな順列が試されて、どの組合せが、個々のソフトウェア・アプリケーションにとって、並びに所与のオペレーティング・システムにわたる全体としてのソフトウェア・アプリケーションにとって最良のパフォーマンスを生み出すかが特定される。パフォーマンスが最適化される組合せのフラクション値が保持され、それによって、それらのフラクション値は、マイクロプロセッサ１００による使用のために図５のテーブル５００内にロードされることが可能になる。パフォーマンスが最適化されるフラクション値は、マイクロプロセッサ１００内に製造されることが可能であり、及び／又はデバイス・ドライバが、以降で図１０及び図１１に関して説明するように、それらの値をマイクロプロセッサ１００内にダウンロードすることができる。
【００６５】
次いで図１０を参照すると、図１のマイクロプロセッサ１００を含むシステムのオペレーションを示すフローチャートが示されている。フローは、ブロック１００２において開始する。
【００６６】
ブロック１００２において、図９などに従ってＯＳルーチン分析が実行されたオペレーティング・システム（ここでは、ＯＳ  Ｙと呼ぶ）が、マイクロプロセッサ１００を含むシステム上へロードされる。フローは、ブロック１００４へ進む。
【００６７】
ブロック１００４においては、ブロック１００２においてロードされたオペレーティング・システムは、自分のデバイス・ドライバの初期化ルーチンを呼び出すことを開始し、マイクロプロセッサ１００用のデバイス・ドライバのための初期化ルーチンを呼び出す。マイクロプロセッサ１００のデバイス・ドライバの初期化ルーチンは、図９のブロック９０８において特定された値を、図５のテーブル５００に投入するためにマイクロプロセッサ１００へダウンロードし、それによって、マイクロプロセッサ１００上で実行しているソフトウェア・アプリケーションは、選択されたＯＳルーチンを実行させながら、そして願わくはパフォーマンスの向上を実現しながら、予測履歴を蓄積するための予測履歴１３２のストレージのフラクショナルな使用から利益を得ることができる。一実施形態においては、デバイス・ドライバは、予測履歴のフラクショナルな使用の機能に関連付けられたＭＳＲに宛てられたｘ８６  ＷＲＭＳＲ命令を実行することによって、又はその他の命令セット・アーキテクチャーの類似のモデル固有のレジスタ書き込み命令によって、それらの値をダウンロードする。フローは、ブロック１００４において終了する。
【００６８】
次いで図１１を参照すると、図１のマイクロプロセッサ１００を含むシステムのオペレーションを示すフローチャートが示されている。フローは、ブロック１１０２において開始する。
【００６９】
ブロック１１０２においては、マイクロプロセッサ１００用のデバイス・ドライバが、オペレーティング・システムがソフトウェア・アプリケーション（ここでは、ソフトウェア・アプリケーションＸと呼ぶ）を、マイクロプロセッサ１００を含むシステム上で実行するようにスケジュールしたということを検知する。オペレーティング・システムは、自分のルーチンを、たとえば図９に従って分析する。フローは、ブロック１１０４へ進む。
【００７０】
ブロック１１０４において、デバイス・ドライバは、それに応答して、図９のブロック９０８において特定された値を、図５のテーブル５００に投入するためにマイクロプロセッサ１００へダウンロードし、それによって、マイクロプロセッサ１００上で実行しているソフトウェア・アプリケーションは、選択されたＯＳルーチンを実行させながら、そして願わくはパフォーマンスの向上を実現しながら、予測履歴を蓄積するための予測履歴１３２のストレージのフラクショナルな使用から利益を得ることができる。フローは、ブロック１１０４において終了する。
【００７１】
本明細書においては、本発明のさまざまな実施形態について説明してきたが、それらの実施形態は、限定ではなく、例として提示されているということを理解されたい。形態及び詳細におけるさまざまな変更が、本発明の範囲から逸脱することなく、その中で行われることが可能であるということは、関連のあるコンピュータ技術分野の技術者にとって明らかであろう。たとえば、ソフトウェアは、たとえば、本明細書において説明されている装置及び方法の機能、製作、モデリング、シミュレーション、記述、及び／又はテストを可能にすることができる。これは、一般的なプログラミング言語（たとえば、Ｃ、Ｃ＋＋）、Ｖｅｒｉｌｏｇ  ＨＤＬ、ＶＨＤＬなどを含むハードウェア記述言語（ＨＤＬ）、又はその他の利用可能なプログラムの使用を通じて達成することが可能である。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、又は光ディスク（たとえば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）、ネットワーク、ワイヤ・ライン、ワイヤレス、又はその他の通信メディアなどの任意の知られているコンピュータ使用可能メディア内に配置することが可能である。本明細書において説明されている装置及び方法の実施形態は、（たとえば、ＨＤＬ内で具体化される、又は指定される）マイクロプロセッサ・コアなどの半導体知的所有権の中核に含めること、及び集積回路の製造時にハードウェアへと変形することが可能である。加えて、本明細書において説明されている装置及び方法は、ハードウェアとソフトウェアの組合せとして具体化することが可能である。したがって、本発明は、本明細書において説明されている例示的な実施形態のうちのいずれによっても限定すべきではなく、添付の特許請求の範囲及びそれらの均等物に従ってのみ定義すべきである。具体的には、本発明は、汎用コンピュータにおいて使用することが可能であるマイクロプロセッサ・デバイス内に実装することが可能である。最後に、開示されている概念及び具体的な実施形態は、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく本発明の同じ目的を達成するためのその他の構造を設計又は修正するための基盤として容易に使用することができるということを当業者なら理解するはずである。
【図１】
0006259518.tif 000002
【図２】
0006259518.tif 000003
【図３】
0006259518.tif 000004
【図４】
0006259518.tif 000005
【図５】
0006259518.tif 000006
【図６】
0006259518.tif 000007
【図７】
0006259518.tif 000008
【図８】
0006259518.tif 000009
【図９】
0006259518.tif 000010
【図１０】
0006259518.tif 000011
【図１１】
0006259518.tif 000012