关于Neoverse N1中带LSL移位的adds指令流水线归属的疑问
Neoverse N1带移位操作的adds指令流水线疑问验证
我对Neoverse N1架构中带移位操作的adds指令(例如adds x3, x4, x5, lsl #32)的流水线分配存在疑问。根据Neoverse N1软件优化手册描述,该指令应分配到M流水线,但在基于Neoverse N1的Graviton 2平台上的实验结果,与文档描述不符。
M流水线饱和验证实验
首先编写饱和M流水线的测试代码:
.rep 1000 mul x7, x8, x9 .endr
测得平均时钟周期为3.117,与MADD的文档描述一致。
随后在上述代码中加入目标adds指令:
.rep 1000 mul x7, x8, x9 adds x3, x4, x5, lsl #32 .endr
观测到平均时钟周期仍为3.13,说明mul与adds可并行执行,由此推测该adds指令实际使用的是I流水线。
I流水线饱和验证实验
为验证上述推测,进行I流水线饱和实验:
.rep 1000 add x1, x0, x0; add x1, x0, x0; add x1, x0, x0 // 三条add指令:饱和I流水线 .endr
测得平均时钟周期为1.14;加入目标adds指令后:
.rep 1000 add x1, x0, x0; add x1, x0, x0; add x1, x0, x0 adds x2, x3, x4, lsl #32 .endr
平均时钟周期升至1.51,间接验证了该adds指令确实使用I流水线的推测。
内容的提问来源于stack exchange,提问作者aqjune
相关产品推荐
相关产品推荐

