【问题标题】:ARM Neon: Performance vld4.u8 vs 4x vld1.u8ARM Neon:性能 vld4.u8 与 4x vld1.u8
【发布时间】:2016-09-14 08:14:45
【问题描述】:

4 倍 vld1 和 1 倍 vld4 之间最快的是什么。显然,加载的数据是不一样的,但如果我可以选择,什么是最好的还是一样的?

pld[in]
vld1.u8 { d0 }, [in]!
vld1.u8 { d1 }, [in]!
vld1.u8 { d2 }, [in]!
vld1.u8 { d3 }, [in]!

对比

pld[in]
vld4.u8 { d0, d1, d2, d3 }, [in]!

【问题讨论】:

  • 您知道vld1 仍然可以获取最多 4 个连续寄存器的列表,对吧?
  • 不,我不知道 :-( 我觉得自己很愚蠢。我现在彻底阅读了文档...

标签: assembly arm neon


【解决方案1】:

vld1.u8 {d0, d1, d2, d3}, [in]! 在同一个列表中通常会快于或等于vld4.u8。这是因为vld4 可能必须在加载数据后对其进行置换才能将其放入正确的寄存器中。

即使确实需要做更多的工作,额外的成本也可能隐藏在其他因素之后,所以这不一定是什么大问题。

【讨论】:

  • FWIW,查看一些时序vld4 与 4 寄存器 vld1 总延迟在 Cortex-A9 上为 9 对 8 个周期,在 Cortex-A72 上为 9 对 6 个周期,但作为您说得对,这很容易在计划周密的管道中丢失。
猜你喜欢
  • 1970-01-01
  • 2020-10-28
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
相关资源
最近更新 更多