当我将代码从linux移植到win32时,它会进入__builtin_prefetch()函数。
然后我发现,它的业务正在预取缓存数据。 正如gcc onlinedoc所说:如果目标不支持数据预取,则会计算地址表达式是否包含副作用但不生成其他代码且GCC不发出警告。
这意味着该功能实际上什么都不做? 所以如果我不考虑开销,我可以忽略这个功能吗?并且,在vs2008中是否有一些类似的功能,所以我可以用来替换它?
void __builtin_prefetch (const void *addr, ...);
感谢。
答案 0 :(得分:0)
如果您确实不需要它,请将其删除。显然,函数_ builtin *仅用于GCC编译器。另一方面,如果你真的需要这个功能,你很可能需要用自己的等效功能替换它。
答案 1 :(得分:0)
预取是严格的性能,你可以忽略它。
http://gcc.gnu.org/projects/prefetch.html
现代处理器大多数情况下会检测到内存的访问模式,并在预期使用(硬件预取)之前推测性地预取数据。预取的原因是CPU比内存快得多,缓存未命中需要很多周期才能进入DRAM并获取数据。 _builtin_prefetch是一个软件预取(如果您正在编译的目标机器支持它),并且只是硬件的提示,您可能需要稍后在该地址处的数据,以便获取内存请求并隐藏长延迟