ARM HPI模型无法模拟SVE指令,gem5运行受阻于ptrue指令
解决gem5模拟SVE程序卡在ptrue指令的问题
问题背景
模拟包含SVE指令的Tower程序时,程序卡在ptrue指令处,调试日志显示该指令无法被任何功能单元(FU)执行:
27581250: system.cpu_cluster.cpus.execute.lsq.storeBuffer: StoreBuffer step numUnissuedAccesses: 0 27581250: system.cpu_cluster.cpus.execute: No interrupt controller 27581250: system.cpu_cluster.cpus.execute: [tid:0] thread_interrupted?=0 isInbetweenInsts?=1 27581250: system.cpu_cluster.cpus.execute: Attempting to issue [tid:0] 27581250: system.cpu_cluster.cpus.execute: Trying to issue inst: 0/437.569/2719/11034.12613 pc: 0x400e80 (ptrue) to FU: 0 27581250: system.cpu_cluster.cpus.execute: Can't issue as FU: 0 isn't capable 27581250: system.cpu_cluster.cpus.execute: Trying to issue inst: 0/437.569/2719/11034.12613 pc: 0x400e80 (ptrue) to FU: 1 27581250: system.cpu_cluster.cpus.execute: Can't issue as FU: 1 isn't capable 27581250: system.cpu_cluster.cpus.execute: Trying to issue inst: 0/437.569/2719/11034.12613 pc: 0x400e80 (ptrue) to FU: 2 27581250: system.cpu_cluster.cpus.execute: Can't issue as FU: 2 isn't capable 27581250: system.cpu_cluster.cpus.execute: Trying to issue inst: 0/437.569/2719/11034.12613 pc: 0x400e80 (ptrue) to FU: 3 27581250: system.cpu_cluster.cpus.execute: Can't issue as FU: 3 isn't capable 27581250: system.cpu_cluster.cpus.execute: Trying to issue inst: 0/437.569/2719/11034.12613 pc: 0x400e80 (ptrue) to FU: 4 27581250: system.cpu_cluster.cpus.execute: Can't issue as FU: 4 isn't capable 27581250: system.cpu_cluster.cpus.execute: Trying to issue inst: 0/437.569/2719/11034.12613 pc: 0x400e80 (ptrue) to FU: 5 27581250: system.cpu_cluster.cpus.execute: Can't issue as FU: 5 isn't capable 27581250: system.cpu_cluster.cpus.execute: Trying to issue inst: 0/437.569/2719/11034.12613 pc: 0x400e80 (ptrue) to FU: 6 27581250: system.cpu_cluster.cpus.execute: Can't issue as FU: 6 isn't capable 27581250: system.cpu_cluster.cpus.execute: Didn't issue inst: 0/437.569/2719/11034.12613 pc: 0x400e80 (ptrue)
测试环境:
- 程序:Tower
- 编译器:
aarch64-linux-gnu-gcc - 编译参数:
-O3 --static -march=armv8-a+sve - gem5运行命令:
./build/ARM/gem5.opt -d ./se_results/$$test_prog ./configs/example/arm/starter_se.py --cpu="hpi" $$test_prog
解决方案
1. 启用CPU的SVE功能
HPI CPU默认未开启SVE支持,需在运行命令中添加--cpu-options="sv_en=True"参数,指定启用SVE:
./build/ARM/gem5.opt -d ./se_results/$$test_prog ./configs/example/arm/starter_se.py --cpu="hpi" --cpu-options="sv_en=True" $$test_prog
若需要指定SVE向量长度(如256位),可额外添加--sve-vl=256参数。
2. 确认gem5编译时已开启SVE支持
如果上述步骤无效,需检查gem5编译时是否启用了SVE特性,重新编译时添加对应选项:
scons build/ARM/gem5.opt -j$(nproc) CPU_MODELS=HPI ENABLE_SVE=1
不同gem5版本的编译选项可能略有差异,可参考对应版本的官方文档确认。
3. 验证SVE功能是否生效
启动gem5后,可查看初始化日志中是否包含SVE相关功能单元的信息,或通过调试命令确认CPU的SVE配置已启用。
内容的提问来源于stack exchange,提问作者Ling Yang
相关产品推荐
相关产品推荐

