array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 多核 CPU 和多个 CPU 有何区别? - 爱码网

原文来自:http://www.solves.com.cn/it/yj/CPU/2019-06-24/1122.html

多核 CPU 和多个 CPU 有何区别?

 

 

多核CPU和多CPU的区别主要在于性能和成本。多核CPU性能最好,但成本最高;多CPU成本小,便宜,但性能相对较差。我们来看一个例子:如果我们需要组成一个48核的计算机,我们可以有这么三种选择:

  1. 把48个核全部做到一个大Die上,Die很大。这个Die加上一些外围电路组成一个单Die多核CPU。
  2. 弄4个小Die,每个Die 12个内核,每个Die很小。把这4个Die,加上互联总线和外围电路,全部封装(Packaging)到一个多Die多核CPU中。
  3. 还是弄4个Die,每个Die 12个内核,每个Die很小。每个Die加上外围电路封装成一个单独的CPU,4个CPU再通过总线组成一个多路(way/socket)系统。

我们来看看他们的性能差距和成本差距。

 

性能差距

为了很好的理解三者之间的区别,我们通过一个生活中的场景分别指代三种方式。我们想像每个Die是一栋大楼,Die里面的内核们,内存控制器们、PCIe控制器们和其他功能模块是其中的一个个房间。数据流和指令流在它们之间的流动看作房间里面的人们互相串门,这种串门的方便程度和走廊宽度决定了人们愿不愿意和多少人可以同时串门,也就指代了数据的延迟和带宽。

好了,有了这种方便的比喻,我们来看看三种情况分别是什么。

48核的大Die是Intel至强系列的标准做法:

多核 CPU 和多个 CPU 有何区别?

 

 这种方法就是既然需要这么多房间,业主有钱,就建一个大楼,每层都是超级大平层:

多核 CPU 和多个 CPU 有何区别?

 

 

走廊众多,这里堵了,换个路过去,反正方向对了就行,总能到的。所以人们可以很方便的串门,也可以有很多人同时串门。所以延迟小,带宽高。

一个CPU pacakge里面包了4个小Die的做法是AMD的标准做法,也有部分Intel也这样:

多核 CPU 和多个 CPU 有何区别?

 

 这种做法可以看作业主没钱搞大平层,但也要这么多房间,怎么办呢?在原地相邻得建4个小高层,再把小高层连起来,房间数目不变。怎么把它们连起来呢?比较现代的做法有两种:

多核 CPU 和多个 CPU 有何区别?

 

 

这种做法也叫做MCM(Multi-Chip-Module),详细内容可以看我的这篇文章:

如何像搭积木一样构建CPU?Intel和AMD都是怎么做的?

其中AMD采用硅中介(Interposer),也就是上面那种;Intel采用EMIB(Embedded Multi-die Interconnect Bridge),是下面那种。

硅中介的做法可以看作为了两个楼互通,我们把地下都挖空了,搞了个换乘大厅。而EMIB可以看成在两个楼之间挖了一个地下通道。显然挖通道更省钱省力,但因为通道是两两互联的,如果大楼多了,还不如换乘大厅方便。

好了,那我们的串门问题怎么解决呢?因为楼和楼(Die和Die)之间只有地下互通,要串门的人都要做电梯到地下一层,通过地道或者换乘大厅到另一个大楼地下,再做电梯去想要的楼层。路途遥远,好多人都不想串门了,同时如果串门人太多,会挤爆电梯,不得不串门联系工作的人们在电梯口排起了长队。显然,建筑四个相邻小高层的办法,延迟和带宽都比较差。

那么多CPU呢?

多核 CPU 和多个 CPU 有何区别?

 

 

还是没钱盖大平层,这次更惨,因为4层小高层间隔比较远,为了方便人们串门,不得不在园区里面搞了班车,用于跨楼通勤。因为班车开停需要时间,人们串门更加麻烦了。

借助这个比喻,我们应该能够得出结论,这三种方式提供48核的算力,延迟和带宽是依次下降的。下降的幅度和需要进行的work load有关,不能一概而论。大家可以借助一个工具[1]来具体测量一下内存的延迟:

多核 CPU 和多个 CPU 有何区别?

 

 

成本差距

既然大平层这么好,为什么还有人盖小高层呢?存在都是合理的,当然是成本高了。我在这篇文章中讲述了为什么Die大了成本就高:

CPU制造的那些事之二:Die的大小和良品率

简单来说,晶圆在制造过程中总是避免不了缺陷,这些缺陷就像撒芝麻粒,分布在整个Wafer上:

多核 CPU 和多个 CPU 有何区别?

 

 

如果考虑缺陷,Die的大小会严重影响良率:

多核 CPU 和多个 CPU 有何区别?

 

 

上图大家可以点开看(图比较大),其中不太清楚的红色小点是晶圆的缺陷,在Die很大时,有很大概率它的范围内会缺陷,而只要有缺陷该Die就报废了(简化处理);在Die比较小的时候,它含有缺陷的可能性就大大降低了。如图中,随着Die的减小,良率从第一个的35.7%提高到了95.2%!我们举个极端的例子,整个Wafer就一个Die,那么良率只有0%了,生产一个报废一个。谁还干这么傻的事!

这种成本增加不是线性的,而是指数性增加,具体的数字是厂商的核心机密,不为外人道。但总的来说,结合前面的例子来说就是:

1个大Die成本 > 4个小Die+互联线路总成本

那么方式2和方式3成本谁高呢?实际上方式2节约了主板上大量布线和VR等成本,总成本更低,也是主板和服务器厂商喜闻乐见的形式;而方式3往往用于堆出更多的内核和需要更多内存的情况。

结论

相信读到这里,同学们已经有了答案,结论开头已经说明,就不再赘述了。多核CPU和多Die乃至多路CPU,对操作系统等来看,区别不大,BIOS都报告了同样多的很多CPU供他们调度。区别主要在于性能上面,大Die多核性能最好,也最贵。多Die性能下降,但经济实惠。

最后要注意,这些性能区别有些是操作系统可以感知的,如通过NUMA等方式,操作系统可以具体做出优化。但也有部分是操作系统不能够知道的,只有通过各种真实的workload,用户那里才会感觉有明显的不同。

 

相关文章: