第1章 计算机抽象以及相关技术
最高端的服务器是超级计算机:几十万个处理器和太字节(terabyte)2的40次方的内存TB,成本数千万或数亿。通常写为1000000000000,万亿。
云计算接替了传统服务器称为仓储级计算机中心,可以实现Saas(软件即服务)。
首字母缩略词,随机存取存储单元,RAM(Random Access Memory),CPU中央处理单元(Central Processing Unit).
计算机体系结构中的7个伟大思想:
- 抽象,隐藏低层细节以提供给高层一个更简单的模型。
- 加速经常性事件,远比优化罕见情形能更好提升性能,而且更简单,需要识别经常性事件。
- 并行,并行计算操作获得更高性能。
- 流水线,小镇居民排成长链来运水灭火,水桶在链上快速移动,无须人员往返奔跑。
- 预测,从预测错误中恢复代价不高,相对准确,预测并开始工作比明确结果再执行更快。
- 存储层次,内存成本是计算机成本主要部分,速度快,容量小,最贵的存储器用于顶层,底层则是慢,容量大,价格便宜。
- 可靠,冗余组件使系统可靠,卡车两侧都是双轮胎。
典型的应用程序有数百万行代码,依赖软件库实现异常复杂的功能,硬件只能执行极为简单的低级指令,从复杂的应用程序到原始的指令设计若干软件层次将高层次操作解释或翻译成简单的计算机指令。--抽象思想的例证
软件层次:最外层 应用软件,中间层 系统软件,底层 硬件。
系统软件中两种是必须得:操作系统,编译器。
操作系统:为了使程序更好的在计算机上运行而管理计算机资源的监控程序。
- 处理基本的输入和输出操作。
- 分配外存和内存。
- 为多个应用提供共享计算机资源的服务。
- 主要有Windows,Linux,iOS,Andrioid.
编译器:把高级语言,C、C++、Java等编写的程序翻译成硬件能执行的指令的程序。
从高级语言到硬件语言:电子硬件中电信号最简单的是通和断,表示二进制位,0或1,信息的基本组成单位。
指令:计算机硬件能够理解并遵从的命令,数字既表示指令又表示数据,第一代程序员直接使用二进制数与计算机通信,
非常乏味,后面发明了助记符,符合人类思维方式,起初手工翻译成二进制,过程繁琐,后设计出汇编器自动翻译对应二进制。
例如 add A,B
汇编器:将指令由助记符形式翻译成二进制形式的程序。
汇编程序将该符号翻译成1001010100101110,该指令告诉计算机将A和B两个数相加。
汇编语言:以助记符形式表示机器指令。
机器语言:以二进制形式表示机器指令。
高级程序语言以及编译器大大提高了软件的生产率,由一些单词和代数符号组成,可以由编译器转换为汇编语言。
- 可以使程序员用更自然的语言来思考,程序看起来更像文字而不是密码表,可以按用途设计,Fortran为科学计算设计,Cobol为商业数据操作设计,Lisp是为了符号操作设计。
- 提高了程序员的效率。
- 提高了程序相对于计算机的独立性,因为编译器和汇编程序能将高级语言翻译成任何计算机的二进制指令,例如Java跨平台。
打开机箱盖学习其中的硬件,任何一台计算机的基础硬件都有相同功能:输入数据,输出数据,处理数据和存储数据。
*重点记忆
组成计算机的5个经典部件:输入,输出,存储器,运算器,控制器。(后两个合称为处理器)
显示器
液晶显示:一种显示技术,用液体聚合物薄层的带电或者不带电来使能或阻止光线的传输。
动态矩阵显示:一种液晶显示技术,使用晶体管控制单个像素上光线的传输。
像素:图像由像素矩阵组成,表示成二进制位的矩阵,称为位图。典型大小,1024*768,2048*1536。
彩色显示器使用8位表示红绿蓝三原色,每个像素24位,可以显示2^24中颜色,1600多万种颜色。#aabbcc
触摸屏:采用电容感应实现。
Apple iPhone XS Max
- IO设备包括电容式多点触控LCD显示屏、前置摄像头、后置摄像头、麦克风、耳机插孔、扬声器、加速度计、陀螺仪、WiFi网络、蓝牙网络。
- 数据通路
- 控制器
- 存储器
A12芯片
6核CPU包含2个高性能ARM处理器和4个高能效ARM处理器,2.5GHz。
处理器:也叫中央处理单元(central processor unit),CPU是计算机中最活跃的部分。
集成电路:芯片,一种集成了几十个至上亿个晶体管的设备。
中央处理单元:包括数据通路和控制器,能完成数据相加、数据测试、按结果发出控制信号使I/O设备做出动作等操作。
数据通路:处理器中执行算术操作的部分。
控制器:处理器中根据程序的指令指挥数据通路、存储器和I/O设备的部分。
内存:程序运行时的存储空间,同时还存储程序运行时所需的数据。由DRAM动态随机访问存储器,承载程序的指令和数据,与串行磁带不同的是内存访问所需的时间基本相同。
高速缓存:在处理器内部使用,小而快的存储器,一般作为DRAM的缓冲(隐藏事务的安全地方),采用的是SRAM静态随机访问存储器。
改进设计的伟大思想是抽象,最重要的抽象之一是硬件和底层软件之间的接口。
指令系统体系结构(体系结构):是低层次软件和硬件之间的抽象接口,包含编写正确运行的机器语言程序所需要的全部信息,包括指令、寄存器、存储器访问和I/O等。
应用二进制接口:用户部分的指令加上应用程序员调用的操作系统的接口,定义了二进制层次可移植的计算机的标准。
实现:遵循体系结构抽象的硬件,计算机体系结构可以让计算机设计者独立的讨论功能,不必考虑具体硬件,例如我们讨论数字时钟的功能(计时、显示时间、设置闹钟),可以不涉及时钟的硬件(如石英晶体、LED显示、按钮)。
*重点
无论软硬件都可以使用抽象分成多个层次,每个较低的层次把细节对上层隐藏起来。抽象层次中的一个关键接口是指令系统结构--硬件和底层软件之间的接口,这一抽象接口使得同一软件可以由成本不同、性能也不同的实现方法来完成。
数据安全
易失性存储:类似DRAM的存储器,仅在加电时保存数据,也称为主要存储。
非易失性存储:掉电时仍可保持数据的存储器,用于存储需运行的程序,例如DVD,也称为辅助存储。
磁盘:也叫硬盘,使用磁介质材料构成的以旋转盘片为基础的非易失性二级存储设备,访问时间5~20毫秒。
闪存:非易失性半导体内存。
计算机通信
联网计算机主要优点:
- 通信:信息可在计算机之间高速交换。
- 资源共享:I/O设备可以通过网络共享,不必每台计算机都配备。
- 远距离访问:用户无须在要使用计算机旁边,可远距离连接计算机。
局域网:一种用于在一定地理区域内传输数据的网络,例如一栋大楼。
广域网:一种可以跨越大陆数百公里的网络。
处理器和存储制造技术
晶体管:一种由电信号控制的简单开关。
超大规模集成电路:由数十万到百万晶体管组成的电路。
摩尔定律的放缓以及制造更小尺寸的DRAM单元难度增加给DRAM三维结构技术带来挑战。
硅:一种自然元素,是一种半导体。
半导体:一种导电性能不好的物质,导电性能介于导体铜线,铝线和绝缘体塑料,玻璃膜之间,晶体管就是半导体。
硅锭:一根由单硅晶体构成的圆棒,直径8~12in,长度12~24in,20~30cm,30~60cm。
晶圆:厚度不超过0.1in的硅锭,用于制造芯片。
缺陷:晶圆或者曝光成像过程中的一个微小的瑕疵,晶片可能因为包含这个缺陷而失效。
晶片:从晶圆中切割出来的一个单独的矩形区域,非正式的名称是芯片。
芯片制造的全过程
良率:通过切分,可以只淘汰那些有瑕疵的晶片,而不必淘汰整个晶圆,合格芯片数占总芯片数的百分比。
当前工艺:10nm,7nm,实现了3nm的量产,1.8纳米研发正在推进。
性能
个人计算机用户对降低响应时间感兴趣。
数据中心对吞吐率或带宽感兴趣。
响应时间:执行时间,计算机完成某任务所需要的总时间,包括硬盘访问,内存访问,I/O活动,操作系统开销,CPU执行时间等。
吞吐率:带宽,表示单位时间内完成的任务数量。
性能的度量
CPU执行时间:执行某一任务在CPU上所花费的时间。
用户CPU时间:程序本身所花费的CPU时间。
系统CPU时间:为执行程序而花费在操作系统上的时间。
时钟周期数:也叫滴答数,为计算机一个时钟周期的时间,通常指的是处理器时钟,并在固定频率下运行。(250皮秒ps,4GHz)。
周期长度:每个时钟周期持续的时间长度。
指令平均时钟周期数(CPI):执行每条指令或程序片段所需的时钟周期平均数。
指令数:执行某程序所需的总指令总数。
基本性能公式:CPU时间=指令数xCPIx时钟周期长度
理解程序性能:
硬件或软件指标 | 影响什么 | 如何影响 |
算法 | 指令数,CPI | 算法决定源程序执行指令的数目,从而也决定了CPU执行指令的数目。算法也可能通过使用较快或较慢的指令影响CPI。例如,当算法使用更多的除法运算时,将会导致CPI增大。 |
编程语言 | 指令数,CPI | 编程语言显然会影响指令数,因为编程语言中的语句必须翻译为指令,从而决定了指令数。编程语言也可以影响CPI,例如,Java语言充分支持数据抽象,因此将进行间接调用,需要使用CPI较高的指令。 |
编译器 | 指令数,CPI | 因为编译器决定了源程序到计算机指令的翻译过程,所以编译器的效率既影响指令数又影响CPI。编译器的角色可能十分复杂,并以多种方式影响CPI。 |
指令系统体系结构 | 指令数,CPI,时钟频率 | 指令系统体系结构影响CPU性能的所有三个方面,因为它影响完成 某功能所需的指令数、每条指令的周期数以及处理器的时钟频率。 |
现代CPU功耗已经到了极限,迫使微处理器的设计产生了巨变。
单处理器向多处理器转变,单核变多核,产生并发。
性能提升,使用Python语言编写矩阵乘法程序
for i in xrange(n):
for j in xrange(n):
for k in xrange(n):
C[i][j] += A[i][k]*B[k][j]
本地没有Python环境,在谷歌浏览器中用JavaScript尝试一下
这段代码创建了两个960x960的矩阵A和B,其中的元素使用Math.random()随机生成。然后定义了multiplyMatrices函数来执行矩阵乘法。这个函数使用三层嵌套循环来完成乘法操作:外层两层分别用于遍历结果矩阵的行和列,最内层循环用于计算内积。
请注意,由于960x960矩阵乘法在大多数浏览器中运行可能需要较长时间,并且可能导致界面冻结或性能问题,实际应用中可能需要考虑优化或分块处理这种大计算。
function multiplyMatrices(a,b){
var result = [];
for(var i=0;i<960;i++){
result[i]=[];
for(var j=0;j<960;j++){
var sum=0;
for(var k=0;k<960;k++){
sum+=a[i][k]*b[k][j];
}
result[i][j]=sum;
}
}
return result;
}
console.log(new Date);
// 示例矩阵A和B
var A = new Array(960).fill(0).map(() => new Array(960).fill(0).map(() => Math.random()));
var B = new Array(960).fill(0).map(() => new Array(960).fill(0).map(() => Math.random()));
// 执行矩阵乘法
var result = multiplyMatrices(A, B);
console.log(result);
console.log(new Date);
大概5秒钟。
谬误与陷阱
陷阱:在改进计算机的某个方面时期望总性能的提高与改进大小成正比。
谬误:低利用率的计算机具有更低功耗。
谬误:面向性能的设计和面向功效的设计具有不相关的目标。
陷阱:用性能公式的一个子集去度量性能。