当数据隐藏在对象内时如何使用intel prefetch pragma?

时间:2011-09-14 11:41:47

标签: c++ memory-management intel pragma prefetch

英特尔帮助提供预取编译指示;例如

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

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

但是,如果a不是数组而是覆盖了[]的类,该怎么办?如果operator[]执行简单的数组访问,是否仍可以这种方式使用预取?

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

1 个答案:

答案 0 :(得分:2)

找到答案的一种方法是尝试并查看装配。如果还有其他任何事情,只需使用pragma进行基准测试即可。但是,我不确定prefetch pragma是否是你想要的:

  

预读取编译指示仅受英特尔®安腾®处理器支持。

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

你真的在为Itanium编写这个吗?

在x86 / x64系统上,硬件预取器已经很好地处理了具有顺序存储器访问的简单循环。因此,手动预取可能毫无帮助。

请参阅此处获取预取示例:Prefetching Examples?