英特尔帮助提供预取编译指示;例如
#pragma prefetch a
for(i=0; i<m; i++)
a[i]=b[i]+1;
将提前预取a
一定数量的循环周期,由编译器确定。
但是,如果a
不是数组而是覆盖了[]
的类,该怎么办?如果operator[]
执行简单的数组访问,是否仍可以这种方式使用预取?
(大概这个问题也适用于std::vectors
。
答案 0 :(得分:2)
找到答案的一种方法是尝试并查看装配。如果还有其他任何事情,只需使用pragma进行基准测试即可。但是,我不确定prefetch pragma是否是你想要的:
预读取编译指示仅受英特尔®安腾®处理器支持。
你真的在为Itanium编写这个吗?
在x86 / x64系统上,硬件预取器已经很好地处理了具有顺序存储器访问的简单循环。因此,手动预取可能毫无帮助。
请参阅此处获取预取示例:Prefetching Examples?