循环展开与不变路径加速优化技术解析
1. 循环展开技术
循环展开是一种重要的优化技术,它能有效减少程序的最坏情况执行时间(WCET)。在一些基准测试中,如 edge_detect 和 fir2dim ,通过完全展开某些循环,WCET 最多可降低 39.5%。展开循环后生成的直线代码能通过后续优化进一步改进,同时消除所有跳转到循环入口的操作。
不同基准测试中,循环展开带来性能提升的关键因素有所不同。例如,在 countnegative 基准测试中,减少循环开销是关键;而在其他基准测试中,展开循环后释放的优化潜力则起到了重要作用。
1.1 平均情况执行时间(ACET)
为了展示程序内存启发式方法的实际应用,模拟了一个程序内存受限的系统环境,这在执行多个任务且共享同一内存的嵌入式系统中很常见。以 MRTC 基准测试 ndes 为例,当采用 WCET 感知的循环展开并结合 O3 优化时,随着程序内存的增加,基准测试的 WCET 减少幅度也随之增大。这是因为更多的程序内存允许更激进地展开循环。
同时,该优化主要针对 WCET 最小化。对于所有内存大小,WCET 的减少幅度都高于 ACET。这是因为 WCET 感知的循环展开会优先展开那些能最大程度减少 WCET 的循环。由于程序内存受限,并非所有循环都能展开,因此对 WCET 减少最有利的转换循环不一定对 ACET 减少最有利。
1.2 代码大小
循环展开会对代码大小产生影响。
超级会员免费看
订阅专栏 解锁全文
22万+

被折叠的 条评论
为什么被折叠?



