(57)【要約】データキャッシュ領域プリフェッチャは、データキャッシュミスが発生した場合に領域を生成する。各領域は、各データキャッシュミスに近接する所定範囲のデータラインを含み、関連する命令ポインタレジスタ（ＲＩＰ）でタグ付けされている。データキャッシュ領域プリフェッチャは、後続のメモリ要求を、既存の領域毎の所定範囲のデータラインと比較する。一致する毎に、データキャッシュ領域プリフェッチャは、アクセスビットを設定し、設定したアクセスビットに基づいて擬似ランダムアクセスパターンを識別しようと試みる。データキャッシュ領域プリフェッチャは、擬似ランダムアクセスパターンが発生する頻度を追跡するために、適切なカウンタをインクリメント又はデクリメントする。擬似ランダムアクセスパターンが頻繁に発生する場合、データキャッシュ領域プリフェッチャは、同じＲＩＰ及びパターンを有するメモリ要求が処理される場合に、当該ＲＩＰの擬似ランダムアクセスパターンに従ってデータラインをプリフェッチする。【選択図】図２
2019528532.tif 000002
【特許請求の範囲】
【請求項１】
複数のラインエントリを含むラインエントリデータテーブルであって、各ラインエントリは、所定数のアクセスビットによって定義された領域を含み、所定のラインエントリのアクセスビットは、前記領域内でキャッシュラインが要求された場合に設定される、ラインエントリデータテーブルと、
前記ラインエントリデータテーブルからのエビクトを受信するように構成された領域履歴テーブルと、を備えるデータキャッシュ領域プリフェッチャであって、
前記データキャッシュ領域プリフェッチャは、エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別し、所定のアクセスパターンを有するラインエントリを、前記領域履歴テーブルへのエビクトから除外するように構成されている、
データキャッシュ領域プリフェッチャ。
【請求項２】
前記データキャッシュ領域プリフェッチャは、擬似ランダムアクセスパターンを有する前記ラインエントリを前記領域履歴テーブルにエビクトするように構成されている、
請求項１のデータキャッシュ領域プリフェッチャ。
【請求項３】
前記領域履歴テーブルは、少なくとも命令ポインタレジスタ（ＲＩＰ）を使用してインデックスされる、
請求項１のデータキャッシュ領域プリフェッチャ。
【請求項４】
前記領域履歴テーブルは、領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、同じＲＩＰに対して複数の擬似ランダムアクセスパターンをサポートするために、オフセットを使用してインデックスされる、
請求項３のデータキャッシュ領域プリフェッチャ。
【請求項５】
前記領域履歴テーブルは、複数の領域履歴エントリを含み、
各領域履歴エントリは、前記所定数のアクセスビットを含み、
各領域履歴エントリは、前記所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、
前記カウンタは、エビクト可能なラインエントリに対してアクセスビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる、
請求項１のデータキャッシュ領域プリフェッチャ。
【請求項６】
前記領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値に達したという条件で、前記領域履歴テーブルからプリフェッチ要求を受信するように構成された領域プリフェッチジェネレータをさらに備える、
請求項１のデータキャッシュ領域プリフェッチャ。
【請求項７】
前記データキャッシュ領域プリフェッチャは、他のプリフェッチャが、前記データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックするように構成されている、
請求項１のデータキャッシュ領域プリフェッチャ。
【請求項８】
各ラインエントリは、後続のキャッシュライン要求が前記所定数のアクセスビット内のホームビットから１アクセスビット内に存在する場合に設定される第２アクセスビットであって、前記領域履歴テーブルへのエビクトから除外された前記所定のアクセスパターンを判別するために使用される第２アクセスビットをさらに含む、
請求項１のデータキャッシュ領域プリフェッチャ。
【請求項９】
ストリームプリフェッチャと、
データキャッシュ領域プリフェッチャと、を備える処理システムであって、
前記データキャッシュ領域プリフェッチャは、
複数のラインエントリを有するラインエントリデータテーブルと、
前記ラインエントリデータテーブルからのエビクトを受信する領域履歴テーブルと、を備え、
各ラインエントリは、所定数のアクセスビットによって定義された領域を含み、所定のラインエントリのアクセスビットは、前記領域内でキャッシュラインが要求された場合に設定され、
前記データキャッシュ領域プリフェッチャは、
エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別し、所定のアクセスパターンを有するラインエントリを、前記領域履歴テーブルへのエビクトから除外し、
前記ストリームプリフェッチャが、前記データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックする、ように構成されている、
処理システム。
【請求項１０】
前記データキャッシュ領域プリフェッチャは、擬似ランダムアクセスパターンを有するラインエントリを前記領域履歴テーブルにエビクトするように構成されている、
請求項９の処理システム。
【請求項１１】
前記領域履歴テーブルは、少なくとも命令ポインタレジスタ（ＲＩＰ）を使用してインデックスされる、
請求項９の処理システム。
【請求項１２】
前記領域履歴テーブルは、領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、同じＲＩＰに対して複数の擬似ランダムアクセスパターンをサポートするために、オフセットを使用してインデックスされる、
請求項１１の処理システム。
【請求項１３】
前記領域履歴テーブルは、複数の領域履歴エントリを含み、
各領域履歴エントリは、前記所定数のアクセスビットを含み、
各領域履歴エントリは、前記所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、
前記カウンタは、各々のアクセスビットにビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる、
請求項９の処理システム。
【請求項１４】
前記領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値に達したという条件で、前記領域履歴テーブルからプリフェッチ要求を受信するように構成された領域プリフェッチジェネレータをさらに備える、
請求項９の処理システム。
【請求項１５】
各ラインエントリは、後続のキャッシュライン要求が前記所定数のアクセスビット内のホームビットから１アクセスビット内に存在する場合に設定される第２アクセスビットであって、前記領域履歴テーブルへのエビクトから除外される前記所定のアクセスパターンを判別するために使用される第２アクセスビットをさらに含む、
請求項９の処理システム。
【請求項１６】
データキャッシュ領域プリフェッチを行う方法であって、
複数のラインエントリを含むラインエントリテーブルにおいてキャッシュライン要求を受信することであって、各ラインエントリは、所定数のアクセスビットによって定義された領域を含む、ことと、
前記キャッシュライン要求が前記領域内に存在する場合、所定のラインエントリに対してアクセスビットを設定することと、
エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別することと、
所定のアクセスパターンを有するラインエントリを、領域履歴テーブルへのエビクトから除外することと、
擬似ランダムアクセスパターンを有するラインエントリを領域履歴テーブルにエビクトすることと、を含む、
方法。
【請求項１７】
少なくとも命令ポインタレジスタ（ＲＩＰ）を使用して前記領域履歴テーブルをインデックスすることをさらに含む、
請求項１６の方法。
【請求項１８】
領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、同じＲＩＰに対して複数の擬似ランダムアクセスパターンをサポートするために、ＲＩＰとオフセットとを使用して前記領域履歴テーブルをインデックスすることをさらに含む、
請求項１７の方法。
【請求項１９】
前記領域履歴テーブルは、複数の領域履歴エントリを含み、各領域履歴エントリは、前記所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、
前記方法は、
各々のアクセスビットが設定されているかどうかに応じて、前記カウンタをインクリメント又はデクリメントすることをさらに含む、
請求項１６の方法。
【請求項２０】
前記領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値以上になったという条件で、プリフェッチ要求を領域プリフェッチジェネレータに送信することをさらに含む、
請求項１６の方法。
【請求項２１】
他のプリフェッチャが、前記データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックすることをさらに含む、
請求項１６の方法。
【請求項２２】
各ラインエントリは、第２アクセスビットを含み、
前記方法は、
後続のキャッシュライン要求が前記所定数のアクセスビット内のホームビットから１アクセスビット内に存在する場合に、前記第２アクセスビットを設定することと、
前記領域履歴テーブルへのエビクトから除外される前記所定のアクセスパターンを判別するために、設定された前記第２アクセスビットを使用することと、をさらに含む、
請求項１６の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
（関連出願の相互参照）
本願は、２０１６年８月１９日に出願された米国仮特許出願第６２／３７７，３１４号、２０１６年１０月１３日に出願された米国特許出願第１５／２９２，７７７号及び２０１６年１１月２５日に出願された欧州特許出願第ＥＰ１６２００８０６．４号の利益を主張し、これらの内容は、完全に記載されているかのように、参照により本明細書に組み込まれる。
【０００２】
数多くの処理デバイスは、メモリに記憶されている情報にアクセスするのに必要な平均時間を短縮するために、キャッシュを利用する。キャッシュは、比較的頻繁に使用されることが予想される命令又はデータのコピーを記憶する小型で高速なメモリである。例えば、キャッシュを使用するプロセッサの一種である中央処理装置（ＣＰＵ）は、一般に、キャッシュ又はキャッシュメモリ要素の階層に関連付けられている。グラフィック処理装置等の他のプロセッサもキャッシュシステムを実装している。ＣＰＵによって使用されると予想される命令又はデータは、（比較的大きくて遅い）メインメモリからキャッシュに移動される。ＣＰＵがメインメモリ内の位置を読み書きする必要がある場合、ＣＰＵは、先ず、所望のメモリ位置のコピーがキャッシュメモリに含まれているか否かを確かめるためにチェックする。この位置がキャッシュに含まれている場合（キャッシュヒット）、ＣＰＵは、キャッシュメモリ位置におけるコピーに対して読み出し又は書き込み動作を実行することができる。この位置がキャッシュに含まれていない場合（キャッシュミス）、ＣＰＵは、メインメモリに記憶されている情報にアクセスする必要があり、場合によっては、当該情報をメインメモリからコピーして、キャッシュに追加することができる。キャッシュを適切に設定及び操作すると、メモリアクセスの平均レイテンシを、メインメモリのレイテンシよりも下回り、キャッシュアクセスのレイテンシに近い値まで短くすることができる。
【０００３】
キャッシュのラインの情報が要求される前に、プリフェッチャを使用して、当該ラインに情報が入力される。プリフェッチャは、プロセッサで実行されているアプリケーションに関連するメモリ要求を監視し、監視した要求を使用して、メモリ領域内の特定のメモリアドレスのシーケンス（一般にストリームと呼ばれる）にプロセッサがアクセスする可能性があると判別又は予測する。プリフェッチャは、複数のストリームを追跡し続け、異なるストリームのデータを個別にプリフェッチする。
【０００４】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【０００５】
【図１】特定の実施形態による、データキャッシュ領域プリフェッチャを使用するシステムのハイレベルブロック図である。
【図２】特定の実施形態による、データキャッシュ領域プリフェッチャのハイレベルブロック図である。
【図３】特定の実施形態による、データキャッシュ領域プリフェッチャ用のラインエントリテーブル構造内のラインエントリのブロック図及びフロー図である。
【図４】特定の実施形態による、データキャッシュ領域プリフェッチャ内の領域履歴テーブル構造のフロー図である。
【図５Ａ１】特定の実施形態による、データキャッシュ領域プリフェッチャと共に使用する方法の例示的なフロー図である。
【図５Ａ２】特定の実施形態による、データキャッシュ領域プリフェッチャと共に使用する方法の例示的なフロー図である。
【図５Ｂ】特定の実施形態による、データキャッシュ領域プリフェッチャと共に使用する方法の例示的なフロー図である。
【図６】１つ以上の開示された実施形態を実装することができる例示的なデバイスのブロック図である。
【発明を実施するための形態】
【０００６】
本明細書では、データキャッシュ領域プリフェッチャについて説明する。データキャッシュ領域プリフェッチャは、（例えば、ロード命令又はストア命令に応じて）プログラムによって生成されたキャッシュアクセスパターンを認識し、データに対する将来の要求の可能性を予想して当該データをメインメモリからデータキャッシュにコピーするプリフェッチ要求を発行する。特に、データキャッシュ領域プリフェッチャは、所定の命令がデータラインにアクセスした後に、最初にアクセスされたデータラインの所定の範囲内に存在する他のデータラインがその後にアクセスされるパターンを検出しようと試みる。最初にアクセスされたデータラインを含むデータラインの所定の範囲が領域と呼ばれ、各領域は、命令ポインタレジスタ（ＲＩＰ）でタグ付けされる。各領域に関連するパターンは、同じＲＩＰによる後続のアクセスのデータラインをプリフェッチするために使用される。
【０００７】
図１は、特定の実施形態による、データキャッシュ領域プリフェッチャ１６０を使用する処理システム１００のハイレベルブロック図である。処理システム１００は、メインメモリ１１０に記憶されている命令又はデータにアクセスするように構成されたプロセッサ１０５を含む。プロセッサ１０５は、命令を実行し又はデータを操作するために使用される少なくとも１つのコア１１５と、階層（又は、マルチレベル）型のキャッシュシステム１１７と、を含み、キャッシュシステム１１７は、選択された命令又はデータをキャッシュシステム１１７に記憶することによって、命令又はデータへのアクセスを高速化する。説明する処理システム１００は例示であり、本開示の範囲から逸脱することなく他のアーキテクチャ及び構成を実装することができる。
【０００８】
キャッシュシステム１１７は、メインメモリ１１０に記憶されている命令又はデータのコピーを記憶するレベル２（Ｌ２）キャッシュ１２０を含む。一実施形態では、Ｌ２キャッシュ１２０は、メインメモリ１１０に対して１６ウェイアソシアティブであるため、メインメモリ１１０内の各ラインは、Ｌ２キャッシュ１２０内の１６の特定のライン（通常、「ウェイ」と呼ばれる）との間でコピーすることができる。Ｌ２キャッシュ１２０は、メインメモリ１１０と比較して小型で高速なメモリ要素を使用して実装される。Ｌ２キャッシュ１２０は、（メインメモリ１１０と比較して）論理的又は物理的にコア１１５の近くに配置されるため、コア１１５とＬ２キャッシュ１２０との間では、より迅速又はより短いレイテンシで情報を交換することができる。
【０００９】
また、キャッシュシステム１１７は、メインメモリ１１０又はＬ２キャッシュ１２０に記憶されている命令又はデータのコピーを記憶するＬ１キャッシュ１２５を含む。Ｌ１キャッシュ１２５は、Ｌ２キャッシュ１２０と比較して小型で高速なメモリ要素を使用して実装されているので、Ｌ１キャッシュ１２５のラインに記憶されている情報を、プロセッサ１０５によって迅速に取得することができる。また、Ｌ１キャッシュ１２５は、（メインメモリ１１０及びＬ２キャッシュ１２０と比較して）論理的又は物理的にコア１１５の近くに配置されるため、コア１１５とＬ１キャッシュ１２５との間では、（メインメモリ１１０とＬ２キャッシュ１２０との間の通信と比較して）より迅速又はより短いレイテンシで情報を交換することができる。一実施形態では、Ｌ０キャッシュ、Ｌ１キャッシュ、Ｌ２キャッシュ及びＬ３キャッシュ等の要素を含む異なるマルチレベルのキャッシュが使用される。いくつかの実施形態では、上位レベルのキャッシュは、１つ以上の下位レベルのキャッシュを含み、これにより、下位レベルのキャッシュ内のラインは、包含的な上位レベルのキャッシュにも記憶されている。
【００１０】
Ｌ１キャッシュ１２５は、Ｌ１−Ｉキャッシュ１３０及びＬ１−Ｄキャッシュ１３５と呼ばれる、命令及びデータを記憶するレベル１（Ｌ１）キャッシュに分けられている。Ｌ１キャッシュ１２５を、命令のみを記憶するＬ１−Ｉキャッシュ１３０と、データのみを記憶するＬ１−Ｄキャッシュ１３５と、に分離又は分割することによって、これらのキャッシュの各々を、命令又はデータを要求する可能性があるエンティティの近くに配置することができる。結果として、この構成は、競合、ワイヤ遅延を低減し、命令及びデータに関連する全体的なレイテンシを短縮する。一実施態様では、置換ポリシーは、Ｌ１−Ｉキャッシュ１３０内のラインをＬ２キャッシュ１２０からの命令に置き換え、Ｌ１−Ｄキャッシュ１３５内のラインをＬ２キャッシュ１２０からのデータに置き換えることを指示する。
【００１１】
また、プロセッサ１０５は、データを、キャッシュ１２５，１３０，１３５のうち１つ以上のキャッシュのデータラインに配置するために使用される、ストリームプリフェッチャ１５０とデータキャッシュ領域プリフェッチャ１６０とを含む。ストリームプリフェッチャ１５０及びデータキャッシュ領域プリフェッチャ１６０は、プロセッサ１０５内の別々の要素として示されているが、ストリームプリフェッチャ１５０及びデータキャッシュ領域プリフェッチャ１６０は、他の要素の一部として実装することができる。一実施形態では、ストリームプリフェッチャ１５０及びデータキャッシュ領域プリフェッチャ１６０は、ハードウェアプリフェッチャである。一実施形態では、ストリームプリフェッチャ１５０及びデータキャッシュ領域プリフェッチャ１６０は、コア１１５で実行されているアプリケーションに関連するメモリ要求を監視する。例えば、ストリームプリフェッチャ１５０及びデータキャッシュ領域プリフェッチャ１６０は、キャッシュヒット又はキャッシュミスを生じさせるメモリ要求（例えば、データラインアクセス）を監視し、キャッシュヒット又はキャッシュミスは、ミスアドレスバッファ（ＭＡＢ）１４５に記録される。ストリームプリフェッチャ１５０及びデータキャッシュ領域プリフェッチャ１６０の両方は、コア１１５が、メインメモリ１１０内の特定のメモリアドレスのシーケンス（名目上、ストリームと呼ばれる）にアクセスする可能性があると判別又は予測するが、各プリフェッチャは、各アクセスを異なる方法で処理する。
【００１２】
ストリームプリフェッチャ１５０は、コア１１５による２回以上の連続的且つシーケンシャルなメモリアクセスを検出する。シーケンスの方向は、シーケンシャルなメモリアクセスの時系列に基づいて決定され、コア１１５は、この方向を使用して、現在又は以前のシーケンシャルなメモリアクセスに基づいて推定すること（extrapolating）によって、将来のメモリアクセスを予測する。次に、ストリームプリフェッチャ１５０は、予測された位置の情報をメインメモリ１１０からフェッチし、この情報を適切なキャッシュに記憶して、コア１１５によって要求される前に当該情報を利用可能な状態にする。
【００１３】
概して、データキャッシュ領域プリフェッチャ１６０は、データキャッシュミスが発生した場合に領域を生成する。各領域は、各データキャッシュミスに近接する所定範囲のデータラインを含み、関連するＲＩＰでタグ付けされている。次に、データキャッシュ領域プリフェッチャ１６０は、後続のメモリ要求を、既存の領域毎に所定範囲のデータラインと比較する。一致する毎に、データキャッシュ領域プリフェッチャ１６０は、アクセスビットを設定し、設定したアクセスビットに基づいて、擬似ランダムアクセスパターンを識別しようと試みる。次いで、データキャッシュ領域プリフェッチャ１６０は、擬似ランダムアクセスパターンが発生する頻度を追跡するために、適切なカウンタをインクリメント又はデクリメントする。（例えば、予め設定された閾値に基づいて）擬似ランダムアクセスパターンが頻繁に発生する場合、データキャッシュ領域プリフェッチャ１６０は、同じＲＩＰを有するメモリ要求が処理される場合に、当該ＲＩＰの擬似ランダムアクセスパターンに従ってデータラインをプリフェッチする。
【００１４】
一実施形態では、ストリームプリフェッチャ１５０とデータキャッシュ領域プリフェッチャ１６０との間には、フィードバックが存在する。このフィードバックは、ストリームプリフェッチャ１５０を抑制するために使用される。例えば、フラグを有効にすることによって、データキャッシュ領域プリフェッチャ１６０は、本明細書で後述するように、ストリームプリフェッチャ１５０が、保留中のデータキャッシュ領域プリフェッチ要求を有する新たに生成されたストリームに対して作用するのをブロックすることができる。
【００１５】
図２は、特定の実施形態による、データキャッシュ領域プリフェッチャ２００のハイレベルブロック図である。データキャッシュ領域プリフェッチャ２００は、領域履歴テーブル２１０（トレーニング構造によって占められるバッキング構造である）に接続されたラインエントリテーブル２０５（トレーニング構造である）を含む。本明細書で説明するテーブルエントリの数及びフィールドのサイズは、例示的なものに過ぎず、本開示の範囲から逸脱することなく他の値を使用することができる。
【００１６】
ラインエントリテーブル２０５は、所定数のラインエントリ２１５を含む。一実施形態では、ラインエントリテーブル２０５は、３２個のエントリを含む。各ラインエントリ２１５は、ＲＩＰフィールド２２０と、データラインのアドレスフィールド２２２と、アクセスビットフィールド２２４と、第２ラインアクセスビットフィールド２２６と、を含む。一実施形態では、ＲＩＰフィールド２２０は、２０ビットのフィールドであり、アドレスフィールド２２２は、４４ビットのフィールドであり、アクセスビットフィールド２２４は、１１ビットのフィールドであり、第２ラインアクセスビットフィールド２２６は、３ビットのフィールドである。一実施形態では、ラインエントリテーブル２０５は、連想メモリ（ＣＡＭ）を使用して実装される。
【００１７】
領域履歴テーブル２１０は、ＲＩＰ［１９：０］及びＡｄｄｒ［５：４］（後者は、オフセットとも呼ばれる）の９ビットのハッシュを使用して一実施形態においてインデックスされた所定数の領域履歴エントリ２３０を含む。一実施形態では、領域履歴テーブル２１０は、５１２個のエントリを含む。各領域履歴テーブルエントリ２３０は、アクセスビット／カウンタフィールド２３８を有し、アクセスビット／カウンタフィールド２３８内の各ビット（ビット０を除く）は、２ビットのカウンタを有する。一実施形態では、アクセスビット／カウンタフィールド２３８は、それぞれ２ビットのカウンタを有する１１個のエントリで構成された２２ビットの２次元配列又はデータ構造である。一実施形態では、２ビットのカウンタは、アップ／ダウンカウンタである。
【００１８】
プロセッサからのメモリ要求又はデータラインアクセスは、データキャッシュミス時にラインエントリテーブル２０５に挿入され、領域が生成される。各領域のＲＩＰフィールド２２０及びアドレスフィールド２２２には、ミスが発生したメモリ要求の各々に関連するＲＩＰ及びアドレスが配置される。各領域は、データキャッシュミスが発生したメモリ要求に近接する所定範囲のデータラインによって定義される。アクセスビットフィールド２２４は、所定範囲のデータライン内のデータライン毎のビットを含む。アクセスビットフィールド２２４内の所定の位置又はビットは、ホームポジション又はホームビットとして指定される。ホームビットは、データキャッシュミスが発生し、特定の領域を生成したメモリ要求に対応する。例示的な実施形態では、所定範囲は１０データラインであり、当該範囲は、ホームビットから＋６データライン及び−４データラインに及び、ホームビットは、ビット０又はポジション０である。後続のメモリ要求が所定範囲のデータラインに存在するかどうかを判別するために、後続のメモリ要求が（例えば、ＣＡＭを使用して）比較される。対応するビットは、所定範囲内の後続のメモリ要求毎に、領域内のアクセスビットフィールド２２４に設定される。
【００１９】
アクセスビットをアクセスビットフィールド２２４に設定することによって、データラインを潜在的にプリフェッチするために領域履歴テーブル２１０によって使用される疑似ランダムパターンを確立する。特に、ラインエントリテーブル２０５内のメモリ要求が、期限切れになり、アクセスビットフィールド２２４内のいくつかのビットの設定によって確立された有効なパターンを有する場合、当該メモリ要求は、領域履歴テーブル２１０にエビクトされ、上述したフィールドが占められる。第２ラインアクセスビットフィールド２２６は、擬似ランダムパターンが２つ以上の連続的且つシーケンシャルなメモリアクセス（すなわち、無効なパターン）を示すかどうかを判別するために使用され、この場合、領域は、領域履歴テーブル２１０に移動されず、図１に示すストリームプリフェッチャ１５０によって処理される。
【００２０】
領域履歴テーブル２１０は、所定のＲＩＰ及びオフセットを有するメモリ要求の後に、確立されたパターンに従って周囲のデータラインへの要求が続いた回数を追跡する。追跡情報は、アクセスビット／カウンタフィールド２３８内の２ビットのカウンタを使用して保持される。一実施形態では、領域履歴テーブルエントリ２３０を更新する場合、アクセスビット／カウンタフィールド２３８内の個々の２ビットのアップ／ダウンカウンタがインクリメント（ラインエントリ内の対応するアクセスビットが１の場合）又はデクリメント（ラインエントリ内の対応するアクセスビットが０の場合）される。デクリメントする場合、これらの２ビットのアップ／ダウンカウンタは、０が最小である。インクリメントする場合、これらの２ビットのアップ／ダウンカウンタは、３が最大である。後続のデータキャッシュミスが新たなラインエントリを生成する場合、関連するＲＩＰ及びオフセットを使用して領域履歴テーブル２１０内の１つのエントリが選択され、次に、アクセスビット／カウンタフィールド２３８内の２ビットのカウンタが、閾値（例えば、２）と比較することによってプリフェッチが適切であるかどうかを判別するために使用される。プリフェッチが保証された場合、適切な情報又は関連する情報が領域プリフェッチ生成ユニット２５０に送信されて、プリフェッチ要求が生成され、次に、プリフェッチ要求が、プリフェッチ要求先入れ先出し（ＦＩＦＯ）バッファ（図示省略）に送信される。
【００２１】
図３は、特定の実施形態による、データキャッシュ領域プリフェッチャ用のラインエントリテーブル構造内のラインエントリ３００のブロック図及びフロー図である。各ラインエントリ３００は、ＲＩＰフィールド３０５と、データキャッシュミスのアドレスフィールド３１０と、アクセスビットフィールド３１５と、第２（２ｎｄ）ラインアクセスビットフィールド３２０と、を含む。一実施形態では、ＲＩＰフィールド３０５は、２０ビットのフィールドであり、アドレスフィールド３１０は、４４ビットのフィールドであり、アクセスビットフィールド３１５は、１１ビットのフィールドであり、第２ラインアクセスビットフィールド３２０は、３ビットのフィールドである。一実施形態では、アクセスビットフィールド３１５は、＋６データラインから−４データラインまでのデータキャッシュ領域プリフェッチャの範囲を表しており、ビット０は、データキャッシュミス（上述したように「ホーム」と指定される）に関連するデータライン又はアドレスである。
【００２２】
第２ラインアクセスビットフィールド３２０は、ホームに対する２つ以上の連続的且つシーケンシャルなメモリアクセスが存在するかどうかを判別するために使用される。すなわち、第２ラインアクセスビットフィールド３２０は、シーケンシャル（ストライド＝＋１又は−１のキャッシュライン）ストリームと、他の非シーケンシャルアクセスパターンと、を区別するために使用される。シーケンシャルストリームは、そのアクセスが次のシーケンシャル（＋／−１）キャッシュラインに対するものである場合、ストリーム／領域に対する２番目のアクセスでトレーニングを行う。ストリームプリフェッチャは、領域履歴テーブルから除外されたシーケンシャルストリームを処理する。特に、第２ラインアクセスビット＋１及び−１が設定されている場合、対応するストリーム又は関連領域は、領域履歴テーブルに移動されない。領域への２番目のアクセスが次のシーケンシャル（＋／−１）キャッシュラインに対するものではない場合、第２ラインアクセスビット０が設定される。第２ラインアクセスビット０は、領域に対する２番目のアクセスが次のシーケンシャル（＋／−１）キャッシュラインに対するものではなかったことを示している。非シーケンシャルなアクセスパターンを有するラインエントリは、領域履歴テーブルに含まれる候補である。
【００２３】
動作上、データキャッシュ（Ｄｃ）ミスステータスが、ラインエントリテーブルへの入力として使用される（ステップ３５０）。本明細書で説明するように、既存の領域を更新しないデータキャッシュミスの各々は、新たなラインエントリ３００に入力される新たな領域を生成し、適切なフィールドが、本明細書で説明するように入力される（ステップ３５２）。古いラインエントリ３００は、最長未使用時間（least-recently-used）置換アルゴリズムに従ってエビクトされる。古いラインエントリ３００内のアクセスビットフィールド３１５及び第２ラインアクセスビットフィールド３２０に有効なパターンが存在する場合、古いラインエントリ３００を使用して領域履歴テーブルが更新される（ステップ３５４）。
【００２４】
図４は、特定の実施形態による、データキャッシュ領域プリフェッチャ内の領域履歴テーブル４０５のフロー図４００である。領域履歴テーブル４０５は、ＲＩＰであって、オフセットインデックスされた複数の領域履歴テーブルエントリ４１０を含む。各領域履歴テーブルエントリ４１０は、内部のビット毎に２ビットのカウンタを含むアクセスビット／カウンタフィールド４１６を有している。一実施形態では、アクセスビット／カウンタフィールド４１６は、それぞれ２ビットのカウンタを有する１１個のエントリで構成された２２ビットの２次元配列又はデータ構造である。アドレスオフセット４１４（アドレスビット５及び４を有するオクトワードのオフセットとして示されている）を使用して、複数の異なるラインアクセスパターンを領域履歴テーブル４０５に記憶することができ、これにより、６４バイトのキャッシュライン内の何れの位置に最初のデータラインアクセス（すなわち、ホームビット）が存在するかに基づいて、所定のＲＩＰに対して複数の異なるデータラインアクセスパターンをプリフェッチすることができる。領域内の最初のデータアクセスがデータラインの始め又は終わりに近い場合、追加のデータライン又は異なるパターンのデータラインのプリフェッチを必要とする場合がある。より具体的には、領域プリフェッチャは、システムメモリの領域に対してプログラムによって行われたロード／ストアメモリアクセスの擬似ランダムシーケンスを追跡する。これらのロード／ストアメモリアクセスは、通常、４、８又は１６バイトであり、通常６４バイトであるキャッシュラインよりもはるかに小さい。領域プリフェッチャは、これらのロード／ストアメモリアクセスを、領域を生成した最初のメモリアクセスキャッシュミスを囲む６４Ｂのキャッシュラインの第２のより粗い擬似ランダムパターンにマッピングする。この第２のより粗い擬似ランダムパターンは、ラインアクセスビットである。
【００２５】
ロード／ストアメモリアクセスの擬似ランダムシーケンスが一貫していると仮定しても、同じアドレスオフセットがメモリ領域からメモリ領域へと使用され、これらの４、８又は１６バイトのメモリアクセスの６４Ｂキャッシュラインへのマッピング（ラインアクセスビット）は、領域を生成した最初のメモリアクセスキャッシュミスがキャッシュラインの始め、中間又は終わりの何れに対するものであったかに応じて、異なる。
【００２６】
最初のメモリアクセスのアドレスオフセット４１４（Ａｄｄｒ［５：４］）を、領域履歴テーブルにアクセスするのに使用されるインデックスに含めることによって、６４Ｂのキャッシュライン境界に対するシステムメモリ内の領域のアライメントに基づいて、複数の異なるラインアクセスパターンを、同じＲＩＰについて領域履歴テーブルに記憶することが可能になる。
【００２７】
動作上、古いラインエントリ３００がラインエントリテーブルからエビクトされ、古いラインエントリ３００内のアクセスビットフィールド３１５及び第２ラインアクセスビットフィールド３２０に有効なパターンが存在する場合、古いラインエントリ３００を使用して、領域履歴テーブルが更新される（ステップ４２０）。特に、古いラインエントリ３００の所定のＲＩＰ及びアドレスオフセットは、領域履歴テーブル４０５から領域履歴テーブルエントリ４１０を読み出すためのインデックスとして使用される。アクセスビット／カウンタフィールド４１６内の２ビットのカウンタは、所定のＲＩＰ及びアドレスオフセットが確立されたパターンに従う回数を追跡するために使用される。古いラインエントリ３００のアクセスビットフィールド３１５内の各ビットが調べられる。ラインアクセスビットフィールド３１５が１である場合、データキャッシュ領域プリフェッチャは、領域履歴ラインテーブル４１０のアクセスビット／カウンタフィールド４１６内の対応する２ビットのカウンタをインクリメントする。ラインアクセスビットフィールド３１５が０である場合、データキャッシュ領域プリフェッチャは、領域履歴ラインテーブル４１０のアクセスビット／カウンタフィールド４１６内の対応する２ビットのカウンタをデクリメントする。
【００２８】
後続のデータキャッシュミスが新たなラインエントリ３００を生成する場合、新たなラインエントリ３００に関連するＲＩＰ及びアドレスオフセットは、領域履歴テーブル４０５から領域履歴テーブルエントリ４１０を読み出すためのインデックスとして使用される。次に、データキャッシュ領域プリフェッチャは、アクセスビット／カウンタフィールド４１６内の２ビットのカウンタの各々を調べる。カウンタが閾値（例えば、２）を超える場合、データキャッシュ領域プリフェッチャは、対応するキャッシュラインオフセットに対する領域プリフェッチ要求を生成する（ステップ４２４）。これらのキャッシュラインオフセットは、新たなラインエントリ３００のホームアドレスに対するものである。生成された領域プリフェッチ要求は、データキャッシュプリフェッチ要求キューに配置される（ステップ４２６）。
【００２９】
図５Ａ１及び図５Ａ２は、特定の実施形態による、データキャッシュ領域プリフェッチャと共に使用する方法の例示的なフロー図５００である。データキャッシュ領域プリフェッチャは、データキャッシュミス発生時にメモリ要求を受信する（ステップ５０５）。メモリ要求は、ラインエントリテーブル内の全てのラインエントリと比較される（ステップ５１０）。一致がある場合、ラインエントリテーブル内に適切なビットが設定される（ステップ５１２）。一致がない場合、新たな領域が生成され、ラインエントリテーブル内のラインエントリに入力される（ステップ５１５）。この時点で、１）図５Ａ１及び図５Ａ２で説明するように領域履歴テーブルを更新すること、及び、２）図５Ｂで説明するように領域プリフェッチ要求を生成すること（図５Ａ１において「Ｂ」で示される）、という２つの異なるプロセス分岐が発生する。さらに、図５Ａ１及び図５Ａ２を参照すると、ホームビットがメモリ要求のアドレスに設定され、ＲＩＰがラインエントリに記憶される（ステップ５１７）。後続のメモリ要求を調べて、これらがメモリ要求の所定範囲内に存在するかどうかが判別される（ステップ５１９）。後続のメモリ要求が所定範囲内に存在する場合、特定のラインアクセスビットが特定の領域のラインエントリに設定される（ステップ５２１）。後続のメモリ要求が所定範囲内に存在しない場合、新たな領域が生成される（ステップ５２２）。
【００３０】
新たなラインエントリが生成されている場合、所定の時点で各ラインエントリが期限切れになる（ステップ５２３）。この時点で、ラインアクセスビットが調べられ、何れのパターンが存在するかが判別される（ステップ５２５）。検出されたパターンが連続的且つシーケンシャルである場合（例えば、ホームビットに対して昇順または降順のパターンが存在する場合）、ラインエントリが破棄される（ステップ５２７）。一実施形態では、データキャッシュ領域プリフェッチャは、（（第２ラインアクセスビット［＋１］及びラインアクセスビット［＋６：＋１］（全て１に設定される））が１である）、又は、（（第２ラインアクセスビット［−１］且つラインアクセスビット［−１：−４］（全て１に設定される））が１である）場合に、これらのラインエントリを破棄する。検出されたパターンが擬似ランダムである場合（ステップ５２９）（例えばビット６、２及び３が設定されている場合）、ラインエントリを、メモリ要求のＲＩＰ及びアドレスオフセットをインデックスとして用いて領域履歴テーブルに移動するために準備する（ステップ５３１）。すなわち、ラインエントリのＲＩＰ及びアドレスオフセットは、領域履歴テーブルからエントリを読み出すためのインデックスとして使用される。ラインエントリ内の対応するアクセスビットが１に設定されている場合、データキャッシュ領域プリフェッチャは、特定のカウンタをインクリメントする（ステップ５３７）。ラインエントリ内の対応するアクセスビットが０に設定されている場合、データキャッシュ領域プリフェッチャは、特定のカウンタをデクリメントする。検出されたパターンが擬似ランダムではない場合、ラインエントリは、他の処理を行う他のプリフェッチャ又はモジュールによって処理される（ステップ５３２）。
【００３１】
ここで、図５Ｂを参照すると、新たなエントリのＲＩＰ及びオフセット（図４において、アドレスビット５及び４を有するオクトワードオフセットとして示されている）を使用して、領域履歴テーブルを読み込む（ステップ５５０）。次に、データキャッシュ領域プリフェッチャは、領域履歴テーブルエントリのアクセスフィールド内の２ビットカウンタの各々を調べる（ステップ５５５）。カウンタが閾値を超える場合、データキャッシュ領域プリフェッチャは、領域プリフェッチ要求を生成する（ステップ５７０）。生成された領域プリフェッチ要求は、データキャッシュプリフェッチ要求キューに配置される（ステップ５７５）。カウンタが閾値を上回っていない場合、処理が続けられる（ステップ５６０）。つまり、この時点では、領域プリフェッチ要求が生成されない。
【００３２】
図６は、１つ以上の開示された実施形態のうち１つ以上の部分を実装することができる例示的なデバイス６００のブロック図である。デバイス６００は、例えば、ヘッドマウントデバイス、サーバ、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス６００は、プロセッサ６０２と、メモリ６０４と、ストレージ６０６と、１つ以上の入力デバイス６０８と、１つ以上の出力デバイス６１０と、を含む。また、デバイス６００は、入力ドライバ６１２及び出力ドライバ６１４をオプションで含むことができる。デバイス６００は、図６に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
【００３３】
プロセッサ６０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアはＣＰＵ又はＧＰＵであってもよい。メモリ６０４は、プロセッサ６０２と同じダイ上に配置されてもよいし、プロセッサ６０２とは別に配置されてもよい。メモリ６０４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ若しくはキャッシュ等の揮発性又は不揮発性メモリを含むことができる。
【００３４】
ストレージ６０６は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定又は取り外し可能なストレージデバイスを含むことができる。入力デバイス６０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含むことができる。出力デバイス６１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含むことができる。
【００３５】
入力ドライバ６１２は、プロセッサ６０２及び入力デバイス６０８と通信し、プロセッサ６０２が入力デバイス６０８から入力を受信することを可能にする。出力ドライバ６１４は、プロセッサ６０２及び出力デバイス６１０と通信し、プロセッサ６０２が出力デバイス６１０に出力を送信することを可能にする。入力ドライバ６１２及び出力ドライバ６１４は、オプションのコンポーネントであり、デバイス６００は、入力ドライバ６１２及び出力ドライバ６１４が存在しない場合であっても同様に動作することに留意されたい。
【００３６】
概して、一実施形態では、データキャッシュ領域プリフェッチャは、複数のラインエントリを有するラインエントリデータテーブルを含み、各ラインエントリは、所定数のアクセスビットにより定義された領域を含み、所定のラインエントリのアクセスビットは、領域内でキャッシュラインが要求された場合に設定される。また、データキャッシュ領域プリフェッチャは、ラインエントリデータテーブルからのエビクトを受信するように構成された領域履歴テーブルを含む。データキャッシュ領域プリフェッチャは、エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別し、所定のアクセスパターンを有するラインエントリを、領域履歴テーブルへのエビクトから除外する。一実施形態では、データキャッシュ領域プリフェッチャは、擬似ランダムアクセスパターンを有するラインエントリを領域履歴テーブルにエビクトする。一実施形態では、領域履歴テーブルは、少なくとも命令ポインタレジスタ（ＲＩＰ）を使用してインデックスされる。一実施形態では、領域履歴テーブルは、領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、同じＲＩＰに対して複数の擬似ランダムアクセスパターンをサポートするために、オフセットを使用してインデックスされる。一実施形態では、各領域履歴エントリは、所定数のアクセスビットを含み、各領域履歴エントリは、所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、カウンタは、エビクト可能なラインエントリに対しアクセスビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる。一実施形態では、データキャッシュ領域プリフェッチャは、領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値に達したという条件で、領域履歴テーブルからプリフェッチ要求を受信するように構成された領域プリフェッチジェネレータをさらに含む。一実施形態では、データキャッシュ領域プリフェッチャは、他のプリフェッチャが、データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックする。一実施形態では、各ラインエントリは、後続のキャッシュライン要求が所定数のアクセスビット内のホームビットから１アクセスビット内に存在する場合に設定される第２アクセスビットであって、領域履歴テーブルへのエビクトから除外される所定のアクセスパターンを判別するために使用される第２アクセスビットをさらに含む。
【００３７】
一実施形態では、処理システムは、ストリームプリフェッチャと、データキャッシュ領域プリフェッチャと、を含む。データキャッシュ領域プリフェッチャは、複数のラインエントリを有するラインエントリデータテーブルと、ラインエントリデータテーブルからのエビクトを受信する領域履歴テーブルと、を含む。各ラインエントリは、所定数のアクセスビットによって定義された領域を含み、所定のラインエントリのアクセスビットは、領域内でキャッシュラインが要求された場合に設定される。データキャッシュ領域プリフェッチャは、エビクト可能なラインエントリ内の特定のアクセスビットからアクセスパターンを判別し、所定のアクセスパターンを有するラインエントリを、領域履歴テーブルへのエビクトから除外し、ストリームプリフェッチャが、データキャッシュ領域プリフェッチャで保留中のストリームを処理するのをブロックする。一実施形態では、データキャッシュ領域プリフェッチャは、擬似ランダムアクセスパターンを有するラインエントリを領域履歴テーブルにエビクトする。一実施形態では、領域履歴テーブルは、少なくとも命令ポインタレジスタ（ＲＩＰ）を使用してインデックスされる。一実施形態では、領域履歴テーブルは、領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、同じＲＩＰに対して複数の擬似ランダムアクセスパターンをサポートするために、オフセットを使用してインデックスされる。一実施形態では、各領域履歴エントリは、所定数のアクセスビットを含み、各領域履歴エントリは、所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、カウンタは、各アクセスビット内にビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる。一実施形態では、システムは、領域履歴テーブル内の特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値に達したという条件で、領域履歴テーブルからプリフェッチ要求を受信するように構成された領域プリフェッチジェネレータを含む。一実施形態では、各ラインエントリは、後続のキャッシュライン要求が所定数のアクセスビット内のホームビットから１アクセスビット内に存在する場合に設定される第２アクセスビットであって、領域履歴テーブルへのエビクトから除外される所定のアクセスパターンを判別するために使用される第２アクセスビットをさらに含む。
【００３８】
一実施形態では、データキャッシュ領域プリフェッチを行う方法は、複数のラインエントリを有するラインエントリテーブルにおいてキャッシュライン要求を受信することを含み、各ラインエントリは、所定数のアクセスビットによって定義された領域を含む。キャッシュライン要求が領域内に存在する場合、所定のラインエントリに対してアクセスビットが設定される。アクセスパターンは、エビクト可能なラインエントリ内の特定のアクセスビットから判別される。所定のアクセスパターンを有するラインエントリは、領域履歴テーブルへのエビクトから除外され、擬似ランダムアクセスパターンを有するラインエントリは、領域履歴テーブルにエビクトされる。一実施形態では、領域履歴テーブルは、少なくとも命令ポインタレジスタ（ＲＩＰ）を使用してインデックスされる。一実施形態では、領域履歴テーブルは、領域への最初のアクセスがキャッシュラインの始め、終わり又は中間の何れに対するものであるかに応じて、同じＲＩＰに対して複数の擬似ランダムアクセスパターンをサポートするために、ＲＩＰとオフセットとを使用してインデックスされる。一実施形態では、各領域履歴エントリは、所定数のアクセスビット内の特定のアクセスビットのカウンタを含み、カウンタは、各アクセスビットが設定されているかどうかに応じて、インクリメント又はデクリメントされる。一実施形態では、特定の領域履歴エントリの特定のアクセスビットに関連するカウンタが閾値以上になったという条件で、プリフェッチ要求が領域プリフェッチジェネレータに送信される。一実施形態では、他のプリフェッチャが、データキャッシュ領域プリフェッチャで保留中のストリームを処理することがブロックされる。一実施形態では、各ラインエントリは、第２アクセスビットを含み、後続のキャッシュライン要求が所定数のアクセスビット内のホームビットから１アクセスビット内に存在する場合に第２アクセスビットが設定され、第２アクセスビットは、領域履歴テーブルへのエビクトから除外される所定のアクセスパターンを判別するために使用される。
【００３９】
本明細書で説明する実施形態を概して及び限定することなく、非一時的なコンピュータ可読記憶媒体は、処理システム内で実行されると、データキャッシュ領域プリフェッチを行う方法を処理システムに実行させる命令を含む。
【００４０】
本明細書における開示に基づいて多くの変形が可能であることを理解されたい。上記では、特徴及び要素が特定の組み合わせで説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で使用されてもよいし、他の特徴及び要素を伴って又は伴わずに様々な組み合わせで使用されてもよい。
【００４１】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令（このような命令は、コンピュータ可読媒体に記憶することが可能である）の結果及びネットリストを含む他の中間データを用いて製造プロセスを構成することによって製造され得る。このようなプロセスの結果は、実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００４２】
本明細書で提供された方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、例えば読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク、リムーバブルディスク等の磁気媒体、光磁気記憶媒体、例えばＣＤ−ＲＯＭディスク及びデジタル多用途ディスク（ＤＶＤ）等の光学媒体が含まれる。
【図１】
2019528532.tif 000003
【図２】
2019528532.tif 000004
【図３】
2019528532.tif 000005
【図４】
2019528532.tif 000006
【図５Ａ１】
2019528532.tif 000007
【図５Ａ２】
2019528532.tif 000008
【図５Ｂ】
2019528532.tif 000009
【図６】
2019528532.tif 000010
【国際調査報告】
2019528532.tif 000011
2019528532.tif 000012
2019528532.tif 000013