作者:知乎用户
链接:https://www.zhihu.com/question/20998226/answer/18659825
来源:知乎
架构可以千变万化,面向需求、综合考量是王道。
来,简单举个例子。假设现在我们要设计一台计算机的处理器部分的架构。现在摆在我们面前的有两种选择,多个单核CPU和单个多核CPU。
如果我们选择多个单核CPU,那么每一个CPU都需要有较为独立的电路支持,有自己的Cache,而他们之间通过板上的总线进行通信。假如在这样的架构上,我们要跑一个多线程的程序(常见典型情况),不考虑超线程,那么每一个线程就要跑在一个独立的CPU上,线程间的所有协作都要走总线,而共享的数据更是有可能要在好几个Cache里同时存在。这样的话,总线开销相比较而言是很大的,怎么办?那么多Cache,即使我们不心疼存储能力的浪费,一致性怎么保证?如果真正做出来,还要在主板上占多块地盘,给布局布线带来更大的挑战,怎么搞定?
如果我们选择多核单CPU,那么我们只需要一套芯片组,一套存储,多核之间通过芯片内部总线进行通信,共享使用内存。在这样的架构上,如果我们跑一个多线程的程序,那么线程间通信将比上一种情形更快。如果最终实现出来,对板上空间的占用较小,布局布线的压力也较小。
看起来,多核单CPU完胜嘛。可是,如果需要同时跑多个大程序怎么办?假设俩大程序,每一个程序都好多线程还几乎用满cache,它们分时使用CPU,那在程序间切换的时候,光指令和数据的替换就要费多大事情啊!
所以呢,大部分一般咱们使用的电脑,都是单CPU多核的,比如我们配的Dell T3600,有一颗Intel Xeon E5-1650,6核,虚拟为12个逻辑核心。少部分高端人士需要更强的多任务并发能力,就会搞一个多颗多核CPU的机子,Mac Pro就可以有两颗。首先简单的增加CPU个数的方式没有考虑到CPU与CPU之间如何高速通讯,其次如果采用了这种架构程序设计就应该要重新来过才可以高效的利用多个CPU,最后采用单芯片同构多核心的方式,你可以通过操作系统的设计让你感觉不到程序是在多个核心上运行的,但是速度就是比单核快很多。
当然如果核心数多了很多,操作系统设计的思路也得改变,如果调度管理这些核心就是另外一个复杂的话题了。
那你是选择一个有两条生产线的公司还是选两个只有一条生产线的公司呢?
很明显 如果选择两个公司 那么这两个公司之间的任务分配等等调度问题都需要你来解决,而选择一个公司的话,生产调度的问题就是他们自己的事了。
1:多核CPU功耗低,多个CPU功耗大
2:多核CPU体积小,多个CPU体积大
3:多核CPU所有核心封装在同一个dia里,每个核心之间交换数据的速度极快。多个CPU之间交换数据需要经过以下步骤:1CPU-1内存-主板芯片-2内存-2CPU(主板芯片是主板的核心组成部分,可以比作CPU与周边设备沟通的桥梁),交换数据的速度被慢速内存和低速带宽拖累。
4:多核cpu共用一组内存,数据共享。多个CPU每个CPU必须配备专属内存,否则无法工作。
链接:https://www.zhihu.com/question/20998226/answer/32032590
来源:知乎)