NE10相对复杂运算优化速度比较

2015-11-23 21:54 阅读 658 次 评论 0 条

本次测试使用的avnet的MicroZed硬件平台,CPU频率666MHz,DDR频率为533MHz。

对于复合计算,不能通过ne10的库函数直接计算的运算比较。下面是普通c语言编写的计算方法。

复合运算c语言原型

转换为使用ne10库函数能够使用函数形式

NE10适用的函数转换

在不适用编译器优化的情况下,neon的运算时间还长一些

不使用编译器优化的计算结果

O2优化条件下的测试结果

编译器O2优化下的运算速度

将外部循环部分合并,使一次使用neon的数据量尽可能的大,但运行时间反而更长了。

将转换代码修改将部分循环合并,增大ne10函数中的循环次数运算结果

分析运算时间加长的原因可能是下面的原因:

1)将原本c语言1个循环做完的事情分了4个循环,而这4此循环的时间估计占用不少时间;

2)涉及到数据格式转换,从ne10_uint16_t(unsiged short)转换为ne10_float32_t(float)型。在运算之前先转换为ne10_float32_t型,运算完之后,再转换回ne10_uint16_t,且每次转换都是通过循环进行。

从将代码转换为ne10库函数可调用的形式,存在效率问题,如果进行其它优化是不是就不是基于ne10库了。其它的优化涉及的汇编与对neon的理解,工作量较大,而提升性能约为2倍,是否有些不划算。

简单的使用编译器O2优化的效果似乎也够用。基于zynq的运算加速基于HLS的PL运算算是一个靠谱的办法。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:NE10相对复杂运算优化速度比较 | 起点博客
分类:应用笔记 标签:, , , ,

发表评论


表情