JP6259518B2 - オペレーティング・システム・ルーチンのための予測履歴ストレージのフラクショナルな使用 - Google Patents

オペレーティング・システム・ルーチンのための予測履歴ストレージのフラクショナルな使用 Download PDF

Info

Publication number
JP6259518B2
JP6259518B2 JP2016526726A JP2016526726A JP6259518B2 JP 6259518 B2 JP6259518 B2 JP 6259518B2 JP 2016526726 A JP2016526726 A JP 2016526726A JP 2016526726 A JP2016526726 A JP 2016526726A JP 6259518 B2 JP6259518 B2 JP 6259518B2
Authority
JP
Japan
Prior art keywords
prediction
microprocessor
operating system
history
fraction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016526726A
Other languages
English (en)
Other versions
JP2016525252A (ja
Inventor
フーカー,ロドニー,イー
パークス,テリー
バンダ,ジョン,ディー
Original Assignee
ヴィア アライアンス セミコンダクター カンパニー リミテッド
ヴィア アライアンス セミコンダクター カンパニー リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/165,354 external-priority patent/US9507597B2/en
Application filed by ヴィア アライアンス セミコンダクター カンパニー リミテッド, ヴィア アライアンス セミコンダクター カンパニー リミテッド filed Critical ヴィア アライアンス セミコンダクター カンパニー リミテッド
Publication of JP2016525252A publication Critical patent/JP2016525252A/ja
Application granted granted Critical
Publication of JP6259518B2 publication Critical patent/JP6259518B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4403Processor initialisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Computer Security & Cryptography (AREA)
  • Advance Control (AREA)
  • Debugging And Monitoring (AREA)

Description

関連出願の相互参照
本出願は、2014年1月27日に出願された米国特許非仮出願第14/165,354号の一部継続出願(CIP:continuation−in−part)であり、その米国特許非仮出願第14/165,354号は、2013年6月10日に出願された米国特許仮出願第61/833,044号に基づく優先権を主張するものであり、それらの出願のそれぞれは、その全体が参照によって本明細書に組み込まれる。本出願は、2014年10月28日に出願された米国特許仮出願第62/069,602号に基づく優先権を主張するものであり、その米国特許仮出願第62/069,602号は、その全体が参照によって本明細書に組み込まれる。
現代のマイクロプロセッサは、自らのパフォーマンスを改善するためにさまざまな予測技術を採用している。たとえば、分岐予測子は、分岐命令が受け入れられるか、又は受け入れられないかどうかを予測し、受け入れられる場合には、その分岐命令のターゲット・アドレスを予測する。動的分岐予測子は、さまざまな分岐命令実行の結果の履歴を蓄積し、その履歴に基づいて自らの予測を行う。動的分岐予測子の予測精度は主に、その動的分岐予測子が蓄積することができる履歴の量の関数である。所与の時間内にプログラムによって実行される分岐命令のセットが、予測履歴内に含まれるのに十分なだけ小さい限り、精度は非常に高くなることが可能である。
しかしながら、予測精度は、特定のイベントによって大幅に低減される場合がある。そのような1つのイベントは、現在実行中のプログラムが一時的に割り込みを受けて、その間に別のプログラムを実行する場合である。たとえば、パケットが、ネットワーク・インターフェース・コントローラによって受信される場合があり、そのネットワーク・インターフェース・コントローラは、割り込みをプロセッサにシグナリングする。プロセッサは、その割り込みにサービス提供するためにコントロールをオペレーティング・システムへ移し、それによって、現在実行中のプログラムAは、実行中のプログラムAにオペレーティング・システムがコントロールを戻すまで、一時的に停止される。プロセッサがオペレーティング・システムの分岐命令を実行している間に、そのことは、プログラムAのための分岐予測子内の予測履歴を汚していることになる。これによって、プログラムAの分岐を予測するための分岐予測子の精度が低減される可能性が高い。
一態様においては、本発明は、マイクロプロセッサを提供する。そのマイクロプロセッサは、そのマイクロプロセッサによって以前に実行された命令の特徴の予測履歴を保持するためのストレージを有する予測ユニットを含む。予測ユニットは、予測履歴を蓄積し、その予測履歴を使用して、その後の命令実行に関連した予測を行う。ストレージは、予測履歴を蓄積するために別々に制御可能な複数の部分を含む。マイクロプロセッサはまた、制御ユニットを含み、その制御ユニットは、マイクロプロセッサがオペレーティング・システム・ルーチンを実行していることを検知し、マイクロプロセッサがオペレーティング・システム・ルーチンを実行している間に、予測履歴を蓄積するために、ストレージの複数の部分のうちのフラクションのみを使用するように予測ユニットを制御する。
別の態様においては、本発明は、マイクロプロセッサによって以前に実行された命令の特徴の予測履歴を保持するためのストレージを備えた予測ユニットを有するマイクロプロセッサを機能させるための方法を提供し、予測ユニットは、予測履歴を蓄積し、その予測履歴を使用して、その後の命令実行に関連した予測を行い、ストレージは、予測履歴を蓄積するために別々に制御可能な複数の部分を含む。この方法は、マイクロプロセッサがオペレーティング・システム・ルーチンを実行していることを検知するステップと、マイクロプロセッサがオペレーティング・システム・ルーチンを実行している間に、予測履歴を蓄積するために、ストレージの複数の部分のうちのフラクションのみを使用するように予測ユニットを制御するステップとを含む。
さらに別の態様においては、本発明は、その後の命令の実行を予測するために、予測ユニットによって使用された以前に実行された命令の予測履歴を蓄積するストレージを有する予測ユニットを有するマイクロプロセッサのパフォーマンスを改善するための方法を提供し、予測ユニットは、予測履歴を蓄積するためにストレージのフラクションのみを使用するように動的に制御可能である。この方法は、ソフトウェア・アプリケーションによって呼び出された複数のオペレーティング・システム・ルーチンを識別するステップと、それらの複数のオペレーティング・システム・ルーチンのそれぞれによって実行された命令のそれぞれの数をカウントするステップとを含む。この方法はまた、実行された命令のそれぞれの数に基づいて、複数のオペレーティング・システム・ルーチンのサブセットを選択するステップを含む。この方法はまた、ソフトウェア・アプリケーションのパフォーマンスを最適化するフラクションの値を特定するために、複数のオペレーティング・システム・ルーチンのサブセットに関する予測ユニットのストレージのフラクションの値を変えることによってパフォーマンス分析を行うステップを含む。
マイクロプロセッサのブロック図である。 図1のマイクロプロセッサのオペレーションを示すフローチャートである。 代替実施形態による、図1のマイクロプロセッサのオペレーションを示すフローチャートである。 代替実施形態による、図1のマイクロプロセッサのオペレーションを示すフローチャートである。 制御情報テーブルを示すブロック図である。 予測履歴キャッシュを示すブロック図である。 代替実施形態による、予測履歴キャッシュを示すブロック図である。 予測履歴キューを示すブロック図である。 図5のテーブルに投入する値を生成するためのプロセスを示すフローチャートである。 図1のマイクロプロセッサを含むシステムのオペレーションを示すフローチャートである。 代替実施形態による、図1のマイクロプロセッサを含むシステムのオペレーションを示すフローチャートである。
予測履歴の蓄積及びこの予測履歴を使用した予測ユニット(分岐予測子、データ・プリフェッチャー、及びストア衝突検知予測子など)による予測を選択的に一時停止して、動的な予測が一時停止されている間に静的な予測を使用することを選ぶことによってマイクロプロセッサのパフォーマンスを改善することができる実施形態について説明する。より具体的には、マイクロプロセッサがいくつかのスレッドを実行している一方でその他のスレッドを実行していない間に、予測履歴の蓄積及び使用を一時停止することが可能である。たとえば、一時停止は、スレッドが実行している特権レベル、より具体的には、リング0とも呼ばれる、x86アーキテクチャー・プロセッサの現在特権レベル(CPL:current privilege level)ゼロなどのスーパーバイザ特権レベルでスレッドが実行しているか否かに基づいて選択的にすることが可能である。別の例に関しては、一時停止は、スレッドが割り込みハンドラであるかどうかなど、スレッドのタイプに基づいて選択的にすることが可能である。さらに別の例に関しては、一時停止は、新しいスレッドへの移行がシステム・コール命令に応答して行われたかどうかに基づいて選択的にすることが可能である。さらに別の例に関しては、マイクロプロセッサが、スレッドの前の実行インスタンスに関する情報を収集し、一時停止は、命令の長さ及びパフォーマンス情報などの情報に基づいて選択的にすることが可能である。さらなる例に関しては、一時停止は、スレッドのアイデンティティーに基づいて選択的にすることが可能である。スレッド・アイデンティティーは、たとえば、移行をもたらしたイベントのタイプ、イベントが発生したときのプロセッサのアーキテクチャー状態、及びそれらの組合せに基づいて特定することが可能である。イベント・タイプは、たとえば、システム・コールの実行、ソフトウェア割り込み命令の実行、特権間又はタスク・スイッチ・プロシージャー・コールの実行、及び例外状況の検知を含むことができる。さらにまた、マイクロプロセッサは、予測履歴の蓄積及び使用の一時停止中に、予測履歴をローカル・ストレージに保存して復元することができる。
用語集
予測ユニットは、マイクロプロセッサ上で実行される命令のストリームが取るであろうアクションに関する予測を行うマイクロプロセッサのハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組合せである。予測は、分岐命令が、マイクロプロセッサに指示して、分岐命令のターゲット・アドレスの予測;ストリームの命令によってアクセスされるであろうデータの予測;ストア衝突が生じるかどうかの予測;の分岐を行うかどうかの予測含むことができるが、それらには限定されない。予測ユニットは、マイクロプロセッサによって実行される命令の特徴の履歴に基づいて予測を行い、その予測は、動的な予測と呼ばれる。予測ユニットは、マイクロプロセッサがストリームの命令を実行する際に、履歴を蓄積する。履歴は、分岐命令が、マイクロプロセッサに指示して、受け入れられた分岐命令のターゲット・アドレス;ストリームの命令によってロード又は格納されたデータのアドレス;キャッシュ可能なメモリ・ロケーションを指定するストア命令に関連した情報、たとえば、ストア命令のアドレス、ストア・アドレスを計算するために使用されたソースの識別子、ストア・データが依存する命令の並べ替えバッファ・インデックス、以前にストア命令と衝突したロード命令のアドレス及び並べ替えバッファ・インデックス、衝突するロード命令とストア命令との間における並べ替えバッファ・インデックス差分、衝突するロード命令がリプレイされた回数のインジケータなど;の分岐を行うかどうかの結果を含むことができるが、それらには限定されない。予測ユニットは、履歴に基づかずに予測を行うこともでき、その予測は、静的な予測と呼ばれる。
マイクロプロセッサの特権レベルは、マイクロプロセッサの命令セット・アーキテクチャーによって定義され、メモリ領域、I/Oポート、及び命令セットの特定の命令などのシステム・リソースへの現在実行中のプログラムのアクセスを制御する。
スレッドは、マイクロプロセッサによって実行される一連の命令である。
プロセスは、オペレーティング・システムによってその他のプロセスとともに管理されるスレッド及びその関連付けられた状態である。オペレーティング・システムは、プロセスにプロセス識別子を割り振る。
ここで図1を参照すると、マイクロプロセッサ100のブロック図が示されている。マイクロプロセッサ100は、予測ユニット109を含む。予測ユニット109は、制御ユニット124及び予測履歴ストレージ108に結合されている。制御ユニット124は、リタイア済み(retired)命令カウンタ113と、パフォーマンス・カウンタ114と、現在特権レベル・レジスタ111と、最適化情報112を保持するためのストレージとに結合される。一実施形態においては、マイクロプロセッサ100は、命令キャッシュと、命令変換ユニット又は命令デコーダと、レジスタ・リネーミング・ユニットと、リザベーション・ステーションと、データ・キャッシュと、実行ユニットと、メモリ・サブシステムと、並べ替えバッファを含むリタイア・ユニットとを含む機能ユニット(図示せず)の1つ又は複数のパイプラインを含む。好ましくは、マイクロプロセッサ100は、スーパースカラのアウトオブオーダー(順序に関係ない)実行のマイクロアーキテクチャーを含む。予測ユニット109は、マイクロプロセッサ100のさまざまな機能ユニット内に組み込むことが可能であり、又は機能ユニットそのものとすることが可能である。
予測ユニット109は、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組合せを含む。予測ユニット109は、予測履歴132Aを格納するためのストレージ・アレイを含む分岐予測ユニット102と、予測履歴132Bを格納するためのストレージ・アレイを含むデータ・プリフェッチ・ユニット104と、予測履歴132Cを格納するためのストレージ・アレイを含むストア衝突予測ユニット106とを含む。それらの予測履歴は、個別に予測履歴132と呼ばれ、又は総称して予測履歴132と呼ばれる。予測ユニット109は、推論的なオペレーションを通じてマイクロプロセッサ100のパフォーマンスを改善すること及び/又は電力消費を低減することを試みる目的で、命令/データ処理のさまざまな態様に関する予測を行うために各自の予測履歴132を使用する。より具体的には、分岐予測ユニット102は、マイクロプロセッサ100によって実行された分岐命令の命令アドレス、(受け入れられた、又は受け入れられなかった)指示、及びターゲット・アドレスの履歴を蓄積して、分岐予測ユニット102が、それらの分岐命令のその後の実行インスタンスの指示及びターゲット・アドレスを動的に予測することを可能にする。動的な分岐予測技術は、分岐予測の技術分野においては、よく知られている。データ・プリフェッチ・ユニット104は、キャッシュ可能なメモリ領域へのプログラム命令によるアクセスの履歴を蓄積して、キャッシュ可能なメモリ領域からのどのデータがプログラムによって今後アクセスされることになるかを予測するために使用するメモリ・アクセス・パターンを検知して、その予測されたデータを、プログラムがそのデータを要求する前に、システム・メモリからマイクロプロセッサ100のキャッシュ・メモリへとプリフェッチして、メモリ・アクセス時間を低減する(システム・メモリの待ち時間は、キャッシュ・メモリの待ち時間よりもはるかに長いためである)。動的なデータ・プリフェッチ技術は、データ・プリフェッチングの技術分野においては、よく知られている。ストア衝突予測ユニット106は、キャッシュ可能なメモリ位置を指定するストア命令の履歴を蓄積して、ストア衝突がいつ生じることになるかを予測する。ストア衝突は、より新しいロード命令が、より古いストア命令のデータと重なるデータを指定する場合に生じる。ストア衝突を予測することによって、マイクロプロセッサ100が、データをストア命令からロード命令へ推論的に転送すること、及び/又は衝突するロード命令を、より古いストア命令に対して順序から外れて実行するのを回避することを可能にすることができる。実施形態は、これらの特定のタイプの予測ユニットに限定されるものではなく、命令がマイクロプロセッサ100によって実行される際にそれらの命令の特徴の履歴を蓄積するその他のタイプの予測ユニットを含むことができ、それらの特徴は、予測ユニットが、マイクロプロセッサ100のパフォーマンスを高めること、及び/又はその電力消費を低減することを試みるために、その後に実行される命令の複数の態様に関する予測を行うこと、又はその他の推論的なオペレーションを実行することを可能にする上で役立つということを理解されたい。
予測ユニット109のうちのそれぞれによって行われる動的な予測、すなわち、予測履歴132を使用して行われる予測に加えて、予測ユニット109のうちのそれぞれはまた、静的な予測、すなわち、予測履歴132の使用を伴わずに行われる予測を行うように構成される。たとえば、一実施形態においては、分岐予測ユニット102は、逆方向であるターゲット・アドレスを有するすべての分岐命令(たとえば、負の値であるオフセットを有する相対分岐)が受け入れられ、順方向であるターゲット・アドレスを有するすべての分岐命令が受け入れられないであろうと静的に予測し、これは、以前に実行された命令のいかなる履歴も必要としない。別の例に関しては、一実施形態において、データ・プリフェッチ・ユニット104は、キャッシュ可能なメモリにプログラムがアクセスしたことを検知した場合には、データの次なるシーケンシャル・キャッシュ・ラインが必要とされるであろうと静的に予測し、したがって、データの次なるシーケンシャル・キャッシュ・ラインをプリフェッチする。静的な予測方法も、中央処理装置の技術分野においては、よく知られている。
一実施形態においては、予測履歴ストレージ108は、以降でさらに詳細に説明するように、ユーザ特権レベルからスーパーバイザ特権レベルへの移行など、1つのスレッドを実行させることから、別のスレッドを実行させることへの移行をマイクロプロセッサ100に行わせるイベントに応答して予測履歴132を保存するために、及びスーパーバイザ特権レベルからユーザ特権レベルへ戻る移行、好ましくは、スーパーバイザ特権レベルへの移行が実行されたときに実行していたのとは異なるユーザ・プロセスへ戻る場合の移行をマイクロプロセッサ100に行わせるイベントに応答して予測履歴132を復元するために、予測ユニット109によって使用される。
現在特権レベル・レジスタ111は、マイクロプロセッサ100の現在特権レベルを格納する。カリフォルニア州サンタクララのインテル・コーポレーションによるIntel 64及びIA−32アーキテクチャー・ソフトウェア開発者のマニュアル、合併巻:1、2A、2B、2C、3B、及び3C、注文番号325464−043US、2012年5月において効果的に説明されているx86アーキテクチャー(別称として、Intel IA−32アーキテクチャー及び/又はIntel 64アーキテクチャーとして知られている)にマイクロプロセッサ100が実施形態においては実質的に準拠している。とりわけ、x86の実施形態においては、現在特権レベル・レジスタ111は、マイクロプロセッサ100が、現在特権レベル0、1、2、又は3において、すなわち、リング0、リング1、リング2、又はリング3において実行しているかどうかを示す。リング0は、最も特権の高いレベルであり、リング3は、最も特権の低いレベル(ユーザ特権レベル)である。リング0、1、及び2は、スーパーバイザ特権レベルである。
リタイア済み命令カウンタ113は、命令がリタイアするたびにインクリメントを行う。以降でさらに詳細に説明するように、マイクロプロセッサ100がスレッドを実行させることを開始したときの、たとえばリング0に入ったときの命令カウンタ113の値を、マイクロプロセッサ100が別のスレッドを実行することを開始したときの、たとえばリング0から出たときの命令カウンタ113の値から差し引くことによって、制御ユニット124は、いくつの命令がそのスレッドによってリタイアされたかを特定することができる。一実施形態においては、命令カウンタ113は、リタイアしたマクロ命令(すなわち、x86命令などのアーキテクチャー命令)の数をカウントし、その一方で別の実施形態においては、命令カウンタ113は、リタイアしたマイクロ命令(すなわち、マイクロプロセッサ100のマイクロアーキテクチャー命令セットによって定義された非アーキテクチャー命令であり、マイクロプロセッサ100の命令トランスレータによってマクロ命令がこの非アーキテクチャー命令へと変換され、この非アーキテクチャー命令は、マイクロプロセッサ100の実行ユニットによって実行される)の数をカウントする。
パフォーマンス・カウンタ114は、マイクロプロセッサ100のパフォーマンス及び/又は電力消費に関連した多くの態様をカウントする複数のカウンタを含む。一実施形態においては、パフォーマンス・カウンタ114は、予測された分岐命令;正しく予測された分岐命令;誤って予測された分岐命令;データ・プリフェッチによって割り当てられたキャッシュ・ライン;非プリフェッチ・メカニズム、たとえば、デマンド・ロード/ストア又はダイレクト・メモリ・アクセス(DMA)要求によって割り当てられたキャッシュ・ライン;データ・プリフェッチによって割り当てられたキャッシュ・ラインへのプログラム・アクセス;使用される前にエビクト(evict)されるデータ・プリフェッチによって割り当てられたキャッシュ・ライン;ストア衝突予測;検知された実際のストア衝突;をカウントする。
最適化情報112は、本明細書において、特に図3の実施形態に関してさらに詳細に説明するように、たとえば、スーパーバイザ・レベルのオペレーション中に、予測履歴132の蓄積及び使用を選択的に一時停止するために使用される。
制御ユニット124は、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組合せを含む。制御ユニット124は、自分の入力(主に現在特権レベル111、最適化情報112、リタイア済み命令カウンタ113、パフォーマンス・カウンタ114、スレッド移行イベント・タイプ、及びアーキテクチャー状態)に基づいて、予測ユニット109に対して、各自の予測履歴132を蓄積すること及びそれらの予測履歴132を使用して予測を行うことを継続するように、若しくは一時停止するように、並びに/又は予測子履歴ストア108に予測履歴132を保存するように/予測子履歴ストア108から予測履歴132を復元するように制御を行う。一実施形態においては、制御ユニット124は、ハードウェア状態マシン、マイクロコード、又はハードウェア状態マシン及びマイクロコードの組合せを含む。一実施形態においては、マイクロコードは、マイクロプロセッサ100の実行ユニットによって実行される命令を含む。
一実施形態においては、マイクロコードのフェッチングを制御するマイクロコード・ユニット(図示せず)が、自分自身のフェッチ・ユニット、又はシーケンサを含み、ユーザ・プログラムの分岐命令のみを予測する分岐予測ユニット102を採用しない。
次いで図2を参照すると、図1のマイクロプロセッサ100のオペレーションを示すフローチャートが示されている。フローは、ブロック202において開始する。
ブロック202において、ユーザ特権レベル、たとえばリング3で機能するスレッドを実行している間に、予測ユニット109のうちのそれぞれは、マイクロプロセッサ100がそのスレッドの命令を処理している際に、各自の予測履歴132を蓄積し、その予測履歴132を使用して動的な予測を行う。フローは、ブロック212へ進む。
ブロック212において、制御ユニット124は、スーパーバイザ特権レベル、たとえばリング0で機能するようマイクロプロセッサ100に指示するイベントを検知する。そのイベントはまた、マイクロプロセッサ100に、現在実行中のスレッドとは異なるスレッドへコントロールを移す。そのイベントの例としては、システム・コール命令(たとえば、x86 SYSENTER/SYSCALL命令)、ソフトウェア割り込み(たとえば、x86 INT命令)、又は特権レベル間若しくはタスク・スイッチ・プロシージャー・コール命令(たとえば、x86 CALL命令)などの命令の実行;及びハードウェア割り込み(たとえば、タイマー・ティック、I/Oデバイス)又はページ・フォールトなどの例外状況の検知が含まれるが、それらには限定されない。一実施形態においては、そのイベントは、マイクロプロセッサ100に、コントロールをマイクロコードへ移し、マイクロコードは、さまざまなオペレーション(たとえば、許可チェック)を実行した後に、そのイベントを取り扱うことになるオペレーティング・システムのリング0スレッド又はルーチンへコントロールを移す。フローは、ブロック222へ進む。
ブロック222において、制御ユニット124は、ブロック212において検知されたイベントに応答して、予測ユニット109に対して、マイクロプロセッサ100がスーパーバイザ特権レベルで新しいスレッドを実行している間は、各自の予測履歴132を蓄積すること及びその予測履歴を使用して予測を行うことを一時停止するようにコントロールを行う。しかしながら、予測ユニット109は、予測履歴132の使用を必要としない静的な予測を引き続き行う。一実施形態においては、制御ユニット124は、予測ユニット109のうちのいくつかに関しては、予測履歴132を蓄積すること及び予測を行うことを一時停止することができるが、その他の予測ユニット109に関しては、蓄積すること及び予測を行うことを一時停止することはできない。さらに、どの予測ユニット109を一時停止するか、及びどれを一時停止しないかに関する決定は、マイクロプロセッサ100が機能する際に動的にすることが可能である。たとえば、一時停止する予測ユニット109のサブセット及び一時停止しない予測ユニット109のサブセットは、オペレーティング・システム又はBIOSなどによってプログラム可能とすることができる。別の例に関しては、それらのサブセットは、ユーザによって、又はサービス担当者によって、マイクロプロセッサ100の製造中に、又は現場において飛ぶことがあるヒューズを介して構成可能とすることができる。別の例に関しては、サブセットは、以降で図3の実施形態に関して説明するように、実行することになる特定のリング0スレッドに基づいて特定することが可能である。フローは、ブロック232へ進む。
ブロック232において、制御ユニット124は、ユーザ特権レベル、たとえばリング3で機能するようマイクロプロセッサ100に指示するイベントを検知する。そのイベントはまた、マイクロプロセッサ100に、現在実行中のスレッドとは異なるスレッドへコントロールを移す。そのイベントの例としては、システム・コール・リターン命令(たとえば、x86 SYSEXIT/SYSRET命令)、割り込み若しくは例外からのリターン(たとえば、x86 IRET命令)、又はプロシージャー命令からの特権レベル間リターン(たとえば、x86 RETF命令)などの命令の実行が含まれるが、それらには限定されない。一実施形態においては、そのイベントは、マイクロプロセッサ100に、コントロールをマイクロコードへ移し、マイクロコードは、さまざまなオペレーションを実行した後に、リング3プロセスへコントロールを移す。フローは、ブロック242へ進む。
ブロック242において、予測ユニット109は、マイクロプロセッサ100が命令を処理している際に、各自の予測履歴132を蓄積すること及び予測履歴132を使用して動的な予測を行うことを再開する。フローは、ブロック242において終了する。
確認されるように、ブロック242においてコントロールが戻される先のリング3プロセスが、ブロック212においてイベントによって割り込まれたのと同じリング3プロセスである場合には、予測履歴132は、リング0移行の前の状態、すなわち、リング3プロセスが割り込まれたときの状態と同じはずである。なぜなら、それらの予測履歴132は、リング0スレッドによって汚されていないためである。したがって、予測ユニット109は、有利なことに、イベントの後にリング3プロセスのスレッドに関して前と同じぐらい正確な動的な予測を引き続き行うことになる可能性が非常に高い。また、リング0スレッドを実行しているときの予測パフォーマンスは、リング3プロセスを実行しているときの予測パフォーマンスよりも低くなる可能性が高い。なぜなら、リング0スレッド予測に関しては、静的な予測のみが使用されることになるからである。しかしながら、リング0スレッド及び/又はリング3プロセスの特徴に応じて、リング3プロセス予測履歴の汚れが少なくなること又はなくなることに起因するリング3パフォーマンスの改善が、特にリング0スレッドの稼働が短時間及び/又は低頻度である場合には、リング0パフォーマンスにおけるロスよりも優勢となることを期待して、リング0スレッドを実行しているときのパフォーマンスを犠牲にすることが有利である場合がある。
次いで図3を参照すると、代替実施形態による、図1のマイクロプロセッサ100のオペレーションを示すフローチャートが示されている。図3のいくつかのブロックは、図2のブロックと同じであり、同じ番号が付けられている。好ましくは、リセット時に、制御ユニット124は、以降でさらに詳細に説明する最適化情報112のデータ構造を初期化する。フローは、ブロック202において開始する。
ブロック202において、スレッドがユーザ特権レベル、たとえばリング3で機能している間に、予測ユニット109のうちのそれぞれは、マイクロプロセッサ100が命令を処理している際に、各自の予測履歴132を蓄積し、その予測履歴132を使用して動的な予測を行う。フローは、ブロック212へ進む。
ブロック212において、制御ユニット124は、スーパーバイザ特権レベル、たとえばリング0で機能するようマイクロプロセッサ100に指示する、及びマイクロプロセッサ100に、現在実行中のスレッドとは異なるスレッドへコントロールを移すイベントを検知する。フローは、ブロック311へ進む。
ブロック311において、制御ユニット124は、リング0において実行することになるスレッドを識別することを試みて、リング0スレッドに関する識別子を生成する。一実施形態においては、以降で説明する最適化情報112のデータ構造は、制御ユニット124によってマイクロプロセッサ100のプライベート・メモリ内に保持されているテーブルを含む。そのテーブル内のそれぞれのエントリーは、別々のリング0スレッド識別子に関連付けられている。リング0スレッド識別子を生成するために採用されている機能は、スレッド移行が検知されたときのマイクロプロセッサ100のイベント・タイプ及び状態値などのさまざまな入力を受け取ることができる。イベント・タイプは、図2のブロック212に関して上述されているさまざまなイベント・タイプのうちの1つとすることが可能であるが、それらの例には限定されない。状態値は、汎用レジスタ値、モデル固有のレジスタ値、システム・コールを行ったリング3プロセスの命令ポインタ(IP:instruction pointer)又はプログラム・カウンタ(PC)値、ソフトウェア割り込み、特権間又はタスク・スイッチ・プロシージャー・コール、及び割り込み又は例外に関連付けられた割り込みベクトル番号とすることが可能であるが、これらの例には限定されない。状態値の入力は、イベント・タイプに応じて変えることが可能である。たとえば、リング3プロセスが、(たとえば、x86 SYSENTER命令を介して)Microsoft(登録商標) Windows(登録商標)オペレーティング・システムに対してシステム・コールを行った場合には、Windowsは、x86 EAXレジスタ内の値に、そしていくつかのインスタンスにおいては、その他のレジスタの値に応じて、別々のスレッドを実行させるということが確認されている。したがって、一実施形態においては、イベント・タイプがシステム・コール命令である場合には、制御ユニット124は、EAXレジスタの値を検査し、別々のEAX値ごとに別々のリング0識別子を生成する。その他のオペレーティング・システムに関しては、その他の実施形態が想定される。別の例に関しては、制御ユニット124は、別々の割り込みベクトル値ごとに別々のリング0識別子値を生成することができる。フローは、ブロック313へ進む。
ブロック313において、制御ユニット124は、ブロック311において生成されたリング0識別子を最適化情報112のデータ構造内で探して、リング0識別子によって識別されたリング0スレッドに関連付けられた最適化情報112を得る。一実施形態においては、リング0識別子が最適化情報112のデータ構造内に存在しない場合には、制御ユニット124は、デフォルトのリング0エントリー・アクション(すなわち、予測履歴132を蓄積するか否か、及びその予測履歴132を使用して動的な予測を行うか否かに関してリング0へのエントリーに関連付けられたデフォルトのアクション)を実行し、リング0識別子に関する最適化情報112のデータ構造内にエントリーを割り当てる。一実施形態においては、デフォルトのリング0エントリー・アクションは、予測履歴132を蓄積すること及びそれらの予測履歴132を使用して予測を行うことを一時停止することである。リング0識別子が存在している場合には、制御ユニット124は、関連付けられた最適化情報112に基づいて、デフォルトのリング0エントリー・アクションをオーバーライドするかどうかを決定する。一実施形態においては、最適化情報112は、リング0スレッドに関連付けられた長さを含み、制御ユニット124は、リング0スレッドの長さが所定の長さよりも短い場合には、予測履歴132を蓄積及び使用することを一時停止することを、及びそうでない場合には、予測履歴132を蓄積及び使用することを継続することを決定する。一実施形態においては、その長さは、リタイア済み命令カウンタ113を使用して得られる、リング0スレッドの前の実行中にリタイアされた命令の数として表される。一実施形態においては、最適化情報112は、リング0スレッドの前の実行インスタンス中に、及び/又はリング0スレッドの前の実行インスタンスの後のリング3プロセスの前の実行中に、予測履歴132に基づいて行われた予測の有効性に関する情報を含む。一実施形態においては、その有効性は、パフォーマンス・カウンタ114を使用して得られる。フローは、決定ブロック315へ進む。
決定ブロック315において、制御ユニット124は、予測履歴132を蓄積すること及びそれらの予測履歴132を使用して予測を行うことを一時停止するかどうかを決定する。そうである場合には、フローはブロック222へ進み、そうでない場合には、フローはブロック321へ進む。予測履歴132を蓄積するか否か、及びその予測履歴132を使用して動的な予測を行うか否かの決定が、スレッド識別子に関連付けられた最適化情報112に基づいて行われる実施形態について説明しているが、その決定は、基準によって行ってもよい。たとえば、制御ユニット124は、最適化情報112への参照を伴わずに、実行中の移行が行われている先の新しいスレッドのアイデンティティー又は特徴に基づいて(説明されているさまざまな入力の任意の組合せを使用して)決定を行うことができる。すなわち、新しいスレッドの特徴(たとえば、新しいスレッドへの移行に関連付けられているイベント・タイプ及び/若しくはアーキテクチャー状態、たとえば図2関して説明されているような特権レベル、又は新しいスレッドが割り込みハンドラであるかどうか)は、予測履歴132を蓄積するか否か、及びその予測履歴132を使用して動的な予測を行うか否か、すなわち、予測履歴132を蓄積すること及びその予測履歴132を使用して動的な予測を行うことを選択的に一時停止するかどうかの決定の基礎となるには十分であると言える。一般的に言えば、このアプローチは、稼働が著しく短時間及び/又は低頻度であるスレッドに関して、予測履歴132を蓄積すること及びその予測履歴132を使用して動的な予測を行うことを一時停止することであり、その理由は、より低劣な予測精度を伴うそれらの特徴を有するスレッドを、その他の著しく長時間及び/又は高頻度の稼働のスレッドの予測履歴132を汚さないことと引き換えに実行させることは、その他のスレッドに関する予測精度が高まり、マイクロプロセッサ100の全体的なパフォーマンスが高まる結果となる可能性が高いということである。
ブロック222において、制御ユニット124は、ブロック212において検知されたイベントに応答して、予測ユニット109に対して、マイクロプロセッサ100がスーパーバイザ特権レベルで実行している間は、各自の予測履歴132を蓄積すること及びその予測履歴を使用して予測を行うことを一時停止するように制御を行う。しかしながら、予測ユニット109は、予測履歴132の使用を必要としない静的な予測を引き続き行う。フローは、ブロック321へ進む。
ブロック321において、リング0スレッドが実行している間に、制御ユニット124は、パフォーマンス・カウンタ114を介した予測有効性、及びリタイア済み命令カウンタ113からのスレッドの長さなど、リング0スレッドに関する最適化情報を継続的に収集する。一実施形態においては、制御ユニット124は、予測ユニット109によって行われる動的な予測に加えて、静的な予測に関する予測有効性を収集する。一実施形態においては、制御ユニット124はまた、リング3スレッドに関する予測有効性情報を収集する。好ましくは、静的に予測されたスレッドのパフォーマンスが許容可能である場合には、制御ユニット124は、そのスレッドが実行しているときに、特にその他のスレッドのパフォーマンスが著しく改善されているならば、予測履歴の蓄積及び使用を引き続き一時停止することができ、そうでない場合には、制御ユニット124は、そのスレッドが実行しているときに、予測履歴を蓄積及び使用することができる。フローは、ブロック232へ進む。
ブロック232において、制御ユニット124は、ユーザ特権レベル、たとえばリング3で機能するよう、及び現在実行中のスレッドとは異なるスレッドへコントロールを移すようマイクロプロセッサ100に指示するイベントを検知する。フローは、ブロック333へ進む。
ブロック333において、制御ユニット124は、ブロック321において収集された最適化情報を使用して、リング0スレッドに関連付けられた最適化情報112のデータ構造のエントリーを更新する。一実施形態においては、その更新は、エントリー内の最適化情報112を、新たに収集された最適化情報と単に置き換えることを含む。その他の実施形態においては、その更新は、収集された最適化情報を使用して計算を行うこと、及びそれらの計算を使用して最適化情報112を更新することを含む。たとえば、制御ユニット124は、リング0スレッドの最後のN回の実行に基づいて、リタイアした命令の数及び/又は予測有効性の平均を計算することができる。さらに、その平均は、加重平均又はローリング平均であってもよい。加えて、制御ユニット124は、最適化情報112から除外するために極値を選別することができる。さらに、最適化情報112のデータ構造を保持するさまざまな方法が想定される。たとえば、一実施形態においては、制御ユニット124は、自分がデフォルトのリング0エントリー・アクションをオーバーライドしたいと望む対象のリング0スレッドに関する最適化情報112のデータ構造内のエントリーのみを保持する。すなわち、制御ユニット124が、ブロック313においてリング0スレッド識別子を探して、それを最適化情報112のデータ構造内で見つけ出した場合には、制御ユニット124は、デフォルトのアクションをオーバーライドすることを決定ブロック315において決定する。フローは、決定ブロック335へ進む。
決定ブロック335において、制御ユニット124は、予測履歴132を蓄積及び使用することがブロック222において一時停止されたかどうかを特定する。そうである場合には、フローはブロック242へ進み、そうでない場合には、予測ユニット109は、予測履歴132を蓄積しており、引き続き予測履歴132を蓄積して、それらの予測履歴132を使用して予測を行い、フローは終了する。
ブロック242において、予測ユニット109は、マイクロプロセッサ100が命令を処理している際に、各自の予測履歴132を蓄積すること及び予測履歴132を使用して動的な予測を行うことを再開する。フローは、ブロック242において終了する。
次いで図4を参照すると、代替実施形態による、図1のマイクロプロセッサ100のオペレーションを示すフローチャートが示されている。図4のいくつかのブロックは、図2のブロックと同じであり、同じ番号が付けられている。フローは、ブロック202において開始する。
ブロック202において、スレッドがユーザ特権レベル、たとえばリング3で機能している間に、予測ユニット109のうちのそれぞれは、マイクロプロセッサ100が命令を処理している際に、各自の予測履歴132を蓄積し、その予測履歴132を使用して動的な予測を行う。フローは、ブロック212へ進む。
ブロック212において、制御ユニット124は、スーパーバイザ特権レベル、たとえばリング0で機能するようマイクロプロセッサ100に指示する、及びマイクロプロセッサ100に、現在実行中のスレッドとは異なるスレッドへコントロールを移すイベントを検知する。フローは、ブロック222へ進む。
ブロック222において、制御ユニット124は、ブロック212において検知されたイベントに応答して、予測ユニット109に対して、マイクロプロセッサ100がスーパーバイザ特権レベルで新しいスレッドを実行している間は、各自の予測履歴132を蓄積すること及びその予測履歴を使用して予測を行うことを一時停止するように制御を行う。しかしながら、予測ユニット109は、予測履歴132の使用を必要としない静的な予測を引き続き行う。フローは、ブロック413へ進む。
ブロック413において、制御ユニット124は、予測履歴132の現在のインスタンスを予測履歴ストレージ108に格納する。一実施形態においては、制御ユニット124は、所与の予測履歴132の一部分のみを保存して、保存を実行するために必要とされる時間の量を低減する。たとえば、分岐予測ユニット102の予測履歴132Aが相対的に大きい(たとえば、8KBである)場合には、制御ユニット124は、予測履歴132A全体よりもむしろ、最も新しくアクセスされたエントリー(たとえば、512バイト)のみを保存することができる。一実施形態においては、制御ユニット124は、予測履歴132の保存されていない部分を無効にする。さらに、一実施形態においては、制御ユニット124は、予測ユニット109のうちのすべてではなく、予測ユニット109のうちのいくつかのみに関する予測履歴132を保存する。たとえば、予測ユニット109の第1のサブセットの予測有効性が、リング0スレッドによって割り込まれた場合に、予測ユニット109の第2のサブセットよりもさらにいっそう大幅に悪影響を与えるということが特定された場合には、制御ユニット124は、第2のサブセットではなく第1のサブセットの予測履歴132を保存してもよい。好ましくは、制御ユニット124は、一意のリング3識別子によって識別される別々のリング3プロセスにそれぞれが関連付けられた複数のエントリーを予測履歴ストレージ108内に保持する。一実施形態においては、リング3プロセスは、上述のIntel64及びIA−32アーキテクチャー・ソフトウェア開発者のマニュアルのボリューム3Aの4−46ページ〜4−62ページのセクション4.10において説明されているような自分のx86プロセスコンテキスト識別子(PCID)によって識別される。別の実施形態においては、リング3プロセスは、x86 CR3制御レジスタへとロードされる、リング3プロセスによって使用されるページ・ディレクトリのアドレスによって識別される。一実施形態においては、制御ユニット124は、予測履歴ストレージ108を先入れ先出しバッファとして保持する。別の実施形態においては、制御ユニット124は、最も古く使用された、又は最も低頻度で使用されたなど、より洗練された代替ポリシーを採用する。好ましくは、予測履歴ストレージ108への予測履歴132の保存は、マイクロプロセッサ100の機能ユニットがリング0スレッドの命令を引き続き処理していて、リング0スレッドの実行時間が予測履歴の保存時間よりも長くなる可能性が高い間に、実行される。しかしながら、有利なことに、予測履歴の保存と、リング0命令の処理との間において、予測履歴132を格納するストレージ・アレイの読み取りポート及び書き込みポートにアクセスするための競合がない。なぜなら、予測履歴132のアレイは、予測履歴を蓄積する目的でアクセスされている(すなわち、書き込まれている)、又はリング0命令を処理する目的で予測を行う(すなわち、読み取りを行う)のではなく、予測履歴を保存する目的で読み取られているだけだからである。これは有利である。なぜなら、予測履歴の保存に対応するために必要とされるさらなるハードウェアの量が最小化されるからであり、それは、その目的のためにストレージ・アレイ上にさらなる読み取りポートを含む必要がないからである。フローは、ブロック232へ進む。
ブロック232において、制御ユニット124は、ユーザ特権レベル、たとえばリング3で機能するよう、及び現在実行中のスレッドとは異なるスレッドへコントロールを移すようマイクロプロセッサ100に指示するイベントを検知する。フローは、ブロック433へ進む。
決定ブロック433において、制御ユニット124は、コントロールが移行される先の新しいリング3スレッドと、ブロック212においてコントロールが移行した元の古いリング3スレッドとが、同じプロセスの一部であるかどうかを特定する。ブロック413に関して上述したように、制御ユニット124は、x86 PCIDなど、2つのスレッドに関連付けられたプロセス識別子同士を比較することによって、この特定を行うことができる。新しいリング3スレッド・プロセスが、古いリング3スレッド・プロセスとは異なる場合には、フローはブロック435へ進み、そうでない場合には、フローはブロック242へ進む。
ブロック435において、制御ユニット124は、新しいリング3プロセスに関する予測履歴132を予測履歴ストレージ108から復元する。すなわち、制御ユニット124は、新しいリング3プロセス識別子を使用して、その予測履歴を予測履歴ストレージ108内で見つけ出し、そのリング3プロセス識別子に基づいて予測履歴ストレージ108から予測ユニット109の予測履歴132をロードする。好ましくは、予測履歴ストレージ108からの予測履歴132の復元は、リング0からリング3への移行を実行するマイクロコードの命令をマイクロプロセッサ100の機能ユニットが引き続き処理している間に、実行される。マイクロコードの実行時間は、かなりの数のクロック・サイクルになることがあり、予測履歴132の復元を実行するために必要とされる時間よりも長くなることがあり、これは有利である場合がある。それは、リング移行マイクロコードと、予測履歴の復元との間において、予測履歴132のストレージ・アレイの読み取りポート及び書き込みポートにアクセスするための競合がほとんど又はまったくないと言えるからであり、なぜなら、予測履歴132のアレイのうちの多くは、予測履歴を蓄積する目的でアクセスされている(すなわち、書き込まれている)、又はリング0命令を処理する目的で予測を行う(すなわち、読み取りを行う)のではなく、予測履歴を復元する目的でそうされているだけだからである。たとえば、一実施形態においては、マイクロコード・ユニットは、分岐予測ユニット102を採用しておらず、すなわち、分岐予測ユニット102は、マイクロコード命令に関する予測を行わない。別の例に関しては、一実施形態において、リング移行マイクロコードは、システム・メモリにアクセスせず、したがって、データ・プリフェッチ・ユニット104は、リング移行マイクロコードに関するデータ・プリフェッチを行う必要がなく、ストア衝突予測ユニット106は、リング移行マイクロコードに関する予測を行う必要がない。これは有利である。なぜなら、予測履歴の復元に対応するために必要とされるさらなるハードウェアの量が最小化されるからであり、それは、その目的のためにストレージ・アレイ上にさらなる書き込みポートを含む必要がないからである。フローは、ブロック242へ進む。
ブロック242において、予測ユニット109は、マイクロプロセッサ100が命令を処理している際に、各自の予測履歴132を蓄積すること及び予測履歴132を使用して動的な予測を行うことを再開する。フローは、ブロック242において終了する。
有利なことに、新しいリング3スレッドの命令の処理は、古いリング3スレッドに関連付けられた予測履歴132を汚しておらず、この結果、両方のリング3スレッドに関する予測精度を高めることができる。
予測履歴132を蓄積及び使用するのを一時停止しないことを制御ユニット124が決定する対象のリング0スレッドに関連付けられている、たとえば、相対的に長いリング0スレッドに関する、並びに/又は、リング0スレッドの前の実行インスタンス及び/若しくはリング3プロセス中に行われた予測の有効性に基づいて、予測履歴132を蓄積及び使用することに値するリング0スレッドに関する予測履歴132を制御ユニット124が保存及び復元するように図3の実施形態及び図4の実施形態が効果的に組み合わされるその他の実施形態も想定される。上述したように、リング3からリング0へ、及びその逆へマイクロプロセッサ100が移行するために必要とされる時間は、相当な数のクロック・サイクルになることがあり、その間は、予測履歴132を蓄積する必要も、それらの予測履歴132を使用して予測を行う必要もなく、したがって、この時間中には、制御ユニット124は、著しいパフォーマンス・ペナルティーを(たとえあったとしても)実質的には伴わずに、関連のある予測履歴132を予測履歴ストレージ108に保存すること/予測履歴ストレージ108から復元することが可能である。そのような実施形態においては、保存及び復元が完了するまで、マイクロプロセッサ100による命令実行を停止することを回避できるように、保存及び復元される予測履歴132の量を、リング0からリング3への移行及びリング3からリング0への移行中に保存及び復元することが可能である量に制限することが特に有利である場合がある。
加えて、マイクロプロセッサ100が、1つの特権レベルから別の特権レベルへのスレッド移行に応答して、予測履歴の蓄積及び予測を行うためのその予測履歴の使用を選択的に一時停止する実施形態が説明されているが、マイクロプロセッサ100が、同じ特権レベル内でのスレッド移行に応答して、予測履歴の蓄積及び予測を行うためのその予測履歴の使用を選択的に一時停止又は再開するその他の実施形態も想定される。たとえば、マイクロプロセッサ100は、特権レベルの変更を含まないイベントを検知することによってスレッド移行を検知すること、並びにそれに応答して、予測履歴の蓄積及び予測を行うためのその予測履歴の使用を一時停止又は再開することを決定することが可能である。たとえば、マイクロプロセッサ100は、特定のIP値における、及び汎用レジスタ値など、その他のアーキテクチャー状態の特定の値を伴ういくつかのインスタンスにおける命令(サブルーチン・コール又はリターン命令など)の実行を単に検知することができる。別の例に関しては、マイクロプロセッサ100は、一連の命令及び/又はIP値を検知することができる。
OSルーチンのための予測履歴ストレージのフラクショナルな使用
次いで図5を参照すると、制御情報テーブル500を示すブロック図が示されている。制御情報テーブル500は、図1の最適化情報112を保持するためのストレージの一実施形態である。テーブル500は、オペレーティング・システム(OS)ルーチン識別子502及び関連付けられた制御情報504をそれぞれが保持する複数のエントリーを含む。OSルーチン識別子502は、OSルーチンが実行を開始したときに制御ユニット124がそのOSルーチンを識別することを可能にする状態値(たとえば、x86 SYSCALL命令が実行されたときのOSルーチンのIP及び汎用レジスタ値)など、最適化情報112に関して上述したようなさまざまな情報を含むことができる。制御情報504は、数ある中でもフラクション(fraction)を指定する。予測履歴132のストレージは、予測履歴を蓄積するために別々に制御可能である諸部分を含む。すなわち、制御ユニット124は、OSルーチンが実行している間に、予測履歴を蓄積するために予測履歴ストレージ132の諸部分のうちのフラクションのみを使用するように予測ユニット109を制御することができ、そのフラクションは、実行しているOSルーチンに基づいて変えることが可能である。たとえば、予測履歴ストレージ132は、ウェイ(way)ごとに配列することが可能であり(たとえば、図6を参照されたい)、又は予測履歴ストレージ132は、セットごとに配列することが可能であり(たとえば、図7を参照されたい)、又は予測履歴ストレージ132は、エントリーのキュー(queue)として配列することが可能である(たとえば、図8を参照されたい)。これらのケースのそれぞれにおいては、予測履歴ストレージ132内のウェイ/セット/エントリーは、予測履歴を蓄積するために別々に制御可能とすることができ、OSルーチンに関連付けられた制御情報504内のフラクションは、以降でさらに詳細に説明するように、関連付けられたOSルーチンが実行している間に、予測履歴を蓄積するために使用される予測履歴132のストレージのフラクションを指定する。好ましくは、制御情報504は、マイクロプロセッサ100の予測ユニット109のうちのそれぞれの予測履歴132のストレージに関するフラクションを指定する。
一実施形態においては、テーブル500内の情報は、マイクロプロセッサ100の製造前に特定され、そのマイクロプロセッサ100の中に、たとえば、マイクロプロセッサ100のマイクロコード内に形成される。そのマイクロコードは、マイクロコード・パッチによって現場でアップグレード可能であり、たとえば、マイクロプロセッサ100を含むシステムのBIOSによって達成することが可能である。加えて、マイクロプロセッサ100用のデバイス・ドライバが、システムのオペレーション中に情報500をマイクロプロセッサ100へダウンロードすることができる。一実施形態においては、デバイス・ドライバは、所定のソフトウェア・アプリケーションが実行しているということを検知し、それに応答して、情報500をマイクロプロセッサ100へダウンロードし、これは有利なことに、情報500内のフラクションが、特定の関心のあるソフトウェア・アプリケーションのパフォーマンスを最適化するために、より細かい粒度で適合されることを可能にする。
次いで図6を参照すると、予測履歴キャッシュ600を示すブロック図が示されている。予測履歴キャッシュ600は、複数のウェイ602を有する連想キャッシュで配列されたキャッシュ・メモリを含む。図6の実施形態は、8つのウェイ602を含んでいるが、異なる数のウェイを伴うその他の実施形態も想定される。ウェイ602は、予測履歴132を保持するためのストレージである。一例として、予測履歴キャッシュ600のウェイ602内のそれぞれのエントリーは、上述したように、分岐予測(たとえば、分岐ターゲット・キャッシュ・データ)又はデータ・プリフェッチングを実行するために使用した予測履歴を保持することができる。有利なことに、ウェイ602同士は、予測履歴132を蓄積するために別々に制御可能である。たとえば、図5のテーブル500内のOS識別子502のうちの1つによって識別されたOSルーチンが、実行中として検知された場合には、予測履歴キャッシュ600は、その実行中のOSルーチンに関連付けられた制御情報504からフラクションを受け取り、N個のウェイ602のみが、予測履歴132を蓄積するために使用されることを可能にし、予測履歴132において、Nはフラクションの分子であり、フラクションの分母は、予測履歴キャッシュ600内のウェイ602の合計数である。たとえば、制御ユニット124は、予測履歴キャッシュ600の合計8つのウェイ602のうちの2つのウェイ602のみが、関連付けられたOSルーチンが実行している間に、予測履歴132を蓄積するために使用することを可能にすることができる。一実施形態においては、許容可能なウェイ602(たとえば、ウェイ4及び5のみ)が、制御情報504内で指定される。示されていないが、ウェイ602ごとの配列に加えて、図6の予測履歴キャッシュ600は、以降で図7に関して説明する様式と同様に、インデックス入力によってインデックス付けされた複数のセットとして配列されることも可能であるということを理解されたい。
次いで図7を参照すると、代替実施形態による、予測履歴キャッシュ700を示すブロック図が示されている。予測履歴キャッシュ700は、複数のセット702のうちの1つを選択するためのインデックス入力704(たとえば、命令のメモリ・アドレス、又はロード/ストア・アドレス)によってインデックス付けされた複数のセット702を有するインデックス付けされたキャッシュで配列されたキャッシュ・メモリを含む。図7の実施形態は、8つのセット702を含んでいるが、異なる数のセットを伴うその他の実施形態も想定される。セット702は、予測履歴132を保持するためのストレージである。一例として、予測履歴キャッシュ700のセット702内のそれぞれのエントリーは、上述したように、分岐予測又はデータ・プリフェッチングを実行するために使用した予測履歴を保持することができる。有利なことに、セット702同士は、予測履歴132を蓄積するために別々に制御可能である。たとえば、図5のテーブル500内のOS識別子502のうちの1つによって識別されたOSルーチンが、実行中として検知された場合には、予測履歴キャッシュ700は、その実行中のOSルーチンに関連付けられた制御情報504からフラクションを受け取り、N個のセット702のみが、予測履歴132を蓄積するために使用することを可能にし、予測履歴132において、Nはフラクションの分子であり、フラクションの分母は、予測履歴キャッシュ700内のセット702の合計数である。たとえば、制御ユニット124は、予測履歴キャッシュ700の合計8つのセット702のうちの2つのセット702のみが、関連付けられたOSルーチンが実行している間に、予測履歴132を蓄積するために使用することを可能にすることができる。一実施形態においては、許容可能なセット702(たとえば、セット0及び1のみ)が、制御情報504内で指定される。たとえば、制御ユニット124は、OSルーチンが実行しているときに、予測履歴132を蓄積するために使用される特定のセット702を限定するためにインデックス704の上位ビットを所定の値に修正するように予測履歴キャッシュ700を制御することができる。たとえば、64個のセット702(6ビットのインデックス704)を前提とすると、制御ユニット124は、インデックス704の上位7ビットをゼロに修正することによって、関連付けられたOSルーチンに関する予測履歴を蓄積するためにセット0及び1のみを使用するように予測履歴キャッシュ700を制御することができる。示されていないが、セット702ごとの配列に加えて、図7の予測履歴キャッシュ700は、図6に関して上述した様式と同様に、複数のウェイとして配列することも可能であるということを理解されたい。
次いで図8を参照すると、予測履歴キュー800を示すブロック図が示されている。予測履歴キュー800は、予測履歴132を保持するためのストレージを含む。そのストレージは、キューとして配列されている。キュー・ストレージ800は、関連付けられたOSフラグ804をそれぞれが有する予測履歴キュー・エントリー802を含む。OSフラグ804は、エントリー802がOSルーチンに、又はユーザ・ルーチンに関連付けられているかどうかを示す。一例として、それぞれの予測履歴キュー・エントリー802は、上述のように、メモリ曖昧性解消、たとえば、ストア衝突検知を実行するために使用された予測履歴を保持することができる。たとえば、エントリー802は、ストア・アドレス;そのストア・アドレスを計算するために使用されたストア命令のソースに関する情報;以前にストアが衝突したロード命令のIP値;まだ生成されていなかったアドレスを有するさらに古いストア命令と自分のロード・アドレスが衝突したことに起因して正しくないデータを受け取ったためにリプレイされたロード命令の並べ替えバッファ・インデックスと、衝突しているストア命令との間における差分;及び並べ替えバッファ・インデックス、たとえば、ストア命令のインデックス、又はストア命令が自分のストア・データに関して依存している命令のインデックス、ロード命令が実行されたときに利用可能ではなかったストア・データを有するさらに古いストア命令と自分のロード・アドレスが衝突したことに起因して正しくないデータを受け取ったためにリプレイされたロード命令の最も新しいインスタンスのインデックスを保持することができる。同様の情報を格納する予測履歴キュー800の例は、2009年10月23日に出願された米国特許非仮出願第12/604,767号に関連してさらに詳細に説明されており、その米国特許非仮出願第12/604,767号は、2009年5月29日に出願された米国特許仮出願第61/182,283号に対する優先権を主張するものであり、それらの出願のそれぞれは、その全体が参照によって本明細書に組み込まれる。
一実施形態においては、予測履歴キュー800は、現在OSルーチンに関連付けられている、たとえば、自分のOSフラグ804が設定されている有効なエントリー802の数を追跡把握するカウンタを含む。図5のテーブル500内のOS識別子502のうちの1つによって識別されたOSルーチンが、実行中として検知された場合には、予測履歴キュー800は、その実行中のOSルーチンに関連付けられた制御情報504からフラクションを受け取り、N個のエントリー802のみがOSルーチンによって占められることを可能にし、OSルーチンにおいて、Nはフラクションの分子であり、フラクションの分母は、キュー800内のエントリー802の合計数である。一実施形態においては、キュー800は、新しいエントリー802をプッシュしているときに、N個のOSルーチン・エントリー802のうちの最も古いものをエビクトする。一実施形態においては、キュー800は、最も古く使用された(LRU)情報を保持し、新しいエントリー802をプッシュしているときに、N個のOSルーチン・エントリー802のうちの最も古く使用されたもの(the least recently used)をエビクトする。一実施形態においては、OSルーチン・エントリーが予測履歴キュー800内へプッシュしたいときに、キュー800が満杯でない場合には、キュー800は、別のOSエントリーをエビクトすることなくプッシュすることを可能にし、すなわち、このケースにおいては、キュー800は、N個を超えるOSエントリーが存在することを一時的に可能にする。好ましくは、Nは、動的に構成可能である。
次いで図9を参照すると、図5のテーブル500に投入する値を生成するためのプロセスを示すフローチャートが示されている。フローは、ブロック902において開始する。
ブロック902において、さまざまなソフトウェア・アプリケーション(たとえば、ポピュラーな又はクリティカルなソフトウェア・アプリケーション、ベンチマークなど)が、ソフトウェア・アプリケーションによって呼び出されるさまざまなオペレーティング・システム・ルーチンを識別するためにプロファイルされる。それらのソフトウェア・アプリケーションは、それらのソフトウェア・アプリケーションによって呼び出されることが可能であるOSルーチンの自分自身のセットをそれぞれが有するさまざまなオペレーティング・システム、たとえば、Microsoft(登録商標) Windows(登録商標)、Linux(登録商標)、Apple Mac OS X(登録商標)、及びGoogle(登録商標) Android(登録商標)オペレーティング・システム上でプロファイルされることが可能である。フローは、ブロック904へ進む。
ブロック904においては、ブロック902において識別されたOSルーチンのそれぞれに関して、そのOSルーチンが呼び出されるたびにそのOSルーチンによって実行された命令の数がカウントされる。次いで、OSルーチンに関して、実行された命令の合計数が算出され、その合計を、そのOSルーチンが呼び出された回数によって割った値として、実行された命令の平均数が算出される。一実施形態においては、命令の平均数及び合計数が、オペレーティング・システムごとに加えて、アプリケーションごとにも算出される。代替実施形態においては、実行された命令の数よりもむしろ、OSルーチンにおいて費やされたマイクロプロセッサ100のクロック・サイクルの平均数及び合計数が計算される。フローは、ブロック906へ進む。
ブロック906においては、ブロック902において識別されたOSルーチンのそれぞれに関して、そのOSルーチンが、3つのカテゴリーのうちの1つに収まるものとして分類される。第1のカテゴリーは、OSルーチンによって実行された相対的に少ない数の命令を有するものとして分類され、第2のカテゴリーは、OSルーチンによって実行された中くらいの数の命令を有するものとして分類され、第3のカテゴリーは、OSルーチンによって実行された相対的に多い数の命令を有するものとして分類される。直観的には、第1のカテゴリーのOSルーチンは、そのOSルーチンを呼び出すユーザ・コード(すなわち、ソフトウェア・アプリケーションの命令)に関連付けられた予測履歴132を著しく汚す可能性が低く、及びそれにより、ユーザ・コード命令の予測の精度を低減することによってユーザ・コードのパフォーマンスに悪影響を及ぼす可能性が低い。逆に、第3のカテゴリーのOSルーチンは、自分の予測履歴の蓄積に基づいて自分の命令の予測から著しく利益を得る可能性が高い。別の言い方をすると、第3のカテゴリーのOSルーチンは、そのOSルーチンを呼び出すユーザ・コードを有するソフトウェア・アプリケーションのパフォーマンスに著しく悪影響を及ぼす可能性が高い。なぜなら、そのソフトウェア・アプリケーションのパフォーマンスは、そのソフトウェア・アプリケーションが呼び出すOSルーチンのパフォーマンスに少なくとも部分的に依存しており、多数の命令を実行するOSルーチンは、自分の予測履歴に基づいて自分の命令の予測の利益を有さない場合には、低速で実行する可能性が高いからである。最後に、第2のカテゴリーのOSルーチンは、そのパフォーマンスに悪影響を及ぼすのに十分なだけユーザ・コード予測履歴を汚す可能性が高いが、この悪影響がそのOSルーチンのパフォーマンスの向上によって相殺されるかどうかは不確かである。別の言い方をすると、予測ユニット109のストレージのフラクションのみを使用して第2のカテゴリーのOSルーチンの予測履歴を蓄積することによって、ソフトウェア・アプリケーションの全体的なパフォーマンスを改善することが可能である。好ましくは、分類を実行するために、実行された命令の平均数と実行された命令の合計数との両方が分析される。これは、たとえOSルーチンが相対的に短くても(すなわち、命令の平均数を見ているだけならば、第1のカテゴリーに入るとしても)、そのOSルーチンが相対的に頻繁に呼び出されている場合には、そのOSルーチンが高速で実行すること(すなわち、予測履歴の蓄積から利益を得ること)が重要になることがあるため、そのOSルーチンがブロック908ごとに分析する必要が生じることがあるが、そのOSルーチンは、非常に短いので、予測履歴の蓄積から著しく利益を得ることができないことがあるためである。有利なことに、OSルーチンのサブセットを選択して第2のカテゴリーに入れることによって、ブロック908において実行しなければならないパフォーマンス分析の量が大幅に低減されることが可能である。フローは、ブロック908へ進む。
ブロック908においては、最適なフラクション値を特定するために、ブロック906において選択されて第2のカテゴリーに入れられたOSルーチンのうちのそれぞれに関する予測履歴を蓄積するために使用される予測ユニット109の予測履歴ストレージ(たとえば、図6、7、及び8の600、700、及び800)のフラクションを変えることによって、ソフトウェア・アプリケーションのパフォーマンス分析が行われる。すなわち、図5のテーブル500は、関連のあるOSルーチンに関連付けられたOSルーチン識別子502をロードされ、制御情報504の複数の値のさまざまな順列が試されて、どの組合せが、個々のソフトウェア・アプリケーションにとって、並びに所与のオペレーティング・システムにわたる全体としてのソフトウェア・アプリケーションにとって最良のパフォーマンスを生み出すかが特定される。パフォーマンスが最適化される組合せのフラクション値が保持され、それによって、それらのフラクション値は、マイクロプロセッサ100による使用のために図5のテーブル500内にロードされることが可能になる。パフォーマンスが最適化されるフラクション値は、マイクロプロセッサ100内に製造されることが可能であり、及び/又はデバイス・ドライバが、以降で図10及び図11に関して説明するように、それらの値をマイクロプロセッサ100内にダウンロードすることができる。
次いで図10を参照すると、図1のマイクロプロセッサ100を含むシステムのオペレーションを示すフローチャートが示されている。フローは、ブロック1002において開始する。
ブロック1002において、図9などに従ってOSルーチン分析が実行されたオペレーティング・システム(ここでは、OS Yと呼ぶ)が、マイクロプロセッサ100を含むシステム上へロードされる。フローは、ブロック1004へ進む。
ブロック1004においては、ブロック1002においてロードされたオペレーティング・システムは、自分のデバイス・ドライバの初期化ルーチンを呼び出すことを開始し、マイクロプロセッサ100用のデバイス・ドライバのための初期化ルーチンを呼び出す。マイクロプロセッサ100のデバイス・ドライバの初期化ルーチンは、図9のブロック908において特定された値を、図5のテーブル500に投入するためにマイクロプロセッサ100へダウンロードし、それによって、マイクロプロセッサ100上で実行しているソフトウェア・アプリケーションは、選択されたOSルーチンを実行させながら、そして願わくはパフォーマンスの向上を実現しながら、予測履歴を蓄積するための予測履歴132のストレージのフラクショナルな使用から利益を得ることができる。一実施形態においては、デバイス・ドライバは、予測履歴のフラクショナルな使用の機能に関連付けられたMSRに宛てられたx86 WRMSR命令を実行することによって、又はその他の命令セット・アーキテクチャーの類似のモデル固有のレジスタ書き込み命令によって、それらの値をダウンロードする。フローは、ブロック1004において終了する。
次いで図11を参照すると、図1のマイクロプロセッサ100を含むシステムのオペレーションを示すフローチャートが示されている。フローは、ブロック1102において開始する。
ブロック1102においては、マイクロプロセッサ100用のデバイス・ドライバが、オペレーティング・システムがソフトウェア・アプリケーション(ここでは、ソフトウェア・アプリケーションXと呼ぶ)を、マイクロプロセッサ100を含むシステム上で実行するようにスケジュールしたということを検知する。オペレーティング・システムは、自分のルーチンを、たとえば図9に従って分析する。フローは、ブロック1104へ進む。
ブロック1104において、デバイス・ドライバは、それに応答して、図9のブロック908において特定された値を、図5のテーブル500に投入するためにマイクロプロセッサ100へダウンロードし、それによって、マイクロプロセッサ100上で実行しているソフトウェア・アプリケーションは、選択されたOSルーチンを実行させながら、そして願わくはパフォーマンスの向上を実現しながら、予測履歴を蓄積するための予測履歴132のストレージのフラクショナルな使用から利益を得ることができる。フローは、ブロック1104において終了する。
本明細書においては、本発明のさまざまな実施形態について説明してきたが、それらの実施形態は、限定ではなく、例として提示されているということを理解されたい。形態及び詳細におけるさまざまな変更が、本発明の範囲から逸脱することなく、その中で行われることが可能であるということは、関連のあるコンピュータ技術分野の技術者にとって明らかであろう。たとえば、ソフトウェアは、たとえば、本明細書において説明されている装置及び方法の機能、製作、モデリング、シミュレーション、記述、及び/又はテストを可能にすることができる。これは、一般的なプログラミング言語(たとえば、C、C++)、Verilog HDL、VHDLなどを含むハードウェア記述言語(HDL)、又はその他の利用可能なプログラムの使用を通じて達成することが可能である。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、又は光ディスク(たとえば、CD−ROM、DVD−ROMなど)、ネットワーク、ワイヤ・ライン、ワイヤレス、又はその他の通信メディアなどの任意の知られているコンピュータ使用可能メディア内に配置することが可能である。本明細書において説明されている装置及び方法の実施形態は、(たとえば、HDL内で具体化される、又は指定される)マイクロプロセッサ・コアなどの半導体知的所有権の中核に含めること、及び集積回路の製造時にハードウェアへと変形することが可能である。加えて、本明細書において説明されている装置及び方法は、ハードウェアとソフトウェアの組合せとして具体化することが可能である。したがって、本発明は、本明細書において説明されている例示的な実施形態のうちのいずれによっても限定すべきではなく、添付の特許請求の範囲及びそれらの均等物に従ってのみ定義すべきである。具体的には、本発明は、汎用コンピュータにおいて使用することが可能であるマイクロプロセッサ・デバイス内に実装することが可能である。最後に、開示されている概念及び具体的な実施形態は、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく本発明の同じ目的を達成するためのその他の構造を設計又は修正するための基盤として容易に使用することができるということを当業者なら理解するはずである。

Claims (18)

  1. マイクロプロセッサであって、
    当該マイクロプロセッサによって以前に実行された命令の特徴の予測履歴を保持するためのストレージを有する予測ユニットであり、該予測ユニットは、前記予測履歴を蓄積し、前記予測履歴を使用して、その後の命令実行に関連した予測を行い、
    前記ストレージが、前記予測履歴を蓄積するために別々に制御可能な複数の部分を含む、予測ユニットと、
    前記マイクロプロセッサがオペレーティング・システム・ルーチンを実行していることを検知し、且つ前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記ストレージの前記複数の部分のうちのフラクションのみを使用して前記予測履歴を蓄積するように前記予測ユニットを制御する制御ユニットとを含
    オペレーティング・システム・ルーチン識別子のテーブルをさらに含み、それぞれの識別子が、それぞれのオペレーティング・システム・ルーチンを識別し、それぞれの各オペレーティング・システム・ルーチンは、前記ストレージの前記複数の部分のうちのフラクションを指定するような関連する制御情報を有し、前記制御ユニットは、前記マイクロプロセッサが関連付けられたオペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、前記制御情報を使用するように前記予測ユニットを制御する、
    マイクロプロセッサ。
  2. 前記予測ユニットのストレージは、複数のウェイを有する連想キャッシュ・メモリを含み、
    前記フラクションによって、前記ストレージの前記複数のウェイのうちのフラクションを指定し、前記制御ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用するように前記予測ユニットを制御する、
    請求項1に記載のマイクロプロセッサ。
  3. 前記予測ユニットのストレージは、複数のセットを有するインデックス付けされたキャッシュ・メモリを含み、
    前記フラクションによって、前記ストレージの前記複数のセットのうちのフラクションを指定し、前記制御ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用するように前記予測ユニットを制御する、
    請求項1に記載のマイクロプロセッサ。
  4. 前記予測ユニットのストレージは、複数のエントリーを有するキューを含み、
    前記フラクションによって、前記ストレージの前記複数のエントリーのうちのフラクションを指定し、前記制御ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用するように前記予測ユニットを制御する、
    請求項1に記載のマイクロプロセッサ。
  5. 前記オペレーティング・システム・ルーチン識別子及び関連付けられた制御情報は、所定のオペレーティング・システムがロードされているという検知に応答して、デバイス・ドライバによって前記マイクロプロセッサに提供される、
    請求項に記載のマイクロプロセッサ。
  6. 前記オペレーティング・システム・ルーチン識別子及び関連付けられた制御情報は、所定のソフトウェア・アプリケーションが実行されているという検知に応答して、デバイス・ドライバによって前記マイクロプロセッサに提供される、
    請求項に記載のマイクロプロセッサ。
  7. 前記予測ユニットは、メモリ曖昧性解消ユニットを含む、
    請求項1に記載のマイクロプロセッサ。
  8. 前記予測ユニットは、分岐予測ユニットを含む、
    請求項1に記載のマイクロプロセッサ。
  9. 前記予測ユニットは、データ・プリフェッチ・ユニットを含む、
    請求項1に記載のマイクロプロセッサ。
  10. マイクロプロセッサを動作させる方法であって、前記マイクロプロセッサは、該マイクロプロセッサによって以前に実行された命令の特徴の予測履歴を保持するためのストレージを備えた予測ユニットを有し、前記予測ユニットが、前記予測履歴を蓄積し、該予測履歴を使用して、その後の命令実行に関連した予測を行い、前記ストレージが、前記予測履歴を蓄積するために別々に制御可能な複数の部分を含み、当該方法が、
    前記マイクロプロセッサがオペレーティング・システム・ルーチンを実行していることを検知するステップと、
    前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記ストレージの前記複数の部分のうちのフラクションのみを使用して前記予測履歴を蓄積するように前記予測ユニットを制御するステップとを含
    オペレーティング・システム・ルーチン識別子を受け取るステップをさらに含み、それぞれの識別子が、それぞれのオペレーティング・システム・ルーチンを識別し、それぞれの各オペレーティング・システム・ルーチンは、前記ストレージの前記複数の部分のうちのフラクションを指定する関連する制御情報を有し、制御ユニットは、前記マイクロプロセッサが関連付けられたオペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、前記制御情報を使用するように前記予測ユニットを制御する、
    方法。
  11. 前記予測ユニットのストレージは、複数のウェイを有する連想キャッシュ・メモリを含み、前記フラクションによって、前記ストレージの前記複数のウェイのうちのフラクションを指定し、前記予測ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用する、
    請求項10に記載の方法。
  12. 前記予測ユニットのストレージは、複数のセットを有するインデックス付けされたキャッシュ・メモリを含み、前記フラクションによって、前記ストレージの前記複数のセットのうちのフラクションを指定し、前記予測ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用する、
    請求項10に記載の方法。
  13. 前記予測ユニットのストレージは、複数のエントリーを有するキューを含み、前記フラクションによって、前記ストレージの前記複数のエントリーのうちのフラクションを指定し、前記予測ユニットは、前記マイクロプロセッサが前記オペレーティング・システム・ルーチンを実行している間に、前記予測履歴を蓄積するために、指定されたフラクションを使用する、
    請求項10に記載の方法。
  14. 前記オペレーティング・システム・ルーチン識別子及び関連付けられた制御情報は、所定のオペレーティング・システムがロードされているという検知に応答して、デバイス・ドライバによって前記マイクロプロセッサに提供される、
    請求項10に記載の方法。
  15. 前記オペレーティング・システム・ルーチン識別子及び関連付けられた制御情報は、所定のソフトウェア・アプリケーションが実行されているという検知に応答して、デバイス・ドライバによって前記マイクロプロセッサに提供される、
    請求項10に記載の方法。
  16. その後の命令の実行を予測するために予測ユニットによって使用される、以前に実行された命令の予測履歴を蓄積するストレージを有する前記予測ユニットを有するマイクロプロセッサのパフォーマンスを改善するための方法であって、前記予測ユニットは、前記予測履歴を蓄積するために前記ストレージのフラクションのみを使用するように動的に制御可能であり、当該方法が、
    ソフトウェア・アプリケーションによって呼び出された複数のオペレーティング・システム・ルーチンを識別するステップと、
    前記複数のオペレーティング・システム・ルーチンのそれぞれによって実行された命令のそれぞれの数をカウントするステップと、
    実行された命令の前記それぞれの数に基づいて、前記複数のオペレーティング・システム・ルーチンのサブセットを選択するステップと、
    前記ソフトウェア・アプリケーションのパフォーマンスを最適化する前記フラクションの値を特定するために、前記複数のオペレーティング・システム・ルーチンの前記サブセットに関する前記予測ユニットのストレージの前記フラクションの値を変えることによってパフォーマンス分析を行うステップとを含む、
    方法。
  17. 前記複数のオペレーティング・システム・ルーチンの前記サブセットを選択する前記ステップは、前記複数のオペレーティング・システム・ルーチンのうちで、それぞれの数が、前記サブセットから除外される前記複数のオペレーティング・システム・ルーチンと比べて中程度の数の範囲内にあるオペレーティング・システム・ルーチンを前記サブセット内に含めるステップを含む、
    請求項16に記載の方法。
  18. 前記複数のオペレーティング・システム・ルーチンのそれぞれによって実行された命令の前記それぞれの数をカウントする前記ステップは、前記複数のオペレーティング・システム・ルーチンのそれぞれによって実行された命令の平均及び合計のそれぞれの数をカウントするステップを含む、
    請求項16に記載の方法。
JP2016526726A 2014-01-27 2014-12-12 オペレーティング・システム・ルーチンのための予測履歴ストレージのフラクショナルな使用 Active JP6259518B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US14/165,354 2014-01-27
US14/165,354 US9507597B2 (en) 2013-06-10 2014-01-27 Selective accumulation and use of predicting unit history
US201462069602P 2014-10-28 2014-10-28
US62/069,602 2014-10-28
PCT/IB2014/002993 WO2015110862A1 (en) 2014-01-27 2014-12-12 Fractional use of prediction history storage for operating system routines

Publications (2)

Publication Number Publication Date
JP2016525252A JP2016525252A (ja) 2016-08-22
JP6259518B2 true JP6259518B2 (ja) 2018-01-10

Family

ID=53680887

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016526726A Active JP6259518B2 (ja) 2014-01-27 2014-12-12 オペレーティング・システム・ルーチンのための予測履歴ストレージのフラクショナルな使用

Country Status (4)

Country Link
EP (1) EP2972797B1 (ja)
JP (1) JP6259518B2 (ja)
CN (1) CN105706049B (ja)
WO (1) WO2015110862A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108347623B (zh) * 2017-01-23 2021-05-25 北京新唐思创教育科技有限公司 在线直播内容的生成方法、装置及在线直播系统
US11269640B2 (en) * 2017-02-13 2022-03-08 Qualcomm Incorporated Speculative transitions among modes with different privilege levels in a block-based microarchitecture
CN111459549B (zh) 2020-04-07 2022-11-01 上海兆芯集成电路有限公司 具有高度领先分支预测器的微处理器

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06100987B2 (ja) * 1987-04-10 1994-12-12 日本電信電話株式会社 アドレス変換制御方法
JPS6468855A (en) * 1987-09-10 1989-03-14 Nec Corp Cache memory control system
JPH0644247B2 (ja) * 1987-11-04 1994-06-08 日本電気株式会社 キャッシュ記憶制御方式
EP0848323B1 (en) * 1996-12-10 2004-02-25 Texas Instruments Incorporated Improvements in the branch prediction within a pipelined microprocessor
US6108775A (en) * 1996-12-30 2000-08-22 Texas Instruments Incorporated Dynamically loadable pattern history tables in a multi-task microprocessor
US6223256B1 (en) * 1997-07-22 2001-04-24 Hewlett-Packard Company Computer cache memory with classes and dynamic selection of replacement algorithms
JP2001043131A (ja) * 1999-07-30 2001-02-16 Matsushita Electric Ind Co Ltd 情報処理システム及びその制御方法
JP2001249806A (ja) * 2000-02-22 2001-09-14 Hewlett Packard Co <Hp> 予測情報管理方法
JP3988485B2 (ja) * 2002-02-25 2007-10-10 セイコーエプソン株式会社 キャッシュ回路、情報処理装置及び電子機器
JP2004126854A (ja) * 2002-10-01 2004-04-22 Mitsubishi Electric Corp 攻撃対策装置
US7353337B2 (en) * 2003-02-24 2008-04-01 Nxp B.V. Reducing cache effects of certain code pieces
US7120784B2 (en) * 2003-04-28 2006-10-10 International Business Machines Corporation Thread-specific branch prediction by logically splitting branch history tables and predicted target address cache in a simultaneous multithreading processing environment
US7849299B2 (en) * 2008-05-05 2010-12-07 Applied Micro Circuits Corporation Microprocessor system for simultaneously accessing multiple branch history table entries using a single port
US8904156B2 (en) * 2009-10-14 2014-12-02 Oracle America, Inc. Perceptron-based branch prediction mechanism for predicting conditional branch instructions on a multithreaded processor
US8745362B2 (en) 2010-06-25 2014-06-03 International Business Machines Corporation Operating system aware branch predictor using a dynamically reconfigurable branch history table
JP2013250593A (ja) * 2012-05-30 2013-12-12 Renesas Electronics Corp 半導体装置
US9507597B2 (en) * 2013-06-10 2016-11-29 Via Alliance Semiconductor Co., Ltd. Selective accumulation and use of predicting unit history

Also Published As

Publication number Publication date
CN105706049A (zh) 2016-06-22
WO2015110862A1 (en) 2015-07-30
EP2972797B1 (en) 2018-04-04
EP2972797A4 (en) 2017-03-01
JP2016525252A (ja) 2016-08-22
CN105706049B (zh) 2019-04-16
EP2972797A1 (en) 2016-01-20

Similar Documents

Publication Publication Date Title
EP2813943B1 (en) Predicting unit in a multithreaded processor
US9891918B2 (en) Fractional use of prediction history storage for operating system routines
US11416253B2 (en) Multiple-table branch target buffer
EP3129887B1 (en) Multiple data prefetchers that defer to one another based on prefetch effectiveness by memory access type
US11586944B2 (en) Allocation filter for prediction storage structure
KR20160086766A (ko) 모드에 따라 선택적으로 하나 또는 복수의 셋트를 선택하도록 동적으로 구성가능한 멀티 모드 셋트 연관 캐시 메모리
US9952871B2 (en) Controlling execution of instructions for a processing pipeline having first out-of order execution circuitry and second execution circuitry
US10402203B2 (en) Determining a predicted behaviour for processing of instructions
JP6259518B2 (ja) オペレーティング・システム・ルーチンのための予測履歴ストレージのフラクショナルな使用
CN110402434B (zh) 缓存未命中线程平衡
EP4020167A1 (en) Accessing a branch target buffer based on branch instruction information
US20220197657A1 (en) Segmented branch target buffer based on branch instruction type
US20220058025A1 (en) Throttling while managing upstream resources
EP4020206A1 (en) System, apparatus and method for dynamically configuring one or more hardware resources of a processor
US11194575B2 (en) Instruction address based data prediction and prefetching
TWI569207B (zh) 微處理器、微處理器的運作方法、及改善微處理器效能的方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170207

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20170428

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170628

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171128

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171208

R150 Certificate of patent or registration of utility model

Ref document number: 6259518

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250