ARMv8架构LDR缓存命中与各类指令执行速度对比(树莓派4B)
树莓派4B(Cortex-A72)ARMv8指令相对耗时参考
新版ARM架构参考手册不再统一公布指令时序参数,以下数值基于树莓派4B搭载的Cortex-A72核心公开微架构文档、实机实测结果统计得出,所有相对耗时以整数加法指令
ADD x0, xzr, xzr的单周期执行耗时为基准值1。统计默认符合前提:缓存已开启、采用平坦内存映射(虚拟地址与物理地址相等)。
重要提示:普通QEMU TCG模式仅做功能仿真,不会模拟真实硬件的缓存层级、流水线停顿和时序逻辑,跑出的耗时结果由宿主机性能决定,和真实ARM硬件时序完全无关,不具备参考价值。
各指令相对耗时参考(延迟维度,即指令存在数据依赖时的等待周期)
ADD x0, xzr, xzr ; 基准值 = 1(整数ALU运算,单周期完成,无依赖时吞吐量可达每周期2~4条) ADD d0, d1, d2 ; 标量浮点加法,相对耗时3~4(VFP/ASIMD浮点运算延迟3周期,无依赖时吞吐量每周期2条) LDR x0, [x2] ; L1数据缓存命中:相对耗时4 LDR x0, [x2] ; L1未命中、L2缓存命中:相对耗时12~15 LDR x0, [x2] ; L1/L2均未命中、访问主存:相对耗时150~200 LDP x0, x1, [x2] ; L1数据缓存命中:相对耗时4~5(配对加载单次读取128bit,与单寄存器加载延迟几乎无差) LDP x0, x1, [x2] ; L1未命中、L2缓存命中:相对耗时13~16 LDP x0, x1, [x2] ; L1/L2均未命中、访问主存:相对耗时160~220
核心结论:加载速度快于直接计算的场景
- 仅当目标数据已经驻留在L1缓存内时,内存加载才有可能快于直接计算。最典型的场景是高频访问的小体积查找表:比如非线性函数插值、位操作映射、固定格式编解码查表,这类场景下一次L1加载仅需4周期,比连续5步以上的整数运算、2步以上的乘法/浮点运算效率更高。
- 若数据仅在L2缓存中命中,加载延迟已经达到12周期以上,只要计算逻辑可以在10个周期内(约10条以内无依赖整数指令)完成,直接计算的速度就会优于加载。
- 若数据需要从主存读取,150周期以上的延迟远高于绝大多数常规运算的耗时,除非是大整数除法、密码学变换这类单运算需要上百周期的重负载操作,否则直接计算永远比等待主存加载更快。
补充说明:以上数值均为延迟维度参考。如果是无数据依赖的批量操作,L1缓存命中的加载吞吐量可以达到每周期2条,和整数运算的吞吐量基本持平。树莓派4B的Cortex-A72核心每核配备32KB L1数据缓存、共享1MB L2缓存,实测平坦映射下的内存访问延迟和上述范围偏差不超过10%。
内容的提问来源于stack exchange,提问作者colinh
相关产品推荐
相关产品推荐

