ZHCUAU3J January 2018 – March 2024
当循环为软件流水线时,通常需要逻辑程序和收尾程序。逻辑程序用于启动循环,收尾程序用于结束循环。
通常,循环必须执行最少次数的迭代才能安全地执行软件流水线版本。如果最小已知迭代计数太小,则会添加冗余循环或禁用软件流水线。折叠循环的逻辑程序和收尾程序可以减少安全执行流水线循环所需的最小迭代计数。
折叠还可以大大缩减代码大小。这种代码大小增长的部分原因是冗余循环。其余原因是由于逻辑程序和收尾程序。
软件流水线循环的逻辑程序和收尾程序最多由长度为 ii 的 p-1 个阶段组成,其中 p 是稳态期间并行执行的迭代次数,ii 是流水线循环体的循环时间。在逻辑程序和收尾程序折叠期间,编译器会试图折叠尽可能多的阶段。但是,过度折叠会对性能产生负面影响。因此,默认情况下,编译器会试图在不牺牲性能的情况下折叠尽可能多的阶段。当--opt_for_speed=2 或 --opt_for_speed=1 选项被调用时,编译器越来越倾向于优化代码大小而不是性能。