嵌套循环的软件流水优化
1. 引言
软件流水优化方法的核心思想不仅适用于支持旋转寄存器等特性的架构,对于不支持这些特性的架构,也能在一定程度上实现连续外层循环迭代执行的重叠,不过会增加一些代码量。
2. ItaniumTM 架构下的软件流水
ItaniumTM 架构具备诸多有助于编译器提升和利用指令级并行性(ILP)的特性,具体如下:
- 显式并行(EPIC)指令集
- 大型寄存器文件
- 寄存器重命名
- 谓词执行
- 推测执行
- 对软件流水的特殊支持
其中,对软件流水循环的特殊支持包括寄存器旋转、循环分支和循环控制寄存器。寄存器旋转通过将寄存器编号与寄存器重命名基值(RRB)相加并对旋转寄存器文件大小取模的方式实现寄存器重命名,避免了为软件重命名寄存器而展开循环的需求。
以下是一个寄存器旋转的示例代码:
L1:
ld4
r32 = [r4],4
// post increment r4 by 4
add
r34 = r34,r9
st4
[r5] = r35,4
// post increment r5 by 4
swp_branch L1 ;;
// software pipeline branch
在这个示例中,假设软件流水线的每个阶段为一个周期(II = 1),加载延迟为 2 个周期,加法延迟为 1 个周期。加载操作写入 r32 的值在两个内核迭代(即两次旋转)后,作为 r34 被加法操作读取。在此期间,又执行了两次加载操作,但由于寄存器旋转
超级会员免费看
订阅专栏 解锁全文
96

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



