如何在SPEC17的runcpu中启用--make_bundle功能?
启用SPEC CPU2017中隐藏的make_bundle功能
SPEC CPU2006的runspec工具提供的--make_bundle选项可将已编译的基准二进制打包迁移,但官方在SPEC CPU2017中移除了该命令行选项,不过核心代码逻辑仍被保留。以下是启用方法:
启用步骤
代码中通过检查bundleaction配置项触发打包逻辑,你可以通过两种方式指定该参数:
- 命令行临时触发:直接在runcpu命令中添加
--define bundleaction=make参数,示例:runcpu --define bundleaction=make <你的配置文件名> - 配置文件永久设置:修改你的SPEC配置文件(路径通常为
config/<你的配置文件名>.cfg),添加一行配置:bundleaction = make
注意事项
- 必须确保所有目标基准测试都已编译成功,代码中会检查编译错误列表,若存在未编译成功的用例,会直接报错退出
- 该功能在交叉编译场景中实用性很高,比如在X86主机上交叉编译RISC-V基准程序后,打包迁移到RISC-V目标机执行
代码逻辑参考
runcpu脚本中保留了完整的打包逻辑:
- 在第1143行附近,会判断
bundleaction是否为make,满足条件则调用打包子程序:# runcpu:1143 # Make a bundle if ($runconfig->{'bundleaction'} eq 'make') { if (@compile_error_list) { Log(0, "ERROR: Not all benchmarks available for bundling!\n"); $err_exit = 1; next CONFIGRUN; } make_bundle($runconfig, \@benchobjs); next CONFIGRUN; } - 实际打包逻辑由第2707行定义的
make_bundle子程序实现:#runcpu:2707 sub make_bundle { my ($config, $benchobjs) = @_; Log(2, "Making Bundle\n"); my $ans = 'n'; my @files = (); ... ... }
内容的提问来源于stack exchange,提问作者momoli
相关产品推荐
相关产品推荐

