をいただければ幸いです。
私が知る限り、ハードウェアプリフェッチャは、現在のインテルプロセッサ上のページ境界を越えてキャッシュラインをプリフェッチするべきではありません。インテルのIntel® 64 and IA-32 Architectures Optimization Reference Manualから
、セクション7.5.2、ハードウェアプリフェッチ:
自動ハードウェア・プリフェッチは、前のデータのミスに基づいて統一の最後のレベルのキャッシュにキャッシュラインをもたらすことができます。プリフェッチストリームの前に2つのキャッシュラインをプリフェッチしようとします。ハードウェアのプリフェッチャの特徴は以下のとおりです。
- [...]それは4Kバイトのページ境界を越えてプリフェッチしません
- 。プログラムは、ハードウェアプリフェッチャーが新しいページからプリフェッチを開始する前に、新しいページのデマンドロードを開始する必要があります。段落の上
は "統一最後のレベルのキャッシュ" について話しているが、物事はL1dの土地ではない方が良いです。
2.3.5.4、データのプリフェッチ
データL1データ・キャッシュへのプリフェッチ
データ・プリフェッチは、次の条件が満たされた場合にロード操作によってトリガーされます。
またはL2で:L2キャッシュおよび最終レベル・キャッシュにメモリから
次の2つのハードウェアプリフェッチャフェッチデータ:
空間プリフェッチャ:[...]
ストリーマ:このプリフェッチャは、L1キャッシュからのアドレスの昇順および降順の読み取り要求を監視します。モニターされた読み取り要求には、ロード操作とストア操作によって開始されたL1 DCache要求と、ハードウェアプリフェッチャーによって開始されたL1 DCache要求、およびコードフェッチのためのL1 ICache要求が含まれます。順方向ストリームまたは逆方向ストリームの要求が検出されると、予想されるキャッシュラインがプリフェッチされる。プリフェッチされたキャッシュラインは、同じ4Kページ内になければなりません。
ただし、プロセッサがページングデータをプリフェッチすることがあります。インテルのIntel® 64 and IA-32 Architectures Software Developer Manualsから、ボリューム3A、4.10.2.3、TLBの使用の詳細:
プロセッサはプリフェッチのために、実際に実行で発生することはない投機的実行の結果であるアクセスに必要な翻訳をキャッシュすることができますコードパス。
ボリューム3A、4.10.3.1、ページング構造ためキャッシュ:
投機の結果であるプリフェッチするために必要な翻訳のためにページング構造キャッシュおよびアクセスのためのエントリを作成することができるプロセッサ実行されたコードパスでは決して実際には実行されません。古いマイクロアーキテクチャで
、PREFETCHデータ変換索引バッファ(DTLB)を引き起こす:私はあなたが、ハードウェアのプリフェッチについて尋ね、知っていますが、データのために(ない命令)ソフトウェア・プリフェッチを使用することができるはず
ミスはなくなるだろう。 Nehalem、Westmere、Sandy Bridge、および新しいマイクロアーキテクチャ、Intel Core 2プロセッサ、およびIntel Atomプロセッサに基づくプロセッサでは、DTLBミスを引き起こすPREFETCHは、ページ境界を越えてフェッチされます( )。
通常、キャッシュラインは仮想アドレスページより小さいサイズではありませんか?これは、キャッシュラインが仮想ページの境界を横切らないので疑問に思うでしょう。 –
@ChristopherOezbekいいえ、プリフェッチする可能性があります – harold
@haroldプリフェッチがキャッシュライン上で動作していませんか? –