Page 35 - 《软件学报》2025年第9期
P. 35
3946 软件学报 2025 年第 36 卷第 9 期
6 实 验
6.1 实验基础设置
本文基于 LLVM 16.0 实现了混合指令调度算法及编译器, 使用 RISC-V-GNU-toolchain 中的链接器, 基于
RISC-V 模拟器 Spike 扩展了 VLIW 功能, 选用嵌入式系统的性能评测基准 CoreMark 对工具链进行评测, 整体执
行流程图如图 6 所示. 为了验证该系统在 DSP 领域的表现, 我们进一步采用 DSP 领域的真实应用 AlexNet [41] 对工
具链进行测评.
目标文件 可执行文件
评测基准 编译器 链接器 模拟器
图 6 工具链整体执行流程图
6.2 变长 VLIW 的代码体积
由于本文设计了可变长的 VLIW 编码, 即编码中携带的信息可以在指令解码阶段用于分割各指令包, 因此指
令打包时不需要像定长 VLIW 一样插入额外的 NOP 指令, 减小了生成的二进制文件的体积. CoreMark 中各个函
数在变长编码和定长编码下的代码体积如图 7 所示. 变长编码生成的二进制共包含 2 855 条指令, 代码体积为
11.15 KB. 定长 VLIW 编码生成的二进制中共包含 6 340 条指令, 代码体积为 24.77 KB. 可以看出, 与定长 VLIW
架构相比, 本文提出的基于 RV32 指令编码特性设计的可变长 VLIW 架构在保证兼容性的前提下, 将代码体积平
均减小了 54.97%.
5 4 变长 VLIW 定长 VLIW
占用空间 (KB) 3 2
0 1
图 7 CoreMark 中各个函数在变长编码和定长编码下的代码体积
6.3 表调度的启发式规则优化
我们将混合调度与表调度及其各种变体, 即自顶向下表调度、自底向上表调度和自顶向下与自底向上相结
合的表调度进行了对比, 并探究了我们在第 4.2 节中提出的 3 个启发式规则的效果. 从图 8 可以看出, 混合调度与
自顶向下表调度相比提升了 4.02% (1.74→1.81), 与自底向上表调度相比提升了 4.62% (1.73→1.81), 与自顶向下和
自底向上相结合表调度相比提升了 4.02% (1.74→1.81). 图 8 给出了第 4.2 节中 3 个启发式规则的效果. 可以看出,
规则 1 的 LOAD/STORE 启发式能够提升 3.45% (1.74→1.80), 规则 2 的关键路径启发式能够提升 1.72%
(1.74→1.77), 规则 3 的出度启发式能够提升 0.57% (1.74→1.75). 规则 1 的 LOAD/STORE 启发式能够获得更为有
效的提升.
1.82
1.81 1.80 1.81
1.80
1.79
1.78
IPC 1.77 1.77
1.76
1.75 1.75
1.74 1.74 1.74
1.73 1.73
1.72
自顶向下 自底向上 向上向下结合 +出度 +关键路径 +LOAD/STORE 混合调度
图 8 CoreMark 在各种调度算法下的 IPC

