ZYNQ NEON NE10计算优化

2015-11-19 21:35 阅读 1,461 次 评论 2 条

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

PL部分采用avnet的自带Board默认配置即可,在PL部分完成后,新建standalon的bsp工程,然后新建NE10Test Application Project,选择“empty project”工程模版。

然后将Ne10-master文件夹下的源码复制到NE10Test工程的src目录下,如下图所示,将方框中的内容设置为不编译,如下图所示。

NE10Test工程下不编译文件设置

设置gcc汇编头文件include路径

gcc汇编包含头文件设置

设置gcc头文件include路径

gcc C语言头文件包含路径

增加__MACH__宏定义

定义__MACH__宏,使能NEON

增加NE10_ENABLE_MATH宏定义,方法同上。

以samples文件夹中NE10_test.c文件,测试函数进行测试。

由于原工程中的数据量太少,将数据量改到了2048点,进行一维加法运算。采用了1)自己编写的加法,2)ne10_c语言的加法形式,3)ne10_NEON加速计算方式进行运行,并比较运行时间。

运行速度比较示意代码如下图

测试运算速度的代码实例

1)编译器优化选项全部默认,运行结果如下:

编译器设置选项全部默认情况下运行结果

可以看出NEON优化后,速度提升7~8倍。

2)设置编译器优化为-O2,运行结果如下:

编译器选项设置为O2时的运算结果

此时NEON的运算速度没有变化,而通过语句直接写的提升较多,大概为4倍。

3)去掉编译器优化,增加编译器设置选项如下

-mcpu=cortex-a9 -mfpu=neon -ftree-vectorize -mvectorize-with-neon-quad -mfloat-abi=softfp -ffast-math

增加编译器关于浮点neon运算相关设置标志选项

运行所需时间结果如下

增加编译器关于neon优化的运算结果

编译器选项设置基本与不设置,基本没有变化。

---------------------------------------------

再来看看乘运算,比较一维乘法运算的速度比较

编译器无优化条件下运行速度如下,可以看出计算浮点加法运行与浮点乘法运算所需时间基本相同。

无编译器优化条件下的乘法运算速度比较

编译器O2优化后的结果

编译器O2优化条件下的乘法运算速度比较

以上结果基本与加法的结果相同,所以没有测试编译器选项设置的速度。

结论使用ne10的库函数比在O2优化条件下,仍然能够快约2倍,那么进行ne10优化还是有必要的。只是没有网上所说的3~5被性能提升那么猛。

下一篇日志关于NE10复合运算计算速度比较

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:ZYNQ NEON NE10计算优化 | 起点博客
分类:应用笔记 标签:, , , ,

发表评论


表情

  1. armcore
    armcore 【农民】

    貌似neon没什么用呀

  2. will
    will【站长】

    没有想象中给力