我应该忽略__builtin_prefetch()函数还是替换它?

时间:2012-03-09 02:12:38

标签: c++ linux

当我将代码从linux移植到win32时,它会进入__builtin_prefetch()函数。

然后我发现,它的业务正在预取缓存数据。 正如gcc onlinedoc所说:如果目标不支持数据预取,则会计算地址表达式是否包含副作用但不生成其他代码且GCC不发出警告。

这意味着该功能实际上什么都不做? 所以如果我不考虑开销,我可以忽略这个功能吗?并且,在vs2008中是否有一些类似的功能,所以我可以用来替换它?

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

感谢。

2 个答案:

答案 0 :(得分:0)

如果您确实不需要它,请将其删除。显然,函数_ builtin *仅用于GCC编译器。另一方面,如果你真的需要这个功能,你很可能需要用自己的等效功能替换它。

答案 1 :(得分:0)

预取是严格的性能,你可以忽略它。

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

现代处理器大多数情况下会检测到内存的访问模式,并在预期使用(硬件预取)之前推测性地预取数据。预取的原因是CPU比内存快得多,缓存未命中需要很多周期才能进入DRAM并获取数据。 _builtin_prefetch是一个软件预取(如果您正在编译的目标机器支持它),并且只是硬件的提示,您可能需要稍后在该地址处的数据,以便获取内存请求并隐藏长延迟

相关问题