1. 作为指令高速缓层优化的一种重要技术,它根据CFG流图边的执行频率将频繁执行的基本块排列在一起,并布局那些基本块在下降分支路径,而不在一起的也就是很少执行的基本块布局在转移分支路径。这样做一来可以使取到I-cache中的指令实际被执行的比例较高,二来对于某些体系结构上转移和下降路径延迟不等的分支指令,可以降低跳转延迟
2. 实现过程内代码置放有以下几个环节:
a)获取剖析数据:编译器可以先在基本块出口处插入代码以统计到其后继基本块的执行次数,作为CFG流图边的权重,然后编译生成可执行文件,输入代表性数据运行它,结果输出一个数据文件,用于第二次编译,这次编译实施过程内代码置放优化
b)以链的形式构建热路径:热路径是CFG路径的一个集合,其中包括频繁执行的那些边,每条路径是一个或多个基本块按边的方向构成的链,每个链关联一个优先级,用于布局代码的先后顺序。初始时,每个基本块构成一个只有它本身的链,其优先级为CFG流图边的数量或者更大值;接下来,在CFG中按权重降序遍历每条边<x,y>(x不等于y),若x是某个链a的尾结点且y是某链b的头结点,则把b合并到a后面,更新a的优先级为a原来优先级、b优先级、P三者的最小值,同时递增P,其中P为链合并操作的计数器,用于决定链的相对次序由低到高排列,初值为0。当遍历结束时,所有热路径构建完成
c)进行代码布局:经过前一环节,就得到了链的集合。首先从链集合找出含有入口基本块的链t,将t加入工作表WL;然后从WL移出一个优先级最低的链c,按序(构建链时加入基本块的顺序)遍历c的每个基本块x,把x放在过程可执行代码体的末端,对于边<x,y>,将包含y的链t加入WL(若t不在WL中),重复该过程直至WL为空
posted on 2023-09-06 23:15
春秋十二月 阅读(46)
评论(0) 编辑 收藏 引用 所属分类:
Compiler