现代高性能计算使用向量指令,如NVIDIA GPU上的SIMT指令(是的,我知道SIMT不是很SIMD,但我不认为差异会影响这个问题)。我想知道为什么在向量上运行比仅仅有更多核心更好。
具体而言,为什么GPU在32字矢量上运行比使用32倍核心更好?我自己做了一些猜测,但我想听听那些真正知道他们在谈论什么的人。
以下是我的猜测:
如果每个核心都有一些控制硬件和一些ALU硬件,那么矢量核心将共享32个ALU中的一个控制硬件块,这增加了计算所花费的总晶体管预算的比例。
如果您正在进行自然可矢量化的操作,那么多个核心只会引入您不会使用向量指令的同步问题。
向量中的不同单词彼此相邻,与不同的内核不同,因此最终以32字块的形式加载和操作内存,这对于缓存非常好
真正的答案是什么?
答案 0 :(得分:0)
我认为这是同步问题。向量上的单核操作在比在多个数据项上运行的多个核(线程)更加确定的时间内完成。最终你需要等待同步它们和继承矢量操作,SIMD更便宜。
答案 1 :(得分:0)
在您使用多少芯片和获得多少功能之间进行权衡 - 将SIMD添加到内核是芯片面积的相对较小的增量成本,因为矢量操作的吞吐量可能提高4倍,8倍或16倍。将内核数量增加4倍,8倍或16倍转换为芯片面积增加 更多(但代码不需要进行矢量化)。
答案 2 :(得分:0)
要添加另一个核心CPU,设计人员必须复制管道的所有部分,以及一些其他结构以保持缓存一致性。为了使SIMD指令的宽度加倍,它们只需要将执行单元的宽度加倍,而管道的所有其他阶段保持不变。