代码之家  ›  专栏  ›  技术社区  ›  HaggarTheHorrible

臂皮层-A8:VFP和氖的区别

  •  42
  • HaggarTheHorrible  · 技术社区  · 15 年前

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

    我读了一些链接,比如-

    1. Link1

    2. Link2 .

    Wiki 我读到以下内容— "

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

    4 回复  |  直到 13 年前
        1
  •  42
  •   Peter Cordes    11 年前

    两者之间有很大的区别。Neon是作为ARM核心的一部分的SIMD(单指令多数据)加速器处理器。这意味着在执行一条指令的过程中,最多16个数据集将并行执行相同的操作。由于Neon内部存在并行性,因此Neon中的MIPS或FLOPS比以相同时钟速率运行的标准SISD处理器要多。

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

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

    • 使用内部函数#包括“arm_neon.h”
    • 内联程序集代码
    • 让gcc通过提供 -mfpu=neon
        2
  •  17
  •   Peter M    11 年前

    适用于armv7 ISA(及变型)

    NEON是一个用于整数和浮点数据的SIMD并行数据处理单元,VFP是一个完全兼容IEEE-754的浮点单元。尤其是在A8上,霓虹灯的速度比任何东西都快得多,即使你没有高度并行的数据,因为VFP是非流水线的。

    那你为什么要用VFP呢?!

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

    FPSCR Register Description .

    1. 使用内部函数强制使用氖,例如,请参见 GCC Neon Intrinsic Function List .
    2. -mfpu=neon 除非您还指定 -funsafe-math-optimizations

    适用于armv8+ISA(及变型) [更新]

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

        3
  •  16
  •   Pierre Lebeaupin    15 年前

    在体系结构上,VFP(它并不是毫无意义地称为向量浮点)确实提供了在单个指令中操作浮点向量的功能。我不认为它会同时执行多个操作(比如真的SIMD),但它可以节省一些代码大小。但是,如果您阅读Shark帮助中的ARM架构参考手册(如我在NEON简介中所述,问题中的link 1),您将在A2.6节看到,在ARMv7中VFP的矢量特性已被弃用(这是Cortex A8实现的),软件应使用高级SIMD进行浮点矢量操作。

    希望这能解决问题!

        4
  •  2
  •   sum1stolemyname    15 年前

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

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

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

    推荐文章