【问题标题】:Why are vector instructions faster than having many cores?为什么向量指令比拥有多个内核更快?
【发布时间】:2012-10-11 15:22:00
【问题描述】:

现代高性能计算使用向量指令,例如 NVIDIA GPU 上的 SIMT 指令(是的,我知道 SIMT 并不完全是 SIMD,但我认为差异不会影响这个问题)。我想知道为什么对向量进行操作比拥有更多内核更好。

具体来说,为什么 GPU 在 32 字向量上运行比使用 32 倍的内核更好?我自己做了一些猜测,但我想听听那些真正知道他们在说什么的人。

以下是我的猜测:

  • 如果每个核都有一些控制硬件和一些 ALU 硬件,那么一个向量核将在 32 个 ALU 之间共享一个控制硬件块,这增加了用于计算的晶体管总预算的比例。

  • 如果您无论如何都在进行自然矢量化操作,那么多核只会引入矢量指令不会出现的同步问题。

  • 向量中的不同单词彼此相邻,这与不同的内核不同,因此您最终会以 32 个单词块的形式加载和操作内存,这对于缓存来说非常好.

真正的答案是什么?

【问题讨论】:

  • This 答案可能有用且有些相关....

标签: gpu multicore simd


【解决方案1】:

我认为这是一个同步问题。与在多个数据项上运行的多个核心(线程)相比,对向量的单核操作在更确定的时间内完成。最终,您需要等待以同步它们,对于固有向量操作,SIMD 更便宜。

【讨论】:

    【解决方案2】:

    这是您使用多少硅片和获得多少功能之间的权衡 - 将 SIMD 添加到内核是芯片面积的相对较小的增量成本,而矢量运算的吞吐量可能会提高 4 倍、8 倍或 16 倍。将内核数量增加 4 倍、8 倍或 16 倍意味着芯片面积大大增加(但具有代码不需要矢量化的优势)。

    【讨论】:

      【解决方案3】:

      要添加另一个核心 CPU,设计人员必须复制流水线的所有部分,以及一些额外的结构来保持缓存的一致性。要使 SIMD 指令的宽度加倍,它们只需要将执行单元的宽度加倍,而流水线的所有其他阶段保持不变。

      【讨论】:

        猜你喜欢
        • 2021-11-13
        • 1970-01-01
        • 2018-06-28
        • 2012-12-03
        • 1970-01-01
        • 2016-03-04
        • 2020-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多