资讯详情

【2020/12/4修订】【梳理】计算机组成与设计 第1章 计算机中的常见概念(docx)

配套教材: Computer Organization and Design: The Hardware / Software Interface (5th Edition)


第一章 计算机中常见的概念

第一节 基本思想和常用术语

第二节 性能

链接:https://pan.baidu.com/s/1e1WoLvPzkDXjDYZmAQ0bqA 提取码:0000


第一章 计算机中常见的概念

本章的内容是概述性的。有些概念被解释得更复杂,并将在下一章中进一步学习。如果你一时无法理解,那也没关系。你可以结合搜索引擎和未来的深入学习慢慢消化。 第一节 基本思想和常用术语 以下是贯穿计算机科学与工程的八个重要思想: ·摩尔定律(Moore’s Law)。这是Intel创始人之一Gordon Moore提出的内容是:集成电路(Integrated circuit,IC,也叫芯片(chip))晶体管数量每18至24个月翻一番。 目前,摩尔定律正在逐渐接近瓶颈CPU该领域已经失败。 ·抽象(abstract)方法。为了缩短和延长越来越明显的开发周期,在不同层次上使用不同的抽象模型来简化设计过程:先进层次的模型将隐藏低层次的细节。例如函数时,通常不需要考虑函数内部的执行过程;在使用普通逻辑门设计数字电路时,大多数不考虑如何在晶体管层实现逻辑门。 ·优化最常见的情况。为了使计算机在大多数时候表现出更好的性能,应优先考虑常见情况。此外,优化常见场景的难度往往低于优化个别极端情况。 ·并行(Parallelism)。尽可能多地执行指令。 ·流水线化(Pipelining)。装配线已成为并行执行芯片的必备设计。流水线技术将在第四章进一步学习。 ·预测(prediction)执行。有话说:请求饶恕比请求批准更好。”(It can be better to ask for forgiveness than to ask for permission.)猜测接下来需要执行的可能性更大的指令并提前执行,而不是让芯片空转。虽然误预测的成本较高(清空流水线并重新执行一系列指令,见第四章),但预测的平均性能较好。 ·分层存储。程序员总是渴望快速、大、便宜的存储。但是高速存储(如缓存)成本巨大,大容量存储(如硬盘)(Hard Disk Drive,HDD))虽然价格低,但性能远远不足。不能兼顾容量和性能。一个缓和这些矛盾的方法是:设计不同层次的存储。金字塔可以表示多层存储:顶部是速度快、容量小、价格昂贵的存储(寄存器、多级缓存);第二级是内存(memory),成本降低,速度减慢,容量增加;下一级是外存,包括HDD / SSD(Solid State Drive,成本低、速度慢、容量大的固态硬盘)。 ·冗余(Redundancy)。任何计算机设备都有一定的损坏概率(或无前兆的突然死亡)。在计算机系统中添加多个相同功能的设备(如多数据备份和多电源),以确保在一些设备损坏时,它通常不会影响系统的运行,并争取维修时间。

计算机拥有众多的软件。软件有不同的分类方法,但所有的计算机一定有两种软件:操作系统(Operating System,OS)和编译器(Compiler)。 操作系统是用户程序和硬件之间的界面,并提供包括但不限于: ·处理基本输入输出(IO)操作。 ·分配内存和外存。 ·在多应用共享计算机时提供必要的保护。 Windows是常见的操作系统。Windows还有一系列类别UNIX系统(Linux、FreeBSD、Solaris、Minix等)。Android是基于Linux操作系统主要用于手机等移动设备。iOS和Mac OS X基于类UNIX系统Darwin。 编译器负责高级语言(如:C / C )编写的程序转换为低级语言,然后进一步转换为机器指令,使计算机执行程序。

目前的计算机都是二进制的(binary)是的。计算机只知道0和1两个代码,每个0或1称为二进制位(binary digit),简称位(bit)。我们命令计算机执行的动作称为指令(instruction)。二进制表示所有指令和数据。 计算机诞生时,程序员直接用二进制编写机器指令,让计算机执行。这个过程复杂易错。后来,人们发明了汇编器(assembler)和汇编语言(assembly language)。汇编语言是机器语言的助记符,汇编器负责将汇编语言转化为机器语言(machine language)。计算机只能直接执行机器语言。 当然,使用汇编语言并不方便,因为汇编语言迫使程序员根据计算机思维而不是人类的共同思维来编写程序。后来,高级语言(high-level programming language)出现了。高级语言也属于抽象。

编译器将高级语言转换为汇编语言,然后将汇编器转换为目标代码,然后通过链接器(linker)生成最终的机器代码。 英语单词和代数符号用于高级语言,比汇编语言更接近自然语言。不同风格的高级语言有不同的用途。Fortran科学计算;Cobol多用于商业(这两种语言现在很少用);Lisp用于符号操作;C / C 常用于高性能应用,包括科学计算、单机游戏和高频交易。还有许多语言只在特定领域使用。 高级语言大大缩短了开发周期,降低了学习门槛,为计算机及其编程的大规模应用奠定了基础。 很多时候,高级语言是一个平台(platform,平台可指硬件或软件环境,如操作系统、操作库、编程语言、主板、网络甚至计算机整体等,请结合上下文理解)无关:如果程序使用高级语言支持跨平台部分,可以同时完成多个平台的编程。编译器和汇编器负责将高级语言转换为机器语言(二进制指令)。

输入设备(input device)鼠标、键盘麦克风、触摸屏、扫描仪、摄像头、数位板、体感设备等指向计算机提供信息的设备。输出设备(output device)指从计算机中输出信息的设备,如显示器、打印机、投影仪、蜂鸣器、音响、耳机等。输入设备和输出设备合称输入 / 输出设备(I/O device)。

像素(pixels,px)是显示的基本单位。在现代计算机中,每个像素通常至少占24个bit。每8 bit代表一种颜色(红色(R)、绿(G)、蓝(B))亮度,我们称每种像素颜色的位数为深色(color depth)。如果用8个bit描绘一种颜色,那么颜色深度是8-bit。有时一个像素会引入第四个通道,即透明度(alpha)。8-bit色深可以表示224 = 16777216种颜色。有些专业显示器可以输出10-bit乃至12-bit能显示的颜色总数为1、073、741、824、68、719、476、736。 我们使用分辨率(resolution)来表示一张图片、一段视频的每一幅画面或一台显示器包含的像素有多少。例如: 超高清蓝光盘(Ultra-HD Blu-ray Disc,UHD BD)视频分辨率为3840×2160:横向3840像素,纵向2160像素。 便携式计算机的屏幕分辨率基本达到1920×1080。 ARRI ALEXA 65可以拍摄6560×3102分辨率视频;使用RED MONSTRO 8K VV传感器的RED相机可以拍摄8192×4320分辨率视频。

为了显示暂存内容,计算机必须包含光栅刷新缓存(raster refresh buffer),也称帧缓存(frame buffer),又称显存(Video RAM,VRAM)。

中央处理单位(Central Processing Unit),也称处理器(processor),它是计算机的核心部件之一。CPU用于执行输入指令。具体来说,主要负责处理数据和控制。

随机动态访问存储器(dynamic random access memory,DRAM)目前用作计算机的内存(memory)。将要保存的数据或准备执行的代码暂时存储内存。与随机(乱序)访问相比,磁带(magnetic tape)是顺序访问的存储器。在磁带上访问远离当前读取位置的数据需要很长时间。但访问DRAM理论上,任何区域的耗时都是一样的。

高速缓存(cache),缓存是一种容量小、速度快的存储器。CPU缓存通常是静态随机访问存储器(static random access memory,SRAM)。SRAM速度远快于DRAM,但是成本很高。

指令集架构(instruction set architecture,ISA),简称架构(architecture),它是连接硬件和最低级别软件的抽象模型,包括编写可以正确执行的机器语言的所有信息,包括指令集、寄存器、内存访问特性IO模型等。 常见的ISA有x86、ARM、MIPS、SPARC等。 指令集(instruction set)包含芯片支持的所有指令。 ISA可扩展,扩展后ISA可执行原有ISA所有指令,但原始指令ISA扩展后不支持ISA例如:x86指令架构的64位扩展到x86-64,简称x64。 Intel的Core i3、i5、i7、i9都是x86-64指令集架构。一段能在Core i3-8100 CPU上运行的机器代码,也能在使用Core i9-10980XE在机器上跑。但也有例外,例如,一些游戏或科学计算软件需要CPU至少具备AVX2指令集,如果你使用它,Intel CPU,这些软件只能存在Haswell架构(如:Core-i3 4130)及以后的CPU上运行。

应用程序二进制接口(application binary interface,ABI)一般是一个库(library)或者操作系统的一部分描述了应用程序与操作系统、应用程序与其库或应用组成部分之间的低层接口。ABI该系统下运行时必须遵守的编程协议包括: ·各种据类型的大小、对齐方式。 ·调用约定。如:函数参数和返回值如何传递,是全部压入栈中还是有一部分保存在寄存器内;哪个函数参数用哪个寄存器;第一个参数是最先还是最后压入栈中;……。 ·应用程序如何进行系统调用(system call),系统调用码,等等。 ·目标文件的二进制格式,等等。 一個ABI定義了機器碼如何存取資料結構與運算程序,此處所定義的界面相當低階並且相依於硬體。而应用程序编程接口(API)則較為高階,並不直接相依於硬體,通常會是人類可閱讀的程式碼。

C++ ABI的部分内容举例(在不同的编译器下会略有不同): ·函数参数传递的方式,比如x86-64用寄存器来传函数的前4个整数参数。 ·虚函数的调用方式,通常是虚指针、虚表,然后用偏移来调用(虚表的本质也是一个数组)。 ·struct和class的内存布局,通过偏移量来访问成员。

有的存储器是易失性(volatile)的,比如DRAM。在计算机断电后,其中的数据立即丢失。磁盘、光盘和闪存(flash memory)都是非易失性(nonvolatile)存储。DRAM损坏的几率非常低,但Flash的寿命则相对不太高。

局域网(Local area network,LAN)用于小范围(如:家庭、学校、公司、工厂等)的网络连接。广域网(Wide area network,WAN)则超越了局域网的通信范围,成为当今互联网的主干。以太网(Ethernet)是常用的局域网技术,由IEEE 802.3规定。后来无线网络(WLAN,由IEEE 802.11协议规定)发展起来,万物互联的物联网(Internet of Things,IOT)也在酝酿之中。关于网络的知识,请学习专业必修课《计算机网络》。

晶体管(transistor)是集成电路的基本组件。一个IC包含大量的晶体管,例如GA100 GPU(图形处理器)芯片一共有542亿晶体管。规模较大的IC有一个专门的名词来描述:超大规模集成电路(Very large-scale integrated circuit,VLSI)。

下面简单介绍芯片的生产过程: 首先要从沙子中提取硅(silicon)。硅的导电性能不如金属导体,称为半导体(semiconductor)。然后,用特殊的化学过程进行处理,添加新的材料,使得许多微小的区域或导电,或绝缘,或可以通过开关控制导电性。 纯度极高的单晶硅会被制成硅锭(silicon ingot),然后制成晶圆(wafer),作为制造IC的衬底(基片)。一片晶圆的直径多为8英寸或12英寸(以后可能有18英寸的晶圆),厚度不超过3 mm。晶圆经过几十道工序以后,上面就会按照设计好的图案形成晶体管、导体、绝缘体,这个过程称作光刻(lithography)。IC一般只有一层晶体管,但是有多层金属导体,用绝缘体分隔。刻好电路的晶圆会被进行测试,不合格的裸芯片(die)将降级或报废。测试通过的芯片会进行封装(package),连接到IO引脚上,然后再进行测试,选出最终的合格品销售给客户。

(上图是已经蚀刻好电路的Core i7芯片的晶圆,完整芯片的大小是20.7 mm×10.5 mm,共280片) 晶圆被做成圆形,是制作工艺决定的。提出高纯度的单晶硅以后,可能会把单晶硅切下一个平角(flat),或者只切一个小口(称作notch),可以帮助后续工序确定晶圆的摆放位置。

一片晶圆最终通过全部测试的合格芯片数量与原有的完整芯片的数量之比,称为良率(yield)。由于边缘应力的原因,晶圆的边缘出现不合格芯片的概率较大,做成圆的反而可以提高硅片的利用率。而且,圆柱形的单晶硅方便运输,如果做成有棱角的,则容易磕碰。在后续的工艺中,圆形的晶圆也更加方便加工。 很显然,芯片尺寸(die size)更大时,同一块晶圆上只能切出更小的芯片。而且晶圆上任何位置的瑕疵都会导致包含该瑕疵的整个芯片报废。所以厂商们总希望把芯片做得更小(同时也更多地减少了边缘处的浪费)。换用更小的制程(process)可以缩小单个晶体管的尺寸,从而减小芯片面积。目前(2020年)Intel最先进的制程为14 nm或10 nm,而TSMC和三星半导体则具有7 nm的制程。 制程只是标称值。制程相同时,工艺(technology)可以不同,使得不同代工厂生产的芯片的晶体管密度不尽相同。

大多数半导体企业无力负担IC制造的极高成本。它们只负责设计IC,称为无晶圆(fabless)半导体公司,仅从事晶圆,既芯片的设计、研发、应用和销售,而将晶圆制造交由专门的代工厂制造为成品。 大多数知名的fabless都集中于美国,比如Apple、Nvidia、AMD、Qualcomm、Broadcom、Marvell和Xilinx;也有许多位于台湾,比如MTK(MediaTek)、Realtek;中国大陆的fabless则主要有海思半导体、紫光(展讯为紫光旗下企业)等。位于南韩的三星电子虽然具有晶圆厂,能制造自己设计的芯片,但因為建廠成本太高,它同时也给苹果公司为iPhone、iPad设计的处理器提供代工服务。 位于台湾的TSMC(台灣積體電路製造股份有限公司)是目前世界上规模最大的代工企业。Intel则拥有自己的代工厂;AMD则早已将自己的半导体代工业务剥离为GlobalFoundries。位于上海的中芯国际(SMIC)则为大陆的主要半导体制造企业之一。 只負責設計電路,不負責製造、銷售的公司則稱為IP核公司,如ARM。 IP核,全称知识产权核(英語:intellectual property core),是在集成电路的可重用设计方法学中,指某一方提供的、形式为逻辑单元、芯片设计的可重用模組。IP核通常已经通过了设计验证,设计人员以IP核为基础进行设计,可以缩短设计所需的周期。 IP核分为软核、硬核和固核。软核通常是与工艺无关、具有寄存器传输级硬件描述语言描述的设计代码,可以进行后续设计;硬核是前者通过逻辑综合、布局、布线之后的一系列表征文件,具有特定的工艺形式、物理实现方式;固核则通常介于上面两者之间,它已经通过功能验证、时序分析等过程,设计人员可以以逻辑门级网表的形式获取。 第二节 性能 性能(performance)是衡量计算机运行快慢的指标。如果你是个人用户,你一般会简单认为对同时开始同一个任务的两台计算机,先完成任务的计算机性能更好;数据中心则更喜欢通过量化的指标——吞吐量(throughput)和带宽(bandwidth)等,来进行评估。对不同的场景,评估性能的方式与尺度也不同。 主观上来说,完成一个任务的执行时间包括CPU花费在运算本身的时间,以及磁盘读写、内存访问、IO活动等各个动作的时间。但在衡量CPU性能的时候,CPU时间一般就只包括CPU本身去执行任务的时间,而不包含其它项目。不过需要记住,最终影响用户体验的还是包括上面提到的各个杂项的总的流逝时间。 芯片的运行由时钟(clock)进行控制。单个时钟周期(clock cycle / tick / clock tick / clock period / clock / cycle)是主频的倒数。例如:一个4 GHz主频的家用CPU的一个时钟周期是250 ps。

每指令周期数(cycles per instruction,CPI)是衡量CPU性能的一种指标。设一段代码包含的指令数量为I,平均每个指令需要耗费的周期CPI为c,易得:执行该段代码需要耗费的总周期数C=Ic。 如果又已知单个时钟周期的时间T,易得:总时间t=CT。而主频F=1/T,所以也有t=C/F。 算法、编程语言、编译器和ISA,都会影响将代码转换成的机器指令的总数量和CPI。 当然,现在的CPU已经可以在一个周期内执行多条指令了,所以工程师们一般不会用CPI这个指标,而是取其倒数,称为每周期指令数(Instructions per cycle,IPC)。 唯一能够被完全可靠测量的计算机性能指标是时间。例如,改进指令集,减少指令数目,可能降低周期长度或影响IPC,从而影响最终的效果。IPC与执行的指令类型相关,执行指令数最少的代码其执行速度未必是最快的。

芯片的功耗(power consumption,在有的软件上可能只写作power)指的是功率的损耗,指设备、器件等输入功率和输出功率的差额。对包括CPU、GPU在内的多数芯片,输入的电能几乎都会转化为内能,此时功耗≈功率。 一般而言,CPU厂商会标出散热设计功耗(thermal design power,TDP),它的含义是当处理器达到负荷最大的时候,释放出的热量,单位为瓦(W)。TDP是一个散热功率,CPU应当搭配最大散热功率大于等于其TDP的散热器。 不过,对许多CPU,TDP并不等于其最大的功耗。一些非高端的CPU,其最大功耗可以显著小于TDP;而对于较为高端的CPU,其最大功耗常常远大于TDP。 IC的功耗分为静态功耗和动态功耗两种。静态功耗主要是漏电流(leakage current,或简写为leakage)引起的,即使晶体管处于关闭状态,也会具有静态功耗。而动态功耗主要是晶体管的翻转瞬间的功耗和容性负载的功耗。 目前,制造IC普遍采用互补金属氧化物半导体(complementary metal oxide semiconductor,CMOS)。该种半导体使得理论上静态功耗为零,因此动态功耗成为了整个IC的功耗的主要成分。 动态功耗的计算公式是:P = CV^2 af。C是负载电容,V是电压(VDD),f是频率,a是常数。

随着制程的发展,实际上IC的静态功耗正在迅猛地增大。目前许多代工厂的工艺已经遇到瓶颈,在芯片继续缩小时,制程与工艺的进步对动态功耗的降幅正在减小;同时,静态功耗随漏电流的加大而显著加大,这主要是因为电压降低和晶体管尺寸减小引起的;总的而言,制程工艺的进步对功耗的下降已然不明显。 截至目前,个人计算机使用的CPU中,功耗可以轻松达到50 ~ 100 W。而运行能够使用AVX指令集(见第二章)的应用程序时,通过AIDA64、HWiNFO64等软件可以看出,此时的功耗往往达到CPU标称TDP的两倍以上。 只是,对于许多计算机产品,特别是大量的便携式计算机,CPU的最大功耗往往受到限制。对于Intel CPU,其功耗受到若干个指标的限制。笔记本CPU的功耗一般不会长期超过PL1(PL = Power Limit);而PL2一般高于PL1许多,也基本上超过了散热系统的散热能力,CPU被允许短时间达到此功耗。台式计算机的功率一般不受这些指标的限制。使用Intel XTU可以调节这些限制指标,但也可能受平台或计算机整机厂商的限制而无法调节。 对于AMD CPU,也存在类似的功耗控制。

功耗问题受到重视的原因有三:首先,增加功耗势必要求增加CPU的供电和接地的引脚数目,增加CPU和主板的设计成本。此外,CPU的输入功率基本全部转化为热量,因此对散热系统的要求很高。高温会进一步带来功耗的上升。以及,对于机房而言,由于CPU的数量非常多,电力的消耗将十分可观。在大型数据中心的设计中,耗电往往是首要的考虑因素。

现在的CPU一般都有多个核心(core)。核心之间基本是独立的,可以并行(parallel)运行任务。但针对单核心编写的程序无法利用多个核心。若要令程序能正确在多个核心上运行,则必须修改代码,使得能够将任务拆分到多个核心上正确运行。当核心数进一步增加时,代码通常还要继续修改。

工作负载(workload),常简写为负载(load),在计算机科学与工程中,一般指运行在计算机上的若干个程序。

基准(benchmark),是特别选出的用于评估计算机性能的一组程序。SPEC(Standard Performance Evaluation Corporation)是由多个业内厂商与高校、科研院所于1988年联合组建的非营利组织,用于制定具有一定权威性的性能评测基准。 SPEC CPU是常用的跨平台、跨ISA的CPU性能评测基准,其最新版本为SPEC CPU 2017,并于2019年发布V1.1版本更新。SPEC CPU 2017是计算密集型性能评测基准,主要评估:CPU性能、内存性能(包括不同层次的内存,如缓存、DRAM等)和编译器性能(C / C++ / Fortran)。SPEC CPU 2017不用于考察其它方面,如网络、图形、Java库、IO等。 SPEC CPU 2017提供两种衡量性能的尺度,包括SPECspeed和SPECrate。前者基于时间来评判性能(例如:完成一份同样的任务花费的时间),后者基于吞吐量来评判性能(例如:每小时完成的任务数)。SPECspeed和SPECrate各自提供了整数(integer)和浮点(floating point)性能的测试项目。SPEC CPU 2017还具有基本(base)和峰值(peak)两种性能评估的度量。测定峰值性能时,更多编译选项被允许开启,可以对代码进行深度优化来获得更高性能。需要测定哪种性能,则根据需要而定。例如:一个通常只运行一般的桌面应用程序的用户也许更偏向基本性能,而运行定制的大型建模程序的一群科学家对峰值性能更感兴趣。 SPEC CPU 2017共有43个测试项目,分为4组,列举如下:

其中,KLOC代表代码行数(千行)。由上表知:测试领域涵盖Perl解释器、GNU C编译器、路径规划、计算机网络、离散事件模拟、XSLT进行的XML到HTML的转换、视频压缩(x264)、α-β树搜索(国际象棋)、蒙特卡洛树搜索(围棋)、递归解生成器(数独)、一般数据压缩、爆炸建模、相对论物理、分子动力学(NAMD / NAB)、生物医疗成像(有限元光学断层摄影)、光线追踪、流体动力学、天气预报、3D渲染与动画(blender渲染器)、大气层建模、大规模海洋建模(气候级)、图像操作、计算电磁学和区域海洋建模。 可见,SPEC CPU 2017其实是更加偏向专业领域的测试。总之,性能的评测没有绝对标准,也不能只看少量的指标。选择计算机时,应当根据自己的应用领域来选取合适的基准评估此计算机的性能。 常见的性能指标还有:MIPS(百万条指令 / 秒,现多见于微控制单元(Micro controller unit,MCU))、IOPS(整数运算次数 / 秒)、FLOPS(浮点运算次数 / 秒)。

如果持续不断地增加芯片的规模,性能并不会等比提升。 即使使用无限个核心进行并行化,串行(serial)执行的那部分是不会加快的,它们无法被分配到多个核心上,而必须使用单个核心运行完毕。如果我们能够得知一个程序有多少部分不能被并行化,那么就容易得出核心数与理论并行性能的关系,称为Amdahl定律: T=p(t/n)+(1-p)t T为并行化后所需的运行时间,t为并行化之前的运行时间,n为核心数,p为代码中可以被(完全)并行化的比例。 Amdahl定律告诉我们:如果一个程序具有不能被并行化的代码,那么扩大芯片的规模不会令这个程序的性能线性提升,且程序的运行性能理论上能够提升的幅度也是有限的。

如果芯片或计算机系统的使用率很低,那么功耗也不一定低。例如Google的一个大型计算机多数时候的占用率都在10%到50%,满载的时间少于1%。即使在最好的情形下,2012年该计算机在10%的负载时的耗电量仍然达到满载时的33%。能耗比较高的芯片或整台计算机,其占用率和功耗理论上应该成正比例。

标签: 圆柱式电力电容器系列

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台