在多CPU机器中,不同的CPU是否会竞争相同的内存带宽,还是会独立访问DRAM?
换句话说,如果一个程序的内存带宽有限,例如1-CPU 8核系统,那么转向4-CPU 4 * 8核机器就有机会加速它(假设CPU和DRAM是可比的)?
答案 0 :(得分:3)
您的主要问题的答案是:取决于。它取决于什么?这取决于你所设置的营地,从技术上讲,有两个。
在第一个阵营,即所谓的共享内存多核,你的问题的答案将是“是”。有了这个模型,如果你愿意的话,多个拥有多个内核的处理器通过公共总线共享内存(这是你可能遇到瓶颈的地方),除此之外,没有什么可以将CPU连接在一起。这是典型的消费级计算机所属的类别/阵营/型号。
在称为分布式内存多核的第二个阵营中,您的问题的答案是“否”。这种硬件设置方案意味着每个处理器都有自己的专用内存,但有一条总线直接将处理器连接在一起。使这种情况成为可能的协议是Message Passing Interface。这也意味着CPU组在物理上不必与它们访问的RAM位于同一个盒子或房间中。你可能不会在家中找到这种设置。想想研究设施,实验室,大学,大中型企业等。
回答你的第二个问题。答案也是依赖。这取决于因为需要知道程序是否是为了利用系统并行执行可能性的并行性而编写的。虽然具有一个或两个处理器的消费级计算机共享一个内存总线,但如果程序是以并行性编写的,那么您会注意到性能提升。否则,来自程序的串行指令将仅在一个内核上串行执行。
如果您了解多核处理的细节,以及如何通过程序访问内存,那么扩展您的头盖骨的良好“网关资源”是Flynn's Taxonomy)。如果你感兴趣的话,只是谷歌它会让你失去兔子洞。
编辑:为了给予信用到期,我强烈推荐使用Gaston C. Hillar的C#专业并行编程。在我短暂的职业生涯中,这本令人愉快的书对我来说是平行主题最具启发性的。它有助于清除泥水中并行编程和多核编程之间的区别以及我刚才提到的多核处理类型,并附有图表!
答案 1 :(得分:2)
是的,所有CPU都在竞争相同的带宽。从CPU芯片到RAM只有一个硬件连接,因此所有访问都必须通过它。
可以共享或不共享不同级别的CPU缓存以缓解此问题。只有缓存未命中需要转到RAM本身。见http://en.wikipedia.org/wiki/CPU_cache#Multi-core_chips
答案 2 :(得分:2)
多个CPU是否竞争相同的内存带宽?
不一定。 Non-Uniform Memory Access和multi-channel memory architecture可以导致比使用单个CPU可实现的内存带宽更高的内存带宽。
答案 3 :(得分:0)
如果你使用相对较新的硬件而你的软件的内存限制部分来自CPU到CPU的通信,那么你很有可能合理地扩展。较旧的x86 SMP架构使用一个前端总线(FSB),每个CPU只能使用该单个前端总线与另一个CPU共享数据。借助Opteron服务器处理器系列,CPU内核也通过专用的Hyper-Transport线路单独连接到其他CPU内核。这导致Opteron服务器在当时比英特尔服务器扩展得更好。但是,与多年前相比,英特尔聘请了那些为AMD开发Hyper-Transport的工程师(以及历史上那些工程师利用他们从Alpha EV6总线获得的经验)开发的可扩展CPU到CPU SMP链接架构,称为QPI for Intel。因此,今天的英特尔服务器产品也比旧的FSB PC更具可扩展性。如果你在非x86服务器上,你可能也有一些可扩展的架构。 在这种情况下,如果您有这样的软件需要在核心之间进行交互,那么可以显着提高这些速度。