
L1、L2 キャッシュ、および DRAM では、先読みを確立できるため、シーケンシャル アクセスはランダム アクセスよりも高速ですか? もちろん、HDD では桁違いに高速であることは知っています。
答え1
はいいくつかは同じですが、完全に同じではありません。
プロセッサのマニュアルによると:-)
http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-optimization-manual.pdf
特定のハードウェア プリフェッチがあり、プログラマーはプリフェッチするように指示できます。また、意識の高いプログラマーがメリットを得られる、データのチャンク サイズでプリフェッチを動作させる方法もあります。また、同じハードウェアまたはソフトウェア メソッドを少し間違って実行すると、プリフェッチが何度も破棄される可能性があり、このようなことはプロセッサによって異なります。
必要になると想定してデータを上位レベルに移動し (先読みなど)、そのデータがそれらのレベルに移動するチャンク サイズ内にあったためにそこに存在しています (シーケンシャルであることが役立つ場合があります)。
プロセッサは、そこに格納されている命令セットや実行予定のリストを認識して、そのデータを準備します。
2.1.5.4 データ プリフェッチ データは、ソフトウェア プリフェッチ、ハードウェア プリフェッチ、またはその 2 つの組み合わせを使用して、L1 DCache に投機的にロードできます。
--
ストリーマー: このプリフェッチャーは、アドレスの昇順および降順シーケンスに対する L1 キャッシュからの読み取り要求を監視します。監視される読み取り要求には、ロードおよびストア操作とハードウェア プリフェッチャーによって開始される L1 DCache 要求、およびコード フェッチの L1 ICache 要求が含まれます。前方または後方の要求ストリームが検出されると、予測されるキャッシュ ラインがプリフェッチされます。プリフェッチされるキャッシュ ラインは、同じ 4K ページ内にある必要があります。
--
Wide Dynamic Execution
Smart Memory Access - prefetches data
Branch Prediction Unit
Instruction Fetch Unit
Instruction PreDecode
リストは、将来を見据えた多くの機能で、どんどん続きます。
リンクされたドキュメントの 60 ページから始めてください。
https://stackoverflow.com/questions/1922249/c-cache-aware-programming Stack Overflow にはさらに多くの PDF がリンクされており、そこにはそれに関するさらに多くの情報があるはずです。
これに関するデータとテクニックはここに投稿するには長すぎますし、プログラマーによる「実際の動作」も長すぎます。それだけでなく、私はほとんど理解していません。それ (およびプログラマーの情報) を読んだ後、ほぼ同じことを実行するソフトウェアが別のソフトウェアよりも 50 倍高速になるのは不思議ではありません。物事を細心の注意を払って実行し、何度もテストして究極の最適化を実現できるか、またはいくつかのことを見逃して正常になるかのどちらかです。
&いいえラムはすべて完全にランダム アクセスで、待ち時間はごくわずかです。ハード ドライブが先読みアクションを実行するために使用するのはこの「ラム」であり、バースト転送はプラッターから読み取るよりも何倍も高速です。ヘッドの移動には時間がかかり、プラッターからデータが取り出されないため、ハード ドライブでは連続性が非常に重要です。ヘッドが目的の位置に到着すると、データが回転するまで待たなければなりません。
ハード ドライブの先読みにより、同じ回転でデータを取り出すことができるため、数ミリ秒の時間を節約できます。
2 つに類似点があると仮定するのは、想像力をかなり広げることになるかもしれません :-)。