ZHCUAU3J January 2018 – March 2024
编译器可以展开包围最内部循环的外部循环。这种变换会对外部循环额外迭代一次,因此内部循环存在另一个副本。然后,第二个“内部循环”被“融合”回原始内部循环。因此,融合的内部循环对于内部循环的每次执行都会执行外部循环的两次迭代。这种转换称为“展开和阻塞”,可以提高可用的并行性和功能单元利用率。
如果编译器检测到内部循环中没有足够的可用并行性来有效利用 CPU 上的计算资源,则可以执行展开和阻塞。
如果 --opt_for_speed (-mf) 选项设置为级别 3 或更高(级别 4 是默认值)并且 --opt_level (-o) 选项设置为除“off”之外的任何级别(如果 --vectypes=off,则 off 是默认值),则执行此类优化。这种优化可以提高性能,但会增加代码大小并降低可调试性。