猎鹰 发表于 2016-10-26 17:35:28

CPU参数分析

       先从一个简单的例子开始。      你在网上看见了一个人自己设计了机箱,并且组装出一个特别有个性的电脑。      于是你在心里面也有这样的想法:我也要组装一台自己喜欢的机子。      可是,怎样才能选择出自己需要的电脑配件呢?      为了方便更多人加入diy组装机的行列,我决定简单地讲解一下常用的电脑硬件性能、用法以及尺寸。由于本人姿势水平有限,难免会出现一些错误,请原谅。
      因为整篇文章比较长,话题较多,为了更容易读懂,我将进行一些分类,分别为:1.CPU参数分析   2.cpu选购 内存 硬盘 3.主板 散热系统4.电源 显示器5.显卡 机箱 共五篇(后期有可能会有些改动)。

首先应该讲讲作为电脑心脏的CPU
阿姆达尔定律:
    通常一提到CPU各位就会问“你的几核?”
   实际上核心多的cpu在实际体验中不一定会好。
那么我们可以做出一个简单的计算来证明多核心真的有那么重要吗?
   p:程序的并行度,由此可得串行计算程度为(1-p)
   s:线程数
单线程计算消耗的时间:t1=(1-p)/1    (单线程的量除以单线程的性能)
多线程消耗的时间:t2=p/s      (多线程的量除以多线程性能)
整个程序的平均性能:E=1/(t1+t2)   (程序总量除以总时间)
将t1和t2带入公式内:

带入实际的值,这样就会发现如果并行度不高的情况下,多核cpu的性能提升并不大。因为大部分时间都会浪费在单线程计算中,这样硬件的利用率不高。下图为不同并行度下的性能提升。

举一个简单的例子:从成都到重庆。       如果选择坐飞机,那么通常提前俩小时到机场过安检,路途时间俩小时(大城市堵车很正常),出机场到市里面也是俩小时。 那么不在飞机上的路途时间为六小时。飞机飞行时间半小时。那么总时间:六个半小时。      如果选择坐高铁,到火车站一小时(火车站通常在城里面),提前一小时过安检(火车安检耗时远低于飞机),出火车站到市区一小时。路途总时间三小时。高铁运行时间一个半小时。总时间:四个半小时      稍有常识的人都看得出,虽说高铁耗时是飞机的三倍,然而因为去机场的路途中花费了过多时间,最后总时间高铁仅为飞机的3/4(高铁万岁!!!!)。这时候路途时间才是影响总时间的主要因素。
   在1967年,IBM公司在研究大型超算时由阿姆达尔发现的,因此被命名为“阿姆达尔定律(Amdahl law)”。 如何提升性能:   苹果A系列处理器:在面积相当的晶元上苹果并没有设计出过多的核心,而是面积十分巨大的双核。这样可以利用强大的单核性能,在并行度不高(手机程序就没有高的)程序中充分利用资源,从而实现了日常使用中双核吊打十核的情况。    AMD的ACE(Asynchronous Compute Engine)异步命令引擎:利用硬件将串行运算的代码进一步拆分成多个并行运算程序。使得在多线程优化大大提升的DX12中,硬件的利用率大大提升。

分布式运算与多路CPU :这部分我就不单独讲解了,毕竟之前有人发过更详细的帖子:https://bbs.makertime.org/read-533
多级缓存与内存、硬盘的配合使用:       通过cpu的原理图我们都看得出,需要一个存储器,可以将一部分数据进行存储,然后需要的时候读取出来。每个人都会发现电脑存在内存与硬盘两种存储器,而且单位也一样,那么他们之间是不是有着肮脏的不对是相同的特性。没错,他们都是存储器,不过在速度上就有着天壤之别。        内存是RAM(RamdomAccessMemory)易挥发性随机存取存储器,高速存取,读写时间相等,且与地址无关,虽说有着香港记者的速度,但是有着断电清零,容量小的问题。而硬盘则可以断电后保存数据,而且容量大,只不过速度慢。至于固态硬盘和内存颗粒间的原理和差别将会在硬盘章节介绍,在这里就不过多讲解了,只需要记住内存速度快,容量较小就行。
       由于核心的发展非常快,以至于速度提升比存储器的提升还快,最后储存器便成了瓶颈。大量数据处理完毕后,就只能闲置下来等存储器,这样cpu的总性能并不能获得大量提升。于是就需要在cpu与内存之间增加一个更快速的缓存,但是发展实在是太快了,增加一级缓存的速度还是不够,于是便有了二级缓存与三级缓存。      在缓存中一种是静态RAM(SRAM);另外一种是动态RAM(DRAM)。前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM。处理器的一级缓存通常都是静态RAM,速度非常的快,但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),而且价格也相对较为昂贵(同容量的静态RAM是动态RAM的四倍)。扩大静态RAM作为缓存是一个不太合算的做法,但是为了提高系统的性能和速度又 必须要扩大缓存,这就有了一个折中的方法:在不扩大原来的静态RAM缓存容量的情况下,仅仅增加一些高速动态RAM做为二级缓存。高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM缓存慢,而且成本也较为适中。一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。       通常每一级缓存都可以做到约80%左右的命中率。其中命中率算法中较常用的“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。
Haswell中巨大的8m三级缓存已经占据了cpu内不小的体积。
   通过多级缓存可以有效的将容量与速度达到平衡。至于到底能够提升多少呢?我们可以做出一个简单的计算来得出效率的提升。    目前缓存的预估率大概在80%左右。    需要调用第二级缓存的概率为20%。    需要调用第三级缓存的概率为20%*20%=4%    需要调用内存的概率为4%*20%=0.8%    由此可见,越低级的缓存(速度越快)使用率越高,从而提升了速度。
       在此使用了AIDA64测量了多级缓存以及内存的读取速度和延时,我们可以轻松地发现,级数越低的缓存速度越快,延时越低。那么我们可以计算一下使用了多级缓存之后的速度到底提升了多少。
进行四舍五入后各级的读取速度:L1: 88GB/sL2:35GB/sL3:26GB/s    Memory:6GB/s
为了更加形象得比较速度,我制作了柱状图。
由于硬盘的读取速度实在是太低了,所以还做了一个更小的图。其中SD card是一些奸商制作的假SSD(由多张内存卡制成)。
只使用了一级缓存:
   一级缓存耗时:t1=0.8/88=0.0091
   内存读取耗时:t2=0.2/6=0.033
    平均读写速度:1/(t1+t2)=23GB/s
使用了二级缓存之后:
      一级缓存耗时:t1=0.8/88=0.0091
      二级缓存耗时:t2=(0.2*0.8)/35=0.0046
      内存读取耗时:t3=(0.2*0.2)/6=0.0067
    平均读写速度:1/(t1+t2+t3)=49GB/s
使用了三级缓存之后:
    一级缓存耗时:t1=0.8/88=0.0091       二级缓存耗时:t2=(0.2*0.8)/35=0.0046        三级缓存耗时:t3=(0.2*0.2*0.8)/26=0.0012
    内存读写耗时:t4=(0.2*0.2*0.2)/6=0.0013    平均读写速度:1/(t1+t2+t3+t4)=62GB/s
目前大部分CPU都使用了三级缓存(除了Intel的broadwell使用了128mb的四级作为核心显卡的显存使用),那么再加入第四级缓存会带来更大的性能提升吗?为此我们可以继续做出计算。假设四级缓存可以达到三级缓存读写速度(实际上速度远远达不到)。      一级缓存耗时:t1=0.8/88=0.0091
      二级缓存耗时:t2=(0.2*0.8)/35=0.0046
      三级缓存耗时:t3=(0.2*0.2*0.8)/26=0.0012
      四级缓存耗时:t4=(0.2*0.2*0.2*0.8)/26=0.00024(几乎可以忽略不计了)
      内存读写耗时:t5=(0.2*0.2*0.2*0.2*0.8)/6=0.0002(几乎可以忽略不计了)      平均读写速度:1/(t1+t2+t3+t4+t5)=65GB/s
通过以上对比我们可以发现随着级数的提升,更大一部分耗时会花在一级缓存上,这样读取速度的提升幅度会越来越小。庞大的第四级缓存带来的提升微乎其微,复杂的结构也使得设计更麻烦,完全没有必要,同时成本高昂。如果想在读取速度上继续提升,应该研发速度更快的一级缓存。
增加缓存级数后读取速度的提升。

稍小的一块晶片就是128m缓存。体积十分巨大,成本高昂。但是对cpu性能并没有什么帮助,而是当成显存来使用。


性能越强大的cpu具备了更强的数据吞吐能力,也需要越大的缓存。比如十八核的E5 V3,三级缓存就达到了45M,达到了i3 3M的十五倍。因为缓存造价较高,不能做得非常大,厂家就会根据cpu性能的需求来选择大小合适的缓存,所以也可以根据三级缓存的大小也能大致判断cpu性能的高低。






鱼骨头 发表于 2016-10-27 15:48:48

涨姿势了

猎鹰 发表于 2016-10-26 19:45:04

睿频技术与TDP:         Intel公司对TDP的定义:      TDP: Thermal Design Power,A power dissipation target based onworst-case applications. Thermal solutions should be designed to dissipate the
thermal design power.      翻译成中文:热设计功耗是指在最糟糕、最坏情况下的功耗。散热解决方案的设计必须满足这种热设计功耗。             如何理解睿频技术我们可以先看这个方波图,假如最大功率为1w,占空比50%,那么实际功率多少呢?       我相信大家都算得出是0.5w。

       其实在使用中CPU也是这样的,大部分时间里cpu并没有完全利用,但是有时候在需要性能时往往会出现性能不够的时候。而TDP指的是散热功率,由于有热惯性的存在,cpu短暂的高功率运行并不会有太大的影响。所以人们开始让cpu在正常使用中以较低的频率运行,而在需要高性能时自动超频,这样可以在散热不佳的设备中塞入高性能硬件。不过这样也是有缺点的,那就是并不能长时间以如此高性能运行,当温度过高时便会自动降频。      其中最有代表性的便是Core M,凭借仅仅4.5w的tdp是其可以放入无风扇的平板电脑中。但是由于具备极高的睿频,在性能测试中能与55w的桌面级奔腾处理器获得了相当的性能(虽说持久力并不好,但是也没人会用core m做高负荷的工作。我只能说另请高明了)。


超线程技术(此概念实际上是AMD公司提出的,自己却没有使用,最后却被Intel发扬光大):
    之前很多人以为超线程就是模拟出来的一个核,性能相当于30%的实体核。实际上这种无中生有的核心是不存在的,以后你再把这种观点说一遍等于你也有责任。实际上超线程仅仅是把一些未利用的硬件调用起来,提高利用率。为此我通过对比amd最新的Zen架构(右边)和之前被黑得很惨的推土机架构(左边)来讲述一下资源的分配问题。       推土机1模块有2个整数核心,每核心2个ALU;1个浮点单元,规模是128bit*2
      Zen的1核心有4个ALU;Zen的1核心浮点规模是128bit*4
    做一下对比就会发现一个zen的核心整数规格达到了之前推土机一个模块(双核心)的规模,其中浮点更是达到了两个模块的规模(很多游戏就是靠浮点运算,正是双核心公用一套规模极低的浮点单元,从而造成游戏i3默秒全的原因)。
    既然这么简单就能提高单核性能,那么能不能继续加大规模呢?实际上是不行的,因为每个核心在实际使用中占用的ALU在2个左右。
    为什么只占用两个却使用了四个呢?
    注意,我说的不是两个,而是两个左右,可能左也可能右。如果只有两个会在需要三个甚至四个的时候出现不够用的情况。这也是推土机被诟病利用率不高的原因。
虽然四个可以防止不够用的情况,但是这样不就造成大规模的硬件浪费吗?
    其实这时候便进入了主题,超线程的作用。超线程技术便通过仅仅增加5%晶体管,将这些没有完全使用的部分利用起来,从而达到资源的利用。当然实际上要实现超线程技术比我说的要复杂很多。
    超线程并不是只能模拟出一个核心,比如xeon phi就做到了72核288线程。


小结:
    超线程只是提高了硬件的利用率,如果硬件已经被完全利用,那么超线程将无任何用处。常说的30%其实也是大致情况,并不是所有时候都能达到。





End~~~~~~~~~~

3.1 发表于 2016-10-27 13:15:36

6666厉害长知识了

王WZJ_97 发表于 2016-10-30 13:41:12

那比喻的图片有点搞笑
页: [1]
查看完整版本: CPU参数分析