(57)【要約】【課題】命令アドレス・マッピングを使用したロード命令のメモリ・アクセスの回避方法を提供することである。【解決手段】ロード命令のメモリ・アクセスを回避する予測されたロードを実行するためのシステム、方法、およびコンピュータ可読媒体が開示される。ロード命令によってロードされる値を格納しているとして予測された第１の物理レジスタが識別され、第１の物理レジスタに格納された値が、コンシューマの動作によって使用するために、第２の物理レジスタにコピーされる。ロード命令に対応する予測格納命令が識別され、予測格納命令に関連付けられたデータを取得するために、マッピング・テーブルがアクセスされる。このデータを評価して、予測されたロードが依存制約を満たすかどうかを決定する。予測されたロードの実行の結果として、コンシューマの動作は、第１の物理レジスタに格納されたデータを直接使用し、その他の方法ではロード命令を実行するために必要になる、キャッシュ・メモリ・アクセスを回避することができる。【選択図】図１
2020510916.tif 000002
【特許請求の範囲】
【請求項１】
ロード命令のメモリ・アクセスを回避するためのコンピュータ実装方法であって、
少なくとも一部において、ロード命令に関連付けられた命令アドレス（ＩＡ）によってインデックス付けされた第１のデータ構造にアクセスすることによって、前記ロード命令に関連付けられたロードＩＡに対応する予測されたＩＡを決定することと、
前記予測されたＩＡの少なくとも一部を使用して、（ｉ）第２のデータ構造にアクセスして、前記ロード命令に関連付けられた値を格納している第１の物理レジスタを決定するか、または（ｉｉ）前記第２のデータ構造にアクセスする代わりに、第３のデータ構造にアクセスして、前記ロード命令に関連付けられた前記値を取得することと、
少なくとも一部において、第２の物理レジスタを前記ロード命令に関連付けられた前記値に設定することによって、前記ロード命令の一部として予測されたロードを実行することとを含んでいる、コンピュータ実装方法。
【請求項２】
前記予測されたＩＡが、格納命令に関連付けられた予測格納ＩＡであり、前記第２のデータ構造にアクセスすることが、
前記予測格納ＩＡの少なくとも一部によってインデックス付けされた前記第２のデータ構造内のエントリにアクセスすることと、
前記第２のデータ構造内の前記エントリから、前記予測格納ＩＡに関連付けられた前記第１の物理レジスタを決定することと、
前記ロード命令に関連付けられた前記値を前記第１の物理レジスタから取得することとを含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記予測されたＩＡに関連付けられた信頼値を決定することと、
前記信頼値がしきい値を満たすということを決定することとをさらに含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項４】
前記ロード命令に関連付けられた前記ロードＩＡに対応する前記予測されたＩＡを決定することが、
前記ロードＩＡの少なくとも一部を使用して前記第１のデータ構造内のエントリにアクセスすることと、
前記第１のデータ構造内の前記エントリから前記予測されたＩＡを識別することとを含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項５】
前記予測されたＩＡに関連付けられた第１のオペランド・アドレスと、前記ロードＩＡに関連付けられた第２のオペランド・アドレスとの間の一致に少なくとも部分的に基づいて、前記予測されたＩＡと前記ロードＩＡとの間のデータ・ペアリングを識別することと、
前記データ・ペアリングに少なくとも部分的に基づいて、前記エントリを前記第１のデータ構造内に生成することとをさらに含んでいる、請求項４に記載のコンピュータ実装方法。
【請求項６】
前記第１のデータ構造が分岐予測データ構造（branch prediction  data structure）である、請求項４に記載のコンピュータ実装方法。
【請求項７】
前記予測されたＩＡが予測定期的ロードＩＡ（predicted constant  load IA）であり、前記第３のデータ構造にアクセスして、前記ロード命令に関連付けられた前記値を取得することが、
前記予測定期的ロードＩＡの少なくとも一部によってインデックス付けされた前記第３のデータ構造内のエントリにアクセスすることと、
前記第３のデータ構造内の前記エントリから、前記ロード命令に関連付けられた前記値を決定することとを含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項８】
前記ロード命令が第１のロード命令であり、前記ロードＩＡが第１のロードＩＡであり、前記予測されたＩＡが第１の予測されたＩＡであり、前記方法が、
前記第２のロード命令に関連付けられた第２のロードＩＡに対応する第２の予測されたＩＡを決定することをさらに含んでおり、前記決定することが、
パターンと共に前記第２のロードＩＡをハッシュして、ハッシュ値を取得することと、
前記ハッシュ値を使用して、パターン・テーブルに対してインデックス付けし、前記パターン・テーブル内の一致するエントリを識別することと、
前記第２の予測されたＩＡを、前記パターン・テーブル内の前記一致するエントリから決定することとを含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項９】
前記第１のデータ構造が、ロードＩＡの第１のセットによってインデックス付けされ、前記第３のデータ構造が、格納ＩＡの第２のセットによってインデックス付けされる、請求項１に記載のコンピュータ実装方法。
【請求項１０】
ロード命令のメモリ・アクセスを回避するためのシステムであって、
コンピュータ実行可能命令を格納している少なくとも１つのメモリと、
前記少なくとも１つのメモリに動作可能なように結合された少なくとも１つのプロセッサであって、前記少なくとも１つのメモリにアクセスして前記コンピュータ実行可能命令を実行し、
少なくとも一部において、ロード命令に関連付けられた命令アドレス（ＩＡ）によってインデックス付けされた第１のデータ構造にアクセスすることによって、前記ロード命令に関連付けられたロードＩＡに対応する予測されたＩＡを決定することと、
前記予測されたＩＡの少なくとも一部を使用して、（ｉ）第２のデータ構造にアクセスして、前記ロード命令に関連付けられた値を格納している第１の物理レジスタを決定するか、または（ｉｉ）前記第２のデータ構造にアクセスする代わりに、第３のデータ構造にアクセスして、前記ロード命令に関連付けられた前記値を取得することと、
少なくとも一部において、第２の物理レジスタを前記ロード命令に関連付けられた前記値に設定することによって、前記ロード命令の一部として予測されたロードを実行することとを実行するように構成されている、前記少なくとも１つのプロセッサとを備えている、システム。
【請求項１１】
前記予測されたＩＡが、格納命令に関連付けられた予測格納ＩＡであり、前記少なくとも１つのプロセッサが、前記コンピュータ実行可能命令を実行して、
前記予測格納ＩＡの少なくとも一部によってインデックス付けされた前記第２のデータ構造内のエントリにアクセスすることと、
前記第２のデータ構造内の前記エントリから、前記予測格納ＩＡに関連付けられた前記第１の物理レジスタを決定することと、
前記ロード命令に関連付けられた前記値を前記第１の物理レジスタから取得することとを実行することによって、前記第２のデータ構造にアクセスするように構成されている、請求項１０に記載のシステム。
【請求項１２】
前記少なくとも１つのプロセッサが、前記コンピュータ実行可能命令を実行して、
前記予測されたＩＡに関連付けられた信頼値を決定することと、
前記信頼値がしきい値を満たすということを決定することとを実行するようにさらに構成されている、請求項１０に記載のシステム。
【請求項１３】
前記少なくとも１つのプロセッサが、前記コンピュータ実行可能命令を実行して、
前記ロードＩＡの少なくとも一部を使用して前記第１のデータ構造内のエントリにアクセスすることと、
前記第１のデータ構造内の前記エントリから前記予測されたＩＡを識別することとを実行することによって、前記ロード命令に関連付けられた前記ロードＩＡに対応する前記予測されたＩＡを決定するように構成されている、請求項１０に記載のシステム。
【請求項１４】
前記少なくとも１つのプロセッサが、前記コンピュータ実行可能命令を実行して、
前記予測されたＩＡに関連付けられた第１のオペランド・アドレスと、前記ロードＩＡに関連付けられた第２のオペランド・アドレスとの間の一致に少なくとも部分的に基づいて、前記予測されたＩＡと前記ロードＩＡとの間のデータ・ペアリングを識別することと、
前記データ・ペアリングに少なくとも部分的に基づいて、前記エントリを前記第１のデータ構造内に生成することとを実行するようにさらに構成されている、請求項１３に記載のシステム。
【請求項１５】
前記第１のデータ構造が分岐予測データ構造である、請求項１３に記載のシステム。
【請求項１６】
前記予測されたＩＡが予測定期的ロードＩＡであり、前記少なくとも１つのプロセッサが、前記コンピュータ実行可能命令を実行して、
前記予測定期的ロードＩＡの少なくとも一部によってインデックス付けされた前記第３のデータ構造内のエントリにアクセスすることと、
前記第３のデータ構造内の前記エントリから、前記ロード命令に関連付けられた前記値を決定することとを実行することによって、前記ロード命令に関連付けられた前記値を取得するために、前記第３のデータ構造にアクセスするように構成されている、請求項１０に記載のシステム。
【請求項１７】
前記ロード命令が第１のロード命令であり、前記ロードＩＡが第１のロードＩＡであり、前記予測されたＩＡが第１の予測されたＩＡであり、前記少なくとも１つのプロセッサが、前記コンピュータ実行可能命令を実行して、
前記第２のロード命令に関連付けられた第２のロードＩＡに対応する第２の予測されたＩＡを決定するようにさらに構成されており、前記決定することが、
パターンと共に前記第２のロードＩＡをハッシュして、ハッシュ値を取得することと、
前記ハッシュ値を使用して、パターン・テーブルに対してインデックス付けし、前記パターン・テーブル内の一致するエントリを識別することと、
前記第２の予測されたＩＡを、前記パターン・テーブル内の前記一致するエントリから決定することとを含んでいる、請求項１０に記載のシステム。
【請求項１８】
前記第１のデータ構造が、ロードＩＡの第１のセットによってインデックス付けされ、前記第３のデータ構造が、格納ＩＡの第２のセットによってインデックス付けされる、請求項１０に記載のシステム。
【請求項１９】
ロード命令のメモリ・アクセスを回避するためのコンピュータ・プログラムであって、前記プログラムが、コンピュータに、
少なくとも一部において、ロード命令に関連付けられた命令アドレス（ＩＡ）によってインデックス付けされた第１のデータ構造にアクセスすることによって、前記ロード命令に関連付けられたロードＩＡに対応する予測されたＩＡを決定することと、
前記予測されたＩＡの少なくとも一部を使用して、（ｉ）第２のデータ構造にアクセスして、前記ロード命令に関連付けられた値を格納している第１の物理レジスタを決定するか、または（ｉｉ）前記第２のデータ構造にアクセスする代わりに、第３のデータ構造にアクセスして、前記ロード命令に関連付けられた前記値を取得することと、
少なくとも一部において、第２の物理レジスタを前記ロード命令に関連付けられた前記値に設定することによって、前記ロード命令の一部として予測されたロードを実行することと、
を実行させる、コンピュータ・プログラム。
【請求項２０】
前記予測されたＩＡが、格納命令に関連付けられた予測格納ＩＡであり、前記第２のデータ構造にアクセスすることが、
前記予測格納ＩＡの少なくとも一部によってインデックス付けされた前記第２のデータ構造内のエントリにアクセスすることと、
前記第２のデータ構造内の前記エントリから、前記予測格納ＩＡに関連付けられた前記第１の物理レジスタを決定することと、
前記ロード命令に関連付けられた前記値を前記第１の物理レジスタから取得することとを含んでいる、請求項１９に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメモリ・アクセスに関し、特にメモリ・アクセスを回避する方法に関する。
【背景技術】
【０００２】
コンピュータ・プログラム命令を実行することは、データを物理レジスタに格納することを含んでいることがある。プログラムの実行中に、物理レジスタに格納されたデータは、メモリ位置に格納されることが必要になることがあり、メモリ位置に格納されたデータは、物理レジスタにロードされることが必要になることがある。マイクロアーキテクチャ設計（例えば、中央処理装置（ＣＰＵ：central processing unit）では、命令実行ユニットは、メモリに対してよりも、物理レジスタに近い位置に配置される。そのため、メモリ位置から物理レジスタへのデータのロードは（キャッシュ・メモリ位置からのロードでも）、通常、別の物理レジスタからデータをコピーする場合よりも長い時間がかかる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
従って、本発明が解決しようとする課題は、命令アドレス・マッピングを使用したロード命令のメモリ・アクセスの回避方法、システム、およびコンピュータ・プログラムを提供することである。
【課題を解決するための手段】
【０００４】
本開示の１つまたは複数の実施形態例では、ロード命令のメモリ・アクセスを回避するための方法が開示される。この方法は、少なくとも一部において、ロード命令に関連付けられた命令アドレス（ＩＡ：instruction address）のみによってインデックス付けされた第１のデータ構造にアクセスすることによって、ロード命令に関連付けられたロードＩＡに対応する予測されたＩＡを決定することと、予測されたＩＡの少なくとも一部を使用して、（ｉ）第２のデータ構造にアクセスして、ロード命令に関連付けられた値を格納している第１の物理レジスタを決定するか、または（ｉｉ）第２のデータ構造にアクセスする代わりに、第３のデータ構造にアクセスして、ロード命令に関連付けられた値を取得することとを含む。この方法は、少なくとも一部において、第２の物理レジスタをロード命令に関連付けられた値に設定することによって、予測されたロードを実行することをさらに含む。
【０００５】
本開示の１つまたは複数の他の実施形態例では、ロード命令のメモリ・アクセスを回避するためのシステムが開示される。このシステムは、コンピュータ実行可能命令を格納する少なくとも１つのメモリと、少なくとも１つのメモリにアクセスしてコンピュータ実行可能命令を実行し、動作のセットを実行するように構成された少なくとも１つのプロセッサとを含む。それらの動作は、少なくとも一部において、ロード命令に関連付けられた命令アドレス（ＩＡ）のみによってインデックス付けされた第１のデータ構造にアクセスすることによって、ロード命令に関連付けられたロードＩＡに対応する予測されたＩＡを決定することと、予測されたＩＡの少なくとも一部を使用して、（ｉ）第２のデータ構造にアクセスして、ロード命令に関連付けられた値を格納している第１の物理レジスタを決定するか、または（ｉｉ）第２のデータ構造にアクセスする代わりに、第３のデータ構造にアクセスして、ロード命令に関連付けられた値を取得することとを含む。それらの動作は、少なくとも一部において、第２の物理レジスタをロード命令に関連付けられた値に設定することによって、予測されたロードを実行することをさらに含む。
【０００６】
本開示の１つまたは複数の他の実施形態例では、処理回路によって読み取り可能な非一時的ストレージ媒体を含んでいる、ロード命令のメモリ・アクセスを回避するためのコンピュータ・プログラム製品が開示され、このストレージ媒体は、方法の実行を引き起こすために処理回路によって実行可能な命令を格納する。この方法は、少なくとも一部において、ロード命令に関連付けられた命令アドレス（ＩＡ）のみによってインデックス付けされた第１のデータ構造にアクセスすることによって、ロード命令に関連付けられたロードＩＡに対応する予測されたＩＡを決定することと、予測されたＩＡの少なくとも一部を使用して、（ｉ）第２のデータ構造にアクセスして、ロード命令に関連付けられた値を格納している第１の物理レジスタを決定するか、または（ｉｉ）第２のデータ構造にアクセスする代わりに、第３のデータ構造にアクセスして、ロード命令に関連付けられた値を取得することとを含む。この方法は、少なくとも一部において、第２の物理レジスタをロード命令に関連付けられた値に設定することによって、予測されたロードを実行することをさらに含む。
【０００７】
添付の図面を参照して、詳細な説明が示される。各図面は、単に例示の目的で提供されており、本開示の実施形態例を示しているにすぎない。各図面は、本開示の理解を容易にするために提供されており、本開示の広がり、範囲、または適用可能性を制限していると見なされてはならない。各図面において、参照番号の左端の数字は、その参照番号が最初に現れる図面を識別する。同じ参照番号の使用は、類似しているが、必ずしも同じでないか、または同一でないコンポーネントを示す。ただし、異なる参照番号が、類似するコンポーネントを識別するために使用されてもよい。さまざまな実施形態は、図面に示された要素またはコンポーネント以外の要素またはコンポーネントを使用してよく、一部の要素またはコンポーネントあるいはその両方は、さまざまな実施形態に存在しないことがある。コンポーネントまたは要素を表すための単数形の用語の使用は、文脈に応じて、複数のそのようなコンポーネントまたは要素を包含し、その逆もまた同様である。
【図面の簡単な説明】
【０００８】
【図１】本開示の１つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードの実行を概略的に示すブロック図である。
【図２】本開示の１つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するための例示的な方法を示すプロセス・フロー図である。
【図３】本開示の１つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するかどうかを決定するための例示的な方法を示すプロセス・フロー図である。
【図４】本開示の１つまたは複数の実施形態例を実装するように構成された例示的なコンピューティング・デバイスの概略図である。
【発明を実施するための形態】
【０００９】
本開示の実施形態例は、特に、ロード命令のメモリ・アクセスを回避する予測されたロードを実行するためのシステム、方法、コンピュータ可読媒体、技術、および手法を含む。特定の実施形態例では、ロード命令によってロードされる値を格納しているとして予測された第１の物理レジスタが識別され、第１の物理レジスタに格納された値が、コンシューマ（consumer）の動作によって使用するために、第２の物理レジスタにコピーされる。ロード命令に対応する予測格納命令（predicted store instruction）が識別されてよく、予測格納命令に関連付けられたデータを取得するために、マッピング・テーブルがアクセスされてよい。データは、第１の物理レジスタの識別、および第１の物理レジスタに格納される値を生成／変更したプロデューサ（producer）の動作の識別（例えば、命令識別子）を含んでよい。予測されたロードの実行の結果として、望ましいデータがプロデューサの動作から取得され、その他の方法ではロード命令を実行し、メモリ位置から物理レジスタへデータをコピーする必要があるキャッシュ・メモリ・アクセスが回避され得る。
【００１０】
図１は、本開示の１つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードの実行を概略的に示すブロック図である。図２は、本開示の１つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するための例示的な方法２００を示すプロセス・フロー図である。図３は、本開示の１つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するかどうかを決定するための例示的な方法３００を示すプロセス・フロー図である。以下では、図１と併せて、図２および３がそれぞれ説明される。
【００１１】
方法２００または方法３００あるいはその両方の各動作は、図１に示された１つまたは複数のコンポーネント（例えば、エンジン）によって実行されてよい。これらのコンポーネントは、ハードウェア、ソフトウェア、またはファームウェア、あるいはその組み合わせの任意の組み合わせで実装されてよい。特定の実施形態例では、これらのコンポーネントのうちの１つまたは複数は、少なくとも一部において、コンピュータ実行可能命令を含んでいる１つまたは複数のプログラム・モジュールを含んでいるか、またはそのようなプログラム・モジュールの集合である、ソフトウェアまたはファームウェアあるいはその両方として実装されてよく、これらのコンピュータ実行可能命令は、処理回路によって実行された場合に、１つまたは複数の動作の実行を引き起こす。本開示の実施形態例を実装するように構成されているとして本明細書において説明されたシステムまたはデバイスは、１つまたは複数の処理回路を含んでよく、それらの処理回路のそれぞれは、１つまたは複数の処理ユニットまたはノードを含んでよい。コンピュータ実行可能命令は、コンピュータ実行可能プログラム・コードを含んでよく、このコンピュータ実行可能プログラム・コードは、処理ユニットによって実行された場合に、コンピュータ実行可能プログラム・コードに含まれているか、またはコンピュータ実行可能プログラム・コードによって参照されている入力データが、アクセスおよび処理されて、出力データを生成することを引き起こしてよい。
【００１２】
まず図１を参照すると、予測エンジン１０２、レジスタ追跡エンジン１０４、読み取り／書き込みエンジン１０６、および命令実行エンジン１０８を含むエンジンの集合が示されている。これらのエンジンは、ハードウェア、ソフトウェア、またはファームウェア、あるいはその組み合わせの任意の組み合わせで実装されてよい。特定の実施形態例では、これらのエンジンは、図４に示された例示的な構成を含んでいる１つまたは複数のデバイスにわたって実行されてよい。
【００１３】
ここで、図１および２を互いに併せて参照すると、ブロック２０２で、命令実行エンジン１０８のコンピュータ実行可能命令が実行されて、プロデューサの動作の実行を引き起こしてよく、このプロデューサの動作は、マイクロアーキテクチャにおいて定義されている設計されたレジスタ１２８のセットのうちの特定の設計されたレジスタに関連付けられた値を生成／変更する。説明を簡単にするために、以下では、参照番号１２８が、上で参照された特定の設計されたレジスタを指定するために使用されてよい。特定の実施形態例では、設計されたレジスタのセットが、マイクロアーキテクチャ設計の一部として指定されてよい。設計されたレジスタのセットは、マイクロアーキテクチャ内の物理レジスタのセットにマッピングされてよい。特定の実施形態例では、物理レジスタの数は、設計されたレジスタの数以上であってよい。そのため、設計されたレジスタ１２８は、異なる命令に関して異なる物理レジスタにマッピングされてよく、または複数の物理レジスタに同時にマッピングされてよく、あるいはその両方が行われてよい。より詳細には、設計されたレジスタ１２８に関連付けられた値が、異なる命令に関して異なる物理レジスタに格納されてよく、または複数の物理レジスタに同時に格納されてよく、あるいはその両方が行われてよい。
【００１４】
非限定的な例として、プロデューサの動作は、２つのレジスタ内の値を合計すること、および得られた合計をレジスタのうちの１つに格納することであってよい。例えば、Ｒ１が設計されたレジスタ１２８を表す場合、プロデューサの動作はＲ１＝Ｒ１＋Ｒ２であってよく、Ｒ２は異なる設計されたレジスタである。前述したように、設計されたレジスタ１２８（例えば、Ｒ１）は、例えば、最初に物理レジスタ２０（ｐＲ２０）にマッピングされてよい。同様に、設計されたレジスタＲ２が物理レジスタ２２（ｐＲ２２）にマッピングされてよい。プロデューサの動作の結果として、ｐＲ２０およびｐＲ２２に格納された値が合計されてよく、得られた合計が物理レジスタ２１（ｐＲ２１）に格納されてよい。物理レジスタｐＲ２１が設計されたレジスタ１２８（Ｒ１）にマッピングされてよく、それによって、この合計を設計されたレジスタ１２８（Ｒ１）に関連付ける。
【００１５】
特定の実施形態例では、レジスタ追跡エンジン１０４のコンピュータ実行可能命令が実行されて、設計されたレジスタと物理レジスタの間のマッピングを維持／変更してよい。順序通りに動作するマシンでは、設計されたレジスタの数は、物理レジスタの数に等しくてよい。これは、順序通りに動作するマシンでは、命令が発行された順序で実行されるため、設計されたレジスタより多くの物理レジスタを維持する必要がないからである。しかし、順序通りに動作しないマシンでは、より新しい／より若い命令が、より古い命令の前に実行されることがあるため、設計されたレジスタより多くの数の物理レジスタを維持する必要がある。
【００１６】
物理レジスタの数が設計されたレジスタの数を超える実施形態例では、設計されたレジスタと物理レジスタの間のマッピングが維持されてよい。設計されたレジスタと物理レジスタの間のこのマッピングは、レジスタ追跡エンジン１０４によって維持／更新されるレジスタ・マッピング・テーブル１３８に格納されたデータに反映されてよい。レジスタ・マッピング・テーブル１３８は、設計されたレジスタによってインデックス付けされてよく、インデックス付きの設計されたレジスタごとに、その設計されたレジスタに関連付けられた値を格納する物理レジスタの識別を格納してよい。命令を順序通りに動作しないエンジンに送信するための順序通りのデコード／ディスパッチに関しては、設計されたレジスタへの最も古い参照のみが必要である。しかし、パイプラインを前の状態に復元する必要がある、命令パイプラインのフラッシュ時に、設計されたレジスタだけでは不十分であることがある。さらに、そのような状況では、どの命令がフラッシュが発生した時点に対応するかに関する情報も、必要になることがある。これは、マイクロｏｐ命令ＩＤを使用して実現することができる。
【００１７】
ここでさらに具体的に、方法２００のブロック２０２を参照すると、実行されたプロデューサの動作が、結果として値が生成され、設計されたレジスタ１２８にマッピングされた物理レジスタ１３０に格納されることを引き起こしてよい。代替として、プロデューサの動作は、結果として物理レジスタ１３０に格納された既存の値の変更を引き起こしてよい。プロデューサの動作によって生成／変更された値を格納する物理レジスタ１３０の識別は、対応する設計されたレジスタ１２８に関連して、レジスタ・マッピング・テーブル１３８に格納されてよい。すなわち、レジスタ・マッピング・テーブル１３８が、プロデューサの動作に応じて書き込まれてよい。
【００１８】
一般的に言えば、レジスタ・マッピング・テーブル１３８は、どの時点においても、１つの物理レジスタのみを設計されたレジスタに関連付けてよい。しかし、命令パイプラインのフラッシュを実行する潜在的な必要性に対応するために、レジスタ・マッピング・テーブル１３８は、設計されたレジスタと複数の物理レジスタの間の関連付けを格納してよい。例えば、命令のセット（例えば、命令１〜１００）がディスパッチされたと仮定する。それらの命令の一部のサブセットが発行されていてよい。発行された命令のうちのより古い命令がまだ実行の途中であってよく、その間に、より新しい命令が実行を終了していてよい。例えば、より古い命令は、複雑な平方根の計算などであってよく、一方、より新しい命令は、相対的に単純なロード命令であってよい。より新しい命令は、より古い命令に先立って実行を終了してよいが、より新しい命令は、命令が順序通り実行されているように見えるのを維持するために、より古い命令が実行を完了するまで、完了してチェックポイントを実行することができないということに、注意するべきである。
【００１９】
１つの例示的な状況では、予測された分岐が、例えば命令１５で選択されていてよい。分岐が正しく予測されなかった（例えば、分岐が選択されるべきでなかったときに、分岐が選択されたか、または分岐が選択されるべきだったときに、分岐が選択されなかった）ということが後で決定された場合、分岐命令後のパイプライン内のすべての命令（例えば、命令１６〜１００）が不正になる。これがフラッシュ・イベントをトリガーし、これに従って、分岐命令後のパイプライン内のすべての命令がフラッシュされ、分岐命令の正しいターゲット・アドレスから始まるパイプラインが復元される。
【００２０】
特定の実施形態例では、前述した分岐命令は、同じ設計されたレジスタを含んでいる２つの命令間で発生してよい。例えば、分岐命令に先立つ命令は、設計されたレジスタＲ７に関連付けられた値を設計されたレジスタＲ１に割り当てることであってよく、分岐命令の後の命令は、設計されたレジスタＲ２に関連付けられた値をＲ１に割り当てることであってよい。これらの設計されたレジスタに関連付けられた値が異なる物理レジスタに格納されてよいということが、理解されるべきである。前述したように、分岐が正しく予測されない場合、設計されたレジスタＲ１に関連付けられた値を、（設計されたレジスタＲ２に関連付けられた値ではなく）設計されたレジスタＲ７に関連付けられた値に復元する必要がある。設計されたレジスタＲ１の値を適切に復元するには、レジスタ・マッピング・テーブル１３８が、物理レジスタと設計されたレジスタの間のマッピングの履歴を維持する必要がある。具体的には、上で導入された例では、フラッシュ・イベントが発生したときに、設計されたレジスタＲ１に関連付けられた前の値を復元できるように、レジスタ・マッピング・テーブル１３８は、設計されたレジスタＲ１と設計されたレジスタＲ７に対応する物理レジスタとの間のマッピング、および設計されたレジスタＲ１と設計されたレジスタＲ２に対応する物理レジスタとの間のマッピングを格納してよい。加えて、命令パイプライン内のどこでフラッシュが発生したかに基づいて、復元するべき値を識別するために、各命令識別子が、各マッピングに関連して格納されてよい。上の例が例示にすぎず、網羅的でないということが、理解されるべきである。例えば、レジスタ・マッピング・テーブル１３８は、所与の設計されたレジスタと物理レジスタの間の任意の数のマッピングを格納してよい。
【００２１】
ブロック２０４で、物理レジスタに格納されたレジスタ値をメモリに格納することを必要とするイベントが発生してよい。そのようなイベントの例は、物理レジスタに格納されたレジスタ値をメモリにコピーすることを必要とする関数の実行であってよい。例えば、マイクロアーキテクチャでは１６個の設計されたレジスタが定義されているが、アルゴリズムが１７個の値を必要とする場合、すべての値を同時に１６個の設計されたレジスタに関連付けることができない。したがって、アルゴリズムの実行中に、１つまたは複数の設計されたレジスタを解放するために、少なくとも１つのレジスタ値がメモリにあふれることがある。他の実施形態例では、関数の実行の前に、その関数によって必要とされるレジスタの数が不明であるか、または関数を実行することによってレジスタ値が破損する危険が存在することがあり、その場合、レジスタ値がメモリにあふれることがある。
【００２２】
ブロック２０６で、命令実行エンジン１０８のコンピュータ実行可能命令が実行されて、格納命令を実行し、設計されたレジスタ１２８に関連付けられた値をメモリ内の位置に格納してよい。このメモリ内の位置は、例えば、Ｌ１キャッシュまたはＬ２キャッシュなどの、キャッシュ・メモリ内の位置であってよい。前に導入された同じ例を参照すると、格納命令の実行が、ｐＲ２１（設計されたレジスタ１２８にマッピングされた物理レジスタ１３０）に格納された値をメモリ位置に格納することを引き起こしてよい。
【００２３】
特定の実施形態例では、実行された格納命令に対応するエントリが、予測転送マッピング・テーブル（prediction forwarding mapping table）１２２（以下では、省略して、マッピング・テーブル１２２と呼ぶ）内に生成されてよい。より詳細には、読み取り／書き込みエンジン１０６のコンピュータ実行可能命令が実行されて、書き込み動作１２６を実行し、エントリをマッピング・テーブル１２２内に生成してよい。特定の実施形態例では、マッピング・テーブル１２２は、複数の読み取りポートおよび書き込みポートを備えるｒｅｇファイルとして実装されてよい。ｒｅｇファイルは、任意の適切な数（例えば、３２、６４など）のエントリを収容するように構成されてよい。特定の数のビットが、エントリごとに割り当てられてよい。例えば、ブロック２０６で実行される格納命令に対応するエントリは、仮想命令アドレス（ＩＡ）タグを格納するために指定された特定の数のビット（例えば、１０ビット）を含んでよい。マッピング・テーブル１２２は、格納ＩＡの少なくとも一部によってインデックス付けされてよい。
【００２４】
仮想ＩＡタグは、格納命令に関連付けられた完全なＩＡ１２４の一部であってよい。仮想ＩＡタグの格納に使用されるビットの数は、タグで少ない数のビットを使用することから生じるエイリアシング（aliasing）と、タグで少ない数のビットが使用された結果としての、マッピング・テーブル１２２に格納できるエントリの数の増加との間のトレードオフを反映することがある。タグに使用されるビットの数は、少なくとも一部において、マッピング・テーブル１２２に使用できるストレージの量、電力制約、周波数制約、またはコスト制約、あるいはその組み合わせによって決定されてもよい。格納命令に対応するエントリは、格納命令の命令識別子（例えば、マイクロｏｐ  ＩＤ）を格納するための特定の数のビット（例えば、８ビット）と、格納命令に対応するプロデューサの動作の命令識別子を格納するための特定の数のビット（例えば、８ビット）と、プロデューサの動作によって生成／変更された値を格納した（現在格納していると予測されることもある）物理レジスタの識別を格納するための特定の数のビット（例えば、８ビット）とをさらに含んでよく、そのような値が、格納命令の実行を介してメモリ位置にコピーされる。エントリごと、および各エントリ内のデータ・フィールドごとに割り当てられるビットの数を含むマッピング・テーブル１２２の特定の実装は、例示にすぎず、網羅的でないということが、理解されるべきである。
【００２５】
ブロック２０８で、レジスタ値がメモリから物理レジスタに転送されてよい。一例として、関数呼び出しからの復帰の発生時に、ブロック２０４でメモリにコピーされたレジスタ値が、物理レジスタに復元されてよい。しかし、特定の実施形態例では、予測されたロードを実行することによって、値をメモリ位置から物理的位置にロードするロード命令が回避されてよい。
【００２６】
具体的には、ブロック２１０で、予測エンジン１０２のコンピュータ実行可能命令が実行され、ブロック２０６で実行された格納命令が、実行されるロード命令と相互関係があるということを予測することと、格納命令のＩＡを使用して、設計されたレジスタ１２８に関連付けられた値を格納している物理レジスタを識別することとを、実行してよい。さらに具体的には、予測エンジン１０２は、ロード命令（または、本開示において後でさらに詳細に説明される定期的ロード処理（constant load handling）の場合は、相互関係があるロードＩＡ）と相互関係があると予測された格納命令に関連付けられた格納ＩＡ１１８を、予測配列１１４から識別してよい。特定の実施形態例では、格納命令は、複数のマイクロｏｐ格納を包含してよい。そのような実施形態例では、予測配列１１４から取得されたロード予測は、格納ＩＡ１１８だけでなく、格納命令のｕｏｐ位置（uop position）も指定する。格納命令が単一のマイクロｏｐである実施形態例では、０のデフォルト値が使用されてよい。その後、予測エンジン１０２は、相互関係があるＩＡ（格納ＩＡ１１８、または定期的ロードの場合はロードＩＡ）を使用して、マッピング・テーブル１２２にアクセスし、相互関係がある命令に関連付けられた値（例えば、設計されたレジスタ１２８に関連付けられた値）を格納している物理レジスタを識別してよい。
【００２７】
例えば、前に導入された例を再び参照すると、識別された物理レジスタの行き先は、設計されたレジスタ１２８にマッピングされたｐＲ２１であってよく、予測格納命令に対応するプロデューサの動作の実行結果として、設計されたレジスタ１２８に値が格納されている。このプロセスは、図３の例示的な方法を参照して、本開示において後でさらに詳細に説明される。マッピング・テーブル１２２が予測エンジン１０２の外部にあるように示されているが、特定の実施形態例では、マッピング・テーブル１２２が予測エンジン１０２に含まれてよいということが、理解されるべきである。
【００２８】
ブロック２１２で、命令実行エンジン１０８のコンピュータ実行可能命令が実行されて、ブロック２１０で識別された物理レジスタ内の値を、設計されたレジスタ１２８に現在マッピングされている別の物理レジスタに設定することによって、予測されたロードを実行してよい。前に導入された例を再び参照すると、ｐＲ２１に格納された値が物理レジスタ３０（ｐＲ３０）にコピーされてよく、ｐＲ３０は、設計されたレジスタ１２８に現在マッピングされている。特定の実施形態例では、予測されたロードが実行される前に、さまざまな制約を満たすことが必要になることがある。例えば、予測されたロードを続行するために、予測格納命令とロード命令の間の相互関係に関連付けられた信頼値がしきい値を満たしていることが必要になることがある。加えて、命令間のさまざまな依存制約を満たすことが必要になることがある。それらの制約は、図３の例示的な方法３００を参照して、本開示において後でさらに詳細に説明される。
【００２９】
特定の実施形態例では、コンシューマの動作が正しい値に対して動作することが保証されるように、検証ロードが実行されて、予測されたロードが、設計されたレジスタ１２８に現在マッピングされている物理レジスタに正しい値が格納されるという結果をもたらしたことを検証してよい。具体的には、ブロック２１４で、命令実行エンジン１０８のコンピュータ実行可能命令が実行されて、設計されたレジスタ１２８に関連付けられた値をメモリから取り出すことによって、検証ロードを開始してよい。前述したように、この値は、格納命令の実行結果としてメモリ位置に格納されていてよい。前に導入された例を再び参照すると、格納命令によって特定のメモリ位置［ｘ］に格納されたｐＲ２１内の値が、メモリ位置［ｘ］から取り出されてよい。
【００３０】
ブロック２１６で、取り出された値が、ブロック２１０で識別された物理レジスタに格納されている値と比較されてよい。それらの値が異なっている場合、それは、予測されたロードが、設計されたレジスタ１２８に現在マッピングされている物理レジスタに誤った値が格納されるという結果をもたらしたことを、示していることがある。そのため、ブロック２１８で、ロード命令およびロード命令より若い命令パイプライン内のすべての命令が、パイプラインからフラッシュされてよい。パイプラインは、具体的には、ロード命令より若い命令が、すでに実行されていることがあり、予測格納命令に関連付けられた物理レジスタに格納されていた不正な値に依存していた可能性がある、順序通りに動作しないマシンの場合に、このようにしてフラッシュされてよい。パイプラインのフラッシュの後に、ブロック２２０で、予測されたロードを実行するのではなく、設計されたレジスタ１２８に関連付けられた値をメモリから取り出すことによって、ロード命令が実行されてよい。予測されたロードが再実行されないことを保証するために、アルゴリズムの実装は、パイプラインのフラッシュが発生した直後に、予測されたロードの実行を防いでよい。
【００３１】
図３の例示的な方法３００を参照してさらに詳細に説明されるであろうように、特定の実施形態例では、検証ロードの結果が、予測格納命令とロード命令の間の相互関係に関連付けられた信頼値を更新するために使用されてよい。例えば、メモリ位置から取り出された値が、予測格納命令に関連付けられた物理レジスタに格納されている値に等しい場合（ブロック２１６での肯定的な決定）、信頼値が増やされてよい。反対に、それらの値が異なっている場合（否定的な決定）、信頼値が減らされてよい。さらに、特定の実施形態例では、予測されたロードのみが実行されてよく、データの正しさを確認するその他の手段に従って、検証ロードが実行されなくてよい。
【００３２】
さらに具体的には、検証ロードを実行する代わりに、メモリに格納された値がどのように変化しているかを反映するように、マッピング・テーブル１２２が代わりに更新され得る。具体的には、物理レジスタ値に対応するメモリ内の内容が、その値をメモリに格納したプロセッサ・コアまたは別のプロセッサ・コアによって変更されている場合に、予測されたロードが実行されないことを保証するためのメカニズムが提供されてよい。そのようなメカニズムは、特定のメモリ位置またはメモリ位置の範囲に格納するための排他的権限を取得する能力を、プロセッサ・コアに提供することを含んでよい。
【００３３】
例えば、マルチスレッド・プログラムが、２つのプロセッサ・コア（コアＡおよびコアＢ）上で実行されていると仮定する。さらに、コアＡが、メモリ位置ｘに書き込むための排他的権限を持っているが、コアＢが、同じメモリ位置に書き込む能力を必要としていると仮定する。さらに、格納命令およびロード命令がコアＡ上で実行され（以下では、格納命令Ａおよびロード命令Ａと呼ばれる）、格納命令およびロード命令がコアＢ上で実行される（以下では、格納命令Ｂおよびロード命令Ｂと呼ばれる）と仮定する。コアＡが、格納命令Ａを実行して、第１の値をメモリ位置ｘに格納してよい。次にコアＢが、格納命令Ｂを実行してよく、その結果、第２の異なる値がメモリ位置ｘに格納される。その場合、ロード命令Ａの代わりに予測されたロードが実行されると、正しく望ましい値（すなわち、メモリ位置ｘに格納された第２の値）ではなく、第１の値が物理レジスタから取り出されたであろう。
【００３４】
そのため、プロセッサ・コア（例えば、コアＡ）が、特定のメモリ位置またはメモリ位置の範囲に書き込むための排他的権限を持たなくなった場合、プロセッサ・コアによって実行される格納命令（例えば、格納命令Ａ）に対応するマッピング・テーブル１２２内のエントリが、そのエントリが無効化されたことを示すように更新されてよい。さらに具体的には、マッピング・テーブル１２２内のエントリで識別された物理レジスタに格納された値が有効でなくなったことを示すように、ビットが設定されるか、または反転されてよい。したがって、上で導入された例を参照すると、相互関係がある格納命令のＩＡ（例えば、格納命令ＡのＩＡ）が、マッピング・テーブル１２２内のエントリにアクセスするために使用された場合、そのエントリが無効化されるため、ロード命令Ａに関して予測されたロードは実行されないであろう。
【００３５】
図２の例示的な方法２００では、予測されたロードが実行されると仮定している。しかし、前述したように、予測されたロードを実行できるかどうかを決定するために、さまざまな制約を評価することが必要になることがある。図３は、本開示の１つまたは複数の実施形態例に従って、ロード命令のメモリ・アクセスを回避するための予測されたロードを実行するかどうかを決定するための例示的な方法３００を示すプロセス・フロー図である。
【００３６】
図１および３を互いに併せて参照すると、ブロック３０２で、ロード命令および格納命令に関連付けられたオペランド・アドレス１１０を使用して、ロード命令と格納命令の間のデータ・ペアリングが決定されてよい。命令アドレスが、プログラム命令が格納されているメモリ内の位置を示すメモリ・アドレスであるのに対して、オペランド・アドレスは、プログラム命令によって操作されるデータが格納されているメモリ内の位置を示すメモリ・アドレスである。特定の実施形態例では、プログラム命令およびプログラム命令によって使用されるデータは、同じキャッシュ（例えば、共有キャッシュ）または異なるキャッシュ（例えば、命令キャッシュおよびデータ・キャッシュ）に格納されてよい。
【００３７】
さらに具体的には、ブロック３０２で、データ・ペアリング・テーブル１１２がアクセスされてよい。データ・ペアリング・テーブル１１２は、プログラム命令（例えば、格納命令、ロード命令など）に関連付けられたデータのオペランド・アドレスの少なくとも一部によってインデックス付けされてよい。格納命令が実行されるときに、データ・ペアリング・テーブル１１２が書き込まれてよい。具体的には、オペランド・アドレス・タグに関連して格納命令に関連付けられたオペランド・アドレスの少なくとも一部（例えば、格納命令に関連付けられたオペランド・アドレスの他の部分）および格納命令の格納ＩＡを格納するエントリが、データ・ペアリング・テーブル１１２内に生成されてよい。
【００３８】
例えば、ビット０が最上位ビットであり、ビット６３が最下位ビットである６４ビットのオペランド・アドレスを仮定すると、ビット５４〜６３がインデックスとして使用されてよい。その場合、理論上は、ビット０〜５３がオペランド・アドレス・タグとして格納され得る。しかし、データ・ペアリング・テーブル１１２が、関数の配列ではなく実行の配列であるため、許容できるエイリアシングの量とデータ・ペアリング・テーブル１１２によって収容できるエントリの望ましい数との間のバランスを取るために、より少ない数のビット（例えば、ビット３２〜５３）をオペランド・アドレス・タグに使用できる。すなわち、より多くの数のビットがオペランド・アドレス・タグに使用された場合、発生するエイリアシングが少なくなるが、テーブルの合計最大領域／ビット予算を前提として、データ・ペアリング・テーブル１１２が収容するエントリの数も少なくなる。データ・ペアリング・テーブル１１２内の２つのエントリが同じオペランド・アドレス・インデックス（operand address index）および同じオペランド・アドレス・タグを含んでいるが、異なる格納命令に対応している場合に、エイリアシングが発生することがあり、その場合、誤った格納命令がロード命令とペアにされることがある。エイリアシングに起因して不正な値が物理レジスタにロードされることをもたらす予測されたロードは、検証ロードまたは前述した他の例示的なメカニズムのいずれかを実行することによって、対処されてよい。
【００３９】
さらにブロック３０２を参照すると、ロード命令に関連付けられたオペランド・アドレスの一部を使用して、データ・ペアリング・テーブル１１２が読み取られてよい。具体的には、ロード命令に関連付けられたオペランド・アドレスの一部が、一致するオペランド・アドレス・インデックスを含んでいるエントリの位置をデータ・ペアリング・テーブル１１２内で特定するために使用されてよい。その後、ロード命令に関連付けられたオペランド・アドレス・タグが、一致するエントリに格納されたオペランド・アドレス・タグと比較されてよい。それらのオペランド・アドレス・タグが一致する場合、ロード命令と格納命令の間の潜在的なデータ・ペアリング１１２が識別されてよい。
【００４０】
特定の実施形態例では、データ・ペアリング・テーブル１１２が、格納命令ごとに書き込まれてよい。すなわち、エントリは、格納命令ごとにデータ・ペアリング・テーブル１１２内に生成されてよく、エントリは、オペランド・アドレスの少なくとも一部によってインデックス付けされ、格納命令によってデータがメモリに格納され、エントリは、格納命令のＩＡを含む。しかし、特定の実施形態例では、データが、電源切断学習モード（power-off learning mode）でデータ・ペアリング・テーブル１１２に書き込まれてよく、これに従って、データが格納命令ごとに書き込まれなくてよい。
【００４１】
例えば、分岐を予測したコードの領域内で繰り返されるコード（例えば、ループ）を含んでいる状況では、格納命令がループ内で繰り返し発生することがある。そのため、エントリがすでに作成されている可能性が高く、格納命令が予測配列１１４内のロード命令とすでにペアにされている可能性が高く、したがって、追加のエントリをデータ・ペアリング・テーブル１１２内に生成することによって追加の学習が達成されない可能性が高いため、格納命令が発生するたびに、格納命令に関するエントリをデータ・ペアリング・テーブル１１２内に生成することが必要でないことがある。しかし、特定の実施形態例では、それでもなお、分岐を予測したコードの領域内にループが存在する状況において、限定的に、学習のための内容が捕捉されてよい。例えば、１０回の格納命令ごとに１回の格納命令に関して、エントリがデータ・ペアリング・テーブル１１２内に生成されてよい。電源切断学習に関する上の説明は、定期的ロードにも同様に適用される。
【００４２】
ブロック３０４で、格納命令とロード命令の間のデータ・ペアリングが、予測配列１１４内のエントリとして格納されてよい。このデータ・ペアリングは、ペアリングに関連付けられた信頼度を反映する信頼値に関連して格納されてよい。さらに具体的には、この信頼値は、ロード命令の実行が、ロード命令とペアにされた格納命令の実行結果としてメモリ位置に格納された、メモリ位置からの同じ値の取り出しをもたらすということの信頼度を示してよい。
【００４３】
特定の実施形態例では、分岐ターゲット・バッファ（ＢＴＢ：branch target buffer）テーブルなどの既存の分岐予測構造が、その他の方法では予測配列１１４に格納されるデータを格納するために使用されてよい。ＢＴＢテーブルは、分岐命令のＩＡによってインデックス付けされてよく、例えば、分岐ＩＡに関連してターゲットＩＡを格納してよい。ターゲットＩＡは、分岐が選択された場合に実行されるターゲット命令のＩＡである。特定の実施形態例では、各分岐ＩＡおよびターゲットＩＡのペアリングは、ＢＴＢテーブル内の個別のエントリとして格納されてよい。他の実施形態では、ＢＴＢテーブルは、複数の連想エントリを含んでよく、それによって、複数の分岐がコードの特定のブロック（例えば、コードの６４バイトのブロック）内で追跡され得る。
【００４４】
複数の分岐がコードの所与のブロックに関して追跡され得る実施形態例では、コードのそのブロックに存在している各分岐命令のＩＡの一部が、そのようなすべての分岐命令にわたって共有されてよい。６４ビットを使用してＩＡが表されるマイクロアーキテクチャの場合、例えば、共有されるタグは、最上位ビットの最初のいくつかの部分（例えば、ビット０〜Ｘ）であってよい。共有されるタグは、コードのブロック内の分岐命令ごとに一度だけＢＴＢテーブルに格納されてよく、分岐命令、および分岐命令を互いに区別するためのタグ（例えば、インデックスを（Ｘ＋１）〜Ｙと仮定して、コードのブロック内のオフセットを示すための最下位ビット（Ｙ＋１）〜６３）ごとに、ターゲットＩＡに関連して格納されてよい。このタグの共有によって、固定された合計ビット数につき、格納ＩＡおよびロードＩＡを格納するためのストレージが、ＢＴＢテーブル内でさらに多く利用できるようになる。例えば、ＢＴＢテーブルがコードの所与のブロック内の最大３つの分岐命令を追跡することができ、コードのそのブロック内にたまたま３つ未満の分岐命令が存在する場合、分岐命令間でのタグの共有（タグのビットを共有することになる分岐の数を定義する）によって、分岐ＩＡ／ターゲットＩＡの関連付けを格納するために使用されていないＢＴＢテーブル内の追加エントリを、ロードＩＡ／格納ＩＡの関連付けを格納するために使用できるようになる。具体的には、ロードＩＡが分岐ＩＡの代わりに格納されてよく、格納ＩＡがターゲットＩＡの代わりに格納されてよい。このようにして、分岐命令とターゲット命令のペアリング、およびロード命令と格納命令のペアリングの両方を格納するマージされたＢＴＢテーブルが維持されてよく、それによって、別々の予測配列１１４を維持する必要性を取り除く。
【００４５】
ブロック３０６で、ＩＡ１１６が識別されてよい。ＩＡ１１６は、予測エンジン１０２への入力として提供されてよい。ブロック３０８で、予測エンジン１０２のコンピュータ実行可能命令が実行されて、ＩＡ１１６を使用して予測配列１１４にアクセスし、ＩＡ１１６に対応する予測格納ＩＡ１１８を決定してよい。具体的には、命令アドレスの少なくとも一部を使用して、予測配列１１４がインデックス付けされてよい。そのため、ＩＡ１１６の少なくとも一部が、予測配列１１４が、ＩＡ１１６と格納命令に関連付けられたＩＡとの間のデータ・ペアリングを含んでいるかどうかを決定するために使用されてよい。そのようなデータ・ペアリングが存在する場合、格納命令は、ＩＡ１１６を含んでいる命令に対応する予測格納命令として扱われてよい。
【００４６】
特定の実施形態例では、ＩＡ１１６を使用して予測配列１１４にアクセスする前に、ＩＡ１１６を含んでいる命令が最初にデコードされて、この命令がロード命令であるということを決定する。命令がデコードされ、ロード命令であるということが決定された場合にのみ、予測配列１１４にアクセスすることによって、省電力を実現できる。しかし、それを行うと、命令がデコードされて、ロード命令であるということが決定された場合にのみ、予測配列１１４へのアクセスが発生できるため、プログラム実行速度も低下する可能性がある。他の実施形態例では、最初に命令をデコードして、この命令がロード命令であるということを決定することが必要とされなくてよく、代わりに、フェッチされた命令ごとに予測配列１１４がアクセスされてよい。しかし、そのような実施形態例では、予測されたロードは、予測配列１１４にアクセスするために使用されるＩＡ１１６を含んでいる命令が、デコードされたときに最終的にロード命令であると決定された場合にのみ、実行される。
【００４７】
命令をデコードする前に予測配列１１４がアクセスされる実施形態例では、予測配列１１４は、命令フェッチと少なくとも部分的に同時にアクセスされてよく（同期モード）、または代替として、命令フェッチに先立って予測エンジン１０２が実行されている場合、予測配列１１４は、ＢＴＢテーブルのアクセスと少なくとも部分的に同時にアクセスされてよい（通常これは、命令フェッチの前に発生する）。例えば、Ｌ１キャッシュにキャッシュ・ミスが存在し、Ｌ２キャッシュにアクセスして命令をフェッチしなければならない場合、命令フェッチは、予測エンジン１０２に追い付かないことがある。別の例では、命令フェッチが順序通りに発生する必要があるが、予測配列１１４が順序通りにアクセスされない可能性がある場合、命令フェッチは、予測エンジン１０２に追い付かないことがある。
【００４８】
特定の実施形態例では、予測格納命令に関連付けられた命令識別子（例えば、マイクロｏｐ  ＩＤ）が、予測格納命令のＩＡに加えて、予測配列１１４から取り出されてよい。さらに具体的には、命令が複数のマイクロｏｐ  ＩＤに分割されてよい。例えば、格納命令は、事実上、それ自身のマイクロｏｐ  ＩＤをそれぞれ持っている複数の格納を包含してよい。マイクロｏｐ  ＩＤを使用して、複数の格納命令のうちの格納命令を互いに区別することができ、さらに、マイクロｏｐ  ＩＤを使用して、複数の格納命令内のうち、ロード命令と相互関係がある特定の格納命令を識別することができる。
【００４９】
ブロック３１０で、読み取り／書き込みエンジン１０６のコンピュータ実行可能命令が実行され、予測格納命令１１８に関連付けられた予測格納ＩＡまたは命令識別子あるいはその両方を使用してマッピング・テーブル１２２にアクセスし、読み取り動作１２０を実行して、マッピング・テーブル１２２内の対応している一致するエントリを取り出してよい。予測格納命令に対応する、マッピング・テーブル１２２に格納された一致するエントリは、前述したデータの例示的なタイプのいずれかを含んでよい。具体的には、マッピング・テーブル１２２内の一致するエントリは、予測格納命令に関連付けられた仮想ＩＡタグ（例えば、予測格納命令ＩＡ１１８の少なくとも一部）と、予測格納命令の命令識別子（例えば、マイクロｏｐ  ＩＤ）と、予測格納命令に対応するプロデューサの動作の命令識別子と、プロデューサの動作によって生成／変更された値を格納した（現在格納していると予測された）物理レジスタの識別とを含んでよく、そのような値は、予測格納命令の実行を介してメモリ位置にコピーされる。物理レジスタに格納された実際の値が予測配列１１４に格納されず、レジスタ・ファイルに格納されてよいということが理解されるべきである。
【００５０】
ブロック３１２で、予測エンジン１０２のコンピュータ実行可能命令が実行されて、１つまたは複数の依存制約が満たされたかどうかを決定してよい。例示的な依存制約は、プロデューサの動作が実行された後に、予測されたロードが発生することであってよい。これは、レジスタ／依存関係データ１３４内のプロデューサの動作に関連付けられた命令識別子を識別し、プロデューサの動作の命令識別子を、予測されたロードに関連付けられた命令識別子と比較して、プロデューサの動作がすでに実行されていることを保証することによって、決定され得る。別の例示的な依存制約は、予測格納命令が、検証ロードの前に実行されることであってよい。これは、同様に予測格納命令の命令識別子を、検証ロードの命令識別子と比較することによって決定され得る。
【００５１】
ブロック３１２での否定的な決定に応答して、方法３００は再びブロック３１２から進んでよく、ブロック３１２で、１つまたは複数の依存制約が満たされているかどうかについて、再び決定が行われる。ブロック３１２での決定は、すべての依存制約が満たされたという肯定的な決定が行われるまで、繰り返し実行されてよい。ブロック３１２での肯定的な決定に応答して、方法３００はブロック３１４に進んでよく、ブロック３１４で、予測エンジン１０２のコンピュータ実行可能命令が実行されて、信頼値がしきい値を満たしているかどうかを決定してよい。実装に応じて、第１の値が第２の値以上である場合、または第１の値が第２の値以下である場合に、第１の値が第２の値を満たしてよい。ブロック３１２での決定は、ロード命令と予測格納命令のペアリング１１２に関連付けられた信頼値がしきい値を満たしている場合にのみ、予測されたロードが実行されることを保証するために行われてよく、それによって、予測格納命令に関連付けられたプロデューサの動作の結果として物理レジスタに格納された値が、ロード命令が実行された場合にメモリから取り出される値と同じ値であるということの適切な信頼性を示す。これは、さらに、予測されたロードが実行され、実際のロード命令の実行が回避された場合に、コンシューマが正しい値に対して動作するということの適切な信頼性を示す。
【００５２】
ブロック３１４での肯定的な決定に応答して、ブロック３１６で、命令実行エンジン１０８のコンピュータ実行可能命令が実行されて、マッピング・テーブル１２２内の一致するエントリで識別された物理レジスタに少なくとも部分的に基づいて、予測されたロードを適用してよい。具体的には、設計されたレジスタ１２８に現在マッピングされている別の物理レジスタ１３０が、レジスタ・マッピング・テーブル１３８から識別されてよく、予測されたロードが実行されて、マッピング・テーブル１２２内の一致するエントリで識別された物理レジスタに格納された値を、設計されたレジスタ１２８に現在マッピングされている物理レジスタ１３０にコピーしてよい。加えて、レジスタ間のいずれかの依存関係が、レジスタ／依存関係データ１３４から識別されてよい。例えば、マッピング・テーブル１２２内の一致するエントリで識別された物理レジスタが設定される値は、他の物理レジスタが設定される値に依存することがある。
【００５３】
特定の実施形態例では、方法３００は、ブロック３１６からブロック３１８に進んでよい。加えて、ブロック３１４での否定的な決定に応答して、方法３００は、ブロック３１６をスキップし、ブロック３１８に直接進んでよい。ブロック３１８で、命令実行エンジン１０８のコンピュータ実行可能命令が実行されて、検証ロードを実行してよい。前述したように、検証ロードは、ロード命令によって指定されたメモリ位置に格納された値を取り出すことと、取り出された値を、予測されたロードを実行するために使用される物理レジスタ値と比較することとを含んでよい。
【００５４】
ブロック３２０で、ロード命令と予測格納命令のペアリング１１２に関連付けられた信頼値が、検証ロードが予測されたロードに一致するかどうか、さらに具体的には、検証ロードによってメモリから取り出された値が、予測されたロードを実行するために使用される物理レジスタ値に等しいかどうかに少なくとも部分的に基づいて、更新されてよい。それらの値が一致しない場合、予測配列１１４内の予測格納命令と相互関係があるロード命令に関して、将来、予測されたロードが実行される可能性を低くして、信頼値が減らされてよい。反対に、それらの値が一致する場合、予測格納命令と相互関係があるロード命令に関して、将来、予測されたロードが実行される可能性を高くして、信頼値が増やされてよい。ブロック３１４で否定的な決定が行われた場合、ブロック３１６で予測されたロードが実行されないということが理解されるべきである。しかし、信頼値は、ブロック３２０で、やはり更新されてよい。具体的には、ブロック３１４での否定的な決定の場合、予測されたロードが実行されなくてよいが、予測はやはり行われ得る。次に、ブロック３１８での検証ロードの実行時に、ブロック３２０で、予測が正しかったかどうかに基づいて信頼値が更新され得る。予測が正しい場合、信頼値が増やされてよい。信頼値が十分に強くなった場合、将来、予測されたロードが、予測に基づいて最終的に実行されてよい。
【００５５】
本開示の実施形態例に従って予測されたロードを実行することは、メモリ・アクセスの代わりに実行されるレジスタ間のコピー動作を含んでいるため、命令実行性能を改善する。レジスタの動作は、メモリ・アクセスよりも少ない実行サイクルを含んでいる。そのため、コンシューマの動作は、実際のロード命令がメモリ・アクセスを実行して、取り出された値を物理レジスタに格納するのを待つことを必要とせずに、予測されたロードの結果として物理レジスタに格納された値に対して動作することができる。本開示の実施形態例に従って予測されたロードを実行することは、順序通りでない命令の実行も可能にする。具体的には、例えば、予測されたロードが実行されて、より新しい命令が実行する必要のある値を物理レジスタから取得した場合、より古いロード命令の検証が完了するのをまだ待っている間、命令キュー内のより古いロード命令に関連付けられた値に依存する命令キュー内のより新しい命令が実行され得る。
【００５６】
特定の実施形態例では、どの格納命令がロード命令と相互関係があるかについて曖昧さが存在するため、予測されたロードが不正な値をもたらすことがある状況に対処するために、パターン・テーブルが維持され、アクセスされてよい。例えば、次の疑似コードが、実行される条件コードを表すと仮定する：ｘ＝１である場合、ＩＡ  Ｙの格納命令を実行し、値１をメモリ位置［ｘ］に格納し、そうでない場合、ＩＡ  Ｚの格納命令を実行し、値２をメモリ位置［ｘ］に格納する。このようにして、条件文（すなわち、ｘ＝１であるかどうか、したがって、どの格納命令が実行されるか）の結果に応じて、異なる値がメモリ位置［ｘ］に格納されることがある。さらに、この条件コードの後に、ロード命令が続き、メモリ位置［ｘ］の内容を物理レジスタにロードすると仮定する。この例では、予測配列１１４がロードＩＡを単一の格納ＩＡにマッピングするため、予測されたロードを実行できないことがあり、この状況では、どの格納ＩＡがロードＩＡと相互関係があるかについて、曖昧さが存在する。この曖昧さは、プログラムの実行中に、条件文の結果が既知になった場合にのみ、解決される。
【００５７】
予測配列１１４と並列にアクセスされ得るパターン・テーブルが、そのような例示的な状況に対処するために使用され得る。パターン・テーブルは、予測配列１１４に類似する内容（例えば、格納ＩＡ）を格納できるが、予測配列１１４とは異なってインデックス付けされてよい。具体的には、予測配列１１４はＩＡ（例えば、ロードＩＡ）を使用してインデックス付けされてよいが、パターン・テーブルは、過去の条件文の結果を表すパターンを伴うＩＡのハッシュによってインデックス付けされてよい。例えば、このパターンは、分岐命令の最後のＸ個の結果を示してよい。このパターンは、グローバル履歴ベクトル（ＧＨＶ：Global History Vector）を使用して表されてよく、ＧＨＶの各ビット値は、過去の分岐命令が選択されたかどうかを示す。
【００５８】
したがって、特定の実施形態例では、ＩＡ（例えば、ロードＩＡ）は、相互関係がある命令のＩＡ（例えば、格納ＩＡ、相互関係があるロード命令のＩＡなど）を識別しようとするために、予測配列１１４に対してインデックス付けするのに使用されてよいが、このＩＡは、パターン・テーブルに対してインデックス付けするのに使用されるハッシュ値を取得するために、パターン（例えば、ＧＨＶ）と共にハッシュされてもよい。パターン・テーブル内でハッシュ値の一致の位置が特定された場合、パターン・テーブル内のこの一致するエントリに格納された対応するＩＡ（例えば、格納ＩＡ、相互関係があるロード命令のＩＡなど）が、予測配列１１４へのアクセスから取得された結果（もしあれば）の代わりに使用されてよい。
【００５９】
本開示の実施形態例が、ロード命令と相互関係がある格納命令を識別することに関連して、主に説明された。しかし、特定の実施形態例では、格納命令をロード命令と相互関係付けるのは困難であることがある。さらに具体的には、特定の実施形態例では、ロード命令は、繰り返し実行されて、メモリ内の同じ位置から値をロードすることがある（本明細書では、定期的ロードと呼ぶ）。例えば、実行されているコードは、定期的ロード命令（constant load instruction）を繰り返し実行して、同じデータを同じメモリ位置から複数回ロードすることを必要とするループを含んでいることがある。そのような例示的な状況では、このデータをそのメモリ位置に格納した格納命令が、格納命令を定期的ロードと相互関係付けるのが困難になるような、時間的に非常に早期に実行されていることがある。
【００６０】
そのような実施形態例では、データ・ペアリング・テーブル１１２を利用して、定期的ロードに関連して、予測されたロードを実行できるようにすることが可能である。さらに具体的には、データ・ペアリング・テーブル１１２が、格納命令のＩＡを格納するとして前に説明されたが、定期的ロードに関連して予測されたロードを実行できるように、ロードＩＡがデータ・ペアリング・テーブル１１２に格納されてもよい。具体的には、ロード命令に関連付けられたオペランド・アドレスの少なくとも一部がデータ・ペアリング・テーブル１１２に対してインデックス付けされているときに、データ・ペアリング・テーブル１１２内で一致の位置が特定されない場合、ロード命令に関連付けられたオペランド・アドレスの少なくとも一部をインデックスとして含み、定期的ロードのＩＡを格納する新しいエントリが、データ・ペアリング・テーブル１１２内に生成されてよい。その後、定期的ロードが再び実行されたときに、データ・ペアリング・テーブル１１２内の一致の位置が特定されてよく、ロード命令とロード命令のペアリングが予測配列１１４に格納されてよい。予測配列１１４内のエントリが、ロード命令とロード命令のペアリングとして、または格納命令とロード命令のペアリングとして、どちらの場合にも指定されてよい。
【００６１】
特定の実施形態例では、ロード命令は、格納命令によってメモリに格納された値を含んでいる物理レジスタが、ロード命令によって必要とされる値を格納しなくなっていることがあるような、時間的に非常に早期に発生した格納命令に依存することがある。そのような実施形態例では、ロード命令のＩＡに基づいて予測格納ＩＡが予測配列１１４から取得された場合でも、この予測格納ＩＡに対応するエントリがマッピング・テーブル１２２内に存在しないか、または対応するエントリが無効化されているであろう。いずれの場合も、予測格納命令に関連付けられた物理レジスタを使用して、予測されたロードを実行できないであろう。
【００６２】
格納命令が実行されたときと、ロード命令が実行されるときとの間で、物理レジスタが別の目的のために再利用されているか、または廃止されており、それによって、格納命令に対応するマッピング・テーブル１２２内のエントリが無効化されることを引き起こす、前述したような状況に対応するために、ＩＡ格納データ配列１３６が提供されてよい。ＩＡ格納データ配列１３６は、格納命令に関連付けられたＩＡに応じて、格納命令に関連付けられたデータを格納してよい。
【００６３】
さらに具体的には、ＩＡ格納データ配列１３６は、格納ＩＡによってインデックス付けされてよく、ＩＡ格納データ配列１３６は、（マッピング・テーブル１２２が格納しているように）例えば格納命令に関連付けられた値を保持していると推定される物理レジスタの識別を格納するのではなく、対応する値自体を格納してよい。そのため、格納命令が実行された場合、値がキャッシュに書き込まれることに加えて、この値がＩＡ格納データ配列１３６に格納され、格納命令のＩＡによってインデックス付けされてもよい。このようにして、ＩＡ格納データ配列１３６は、マッピング・テーブル１２２に対するバックアップとして機能してよい。すなわち、格納ＩＡに対応するマッピング・テーブル１２２のエントリが無効化されている（エントリで識別された物理レジスタが正しい値を格納しなくなっていることを示している）場合、ＩＡ格納データ配列１３６内のエントリの位置を特定しようとするために、格納ＩＡを使用してＩＡ格納データ配列１３６がアクセスされてよい。ＩＡ格納データ配列１３６内で一致するエントリの位置が特定された場合、一致するエントリからデータが取り出され、予測されたロードを実行するために使用されてよい。
【００６４】
ＩＡ格納データ配列１３６は、マッピング・テーブル１２２より大きいストレージ容量を有している（すなわち、より多くのエントリを収容できる）が、データは、マッピング・テーブル１２２より後にＩＡ格納データ配列１３６に書き込まれることがある。これは、ＩＡ格納データ配列１３６に書き込まれるデータの場合、格納命令を実行する必要があり、一方、マッピング・テーブル１２２内のエントリで識別された物理レジスタに格納されたデータは、格納命令を実行することを必要とせずに、プロデューサの動作が実行された後に使用可能になるためである。
【００６５】
加えて、特定の例示的な状況では、マッピング・テーブル１２２のエントリが無効化されたが、物理レジスタにすでに格納されているデータが、ＩＡ格納データ配列１３６にまだ書き込まれていないことがある。例えば、プロセッサ設計は、複数の格納命令を並列に実行し、対応するデータをキューに書き込んで、最終的にメモリに格納することを可能にすることがある。しかし、格納命令の実行とＩＡ格納データ配列１３６へのデータの書き込みの間に遅延が存在するように、ＩＡ格納データ配列１３６への書き込みの帯域幅が、制限されることがある。そのため、前述した状況では、マッピング・テーブル１２２のエントリが無効化されるときと、エントリがＩＡ格納データ配列１３６内に生成されるときとの間に、遅延が存在することがある。別の例示的な状況では、マッピング・テーブル１２２のエントリが無効化されることがあり、ＩＡ格納データ配列１３６内のエントリが、（エイリアシングに起因して）対象の格納命令と同じインデックスを有している異なる格納命令に対応するデータで上書きされていることがあるため、ＩＡ格納データ配列１３６内のデータも使用できなくなることがある。
【００６６】
マッピング・テーブル１２２のエントリが無効化され、物理レジスタのデータがＩＡ格納データ配列１３６に格納されない例示的な状況では、予測されたロードが実行されるかどうかは、ロードが予測されたロードになることが決定されるタイミングに依存することがある。例えば、マッピング・テーブル１２２およびＩＡ格納データ配列１３６にアクセスする前に、ロード命令が予測されたロードになることが決定され、マッピング・テーブル１２２のエントリが無効化されており、エントリがＩＡ格納データ配列１３６に存在しない場合、それでも、予測されたロードが実行されてよいが、不正なデータがレジスタにロードされる結果になり、したがって前述したように、パイプラインのフラッシュが必要になるであろう。反対に、ロード命令が予測されたロードになることを決定する前に、マッピング・テーブル１２２およびＩＡ格納データ配列１３６がアクセスされた場合、マッピング・テーブル１２２のエントリが無効化されていて、エントリがＩＡ格納データ配列１３６に存在しなければ、予測されたロードは実行されなくてよい。特定の実施形態例では、前者の状況は、予測配列１１４が、少なくとも部分的に命令フェッチと並列にアクセスされる場合に生じる可能性がより高くなり、後者の状況は、予測配列１１４が、少なくとも部分的に命令デコーディングと並列に、または命令デコーディングに応じてアクセスされる場合に生じる可能性がより高くなる。
【００６７】
特定の実施形態例では、物理レジスタが別の目的のために再利用された（例えば、マッピング・テーブル１２２のエントリが無効化された）ときと、レジスタ値がＩＡ格納データ配列１３６に書き込まれたときとの間の遅延を短縮するために、ｒｅｇファイルが無効化されたときに、レジスタ値がＩＡ格納データ配列１３６にコピーされてよい。加えて、ＩＡ格納データ配列１３６にアクセスするために追加の時間が必要な場合は、ＩＡ格納データ配列１３６が命令パイプライン内で早期に読み取られてよい。
【００６８】
特定の実施形態例では、定期的ロードに関連して、ＩＡ格納データ配列１３６が書き込まれてよい。前述したように、データ・ペアリング・テーブル１１２内のロード命令に関して、オペランド・アドレスの一致が検出されない場合（例えば、ロード命令とペアになる潜在的な格納命令がない場合）、このロード命令のＩＡがデータ・ペアリング・テーブル１１２に書き込まれてよい。その後、定期的ロード命令が再び発生した場合、データ・ペアリング・テーブル１１２内で一致が検出され、ロード命令とロード命令のペアリングが予測配列１１４に書き込まれ、それによって、予測の資格をロード命令に与える。ロード命令が予測の資格を得た時点で、ロード命令に関連付けられたデータがＩＡ格納データ配列１３６に書き込まれてよく、ロード命令のＩＡによってインデックス付けされてよい。そのため、定期的ロード命令が再び発生したときに、一致するロードＩＡが予測配列１１４から取得され、マッピング・テーブル１２２にアクセスすることを必要とせずに、ＩＡ格納データ配列１３６内の対応するデータにアクセスするために使用されてよい。
【００６９】
本開示全体を通じて、配列およびテーブルという用語が使用されている。配列は、例えば、通常は多くても２つの読み取りまたは１つの読み取りおよび１つの書き込みが実行され得るように、通常は１つまたは２つの読み取りポートに制限されるデータ構造であってよい。テーブルは、配列より広いデータ構造のグループを包含してよい。例えば、テーブルは、読み取りおよび書き込みの任意の組み合わせで定義され得る、配列より多くの数のポートを有する、ｒｅｇファイルであってよい。配列は、ｒｅｇファイルより高密度であってよい。特定のデータ構造が配列またはテーブルとして説明されているが、本開示がそれらの種類のデータ構造に限定されないということ、および配列またはテーブルとして説明された任意のデータ構造が、任意の適切な種類のデータ構造を代わりに使用して実装されてよいということが、理解されるべきである。
【００７０】
加えて、本開示の特定の実施形態例では、「ロード命令」という用語またはその変形は、単一のロード命令を指してよい。本開示の他の実施形態例では、ロード命令という用語は、複合命令セット・コンピューティング（ＣＩＳＣ：Complex Instruction Set Computing）アーキテクチャにおいて使用されることがある複合命令内の複数の異なるマイクロｏｐのうちの１つであるロードを指してよい。例えば、アーキテクチャは、加算される値のうちの１つがメモリから取得される加算命令を定義してよい。そのような状況では、ロード命令は、加算命令内のマイクロｏｐであってよい。
【００７１】
本開示の実施形態例は、さまざまな技術的特徴、技術的効果、または技術に対する改良、あるいはその組み合わせを実現する。例えば、本開示の実施形態例は、命令実行性能を改善する技術的効果を実現する。本開示の実施形態例は、順序通りでない命令の実行を改善する技術的効果も実現する。これらの技術的効果は、少なくとも一部において、ロード命令と相互関係があると予測された命令を決定することと、予測された相互関係がある命令に対応するプロデューサの動作に関連付けられたデータを取得することと、コンシューマが、ロード命令の実行に関連付けられたメモリ・アクセスを回避しながら、取得されたデータで識別された物理レジスタに格納された値を使用できるようにする予測されたロードを実行することとの技術的特徴によって、実現される。予測された相互関係がある命令は、格納命令または（定期的ロードの場合は）ロード命令であってよい。技術的特徴は、ロード命令のＩＡのみを使用してインデックス付けされた予測配列、定期的ロードを予測する能力、ＢＴＢテーブルおよび予測配列のマージ、検証ロードを実行する能力、予測されたロードを実行する機会の数を増やすためにパターン・テーブルおよびＩＡ格納データ配列を提供することなどをさらに含む。これらの技術的特徴は、少なくとも一部において、データをある物理レジスタから別の物理レジスタにコピーすることが、メモリ位置にアクセスして、メモリ位置に格納されたデータを物理レジスタにコピーするよりも、少ない実行サイクルを必要とするため、改善された命令実行性能の技術的効果を実現する。これらの技術的特徴は、少なくとも一部において、予測されたロードを実行するためのさまざまな非定型的かつ非従来的なメカニズムを提供するため、従来の順序通りでない命令の実行を改善する技術的効果を実現する。したがって、前述した技術的特徴およびその結果得られる技術的効果は、コンピュータの機能に対する改善を構成する。本開示の実施形態例によって提供される技術的特徴、技術的効果、ならびにコンピュータの機能およびコンピュータ技術に対する改善についての上記の例は、例示にすぎず、網羅的ではないと理解されるべきである。
【００７２】
本明細書では、本開示の１つまたは複数の例示的な実施形態が説明されている。それらの実施形態は、本開示の範囲の例示にすぎず、制限するよう全く意図されていない。したがって、本明細書で開示された実施形態の変形、変更、および均等物も、本開示の範囲に含まれる。
【００７３】
図４は、本開示の１つまたは複数の実施形態例を実装するように構成された例示的なコンピューティング・デバイス４００の概略図である。図１に示されたデバイス・アーキテクチャ・スタック（device architecture stack）１００は、コンピューティング・デバイス４００の例示的な構成に対応してよい。本明細書では、デバイス４００は単数形で説明されているが、デバイス４００の複数の例が提供されてよく、デバイス４００に関連して説明された機能が、そのような複数の例にわたって分散されてよいということが、理解されるべきである。
【００７４】
例示的な構成では、デバイス４００は、１つまたは複数のプロセッサ４０２、１つまたは複数のメモリ・デバイス４０４（本明細書では、総称的にメモリ４０４と呼ばれる）、１つまたは複数の入出力（Ｉ／Ｏ：input/output）インターフェイス４０６、１つまたは複数のネットワーク・インターフェイス４０８、およびデータ・ストレージ４１０を含んでよい。デバイス４００は、デバイス４００のさまざまなコンポーネントを機能的に結合する１つまたは複数のバス４１２をさらに含んでよい。
【００７５】
バス４１２は、システム・バス、メモリ・バス、アドレス・バス、またはメッセージ・バスのうちの少なくとも１つを含んでよく、デバイス４００のさまざまなコンポーネント間の情報（例えば、データ（コンピュータ実行可能コードを含む）、信号伝達など）の交換を許可してよい。バス４１２は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポートなどを含んでよいが、これらに限定されない。バス４１２は、ＩＳＡ（Industry Standard Architecture）、ＭＣＡ（Micro Channel Architecture）、ＥＩＳＡ（Enhanced ISA）、ＶＥＳＡ（Video Electronics Standards Association）アーキテクチャ、アクセラレーテッド・グラフィックス・ポート（ＡＧＰ：Accelerated Graphics Port）アーキテクチャ、ＰＣＩ（Peripheral  Component Interconnects）アーキテクチャ、ＰＣＩＥ（PCI-Express）アーキテクチャ、ＰＣＭＣＩＡ（Personal Computer Memory Card International Association）アーキテクチャ、ユニバーサル・シリアル・バス（ＵＳＢ：Universal Serial Bus）アーキテクチャなどを含むが、これらに限定されない、任意の適切なバス・アーキテクチャに関連付けられてよい。
【００７６】
メモリ４０４は、図１に示された物理メモリ１０２を表してよく、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）などの揮発性メモリ（電力が供給されたときにその状態を維持するメモリ）、または読み取り専用メモリ（ＲＯＭ：read-only memory）、フラッシュ・メモリ、強誘電体ＲＡＭ（ＦＲＡＭ：ferroelectric RAM）などの不揮発性メモリ（電力が供給されないときにもその状態を維持するメモリ）、あるいはその両方を含んでよい。永続的データ・ストレージは、この用語が本明細書において使用されるとき、不揮発性メモリを含んでよい。特定の実施形態例では、揮発性メモリは、不揮発性メモリよりも高速な読み取り／書き込みアクセスを可能にしてよい。しかし、特定の他の実施形態例では、特定の種類の不揮発性メモリ（例えば、ＦＲＡＭ）が、特定の種類の揮発性メモリよりも高速な読み取り／書き込みアクセスを可能にしてよい。
【００７７】
さまざまな実装では、メモリ４０４は、さまざまな種類のスタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、さまざまな種類のダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ：dynamic random access memory）、さまざまな種類の不変のＲＯＭ、または電気的消去可能プログラム可能読み取り専用メモリ（ＥＥＰＲＯＭ：electrically erasable programmable read-only memory）、フラッシュ・メモリなどのＲＯＭの書き込み可能な変形、あるいはその組み合わせなどの、複数の異なる種類のメモリを含んでよい。メモリ４０４は、メイン・メモリ、ならびに命令キャッシュ、データ・キャッシュ、変換索引バッファ（ＴＬＢ：translation lookaside buffer）などのキャッシュ・メモリのさまざまな形態を含んでよい。さらに、データ・キャッシュなどのキャッシュ・メモリは、１つまたは複数のキャッシュ・レベル（Ｌ１、Ｌ２など）の階層として編成された複数のレベルのキャッシュであってよい。
【００７８】
データ・ストレージ４１０は、磁気ストレージ、光ディスク・ストレージ、またはテープ・ストレージ、あるいはその組み合わせを含むが、これらに限定されない、取り外し可能なストレージまたは取り外し不能なストレージあるいはその両方を含んでよい。データ・ストレージ４１０は、コンピュータ実行可能命令およびその他のデータの不揮発性ストレージを提供してよい。メモリ４０４および取り外し可能または取り外し不能あるいはその両方のデータ・ストレージ４１０は、この用語が本明細書において使用されるとき、コンピュータ可読記憶媒体（ＣＲＳＭ：computer-readable storage media）の例である。
【００７９】
データ・ストレージ４１０は、メモリ４０４にロード可能であり、かつプロセッサ４０２にさまざまな動作を実行または開始させるためにプロセッサ４０２によって実行可能である、コンピュータ実行可能なコード、命令などを格納してよい。データ・ストレージ４１０は、コンピュータ実行可能命令の実行中にプロセッサ４０２で使用するためにメモリ４０４にコピーされてよいデータをさらに格納してよい。さらに、プロセッサ４０２によるコンピュータ実行可能命令の実行の結果として生成された出力データが、最初にメモリ４０４に格納されてよく、最終的に、不揮発性ストレージであるデータ・ストレージ４１０にコピーされてよい。
【００８０】
さらに具体的には、データ・ストレージ４１０は、１つまたは複数のオペレーティング・システム（Ｏ／Ｓ：operating system）４１４（Ｏ／Ｓ４１４を含んでよく、１つまたは複数の仮想Ｏ／Ｓのインスタンスを含んでよい）と、メモリ４０４または１つまたは複数の外部データ・ストア（図示されていない）あるいはその両方にアクセスするように構成された１つまたは複数のデータベース管理システム（ＤＢＭＳ：database management system）４１６と、１つまたは複数のプログラム・モジュール、アプリケーション、エンジン、コンピュータ実行可能コード、スクリプトなど（例えば、予測エンジン４１８、レジスタ追跡エンジン４２０、読み取り／書き込みエンジン４２２、および命令実行エンジン４２４など）とを格納してよい。データ・ストレージ４１０に格納されているとして示されているコンポーネントのいずれかは、ソフトウェア、ファームウェア、またはハードウェア、あるいはその組み合わせの任意の組み合わせを含んでよい。ソフトウェアまたはファームウェアあるいはその両方は、プロセッサ４０２のうちの１つまたは複数によって実行されて、対応する名前が付けられたエンジンに関連して前述された動作のいずれかを実行するために、メモリ４０４にロードされてよいコンピュータ実行可能命令（例えば、コンピュータ実行可能プログラム・コード）を含んでよい。
【００８１】
図４に示されていないが、データ・ストレージ４１０は、デバイス４００のコンポーネントによって使用されるさまざまな種類のデータ（例えば、データ・ペアリング１１２、予測配列１１４、マッピング・テーブル１２２、ＩＡ格納データ配列１３６など）をさらに格納してよい。データ・ストレージ４１０に格納されたいずれかのデータが、コンピュータ実行可能命令の実行においてプロセッサ４０２で使用するために、メモリ４０４にロードされてよい。加えて、データ・ストレージ４１０に格納されたいずれかのデータが、外部データ・ストレージに格納される可能性があってよく、ＤＢＭＳ４１６を介してアクセスされ、コンピュータ実行可能命令の実行においてプロセッサ４０２で使用するために、メモリ４０４にロードされてよい。
【００８２】
プロセッサ４０２は、メモリ４０４にアクセスし、ロードされたコンピュータ実行可能命令を実行するように、構成されてよい。例えば、プロセッサ４０２は、本開示の１つまたは複数の実施形態に従って、デバイス４００のさまざまなプログラム・モジュール、アプリケーション、エンジンなどのコンピュータ実行可能命令を実行して、さまざまな動作の実行を引き起こすか、またはさまざまな動作の実行を容易にするように、構成されてよい。プロセッサ４０２は、データを入力として受け取ることと、この入力データを、格納されたコンピュータ実行可能命令に従って処理することと、出力データを生成することとを実行できる、任意の適切な処理ユニットを含んでよい。プロセッサ４０２は、中央処理装置、マイクロプロセッサ、縮小命令セット・コンピュータ（ＲＩＳＣ：Reduced Instruction Set Computer）マイクロプロセッサ、複合命令セット・コンピュータ（ＣＩＳＣ：Complex Instruction Set Computer）マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ：Application Specific Integrated Circuit）、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：Field-Programmable Gate Array）、システムオンチップ（ＳｏＣ：System-on-a-Chip）、デジタル信号プロセッサ（ＤＳＰ：digital signal processor）などを含むが、これらに限定されない、任意の種類の適切な処理ユニットを含んでよい。さらに、プロセッサ４０２は、例えば、レジスタ、マルチプレクサ、算術論理演算ユニット、キャッシュ・メモリに対する読み取り動作／書き込み動作を制御するためのキャッシュ・コントローラ、分岐予測器などの、任意の数の構成要素となるコンポーネントを含んでいる、任意の適切なマイクロアーキテクチャ設計を備えてよい。プロセッサ４０２のマイクロアーキテクチャ設計は、さまざまな命令セットのいずれかをサポートできてよい。
【００８３】
ここで、データ・ストレージ４１０に格納されているように示されている他の例示的なコンポーネントを参照すると、Ｏ／Ｓ４１４が、データ・ストレージ４１０からメモリ４０４にロードされてよく、デバイス４００上で実行されている他のアプリケーション・ソフトウェアと、デバイス４００のハードウェア・リソースとの間のインターフェイスを提供してよい。さらに具体的には、Ｏ／Ｓ４１４は、デバイス４００のハードウェア・リソースを管理するため、および他のアプリケーション・プログラムへの共通サービスを提供するための、コンピュータ実行可能命令のセットを含んでよい。特定の実施形態例では、Ｏ／Ｓ４１４は、データ・ストレージ４１０に格納されているように示されているプログラム・モジュールのうちの１つまたは複数の実行を含むか、またはその他の方法で実行を制御してよい。Ｏ／Ｓ４１４は、任意のサーバ・オペレーティング・システム、任意のメインフレーム・オペレーティング・システム、または任意のその他の独自または非独自のオペレーティング・システムを含むが、これらに限定されない、現在知られているか、または将来開発される任意のオペレーティング・システムを含んでよい。
【００８４】
ＤＢＭＳ４１６は、メモリ４０４にロードされてよく、メモリ４０４に格納されたデータ、データ・ストレージ４１０に格納されたデータ、または外部データ・ストアに格納されたデータ、あるはその組み合わせにアクセスすること、それらのデータを取り出すこと、格納すること、または操作すること、あるいはその組み合わせを実行することのための機能をサポートしてよい。ＤＢＭＳ４１６は、さまざまなデータベース・モデル（例えば、リレーショナル・モデル、オブジェクト・モデルなど）のいずれかを使用してよく、さまざまな照会言語のいずれかをサポートしてよい。ＤＢＭＳ４１６は、１つまたは複数のデータ・スキーマで表され、任意の適切なデータ・リポジトリに格納された、データにアクセスしてよい。ＤＢＭＳ４１６を介してデバイス４００によってアクセス可能であってよい外部データ・ストアは、データベース（例えば、リレーショナル、オブジェクト指向など）、ファイル・システム、フラット・ファイル、データがコンピュータ・ネットワークの２つ以上のノードに格納される分散データ・ストア、ピアツーピア・ネットワークのデータ・ストアなどを含んでよいが、これらに限定されない。
【００８５】
ここで、デバイス４００の他の例示的なコンポーネントを参照すると、入出力（Ｉ／Ｏ）インターフェイス４０６は、デバイス４００による、１つまたは複数のＩ／Ｏデバイスからの入力情報の受信、およびデバイス４００から１つまたは複数のＩ／Ｏデバイスへの情報の出力を容易にしてよい。Ｉ／Ｏデバイスは、タッチ・サーフェスまたはタッチスクリーンを備えるディスプレイまたは表示画面、スピーカなどの音を発生させる音声出力デバイス、マイクロホンなどの音声キャプチャ・デバイス、カメラなどの画像またはビデオあるいはその両方のキャプチャ・デバイス、触覚ユニットなどの、さまざまなコンポーネントのいずれかを含んでよい。これらのコンポーネントのいずれかは、デバイス４００に統合されてよく、または別々であってよい。Ｉ／Ｏデバイスは、例えば、データ・ストレージ・デバイス、印刷デバイスなどの、任意の数の周辺機器をさらに含んでよい。
【００８６】
Ｉ／Ｏインターフェイス４０６は、ユニバーサル・シリアル・バス（ＵＳＢ）、ＦｉｒｅＷｉｒｅ、Ｔｈｕｎｄｅｒｂｏｌｔ、イーサネット（Ｒ）・ポート、または１つまたは複数のネットワークに接続できるその他の接続プロトコルなどの、外部周辺機器接続用のインターフェイスを含んでもよい。Ｉ／Ｏインターフェイス４０６は、無線ローカル・エリア・ネットワーク（ＷＬＡＮ：wireless local area network）（Ｗｉ−Ｆｉなど）の無線、Ｂｌｕｅｔｏｏｔｈ、または無線通信ネットワーク（ロング・ターム・エボリューション（ＬＴＥ：Long Term Evolution）ネットワーク、ＷｉＭａｘネットワーク、３Ｇネットワークなど）と通信できる無線などの、無線ネットワークの無線、あるいはその組み合わせを介して、１つまたは複数のネットワークに接続するための、１つまたは複数のアンテナへの接続を含んでもよい。
【００８７】
デバイス４００は、１つまたは複数のネットワーク・インターフェイス４０８をさらに含んでよく、このネットワーク・インターフェイス４０８を介して、デバイス４００は、さまざまな他のシステム、プラットフォーム、ネットワーク、デバイスなどのいずれかと通信してよい。ネットワーク・インターフェイス４０８は、例えば、１つまたは複数のネットワークを介して、１つまたは複数の他のデバイスとの通信を可能にしてよい。そのようなネットワークは、例えば、ケーブル・ネットワーク、パブリック・ネットワーク（例えば、インターネット）、プライベート・ネットワーク（例えば、フレーム中継ネットワーク）、無線ネットワーク、セルラー・ネットワーク、電話ネットワーク（例えば、公衆交換電話網）、または任意のその他の適切なプライベートまたはパブリックのパケット交換ネットワークまたは回路交換ネットワークなどの、任意の１つまたは複数の異なる種類の通信ネットワークを含んでよいが、これらに限定されない。そのようなネットワークは、任意の適切な通信範囲に関連付けられてよく、例えば、世界規模のネットワーク（例えば、インターネット）、メトロポリタン・エリア・ネットワーク（ＭＡＮ：metropolitan area network）、広域ネットワーク（ＷＡＮ：wide  area network）、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、またはパーソナル・エリア・ネットワーク（ＰＡＮ：personal area network）を含んでよい。加えて、そのようなネットワークは、同軸ケーブル、ツイストペア線（例えば、ツイストペア銅線）、光ファイバ、光ファイバ同軸ハイブリッド（ＨＦＣ：hybrid fiber-coaxial）媒体、マイクロ波媒体、無線周波数通信媒体、衛星通信媒体、またはこれらの任意の組み合わせを含むが、これらに限定されない、任意の適切な種類の媒体を経由してネットワーク・トラフィックを送信するために、通信リンクおよび関連するネットワーク・デバイス（例えば、リンク層スイッチ、ルータなど）を含んでよい。
【００８８】
データ・ストレージ４１０に格納されているように図４に示されているプログラム・モジュールが、例示にすぎず、網羅的でないということ、および特定のモジュールによってサポートされていると説明された処理が、代替として、複数のモジュール、エンジンなどにわたって分散されるか、または異なるモジュール、エンジンなどによって実行されてよいということが、理解されるべきである。加えて、デバイス４００上でローカルにホストされているか、または１つまたは複数のネットワークを介してアクセスできる他のコンピューティング・デバイス上でホストされているか、あるいはその両方である、さまざまなプログラム・モジュール、スクリプト、プラグイン、アプリケーション・プログラミング・インターフェイス（ＡＰＩ：Application Programming Interface）、または任意のその他の適切なコンピュータ実行可能コードが、図４に示されているモジュールによって提供される機能、あるいは追加または代替の機能、あるいはその両方をサポートするために、提供されてよい。さらに、機能は、特定のモジュールによって実行されると説明された処理が、任意の数のプログラム・モジュールの集合によって実行できるように、または特定のモジュールによってサポートされていると説明された機能が、少なくとも一部において、別のモジュールによってサポートできるように、任意の適切な方法でモジュール化されてよい。加えて、本明細書に記載された機能をサポートするプログラム・モジュールは、例えばクライアント／サーバ・モデル、ピアツーピア・モデルなどの、任意の適切なコンピューティングモデルに従って、任意の数のデバイス４００にわたって実行可能であってよい。加えて、図４に示されているモジュールのいずれかによってサポートされていると説明された機能のいずれかは、少なくとも部分的に、任意の数のデバイスにわたって、ハードウェアまたはファームウェアあるいはその両方において実装されてよい。
【００８９】
デバイス４００が、本開示の範囲を逸脱することなく、説明されたか、または示されたものを超える、代替または追加あるいはその両方のハードウェア・コンポーネント、ソフトウェア・コンポーネント、またはファームウェア・コンポーネントを含んでよいということが、さらに理解されるべきである。さらに具体的には、デバイス４００の一部を形成しているように示されたソフトウェア・コンポーネント、ファームウェア・コンポーネント、またはハードウェア・コンポーネントが例示にすぎないということ、およびさまざまな実施形態において、一部のコンポーネントが存在しなくてよいか、または追加のコンポーネントが提供されてよいということが、理解されるべきである。さまざまな例示的なモジュールが、データ・ストレージ４１０に格納されたソフトウェア・モジュールとして示され、説明されたが、各モジュールによってサポートされていると説明された機能が、ハードウェア、ソフトウェア、またはファームウェア、あるいはその組み合わせの任意の組み合わせによって可能にされてよいということが、理解されるべきである。さまざまな実施形態において、前述の各モジュールが、サポートされている機能の論理パーティションを表してよいということが、さらに理解されるべきである。この論理パーティションは、機能の説明を簡単にするために示されており、機能を実装するためのソフトウェア、ハードウェア、またはファームウェア、あるいはその組み合わせの構造を代表していなくてよい。したがって、特定のモジュールによって提供されていると説明された機能が、さまざまな実施形態では、少なくとも一部において、１つまたは複数の他のモジュールによって提供されてよいということが、理解されるべきである。さらに、特定の実施形態では、１つまたは複数の示されたモジュールが存在しなくてよく、他の実施形態では、示されていない追加のプログラム・モジュールまたはエンジンあるいはその両方が存在してよく、説明された機能または追加の機能あるいはその両方の少なくとも一部をサポートしてよい。
【００９０】
方法２００または方法３００の１つまたは複数の動作は、図４に示された例示的な構成を有しているデバイス４００によって、またはさらに具体的には、そのようなデバイ上で実行可能な１つまたは複数のプログラム・モジュール、エンジン、アプリケーションなどによって、実行されてよい。しかし、そのような動作が、多数のその他のデバイス構成に関連して実装されてよいということが、理解されるべきである。
【００９１】
図２の例示的な方法または図３の例示的な方法において説明され、示された動作は、本開示のさまざまな実施形態例において、望ましい任意の適切な順序で実施または実行されてよい。さらに、特定の実施形態例では、動作の少なくとも一部が並列に実施されてよい。さらに、特定の実施形態例では、図２または図３に示されている動作より少ない動作、多い動作、またはそれらと異なる動作が、実行されてよい。
【００９２】
本開示の特定の実施形態が説明されているが、当業者は、多数のその他の変更および代替の実施形態が、本開示の範囲に含まれるということを認識するであろう。例えば、特定のシステム、システム・コンポーネント、デバイス、またはデバイス・コンポーネントに関して説明された機能または処理能力あるいはその両方のいずれかは、任意のその他のシステム、デバイス、またはコンポーネントによって実行されてよい。さらに、さまざまな例示的な実装およびアーキテクチャが、本開示の実施形態に従って説明されたが、当業者は、本明細書に記載された例示的な実装およびアーキテクチャに対する多数のその他の変更も、本開示の範囲に含まれるということを理解するであろう。加えて、別の動作、要素、コンポーネント、データなどに基づいていると本明細書において説明された任意の動作、要素、コンポーネント、データなどが、１つまたは複数の他の動作、要素、コンポーネント、データなどにさらに基づいてよいということが、理解されるべきである。したがって、「〜に基づいて」という語句またはその変形は、「〜に少なくとも部分的に基づいて」と解釈されるべきである。
【００９３】
本開示は、システム、方法、またはコンピュータ・プログラム製品、あるいその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本開示の態様を実施させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【００９４】
コンピュータ可読記憶媒体は、命令実行デバイスで使用するための命令を保持および格納できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-only  memory）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
【００９５】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【００９６】
本開示の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide area network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本開示の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate array）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic array）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【００９７】
本開示の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【００９８】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【００９９】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスにロードされてもよく、それによって、一連の動作可能なステップを、コンピュータ実装プロセスを生成するコンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行させる。
【０１００】
図内のフローチャートおよびブロック図は、本開示のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実施する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【図１】
2020510916.tif 000003
【図２】
2020510916.tif 000004
【図３】
2020510916.tif 000005
【図４】
2020510916.tif 000006
【国際調査報告】
2020510916.tif 000007
2020510916.tif 000008