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