VLD3.u16比VLD3.u8花费更长的时间

时间:2016-11-17 17:53:13

标签: caching assembly arm neon

我正在对VLD3.u8和VLD3.u16进行基准测试,并注意到一个有趣的结果。对于VLD3.u8,输入为1200 * 1048 * 3,对于VLD3.u16,输入为1200 * 1048 * 3 * 2.我将其迭代1000次。

  

VLD3.u8:2.70秒

     

VLD3.u16:16.68秒

示例代码

pld          [r1, #64]
pld          [r1, #64*2]
pld          [r1, #64*3]
.loop:
   pld          [r1, #64*3]
   vld3.u8      {d0, d1, d2}, [r1]!
   vst3.u8      {d0, d1, d2}, [r0]!
subs        r2, r2, #1
bne         .loop

pop         { r4-r5, pc }

从(http://pulsar.webshaker.net/ccc/result.php?lng=us)查看循环计数器,每个操作需要4个循环(VLD3.u8和VLD3.u16)。

我的期望是VLD3.u16需要两倍的计算时间,因为VLD3.u16的输入是VLD3.u8的两倍。

这是否是VLD3.u16发生缓存未命中问题,导致VLD3.u16花费很长时间将值从ARM寄存器加载到NEON寄存器?

有人可以帮助我:)?

0 个答案:

没有答案