2024年3月2日,“IEEE/ACM国际代码生成与优化研讨会”(IEEE/ACM International Symposium on Code Generation and Optimization,CGO)在英国爱丁堡召开。CGO是编译领域的顶级国际会议(premier venue)之一,主要关注代码生成与优化,包括纯软件的动静态编译优化和代码生成以及软硬件协同相关技术。
并行处理研究所(PPI)发表的基于自动学习规则的系统级二进制翻译的论文获评CGO 2024会议的杰出论文奖(Distinguished Paper Award),论文信息如下:
Jinhu Jiang, Zhongjun Zhou, Chaoyi Liang, Rongchao Dong, Zhaohui Yang, Wenwen Wang, Pen-Chung Yew, Weihua Zhang.
A System-Level Dynamic Binary Translator Using Automatically-Learned Translation Rules.
IEEE/ACM International Symposium on Code Generation and Optimization (CGO 2024)
1、降低同步开销优化:宿主机的一个寄存器可能同时保存多个系统状态,这些系统状态被QEMU分开保存在内存中 (如条件码),对此类系统状态同步中,需要对宿主机寄存器状态进行拆解,从而导致较大的同步开销。因此在进行同步操作时,如果对应的状态在切换过程中不会被使用,则将此类“一对多”的系统状态作为整体进行备份,仅当QEMU需要访问它们时再对其进行解析,从而优化单次同步的开销。
2、减少同步次数优化:初始算法中,对每次切换都会做系统状态保存和恢复,但对于连续的切换(如连续memory访问)或者系统状态在后继操作中会被修改,则会导致冗余的状态保存和切换,从而影响性能。针对这些情况,我们将连续指令引起的状态保持和恢复合并,同时通过简单的数据流分析,对移除后继状态被修改状态的恢复,从而移除不必要的同步开销。
3、指令调度:在Guest指令执行过程中,如果define指令和对应use指令中间有其它需要进行系统状态切换的情况发生,在define指令后需要进行状态保存,use指令前需要进行恢复。这种方式会引入大量的系统同步,如果define指令涉及到的系统状态改变不影响其与use指令间其它指令的行为,通过将define指令调度到use指令前可以有效避免不必要的状态同步。
实验结果显示,基于学习规则的方法与QEMU 6.1相比,可在SPEC 2006基准测试的整型和浮点测试集上分别实现平均36%和154%的性能提升,在整个SPEC 2006测试集上平均获得92%的性能提升。此外,在真实应用测试中,该设计可实现平均15%的性能提升。