0

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

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

以下是我的猜测:

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

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

  • 向量中的不同单词彼此相邻,这与不同的内核不同,因此您最终会以 32 字块的形式在内存上加载和操作,这对缓存非常有利。

真正的答案是什么?

4

3 回答 3

0

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

于 2012-10-11T16:13:00.807 回答
0

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

于 2012-10-11T16:14:49.190 回答
0

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

于 2012-10-11T15:29:45.833 回答