プリフェッチは、データや命令が必要になる前に取得することでパフォーマンスを向上させるためにコンピューティングで使用される技術です。プログラムが将来何を要求するかを予測することで、システムは情報を事前にロードして待ち時間を短縮できます。[ 1 ]
プリフェッチは、 CPUアーキテクチャやオペレーティングシステムなど、コンピューティングのさまざまな分野で使用されています。ハードウェアとソフトウェアの両方で実装可能で、近いうちに必要になる可能性のあるデータを示唆するアクセスパターンを検出することに基づいています。
プリフェッチは、どのメモリ アドレスまたはリソースがアクセスされるかを予測し、キャッシュなどのより高速なアクセス ストレージにロードすることによって機能します。[ 1 ]
プリフェッチが使用される場合があります。
プロセッサ(CPU)には、実行中のプログラムから要求される前にデータをキャッシュにロードすることでキャッシュミスを減らすプリフェッチ機能が含まれていることがよくあります。これは、配列を反復処理するループなど、予測可能なパターンでメモリにアクセスするプログラム向けです。[ 1 ]
ハードウェアプリフェッチはソフトウェアの介入なしに行うことができ、ほとんどの最新のCPUに搭載されています。たとえば、IntelのCPUは複数のキャッシュレベルにわたって動作するさまざまなプリフェッチ機能を備えています。[ 1 ]
プリフェッチ命令は、プログラマまたはコンパイラによってコードに記述できます。プリフェッチ命令は、プリフェッチするメモリ アドレスと必要なプリフェッチ距離を指定します。[ 2 ]
ソフトウェアには、次のような記述方法があります。
prefetchx86アーキテクチャ上__builtin_prefetchGCCコンパイラでは_mm_prefetchIntel Intrinsics Guideでオペレーティングシステムは、ファイルやメモリへのアクセス遅延を軽減するためにプリフェッチを使用します。
ウェブブラウザは、体感パフォーマンスを向上させるためにプリフェッチ技術を適用します。一般的な例としては、以下のようなものがあります。
プリフェッチはパフォーマンスを大幅に向上させることができますが、正しく実装されていない場合は必ずしも有益とは限りません。予測が不正確な場合、プリフェッチは帯域幅や処理時間を浪費したり、キャッシュ汚染を引き起こしたりする可能性があります。リソースが限られているシステムや、ワークロードが非常に予測不可能なシステムでは、プリフェッチはパフォーマンスを向上させるどころか、低下させる可能性があります。[ 1 ]
ソフトウェアとハードウェアの両方のプリフェッチを実装すると、実装方法によっては両者の間で相互作用が発生し、パフォーマンスが低下する可能性があります。[ 6 ]