提问人:MWB 提问时间:5/7/2013 最后编辑:MWB 更新时间:5/7/2013 访问量:4572
多个 CPU 是否争用相同的内存带宽?
Do multiple CPUs compete for the same memory bandwidth?
问:
在多 CPU 机器中,不同的 CPU 是竞争相同的内存带宽,还是独立访问 DRAM?
换句话说,如果一个程序在1-CPU 8核系统上受到内存带宽限制,那么迁移到4-CPU 4*8核机器是否有机会加快速度(假设CPU和DRAM相当)?
答:
是的,所有 CPU 都争夺相同的带宽。从 CPU 芯片到 RAM 只有一个硬件连接,因此所有访问都必须通过它。
不同级别的 CPU 缓存可以共享,也可以不共享,以缓解此问题。只有缓存未命中才需要进入 RAM 本身。查看 http://en.wikipedia.org/wiki/CPU_cache#Multi-core_chips
评论
你的主要问题的答案是:视情况而定。它取决于什么?这取决于你的设置属于哪个阵营,从技术上讲,有两个。
在第一个阵营中,称为共享内存多核,您的问题的答案是“是”。使用此模型,如果您愿意的话,具有多个内核的多个处理器通过公共总线共享内存(这是您会遇到瓶颈的地方),除此之外,没有任何东西将 CPU 连接在一起。这是典型的消费级计算机所属的类别/阵营/模型。
在第二阵营中,称为分布式内存多核,您的问题的答案是“否”。这种硬件设置方案意味着每个处理器都有自己的专用内存,但有一条总线将处理器直接连接在一起。使此方案成为可能的协议是消息传递接口。这也意味着 CPU 组在物理上不必与它们访问的 RAM 位于同一盒子或房间中。您可能不会在家中找到这种设置。想想研究机构、实验室、大学、中型企业等。
回答你的第二个问题。答案也取决于。这取决于,因为人们需要知道程序是否是为了利用并行性与系统的并行执行可能性而编写的。尽管具有一个或两个处理器的消费级计算机共享单个内存总线,但如果程序在编写时考虑了并行性,那么您会注意到性能的提高。否则,来自程序的串行指令将仅在一个内核上串行执行。
如果你对多核处理的细节感兴趣,以及如何通过程序访问内存,那么一个很好的“门户资源”是扩展你的头盖骨,那就是弗林的分类法)。如果你有兴趣,只需谷歌搜索一下,它就会把你带进兔子洞。
编辑:为了给予应有的赞誉,我强烈推荐 Gaston C. Hillar 的 C# 专业并行编程。在我短暂的职业生涯中,这本令人愉快的书对我而言,是关于并行性主题的最具启发性的。它有助于清除并行编程和多核编程之间的区别以及我刚才提到的多核处理类型的泥水,并附有图表!
评论
多个 CPU 是否争用相同的内存带宽?
不一定。非一致性内存访问和多通道内存架构可能导致总内存带宽高于单个 CPU 所能实现的总内存带宽。
评论
如果您使用相对较新的硬件,并且软件的内存限制部分来自 CPU 到 CPU 的通信,那么您很有可能可以合理地扩展。较旧的 x86 SMP 架构使用一个前端总线 (FSB),每个 CPU 只能使用该单个前端总线与另一个 CPU 共享数据。在皓龙服务器处理器系列中,CPU内核也通过专用的Hyper-Transport线路分别连接到其他CPU内核。这导致皓龙服务器的扩展性比当时的英特尔服务器要好得多。但是,由于多年前,英特尔聘请了那些为AMD开发Hyper-Transport的工程师(以及历史上,这些工程师利用他们从Alpha EV6总线中获得的经验)也为英特尔开发了一种可扩展的CPU到CPU SMP链路架构,称为QPI。因此,今天的英特尔服务器产品也比旧的前端总线 PC 更具可扩展性。如果你在非 x86 服务器上,你可能也有一些架构,这种架构是可以扩展的。 在这种情况下,如果您有这样的软件需要内核之间的交互,则可以显着加快这些速度。
下一个:(切斯)方案基准?
评论