Arm 手臂皮质-A8:VFP和霓虹灯有什么区别

Arm 手臂皮质-A8:VFP和霓虹灯有什么区别,arm,simd,neon,cortex-a8,Arm,Simd,Neon,Cortex A8,在ARM Cortex-A8处理器中,我理解NEON是什么,它是一个SIMD协处理器 但VFP(矢量浮点)单元也是一个协处理器,它能像SIMD处理器一样工作吗?如果是的话,哪一个更好 我读了一些链接,比如- 但他们的意思不是很清楚。他们说VFP从未打算用于SIMD,但在我读到以下内容时——“VFP体系结构也支持短向量指令的执行,但这些指令按顺序操作每个向量元素,因此不能提供真正的SIMD(单指令多数据)并行性的性能。” 现在还不太清楚该相信什么,有人能详细阐述一下这个话题吗?IIRC,VFP

在ARM Cortex-A8处理器中,我理解NEON是什么,它是一个SIMD协处理器

但VFP(矢量浮点)单元也是一个协处理器,它能像SIMD处理器一样工作吗?如果是的话,哪一个更好

我读了一些链接,比如-

  • 但他们的意思不是很清楚。他们说VFP从未打算用于SIMD,但在我读到以下内容时——“VFP体系结构也支持短向量指令的执行,但这些指令按顺序操作每个向量元素,因此不能提供真正的SIMD(单指令多数据)并行性的性能。”


    现在还不太清楚该相信什么,有人能详细阐述一下这个话题吗?

    IIRC,VFP是一个按顺序工作的浮点协处理器

    这意味着您可以在浮点向量上使用指令来实现类似SIMD的行为,但在内部,指令是按顺序在向量的每个元素上执行的

    虽然由于采用单加载指令,指令所需的总时间因此减少,但VFP仍需要时间来处理向量的所有元素


    True SIMD将获得更高的净浮点性能,但使用带向量的VFP比使用纯顺序的VFP更快。

    两者之间有很大差异。Neon是作为ARM内核一部分的SIMD(单指令多数据)加速器处理器。这意味着,在执行一条指令的过程中,相同的操作将并行地发生在多达16个数据集上。由于Neon内部具有并行性,因此与以相同时钟速率运行的标准SISD处理器相比,Neon可以获得更多的MIPS或FLOP

    Neon的最大好处是,如果您想使用矢量执行操作,即视频编码/解码。它还可以并行执行单精度浮点(float)操作

    VFP是一个经典的浮点硬件加速器。它不像霓虹灯那样是一个平行的建筑。基本上,它对一组输入执行一个操作,并返回一个输出。它的目的是加速浮点计算。它支持单精度和双精度浮点

    您有3种可能使用霓虹灯:

    • 使用内部函数#包括“arm_neon.h”
    • 内联汇编代码
    • 让gcc通过提供
      -mfpu=neon
      作为参数来为您进行优化(GCC4.5在这方面很好)
    从架构上讲,VFP(它不是无缘无故地被称为向量浮点)确实有一个在单个指令中操作浮点向量的规定。我不认为它实际上会同时执行多个操作(如true SIMD),但它可以节省一些代码大小。但是,如果您阅读Shark帮助中的ARM架构参考手册(正如我在问题中的霓虹灯介绍,链接1中所述),您将在第A2.6节中看到,VFP的矢量功能在ARMv7中不受欢迎(这是Cortex A8实现的),软件应使用高级SIMD进行浮点矢量操作

    更糟糕的是,在Cortex A8实现中,VFP是通过VFP Lite执行单元实现的(读取Lite时,它占据了更小的硅表面,而不是具有更少的功能),这意味着它实际上比ARM11慢,例如!幸运的是,大多数单精度VFP指令都由NEON单元执行,但我不确定矢量VFP操作是否执行;即使执行了,它们的执行速度也肯定比霓虹灯指令慢

    希望能把事情弄清楚

    适用于armv7 ISA(及其变体)

    NEON是用于整数和浮点数据的SIMD和并行数据处理单元,VFP是完全兼容IEEE-754的浮点单元。特别是在A8上,霓虹灯单元几乎在所有方面都要快得多,即使您没有高度并行的数据,因为VFP是非流水线的

    那你为什么要用VFP

    最主要的区别是VFP提供了双精度浮点

    其次,VFP提供了一些专门的指令,在NEON单元中没有等效的实现。我想到了SQRT,可能是一些类型转换

    但是在Cosmin的回答中没有提到的最重要的区别是NEON浮点管道并不完全符合IEEE-754。有关差异的最佳描述请参见

    由于它不符合IEEE-754标准,编译器无法生成这些指令,除非您告诉编译器您对完全符合性不感兴趣。这可以通过几种方式实现

  • 使用内部函数强制使用NEON,例如,请参见
  • 非常友好地询问编译器。即使是带有
    -mfpu=neon
    的较新GCC版本也不会生成浮点neon指令,除非您还指定了
    -funsafe数学优化
  • 适用于armv8+ISA(及其变体)[更新]


    NEON现在完全符合IEE-754标准,从程序员(和编译器)的角度来看,实际上没有太大区别。双精度已矢量化。从微观架构的角度来看,我有点怀疑它们甚至是不同的硬件单元。ARM确实单独记录标量指令和矢量指令,但它们都是“高级SIMD”的一部分。

    嘿,Pierre,大开眼界!但是,我不能理解你所说的Shark帮助是什么意思,你能发布链接吗?由于愚蠢的原因,没有到ARM架构文档的直接链接。相反,我将iOS开发人员指向他们已经拥有的本地副本,位于/Library/Application\Support/Shark/Helpers/ARM\Help.app/Contents/Resources/ARMISA.pdf(更好的是,该文档忽略了iOS开发人员已经过时或与之无关的信息)