是否多个cpu竞争相同的内存带宽



在多cpu机器中,不同的cpu是否竞争相同的内存带宽,或者它们是否独立访问DRAM ?

换句话说,如果一个程序的内存带宽有限,比如说,在一个1 cpu 8核系统上,移动到一个4 cpu 4*8核的机器上是否有机会加速它(假设cpu和DRAM是相当的)?

你的主要问题的答案是:取决于。它取决于什么?这取决于你设置的阵营,从技术上讲,有两个。

在第一个阵营中,它被称为共享内存多核,对你的问题的答案将是"是"。在这个模型中,如果您愿意的话,具有多个内核的多个处理器通过公共总线共享内存(这就是您会遇到瓶颈的地方),除此之外,没有任何东西将cpu连接在一起。这就是典型的消费级电脑所处的类别/阵营/型号。

在第二个阵营,被称为分布式内存多核,你的问题的答案是"不"。这种硬件设置场景意味着每个处理器都有自己的私有内存,但是有一条总线将处理器直接连接在一起。实现此场景的协议是消息传递接口。这也意味着cpu组在物理上不必与它们访问的RAM在同一个盒子或房间中。你可能在家里找不到这种布置。想想研究机构、实验室、大学、大中型企业等。

回答你的第二个问题。答案也是取决于。这取决于,因为我们需要知道程序的编写是否利用了并行性和系统的并行执行可能性。尽管您的消费级计算机具有一个或两个处理器共享单个内存总线,但如果在编写程序时考虑到并行性,那么您将注意到性能的提高。否则,来自程序的串行指令将仅在一个核上串行执行。

如果你想了解多核处理的本质,以及如何通过程序访问内存,那么Flynn的Taxonomy是一个很好的"入门资源",可以扩展你的头脑。如果你感兴趣的话,只要在谷歌上搜索一下,你就会发现这个问题。

编辑:为了给应得的荣誉,我强烈推荐Gaston C. Hillar的《Professional Parallel Programming in c#》。在我短暂的职业生涯中,这本令人愉快的书是最能揭示并行主题的书。它有助于澄清并行编程和多核编程之间的区别,以及我刚刚提到的多核处理类型,并配以图表!

是的,所有cpu都在争夺相同的带宽。从CPU芯片到RAM只有一个硬件连接,所以所有的访问都必须通过它。

不同级别的CPU缓存可以共享或不共享来缓解这个问题。只有缓存丢失需要到RAM本身。看到http://en.wikipedia.org/wiki/CPU_cache Multi-core_chips

多个cpu竞争相同的内存带宽吗?

不一定。非统一内存访问和多通道内存架构可以产生比单个CPU更高的总内存带宽。

如果您使用相对较新的硬件,并且您的软件的内存限制部分来自cpu到cpu的通信,那么您很有可能可以进行合理的扩展。旧的x86 SMP架构使用一个前端总线(FSB),并且每个CPU只能使用单个前端总线与其他CPU共享数据。使用Opteron服务器处理器线,CPU内核也通过专用的Hyper-Transport线单独连接到其他CPU内核。这使得Opteron服务器的可伸缩性比当时的英特尔服务器好得多。但多年前,英特尔聘请了那些为AMD开发Hyper-Transport的工程师(从历史上看,这些工程师使用了他们从Alpha EV6总线获得的经验),为英特尔开发了一种可扩展的CPU到CPU SMP链路架构,称为QPI。因此,今天的英特尔服务器产品也比旧的FSB个人电脑更具可扩展性。如果您使用的是非x86服务器,那么您可能也有一些架构可以以这种方式进行扩展。在这种情况下,如果你有这样的软件,需要内核之间的交互,可以显着加快速度。

最新更新