处理器多核CPU和单核CPU,和多个CPU

Posted 青山不改,绿水长流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理器多核CPU和单核CPU,和多个CPU相关的知识,希望对你有一定的参考价值。

作者:知乎用户
链接: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常见于分布式系统,用于普通消费级市场的不多,多用于cluster,云计算平台什么的。多个CPU架构最大的瓶颈就是I/O,尤其是各个CPU之间的通讯,低成本的都用100M以太网做,稍微好一点的用1000M以太网,再好的就用光纤等等,但无论如何速度和通量都比不上主板的主线。所以多CPU适用于大计算量,对速度(时间)不(太)敏感的任务,比如一些工程建模,或者像SATI找外星人这种极端的,跑上几千年都不着急的。而且多CPU架构更简单清晰,可以用消费级产品简单做数量堆叠,成本上有优势。而多核单CPU则适合对通讯I/O速度要求较快的应用,(相同核数量下)成本上也高一些,好像只有在超级计算机里会用到以万为单位的核心数,普通消费级产品也就是到16核封顶了,因为成本控制的原因。

首先简单的增加CPU个数的方式没有考虑到CPU与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
来源:知乎)
 






以上是关于处理器多核CPU和单核CPU,和多个CPU的主要内容,如果未能解决你的问题,请参考以下文章

怎么让apache利用多核CPU进行并发的问

多核 CPU 和多个 CPU 有何区别

国产CPU性能测试:多核华为排第一,单核兆芯排第一

多核cpu的频率怎么算?

请问多核CPU还需要超线程技术吗?还有多核CPU的带宽怎样计算?

java能利用多核cpu吗