「__builtin_prefetch: 読み取り範囲の解読」
「__builtin_prefetch」は、コンパイラーにデータをプリロードするよう指示するために使用される C/C コンパイラー組み込みです。キャッシュ メモリに保存されるため、そのデータにアクセスする待ち時間が短縮されます。ただし、その正確な動作、特に構造体の内容のプリフェッチに関しては、混乱を招く可能性があります。
「__builtin_prefetch」について提供されているドキュメントには、ライン キャッシュをプリフェッチすると記載されていますが、このライン キャッシュのサイズは、プロセッサによって異なります。構造全体をプリフェッチする場合、「__builtin_prefetch」は通常、構造の最初の数行のキャッシュ ラインのみをプリフェッチします。
たとえば、指定されたコードのループを考えてみましょう:
for (int i = from; i < to; i++) { particle* from = con[i].Pfrom; particle* to = con[i].Pto; // Assume particle has 8 double values }
このループでは、「__builtin_prefetch (con[i].Pfrom)」はパーティクル構造の最初の 8 つの double のみをプリフェッチします。パーティクル構造に 8 つを超える double が含まれている場合、残りの値はプリフェッチされません。
追加の値をプリフェッチするには、複数の「__builtin_prefetch」組み込み関数を使用できます。たとえば、「__builtin_prefetch (con[i 3].Pfrom)」は、con[i 3].Pfrom にあるパーティクル構造の最初の 8 つの double をプリフェッチします。
ただし、「__builtin_prefetch」を使用することが重要です。賢明に。過度に使用すると、実際にはパフォーマンスが低下する可能性があります。コードに対する「__builtin_prefetch」の影響を測定し、大きな利点が得られる場合にのみ使用することをお勧めします。
最新のプロセッサとコンパイラは、キャッシュ処理を大幅に改善しました。その結果、「__builtin_prefetch」の有効性が低下しました。ただし、特定の状況では、特に複雑なデータ構造や予測可能なパターンでアクセスされる大規模な配列の場合には、依然として有用です。 「__builtin_prefetch」が価値があるかどうかを判断するには、常にベンチマークを推奨します。
以上が「__builtin_prefetch」は実際にどのくらいのデータをロードしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。