如何在GCC中禁用/启用预取?

时间:2014-10-11 00:01:01

标签: c++ c gcc

-O3是否在GCC中启用预取?如果是这样,我该如何禁用预取?是否可以选择控制预取的“侵略性”?例如,每次迭代中要预取的数据量。

1 个答案:

答案 0 :(得分:2)

根据海湾合作委员会的Data Prefetch Support网站,目前可能的选择是:

  

GCC中的现有数据预取支持包括:

     
      
  • 通用预取RTL模式。
  •   
  • 针对多个目标的特定目标支持。
  •   
  • __builtin_prefetch函数,对不支持预取的目标或尚未获取预取支持的目标不执行任何操作   已加入GCC。
  •   
  • -fprefetch-loop-arrays启用的优化,用于预取循环中使用的数组。
  •   

然后查看Optimize Options看起来-fprefetch-loop-arrays需要明确启用(也就是说,即使使用-O3也未启用)。

  

如果目标计算机支持,则生成预取指令   内存,以提高访问大型数组的循环的性能。

     

此选项可能会生成更好或更差的代码;结果很高   取决于源代码中循环的结构。

     

-Os级禁用。

请注意,GCC's C99 status page声称它目前没有考虑函数声明符(C99 6.7.5.3/7)上下文中数组的C99 static关键字。这意味着"大阵列"大小及其真正含义仅由实施控制。