目前正在做ARMv7 系列芯片算法的NEON优化,发现一个耗时异常的地方,现象描述如下:
首先主循环里会处理三类数据,三类数据分开存放在DDR上,每次循环分别处理三类数据的8个uchar数据,存储数据也是分三类数据地址分开存放,我分别定义三个uint8*8的变量用来暂时存储处理的结果,在使用vst1_u8从寄存器存储数据到DDR的时候,只要我存储处理过后的三路数据中的一路,耗时就会增加到59ms,这时候不管是否存储另外两路数据,耗时都是59ms。如果我从DDR直接加载数据,给该变量赋值,不处理直接写到DDR,统计总循环的耗时会降低20ms,同样的我存储其他变量的数据到DDR耗时也会下降20ms,只要一存储处理过后的数据中的一路,总循环耗时就突增到59ms,想不明白,都是从d寄存器或者q寄存器写数据到DDR,为什么耗时会差这么多,只要存储处理过的数据耗时就上升到59ms。该算法原来的耗时是180ms,现在优化到59ms,想弄清楚耗时增长的原因?是否有别的优化方法进一步降低耗时?(注:由于该算法的特性,算法中使用寄存器数量已经超过的ARMv7 NEON中的寄存器数量。)
求有经验的大神解惑,急用啊
因为处理会耗时,当然会比直接存储时间多,计算时间增加了