-O3是否在GCC中启用预取?如果是这样,我该如何禁用预取?是否可以选择控制预取的“侵略性”?例如,每次迭代中要预取的数据量。
答案 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
关键字。这意味着"大阵列"大小及其真正含义仅由实施控制。