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

Sid*_*Bob 8 c++ memory-management intel pragma prefetch

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

#pragma prefetch a
for(i=0; i<m; i++)
  a[i]=b[i]+1;
Run Code Online (Sandbox Code Playgroud)

将由a编译器确定预先获取一定数量的循环周期.

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

(据推测这个问题也适用于此std::vectors).

Mys*_*ial 2

找出答案的一种方法是尝试并查看装配。如果有其他的话,只需对带有或不带有编译指示的基准进行基准测试即可。但是,我不确定预取编译指示是否是您想要的:

\n\n
\n

仅 Intel\xc2\xae Itanium\xc2\xae 处理器支持预取编译指示。

\n
\n\n

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

\n\n

您真的是为安腾而写的吗?

\n\n

在 x86/x64 系统上,硬件预取器已经可以很好地处理诸如顺序内存访问之类的简单循环。所以手动预取可能根本没有帮助。

\n\n

请参阅此处的预取示例:预取示例?

\n