(十八)面向流水线的设计:CPU的一心多用
一、单指令周期
由前可知,一条CPU指令的执行有三个步骤:指令读取、指令译码、指令执行。由于这个过程受CPU时钟的控制,如果我们将这个过程安排在一个CPU时钟周期内执行,这种设计思路就叫单指令周期处理器。这样的设计需要将指令周期时间设为与耗时最长的那条指令执行时间相当,这样显然会使得CPU频率比较,会造成一些简单执行时大量CPU时间被浪费,如图示:

基于这种情况,现代的CPU都不是单指令周期处理器,而是采用了一种指令流水线的技术。
二、现代处理器流水线设计
由于指令的执行一般都可以拆分为多个小步骤,因此我们可以将一个指令的执行分解为诸如“取指令”、“译码”、“执行”这样的散步也可以拆分成更加细的步骤,那么在一个指令的取指令结束之后,可以马上进行下一个指令的取指令操作,如此整个执行效率就可以提高,只要是不存在前后依赖的子指令,理论上都可以并行提高效率。这样一来我们可以把CPU周期时钟周期时间设为一个个小步骤执行的时间即可。这样的协作模式就称为指令流水线,里面每一个独立的步骤就称为流水线阶段或流水线级。这样我们只需保证一个最复杂的流水线操作在一个CPU时钟周期之内完成就好了。
一个指令可以拆分为几个流水线级就称为几级流水线。
理想情况下,将CPU指令拆分成耗时差不多的流水线级是浪费时间最少的方案。在CPU内部也就像一个工厂一样,不同分工的组建不断的处理上游传递下来的内容,而无需等待上一个产品生产完成后再启动下一个商品的生产。
三、超长流水线的性能瓶颈
理论上,流水线级数拆分越深,CPU吞吐率会越高,但增加流水线深度也是有成本的,多增加一级流水线就要多一次写入流水线寄存器的操作,如图:

当流水线级数多到一定程度,额外的消耗甚至会大于执行指令的耗时。因此,设计合理的指令流水线级数在现代CPU中是非常重要的。
四、主频战争带来的超长流水线
流水线技术并不能减少单条指令的执行时间,只是能够提高运行很多条指令时的吞吐率。举例如下:
- 一条整数加法需要200ps;
- 一条整数乘法需要300ps;
- 一条浮点数乘法需要600ps;
那么在单指令周期情况下,CPU时钟周期应该设为600ps,结果是在1800ps内执行了3条指令。而如果使用六级流水线,每一级流水线都只需要100ps,那么当第一条指令的第一个stage结束之后,第二个指令的第一个stage就开始执行,第二个指令的第一个stage执行完成后,第三个指令就开始执行,这样三条指令的执行总共耗时800ps,吞吐量上升一倍多。

五、新挑战:冒险和分支预测
超长流水线技术至少包含以下几个方面的问题:
- 功耗问题:由于流水线的加深,电路增加、所需要的晶体管增加了很多,使得功耗和散热问题都极为严重。
- 流水线带来的性能提升是理论上的,实际程序执行中,受限于前后步骤的依赖关系,并不一定能够做到;
第二个依赖问题,就是计算机组成里所说的冒险问题,有数据冒险、结构冒险、控制冒险等依赖问题,总体上流水线越长,要解决的依赖问题越严重。应对这些问题的方案有乱序执行、分支预测等,在后面将逐步展开。
(十八)面向流水线的设计:CPU的一心多用的更多相关文章
- HBase总结(十八)Hbase rowkey设计一
hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储. 1.row ...
- Java进阶专题(十八) 系统缓存架构设计 (下)
前言 上章节介绍了Redis相关知识,了解了Redis的高可用,高性能的原因.很多人认为提到缓存,就局限于Redis,其实缓存的应用不仅仅在于Redis的使用,比如还有Nginx缓存,缓存队列等等.这 ...
- 【转载】COM 组件设计与应用(十八)——属性包
原文:http://vckbase.com/index.php/wv/1265.html 一.前言 书接上回,本回着落在介绍属性包 IPersistPropertyBag 接口的实现方法和调用方式.属 ...
- 菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章
菜鸟玩云计算之十八:Hadoop 2.5.0 HA 集群安装第1章 cheungmine, 2014-10-25 0 引言 在生产环境上安装Hadoop高可用集群一直是一个需要极度耐心和体力的细致工作 ...
- COS访谈第十八期:陈天奇
COS访谈第十八期:陈天奇 [COS编辑部按] 受访者:陈天奇 采访者:何通 编辑:王小宁 简介:陈天奇,华盛顿大学计算机系博士生,研究方向为大规模机器学习.他曾获得KDD CUP 20 ...
- 任务三十八:UI组件之排序表格
任务三十八:UI组件之排序表格 面向人群: 有一定JavaScript基础 难度: 低 重要说明 百度前端技术学院的课程任务是由百度前端工程师专为对前端不同掌握程度的同学设计.我们尽力保证课程内容的质 ...
- 【CUDA开发】CUDA编程接口(一)------一十八般武器
子曰:工欲善其事,必先利其器.我们要把显卡作为通用并行处理器来做并行算法处理,就得知道CUDA给我提供了什么样的接口,就得了解CUDA作为通用高性能计算平台上的一十八般武器.(如果你想自己开发驱动,自 ...
- 最全的MySQL基础【燕十八传世】
1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...
- Web 前端开发人员和设计师必读文章推荐【系列二十八】
<Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
随机推荐
- C语言重点——指针篇(一文让你完全搞懂指针)| 从内存理解指针 | 指针完全解析
有干货.更有故事,微信搜索[编程指北]关注这个不一样的程序员,等你来撩~ 注:这篇文章好好看完一定会让你掌握好指针的本质 C语言最核心的知识就是指针,所以,这一篇的文章主题是「指针与内存模型」 说到指 ...
- C# type对象
新建控制台应用程序 新建一个类 class MyClass { private int id; private int age; public int numb; public string Name ...
- python_登陆验证文件上传下载_socket
client.py import os import sys import json import struct import socket # 下载--接收文件 def download(sk): ...
- 小谢第58问:nuxt搭建企业官网
最近公司要重构公司官网,jq+bootstrap 改为了vue,刚开始我以为用vue不是挺好的嘛,后来才发现,有于vue单页面的特性,不利于搜索引擎的抓取,因此在seo方面需要另外想办法,于是乎,就找 ...
- day002|python基础回顾2
目录 00 上节课复习 01 基本数据类型 02 与用户交互 03 运算符 04 流程运算之if判断 05 流程判断之while循环 06 TEST 00 上节课复习 ""&quo ...
- 解密Cookie,这一篇就够了
一.Cookie介绍 因为HTTP协议是无状态的,每次请求都是独立的,服务器端无法判断两次请求是否来自同一个用户,进而也就无法判断用户的登录状态,也不知道用户上一次做了什么.所以Cookie就是用来绕 ...
- PEP8编程规范
1.PEP8编程规范 [少加空格多写注释,严格对齐] 1.缩进 缩进table = 4个空格:设置好后使用编辑器的自然table 2.if条件书写规范 if的条件多的时候用左边括号对齐:if条件完毕后 ...
- Python_用PyQt5 建 notepad 界面
用PyQt5建notepad界面 1 # -*-coding:utf-8 -*- 2 """ 3 简介:用PyQt5做一个对话框,有菜单(2个.有独立图标.快捷键).提示 ...
- SQL Server数据库Union和Union All查询出数据的区别?
好久没有更新博客了,可能是最近比较忙,总是忽略了一些事情,今天查了做了一些数据分析的数据,突然感觉对Union和Union all有些不太理解了,可能是自己老了吧,就翻了一些资料,进行回忆和学习,趁着 ...
- arm-linux校时和时钟同步
# 将时间写到系统 date 2020.08.25-14:02:00 # 将时间同步到硬件时钟芯片 hwclock -f /dev/rtc1 -w # 将时间从硬件时钟芯片同步到系统 hwclock ...