当前课程知识点:电子信息科学与技术导引(1) > 第五讲:程序与处理器 > 第六节:性能问题 > 第六节:性能问题
好
刚才我们通过
一个例子来演示
处理器怎么样来
执行程序就刚才
那个例子而言
我们的处理器性能
是不尽人意的因为
他的一条指令的
执行就要用到
7个节拍或者说
7个使用周期而
处理器的性能对于
计算机来说是
至关重要的
让处理器变得
更快更强大
始终贯穿了
计算机发展史
我们可以回顾一下
enaic它的工作速度是
每秒实现5000次
加法而在今年
夺得世界计算机
竞赛第一名的
使我们国家的
中国国防科技大学的
中国国防科技大学的
天河二号超级计算机
它的工作速度是
33.86PFlop/s
也就是说每秒
完成33.86PFlop运算
在不到70年间天河二号
超级计算机和
ENIAC相比已经有了
7千万亿倍的
计算速度差距
那么处理器在
期间发挥了重大的作用
那么怎么样来
提高处理器的性能呢
为此我们要
定义一下什么是
处理器的性能
对计算机性能
进行比较时最
基本的标准就也就是
最客观的标准是
也就是时间的
标准执行同样的
程序所需时间最短的
计算机就是最好的
计算机那么程序执行的
时候所花的时间
怎么样来度量呢
好我们这里给出了
处理器性能公式p是
执行一个程序所花的
总的时间它有
那些因素来决定呢
它是由三个引资相成
得到的其中i是
这个程序所需执行的
总指令数也就是
说这个程序有
多少条指令组成cpi
是每条指令执行的
平均周期数也就是
说执行一个指令需要
多少个时钟周期t是
以毫秒或毫微秒计的
时钟周期的长度那么
显然指令数乘以
每条指令需要的
时钟周期数再乘上
时钟周期的长度也就是
执行一个程序所花的
时间当然我们希望
这个时间越小越好
我们来看一下影响
这三个因子的因素
都有哪些我们可以
从算法程序设计语言
编译器isa硬件实现
这五个方面来看
首先对算法来说
他会影响指令数和
cpi良好的算法得到
的指令中会比较少
同样良好的算法会
尽量采用那些简单的
指令也就是说选择执行的
时钟周期数会比较的
少程序设计语言
同样会对指令数和
cpi产生影响不同的
程序设计语言会
倾向于用不同的
指令去实现他内部的
语句从而使得指令数
和cpi都会发生变化
那么编译器也会
影响指令数和
cpi一个良好的
编译器针对相同的
原程序它编译出来的
指定数会比较少同样
他也尽可能采用
一些简单的指令来
实现一些程序的
功能从而使cpi比较小
指令集体系结构作为
程序和处理器的接口
当然会对指令数和
cpi时钟周期三者
都会产生影响而
硬件实现不会影响
指令数指令数是
软件层程序层面
或者说是程序层面的
问题硬件实现只会
影响cpi和时钟周期
良好的硬件结构可以
获得更好的时钟周期
或者说更高的
始终频率同样采用
良好的结构可以
使得执行一条指令
需要的时钟周期数少
那么提高性能的
常见手段无非是
减小i值减小t值和
减小cpi的值减小i值的
方法呢通常可以
这样做我们可以
增强指令集中
指令的能力从而
使得为了实现
一个程序的功能
这个程序中的
指令数目呢可以
更少这样一种
设计理念就是早期的
csk和复杂的
指令集设计理念
减小t值的方法呢
可以采用采用很多
技术手段提高cpu的主频
减少时钟周期的
时间长度而
减小cpi值呢
主要的手段呢
是增加指令执行的
并行程度使得
多条指令可以
并行执行但是
公式中的三项并
不是相互独立的
它们之间有着复杂的联系
减少三项中的
任意一项都有
可能增加
其他两项当然有
一些技术可以在
保持其他两项不变的
前提下减少其中的
一项比如说
采用优化编译技术
那么可以在
在目标代码中
消除冗余代码从而
可以减少指令数
但是并不提高CPI和
时钟周期采用
快速电路技术或
更为先进的结构减少
信号传输延迟
可以减少时钟周期
但是并不提高CPI和
指令数我们看一个
快速电路的例子
比如说我们有
n个输入操作数想
进行亦或操作
一种操作方法呢
是这些亦或
门串连在一起
那么它的总的
时间延迟应该是
n-1另外一种设计思路
不是这样的串行链接
而是采用一种分组
并行这样一种树形结构
那么它的延迟是n
以二为底的对数那么
这两种设计新的
设计速度更快也就是
说它的时钟周期更短
但是它并不会
增加器件用的器件的
数量是一样的所以
采用快速的电路技术
可以在不增加i和t的
情况下所以采用快速的
电路技术可以在
不增加i和cpi的
前提下减少t在
在我们前面介绍
处理器工作原理的
时候我们引入了
一个最简单的
单总线的mips处理器
在那样一个处理器中
执行一条指令我们
需要7个时钟周期
之所以那么多的
时钟周期才能完成
1条指令的执行因为
它只有一条共享
总线于是在进行
原数据和目标数据传送的
时候需要分成多个
时间片分时的来进行
传送那么一种提高
工作速度的手段可以
引入多条总线比如
说我们引入这样
一种三总线的结构
对于这样一个种
三总线的结构处理器
可以减少cpi但是
并不会提高t和i
至于这个三总线结构
能够使得执行一条指令
需要的时钟周期数减到
多少我们作为
一个问题大家课后来思考
好我们也可以采用
专用通路结构来
提高处理器的
性能所谓专用
通路结构就是
原部件和目标部件
之间直接通过
专门的通路来
进行连接避免了
总线上因为分时
附用所导致的
延迟这张图呢
就是一个单周期的
mips处理器示意图
对于这样的处理器
来说它执行一条指令
需要的时钟周期
只需要1个也就是
cpi=1但是这样的
处理器会潜在的
增加时钟周期的
长度为什么是
这样我们还是
作为一个问题留给
大家课后思考
好我们刚刚这些解决性问题
的方法呢其实都是基于
这样一个思路就是在上
一条指令结束之后
我们再执行下一条指令
而我们人类做工作
其实并不是这样的
于是我们需要解决
一下能不能让指令并行的
处理这就是
指令集并行处理要
讨论的问题首先看一下
我们在日常生活中
怎么样进行并行处理来
提高我们工作效率的
我们考虑一家
洗衣店那么洗衣的
流程呢假设我们
分成4个阶段分别是
洗衣脱水折叠储藏一种
处理方法呢是串行的
进行也就是说
1批衣服完成4个过程之后
我们再来处理下一批
衣服这样的洗衣店在
现实生活中其实是
不存在的我们实际的
洗衣店一定时并行工作的
也就是说他会使得
洗衣脱水折叠储藏
这四个阶段并行的
运行起来用流水线的
方式进行处理
我们用串行的
方式来处理衣服
4批衣服那么
我们需要用的
时间要用到8个小时
而用流水线方式去
处理这4批衣服我们
只需要3个半小时
就能够处理完成
由此可见采用
流水线方式可以
大大提高洗衣服的
效率那么处理器在
执行指令的时候
是不是也可以
采用流水线这样的
运行方式呢
好我们考虑假设
一条指令的执行假设
分为了n个阶段
我们用一个n级流水线
来处理我们对他的
性能来进行分析
每个时钟周期做
1/N的工作
时间也是整个指令的
1/N那么在流水线上
每个周期都有
一条指令能够
完成执行所以
理论上性能提高
N倍也就是说
n级流水线最高能
提高n倍的性能
那么流水线的
级数越多提高性能的
程度也就越大
我们从这张图就可以
看出pc机的cpu发展过程中
它的流水线级数是
逐渐增多的那么
一条流水线够不够呢
如果我们认为
一条流水线不够
那就多条吧这就
引入了所谓
超标量流水线结构
今天的pc机上的
处理器都采用了
超标量结构它是由
多条流水线同时
进行工作的那么
超标量流水线比起
一条流水线它的性能又
提高了一个倍数也就是
说在原来提高n倍基础上
如果有多条流水线
还要提高流水线的
条数这么多倍那么
一条流水线是不是
够用呢我们现实生活中
象一家洗衣店它通常
不置一台洗衣机也
不止一台烘干机也就是
说它可以有多条流水线
并行工作那我们的
处理器也是可以
这样工作的我们可以
引入多条流水线这样就
引入了超标量结构也就
是说它有多条同时运行的
流水线那么引入了
超标量流水线结构之后
处理器的性能又可以
提高一个倍数这个
倍数就是流水线的
条数也就是说
n级流水线同时有
k条流水线那么
提高的倍数应该是
k乘以n问题在于
流水线能不能顺畅地
流下去呢我们先来
看一个例子在
这个例子中有5条指令
我们先解释一下
这5条指令他所做的
工作第一条是
一条件发指令他是
把1号寄存器的内容和
3号寄存器的内容想
减结果写入2号寄存器
第二条是一条与
运算指令他是把
2号寄存器和5号寄存器的
内容相与结果写入
12号寄存器第三条指令是
一条或指令他是把
第六号寄存器和
2号寄存器进行或
操作结果写道13号寄存器中
第四条第5条分别是
一条加法指令和
一条数据存储指令
假设我们采用
5级流水线的
方式来执行一条指令
我们把一条指令的
执行分成五个阶段
分别是取指令访问
寄存器算术逻辑运算
访问数据存储器以及
把结果写入到寄存器中
这样五个阶段那么
我们看这五条指令
在执行过程当中
这个图的横坐标是
时间我们使用
时钟周期作为
单位的那好我们会
看到在这样一条
流水线中执行
这五条指令
最后的两条指令加法
和数据存储指令是
可以得到正确结果的
因为这两条指令
虽然也用到了
第一条指令中的
2号寄存器的内容
但是他们使用的
时候2号寄存器已经
获取了最新的结果
而第二条的指令和
第三条或指令是不能
得到正确结果的因为
在第二条指令在需要
2号寄存器内容的时候
是在他的第三个周期
而2号寄存器最新的
结果要在第五个周期
才能获得所以他会
得到错的结果同样或
指令得到的也是错的
结果这样一来为了是
流水线得到正确的结果
我们在and指令或
指令执行之前必须
要进行组设也就是
说要确保第一条减法
指令确确实实的把
最新的结果写入
2号寄存器之后
那么and指令和
或指令才能
执行这也就是
说流水线已经出现了
断流实际上
流水线流不起来的
原因不仅仅指令之间
存在着依赖性它的
原因还有多个总体来说
原因有三个方面一个是
条件转移一个是指令之间
的依赖关系就是
我们刚才看到的
那个例子第三个
原因是指令和
数据无法及时的
供应给处理器去处理这是
原因是指令和数据都是
从存储器中获取的
存储器的工作速度往往
跟不上处理器的
工作速度相应对策
我们有转移预测这是
针对条件转移的
针对指令之间的
依赖关系或相关性呢
我们有转发乱序执行针对
指令和数据无法供应也
就是说存储器的
工作速度和处理器的
工作速度存在差异的
时候我们可以
引入cache也就是
高速缓存那么转移预测是
这样一种机制我们通常
取指令的时候是
顺序取值的也就是
说按照程序的编程的
自然顺序去除
每条指令在流水线中
如果遇到一条
分支指令特别是
条件分支指令的
时候如果条件分支成立
那么顺序取值取道
后面的指令都是错误的
指令因为条件分支
一旦成立它会转移到
另外一个目标地址处
而不是顺序取后面的
指令这样就会导致
流水线的断流怎么
解决这个问题
我们可以采用
转移预测也就是
说根据历史上
转移指令所采取的
行为预测它今后
应该是转移还是
不转移那么转移预测的
策略有静态预测动态
预测等等针对数据之间的
相关性我们可以采用
转发机制我们还是
看刚才的这个例子
减法指令的结果
实际上在第三个周期末
就已经产生了
他只不过是在
第五个周期才
写道目标寄存器中
而另外呢与指令和
或指令他在执行阶段
是在第4个周期和
第五个周期而到了
第四和第五周期那么
减法指令的结果
实际上已经产生了
那么我们为什么等
到把这个结果写到
目标寄存器之后在
从寄存器中再去
取它呢我们能不能
直接把这个结果
直接给需要用到的
这个结果的指令
这种技术就是
转发利用转发技术
就可以避免流水线的
停顿从而提高流水线的
效率乱续执行是
这样一种策略就是
说指令的执行跟
指令流的可以打乱为了
解释这个问题我们看
一个现实生活中的
例子现在有三个名人
要为一个晚会写
一个横幅比如说
春节联欢晚会六个字
每个人写两个字怎么
写一种写法是按abc
三个人先后顺序来写
a先写完春节在
a写春节的时候b和c
是要等待的a写完
春节之后b来写联欢
b在写联欢这两个字的
时候c是在等待的
而a已经没有事情可做了
好换一种思路我们也可以
让这三个人同时
在纸上写分别去
写春节联欢晚会
这几个字甚至可能
说b和c要比a的
速度快写完之后
我们再把每个人
写出来的字再把它
拼接在一起做
一个排序最后再
张贴出去这样
一来三个人就可以
并行的工作那么
指令的执行也是
这样的在指令流中
如果按单纯的
转发阻塞这样
一些策略遇到一条
指令被阻那么后面的
指令就不会执行
而后面的指令
很有可能与
引发阻塞的引发
相关的没有关系为什么
不能让这样的
指令先执行呢
所以我门就可以
采用所谓乱序执行的
方式也就是指令集中
我们检测相关性
在不存在相关的
条件下我们可以
让这样的指令
现执行当然
正如春节联欢晚会
这几个字三个人
写完之后要进行
一番排序一样那么
指令可以乱续执行
但是它的退出仍然是
需要按续推出的
所以我们要引入
一个重排序缓冲器
针对存储器它的
工作速度跟不上
处理器我们可以
引入高速缓存也就是
cache为什么能够引入
高速缓存呢我们
可以想一下处理器对
存储器的访问其实是
存在局部性的也就是
说在一定的时间内
我们所访问的数据
或者是指令它都在
空间上和时间上存在
这局部性于是
我们就可以引入
一个速度更快的
存储器把当前和
今后要用到的
指令和数据装到
这个存储器当中
如果在我们需要
访问存储器的时候
都能在这个快速的
存储器中得到数据和
指令而不需要访问慢速的
存储器的话那么
我们处理器的性能也
就可以得到提高
这就是存储的局部性原理
在pc机的处理器发展历史上
在80386时代先引入了
板上cache也就是说在
主板上引入了高速缓存到了
486的时代引入了
片上cache也就是说
在处理器内部芯片上
已经有了高速缓存
当处理器对cache的
访问命中率不高的时候
我们还可以引入
多级cache当cache
工作速度仍然不尽人意的
时候我们还可以把
cache分成数据cache和
指令cache进一步
我们还可以针对cache使用
预取技术cache在
处理器发展历史上
起到了越来越重要的
作用今天的处理器cache
所占的面积已经超过了
一半光有cache还是
不够的总线也会成为
一种瓶颈于是计算机中的
总线也经过了从isa到
pci 到fsb到hypertransportqpi
这样的一个发展历史
速度越来越快
带宽越来越高今后的
cpu会是什么样子呢
我们都听过moore定律
它有多个不同的
说法其中一个说法是
这样的处理器的性能
每隔18个月提高一倍
而价格下降一倍moore定律
从1965年提出至今
它支配了微电子与
计算机技术将近50年
那么什么时候是
摩尔定律的终结还是
会有其他的技术
其他的定律能够替代
摩尔定律今天处理器的
发展已经向着多和
处理器迈出了重要的
一步那么这样会带来
一些新的挑战多少个核心够用
多核对系统中
其它部分会造成
什么样的问题
我们需要怎么样去
应对这样的挑战
以及在多核众核时代
程序员如何编程
那么新的体系结构
是否会带来程序模型的
根本性变化呢
这些问题的答案有
待未来给出回答
-第一节 序言
--第一节 序言
-第二节 电磁学和分析数学发展史:磁学
-第三节 电磁学与分析数学发展史:静电
-第四节 电磁学和分析数学发展史:动电
-第五节 电子器件的发明及电子技术的发展
-第六节 电磁学的广泛应用
-第七节 电磁系统理论
-第八节 电子科学技术各学科间的关系
-第九节 电子科学技术的学科体系
-第一讲:电磁学与分析数学史概览--第一次作业
-第一节 序言
--第一节 序言
-第二节 电磁场(一)
-第三节 电磁场(二)
-第四节 物质
--第四节 物质
-第五节 电磁场与物质的相互作用:非共振作用
-第六节 电磁场与物质的相互作用:共振作用
-第七节 电磁场理论与电路理论
-第一节 空间离散化
-第二节 静场电路分析
-第三节 非静场电路抽象
-第三讲:电路抽象--电路抽象 练习题
-第四节 电路元件抽象
-第五节 非线性元件抽象
-第六节 电路抽象三原则
-第七节 分层抽象思想
-第八节 电路基本问题
-第九节 数字化抽象
-第三讲:电路抽象--Quiz 3
-第一节 序言
--第一节 序言
-第二节 什么是比特
-第三节 比特与编码
-第四节 比特与信息
-第五节 比特的用途示例
-第六节 什么是逻辑
-第七节 逻辑的用途示例
-第八节 与数字电路的关系
-第九节 小结
--第九节 小结
-第四讲:比特与逻辑--Quiz4
-第一节:从算盘到ENIAC
-第二节:通用计算机模型
-第三节:指令集体系结构
-第四节:程序和程序设计语言
-第五节:处理器的工作原理
-第六节:性能问题
--第六节:性能问题
-第七节:小结
--第七节:小结
-第一节:数据与数据处理技术的发展
-第二节:数据处理举例
-第三节:数据模型和算法的概念
-第四节:问题的抽象和建模
-第五节:数值分析问题研究
-第六节:数据和算法的关系I
-第七节:数据和算法的关系II
-第八节:大数据
--第八节:大数据
-第九节:数据挖掘技术和数据算法的展望
-第六讲:数据与算法--Quiz6
-第一节:基本内容简介
-第二节:信息的基本概念和传输的几种方式
-第三节:交换的概念和网络的几种形式
-第四节:模拟与数字通信
-第五节:调制和解调
-第六节:传输涉及的基本理论
-第七节:信息论和几种相关的编码方式
-第八节:多址方式
--第八节:多址方式
-第九节:交换的基本概念
-第十节:网络分层的基本概念
-第十一节:互联网的基本原理和有限状态机模型
-第七讲:通讯与网络--Quiz7
-第一讲:内容简介
--第一讲:内容简介
-第二讲:信息与媒体
-第三讲:人类感知与认知
-第四讲:智能信息处理
-第五讲:媒体与认知相互作用
-第六讲:媒体认知应用
-第七讲:总结
--第七讲:总结
-第八讲:媒体与认知--Quiz8
-期末考试--Final Exam










