2020.3.5
看ORC编译器时里边有一个改版的hyperblock,想知道hyperblock为何能够提高性能,[2004.ORC-LCPC04-Tutorial.pdf](2004.ORC-LCPC04-Tutorial.pdf)这篇文章里提到了mahlke这个作者([他的主页-发表的论文的页面](https://web.eecs.umich.edu/~mahlke/publications.html)),所以找到了这篇文章。

if-conversion

所谓if-conversion简单的说就是把if指令变成了“预测指令”。if的两条路同时执行,将正确分支的结果保存下来。适用于向量处理器,需要有条件计算指令的支持。原文的说法如下,

control dependences are converted to data dependences in the code

2020.3.6

Predicated Execution

:竟然把predicate理解为predict的意思了,怪不得一直觉得不对。就是添加了多个专用的1-bit寄存器(称作predicate register),添加了指令能够根据predicate register的值来决定该指令是否有效。

Hyperblock

编译器需要对代码做优化,优化的范围便是block。为了扩大block的范围,提出了把控制流没有分支的block合成一个superblock。为了更大范围,配合着predicate技术,提出了hyperblock,将有分支的block合成一个超大的块,当然这其中需要保证hyper只有一个入口才方便优化,因此需要tail duplication和loop peeling来分离多入口。

有了hyperblock后可以进行更大范围的instruction promotion(就是指令重排序,让流水线尽量少气泡),instruction merging(减少指令数量)。