8

Intel 提供了一个 prefetch pragma;例如

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

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

但是如果a不是一个数组而是一个[]被覆盖的类呢?如果operator[]做一个简单的数组访问,这种方式还可以使用预取吗?

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

4

1 回答 1

2

找出答案的一种方法是尝试它并查看程序集。如果有的话,只需在有和没有编译指示的情况下对其进行基准测试。但是,我不确定 prefetch pragma 是否是您想要的:

只有 Intel® Itanium® 处理器支持 prefetch pragma。

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

你真的是为安腾写这个吗?

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

有关预取示例,请参见此处:预取示例?

于 2011-09-14T13:24:12.380 回答