JP2020510916A - ロード命令のメモリ・アクセスを回避するためのコンピュータ実装方法、システム、およびコンピュータ・プログラム - Google Patents

ロード命令のメモリ・アクセスを回避するためのコンピュータ実装方法、システム、およびコンピュータ・プログラム Download PDF

Info

Publication number
JP2020510916A
JP2020510916A JP2019544818A JP2019544818A JP2020510916A JP 2020510916 A JP2020510916 A JP 2020510916A JP 2019544818 A JP2019544818 A JP 2019544818A JP 2019544818 A JP2019544818 A JP 2019544818A JP 2020510916 A JP2020510916 A JP 2020510916A
Authority
JP
Japan
Prior art keywords
load
predicted
instruction
data structure
load instruction
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.)
Granted
Application number
JP2019544818A
Other languages
English (en)
Other versions
JP7118984B2 (ja
Inventor
プラスキー、ブライアン、ロバート
シャム、チュン−ルン
スタッペンベック、コリー
シュロッター、デイヴィッド、アンドリュー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2020510916A publication Critical patent/JP2020510916A/ja
Application granted granted Critical
Publication of JP7118984B2 publication Critical patent/JP7118984B2/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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • 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/30098Register arrangements
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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
    • G06F9/384Register renaming
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】命令アドレス・マッピングを使用したロード命令のメモリ・アクセスの回避方法を提供することである。【解決手段】ロード命令のメモリ・アクセスを回避する予測されたロードを実行するためのシステム、方法、およびコンピュータ可読媒体が開示される。ロード命令によってロードされる値を格納しているとして予測された第1の物理レジスタが識別され、第1の物理レジスタに格納された値が、コンシューマの動作によって使用するために、第2の物理レジスタにコピーされる。ロード命令に対応する予測格納命令が識別され、予測格納命令に関連付けられたデータを取得するために、マッピング・テーブルがアクセスされる。このデータを評価して、予測されたロードが依存制約を満たすかどうかを決定する。予測されたロードの実行の結果として、コンシューマの動作は、第1の物理レジスタに格納されたデータを直接使用し、その他の方法ではロード命令を実行するために必要になる、キャッシュ・メモリ・アクセスを回避することができる。【選択図】図1

Description

本発明はメモリ・アクセスに関し、特にメモリ・アクセスを回避する方法に関する。
コンピュータ・プログラム命令を実行することは、データを物理レジスタに格納することを含んでいることがある。プログラムの実行中に、物理レジスタに格納されたデータは、メモリ位置に格納されることが必要になることがあり、メモリ位置に格納されたデータは、物理レジスタにロードされることが必要になることがある。マイクロアーキテクチャ設計(例えば、中央処理装置(CPU:central processing unit)では、命令実行ユニットは、メモリに対してよりも、物理レジスタに近い位置に配置される。そのため、メモリ位置から物理レジスタへのデータのロードは(キャッシュ・メモリ位置からのロードでも)、通常、別の物理レジスタからデータをコピーする場合よりも長い時間がかかる。
従って、本発明が解決しようとする課題は、命令アドレス・マッピングを使用したロード命令のメモリ・アクセスの回避方法、システム、およびコンピュータ・プログラムを提供することである。
本開示の1つまたは複数の実施形態例では、ロード命令のメモリ・アクセスを回避するための方法が開示される。この方法は、少なくとも一部において、ロード命令に関連付けられた命令アドレス(IA:instruction address)のみによってインデックス付けされた第1のデータ構造にアクセスすることによって、ロード命令に関連付けられたロードIAに対応する予測されたIAを決定することと、予測されたIAの少なくとも一部を使用して、(i)第2のデータ構造にアクセスして、ロード命令に関連付けられた値を格納している第1の物理レジスタを決定するか、または(ii)第2のデータ構造にアクセスする代わりに、第3のデータ構造にアクセスして、ロード命令に関連付けられた値を取得することとを含む。この方法は、少なくとも一部において、第2の物理レジスタをロード命令に関連付けられた値に設定することによって、予測されたロードを実行することをさらに含む。
本開示の1つまたは複数の他の実施形態例では、ロード命令のメモリ・アクセスを回避するためのシステムが開示される。このシステムは、コンピュータ実行可能命令を格納する少なくとも1つのメモリと、少なくとも1つのメモリにアクセスしてコンピュータ実行可能命令を実行し、動作のセットを実行するように構成された少なくとも1つのプロセッサとを含む。それらの動作は、少なくとも一部において、ロード命令に関連付けられた命令アドレス(IA)のみによってインデックス付けされた第1のデータ構造にアクセスすることによって、ロード命令に関連付けられたロードIAに対応する予測されたIAを決定することと、予測されたIAの少なくとも一部を使用して、(i)第2のデータ構造にアクセスして、ロード命令に関連付けられた値を格納している第1の物理レジスタを決定するか、または(ii)第2のデータ構造にアクセスする代わりに、第3のデータ構造にアクセスして、ロード命令に関連付けられた値を取得することとを含む。それらの動作は、少なくとも一部において、第2の物理レジスタをロード命令に関連付けられた値に設定することによって、予測されたロードを実行することをさらに含む。
本開示の1つまたは複数の他の実施形態例では、処理回路によって読み取り可能な非一時的ストレージ媒体を含んでいる、ロード命令のメモリ・アクセスを回避するためのコンピュータ・プログラム製品が開示され、このストレージ媒体は、方法の実行を引き起こすために処理回路によって実行可能な命令を格納する。この方法は、少なくとも一部において、ロード命令に関連付けられた命令アドレス(IA)のみによってインデックス付けされた第1のデータ構造にアクセスすることによって、ロード命令に関連付けられたロードIAに対応する予測されたIAを決定することと、予測されたIAの少なくとも一部を使用して、(i)第2のデータ構造にアクセスして、ロード命令に関連付けられた値を格納している第1の物理レジスタを決定するか、または(ii)第2のデータ構造にアクセスする代わりに、第3のデータ構造にアクセスして、ロード命令に関連付けられた値を取得することとを含む。この方法は、少なくとも一部において、第2の物理レジスタをロード命令に関連付けられた値に設定することによって、予測されたロードを実行することをさらに含む。
添付の図面を参照して、詳細な説明が示される。各図面は、単に例示の目的で提供されており、本開示の実施形態例を示しているにすぎない。各図面は、本開示の理解を容易にするために提供されており、本開示の広がり、範囲、または適用可能性を制限していると見なされてはならない。各図面において、参照番号の左端の数字は、その参照番号が最初に現れる図面を識別する。同じ参照番号の使用は、類似しているが、必ずしも同じでないか、または同一でないコンポーネントを示す。ただし、異なる参照番号が、類似するコンポーネントを識別するために使用されてもよい。さまざまな実施形態は、図面に示された要素またはコンポーネント以外の要素またはコンポーネントを使用してよく、一部の要素またはコンポーネントあるいはその両方は、さまざまな実施形態に存在しないことがある。コンポーネントまたは要素を表すための単数形の用語の使用は、文脈に応じて、複数のそのようなコンポーネントまたは要素を包含し、その逆もまた同様である。
本開示の1つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードの実行を概略的に示すブロック図である。 本開示の1つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するための例示的な方法を示すプロセス・フロー図である。 本開示の1つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するかどうかを決定するための例示的な方法を示すプロセス・フロー図である。 本開示の1つまたは複数の実施形態例を実装するように構成された例示的なコンピューティング・デバイスの概略図である。
本開示の実施形態例は、特に、ロード命令のメモリ・アクセスを回避する予測されたロードを実行するためのシステム、方法、コンピュータ可読媒体、技術、および手法を含む。特定の実施形態例では、ロード命令によってロードされる値を格納しているとして予測された第1の物理レジスタが識別され、第1の物理レジスタに格納された値が、コンシューマ(consumer)の動作によって使用するために、第2の物理レジスタにコピーされる。ロード命令に対応する予測格納命令(predicted store instruction)が識別されてよく、予測格納命令に関連付けられたデータを取得するために、マッピング・テーブルがアクセスされてよい。データは、第1の物理レジスタの識別、および第1の物理レジスタに格納される値を生成/変更したプロデューサ(producer)の動作の識別(例えば、命令識別子)を含んでよい。予測されたロードの実行の結果として、望ましいデータがプロデューサの動作から取得され、その他の方法ではロード命令を実行し、メモリ位置から物理レジスタへデータをコピーする必要があるキャッシュ・メモリ・アクセスが回避され得る。
図1は、本開示の1つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードの実行を概略的に示すブロック図である。図2は、本開示の1つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するための例示的な方法200を示すプロセス・フロー図である。図3は、本開示の1つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するかどうかを決定するための例示的な方法300を示すプロセス・フロー図である。以下では、図1と併せて、図2および3がそれぞれ説明される。
方法200または方法300あるいはその両方の各動作は、図1に示された1つまたは複数のコンポーネント(例えば、エンジン)によって実行されてよい。これらのコンポーネントは、ハードウェア、ソフトウェア、またはファームウェア、あるいはその組み合わせの任意の組み合わせで実装されてよい。特定の実施形態例では、これらのコンポーネントのうちの1つまたは複数は、少なくとも一部において、コンピュータ実行可能命令を含んでいる1つまたは複数のプログラム・モジュールを含んでいるか、またはそのようなプログラム・モジュールの集合である、ソフトウェアまたはファームウェアあるいはその両方として実装されてよく、これらのコンピュータ実行可能命令は、処理回路によって実行された場合に、1つまたは複数の動作の実行を引き起こす。本開示の実施形態例を実装するように構成されているとして本明細書において説明されたシステムまたはデバイスは、1つまたは複数の処理回路を含んでよく、それらの処理回路のそれぞれは、1つまたは複数の処理ユニットまたはノードを含んでよい。コンピュータ実行可能命令は、コンピュータ実行可能プログラム・コードを含んでよく、このコンピュータ実行可能プログラム・コードは、処理ユニットによって実行された場合に、コンピュータ実行可能プログラム・コードに含まれているか、またはコンピュータ実行可能プログラム・コードによって参照されている入力データが、アクセスおよび処理されて、出力データを生成することを引き起こしてよい。
まず図1を参照すると、予測エンジン102、レジスタ追跡エンジン104、読み取り/書き込みエンジン106、および命令実行エンジン108を含むエンジンの集合が示されている。これらのエンジンは、ハードウェア、ソフトウェア、またはファームウェア、あるいはその組み合わせの任意の組み合わせで実装されてよい。特定の実施形態例では、これらのエンジンは、図4に示された例示的な構成を含んでいる1つまたは複数のデバイスにわたって実行されてよい。
ここで、図1および2を互いに併せて参照すると、ブロック202で、命令実行エンジン108のコンピュータ実行可能命令が実行されて、プロデューサの動作の実行を引き起こしてよく、このプロデューサの動作は、マイクロアーキテクチャにおいて定義されている設計されたレジスタ128のセットのうちの特定の設計されたレジスタに関連付けられた値を生成/変更する。説明を簡単にするために、以下では、参照番号128が、上で参照された特定の設計されたレジスタを指定するために使用されてよい。特定の実施形態例では、設計されたレジスタのセットが、マイクロアーキテクチャ設計の一部として指定されてよい。設計されたレジスタのセットは、マイクロアーキテクチャ内の物理レジスタのセットにマッピングされてよい。特定の実施形態例では、物理レジスタの数は、設計されたレジスタの数以上であってよい。そのため、設計されたレジスタ128は、異なる命令に関して異なる物理レジスタにマッピングされてよく、または複数の物理レジスタに同時にマッピングされてよく、あるいはその両方が行われてよい。より詳細には、設計されたレジスタ128に関連付けられた値が、異なる命令に関して異なる物理レジスタに格納されてよく、または複数の物理レジスタに同時に格納されてよく、あるいはその両方が行われてよい。
非限定的な例として、プロデューサの動作は、2つのレジスタ内の値を合計すること、および得られた合計をレジスタのうちの1つに格納することであってよい。例えば、R1が設計されたレジスタ128を表す場合、プロデューサの動作はR1=R1+R2であってよく、R2は異なる設計されたレジスタである。前述したように、設計されたレジスタ128(例えば、R1)は、例えば、最初に物理レジスタ20(pR20)にマッピングされてよい。同様に、設計されたレジスタR2が物理レジスタ22(pR22)にマッピングされてよい。プロデューサの動作の結果として、pR20およびpR22に格納された値が合計されてよく、得られた合計が物理レジスタ21(pR21)に格納されてよい。物理レジスタpR21が設計されたレジスタ128(R1)にマッピングされてよく、それによって、この合計を設計されたレジスタ128(R1)に関連付ける。
特定の実施形態例では、レジスタ追跡エンジン104のコンピュータ実行可能命令が実行されて、設計されたレジスタと物理レジスタの間のマッピングを維持/変更してよい。順序通りに動作するマシンでは、設計されたレジスタの数は、物理レジスタの数に等しくてよい。これは、順序通りに動作するマシンでは、命令が発行された順序で実行されるため、設計されたレジスタより多くの物理レジスタを維持する必要がないからである。しかし、順序通りに動作しないマシンでは、より新しい/より若い命令が、より古い命令の前に実行されることがあるため、設計されたレジスタより多くの数の物理レジスタを維持する必要がある。
物理レジスタの数が設計されたレジスタの数を超える実施形態例では、設計されたレジスタと物理レジスタの間のマッピングが維持されてよい。設計されたレジスタと物理レジスタの間のこのマッピングは、レジスタ追跡エンジン104によって維持/更新されるレジスタ・マッピング・テーブル138に格納されたデータに反映されてよい。レジスタ・マッピング・テーブル138は、設計されたレジスタによってインデックス付けされてよく、インデックス付きの設計されたレジスタごとに、その設計されたレジスタに関連付けられた値を格納する物理レジスタの識別を格納してよい。命令を順序通りに動作しないエンジンに送信するための順序通りのデコード/ディスパッチに関しては、設計されたレジスタへの最も古い参照のみが必要である。しかし、パイプラインを前の状態に復元する必要がある、命令パイプラインのフラッシュ時に、設計されたレジスタだけでは不十分であることがある。さらに、そのような状況では、どの命令がフラッシュが発生した時点に対応するかに関する情報も、必要になることがある。これは、マイクロop命令IDを使用して実現することができる。
ここでさらに具体的に、方法200のブロック202を参照すると、実行されたプロデューサの動作が、結果として値が生成され、設計されたレジスタ128にマッピングされた物理レジスタ130に格納されることを引き起こしてよい。代替として、プロデューサの動作は、結果として物理レジスタ130に格納された既存の値の変更を引き起こしてよい。プロデューサの動作によって生成/変更された値を格納する物理レジスタ130の識別は、対応する設計されたレジスタ128に関連して、レジスタ・マッピング・テーブル138に格納されてよい。すなわち、レジスタ・マッピング・テーブル138が、プロデューサの動作に応じて書き込まれてよい。
一般的に言えば、レジスタ・マッピング・テーブル138は、どの時点においても、1つの物理レジスタのみを設計されたレジスタに関連付けてよい。しかし、命令パイプラインのフラッシュを実行する潜在的な必要性に対応するために、レジスタ・マッピング・テーブル138は、設計されたレジスタと複数の物理レジスタの間の関連付けを格納してよい。例えば、命令のセット(例えば、命令1〜100)がディスパッチされたと仮定する。それらの命令の一部のサブセットが発行されていてよい。発行された命令のうちのより古い命令がまだ実行の途中であってよく、その間に、より新しい命令が実行を終了していてよい。例えば、より古い命令は、複雑な平方根の計算などであってよく、一方、より新しい命令は、相対的に単純なロード命令であってよい。より新しい命令は、より古い命令に先立って実行を終了してよいが、より新しい命令は、命令が順序通り実行されているように見えるのを維持するために、より古い命令が実行を完了するまで、完了してチェックポイントを実行することができないということに、注意するべきである。
1つの例示的な状況では、予測された分岐が、例えば命令15で選択されていてよい。分岐が正しく予測されなかった(例えば、分岐が選択されるべきでなかったときに、分岐が選択されたか、または分岐が選択されるべきだったときに、分岐が選択されなかった)ということが後で決定された場合、分岐命令後のパイプライン内のすべての命令(例えば、命令16〜100)が不正になる。これがフラッシュ・イベントをトリガーし、これに従って、分岐命令後のパイプライン内のすべての命令がフラッシュされ、分岐命令の正しいターゲット・アドレスから始まるパイプラインが復元される。
特定の実施形態例では、前述した分岐命令は、同じ設計されたレジスタを含んでいる2つの命令間で発生してよい。例えば、分岐命令に先立つ命令は、設計されたレジスタR7に関連付けられた値を設計されたレジスタR1に割り当てることであってよく、分岐命令の後の命令は、設計されたレジスタR2に関連付けられた値をR1に割り当てることであってよい。これらの設計されたレジスタに関連付けられた値が異なる物理レジスタに格納されてよいということが、理解されるべきである。前述したように、分岐が正しく予測されない場合、設計されたレジスタR1に関連付けられた値を、(設計されたレジスタR2に関連付けられた値ではなく)設計されたレジスタR7に関連付けられた値に復元する必要がある。設計されたレジスタR1の値を適切に復元するには、レジスタ・マッピング・テーブル138が、物理レジスタと設計されたレジスタの間のマッピングの履歴を維持する必要がある。具体的には、上で導入された例では、フラッシュ・イベントが発生したときに、設計されたレジスタR1に関連付けられた前の値を復元できるように、レジスタ・マッピング・テーブル138は、設計されたレジスタR1と設計されたレジスタR7に対応する物理レジスタとの間のマッピング、および設計されたレジスタR1と設計されたレジスタR2に対応する物理レジスタとの間のマッピングを格納してよい。加えて、命令パイプライン内のどこでフラッシュが発生したかに基づいて、復元するべき値を識別するために、各命令識別子が、各マッピングに関連して格納されてよい。上の例が例示にすぎず、網羅的でないということが、理解されるべきである。例えば、レジスタ・マッピング・テーブル138は、所与の設計されたレジスタと物理レジスタの間の任意の数のマッピングを格納してよい。
ブロック204で、物理レジスタに格納されたレジスタ値をメモリに格納することを必要とするイベントが発生してよい。そのようなイベントの例は、物理レジスタに格納されたレジスタ値をメモリにコピーすることを必要とする関数の実行であってよい。例えば、マイクロアーキテクチャでは16個の設計されたレジスタが定義されているが、アルゴリズムが17個の値を必要とする場合、すべての値を同時に16個の設計されたレジスタに関連付けることができない。したがって、アルゴリズムの実行中に、1つまたは複数の設計されたレジスタを解放するために、少なくとも1つのレジスタ値がメモリにあふれることがある。他の実施形態例では、関数の実行の前に、その関数によって必要とされるレジスタの数が不明であるか、または関数を実行することによってレジスタ値が破損する危険が存在することがあり、その場合、レジスタ値がメモリにあふれることがある。
ブロック206で、命令実行エンジン108のコンピュータ実行可能命令が実行されて、格納命令を実行し、設計されたレジスタ128に関連付けられた値をメモリ内の位置に格納してよい。このメモリ内の位置は、例えば、L1キャッシュまたはL2キャッシュなどの、キャッシュ・メモリ内の位置であってよい。前に導入された同じ例を参照すると、格納命令の実行が、pR21(設計されたレジスタ128にマッピングされた物理レジスタ130)に格納された値をメモリ位置に格納することを引き起こしてよい。
特定の実施形態例では、実行された格納命令に対応するエントリが、予測転送マッピング・テーブル(prediction forwarding mapping table)122(以下では、省略して、マッピング・テーブル122と呼ぶ)内に生成されてよい。より詳細には、読み取り/書き込みエンジン106のコンピュータ実行可能命令が実行されて、書き込み動作126を実行し、エントリをマッピング・テーブル122内に生成してよい。特定の実施形態例では、マッピング・テーブル122は、複数の読み取りポートおよび書き込みポートを備えるregファイルとして実装されてよい。regファイルは、任意の適切な数(例えば、32、64など)のエントリを収容するように構成されてよい。特定の数のビットが、エントリごとに割り当てられてよい。例えば、ブロック206で実行される格納命令に対応するエントリは、仮想命令アドレス(IA)タグを格納するために指定された特定の数のビット(例えば、10ビット)を含んでよい。マッピング・テーブル122は、格納IAの少なくとも一部によってインデックス付けされてよい。
仮想IAタグは、格納命令に関連付けられた完全なIA124の一部であってよい。仮想IAタグの格納に使用されるビットの数は、タグで少ない数のビットを使用することから生じるエイリアシング(aliasing)と、タグで少ない数のビットが使用された結果としての、マッピング・テーブル122に格納できるエントリの数の増加との間のトレードオフを反映することがある。タグに使用されるビットの数は、少なくとも一部において、マッピング・テーブル122に使用できるストレージの量、電力制約、周波数制約、またはコスト制約、あるいはその組み合わせによって決定されてもよい。格納命令に対応するエントリは、格納命令の命令識別子(例えば、マイクロop ID)を格納するための特定の数のビット(例えば、8ビット)と、格納命令に対応するプロデューサの動作の命令識別子を格納するための特定の数のビット(例えば、8ビット)と、プロデューサの動作によって生成/変更された値を格納した(現在格納していると予測されることもある)物理レジスタの識別を格納するための特定の数のビット(例えば、8ビット)とをさらに含んでよく、そのような値が、格納命令の実行を介してメモリ位置にコピーされる。エントリごと、および各エントリ内のデータ・フィールドごとに割り当てられるビットの数を含むマッピング・テーブル122の特定の実装は、例示にすぎず、網羅的でないということが、理解されるべきである。
ブロック208で、レジスタ値がメモリから物理レジスタに転送されてよい。一例として、関数呼び出しからの復帰の発生時に、ブロック204でメモリにコピーされたレジスタ値が、物理レジスタに復元されてよい。しかし、特定の実施形態例では、予測されたロードを実行することによって、値をメモリ位置から物理的位置にロードするロード命令が回避されてよい。
具体的には、ブロック210で、予測エンジン102のコンピュータ実行可能命令が実行され、ブロック206で実行された格納命令が、実行されるロード命令と相互関係があるということを予測することと、格納命令のIAを使用して、設計されたレジスタ128に関連付けられた値を格納している物理レジスタを識別することとを、実行してよい。さらに具体的には、予測エンジン102は、ロード命令(または、本開示において後でさらに詳細に説明される定期的ロード処理(constant load handling)の場合は、相互関係があるロードIA)と相互関係があると予測された格納命令に関連付けられた格納IA118を、予測配列114から識別してよい。特定の実施形態例では、格納命令は、複数のマイクロop格納を包含してよい。そのような実施形態例では、予測配列114から取得されたロード予測は、格納IA118だけでなく、格納命令のuop位置(uop position)も指定する。格納命令が単一のマイクロopである実施形態例では、0のデフォルト値が使用されてよい。その後、予測エンジン102は、相互関係があるIA(格納IA118、または定期的ロードの場合はロードIA)を使用して、マッピング・テーブル122にアクセスし、相互関係がある命令に関連付けられた値(例えば、設計されたレジスタ128に関連付けられた値)を格納している物理レジスタを識別してよい。
例えば、前に導入された例を再び参照すると、識別された物理レジスタの行き先は、設計されたレジスタ128にマッピングされたpR21であってよく、予測格納命令に対応するプロデューサの動作の実行結果として、設計されたレジスタ128に値が格納されている。このプロセスは、図3の例示的な方法を参照して、本開示において後でさらに詳細に説明される。マッピング・テーブル122が予測エンジン102の外部にあるように示されているが、特定の実施形態例では、マッピング・テーブル122が予測エンジン102に含まれてよいということが、理解されるべきである。
ブロック212で、命令実行エンジン108のコンピュータ実行可能命令が実行されて、ブロック210で識別された物理レジスタ内の値を、設計されたレジスタ128に現在マッピングされている別の物理レジスタに設定することによって、予測されたロードを実行してよい。前に導入された例を再び参照すると、pR21に格納された値が物理レジスタ30(pR30)にコピーされてよく、pR30は、設計されたレジスタ128に現在マッピングされている。特定の実施形態例では、予測されたロードが実行される前に、さまざまな制約を満たすことが必要になることがある。例えば、予測されたロードを続行するために、予測格納命令とロード命令の間の相互関係に関連付けられた信頼値がしきい値を満たしていることが必要になることがある。加えて、命令間のさまざまな依存制約を満たすことが必要になることがある。それらの制約は、図3の例示的な方法300を参照して、本開示において後でさらに詳細に説明される。
特定の実施形態例では、コンシューマの動作が正しい値に対して動作することが保証されるように、検証ロードが実行されて、予測されたロードが、設計されたレジスタ128に現在マッピングされている物理レジスタに正しい値が格納されるという結果をもたらしたことを検証してよい。具体的には、ブロック214で、命令実行エンジン108のコンピュータ実行可能命令が実行されて、設計されたレジスタ128に関連付けられた値をメモリから取り出すことによって、検証ロードを開始してよい。前述したように、この値は、格納命令の実行結果としてメモリ位置に格納されていてよい。前に導入された例を再び参照すると、格納命令によって特定のメモリ位置[x]に格納されたpR21内の値が、メモリ位置[x]から取り出されてよい。
ブロック216で、取り出された値が、ブロック210で識別された物理レジスタに格納されている値と比較されてよい。それらの値が異なっている場合、それは、予測されたロードが、設計されたレジスタ128に現在マッピングされている物理レジスタに誤った値が格納されるという結果をもたらしたことを、示していることがある。そのため、ブロック218で、ロード命令およびロード命令より若い命令パイプライン内のすべての命令が、パイプラインからフラッシュされてよい。パイプラインは、具体的には、ロード命令より若い命令が、すでに実行されていることがあり、予測格納命令に関連付けられた物理レジスタに格納されていた不正な値に依存していた可能性がある、順序通りに動作しないマシンの場合に、このようにしてフラッシュされてよい。パイプラインのフラッシュの後に、ブロック220で、予測されたロードを実行するのではなく、設計されたレジスタ128に関連付けられた値をメモリから取り出すことによって、ロード命令が実行されてよい。予測されたロードが再実行されないことを保証するために、アルゴリズムの実装は、パイプラインのフラッシュが発生した直後に、予測されたロードの実行を防いでよい。
図3の例示的な方法300を参照してさらに詳細に説明されるであろうように、特定の実施形態例では、検証ロードの結果が、予測格納命令とロード命令の間の相互関係に関連付けられた信頼値を更新するために使用されてよい。例えば、メモリ位置から取り出された値が、予測格納命令に関連付けられた物理レジスタに格納されている値に等しい場合(ブロック216での肯定的な決定)、信頼値が増やされてよい。反対に、それらの値が異なっている場合(否定的な決定)、信頼値が減らされてよい。さらに、特定の実施形態例では、予測されたロードのみが実行されてよく、データの正しさを確認するその他の手段に従って、検証ロードが実行されなくてよい。
さらに具体的には、検証ロードを実行する代わりに、メモリに格納された値がどのように変化しているかを反映するように、マッピング・テーブル122が代わりに更新され得る。具体的には、物理レジスタ値に対応するメモリ内の内容が、その値をメモリに格納したプロセッサ・コアまたは別のプロセッサ・コアによって変更されている場合に、予測されたロードが実行されないことを保証するためのメカニズムが提供されてよい。そのようなメカニズムは、特定のメモリ位置またはメモリ位置の範囲に格納するための排他的権限を取得する能力を、プロセッサ・コアに提供することを含んでよい。
例えば、マルチスレッド・プログラムが、2つのプロセッサ・コア(コアAおよびコアB)上で実行されていると仮定する。さらに、コアAが、メモリ位置xに書き込むための排他的権限を持っているが、コアBが、同じメモリ位置に書き込む能力を必要としていると仮定する。さらに、格納命令およびロード命令がコアA上で実行され(以下では、格納命令Aおよびロード命令Aと呼ばれる)、格納命令およびロード命令がコアB上で実行される(以下では、格納命令Bおよびロード命令Bと呼ばれる)と仮定する。コアAが、格納命令Aを実行して、第1の値をメモリ位置xに格納してよい。次にコアBが、格納命令Bを実行してよく、その結果、第2の異なる値がメモリ位置xに格納される。その場合、ロード命令Aの代わりに予測されたロードが実行されると、正しく望ましい値(すなわち、メモリ位置xに格納された第2の値)ではなく、第1の値が物理レジスタから取り出されたであろう。
そのため、プロセッサ・コア(例えば、コアA)が、特定のメモリ位置またはメモリ位置の範囲に書き込むための排他的権限を持たなくなった場合、プロセッサ・コアによって実行される格納命令(例えば、格納命令A)に対応するマッピング・テーブル122内のエントリが、そのエントリが無効化されたことを示すように更新されてよい。さらに具体的には、マッピング・テーブル122内のエントリで識別された物理レジスタに格納された値が有効でなくなったことを示すように、ビットが設定されるか、または反転されてよい。したがって、上で導入された例を参照すると、相互関係がある格納命令のIA(例えば、格納命令AのIA)が、マッピング・テーブル122内のエントリにアクセスするために使用された場合、そのエントリが無効化されるため、ロード命令Aに関して予測されたロードは実行されないであろう。
図2の例示的な方法200では、予測されたロードが実行されると仮定している。しかし、前述したように、予測されたロードを実行できるかどうかを決定するために、さまざまな制約を評価することが必要になることがある。図3は、本開示の1つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するかどうかを決定するための例示的な方法300を示すプロセス・フロー図である。
図1および3を互いに併せて参照すると、ブロック302で、ロード命令および格納命令に関連付けられたオペランド・アドレス110を使用して、ロード命令と格納命令の間のデータ・ペアリングが決定されてよい。命令アドレスが、プログラム命令が格納されているメモリ内の位置を示すメモリ・アドレスであるのに対して、オペランド・アドレスは、プログラム命令によって操作されるデータが格納されているメモリ内の位置を示すメモリ・アドレスである。特定の実施形態例では、プログラム命令およびプログラム命令によって使用されるデータは、同じキャッシュ(例えば、共有キャッシュ)または異なるキャッシュ(例えば、命令キャッシュおよびデータ・キャッシュ)に格納されてよい。
さらに具体的には、ブロック302で、データ・ペアリング・テーブル112がアクセスされてよい。データ・ペアリング・テーブル112は、プログラム命令(例えば、格納命令、ロード命令など)に関連付けられたデータのオペランド・アドレスの少なくとも一部によってインデックス付けされてよい。格納命令が実行されるときに、データ・ペアリング・テーブル112が書き込まれてよい。具体的には、オペランド・アドレス・タグに関連して格納命令に関連付けられたオペランド・アドレスの少なくとも一部(例えば、格納命令に関連付けられたオペランド・アドレスの他の部分)および格納命令の格納IAを格納するエントリが、データ・ペアリング・テーブル112内に生成されてよい。
例えば、ビット0が最上位ビットであり、ビット63が最下位ビットである64ビットのオペランド・アドレスを仮定すると、ビット54〜63がインデックスとして使用されてよい。その場合、理論上は、ビット0〜53がオペランド・アドレス・タグとして格納され得る。しかし、データ・ペアリング・テーブル112が、関数の配列ではなく実行の配列であるため、許容できるエイリアシングの量とデータ・ペアリング・テーブル112によって収容できるエントリの望ましい数との間のバランスを取るために、より少ない数のビット(例えば、ビット32〜53)をオペランド・アドレス・タグに使用できる。すなわち、より多くの数のビットがオペランド・アドレス・タグに使用された場合、発生するエイリアシングが少なくなるが、テーブルの合計最大領域/ビット予算を前提として、データ・ペアリング・テーブル112が収容するエントリの数も少なくなる。データ・ペアリング・テーブル112内の2つのエントリが同じオペランド・アドレス・インデックス(operand address index)および同じオペランド・アドレス・タグを含んでいるが、異なる格納命令に対応している場合に、エイリアシングが発生することがあり、その場合、誤った格納命令がロード命令とペアにされることがある。エイリアシングに起因して不正な値が物理レジスタにロードされることをもたらす予測されたロードは、検証ロードまたは前述した他の例示的なメカニズムのいずれかを実行することによって、対処されてよい。
さらにブロック302を参照すると、ロード命令に関連付けられたオペランド・アドレスの一部を使用して、データ・ペアリング・テーブル112が読み取られてよい。具体的には、ロード命令に関連付けられたオペランド・アドレスの一部が、一致するオペランド・アドレス・インデックスを含んでいるエントリの位置をデータ・ペアリング・テーブル112内で特定するために使用されてよい。その後、ロード命令に関連付けられたオペランド・アドレス・タグが、一致するエントリに格納されたオペランド・アドレス・タグと比較されてよい。それらのオペランド・アドレス・タグが一致する場合、ロード命令と格納命令の間の潜在的なデータ・ペアリング112が識別されてよい。
特定の実施形態例では、データ・ペアリング・テーブル112が、格納命令ごとに書き込まれてよい。すなわち、エントリは、格納命令ごとにデータ・ペアリング・テーブル112内に生成されてよく、エントリは、オペランド・アドレスの少なくとも一部によってインデックス付けされ、格納命令によってデータがメモリに格納され、エントリは、格納命令のIAを含む。しかし、特定の実施形態例では、データが、電源切断学習モード(power-off learning mode)でデータ・ペアリング・テーブル112に書き込まれてよく、これに従って、データが格納命令ごとに書き込まれなくてよい。
例えば、分岐を予測したコードの領域内で繰り返されるコード(例えば、ループ)を含んでいる状況では、格納命令がループ内で繰り返し発生することがある。そのため、エントリがすでに作成されている可能性が高く、格納命令が予測配列114内のロード命令とすでにペアにされている可能性が高く、したがって、追加のエントリをデータ・ペアリング・テーブル112内に生成することによって追加の学習が達成されない可能性が高いため、格納命令が発生するたびに、格納命令に関するエントリをデータ・ペアリング・テーブル112内に生成することが必要でないことがある。しかし、特定の実施形態例では、それでもなお、分岐を予測したコードの領域内にループが存在する状況において、限定的に、学習のための内容が捕捉されてよい。例えば、10回の格納命令ごとに1回の格納命令に関して、エントリがデータ・ペアリング・テーブル112内に生成されてよい。電源切断学習に関する上の説明は、定期的ロードにも同様に適用される。
ブロック304で、格納命令とロード命令の間のデータ・ペアリングが、予測配列114内のエントリとして格納されてよい。このデータ・ペアリングは、ペアリングに関連付けられた信頼度を反映する信頼値に関連して格納されてよい。さらに具体的には、この信頼値は、ロード命令の実行が、ロード命令とペアにされた格納命令の実行結果としてメモリ位置に格納された、メモリ位置からの同じ値の取り出しをもたらすということの信頼度を示してよい。
特定の実施形態例では、分岐ターゲット・バッファ(BTB:branch target buffer)テーブルなどの既存の分岐予測構造が、その他の方法では予測配列114に格納されるデータを格納するために使用されてよい。BTBテーブルは、分岐命令のIAによってインデックス付けされてよく、例えば、分岐IAに関連してターゲットIAを格納してよい。ターゲットIAは、分岐が選択された場合に実行されるターゲット命令のIAである。特定の実施形態例では、各分岐IAおよびターゲットIAのペアリングは、BTBテーブル内の個別のエントリとして格納されてよい。他の実施形態では、BTBテーブルは、複数の連想エントリを含んでよく、それによって、複数の分岐がコードの特定のブロック(例えば、コードの64バイトのブロック)内で追跡され得る。
複数の分岐がコードの所与のブロックに関して追跡され得る実施形態例では、コードのそのブロックに存在している各分岐命令のIAの一部が、そのようなすべての分岐命令にわたって共有されてよい。64ビットを使用してIAが表されるマイクロアーキテクチャの場合、例えば、共有されるタグは、最上位ビットの最初のいくつかの部分(例えば、ビット0〜X)であってよい。共有されるタグは、コードのブロック内の分岐命令ごとに一度だけBTBテーブルに格納されてよく、分岐命令、および分岐命令を互いに区別するためのタグ(例えば、インデックスを(X+1)〜Yと仮定して、コードのブロック内のオフセットを示すための最下位ビット(Y+1)〜63)ごとに、ターゲットIAに関連して格納されてよい。このタグの共有によって、固定された合計ビット数につき、格納IAおよびロードIAを格納するためのストレージが、BTBテーブル内でさらに多く利用できるようになる。例えば、BTBテーブルがコードの所与のブロック内の最大3つの分岐命令を追跡することができ、コードのそのブロック内にたまたま3つ未満の分岐命令が存在する場合、分岐命令間でのタグの共有(タグのビットを共有することになる分岐の数を定義する)によって、分岐IA/ターゲットIAの関連付けを格納するために使用されていないBTBテーブル内の追加エントリを、ロードIA/格納IAの関連付けを格納するために使用できるようになる。具体的には、ロードIAが分岐IAの代わりに格納されてよく、格納IAがターゲットIAの代わりに格納されてよい。このようにして、分岐命令とターゲット命令のペアリング、およびロード命令と格納命令のペアリングの両方を格納するマージされたBTBテーブルが維持されてよく、それによって、別々の予測配列114を維持する必要性を取り除く。
ブロック306で、IA116が識別されてよい。IA116は、予測エンジン102への入力として提供されてよい。ブロック308で、予測エンジン102のコンピュータ実行可能命令が実行されて、IA116を使用して予測配列114にアクセスし、IA116に対応する予測格納IA118を決定してよい。具体的には、命令アドレスの少なくとも一部を使用して、予測配列114がインデックス付けされてよい。そのため、IA116の少なくとも一部が、予測配列114が、IA116と格納命令に関連付けられたIAとの間のデータ・ペアリングを含んでいるかどうかを決定するために使用されてよい。そのようなデータ・ペアリングが存在する場合、格納命令は、IA116を含んでいる命令に対応する予測格納命令として扱われてよい。
特定の実施形態例では、IA116を使用して予測配列114にアクセスする前に、IA116を含んでいる命令が最初にデコードされて、この命令がロード命令であるということを決定する。命令がデコードされ、ロード命令であるということが決定された場合にのみ、予測配列114にアクセスすることによって、省電力を実現できる。しかし、それを行うと、命令がデコードされて、ロード命令であるということが決定された場合にのみ、予測配列114へのアクセスが発生できるため、プログラム実行速度も低下する可能性がある。他の実施形態例では、最初に命令をデコードして、この命令がロード命令であるということを決定することが必要とされなくてよく、代わりに、フェッチされた命令ごとに予測配列114がアクセスされてよい。しかし、そのような実施形態例では、予測されたロードは、予測配列114にアクセスするために使用されるIA116を含んでいる命令が、デコードされたときに最終的にロード命令であると決定された場合にのみ、実行される。
命令をデコードする前に予測配列114がアクセスされる実施形態例では、予測配列114は、命令フェッチと少なくとも部分的に同時にアクセスされてよく(同期モード)、または代替として、命令フェッチに先立って予測エンジン102が実行されている場合、予測配列114は、BTBテーブルのアクセスと少なくとも部分的に同時にアクセスされてよい(通常これは、命令フェッチの前に発生する)。例えば、L1キャッシュにキャッシュ・ミスが存在し、L2キャッシュにアクセスして命令をフェッチしなければならない場合、命令フェッチは、予測エンジン102に追い付かないことがある。別の例では、命令フェッチが順序通りに発生する必要があるが、予測配列114が順序通りにアクセスされない可能性がある場合、命令フェッチは、予測エンジン102に追い付かないことがある。
特定の実施形態例では、予測格納命令に関連付けられた命令識別子(例えば、マイクロop ID)が、予測格納命令のIAに加えて、予測配列114から取り出されてよい。さらに具体的には、命令が複数のマイクロop IDに分割されてよい。例えば、格納命令は、事実上、それ自身のマイクロop IDをそれぞれ持っている複数の格納を包含してよい。マイクロop IDを使用して、複数の格納命令のうちの格納命令を互いに区別することができ、さらに、マイクロop IDを使用して、複数の格納命令内のうち、ロード命令と相互関係がある特定の格納命令を識別することができる。
ブロック310で、読み取り/書き込みエンジン106のコンピュータ実行可能命令が実行され、予測格納命令118に関連付けられた予測格納IAまたは命令識別子あるいはその両方を使用してマッピング・テーブル122にアクセスし、読み取り動作120を実行して、マッピング・テーブル122内の対応している一致するエントリを取り出してよい。予測格納命令に対応する、マッピング・テーブル122に格納された一致するエントリは、前述したデータの例示的なタイプのいずれかを含んでよい。具体的には、マッピング・テーブル122内の一致するエントリは、予測格納命令に関連付けられた仮想IAタグ(例えば、予測格納命令IA118の少なくとも一部)と、予測格納命令の命令識別子(例えば、マイクロop ID)と、予測格納命令に対応するプロデューサの動作の命令識別子と、プロデューサの動作によって生成/変更された値を格納した(現在格納していると予測された)物理レジスタの識別とを含んでよく、そのような値は、予測格納命令の実行を介してメモリ位置にコピーされる。物理レジスタに格納された実際の値が予測配列114に格納されず、レジスタ・ファイルに格納されてよいということが理解されるべきである。
ブロック312で、予測エンジン102のコンピュータ実行可能命令が実行されて、1つまたは複数の依存制約が満たされたかどうかを決定してよい。例示的な依存制約は、プロデューサの動作が実行された後に、予測されたロードが発生することであってよい。これは、レジスタ/依存関係データ134内のプロデューサの動作に関連付けられた命令識別子を識別し、プロデューサの動作の命令識別子を、予測されたロードに関連付けられた命令識別子と比較して、プロデューサの動作がすでに実行されていることを保証することによって、決定され得る。別の例示的な依存制約は、予測格納命令が、検証ロードの前に実行されることであってよい。これは、同様に予測格納命令の命令識別子を、検証ロードの命令識別子と比較することによって決定され得る。
ブロック312での否定的な決定に応答して、方法300は再びブロック312から進んでよく、ブロック312で、1つまたは複数の依存制約が満たされているかどうかについて、再び決定が行われる。ブロック312での決定は、すべての依存制約が満たされたという肯定的な決定が行われるまで、繰り返し実行されてよい。ブロック312での肯定的な決定に応答して、方法300はブロック314に進んでよく、ブロック314で、予測エンジン102のコンピュータ実行可能命令が実行されて、信頼値がしきい値を満たしているかどうかを決定してよい。実装に応じて、第1の値が第2の値以上である場合、または第1の値が第2の値以下である場合に、第1の値が第2の値を満たしてよい。ブロック312での決定は、ロード命令と予測格納命令のペアリング112に関連付けられた信頼値がしきい値を満たしている場合にのみ、予測されたロードが実行されることを保証するために行われてよく、それによって、予測格納命令に関連付けられたプロデューサの動作の結果として物理レジスタに格納された値が、ロード命令が実行された場合にメモリから取り出される値と同じ値であるということの適切な信頼性を示す。これは、さらに、予測されたロードが実行され、実際のロード命令の実行が回避された場合に、コンシューマが正しい値に対して動作するということの適切な信頼性を示す。
ブロック314での肯定的な決定に応答して、ブロック316で、命令実行エンジン108のコンピュータ実行可能命令が実行されて、マッピング・テーブル122内の一致するエントリで識別された物理レジスタに少なくとも部分的に基づいて、予測されたロードを適用してよい。具体的には、設計されたレジスタ128に現在マッピングされている別の物理レジスタ130が、レジスタ・マッピング・テーブル138から識別されてよく、予測されたロードが実行されて、マッピング・テーブル122内の一致するエントリで識別された物理レジスタに格納された値を、設計されたレジスタ128に現在マッピングされている物理レジスタ130にコピーしてよい。加えて、レジスタ間のいずれかの依存関係が、レジスタ/依存関係データ134から識別されてよい。例えば、マッピング・テーブル122内の一致するエントリで識別された物理レジスタが設定される値は、他の物理レジスタが設定される値に依存することがある。
特定の実施形態例では、方法300は、ブロック316からブロック318に進んでよい。加えて、ブロック314での否定的な決定に応答して、方法300は、ブロック316をスキップし、ブロック318に直接進んでよい。ブロック318で、命令実行エンジン108のコンピュータ実行可能命令が実行されて、検証ロードを実行してよい。前述したように、検証ロードは、ロード命令によって指定されたメモリ位置に格納された値を取り出すことと、取り出された値を、予測されたロードを実行するために使用される物理レジスタ値と比較することとを含んでよい。
ブロック320で、ロード命令と予測格納命令のペアリング112に関連付けられた信頼値が、検証ロードが予測されたロードに一致するかどうか、さらに具体的には、検証ロードによってメモリから取り出された値が、予測されたロードを実行するために使用される物理レジスタ値に等しいかどうかに少なくとも部分的に基づいて、更新されてよい。それらの値が一致しない場合、予測配列114内の予測格納命令と相互関係があるロード命令に関して、将来、予測されたロードが実行される可能性を低くして、信頼値が減らされてよい。反対に、それらの値が一致する場合、予測格納命令と相互関係があるロード命令に関して、将来、予測されたロードが実行される可能性を高くして、信頼値が増やされてよい。ブロック314で否定的な決定が行われた場合、ブロック316で予測されたロードが実行されないということが理解されるべきである。しかし、信頼値は、ブロック320で、やはり更新されてよい。具体的には、ブロック314での否定的な決定の場合、予測されたロードが実行されなくてよいが、予測はやはり行われ得る。次に、ブロック318での検証ロードの実行時に、ブロック320で、予測が正しかったかどうかに基づいて信頼値が更新され得る。予測が正しい場合、信頼値が増やされてよい。信頼値が十分に強くなった場合、将来、予測されたロードが、予測に基づいて最終的に実行されてよい。
本開示の実施形態例に従って予測されたロードを実行することは、メモリ・アクセスの代わりに実行されるレジスタ間のコピー動作を含んでいるため、命令実行性能を改善する。レジスタの動作は、メモリ・アクセスよりも少ない実行サイクルを含んでいる。そのため、コンシューマの動作は、実際のロード命令がメモリ・アクセスを実行して、取り出された値を物理レジスタに格納するのを待つことを必要とせずに、予測されたロードの結果として物理レジスタに格納された値に対して動作することができる。本開示の実施形態例に従って予測されたロードを実行することは、順序通りでない命令の実行も可能にする。具体的には、例えば、予測されたロードが実行されて、より新しい命令が実行する必要のある値を物理レジスタから取得した場合、より古いロード命令の検証が完了するのをまだ待っている間、命令キュー内のより古いロード命令に関連付けられた値に依存する命令キュー内のより新しい命令が実行され得る。
特定の実施形態例では、どの格納命令がロード命令と相互関係があるかについて曖昧さが存在するため、予測されたロードが不正な値をもたらすことがある状況に対処するために、パターン・テーブルが維持され、アクセスされてよい。例えば、次の疑似コードが、実行される条件コードを表すと仮定する:x=1である場合、IA Yの格納命令を実行し、値1をメモリ位置[x]に格納し、そうでない場合、IA Zの格納命令を実行し、値2をメモリ位置[x]に格納する。このようにして、条件文(すなわち、x=1であるかどうか、したがって、どの格納命令が実行されるか)の結果に応じて、異なる値がメモリ位置[x]に格納されることがある。さらに、この条件コードの後に、ロード命令が続き、メモリ位置[x]の内容を物理レジスタにロードすると仮定する。この例では、予測配列114がロードIAを単一の格納IAにマッピングするため、予測されたロードを実行できないことがあり、この状況では、どの格納IAがロードIAと相互関係があるかについて、曖昧さが存在する。この曖昧さは、プログラムの実行中に、条件文の結果が既知になった場合にのみ、解決される。
予測配列114と並列にアクセスされ得るパターン・テーブルが、そのような例示的な状況に対処するために使用され得る。パターン・テーブルは、予測配列114に類似する内容(例えば、格納IA)を格納できるが、予測配列114とは異なってインデックス付けされてよい。具体的には、予測配列114はIA(例えば、ロードIA)を使用してインデックス付けされてよいが、パターン・テーブルは、過去の条件文の結果を表すパターンを伴うIAのハッシュによってインデックス付けされてよい。例えば、このパターンは、分岐命令の最後のX個の結果を示してよい。このパターンは、グローバル履歴ベクトル(GHV:Global History Vector)を使用して表されてよく、GHVの各ビット値は、過去の分岐命令が選択されたかどうかを示す。
したがって、特定の実施形態例では、IA(例えば、ロードIA)は、相互関係がある命令のIA(例えば、格納IA、相互関係があるロード命令のIAなど)を識別しようとするために、予測配列114に対してインデックス付けするのに使用されてよいが、このIAは、パターン・テーブルに対してインデックス付けするのに使用されるハッシュ値を取得するために、パターン(例えば、GHV)と共にハッシュされてもよい。パターン・テーブル内でハッシュ値の一致の位置が特定された場合、パターン・テーブル内のこの一致するエントリに格納された対応するIA(例えば、格納IA、相互関係があるロード命令のIAなど)が、予測配列114へのアクセスから取得された結果(もしあれば)の代わりに使用されてよい。
本開示の実施形態例が、ロード命令と相互関係がある格納命令を識別することに関連して、主に説明された。しかし、特定の実施形態例では、格納命令をロード命令と相互関係付けるのは困難であることがある。さらに具体的には、特定の実施形態例では、ロード命令は、繰り返し実行されて、メモリ内の同じ位置から値をロードすることがある(本明細書では、定期的ロードと呼ぶ)。例えば、実行されているコードは、定期的ロード命令(constant load instruction)を繰り返し実行して、同じデータを同じメモリ位置から複数回ロードすることを必要とするループを含んでいることがある。そのような例示的な状況では、このデータをそのメモリ位置に格納した格納命令が、格納命令を定期的ロードと相互関係付けるのが困難になるような、時間的に非常に早期に実行されていることがある。
そのような実施形態例では、データ・ペアリング・テーブル112を利用して、定期的ロードに関連して、予測されたロードを実行できるようにすることが可能である。さらに具体的には、データ・ペアリング・テーブル112が、格納命令のIAを格納するとして前に説明されたが、定期的ロードに関連して予測されたロードを実行できるように、ロードIAがデータ・ペアリング・テーブル112に格納されてもよい。具体的には、ロード命令に関連付けられたオペランド・アドレスの少なくとも一部がデータ・ペアリング・テーブル112に対してインデックス付けされているときに、データ・ペアリング・テーブル112内で一致の位置が特定されない場合、ロード命令に関連付けられたオペランド・アドレスの少なくとも一部をインデックスとして含み、定期的ロードのIAを格納する新しいエントリが、データ・ペアリング・テーブル112内に生成されてよい。その後、定期的ロードが再び実行されたときに、データ・ペアリング・テーブル112内の一致の位置が特定されてよく、ロード命令とロード命令のペアリングが予測配列114に格納されてよい。予測配列114内のエントリが、ロード命令とロード命令のペアリングとして、または格納命令とロード命令のペアリングとして、どちらの場合にも指定されてよい。
特定の実施形態例では、ロード命令は、格納命令によってメモリに格納された値を含んでいる物理レジスタが、ロード命令によって必要とされる値を格納しなくなっていることがあるような、時間的に非常に早期に発生した格納命令に依存することがある。そのような実施形態例では、ロード命令のIAに基づいて予測格納IAが予測配列114から取得された場合でも、この予測格納IAに対応するエントリがマッピング・テーブル122内に存在しないか、または対応するエントリが無効化されているであろう。いずれの場合も、予測格納命令に関連付けられた物理レジスタを使用して、予測されたロードを実行できないであろう。
格納命令が実行されたときと、ロード命令が実行されるときとの間で、物理レジスタが別の目的のために再利用されているか、または廃止されており、それによって、格納命令に対応するマッピング・テーブル122内のエントリが無効化されることを引き起こす、前述したような状況に対応するために、IA格納データ配列136が提供されてよい。IA格納データ配列136は、格納命令に関連付けられたIAに応じて、格納命令に関連付けられたデータを格納してよい。
さらに具体的には、IA格納データ配列136は、格納IAによってインデックス付けされてよく、IA格納データ配列136は、(マッピング・テーブル122が格納しているように)例えば格納命令に関連付けられた値を保持していると推定される物理レジスタの識別を格納するのではなく、対応する値自体を格納してよい。そのため、格納命令が実行された場合、値がキャッシュに書き込まれることに加えて、この値がIA格納データ配列136に格納され、格納命令のIAによってインデックス付けされてもよい。このようにして、IA格納データ配列136は、マッピング・テーブル122に対するバックアップとして機能してよい。すなわち、格納IAに対応するマッピング・テーブル122のエントリが無効化されている(エントリで識別された物理レジスタが正しい値を格納しなくなっていることを示している)場合、IA格納データ配列136内のエントリの位置を特定しようとするために、格納IAを使用してIA格納データ配列136がアクセスされてよい。IA格納データ配列136内で一致するエントリの位置が特定された場合、一致するエントリからデータが取り出され、予測されたロードを実行するために使用されてよい。
IA格納データ配列136は、マッピング・テーブル122より大きいストレージ容量を有している(すなわち、より多くのエントリを収容できる)が、データは、マッピング・テーブル122より後にIA格納データ配列136に書き込まれることがある。これは、IA格納データ配列136に書き込まれるデータの場合、格納命令を実行する必要があり、一方、マッピング・テーブル122内のエントリで識別された物理レジスタに格納されたデータは、格納命令を実行することを必要とせずに、プロデューサの動作が実行された後に使用可能になるためである。
加えて、特定の例示的な状況では、マッピング・テーブル122のエントリが無効化されたが、物理レジスタにすでに格納されているデータが、IA格納データ配列136にまだ書き込まれていないことがある。例えば、プロセッサ設計は、複数の格納命令を並列に実行し、対応するデータをキューに書き込んで、最終的にメモリに格納することを可能にすることがある。しかし、格納命令の実行とIA格納データ配列136へのデータの書き込みの間に遅延が存在するように、IA格納データ配列136への書き込みの帯域幅が、制限されることがある。そのため、前述した状況では、マッピング・テーブル122のエントリが無効化されるときと、エントリがIA格納データ配列136内に生成されるときとの間に、遅延が存在することがある。別の例示的な状況では、マッピング・テーブル122のエントリが無効化されることがあり、IA格納データ配列136内のエントリが、(エイリアシングに起因して)対象の格納命令と同じインデックスを有している異なる格納命令に対応するデータで上書きされていることがあるため、IA格納データ配列136内のデータも使用できなくなることがある。
マッピング・テーブル122のエントリが無効化され、物理レジスタのデータがIA格納データ配列136に格納されない例示的な状況では、予測されたロードが実行されるかどうかは、ロードが予測されたロードになることが決定されるタイミングに依存することがある。例えば、マッピング・テーブル122およびIA格納データ配列136にアクセスする前に、ロード命令が予測されたロードになることが決定され、マッピング・テーブル122のエントリが無効化されており、エントリがIA格納データ配列136に存在しない場合、それでも、予測されたロードが実行されてよいが、不正なデータがレジスタにロードされる結果になり、したがって前述したように、パイプラインのフラッシュが必要になるであろう。反対に、ロード命令が予測されたロードになることを決定する前に、マッピング・テーブル122およびIA格納データ配列136がアクセスされた場合、マッピング・テーブル122のエントリが無効化されていて、エントリがIA格納データ配列136に存在しなければ、予測されたロードは実行されなくてよい。特定の実施形態例では、前者の状況は、予測配列114が、少なくとも部分的に命令フェッチと並列にアクセスされる場合に生じる可能性がより高くなり、後者の状況は、予測配列114が、少なくとも部分的に命令デコーディングと並列に、または命令デコーディングに応じてアクセスされる場合に生じる可能性がより高くなる。
特定の実施形態例では、物理レジスタが別の目的のために再利用された(例えば、マッピング・テーブル122のエントリが無効化された)ときと、レジスタ値がIA格納データ配列136に書き込まれたときとの間の遅延を短縮するために、regファイルが無効化されたときに、レジスタ値がIA格納データ配列136にコピーされてよい。加えて、IA格納データ配列136にアクセスするために追加の時間が必要な場合は、IA格納データ配列136が命令パイプライン内で早期に読み取られてよい。
特定の実施形態例では、定期的ロードに関連して、IA格納データ配列136が書き込まれてよい。前述したように、データ・ペアリング・テーブル112内のロード命令に関して、オペランド・アドレスの一致が検出されない場合(例えば、ロード命令とペアになる潜在的な格納命令がない場合)、このロード命令のIAがデータ・ペアリング・テーブル112に書き込まれてよい。その後、定期的ロード命令が再び発生した場合、データ・ペアリング・テーブル112内で一致が検出され、ロード命令とロード命令のペアリングが予測配列114に書き込まれ、それによって、予測の資格をロード命令に与える。ロード命令が予測の資格を得た時点で、ロード命令に関連付けられたデータがIA格納データ配列136に書き込まれてよく、ロード命令のIAによってインデックス付けされてよい。そのため、定期的ロード命令が再び発生したときに、一致するロードIAが予測配列114から取得され、マッピング・テーブル122にアクセスすることを必要とせずに、IA格納データ配列136内の対応するデータにアクセスするために使用されてよい。
本開示全体を通じて、配列およびテーブルという用語が使用されている。配列は、例えば、通常は多くても2つの読み取りまたは1つの読み取りおよび1つの書き込みが実行され得るように、通常は1つまたは2つの読み取りポートに制限されるデータ構造であってよい。テーブルは、配列より広いデータ構造のグループを包含してよい。例えば、テーブルは、読み取りおよび書き込みの任意の組み合わせで定義され得る、配列より多くの数のポートを有する、regファイルであってよい。配列は、regファイルより高密度であってよい。特定のデータ構造が配列またはテーブルとして説明されているが、本開示がそれらの種類のデータ構造に限定されないということ、および配列またはテーブルとして説明された任意のデータ構造が、任意の適切な種類のデータ構造を代わりに使用して実装されてよいということが、理解されるべきである。
加えて、本開示の特定の実施形態例では、「ロード命令」という用語またはその変形は、単一のロード命令を指してよい。本開示の他の実施形態例では、ロード命令という用語は、複合命令セット・コンピューティング(CISC:Complex Instruction Set Computing)アーキテクチャにおいて使用されることがある複合命令内の複数の異なるマイクロopのうちの1つであるロードを指してよい。例えば、アーキテクチャは、加算される値のうちの1つがメモリから取得される加算命令を定義してよい。そのような状況では、ロード命令は、加算命令内のマイクロopであってよい。
本開示の実施形態例は、さまざまな技術的特徴、技術的効果、または技術に対する改良、あるいはその組み合わせを実現する。例えば、本開示の実施形態例は、命令実行性能を改善する技術的効果を実現する。本開示の実施形態例は、順序通りでない命令の実行を改善する技術的効果も実現する。これらの技術的効果は、少なくとも一部において、ロード命令と相互関係があると予測された命令を決定することと、予測された相互関係がある命令に対応するプロデューサの動作に関連付けられたデータを取得することと、コンシューマが、ロード命令の実行に関連付けられたメモリ・アクセスを回避しながら、取得されたデータで識別された物理レジスタに格納された値を使用できるようにする予測されたロードを実行することとの技術的特徴によって、実現される。予測された相互関係がある命令は、格納命令または(定期的ロードの場合は)ロード命令であってよい。技術的特徴は、ロード命令のIAのみを使用してインデックス付けされた予測配列、定期的ロードを予測する能力、BTBテーブルおよび予測配列のマージ、検証ロードを実行する能力、予測されたロードを実行する機会の数を増やすためにパターン・テーブルおよびIA格納データ配列を提供することなどをさらに含む。これらの技術的特徴は、少なくとも一部において、データをある物理レジスタから別の物理レジスタにコピーすることが、メモリ位置にアクセスして、メモリ位置に格納されたデータを物理レジスタにコピーするよりも、少ない実行サイクルを必要とするため、改善された命令実行性能の技術的効果を実現する。これらの技術的特徴は、少なくとも一部において、予測されたロードを実行するためのさまざまな非定型的かつ非従来的なメカニズムを提供するため、従来の順序通りでない命令の実行を改善する技術的効果を実現する。したがって、前述した技術的特徴およびその結果得られる技術的効果は、コンピュータの機能に対する改善を構成する。本開示の実施形態例によって提供される技術的特徴、技術的効果、ならびにコンピュータの機能およびコンピュータ技術に対する改善についての上記の例は、例示にすぎず、網羅的ではないと理解されるべきである。
本明細書では、本開示の1つまたは複数の例示的な実施形態が説明されている。それらの実施形態は、本開示の範囲の例示にすぎず、制限するよう全く意図されていない。したがって、本明細書で開示された実施形態の変形、変更、および均等物も、本開示の範囲に含まれる。
図4は、本開示の1つまたは複数の実施形態例を実装するように構成された例示的なコンピューティング・デバイス400の概略図である。図1に示されたデバイス・アーキテクチャ・スタック(device architecture stack)100は、コンピューティング・デバイス400の例示的な構成に対応してよい。本明細書では、デバイス400は単数形で説明されているが、デバイス400の複数の例が提供されてよく、デバイス400に関連して説明された機能が、そのような複数の例にわたって分散されてよいということが、理解されるべきである。
例示的な構成では、デバイス400は、1つまたは複数のプロセッサ402、1つまたは複数のメモリ・デバイス404(本明細書では、総称的にメモリ404と呼ばれる)、1つまたは複数の入出力(I/O:input/output)インターフェイス406、1つまたは複数のネットワーク・インターフェイス408、およびデータ・ストレージ410を含んでよい。デバイス400は、デバイス400のさまざまなコンポーネントを機能的に結合する1つまたは複数のバス412をさらに含んでよい。
バス412は、システム・バス、メモリ・バス、アドレス・バス、またはメッセージ・バスのうちの少なくとも1つを含んでよく、デバイス400のさまざまなコンポーネント間の情報(例えば、データ(コンピュータ実行可能コードを含む)、信号伝達など)の交換を許可してよい。バス412は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポートなどを含んでよいが、これらに限定されない。バス412は、ISA(Industry Standard Architecture)、MCA(Micro Channel Architecture)、EISA(Enhanced ISA)、VESA(Video Electronics Standards Association)アーキテクチャ、アクセラレーテッド・グラフィックス・ポート(AGP:Accelerated Graphics Port)アーキテクチャ、PCI(Peripheral Component Interconnects)アーキテクチャ、PCIE(PCI-Express)アーキテクチャ、PCMCIA(Personal Computer Memory Card International Association)アーキテクチャ、ユニバーサル・シリアル・バス(USB:Universal Serial Bus)アーキテクチャなどを含むが、これらに限定されない、任意の適切なバス・アーキテクチャに関連付けられてよい。
メモリ404は、図1に示された物理メモリ102を表してよく、ランダム・アクセス・メモリ(RAM:random access memory)などの揮発性メモリ(電力が供給されたときにその状態を維持するメモリ)、または読み取り専用メモリ(ROM:read-only memory)、フラッシュ・メモリ、強誘電体RAM(FRAM:ferroelectric RAM)などの不揮発性メモリ(電力が供給されないときにもその状態を維持するメモリ)、あるいはその両方を含んでよい。永続的データ・ストレージは、この用語が本明細書において使用されるとき、不揮発性メモリを含んでよい。特定の実施形態例では、揮発性メモリは、不揮発性メモリよりも高速な読み取り/書き込みアクセスを可能にしてよい。しかし、特定の他の実施形態例では、特定の種類の不揮発性メモリ(例えば、FRAM)が、特定の種類の揮発性メモリよりも高速な読み取り/書き込みアクセスを可能にしてよい。
さまざまな実装では、メモリ404は、さまざまな種類のスタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、さまざまな種類のダイナミック・ランダム・アクセス・メモリ(DRAM:dynamic random access memory)、さまざまな種類の不変のROM、または電気的消去可能プログラム可能読み取り専用メモリ(EEPROM:electrically erasable programmable read-only memory)、フラッシュ・メモリなどのROMの書き込み可能な変形、あるいはその組み合わせなどの、複数の異なる種類のメモリを含んでよい。メモリ404は、メイン・メモリ、ならびに命令キャッシュ、データ・キャッシュ、変換索引バッファ(TLB:translation lookaside buffer)などのキャッシュ・メモリのさまざまな形態を含んでよい。さらに、データ・キャッシュなどのキャッシュ・メモリは、1つまたは複数のキャッシュ・レベル(L1、L2など)の階層として編成された複数のレベルのキャッシュであってよい。
データ・ストレージ410は、磁気ストレージ、光ディスク・ストレージ、またはテープ・ストレージ、あるいはその組み合わせを含むが、これらに限定されない、取り外し可能なストレージまたは取り外し不能なストレージあるいはその両方を含んでよい。データ・ストレージ410は、コンピュータ実行可能命令およびその他のデータの不揮発性ストレージを提供してよい。メモリ404および取り外し可能または取り外し不能あるいはその両方のデータ・ストレージ410は、この用語が本明細書において使用されるとき、コンピュータ可読記憶媒体(CRSM:computer-readable storage media)の例である。
データ・ストレージ410は、メモリ404にロード可能であり、かつプロセッサ402にさまざまな動作を実行または開始させるためにプロセッサ402によって実行可能である、コンピュータ実行可能なコード、命令などを格納してよい。データ・ストレージ410は、コンピュータ実行可能命令の実行中にプロセッサ402で使用するためにメモリ404にコピーされてよいデータをさらに格納してよい。さらに、プロセッサ402によるコンピュータ実行可能命令の実行の結果として生成された出力データが、最初にメモリ404に格納されてよく、最終的に、不揮発性ストレージであるデータ・ストレージ410にコピーされてよい。
さらに具体的には、データ・ストレージ410は、1つまたは複数のオペレーティング・システム(O/S:operating system)414(O/S414を含んでよく、1つまたは複数の仮想O/Sのインスタンスを含んでよい)と、メモリ404または1つまたは複数の外部データ・ストア(図示されていない)あるいはその両方にアクセスするように構成された1つまたは複数のデータベース管理システム(DBMS:database management system)416と、1つまたは複数のプログラム・モジュール、アプリケーション、エンジン、コンピュータ実行可能コード、スクリプトなど(例えば、予測エンジン418、レジスタ追跡エンジン420、読み取り/書き込みエンジン422、および命令実行エンジン424など)とを格納してよい。データ・ストレージ410に格納されているとして示されているコンポーネントのいずれかは、ソフトウェア、ファームウェア、またはハードウェア、あるいはその組み合わせの任意の組み合わせを含んでよい。ソフトウェアまたはファームウェアあるいはその両方は、プロセッサ402のうちの1つまたは複数によって実行されて、対応する名前が付けられたエンジンに関連して前述された動作のいずれかを実行するために、メモリ404にロードされてよいコンピュータ実行可能命令(例えば、コンピュータ実行可能プログラム・コード)を含んでよい。
図4に示されていないが、データ・ストレージ410は、デバイス400のコンポーネントによって使用されるさまざまな種類のデータ(例えば、データ・ペアリング112、予測配列114、マッピング・テーブル122、IA格納データ配列136など)をさらに格納してよい。データ・ストレージ410に格納されたいずれかのデータが、コンピュータ実行可能命令の実行においてプロセッサ402で使用するために、メモリ404にロードされてよい。加えて、データ・ストレージ410に格納されたいずれかのデータが、外部データ・ストレージに格納される可能性があってよく、DBMS416を介してアクセスされ、コンピュータ実行可能命令の実行においてプロセッサ402で使用するために、メモリ404にロードされてよい。
プロセッサ402は、メモリ404にアクセスし、ロードされたコンピュータ実行可能命令を実行するように、構成されてよい。例えば、プロセッサ402は、本開示の1つまたは複数の実施形態に従って、デバイス400のさまざまなプログラム・モジュール、アプリケーション、エンジンなどのコンピュータ実行可能命令を実行して、さまざまな動作の実行を引き起こすか、またはさまざまな動作の実行を容易にするように、構成されてよい。プロセッサ402は、データを入力として受け取ることと、この入力データを、格納されたコンピュータ実行可能命令に従って処理することと、出力データを生成することとを実行できる、任意の適切な処理ユニットを含んでよい。プロセッサ402は、中央処理装置、マイクロプロセッサ、縮小命令セット・コンピュータ(RISC:Reduced Instruction Set Computer)マイクロプロセッサ、複合命令セット・コンピュータ(CISC:Complex Instruction Set Computer)マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路(ASIC:Application Specific Integrated Circuit)、フィールドプログラマブル・ゲート・アレイ(FPGA:Field-Programmable Gate Array)、システムオンチップ(SoC:System-on-a-Chip)、デジタル信号プロセッサ(DSP:digital signal processor)などを含むが、これらに限定されない、任意の種類の適切な処理ユニットを含んでよい。さらに、プロセッサ402は、例えば、レジスタ、マルチプレクサ、算術論理演算ユニット、キャッシュ・メモリに対する読み取り動作/書き込み動作を制御するためのキャッシュ・コントローラ、分岐予測器などの、任意の数の構成要素となるコンポーネントを含んでいる、任意の適切なマイクロアーキテクチャ設計を備えてよい。プロセッサ402のマイクロアーキテクチャ設計は、さまざまな命令セットのいずれかをサポートできてよい。
ここで、データ・ストレージ410に格納されているように示されている他の例示的なコンポーネントを参照すると、O/S414が、データ・ストレージ410からメモリ404にロードされてよく、デバイス400上で実行されている他のアプリケーション・ソフトウェアと、デバイス400のハードウェア・リソースとの間のインターフェイスを提供してよい。さらに具体的には、O/S414は、デバイス400のハードウェア・リソースを管理するため、および他のアプリケーション・プログラムへの共通サービスを提供するための、コンピュータ実行可能命令のセットを含んでよい。特定の実施形態例では、O/S414は、データ・ストレージ410に格納されているように示されているプログラム・モジュールのうちの1つまたは複数の実行を含むか、またはその他の方法で実行を制御してよい。O/S414は、任意のサーバ・オペレーティング・システム、任意のメインフレーム・オペレーティング・システム、または任意のその他の独自または非独自のオペレーティング・システムを含むが、これらに限定されない、現在知られているか、または将来開発される任意のオペレーティング・システムを含んでよい。
DBMS416は、メモリ404にロードされてよく、メモリ404に格納されたデータ、データ・ストレージ410に格納されたデータ、または外部データ・ストアに格納されたデータ、あるはその組み合わせにアクセスすること、それらのデータを取り出すこと、格納すること、または操作すること、あるいはその組み合わせを実行することのための機能をサポートしてよい。DBMS416は、さまざまなデータベース・モデル(例えば、リレーショナル・モデル、オブジェクト・モデルなど)のいずれかを使用してよく、さまざまな照会言語のいずれかをサポートしてよい。DBMS416は、1つまたは複数のデータ・スキーマで表され、任意の適切なデータ・リポジトリに格納された、データにアクセスしてよい。DBMS416を介してデバイス400によってアクセス可能であってよい外部データ・ストアは、データベース(例えば、リレーショナル、オブジェクト指向など)、ファイル・システム、フラット・ファイル、データがコンピュータ・ネットワークの2つ以上のノードに格納される分散データ・ストア、ピアツーピア・ネットワークのデータ・ストアなどを含んでよいが、これらに限定されない。
ここで、デバイス400の他の例示的なコンポーネントを参照すると、入出力(I/O)インターフェイス406は、デバイス400による、1つまたは複数のI/Oデバイスからの入力情報の受信、およびデバイス400から1つまたは複数のI/Oデバイスへの情報の出力を容易にしてよい。I/Oデバイスは、タッチ・サーフェスまたはタッチスクリーンを備えるディスプレイまたは表示画面、スピーカなどの音を発生させる音声出力デバイス、マイクロホンなどの音声キャプチャ・デバイス、カメラなどの画像またはビデオあるいはその両方のキャプチャ・デバイス、触覚ユニットなどの、さまざまなコンポーネントのいずれかを含んでよい。これらのコンポーネントのいずれかは、デバイス400に統合されてよく、または別々であってよい。I/Oデバイスは、例えば、データ・ストレージ・デバイス、印刷デバイスなどの、任意の数の周辺機器をさらに含んでよい。
I/Oインターフェイス406は、ユニバーサル・シリアル・バス(USB)、FireWire、Thunderbolt、イーサネット(R)・ポート、または1つまたは複数のネットワークに接続できるその他の接続プロトコルなどの、外部周辺機器接続用のインターフェイスを含んでもよい。I/Oインターフェイス406は、無線ローカル・エリア・ネットワーク(WLAN:wireless local area network)(Wi−Fiなど)の無線、Bluetooth、または無線通信ネットワーク(ロング・ターム・エボリューション(LTE:Long Term Evolution)ネットワーク、WiMaxネットワーク、3Gネットワークなど)と通信できる無線などの、無線ネットワークの無線、あるいはその組み合わせを介して、1つまたは複数のネットワークに接続するための、1つまたは複数のアンテナへの接続を含んでもよい。
デバイス400は、1つまたは複数のネットワーク・インターフェイス408をさらに含んでよく、このネットワーク・インターフェイス408を介して、デバイス400は、さまざまな他のシステム、プラットフォーム、ネットワーク、デバイスなどのいずれかと通信してよい。ネットワーク・インターフェイス408は、例えば、1つまたは複数のネットワークを介して、1つまたは複数の他のデバイスとの通信を可能にしてよい。そのようなネットワークは、例えば、ケーブル・ネットワーク、パブリック・ネットワーク(例えば、インターネット)、プライベート・ネットワーク(例えば、フレーム中継ネットワーク)、無線ネットワーク、セルラー・ネットワーク、電話ネットワーク(例えば、公衆交換電話網)、または任意のその他の適切なプライベートまたはパブリックのパケット交換ネットワークまたは回路交換ネットワークなどの、任意の1つまたは複数の異なる種類の通信ネットワークを含んでよいが、これらに限定されない。そのようなネットワークは、任意の適切な通信範囲に関連付けられてよく、例えば、世界規模のネットワーク(例えば、インターネット)、メトロポリタン・エリア・ネットワーク(MAN:metropolitan area network)、広域ネットワーク(WAN:wide area network)、ローカル・エリア・ネットワーク(LAN:local area network)、またはパーソナル・エリア・ネットワーク(PAN:personal area network)を含んでよい。加えて、そのようなネットワークは、同軸ケーブル、ツイストペア線(例えば、ツイストペア銅線)、光ファイバ、光ファイバ同軸ハイブリッド(HFC:hybrid fiber-coaxial)媒体、マイクロ波媒体、無線周波数通信媒体、衛星通信媒体、またはこれらの任意の組み合わせを含むが、これらに限定されない、任意の適切な種類の媒体を経由してネットワーク・トラフィックを送信するために、通信リンクおよび関連するネットワーク・デバイス(例えば、リンク層スイッチ、ルータなど)を含んでよい。
データ・ストレージ410に格納されているように図4に示されているプログラム・モジュールが、例示にすぎず、網羅的でないということ、および特定のモジュールによってサポートされていると説明された処理が、代替として、複数のモジュール、エンジンなどにわたって分散されるか、または異なるモジュール、エンジンなどによって実行されてよいということが、理解されるべきである。加えて、デバイス400上でローカルにホストされているか、または1つまたは複数のネットワークを介してアクセスできる他のコンピューティング・デバイス上でホストされているか、あるいはその両方である、さまざまなプログラム・モジュール、スクリプト、プラグイン、アプリケーション・プログラミング・インターフェイス(API:Application Programming Interface)、または任意のその他の適切なコンピュータ実行可能コードが、図4に示されているモジュールによって提供される機能、あるいは追加または代替の機能、あるいはその両方をサポートするために、提供されてよい。さらに、機能は、特定のモジュールによって実行されると説明された処理が、任意の数のプログラム・モジュールの集合によって実行できるように、または特定のモジュールによってサポートされていると説明された機能が、少なくとも一部において、別のモジュールによってサポートできるように、任意の適切な方法でモジュール化されてよい。加えて、本明細書に記載された機能をサポートするプログラム・モジュールは、例えばクライアント/サーバ・モデル、ピアツーピア・モデルなどの、任意の適切なコンピューティングモデルに従って、任意の数のデバイス400にわたって実行可能であってよい。加えて、図4に示されているモジュールのいずれかによってサポートされていると説明された機能のいずれかは、少なくとも部分的に、任意の数のデバイスにわたって、ハードウェアまたはファームウェアあるいはその両方において実装されてよい。
デバイス400が、本開示の範囲を逸脱することなく、説明されたか、または示されたものを超える、代替または追加あるいはその両方のハードウェア・コンポーネント、ソフトウェア・コンポーネント、またはファームウェア・コンポーネントを含んでよいということが、さらに理解されるべきである。さらに具体的には、デバイス400の一部を形成しているように示されたソフトウェア・コンポーネント、ファームウェア・コンポーネント、またはハードウェア・コンポーネントが例示にすぎないということ、およびさまざまな実施形態において、一部のコンポーネントが存在しなくてよいか、または追加のコンポーネントが提供されてよいということが、理解されるべきである。さまざまな例示的なモジュールが、データ・ストレージ410に格納されたソフトウェア・モジュールとして示され、説明されたが、各モジュールによってサポートされていると説明された機能が、ハードウェア、ソフトウェア、またはファームウェア、あるいはその組み合わせの任意の組み合わせによって可能にされてよいということが、理解されるべきである。さまざまな実施形態において、前述の各モジュールが、サポートされている機能の論理パーティションを表してよいということが、さらに理解されるべきである。この論理パーティションは、機能の説明を簡単にするために示されており、機能を実装するためのソフトウェア、ハードウェア、またはファームウェア、あるいはその組み合わせの構造を代表していなくてよい。したがって、特定のモジュールによって提供されていると説明された機能が、さまざまな実施形態では、少なくとも一部において、1つまたは複数の他のモジュールによって提供されてよいということが、理解されるべきである。さらに、特定の実施形態では、1つまたは複数の示されたモジュールが存在しなくてよく、他の実施形態では、示されていない追加のプログラム・モジュールまたはエンジンあるいはその両方が存在してよく、説明された機能または追加の機能あるいはその両方の少なくとも一部をサポートしてよい。
方法200または方法300の1つまたは複数の動作は、図4に示された例示的な構成を有しているデバイス400によって、またはさらに具体的には、そのようなデバイ上で実行可能な1つまたは複数のプログラム・モジュール、エンジン、アプリケーションなどによって、実行されてよい。しかし、そのような動作が、多数のその他のデバイス構成に関連して実装されてよいということが、理解されるべきである。
図2の例示的な方法または図3の例示的な方法において説明され、示された動作は、本開示のさまざまな実施形態例において、望ましい任意の適切な順序で実施または実行されてよい。さらに、特定の実施形態例では、動作の少なくとも一部が並列に実施されてよい。さらに、特定の実施形態例では、図2または図3に示されている動作より少ない動作、多い動作、またはそれらと異なる動作が、実行されてよい。
本開示の特定の実施形態が説明されているが、当業者は、多数のその他の変更および代替の実施形態が、本開示の範囲に含まれるということを認識するであろう。例えば、特定のシステム、システム・コンポーネント、デバイス、またはデバイス・コンポーネントに関して説明された機能または処理能力あるいはその両方のいずれかは、任意のその他のシステム、デバイス、またはコンポーネントによって実行されてよい。さらに、さまざまな例示的な実装およびアーキテクチャが、本開示の実施形態に従って説明されたが、当業者は、本明細書に記載された例示的な実装およびアーキテクチャに対する多数のその他の変更も、本開示の範囲に含まれるということを理解するであろう。加えて、別の動作、要素、コンポーネント、データなどに基づいていると本明細書において説明された任意の動作、要素、コンポーネント、データなどが、1つまたは複数の他の動作、要素、コンポーネント、データなどにさらに基づいてよいということが、理解されるべきである。したがって、「〜に基づいて」という語句またはその変形は、「〜に少なくとも部分的に基づいて」と解釈されるべきである。
本開示は、システム、方法、またはコンピュータ・プログラム製品、あるいその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本開示の態様を実施させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
コンピュータ可読記憶媒体は、命令実行デバイスで使用するための命令を保持および格納できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラム可能読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
本開示の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Smalltalk、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本開示の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate array)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic array)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
本開示の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスにロードされてもよく、それによって、一連の動作可能なステップを、コンピュータ実装プロセスを生成するコンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行させる。
図内のフローチャートおよびブロック図は、本開示のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実施する専用ハードウェアベースのシステムによって実装され得るということにも注意する。

Claims (20)

  1. ロード命令のメモリ・アクセスを回避するためのコンピュータ実装方法であって、
    少なくとも一部において、ロード命令に関連付けられた命令アドレス(IA)によってインデックス付けされた第1のデータ構造にアクセスすることによって、前記ロード命令に関連付けられたロードIAに対応する予測されたIAを決定することと、
    前記予測されたIAの少なくとも一部を使用して、(i)第2のデータ構造にアクセスして、前記ロード命令に関連付けられた値を格納している第1の物理レジスタを決定するか、または(ii)前記第2のデータ構造にアクセスする代わりに、第3のデータ構造にアクセスして、前記ロード命令に関連付けられた前記値を取得することと、
    少なくとも一部において、第2の物理レジスタを前記ロード命令に関連付けられた前記値に設定することによって、前記ロード命令の一部として予測されたロードを実行することとを含んでいる、コンピュータ実装方法。
  2. 前記予測されたIAが、格納命令に関連付けられた予測格納IAであり、前記第2のデータ構造にアクセスすることが、
    前記予測格納IAの少なくとも一部によってインデックス付けされた前記第2のデータ構造内のエントリにアクセスすることと、
    前記第2のデータ構造内の前記エントリから、前記予測格納IAに関連付けられた前記第1の物理レジスタを決定することと、
    前記ロード命令に関連付けられた前記値を前記第1の物理レジスタから取得することとを含んでいる、請求項1に記載のコンピュータ実装方法。
  3. 前記予測されたIAに関連付けられた信頼値を決定することと、
    前記信頼値がしきい値を満たすということを決定することとをさらに含んでいる、請求項1に記載のコンピュータ実装方法。
  4. 前記ロード命令に関連付けられた前記ロードIAに対応する前記予測されたIAを決定することが、
    前記ロードIAの少なくとも一部を使用して前記第1のデータ構造内のエントリにアクセスすることと、
    前記第1のデータ構造内の前記エントリから前記予測されたIAを識別することとを含んでいる、請求項1に記載のコンピュータ実装方法。
  5. 前記予測されたIAに関連付けられた第1のオペランド・アドレスと、前記ロードIAに関連付けられた第2のオペランド・アドレスとの間の一致に少なくとも部分的に基づいて、前記予測されたIAと前記ロードIAとの間のデータ・ペアリングを識別することと、
    前記データ・ペアリングに少なくとも部分的に基づいて、前記エントリを前記第1のデータ構造内に生成することとをさらに含んでいる、請求項4に記載のコンピュータ実装方法。
  6. 前記第1のデータ構造が分岐予測データ構造(branch prediction data structure)である、請求項4に記載のコンピュータ実装方法。
  7. 前記予測されたIAが予測定期的ロードIA(predicted constant load IA)であり、前記第3のデータ構造にアクセスして、前記ロード命令に関連付けられた前記値を取得することが、
    前記予測定期的ロードIAの少なくとも一部によってインデックス付けされた前記第3のデータ構造内のエントリにアクセスすることと、
    前記第3のデータ構造内の前記エントリから、前記ロード命令に関連付けられた前記値を決定することとを含んでいる、請求項1に記載のコンピュータ実装方法。
  8. 前記ロード命令が第1のロード命令であり、前記ロードIAが第1のロードIAであり、前記予測されたIAが第1の予測されたIAであり、前記方法が、
    前記第2のロード命令に関連付けられた第2のロードIAに対応する第2の予測されたIAを決定することをさらに含んでおり、前記決定することが、
    パターンと共に前記第2のロードIAをハッシュして、ハッシュ値を取得することと、
    前記ハッシュ値を使用して、パターン・テーブルに対してインデックス付けし、前記パターン・テーブル内の一致するエントリを識別することと、
    前記第2の予測されたIAを、前記パターン・テーブル内の前記一致するエントリから決定することとを含んでいる、請求項1に記載のコンピュータ実装方法。
  9. 前記第1のデータ構造が、ロードIAの第1のセットによってインデックス付けされ、前記第3のデータ構造が、格納IAの第2のセットによってインデックス付けされる、請求項1に記載のコンピュータ実装方法。
  10. ロード命令のメモリ・アクセスを回避するためのシステムであって、
    コンピュータ実行可能命令を格納している少なくとも1つのメモリと、
    前記少なくとも1つのメモリに動作可能なように結合された少なくとも1つのプロセッサであって、前記少なくとも1つのメモリにアクセスして前記コンピュータ実行可能命令を実行し、
    少なくとも一部において、ロード命令に関連付けられた命令アドレス(IA)によってインデックス付けされた第1のデータ構造にアクセスすることによって、前記ロード命令に関連付けられたロードIAに対応する予測されたIAを決定することと、
    前記予測されたIAの少なくとも一部を使用して、(i)第2のデータ構造にアクセスして、前記ロード命令に関連付けられた値を格納している第1の物理レジスタを決定するか、または(ii)前記第2のデータ構造にアクセスする代わりに、第3のデータ構造にアクセスして、前記ロード命令に関連付けられた前記値を取得することと、
    少なくとも一部において、第2の物理レジスタを前記ロード命令に関連付けられた前記値に設定することによって、前記ロード命令の一部として予測されたロードを実行することとを実行するように構成されている、前記少なくとも1つのプロセッサとを備えている、システム。
  11. 前記予測されたIAが、格納命令に関連付けられた予測格納IAであり、前記少なくとも1つのプロセッサが、前記コンピュータ実行可能命令を実行して、
    前記予測格納IAの少なくとも一部によってインデックス付けされた前記第2のデータ構造内のエントリにアクセスすることと、
    前記第2のデータ構造内の前記エントリから、前記予測格納IAに関連付けられた前記第1の物理レジスタを決定することと、
    前記ロード命令に関連付けられた前記値を前記第1の物理レジスタから取得することとを実行することによって、前記第2のデータ構造にアクセスするように構成されている、請求項10に記載のシステム。
  12. 前記少なくとも1つのプロセッサが、前記コンピュータ実行可能命令を実行して、
    前記予測されたIAに関連付けられた信頼値を決定することと、
    前記信頼値がしきい値を満たすということを決定することとを実行するようにさらに構成されている、請求項10に記載のシステム。
  13. 前記少なくとも1つのプロセッサが、前記コンピュータ実行可能命令を実行して、
    前記ロードIAの少なくとも一部を使用して前記第1のデータ構造内のエントリにアクセスすることと、
    前記第1のデータ構造内の前記エントリから前記予測されたIAを識別することとを実行することによって、前記ロード命令に関連付けられた前記ロードIAに対応する前記予測されたIAを決定するように構成されている、請求項10に記載のシステム。
  14. 前記少なくとも1つのプロセッサが、前記コンピュータ実行可能命令を実行して、
    前記予測されたIAに関連付けられた第1のオペランド・アドレスと、前記ロードIAに関連付けられた第2のオペランド・アドレスとの間の一致に少なくとも部分的に基づいて、前記予測されたIAと前記ロードIAとの間のデータ・ペアリングを識別することと、
    前記データ・ペアリングに少なくとも部分的に基づいて、前記エントリを前記第1のデータ構造内に生成することとを実行するようにさらに構成されている、請求項13に記載のシステム。
  15. 前記第1のデータ構造が分岐予測データ構造である、請求項13に記載のシステム。
  16. 前記予測されたIAが予測定期的ロードIAであり、前記少なくとも1つのプロセッサが、前記コンピュータ実行可能命令を実行して、
    前記予測定期的ロードIAの少なくとも一部によってインデックス付けされた前記第3のデータ構造内のエントリにアクセスすることと、
    前記第3のデータ構造内の前記エントリから、前記ロード命令に関連付けられた前記値を決定することとを実行することによって、前記ロード命令に関連付けられた前記値を取得するために、前記第3のデータ構造にアクセスするように構成されている、請求項10に記載のシステム。
  17. 前記ロード命令が第1のロード命令であり、前記ロードIAが第1のロードIAであり、前記予測されたIAが第1の予測されたIAであり、前記少なくとも1つのプロセッサが、前記コンピュータ実行可能命令を実行して、
    前記第2のロード命令に関連付けられた第2のロードIAに対応する第2の予測されたIAを決定するようにさらに構成されており、前記決定することが、
    パターンと共に前記第2のロードIAをハッシュして、ハッシュ値を取得することと、
    前記ハッシュ値を使用して、パターン・テーブルに対してインデックス付けし、前記パターン・テーブル内の一致するエントリを識別することと、
    前記第2の予測されたIAを、前記パターン・テーブル内の前記一致するエントリから決定することとを含んでいる、請求項10に記載のシステム。
  18. 前記第1のデータ構造が、ロードIAの第1のセットによってインデックス付けされ、前記第3のデータ構造が、格納IAの第2のセットによってインデックス付けされる、請求項10に記載のシステム。
  19. ロード命令のメモリ・アクセスを回避するためのコンピュータ・プログラムであって、前記プログラムが、コンピュータに、
    少なくとも一部において、ロード命令に関連付けられた命令アドレス(IA)によってインデックス付けされた第1のデータ構造にアクセスすることによって、前記ロード命令に関連付けられたロードIAに対応する予測されたIAを決定することと、
    前記予測されたIAの少なくとも一部を使用して、(i)第2のデータ構造にアクセスして、前記ロード命令に関連付けられた値を格納している第1の物理レジスタを決定するか、または(ii)前記第2のデータ構造にアクセスする代わりに、第3のデータ構造にアクセスして、前記ロード命令に関連付けられた前記値を取得することと、
    少なくとも一部において、第2の物理レジスタを前記ロード命令に関連付けられた前記値に設定することによって、前記ロード命令の一部として予測されたロードを実行することと、
    を実行させる、コンピュータ・プログラム。
  20. 前記予測されたIAが、格納命令に関連付けられた予測格納IAであり、前記第2のデータ構造にアクセスすることが、
    前記予測格納IAの少なくとも一部によってインデックス付けされた前記第2のデータ構造内のエントリにアクセスすることと、
    前記第2のデータ構造内の前記エントリから、前記予測格納IAに関連付けられた前記第1の物理レジスタを決定することと、
    前記ロード命令に関連付けられた前記値を前記第1の物理レジスタから取得することとを含んでいる、請求項19に記載のコンピュータ・プログラム。
JP2019544818A 2017-02-24 2018-02-20 ロード命令のメモリ・アクセスを回避するためのコンピュータ実装方法、システム、およびコンピュータ・プログラム Active JP7118984B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/441,604 2017-02-24
US15/441,604 US10261791B2 (en) 2017-02-24 2017-02-24 Bypassing memory access for a load instruction using instruction address mapping
PCT/IB2018/051025 WO2018154435A1 (en) 2017-02-24 2018-02-20 Bypassing memory access for a load instruction using instruction address mapping

Publications (2)

Publication Number Publication Date
JP2020510916A true JP2020510916A (ja) 2020-04-09
JP7118984B2 JP7118984B2 (ja) 2022-08-16

Family

ID=63245759

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019544818A Active JP7118984B2 (ja) 2017-02-24 2018-02-20 ロード命令のメモリ・アクセスを回避するためのコンピュータ実装方法、システム、およびコンピュータ・プログラム

Country Status (6)

Country Link
US (1) US10261791B2 (ja)
JP (1) JP7118984B2 (ja)
CN (1) CN110312994B (ja)
DE (1) DE112018000202T5 (ja)
GB (1) GB2574956B (ja)
WO (1) WO2018154435A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2572578B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Cache annotations to indicate specultative side-channel condition
GB2577502B (en) 2018-09-26 2021-09-08 Advanced Risc Mach Ltd An apparatus and method for processing instructions
US10740248B2 (en) * 2018-12-13 2020-08-11 International Business Machines Corporation Methods and systems for predicting virtual address
US11036512B2 (en) 2019-09-23 2021-06-15 Microsoft Technology Licensing, Llc Systems and methods for processing instructions having wide immediate operands
US20210149676A1 (en) * 2019-11-14 2021-05-20 Higon Austin R&D Center Corporation Branch Prediction Method, Branch Prediction Unit and Processor Core
CN113312277B (zh) * 2021-06-29 2024-06-25 合肥忆芯电子科技有限公司 存储体地址映射装置、方法及电子设备
US20230195465A1 (en) * 2021-12-21 2023-06-22 Intel Corporation Device, method and system to provide a predicted value with a sequence of micro-operations
CN114282217A (zh) * 2021-12-22 2022-04-05 完美世界征奇(上海)多媒体科技有限公司 游戏外挂的检测方法和装置、存储介质、电子装置
CN115080120B (zh) * 2022-07-01 2024-07-19 北京百度网讯科技有限公司 寄存器的验证方法、装置、设备和介质
CN115292764B (zh) * 2022-10-08 2023-03-24 山东云海国创云计算装备产业创新中心有限公司 一种总线的安全防护方法、装置及介质
US12086600B2 (en) * 2022-12-05 2024-09-10 Microsoft Technology Licensing, Llc Branch target buffer with shared target bits

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11212788A (ja) * 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US7788472B2 (en) * 2003-06-13 2010-08-31 Arm Limited Instruction encoding within a data processing apparatus having multiple instruction sets
US20140181482A1 (en) * 2012-12-20 2014-06-26 Advanced Micro Devices, Inc. Store-to-load forwarding
US20170010892A1 (en) * 2015-07-09 2017-01-12 Centipede Semi Ltd. Processor with efficient memory access

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6349382B1 (en) * 1999-03-05 2002-02-19 International Business Machines Corporation System for store forwarding assigning load and store instructions to groups and reorder queues to keep track of program order
US6625723B1 (en) 1999-07-07 2003-09-23 Intel Corporation Unified renaming scheme for load and store instructions
US6675287B1 (en) * 2000-04-07 2004-01-06 Ip-First, Llc Method and apparatus for store forwarding using a response buffer data path in a write-allocate-configurable microprocessor
US7640419B2 (en) 2003-12-23 2009-12-29 Intel Corporation Method for and a trailing store buffer for use in memory renaming
US7174428B2 (en) 2003-12-29 2007-02-06 Intel Corporation Method and system for transforming memory location references in instructions
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US7594079B2 (en) 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
EP2284693A1 (en) * 2009-08-03 2011-02-16 C.R.F. Società Consortile per Azioni Wait instruction
US8452946B2 (en) 2009-12-17 2013-05-28 Intel Corporation Methods and apparatuses for efficient load processing using buffers
CN102184127B (zh) 2011-05-20 2013-11-06 北京北大众志微系统科技有限责任公司 一种实现处理器预执行的方法及相应的装置
US9286072B2 (en) 2011-10-03 2016-03-15 International Business Machines Corporation Using register last use infomation to perform decode-time computer instruction optimization
US9354874B2 (en) 2011-10-03 2016-05-31 International Business Machines Corporation Scalable decode-time instruction sequence optimization of dependent instructions
US9996348B2 (en) * 2012-06-14 2018-06-12 Apple Inc. Zero cycle load
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US9575897B2 (en) * 2015-07-09 2017-02-21 Centipede Semi Ltd. Processor with efficient processing of recurring load instructions from nearby memory addresses

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11212788A (ja) * 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US7788472B2 (en) * 2003-06-13 2010-08-31 Arm Limited Instruction encoding within a data processing apparatus having multiple instruction sets
US20140181482A1 (en) * 2012-12-20 2014-06-26 Advanced Micro Devices, Inc. Store-to-load forwarding
US20170010892A1 (en) * 2015-07-09 2017-01-12 Centipede Semi Ltd. Processor with efficient memory access

Also Published As

Publication number Publication date
JP7118984B2 (ja) 2022-08-16
US10261791B2 (en) 2019-04-16
DE112018000202T5 (de) 2019-08-14
US20180246723A1 (en) 2018-08-30
GB201913452D0 (en) 2019-10-30
CN110312994B (zh) 2023-04-25
WO2018154435A1 (en) 2018-08-30
GB2574956A (en) 2019-12-25
CN110312994A (zh) 2019-10-08
GB2574956B (en) 2020-05-20

Similar Documents

Publication Publication Date Title
JP7118984B2 (ja) ロード命令のメモリ・アクセスを回避するためのコンピュータ実装方法、システム、およびコンピュータ・プログラム
US10489309B2 (en) Memory protection key architecture with independent user and supervisor domains
US9910611B2 (en) Access control for memory protection key architecture
US10108556B2 (en) Updating persistent data in persistent memory-based storage
US9690716B2 (en) High performance persistent memory for region-centric consistent and atomic updates
US20150277949A1 (en) Securing shared interconnect for virtual machine
US10394595B2 (en) Method to manage guest address space trusted by virtual machine monitor
US10970390B2 (en) Mechanism to prevent software side channels
US9886397B2 (en) Load and store ordering for a strongly ordered simultaneous multithreading core
US9851979B2 (en) Split-level history buffer in a computer processing unit
US9740623B2 (en) Object liveness tracking for use in processing device cache
US10705962B2 (en) Supporting adaptive shared cache management
US20160378651A1 (en) Application driven hardware cache management
US10452423B2 (en) Method and apparatus for light-weight virtualization contexts
US20190155630A1 (en) System and method to improve nested virtual machine monitor performance
US10324862B2 (en) Supporting oversubscription of guest enclave memory pages
US10740104B2 (en) Tagging target branch predictors with context with index modification and late stop fetch on tag mismatch
WO2018001528A1 (en) Apparatus and methods to manage memory side cache eviction

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200826

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210818

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210921

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211206

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20220502

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220510

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220711

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: 20220726

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220803

R150 Certificate of patent or registration of utility model

Ref document number: 7118984

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150