随笔-118  评论-133  文章-4  trackbacks-0
   最近研究了一下ARMV7-A的NEON和VFP,有以下理解,分享一下,如果有错的话欢迎指正:

   目前的理解,neon和vfp应该还是不一样的东西:
   1、vfp纯粹是个浮点运算单元,支持单精度和双精度浮点数操作,兼容IEEE-754。
   2、neon是所谓的Advance SIMD,支持单指令多数据操作,支持整数和单精度浮点数向量化(并行)操作。

   3、vfp和neon对于ARM核来说都是option,也可以搭配使用,由于共用寄存器,搭配使用时参考下表:

  

   4、至于浮点数操作的时候,用哪个好,我到现在还没很搞明白,了解到的信息是因为neon是SIMD,所以理论上比vfp要快,但是neon只支持单精度,而且不完全兼容IEEE-754,编译器默认生成的汇编代码也主要以vfp为主(生成向量化的neon汇编代码,c代码设计应该也要满足向量化的要求才行),打开自动向量化编译的参数如下(以cortex-a8为例):

   注:
      用"-S"编译出来的汇编代码,可以很容易的区分vfp和neon的指令(vfp为fxx,neon为vxx.xx),可是objdump反汇编出来的程序,则统一用vxx.xx(UAL统一汇编语言)
   5、使用UAL表示的vfp和neon汇编代码还是有区别的,主要体现在对寄存器的操作上(是否有并行的操作),另外vfp和neon有共用的指令和特有的指令,详细没去研究。
   6、编译器自动向量化,往往发挥不了neon的最佳性能,这时候可能需要你借组内联的Neon Intrinsics(arm_neon.h提供),甚至嵌套neon的汇编指令来进行优化。

   还有,NEON和VFP都有众多的版本,版本之间的差异还没去研究。

refer:
http://processors.wiki.ti.com/index.php/Cortex-A8#What_is_Neon.3F
"ARM®Architecture Reference Manual"
posted on 2015-12-17 12:04 lfc 阅读(3935) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。