WCET 感知的循环展开优化技术解析
1. WCET 感知的循环展开概述
循环展开是一种重要的代码优化技术,其核心问题在于为每个循环选择合适的展开因子。这一选择依赖于多个关键参数:
- 每个循环的迭代次数
- I - 缓存和可用程序内存的限制
- 溢出代码生成的近似情况
2. 最坏情况循环迭代次数
确定展开因子需要在编译时了解循环的迭代次数,获取该信息的途径主要有两种:
- 性能分析 :这是最常用的方法,但获取合理的性能分析数据难度较大,且生成这些数据可能需要大量的空间和时间。
- 静态循环分析 :大多数编译器缺乏有效的技术来计算迭代次数,通常只能使用较小且固定的展开因子(如 2 或 4),这虽然避免了过度展开带来的负面影响,但也未能充分挖掘优化潜力。
部分编译器仅能分析简单、结构良好的循环,而现实应用中大量存在的数据依赖循环(即循环边界可变的循环)则难以处理。与之不同,WCC 的循环展开结合了集成的多面体循环分析器,能够检测和分析当今嵌入式系统应用中的大多数循环。
例如,对于以下包含数据依赖循环的代码示例:
void foo( int n ) {
int main( void ) {
for( int i = 0; i < n; ++i ) {
foo( 6 );
// loop body
foo( 12 );
}
超级会员免费看
订阅专栏 解锁全文
7

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



