如何使用英特尔预取pragma时,数据隐藏在一个对象

How to use intel prefetch pragma when data hidden inside an object?

本文关键字:数据 隐藏 一个对象 何使用 英特尔 预取 pragma      更新时间:2023-10-16

Intel提供了一个预取pragma;例如

#pragma prefetch a
for(i=0; i<m; i++)
  a[i]=b[i]+1;

将提前预取a一定数量的循环周期,由编译器决定。

但是如果a不是一个数组,而是一个类与[]覆盖?如果operator[]做一个简单的数组访问,还可以这样预取吗?

(大概这个问题也适用于std::vectors)

找到答案的一种方法是尝试并查看程序集。如果有的话,只要在有和没有pragma的情况下对它进行基准测试。然而,我不确定是否预取pragma是你想要的:

只有Intel®Itanium®处理器支持预取。

http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/cref_cls/common/cppref_pragma_prefetch_noprefetch.htm

你真的是在为安腾写这篇文章吗?

在x86/x64系统上,像顺序内存访问这样的简单循环已经被硬件预取器很好地处理了。因此,手动预取可能根本没有帮助。

查看这里的预取示例:prefetch Examples?