不规则代码的价值轮廓引导步长预取及 Java 数组边界检查消除
1. 不规则代码的价值轮廓引导步长预取
1.1 性能对比
在对 CPU2000 整数程序在 Itanium 机器上的运行测试中,使用训练输入集(train - ref)获得的性能仅略低于使用参考输入集(ref - ref)获得的性能。通过 VPGSP(Value - Profile Guided Stride Prefetching)方法,我们观察到显著的性能提升,例如“181.mcf”有 1.55 倍的加速,“254.gap”有 1.15 倍的加速,“197.parser”有 1.08 倍的加速。与静态编译器预取和硬件预取方法相比,VPGSP 的性能提升要高得多。
1.2 加载分类
实验将分析的加载分为以下几类:
- SSST(Strong single stride loads):强单步长加载
- PMST(Phased multi - stride loads):分阶段多步长加载
- WSST(Weak single stride loads):弱单步长加载
平均而言,约 59%的分析加载是“强单步长”,约 5%是“分阶段多步长”,另外 2%是“弱单步长”。不过,不同的基准测试显示出显著不同的分布,例如 254.gap 基准测试中,45%的分析加载属于“分阶段多步长”类别,36%属于“弱单步长”类别,只有 17%属于“强单步长”类别。
1.3 性能指标图表
基准测试 | SSST(%) |
---|