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

3
-O3是否启用GCC中的预取?如果是,如何禁用预取?是否有选项来控制预取的“侵略性”?例如,每次迭代中预取数据的数量。

1个回答

4
根据GCC的数据预取支持网站,目前可能的选项包括:
现有的GCC数据预取支持包括: - 通用预取RTL模式。 - 针对多个目标的特定支持。 - 一个__builtin_prefetch函数,对于不支持预取或尚未将预取支持添加到GCC中的目标不起作用。 - 通过-fprefetch-loop-arrays启用的优化,用于预取在循环中使用的数组。
然后查看优化选项,似乎需要显式启用-fprefetch-loop-arrays(即使使用-O3也不会自动启用)。
如果目标机器支持,生成指令以预取内存,以提高访问大数组的循环的性能。该选项可能会生成更好或更差的代码;结果高度依赖于源代码中循环的结构。在级别-Os下禁用。
请注意,GCC's C99 status page指出,目前不考虑C99中函数声明符上数组的static关键字(C99 6.7.5.3/7)。这意味着“大数组”的大小及其真正含义完全由实现控制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接