大家好,今天给各位分享CPU是什么意思网络用语的一些知识,其中也会对程序员学习进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。
在上一篇文章里,我们聊到了计算机的冯·诺依曼架构,以及计算机的五大部件:控制器、运算器、存储器、输入设备和输出设备。在现在计算机体系中,CPU是整个计算机的核心,主要包含控制器和运算器两大部件。
在后续文章中,我们将从CPU的基本认识开始,逐步将CPU与执行系统、存储系统和I/O系统串联起来,请关注。
小彭的Android交流群02群已经建立啦~
中央处理单元(CentralProcessingUnit,CPU)也叫中央处理器或主处理器,是整个计算机的核心,也是整台计算机中造价最昂贵的部件之一。
从硬件的角度:CPU由超大规模的晶体管组成;
从功能的角度:CPU内部由时钟、寄存器、控制器和运算器4大部分组成。
对于大部分程序员,日常所处理的工作都是在跟Java和C++等高级语言打交道,并不会直接地与CPU打交道。那么,为什么我们还要花这么多时间去学习CPU呢?我认为有以下原因:
在早期的计算机系统中,只有1个通用处理器,使用1个处理器就能够完成所有计算任务。后来人们发现可以把一些计算任务分离出来,单独设计专门的芯片微架构,在执行效率上会远远高于通用处理器,最典型的专用处理器就是GPU图形处理器。
这种用来专门处理某种计算任务的处理器就是专用处理器,那为什么专用处理器在处理某些特定问题时更快呢,我认为有3点解释:
现代计算机架构都是1个通用处理器加上多个专用处理器,这种将不同类型的计算任务采用不同的计算单元完成的设计,也叫异构计算(HeterogeneousComputing)。
CPU所能理解的机器语言就是指令(InstructionCode),一个CPU所能理解的所有指令就是指令集(InstructionSet)。
为了保证芯片间的兼容性,芯片厂商并不为每款新芯片设计一个新的指令集,而是将指令集推广为标准规范,这个规范就是指令集架构(InstructionSetArchitecture,ISA),
相对于指令集架构,CPU在实现具体指令集功能的硬件电路设计就是微架构(MicroArchitecture)。如果用软件的思考方式,ISA就是CPU的功能接口,定义了CPU的标准规范,而微架构就是CPU的功能实现,定义了CPU的具体电路设计,一种指令集可以兼容不同的微架构。
因为CPU位于整个计算机系统最底层且最核心的部件,如果CPU的兼容性都出问题了,那么以前开发的应用软件甚至操作系统将无法在新的CPU上运行,这对芯片厂商的生态破坏是致命的。因此,指令集架构是相对稳定的,芯片厂商在ISA中添加或删除指令时会非常谨慎。
目前,能够有效占领市场份额的只有2个ISA,它们也分别代表了复杂与精简2个发展方向:
在CPU指令集的发展过程中,形成了2种指令集类型:
在早期的计算机系统中,指令集普遍很简单,也没有复杂和精简之分。随着应用软件的功能越来越丰富,应用层也在反向推动芯片架构师推出更强大的指令集,以简化程序编写和提高性能。例如,一些面向音视频的指令可以在一条指令内同时完成多个数据进行编解码。
这在当时的确是不错的选择。原因是CPU和主存的速度差实在太大了,用更少的指令实现程序功能(指令密度更高)可以减少访存次数。凭借这一点,复杂指令集对精简指令集的优势是几乎全面性的:
因此,到1980年代,精简指令集RISC逐渐浮出水面。目前,大多数低端和移动系统都采用RISC架构,例如Android系统、Mac系统和微软Surface系列。
相比于复杂指令集,精简指令集更加强调“正交性”,单个指令只能执行一个或少数基础操作,指令之间没有重复或冗余的功能。而且精简指令集的每条指令长度相同,非常便于实现流水线式结构。
网上很多资料有一个误区:精简指令集简化了指令集的大小。这是不对的,准确的说法是简化了指令集的复杂度。
总结一下:复杂指令集凭借更高的指令密度,在性能方面整体优于精简指令集(内存/磁盘占用、CPUCache命中率、TLB未命中率),而精简指令集牺牲了指令密度换取更简单的处理器架构,以性能换取功耗的平衡。
指令集类型CISCRISC指令数量指令数量庞大指令数量相对较少指令长度长度不同长度相同指令功能有重叠正交举例x86ARM、MIPS
相关文章:计算机的存储器金字塔长什么样?
CPU作为计算机的核心部件,未来一定是朝着更强大的性能出发。在看待CPU的视角上,我们也要具备一定的全局观:
提升主频对CPU性能的影响是最直接的,过去几十年CPU的主要发展方向也是在怎么提升CPU主频的问题上。
不过,最近几年CPU主频的速度似乎遇到瓶颈了。因为想要主频越快,要么让CPU满频或超频运行,要么升级芯片制程,在单位体积里塞进去更多晶体管。这两种方式都会提升CPU功耗,带来续航和散热问题。如果不解决这两个问题,就无法突破主频瓶颈。
既然单核CPU的性能遇到瓶颈,那么在CPU芯片里同时塞进去2核、4核甚至更多,那么整个CPU芯片的性能不就直接翻倍提升吗?
理想很美好,现实是性能并不总是随着核心数线性增加。在核心数较小时,增加并行度得到的加速效果近似于线性提升,但增加到一定程度后会趋于一个极限,说明增加并行度的提升效果也是有瓶颈的。
为什么呢?因为不管程序并行度有多高,最终都会有一个结果汇总的任务,而汇总任务无法并行执行,只能串行执行。例如,我们用Java的Fork/Join框架将一个大任务分解为多个子任务并行执行,最终还是需要串行地合并子任务的结果。
这个结论也有一个经验定律——阿姆达尔定律(Amdahl’sLaw),它解释了处理器并行计算后效率提升情况。我们把串行的部分称为串行分量Ws,把并行的部分称为并行分量Wp,正是串行分量限制了性能提升的极限,串行分量越大,极限越低。
并行度、并行分量对提升效果的影响
说明:以绿色的曲线为例,程序可以的并行分量是95%,串行分量是5%,最终得出的提升极限就会20倍。
增加核心数是提升并行度最直接的方法,但并不是唯一的方法。
现代CPU为了提高并行度,会在遵守单线程数据依赖性原则的前提下,对程序指令做一定的重排序。事实上不止是CPU,从源码到指令执行一共有3种级别重排序:
相关文章:12张图看懂CPU缓存一致性与MESI协议,真的一致吗?
随着芯片集成电路工艺的进步,在冯·诺依曼架构中的五大部件(运算器、控制器、存储器、输入和输出设备接口)也可以集成在一个芯片上,形成一个近似于完整计算机的系统,这种芯片也叫片上系统(SystemonChip,Soc)。SoC芯片将原本分布在主板上的各个部件聚合到同一个芯片上,不同部件之间的总线信息传输效率更高。
相关文章:图解计算机内部的高速公路——总线系统
今天,我们简单了讨论了CPU的基本概念,很多问题只是浅尝辄止。在后续的文章里,我们将从执行系统、存储系统和I/O系统三个角度与CPU串联起来。请关注。
文章到此结束,如果本次分享的CPU是什么意思网络用语和程序员学习的问题解决了您的问题,那么我们由衷的感到高兴!
还没有评论,来说两句吧...