当前位置: 首页 > news >正文

Intel系列CPU的流水线技术的发展

Intel系列CPU的流水线技术的发展

 

 

      CPU(Central processing Unit),又称“微处理器(Microprocessor)”,是现代计算机的核心部件。对于PC而言,CPU的规格与频率常常被用来作为衡量一台电脑性能强弱重要指标。

      在提高CPU计算能力的过程中,流水线技术对提高CPU的效率产生了显著作用,就像流水生产在汽车制造业中一样,它对处理器的发展影响深远。

Intel公司创于1968年美国,纵观IT发展史,很少能有公司能像Intel这样屹立多年仍旧保持强大生命力的。作为现今世界上最大的CPU研发和生产者,如今的Intel就像是信息时代的一根支柱,为推动信息技术的发展做出了卓越的贡献。

  接下来我将以个人眼光讲述Intel公司CPU流水线技术的发展历程和相关技术方法,分为四部分。

注:第一个采用指令流水线的机器是IBM7030 as known as Stretch

 

一  综述Inter系列CPU芯片中采用的流水线技术的发展过程

  流水线是Intel首次在486芯片中开始使用的。流水线的工作方式就象工业生产上的装配流水线。在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。

经典奔腾每条整数流水线都分为四级流水,即指令预取、译码、执行、写回结果,浮点流水又分为八级流水。

Intel的初次流水线引入,i486五级流水线:

  1989 年推出的 i486 处理器引入了五级流水线。这时,在 CPU 中不再仅运行一条指令,每一级流水线在同一时刻都运行着不同的指令。这个设计使得 i486 比同频率的 386 处理器性能提升了不止一倍。五级流水线中的取指阶段将指令从指令缓存中取出(i486 中的指令缓存为 8KB);第二级为译码阶段,将取出的指令翻译为具体的功能操作;第三级为转址阶段,用来将内存地址和偏移进行转换;第四级为执行阶段,指令在该阶段真正执行运算;第五级为退出阶段,运算的结果被写回寄存器或者内存。由于处理器同时运行了多条指令,大大提升了程序运行的性能。

  80486利用“数据旁路”解决数据相关问题。

  80486利用“预取转移目标”方法,加快指令分支操作。

  但是这个阶段的CPU在执行一些数据相关的指令时,会存在流水线阻塞问题。

 

奔腾(Pentium)处理器

1993 年 Intel 推出了奔腾(Pentium)处理器。奔腾处理器架构增加了第二条独立的超标量流水线。主流水线工作方式类似于 i486,第二条流水线则并行的运行一些较简单的指令,比如说定点算术,而且该流水线能更快的进行该运算

奔腾 Pro (Pentium Pro)处理器

1995 年 Intel 推出了奔腾 Pro (Pentium Pro)处理器。和之前的处理器相比,奔腾 Pro 采用了完全不同的设计。该处理器采用了诸多新特性以提高性能,包括乱序执行的部件以及猜测执行。流水线扩展到了 12 级,而且引入了“超标量流水线”的概念,使得许多指令可以被同时处理。。

奔腾 4 处理器

  2002 年发布的奔腾 4 处理器引入了超线程技术。乱序执行部件的设计使得指令被执行的速度比处理器能够提供指令的速度更快。因此对于大部分应用,CPU 的乱序执行部件在大部分时间处于空闲状态,甚至在高负载的情况下也不能充分利用。为了让指令流能充分的流入乱序执行部件,Intel 加入了第二套前端部件(注:在处理器结构中,前端是指取指,译码,寄存器重命名等模块,经过前端部件的处理后,指令等待发射进入乱序执行部件)。虽然实际上只有一个乱序执行部件,但对于操作系统来说,它能看到两个处理器。前端部件包含两组同样功能的 X86 寄存器,两个指令译码器根据两个指令指针指向的地址分别处理。所有的指令被一个共享的乱序执行部件执行,但对应用程序来说并不知情。当乱序执行部件执行完成,像之前一样退出流水线后,最终结果返回虚拟的两个处理器。

二 总结Intel CPU发展过程中,提高流水线性能及CPU性能的方法、相关技术

80486

Intel 80486整数处理部分实现了指令流水线,属于早期流水线技术,具有代表性。

整数指令采用了5个步骤的指令流水线,每个步骤一般需要一个时钟周期:

        ① PF步骤——指令预取(Prefetch)

        ② D1步骤——指令译码1(Decode Stage 1)

        ③ D2步骤——指令译码2(Decode Stage 2)

        ④ EX步骤——指令执行(Execute)

        ⑤ WB步骤——回写(Write Back)

 

 

 

 

  80486利用“数据旁路”解决数据相关问题,设置相关专用通路,即不等前一条指令把计算结果写回寄存器组,下一条指令不再读寄存器组,而是直接把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程,使本来需要暂停的操作变得可以继续执行,书本上称作『定向技术』。

  80486利用“分支预测”方法,加快指令分支操作。

  但是这个阶段的CPU在执行一些数据相关的指令时,会存在流水线阻塞问题。比如先写后读。

 

奔腾处理器

奔腾架构增加了第二条独立的超标量流水线,两条流水线可以并行运行,而且每条流水线可以同时有多条指令在不同流水级执行。它几乎可以同时执行比 i486 多一倍的指令。

   

 

奔腾 Pro (Pentium Pro)处理器

乱序执行:处理器在一个由输入数据可用性所决定的顺序中执行指令,而不是由程序的原始数据所决定。在这种方式下,可以避免因为获取下一条程序指令所引起的处理器等待,取而代之的处理下一条可以立即执行的指令。

奔腾 Pro 的乱序执行部件拥有 6 个执行单元:两个定点处理单元,一个浮点处理单元,一个取数单元,一个存地址单元,一个存数单元。这两个定点处理单元有所不同,一个能够处理复杂定点操作,一个能同时处理两个简单操作。在理想状况下,奔腾 Pro 的乱序执行部件可以在一个时钟周期内执行 7 条微指令。

 

猜测执行:通过提前判读并执行有可能需要的程序指令的方式提高执行速度。

 

12级流水线,超标量流水线:在一个时钟周期内一条流水线可执行一条以上的指令。一条指令分为十几段指令来由不同电路单元完成。

 

奔腾 4 处理器

引入超线程技术:利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高CPU的计算和运行效率。

 

 

三 展望Intel CPU提高流水线性能的技术方向

提高指令并行度,重复设置器件、流水线。
提高器件利用率,规划指令的执行顺序。
提高器件执行速率。

就像目前Intel执行的Tick-Tock研发战略一样,在架构和工艺两面轮流发力。

四 课程报告学习感受

我想说的是:

  在学习这些知识之前从没想到过CPU里在发生着什么事情,现在感觉到CPU就像一个奇妙的小世界,飞快的运算靠的不是magic,而是一代又一代科研和工程人员的不懈奋斗,CPU真像是一个人为创造出来的奇妙天地,凝结着人类的智慧和想象力。

  我每天都在使用计算机,享受着信息化带来的丰富知识和方便,如今的计算机相比过去而言,操作简单了很多,同时功能也大大丰富了,这不禁让人感觉使用计算机是一件再简单不过的事情,我曾经也一度这样认为。

  如今,终于有机会更深入地了解面前的PC里那块隐藏着的小小硅片。

  摩尔定律的推动了整个社会的信息化建设,为了提高运算速率人们创造出了许多奇妙而有效地方法,在架构和工艺上双管齐下,在硬件和软件上做优化。

  从单流水线到超流水线,从单核到多核,目睹了一个问题的解决竟有如此多的方案,这让我颇有感慨:面对一个问题,解决方案可能多到你想不到,一定要打开思路,不要让思想受到局限。

  《计算机系统结构》虽然是一门偏向硬件的专业课,但里面蕴含的哲理和思想启迪,一定会在未来的生活和工作中给我带来启发!

 

参考资料:

1.80486的指令流水线  钱晓捷

http://www5.zzu.edu.cn/qwfw/wjyl/9-xntgjs/4a44c05f3f5a870e013f70e4d3f4207c.html

 

2.A Journey Through the CPU Pipeline

http://www.gamedev.net/page/resources/_/technical/general-programming/a-journey-through-the-cpu-pipeline-r3115

 

转载于:https://www.cnblogs.com/learn-to-rock/p/5419102.html

相关文章:

  • 实验二 作业调度模拟程序
  • Spring源码学习(二)------ AOP
  • 2,3,4,11章
  • 职场官话
  • 团队项目冲刺第五天
  • 用borland together反向工程生成sequence图的方法
  • C字符数组的处理
  • p2p终结者破解版下载 4.15 2011最新版
  • mysql简单操作(实时更新)
  • 更新-清理sga组件
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • 20145302张薇《Java程序设计》第八周学习总结
  • QT(6)Basic Layout学习
  • EventSource
  • UTC时间转换为标准时间
  • 10个确保微服务与容器安全的最佳实践
  • 77. Combinations
  • JavaScript对象详解
  • js中的正则表达式入门
  • nginx 负载服务器优化
  • Object.assign方法不能实现深复制
  • 百度小程序遇到的问题
  • 从0到1:PostCSS 插件开发最佳实践
  • 开源地图数据可视化库——mapnik
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何编写一个可升级的智能合约
  • 实现简单的正则表达式引擎
  • 通过npm或yarn自动生成vue组件
  • 小李飞刀:SQL题目刷起来!
  • 一天一个设计模式之JS实现——适配器模式
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 怎样选择前端框架
  • ​flutter 代码混淆
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​你们这样子,耽误我的工作进度怎么办?
  • ![CDATA[ ]] 是什么东东
  • #Linux(帮助手册)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #数学建模# 线性规划问题的Matlab求解
  • (1)bark-ml
  • (3)STL算法之搜索
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (k8s中)docker netty OOM问题记录
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (编译到47%失败)to be deleted
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • *1 计算机基础和操作系统基础及几大协议
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET Core 2.1路线图
  • .NET Core 版本不支持的问题
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost