Intel 提供了一个 prefetch pragma;例如
#pragma prefetch a
for(i=0; i<m; i++)
a[i]=b[i]+1;
将a
提前预取一定数量的循环周期,由编译器确定。
但是如果a
不是一个数组而是一个[]
被覆盖的类呢?如果operator[]
做一个简单的数组访问,这种方式还可以使用预取吗?
(大概这个问题也适用std::vectors
)。
Intel 提供了一个 prefetch pragma;例如
#pragma prefetch a
for(i=0; i<m; i++)
a[i]=b[i]+1;
将a
提前预取一定数量的循环周期,由编译器确定。
但是如果a
不是一个数组而是一个[]
被覆盖的类呢?如果operator[]
做一个简单的数组访问,这种方式还可以使用预取吗?
(大概这个问题也适用std::vectors
)。
找出答案的一种方法是尝试它并查看程序集。如果有的话,只需在有和没有编译指示的情况下对其进行基准测试。但是,我不确定 prefetch pragma 是否是您想要的:
只有 Intel® Itanium® 处理器支持 prefetch pragma。
你真的是为安腾写这个吗?
在 x86/x64 系统上,像顺序内存访问这样的简单循环已经被硬件预取器很好地处理了。因此,进行手动预取可能根本没有帮助。
有关预取示例,请参见此处:预取示例?