【问题标题】:SIMD micro-architectureSIMD 微架构
【发布时间】:2019-11-03 16:19:08
【问题描述】:

我试图了解向量处理器和 SIMD 架构(如 ARM NEON)之间的区别。我知道这两者之间的向量寄存器长度可配置性存在差异。但是,我不确定他们的微架构有何不同?对于 SIMD 机器,我们是否需要与每条指令操作的元素数量一样多的处理单元?还是像向量处理器一样,处理单元的数量可以少于向量寄存器中数据元素的数量,只需要使用定序器在多个周期内完成一条指令?

谢谢

【问题讨论】:

    标签: arm vectorization simd neon


    【解决方案1】:

    可以使用更窄的硬件实现短向量 SIMD(如 NEON 或 x86 SSE),例如,必须将每条指令解码为 2 个内部操作。

    英特尔在 Pentium 3 到 Pentium M 上使用 128 位 SSE 向量做到了这一点,而 Pentium 4 和 Core 2 是第一个拥有全宽 SIMD 执行单元的微架构。

    但解码不依赖于数据,因此您不需要完整的微码序列器。

    【讨论】:

      【解决方案2】:

      向量处理器和SIMD的区别

      我不知道你对向量处理器的定义,但wikipedia 说 SIMD 是其中一种。

      对于 SIMD 机器,我们是否需要与每条指令操作的元素数量一样多的处理单元?

      一些 CPU 将 SIMD 寄存器拆分为多个部分,并独立处理它们。 Intel Pentium III 将 128 位 SSE 操作拆分为 64 位片段,AMD Zen 对 256 位 AVX 指令执行相同操作,将它们拆分为 128 位片段。

      需要使用定序器在多个周期内完成一条指令吗?

      仅仅因为它们被拆分并不意味着它们按顺序运行。所有现代 CPU,包括 ARM,每个内核都有多个执行单元 (EU)。微操作可以在不同的 EU 上并行运行,但这些 EU 并不相同。既然我提到了 AMD Zen,here’s a link。每个周期内核可以开始执行多达 10 个不同的微操作:4 个整数(都可以进行加法或按位操作,其中 2 个可以乘/除,其中 2 个可以分支),2 个整数加载/存储,4 个 128 位浮点运算(两个可以相加,另外两个可以相乘,两个可以 AES 加密)。它最多可以完成 16 条指令/周期、8 个整数、8 个浮点数。不同的微操作需要不同的周期数才能完成。

      【讨论】:

      • OP 正在谈论像 Cray 这样的向量机,其中你有一个需要指针 + 长度的硬件指令。基本上像 x86 rep movsd,除了像 dst[i] = src1[i] * src2[i] 这样的 BLAS 操作。制作矢量硬件的宽度取决于硬件;并行处理多少个元素。我不确定它是否只是指针,或者是否有一些向量“寄存器”的概念。我从来没有编程过。在agner.org/optimize/blog/read.php?i=421(Agner Fog 的 ForwardCom blue-sky ISA 讨论)上对这种 SIMD 风格进行了一些讨论
      • ARM SVE(可扩展矢量扩展)是介于两者之间的一半,我认为。
      猜你喜欢
      • 2019-04-01
      • 2012-10-09
      • 2016-05-14
      • 2017-11-12
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2016-11-23
      相关资源
      最近更新 更多