2012-03-09 12 views
1

linuxからwin32にコードを移植するとき、__builtin_prefetch()関数が使用されます。__builtin_prefetch()関数を無視するか、置き換えるべきですか?

次に、そのビジネスはキャッシュデータを先読みしています。 として、:ターゲットがデータプリフェッチをサポートしていない場合、副作用が含まれていて他のコードは生成されず、GCCは警告を出さない場合、アドレス式は評価されます。

実際に何もしないことを意味しますか? 私はオーバーヘッドを考慮しない場合、私は関数を無視することはできますか?そして、vs2008にも同様の機能があるので、それを置き換えることができますか?

void __builtin_prefetch (const void *addr, ...); 

ありがとう。

答えて

0

プリフェッチは厳密にはパフォーマンス向上のためのもので、無視することはできます。

http://gcc.gnu.org/projects/prefetch.html

時間のほとんどは、最新のプロセッサは、投機的に先に予想される使用(ハードウェア・プリフェッチ)のメモリおよびプリフェッチデータへのアクセス・パターンを検出します。プリフェッチの理由はCPUがメモリよりもはるかに高速であるため、キャッシュミスはDRAMに移動してデータを取得するまでに多くのサイクルを要します。 _builtin_prefetchは、ソフトウェアのプリフェッチ(コンパイル対象のマシンがそれをサポートしている場合)であり、後でそのアドレスにデータを必要とするかもしれないことをハードウェアに伝えるヒントです。 。

0

本当に必要ない場合は削除してください。 _ の組み込み関数 *は明らかにGCCコンパイラでのみ使用されます。一方、関数が本当に必要な場合は、同等の関数で置き換える必要があります。

関連する問題