为什么向量指令比拥有多个内核更快?

时间:2012-10-11 15:22:01

标签: gpu multicore simd

现代高性能计算使用向量指令,如NVIDIA GPU上的SIMT指令(是的,我知道SIMT不是很SIMD,但我不认为差异会影响这个问题)。我想知道为什么在向量上运行比仅仅有更多核心更好。

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

以下是我的猜测:

  • 如果每个核心都有一些控制硬件和一些ALU硬件,那么矢量核心将共享32个ALU中的一个控制硬件块,这增加了计算所花费的总晶体管预算的比例。

  • 如果您正在进行自然可矢量化的操作,那么多个核心只会引入您不会使用向量指令的同步问题。

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

真正的答案是什么?

3 个答案:

答案 0 :(得分:0)

我认为这是同步问题。向量上的单核操作在比在多个数据项上运行的多个核(线程)更加确定的时间内完成。最终你需要等待同步它们和继承矢量操作,SIMD更便宜。

答案 1 :(得分:0)

在您使用多少芯片和获得多少功能之间进行权衡 - 将SIMD添加到内核是芯片面积的相对较小的增量成本,因为矢量操作的吞吐量可能提高4倍,8倍或16倍。将内核数量增加4倍,8倍或16倍转换为芯片面积增加 更多(但代码不需要进行矢量化)。

答案 2 :(得分:0)

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