処理されたデータ構造の64バイトアライメントを必要とするスレッド化されたCコードがあります。このアライメントはgcc __builtin_prefetchのようなプリフェッチ命令とどのように相互作用しますか?プリフェッチの効果は、配列されていない配列を使用する場合と同じであるかどうかアライメントされたメモリのプリフェッチ
私はmemalignを使用して配列を取得しています。
ありがとうございました。
処理されたデータ構造の64バイトアライメントを必要とするスレッド化されたCコードがあります。このアライメントはgcc __builtin_prefetchのようなプリフェッチ命令とどのように相互作用しますか?プリフェッチの効果は、配列されていない配列を使用する場合と同じであるかどうかアライメントされたメモリのプリフェッチ
私はmemalignを使用して配列を取得しています。
ありがとうございました。
この回答は実装依存性が高いです。
ただし、x86およびx86_64では、GCCは__builtin_prefetch
を1つのPREFETCH
アセンブリ命令として実装しています。
Intel's documentationによれば(「PREFETCH」を検索):
は、局所性ヒントによって指定されたキャッシュ階層内の位置にソース オペランドで指定されたバイトを含むメモリからのデータのラインをフェッチ:私はメモリオペランドがアラインされていない場合は、それが効果的になりますので...
AMDのバージョンが同じように動作しますが、私はチェックするにはあまりにも忙しい99%確信して
64バイトの倍数に切り捨てられ、そのキャッシュラインがプリフェッチされる。 (私が知っているすべての現在のCPUで64バイトですが、命令セットの参照は「最低32バイト」としか保証されていませんでした。すでに特定のCPUについて多くのことを想定していなければなりません)。
どのような言語ですか? C? C++? C#? OC? OCD? – Shaz
コードはCにあります。 – Tudor
これをタグに追加しました。あなたは今より多くのビューを取得する必要があります。 :) – Shaz