Assembly ARM霓虹灯:性能vld4.u8 vs 4x vld1.u8
四次vld1和一次vld4之间的最快速度是多少。显然,加载的数据是不一样的,但如果我有选择,什么是最好的还是相同的Assembly ARM霓虹灯:性能vld4.u8 vs 4x vld1.u8,assembly,arm,neon,Assembly,Arm,Neon,四次vld1和一次vld4之间的最快速度是多少。显然,加载的数据是不一样的,但如果我有选择,什么是最好的还是相同的 pld[in] vld1.u8 { d0 }, [in]! vld1.u8 { d1 }, [in]! vld1.u8 { d2 }, [in]! vld1.u8 { d3 }, [in]! vs vld1.u8{d0,d1,d2,d3},[in]通常会快于或等于同一列表中的vld4.u8。这是因为vld4可能必须在加载数据后对其进行排列,才能将其放入正确的寄存器中 即使需要做更
pld[in]
vld1.u8 { d0 }, [in]!
vld1.u8 { d1 }, [in]!
vld1.u8 { d2 }, [in]!
vld1.u8 { d3 }, [in]!
vs
vld1.u8{d0,d1,d2,d3},[in]代码>通常会快于或等于同一列表中的vld4.u8
。这是因为vld4
可能必须在加载数据后对其进行排列,才能将其放入正确的寄存器中
即使需要做更多的工作,额外的成本也可能隐藏在其他因素后面,所以这不一定是什么大问题。vld1.u8{d0,d1,d2,d3},[in]代码>通常会快于或等于同一列表中的vld4.u8
。这是因为vld4
可能必须在加载数据后对其进行排列,才能将其放入正确的寄存器中
即使需要做更多的工作,额外的成本也可能隐藏在其他因素后面,所以这不一定是什么大问题。您意识到vld1
仍然可以包含多达4个连续寄存器的列表,对吗?不,我不知道:-(我觉得自己很愚蠢。我现在彻底阅读了文档……你意识到vld1
仍然可以获取最多4个连续寄存器的列表,对吗?不,我不知道:-(我觉得自己很愚蠢。我现在彻底阅读了文档……FWIW,查看一些计时vld4
vs.4-registervld1
Cortex-A9的总延迟是9对8个周期,Cortex-A72的总延迟是9对6个周期,但正如你正确地说的,在一个计划良好的管道中很容易丢失。FWIW,查看一些计时vld4
vs.4-reg.)istervld1
Cortex-A9的总潜伏期是9对8个周期,Cortex-A72的总潜伏期是9对6个周期,但正如你正确地说的那样,在一个计划良好的管道中很容易丢失。
pld[in]
vld4.u8 { d0, d1, d2, d3 }, [in]!