通信人家园

标题: [原创连载]大话处理器(09.21 半导体巅峰,纵横四十年)  [查看完整版帖子] [打印本页]

时间:  2010-11-6 21:03
作者: 木兮清扬     标题: [原创连载]大话处理器(09.21 半导体巅峰,纵横四十年)

导读:
正如广告语说的那样:处理器无处不在(Microprocessorareeverywhere)。每一个成功的男人背后都有一个成功的女人,每一个成功的电子产品里面至少有一个成功的处理器。不管是我们经常使用的计算机、手机、汽车,还是为我们服务,但是我们不知道它们在哪的基站、服务器、交换机等等,莫不如此。我们身处的电子世界,是建立在处理器基础之上的。前科技部部长徐冠华曾经发出这样的感叹:“没有自己的CPU芯片,我们的信息产业大厦就如同建立在沙滩上。”正因如此,龙芯、汉芯等等芯的一点点风吹草动,总能牵动大家的心。
《大话处理器》以处理器为核心,也介绍了相关的计算机、软件、SOC、逻辑电路、芯片制造等内容,宣传见作者的博客。这里连载的这一章,是处理器最核心的部分——微架构。
作者微博:http://weibo.com/muxiqingyang

全书印刷时的图文目录:
[attach]149367[/attach]

连载1:跟着顺溜学流水线
连载2:流水线的若干问题探讨
连载3:处理器的流水线实例
连载4:处理器的性能公式
连载5:提升处理器性能的3种武器
连载6:处理器的几种并行策略
连载7:程序员要了解处理器
连载8:指令并行的两种流派
连载9:youaremysuperscalar
连载10:相关
连载11:寄存器重命名
连载12:体系结构与微架构
连载13:指令的相关性确定
连载14:乱序
连载15:为什么if语句越少越好
连载16:发生跳转时的流水线处理
连载17:分支预测
连载18:处理器的分支预测实现
连载19:分支预测算法
连载20:超标量处理器结构
连载21:intel处理器的取址与译码
连载22:指令分派
连载23:Buffer的作用
连载24:处理器的执行部件
连载25:投机执行
连载26:指令提交
连载27:VLIW结构
连载28:VLIW的优势
连载29:软件流水
连载30:ARM7三级流水线
连载31:通用寄存器和流水线寄存器
连载32:史上最经典的5级流水线
连载33:DSP更深的流水线
连载34:流水线上的冒险——人生免不了磕磕绊绊
连载35:P4CPU结构
连载36:P4CPU的译码
连载37:P4处理器的Tracecache
连载38:P4的前端流水线
连载39:P4的后端流水线
连载40:DSP的应用与VLIW得名
连载41:TIDSP的内部结构
连载42:TIDSP的指令并行性
连载43:DSP的8条指令并行
连载44:Superscalar和VLIW总结
连载45:何为SIMD、MMX、SSE
连载46:几种不同形式的SSE指令
连载47:多线程--时分复用
连载48:硬件多线程——让我来帮你一把
连载49:多核——从芯到蕊的跳变
连载50:多核的通信问题
连载51:各种硬件多线程对比
连载52:并行总结(1)
连载53:并行总结(2)
连载54:微架构总结-处理器性能公式
连载55:通过微架构的改进提高程序执行效率
连载56:商用处理器微架构的选择
连载57:芯片物理设计
有奖征集《大话处理器》封面方案
连载58:Cache一致性
《大话处理器》封面方案参与者抽奖
《大话处理器》序
连载59: Cache一致性协议之MESI
存储器科普简介
处理器——半导体巅峰,纵横四十年
时间:  2010-11-6 21:19
作者: 木兮清扬

(1)跟着顺溜学流水线

    导读:流水线是处理器中最基本的一个概念,处理器也都是按照流水线的思想来设计。遥想当年攒机的时候,听着别人说着奔三几级流水线,赛扬几级流水线,对我们这种只知道主频是多少的人来说,感觉特牛
X。那么什么是流水线?顺溜将会告诉您答案。

       2009年央视有部热播大剧:《我的兄弟叫顺溜》。剧中顺溜是一个神枪手,里面有一个场景,当鬼子来袭击部队时,顺溜向团长建议,给自己配2个人装弹,自己负责打枪。
顺溜.jpg

《我的兄弟叫顺溜》剧照

    从直观的思维来看,有人帮顺溜装弹,则顺溜有更多的时间来射杀鬼子,下面我们再更严格地从数学的角度来分析。

我们来计算一下顺溜消灭鬼子的效率,假设:
1.顺溜枪法命中率100%,一枪毙命,装弹的人枪法太差,命中率几乎为0
2.子弹射击流程:先上膛,再射击
3.上膛需要花费5秒钟
4.射击需要花费5秒钟
    从假设可知:如果顺溜采用原始的作战方案,即一人一枪,自己打自己的,射出一颗子弹需要10秒钟,那么1分钟顺溜可以消灭6个鬼子。
    我们再来看看顺溜提出的作战方案:顺溜在射击的同时,战友给另一支枪上膛,顺溜射击完后,立即拿起另一支枪射击,这样就给顺溜节省了上膛的时间,相当于顺溜5秒钟就完成一次射击,1分钟顺溜可以消灭12个鬼子。
    我们用图来描述这2种作战方案:
流水线方案一.JPG

原始方案

流水线方案二.JPG

                                                                                     顺溜的方案

    从顺溜方案的图上,我们可以看到:当顺溜在打出第一发子弹的同时,第二发子弹正在上膛,当顺溜在打出第二发子弹的同时,第三发子弹正在上膛,子弹就如同流水一样,在各个环节流动,最后一次流动到了小鬼子的身上,这个过程被形象的称为流水线。
    这种流水线的方案使得顺溜的射击效率提升了一倍,虽然浪费了另外的人给顺溜装弹,但是并不是每个人都是顺溜这样的神枪手,因此浪费专人上膛是完全值得的。

[ 本帖最后由 木兮清扬 于 2010-11-8 19:30 编辑 ]

附件: 顺溜.jpg (2010-11-6 21:29, 144.9 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0MzgzfGEzZGZlM2Q3fDE3MzIzNTcyNzB8MHww

附件: 流水线方案一.JPG (2010-11-6 21:35, 7.23 KB) / 下载次数 5
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0Mzg0fDgzZDk2ZGE1fDE3MzIzNTcyNzB8MHww

附件: 流水线方案二.JPG (2010-11-6 21:35, 9.83 KB) / 下载次数 6
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0Mzg1fDkxZTJmYWVifDE3MzIzNTcyNzB8MHww
时间:  2010-11-6 23:08
作者: myhisense

看来又一强帖要出现了
时间:  2010-11-6 23:15
作者: muzili1

占座,等下文
时间:  2010-11-6 23:21
作者: 家园副管03

mark一下,期待楼主坚持更新哦
时间:  2010-11-7 13:08
作者: robotbob

楼主很强很油菜
时间:  2010-11-7 13:36
作者: gdxky

顶起,很直观,很具体,楼主快点。
时间:  2010-11-8 01:42
作者: 木兮清扬

(2)流水线的若干问题探讨

    在上一节中,顺溜已经告诉了我们流水线的基本概念,顺溜将整个射击过程分成了2个步骤(术语称之为节拍),两个步骤可以并行起来执行,只是时间上进行了些许的错位,这就是流水线的本质。
    这条流水线被划分成了2个节拍,也就是2级流水线,于是我们引出了流水线的第一个问题:流水线级数
    众所周知,Intel处理器的流水线级数要远高于ARMDSP等嵌入式处理器,那么流水线级数越多,有什么好处呢?
    还是以顺溜来举例子,假设顺溜将射击的流水线划分成4个步骤,由于阿木不熟悉真实的射击过程,就假设为上膛1、上膛2、射击1、射击2 四步吧,由于整个过程需要10秒,那么每一个小步骤需要2.5秒。
连载2-4级流水线.JPG


射击的4级流水线


    从图我们可以看出,现在顺溜每2.5秒就可以射出一颗子弹,于是一分钟可以消灭24个敌人,射击效率提高了一倍。如果换算成计算机的术语,那就是处理器的工作频率可以提升一倍。现在大多数嵌入式处理器的工作频率在1G Hz 左右徘徊,Intel处理器的工作频率早已跳过了3G Hz,这和流水线的级数有密切的关系。至于嵌入式处理器的工作频率为什么不继续提高,留待以后再说。总而言之,在不考虑其他因素的情况下,流水线级数越多,工作效率越高。

    再回到顺溜的例子,细心的读者可能会发现:顺溜并不是要求1个人给自己上膛,而是要求2个人。从直觉来看,顺溜不仅仅是个神枪手,同时也是个快枪手,射击的速度是上膛速度的2倍。我们再来从数学的角度严谨的分析一下,这也引出了流水线的第二个问题:流水线的效率问题
    先修改一下上一节的假设:上膛时间为10秒,射击时间为5秒。我们再来看看射击过程:
不规则流水线.jpg


不规则的流水线


    从图上我们可以看出,顺溜虽然射击速度只要5秒,但是也要等到战友将子弹上完膛才有枪可以射击,因此顺溜有5秒的时间在等待,实际的射击效率是10秒杀一人。本着能者多劳的原则,让顺溜闲着是极大的浪费,因此我们要想办法提高顺溜的杀人效率。
    一种解决方法是将子弹上膛细分为2个步骤,组成3级的流水线,如下图所示:

拆分耗时长的部分.jpg


拆分耗时较长的步骤


    采用这种方式后,相当于有2个战友给顺溜上膛,一个做上膛1这个步骤,另一个做上膛2这个步骤,再加上顺溜,这3个人组成一个流水线,可以保证顺溜5秒杀一人。
    不过,很多事情是很难进一步分拆的,例如上膛就不能分成2个步骤,那么这时候怎么办呢?我们可以采取如下的策略:配备2个战友给顺溜上膛,10秒内就可以有2把枪的子弹上膛了,在下一个10秒内,顺溜就可以射击2次,因此也能保证顺溜5秒杀一人。这也就是顺溜要求给自己配2个人装弹的原因。

配置重复单元.jpg

给耗时步骤配置多个重复单元


[ 本帖最后由 木兮清扬 于 2010-11-8 19:51 编辑 ]

附件: 不规则流水线.jpg (2010-11-8 01:42, 49.91 KB) / 下载次数 4
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0NDQ5fDUwODQxYjdlfDE3MzIzNTcyNzB8MHww

附件: 拆分耗时长的部分.jpg (2010-11-8 01:42, 58.18 KB) / 下载次数 2
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0NDUwfGM3Y2ZhOTUzfDE3MzIzNTcyNzB8MHww

附件: 连载2-4级流水线.JPG (2010-11-8 01:42, 38.2 KB) / 下载次数 3
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0NDUxfDcxYzg1NDg2fDE3MzIzNTcyNzB8MHww

附件: 配置重复单元.jpg (2010-11-8 01:42, 61.04 KB) / 下载次数 3
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0NDUyfGFhZjcwNWM3fDE3MzIzNTcyNzB8MHww
时间:  2010-11-8 01:58
作者: 木兮清扬

周日白天有事,晚上写作到周一2点,争取以后能每天都更新。
时间:  2010-11-8 13:06
作者: hzpasj

坛子里高手众多
时间:  2010-11-8 13:31
作者: btmp

来学习的
时间:  2010-11-8 13:56
作者: ppt0912

说是简单,那为什么中国的cpu发展还落后人家几十年?
时间:  2010-11-8 15:53
作者: 木兮清扬

呵呵,老实说,处理器真不简单,我也是尽量写通俗点,吸引更多的人到这个行业中来。
要发展中国的CPU,还得靠大家一起努力。
时间:  2010-11-8 20:53
作者: 木兮清扬

(3)处理器的流水线实例

    介绍完流水线的基本知识,再来看看处理器中实际的流水线。这里以通信产品中常见的DSP为例来进行说明。
通信过程是信息从一个地方传到另一个地方的过程,信息需要经过信源编解码和信道编解码,这2者都是信息处理的内容。DSP(digitalsignal processor,数字信号处理器)是专门针对数字信号处理算法进行优化了的处理器,被广泛的应用在通信领域的局端(电信运营商)和终端(个人、企业用户)产品中。
       TI(TexasInstruments,德州仪器)DSP领域的绝对领导者,一家占据了超半数的份额。TIDSP种类繁多,根据业界通用的分类方式,一般分为通用DSP和专用DSP(例如,专用于视频编解码的DSP),在不同的细分应用场景下,又有不同的型号。总的来看,TI DSP的款式很多,但是内核结构却变化不大,从c64内核,到c64+内核,再到定点、浮点统一的内核,DSP的流水线结构基本没有变化。
       TI DSP中所有指令的执行都可分为Fetch(取址)Decode(译码)Execution (执行)3个大的步骤。如果用射击来类比,那就是:取弹、装弹、射击。
DSP流水线.JPG

DSP指令执行步骤


    根据流水线的基本知识,步骤划分越细,流水线节拍越多,执行效率越高。取址单元被分成了4个小步骤(节拍)
PG(programaddress generate),程序地址产生
PS(programaddress send),程序地址发送
PW(programaccess ready wait),程序访问等待
PR(program fetchpacket receive),程序取指包接收
    译码单元被分为2个小步骤:
DP(instructiondispatch),指令分配
DC(instructiondecode),指令译码
     执行单元的节拍数不定,这是因为不同指令的复杂性不一样,执行的时间也不一样。一个节拍对应一个时钟周期(cycle),简单的指令(如加法)只需要1cycle,乘法等复杂的指令需要2cycleLoad/Store这些内存操作的指令需要5cycle,分支跳转指令需要6cycle。因此执行阶段的流水线最多划分为6个节拍。


DSP节拍.JPG


流水线节拍


     我们先假设DSP的每条指令执行只需要一个cycle,来看看DSP工作时的流水线过程:
DSP的流水线.JPG

DSP流水线


      流水线的执行过程分为三个阶段:进流水,并行执行,出流水。如图,到第7个周期时,流水线排满,所有的硬件单元都被使用起来,这时处理器的执行效率最高。

[ 本帖最后由 木兮清扬 于 2010-11-8 20:55 编辑 ]

附件: DSP流水线.JPG (2010-11-8 20:53, 20.9 KB) / 下载次数 4
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0NTEwfGUyMmJjYzk0fDE3MzIzNTcyNzB8MHww

附件: DSP节拍.JPG (2010-11-8 20:53, 8.67 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0NTExfGMyZmRjMGM1fDE3MzIzNTcyNzB8MHww

附件: DSP的流水线.JPG (2010-11-8 20:53, 34.53 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0NTEyfGY1ZjYwNjljfDE3MzIzNTcyNzB8MHww
时间:  2010-11-9 14:17
作者: 哈1哈


时间:  2010-11-9 22:31
作者: 木兮清扬

(4)处理器的性能公式

    处理器是用来执行程序的,处理器的性能也就体现在执行程序的时间上。如果执行完程序的时间越短,则说明处理器的性能越强。我们将处理器执行程序的时间进行分解,就会找到影响处理器性能的很多因素。

处理器性能公式.JPG


处理器性能公式


    这个公式从左到右有4项,第1项用时间除以程序,表示执行程序所需要的时间;第2项用指令数除以程序表示程序包含的指令的数目;第3项用周期数除以指令表示每条指令执行所需要的周期数,第4项用时间除以周期表示每个周期对应的时间。该公式也即:
    程序的执行时间=程序包含的指令数×平均每条指令的执行周期数×每周期对应的时间。
    从处理器性能公式可以看出,为了提高处理器的性能,就需要减少程序的执行时间,可以通过如下途径去进行:
    1.减少程序的指令数。
    2.减少指令的执行周期数。
    3.减少时钟周期时间。

[ 本帖最后由 木兮清扬 于 2010-11-9 22:32 编辑 ]

附件: 处理器性能公式.JPG (2010-11-9 22:31, 15.97 KB) / 下载次数 4
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0NjU3fDNmNmMyMDc1fDE3MzIzNTcyNzB8MHww
时间:  2010-11-10 11:47
作者: 猫熊


时间:  2010-11-10 15:03
作者: heeyo03

占座,关注一下处理器知识
时间:  2010-11-10 15:54
作者: hzpasj

占座听课
时间:  2010-11-10 16:33
作者: haip

占座听课
时间:  2010-11-10 17:17
作者: silentwu

好有才啊
时间:  2010-11-10 18:43
作者: cdcdcd3235

这肯定是强帖,赶紧占楼。

请教楼主一个问题:
手机中的基带芯片和AP中是不是都有处理器?
如果“是”,那二者在性能和功能上有什么不同,谢谢。
时间:  2010-11-10 21:30
作者: 木兮清扬

1. 基带芯片和AP中都有处理器
2. 基带芯片负责通话,也就是无线信号的信道处理和语音的信源处理。AP负责各种应用程序,如手机上的炒股软件,看书软件等。基带芯片和AP分开的好处是:应用程序挂了不影响基本的通话功能,也可以合一。

原帖由 cdcdcd3235 于 2010-11-10 18:43 发表
这肯定是强帖,赶紧占楼。

请教楼主一个问题:
手机中的基带芯片和AP中是不是都有处理器?
如果“是”,那二者在性能和功能上有什么不同,谢谢。

时间:  2010-11-10 22:46
作者: 木兮清扬

(5)提升处理器性能的3种武器
    武器1:减少程序的指令数
    程序由程序员产生,经过编译器进行编译,转换成处理器可执行的指令,进入处理器中执行。




程序员,编译器,处理器.JPG



    减少程序的指令数,主要得靠程序员的个人修养以及编译器的性能,不过处理器也并非什么也做不了。
Intel的处理器有一个叫做Macro-Fusion的技术,能将某些指令合成一个,如:Compare指令后有Jump指令,Macro-Fusion就可以将这2条指令合成一条比较跳转uops(intel称为微操作)

    武器2:减少指令的执行周期数
    指令的平均执行周期数有一个洋名,叫做CPI(cycles perinstruction)。此CPI不等于彼CPI(Consumer Price Index消费者物价指数),不过大家对想要降低CPI的愿望都是这么的强烈(扯远了,打住,只谈技术,不谈政治,嘿嘿)
    当处理器的流水线结构定义好后,指令的执行周期数就固定好了。既然不能直接减少指令的执行周期数,那就逆向思维,增加每个周期执行的指令数。以前只有一个顺溜,那就多培养几个顺溜,一个执行单元处理一条指令,那就在处理器上多摆几个执行单元。这就是指令级并行,也是处理器在很长一段时间内的主流设计思想。

    武器3:减少每周期的时间
    我们很小的时候就学过周期和频率的关系:T=1/f数字电路以周期(cycle)为基本的执行单位,每个cycle时间越短,则电路运算速度越快,也即频率越高。IntelAMD等公司在多核风靡之前都极力的提高处理器工作频率,很多玩家更是热衷于超频。
    集成电路制程工艺的进步和流水线优化是提高频率的主要手段,先进的制程工艺减少了信号的传输延迟,使得频率得以提升,流水线级数越深,每个周期完成的任务越少,信号的传输延迟越小,频率也得以提升。

[ 本帖最后由 木兮清扬 于 2010-11-10 22:49 编辑 ]

附件: 程序员,编译器,处理器.JPG (2010-11-10 22:46, 6.56 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0ODE0fGI3OGIxNzZifDE3MzIzNTcyNzB8MHww
时间:  2010-11-11 10:53
作者: heawen

占座学习
时间:  2010-11-11 12:36
作者: zykbcatv

虽然不是这行,但还是为楼主深入浅出的讲解喝彩。
时间:  2010-11-11 14:41
作者: sl007bd

LZ牛人也。。。关注中。
时间:  2010-11-11 22:58
作者: 木兮清扬

(6)处理器的几种并行策略
    任何程序的实现,都是数据从输入到输出的运算模型:

运算模型.JPG


程序的输入输出运算模型

    程序通过一条一条的指令来处理数据,例如:加法指令:C =A+BAB作为输入,输入到加法器中,加法器执行完毕后,输出C
    程序就是用一系列的指令处理一系列的数据的过程。如果同一时间,参与运算的指令数越多,处理的数据越多,那么程序的执行效率也就越高。
    各个公司的处理器经过多代的发展以及相互间取长补短,已经从单指令单数据,发展到多指令,多数据并行。处理器的并行策略可以分为3类:
    1.指令并行
    2.数据并行
    3.线程并行
    后面将会详细介绍这3类并行策略。

[ 本帖最后由 木兮清扬 于 2010-11-11 23:00 编辑 ]

附件: 运算模型.JPG (2010-11-11 22:58, 3.13 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE0OTQzfDc0YTkyOTg2fDE3MzIzNTcyNzB8MHww
时间:  2010-11-12 12:22
作者: 参谋

可惜这种质量的帖子在坛子里太少,净是那些整天要统一全球,灭这个灭那个的文章
时间:  2010-11-12 23:32
作者: 木兮清扬

(7)程序员要了解处理器

       换个风格写写,看看效果如何。如果网友们有什么好的想法,也请提出来,以文会友,呵呵。

    小孙在IT公司做程序员3年,这些年来看着通信行业迅猛发展,心中无限向往,经过重重考验,历经三三得九难,终于进入某通信公司做嵌入式软件开发。这天,领导老佛爷把小孙叫你过去。
    老佛爷:“小孙啊,来公司这么久了,一直没有给你机会表现啊,这不,机会来了,客户要求我们在现在的平台上增加XX功能,功能的代码已经有了,不过现在的软件已经把处理器的能力占满了,你去把现在的软件优化一下,再把这个功能给加进去。”
    小孙一听有任务,立即兴奋起来:“谢谢领导栽培,保证完成任务。”
    小孙领到任务后,将代码研究了几天,改了改流程,去掉了一些冗余的内容,一测试,发现运行的时间并没有明显的减少,眼看期限就要到了,小孙这下着急了,自己可是立下军令状的,完不成任务,虽然不至于杀头,不过自己这个月的奖金可就泡汤了。小孙怏怏的找到了老佛爷,禀明了情况。
    老佛爷:“小孙,遇事主动找领导,你这点还是做得蛮不错的。这样吧,你去找老唐请教下,他可是这方面的牛人了。”
    小孙找到了老唐,厚者脸皮道:“唐哥,听说您是我们编程第一高手,您写的代码执行时间比别人的一半还少,小弟对您的景仰犹如滔滔江水连绵不绝,又如黄河泛滥一发不可收拾…(省略100)
    老唐这人一向好为人师,虚荣骄傲,经不起吹捧,立即飘飘然起来。
    老唐:“小孙,你对我们板子上的处理器了解有多少?”
    小孙:“我以前都没有了解过这方面的东西,怎么,写软件还要了解处理器的知识吗?”
    老唐长叹一口气,拍拍小孙的肩膀,语重心长的说道:“小孙啦,做嵌入式软件工程师,不了解处理器,不行啊。在PC上写程序,有大把的内存和运算能力可以使用,就好比大户人家,拥有良田万顷,宝马万匹,管家的效率低点没关系,日子照样过得挺好,而我们嵌入式系统,是小户人家,只有瘠田百顷,瘦马百匹,我们要学会过日子,提高运作效率,不能随便糟蹋资源啊。”
    老唐一口气说了一大堆,但觉口干舌燥,喝了口茶,继续说道:“所谓知己知彼,百战不殆,你在处理器上写程序,总要知道处理器长啥样子吧,就好比找老婆,不知根知底,你敢要吗,即使要了能和谐吗?21世纪什么最贵?和谐!”
小孙听着老唐忽悠了半天,将信将疑的问道:“唐哥,听您说的这么玄乎,如果了解了处理器,写起软件来真的就能和谐吗?”
    老唐用深邃的眼神盯着小孙,坚定的说了下面的话:
    “信唐哥,得永生!”
    老唐看小孙没啥反应,心想,光靠忽悠不行,还得下点猛药,于是说道:“小孙啊,跟你说点现实的吧,你到网上看看就会发现,DSP上的软件工程师,平均工资要比一般的软件工程师高点,因为他们需要深入了解更多的处理器知识,编写效率更高的软件。”
    小孙一听到钱,立马来了精神,说道:“唐哥,是啊,我在找工作时好像也感觉到了,那您快教教我处理器的知识吧。”
    老唐升了个懒腰,道:“今天有点累了,明天再说吧。”

[ 本帖最后由 木兮清扬 于 2010-11-12 23:39 编辑 ]
时间:  2010-11-13 10:02
作者: wangpeng321

thanks for your hard work
时间:  2010-11-13 13:12
作者: mumuxiong

niu  ren  qiang tie  bi  xu  ding
时间:  2010-11-13 19:25
作者: thefantasyx

先顶一个再说
时间:  2010-11-13 20:26
作者: Jacob_12     标题: 楼主,我爱你,一定要加油啊

楼主,我爱你,一定要加油啊
时间:  2010-11-13 23:59
作者: 木兮清扬

(8) 指令并行的两种流派
   
    第二天一上班,小孙就来到老唐的办公位,拿了水杯,搬了个小板凳,虚心的听起课来。

    小孙:“唐哥,您先教我些速成的吧。”
    老唐心理咕噜道,现在的年轻人真是越来越没有耐心了,伸手拿了一张白纸,在上面写道:“指令并行”。
    老唐:“程序是由一系列指令组成的,如果要节省执行的时间,最直接的方法就是将指令并行起来执行。现在高性能的处理器大都支持同时执行多条指令,有的8条,有的6条不等。处理器的指令并行有2个流派:SuperscaleVLIW
。”
    小孙:“这些人不知怎么搞的,为啥一定要搞出这么多流派出来,也不让我们学习者省省心。”
    老唐哈哈大笑道:“这2个流派的衍生,是有来由的哦,可不是别人瞎琢磨的,就好比左派和右派,战派和和派,蓝营和绿营,都是有自己的价值主张和形势基础的。”
    老唐一边说,一边在纸上画了下面这个图。
                              
superscale.JPG

    老唐:“我说半天,也比不过一张图清楚。你看着这张图,一开始的处理器一次执行一条指令,所以也叫标量处理器,后来人们想要一次执行多个指令,就将取址,译码,执行等等单元做成一次可处理多条指令。标量处理器时代的指令都是串行的,处理器为了兼容原有的程序,就在处理器内部做了指令的并行化处理。这就是超标量处理器的基本原型。”
    小孙:“哦,原来Superscale是由super()+ scale(标量)组成的,超标量原来是这个意思啊,那VLIW呢?”
    老唐接着在纸上画了另一个图:

    VLIW.JPG
    说道:“Superscale处理器很好的解决了程序的兼容性问题,代价是处理器内部有不少的资源用于将串行的指令序列转换成可以并行的指令序列,这较大的增加了处理器的功能和面积。事实上,很多完全新出的处理器没有程序兼容性问题,于是可以将指令的串并转换放到编译器中做,这样处理器的功耗和面积就减少了。而且,哪些指令可以并行,哪些不行,这些判决都是相当困难的,处理器知道的信息很少,实现指令并行的能力也弱,如果这部分工作放在编译器中去做,由于和程序员更接近,程序员可以指导编译器去做并行化,甚至可以手工去实现指令的并行化,效率远高于Superscale,这种方式就叫做VLIW,至于名字的意思以后再说。”

[ 本帖最后由 木兮清扬 于 2010-11-14 00:03 编辑 ]

附件: superscale.JPG (2010-11-13 23:59, 9.83 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1MjI2fDU1YTFiMjlhfDE3MzIzNTcyNzB8MHww

附件: VLIW.JPG (2010-11-13 23:59, 9.74 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1MjI3fDAzYjVmZTMxfDE3MzIzNTcyNzB8MHww
时间:  2010-11-14 10:49
作者: suya     标题: 不错啊

写的不错 要坚持看下去 顶
时间:  2010-11-14 17:54
作者: 木兮清扬

(9) you are my super scalar

    小孙这几天收获颇丰,心情也开朗起来,走了的时候都忍不住唱起歌来:

    “你是电,你是光,
    你是唯一的神话,我只爱你,
       you are my super scalar。”
    小孙的歌声被晚几天进部门的小朱听到了,小朱问道:
    “孙哥,super scalar是啥意思啊?”
    小孙得瑟的笑了2声,然后把老唐前几天给自己开的小灶和小朱说了一遍。小朱聚精会神的听后,问道:
    “孙哥,这指令的并行化是咋实现的咧?”
    小孙心头一惊,心道:好小子,这么快就问的这么深了,不行,看来自己得加倍用功,不然,过不了多久,自己这个大师兄就要给人家当小师弟了。
    小孙:“朱兄,今天我很忙,明天我再和你细说吧。”
    打发完小朱,小孙立即跑到老唐那里,问道:
    “唐哥,这指令的并行化是咋实现的咧?”
    老唐正在做项目计划,听这小孙这么一问,指着屏幕上的项目计划表对小孙说道:“并行无处不在,要提高效率,缩短时间,都是靠并行。你看这项目计划,只要人手够,该并行的工作就让它并行,时间不就缩短了嘛。我给你举个简单的例子,假设我们每天早上起床,都要经历下面这些事,怎样使总的时间减少啊?”说着,老唐在纸上画了一个图。                        相关性一.JPG
    小孙思考了一会,也画出了下面一个图,
相关性2.JPG
    小孙:“烧热水需要时间,可以在洗漱的同时等水热,听收音机没有必要等其他的事做完才做,可以一面做其他的事情,一面听收音机。”
    老唐:“很好,其实很多事情大家都知道,只是没有总结而已。如果加以总结,就可以举一反三了。并行化最重要的就是判断相关性乱序。烧热水喝、洗漱、听收音机是不相关的,而穿衣和其他是相关的,起床后要先穿好衣服再去做其他的事情,否则可能会着凉。乱序就是打乱做事情原来的顺序,将某些事情提前,某些事情滞后,根据每件事情的时间以及事件之间的依赖性,合理的安排调度事情,达到最短时间。”

附件: 相关性一.JPG (2010-11-14 17:54, 13.84 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1MjU0fGNkODk5NjhkfDE3MzIzNTcyNzB8MHww

附件: 相关性2.JPG (2010-11-14 17:54, 15.73 KB) / 下载次数 2
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1MjU1fDgwZGQwNjFlfDE3MzIzNTcyNzB8MHww
时间:  2010-11-14 18:48
作者: 内洛

谢谢LZ呀····刚刚找完工作···
以后做硬件研发··
这些知识对我很有用····保持密切关注·
时间:  2010-11-14 19:32
作者: tuohuangniu

学习
时间:  2010-11-14 20:00
作者: chaself

写的非常棒 特别是后面的叙事风格 期待更新
时间:  2010-11-14 21:49
作者: 木兮清扬     标题: 回复 40# 的帖子

能够帮到人就好,呵呵。
大家多支持
时间:  2010-11-15 09:55
作者: 冷笑书生

不错,支持一下,有点老外写书的味道!
时间:  2010-11-15 13:39
作者: haitao0307

好帖,占座慢慢看
时间:  2010-11-15 16:21
作者: dearhero

通俗易懂,听课继续
时间:  2010-11-15 20:44
作者: wsdg

收藏起来学学
时间:  2010-11-15 20:48
作者: 仲夏晨曦

顶。
时间:  2010-11-15 23:24
作者: 木兮清扬

(10) 相关

    老唐:“
2条指令相关,是指它们间存在依赖性,执行时必须有先后关系。指令间的相关性有3种:数据相关、名字相关、控制相关,如果我们能减少这些相关,指令就能更多的并行执行,我们先来看看数据相关。”
说完,老唐在纸上画了下面的图:




数据相关.JPG


数据相关


       老唐继续说到:“指令通常都有输入输出数据,例如这个图中,数据A输入到指令1中,输出为BB输入到指令2中,输出为CC输入到指令3中,输出为D。由于指令2用到指令1的输出,指令3用到指令2的数据,那么这3条指令都是相关的,必须要满足顺序的执行关系,才能保证执行结果的正确性。这一类的指令相关是无法在指令层面去除的,不过倒是有可能在算法层面上进行优化。我们小时候都读过神童高斯的例子,高斯的老师出了个数学题,1+2+3……+100=? 在别的同学还在一个一个加法苦算的时候,高斯立刻就写出了答案5050,用(100+1)*100/2代替了串行的99个加法。”
       老唐:“相比数据相关,名字相关就冤枉多了,虽然也叫相关,但是实际上两条指令并没有相关性。早期的处理器寄存器数目比较少,编译器在将程序中的变量映射到寄存器时,会导致多个变量对应同一个寄存器,这样即使是不相关的指令,也会使用同样的寄存器,导致了名字相关。后来的处理器虽然寄存器变多了,但是为了保证程序的兼容性,软件能看到的寄存器也就只那么几个,问题仍然存在。下面这个图中,2条语句C=A+BF=D+E本来是不相关的,但是由于寄存器太少,变量映射到同一个寄存器上,就产生了指令的相关性。” 名字相关.JPG

   
    老唐:“控制相关发生在跳转处,最常见的例子是分支:

   if(p1)
   {

    S1;
   }
    S1P1有控制相关。S1的执行需要依赖于P1的结果。因此它们是控制相关。”

[ 本帖最后由 木兮清扬 于 2010-11-15 23:29 编辑 ]

附件: 数据相关.JPG (2010-11-15 23:24, 5.79 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1Mzc5fGY1YmMxNzU4fDE3MzIzNTcyNzB8MHww

附件: 名字相关.JPG (2010-11-15 23:24, 11.64 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1MzgwfGJkYTAxZDk0fDE3MzIzNTcyNzB8MHww
时间:  2010-11-15 23:42
作者: y490286710

学艺取经而来
时间:  2010-11-16 11:40
作者: xzranger

强烈要求加快连载速度,等不急了!
时间:  2010-11-16 16:28
作者: 木兮清扬

目前的进度是一天一载,尽力吧


原帖由 xzranger 于 2010-11-16 11:40 发表
强烈要求加快连载速度,等不急了!

时间:  2010-11-16 19:54
作者: 内洛     标题: 回复 52# 的帖子

每天都来关注这个帖子··
前辈是做什么的呀?
时间:  2010-11-16 20:48
作者: 木兮清扬

谈不上前辈,只是共享些心得总结,做系统工程师,经常要跟处理器打交道。


原帖由 内洛 于 2010-11-16 19:54 发表
每天都来关注这个帖子··
前辈是做什么的呀?

时间:  2010-11-16 23:44
作者: 木兮清扬

(11) 寄存器重命名
    小孙:“现在我已经明白了,相关越少,指令间的并行就可以更多。您刚才说名字相关是个伪相关,怎么来解决这个问题呢?”
    老唐:“现在处理器内部的晶体管资源很多,可以用来做很多的寄存器,如果知道了2条指令是名字相关,就可以将ISA寄存器映射到内部的寄存器上来,同样的ISA寄存器被映射到不同的内部寄存器,这样2条指令就不相关了。我画个图你就明白了。”
寄存器重命名.JPG
                              

    小孙挠了挠头,不好意思的问道:“ISA寄存器是什么意思?”
    老唐:“唉,看来还真得给你做基础扫盲啊。”

附件: 寄存器重命名.JPG (2010-11-16 23:44, 17.85 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1NDY3fGI4OTFlMzNhfDE3MzIzNTcyNzB8MHww
时间:  2010-11-17 10:43
作者: silentwu

前辈好,拜读
时间:  2010-11-17 11:14
作者: paopaohy

来看看学习学习
时间:  2010-11-17 11:18
作者: haip

继续拜读,大神加油
时间:  2010-11-17 16:04
作者: 西电良子

又一篇经典帖子诞生了,帮忙顶下,普及普及知识。
时间:  2010-11-17 18:05
作者: 虚怀若水

做硬件的路过,顶!
时间:  2010-11-17 23:16
作者: gho.kk

先顶!
时间:  2010-11-17 23:48
作者: 木兮清扬

(12)体系结构与微架构
   
    老唐:“处理器设计的初衷,就是想用软件来实现各种功能,这样当人们开发新的功能时,只需要编写软件即可,而不用重新设计硬件。程序员编写软件,软件在处理器上执行来实现各种功能。正如同人们沟通需要使用相同的语言一样,软件和处理器沟通也需要知道处理器的语言
——指令集,处理器能够执行的各种指令的合集就是指令集,所有的软件都被编译成指令序列。指令集,就是处理器对外提供给软件的接口,开发程序,就是硬件搭台,软件唱戏,指令集就是这个戏台。”




指令集.JPG


指令集:连接软件和硬件的桥梁


    小孙:“哦,指令集我知道了,我经常看到一个术语:指令集体系结构,不知道是什么意思?”
    老唐:“IntelCPU经常换代,但是我们以前的软件都可以运行,这就是指令集的功劳,处理器里面的结构经常发生变化,但是只要保证指令集这个接口不变,以前的程序就可以一直使用。分层的思想常用于描述一个复杂的事物,处理器就可以用三个层次来抽象,指令集体系结构描述了处理器对外的指令集,程序员看到这一层就已经足够编程了,处理器微架构是处理器内部设计的逻辑结构,处理器物理实现就是处理器里面具体的电路。”





处理器层次.JPG


处理器系统层次


    老唐:“处理器体系结构(architecture)用来描述编程时用到的抽象机器,而不是这种机器的具体实现。从编程人员的角度来看,处理器体系结构包括一套指令集和一些寄存器,通常也将处理器体系结构等同于指令集体系结构(ISAinstructionset architecture),如x86指令集,ARM指令集等。
       ISA为软件开发提供了便利,为特定ISA编写的程序能够运行在相同ISA的所有处理器之上,例如,PC机上的程序既可以在每代的Intel处理器上运行,也可以在每代的AMD处理器上运行。这种程序兼容性极大的降低了软件的研发费用,增加了软件的使用寿命。遗憾的是,由于这种特性,使得程序移植到其他的ISA上非常困难,成功的ISA越成功,不成功的ISA很快就会消亡。这也是为什么在PC行业只有x86的存在,其他ISA的处理器很难分一杯羹的原因。
    处理器微架构(microarchitecture)用来描述处理器的内部结构,如流水线设计、cache设计、并行设计等等。微架构是处理器的精华所在,也是体现处理器开发工程师价值的地方。一般的处理器设计都是在面积、性能、功耗间取得折中,不过仍然有不少工程师能设计出精巧的微架构,在低面积、低功耗下保持强劲的运算性能,这样的人,被俗称为牛人,也就是能用1块钱花出100块钱品位的人。”





处理器微架构设计的折中.JPG


处理器微架构设计的折中


    老唐:“现在的处理器都用硅集成电路实现,随着集成电路制程工艺的进步,芯片内部晶体管越来越多,速度也越来越快,使得处理器微架构可以越来越复杂,频率也越来越高。未来,芯片的实现将有更多的选择,如生物芯片、量子芯片、光芯片等等。
    总的来说,体系结构是设计规范(或需求),定义处理器能做什么,微架构是设计,描述处理器是怎么实现功能的,物理实现就是最终的实现过程。如果用软件开发的流程类比,那就是需求->设计->编码。”

[ 本帖最后由 木兮清扬 于 2010-11-17 23:50 编辑 ]

附件: 指令集.JPG (2010-11-17 23:48, 9.42 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1NTkyfDA2ZDVlYmRmfDE3MzIzNTcyNzB8MHww

附件: 处理器层次.JPG (2010-11-17 23:48, 11.12 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1NTkzfDc0ZDBlZGNjfDE3MzIzNTcyNzB8MHww

附件: 处理器微架构设计的折中.JPG (2010-11-17 23:48, 9.28 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1NTk0fGM2YjhjNTA3fDE3MzIzNTcyNzB8MHww
时间:  2010-11-18 15:42
作者: post927

强顶@@
大学老师当时讲的RISC现在似乎明白一点了

搬小凳等
时间:  2010-11-18 18:04
作者: dlrbtech

很好
通俗,生动
时间:  2010-11-18 21:39
作者: ufouser

mark.:)
时间:  2010-11-18 22:50
作者: 木兮清扬

(13)指令的相关性确定

    小孙:“唐哥,我已经知道名字相关可以通过寄存器重命名来解决,可是我怎样知道2条指令是名字相关还是数据相关,是否可以并行执行呢?”
    老唐:“这个问题问得好,我们现在来举几个例子。”
    说完,老唐在纸上写上几段指令:
    1.先读后读
    ADD BX, AX ;将AXBX相加,存放到BX (前面的寄存器为目的寄存器)
    ADD CX, AX ;将AXCX相加,存放到CX
    老唐:“这2条指令都有AX2条指令同时读取AX,现在的处理器,大都支持同时多条指令读一个寄存器,因此这两条指令是可以并行的。”

    2.先写后读
    ADD BX, AX ;将AXBX相加,存放到BX
    ADD CX, BX ;将BXCX相加,存放到CX
    老唐:“这两条指令都有BX,指令2用到的BX是指令1更新后的值,因此这两条指令有相关性,不能并行执行。”

    3.先读后写
    ADD BX, AX ;将AXBX相加,存放到BX
    MOV AX, CX ;将CX的值赋给AX
    老唐:“这两条指令都用到AX,指令1AX,指令2AX,实际上,指令2并不依赖于指令1的数据,它们并没有数据相关,而是存在名字相关。通过将寄存器重命名,结果如下:
    ADD R2, R1 AX 被重命名为R1BX被重命名为R2
    MOV R4, R3 AX 被重命名为R4CX被重命名为R3
    经过寄存器重命名后,这2条指令没有用到同样的寄存器,因此可以并行执行。”
   
       4.先写后写
    MOV AX, BX ;将BX的值赋给AX
    MOV AX, CX ;将CX的值赋给AX
    老唐:“这两条指令都用到AX,指令2并不依赖于指令1的数据,它们存在名字相关。寄存器重命名结果如下:
    MOV R2, R1 AX 被重命名为R2BX被重命名为R1
    MOV R4, R3 AX 被重命名为R4CX被重命名为R3
    经过寄存器重命名后,这2条指令没有用到同样的寄存器,因此可以并行执行。”

[ 本帖最后由 木兮清扬 于 2010-11-18 22:53 编辑 ]
时间:  2010-11-19 13:43
作者: 亥子11     标题: 回复 10# 的帖子

真心感谢,希望有更多像你这样无私奉献的汉子
时间:  2010-11-19 20:03
作者: 内洛

每天都来看看这个帖子···
学习知识···
时间:  2010-11-19 20:07
作者: mzjweb

学习!!!!
时间:  2010-11-20 18:50
作者: chengyan126

fdfdfdf
时间:  2010-11-20 23:05
作者: caryee

顶一个 看完了 !
时间:  2010-11-21 00:00
作者: 木兮清扬

(14)乱序

    小孙:“唐哥,我记得前面您说的并行化最重要的就是判断相关性和乱序,能不能举个乱序的例子?”

    老唐:“好的,我们来用DSP中指令的实际执行过程举例说明。如果每条指令的执行时间都是1个周期,那么流水线设计就相对简单了,但是在DSP中,乘法指令执行时间为2个周期,load/store指令需要5个时钟周期,跳转指令需要6个时钟周期。假设有下面2条语句:
       MPY .M1 A0A1A2 ; 目的寄存器放在最后
       ADD .L1 A2A3A4
    第一条语句得到A2 = A0 * A1,第二条语句得到A4 = A2 + A3,那么这2条语句在DSP中是否可以正确工作呢?”
    小孙:“看不出什么问题啊?”
    老唐:“DSP的汇编和x86的汇编不一样,如果这2条指令是x86汇编,就没有问题,x86汇编是按指令顺序执行的,MPY先执行,ADD后执行,但是DSP汇编是按照时钟周期执行的,第一个周期执行MPY,第二个周期执行ADD,由于MPY需要2cycle,所以ADD指令所用的A2寄存器并不是MPY的输出结果,这2条语句执行的结果是错误的。
    小孙:“哦,原来如此,那正确的DSP汇编应该怎样写呢?”
    老唐刷刷的在纸上写了下面的指令:
       MPY .M1 A0A1A2
       NOP
       ADD .L1 A2A3A4
    继续说道:“NOP指令是条空操作,占用1cycle。只要在MPY后面加一条NOP指令,这样第3cycle才执行ADD指令,就执行正确了。我们可以画出指令执行的流水线结构来理解。”
单周期流水线.JPG




非单周期指令流水线


    小孙:“哦,可是第二个cycle执行单元没有活干,不是太浪费了?”
    老唐:“问得好,如果要执行这3条指令:
       MPY .M1 A0A1A2
       ADD .L1 A2A3A4
       ADD .L2 A5A6A7
    实际上的指令写法应该是:
       MPY .M1 A0A1A2
       NOP
       ADD .L1 A2A3A4
       ADD .L2 A5A6A7
    这样执行这个功能就需要4cycle,可是你会发现最后一句和前面几句没有关联,如果将指令的顺序进行调整,改为:
       MPY .M1 A0A1A2
       ADD .L2 A5A6A7 ;位置上移了
       ADD .L1 A2A3A4
    到第3cycle时,A2寄存器的值就是正确的了,整个执行过程只需要3cycle,你就会发现指令乱序后,执行时间少了一个cycle,效率提升了。”

[ 本帖最后由 木兮清扬 于 2010-11-21 00:03 编辑 ]

附件: 单周期流水线.JPG (2010-11-21 00:00, 19.64 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1ODA4fDJlYmIyMWU0fDE3MzIzNTcyNzB8MHww
时间:  2010-11-21 23:47
作者: 木兮清扬

(15)为什么if语句越少越好
    老唐给了小孙一份自己写的程序优化攻略,小孙拿着攻略喜出望外,每日拜读,这一日,小孙拿着攻略来到老唐座位前,讨好的问道:
    “唐哥,您的攻略真是小辈们的福音啊,看您一节攻略,胜读一年书啊,我这里还有些问题,为什么程序中ifswitch等语句越少越好呢?”
    老唐:“这个和指令的流水线处理方式有关。以前我们说过处理器是按照流水线的思想来设计的,第一条指令还没有执行完,后面的几条语句就已经进入处理器做前期的准备工作了。ifswitch等语句会根据条件判断下一个时刻该跳到哪个地方执行,程序如果产生了跳转,原先的流水线过程就出了问题了。我们来看看DSP中如果发生了指令跳转,流水线过程是怎样的?”
发生跳转时的性能损失.JPG


发生跳转时的性能损失


    老唐:“如果指令2是个跳转指令,到第8cycle时才知道要跳转到哪里,指令2后面的很多指令都已经进入了流水线,但是并不需要执行,因此做的这些工作就白做了,在图中,‘×’表示白做了的工作。从这章图就可以看出,一个跳转指令就浪费了这么多的工作,而且是流水线级数越多,浪费就越多,因此我们要养成良好的编程习惯,尽量减少ifswitch等语句。”

附件: 发生跳转时的性能损失.JPG (2010-11-21 23:47, 31.4 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1ODU4fDBjMTY1NTk5fDE3MzIzNTcyNzB8MHww
时间:  2010-11-22 16:24
作者: fullmeshsx

拜读大作;  谢谢lz 分享。
时间:  2010-11-22 23:07
作者: 木兮清扬

(16)发生跳转时的流水线处理

    小孙:“唐哥,如果出现了跳转指令,流水线应该要清空吧,不然预先取址,解码的指令都不是实际该执行的指令,整个处理器的状态就乱了。”
    老唐:“小孙,你的进步不小啊,你说的很对,很多处理器也是这样做的。不过,也有处理器会采用其它的方式,DSP就是采用加NOP指令来排空流水线,在跳转语句后增加5NOP指令来保证流水线正确。即:
      B  loop
      NOP 5
      ……
      loop MPY
      ……
    你看看下面的图:

流水线跳转NOP.JPG


NOP解决控制冒险


    在cycle1,执行单元执行跳转指令,修改了程序地址,PG就是程序地址产生(program address generate)NOP指令虽然也经过了取址、译码等阶段,但是由于执行阶段它是没有任何的操作的,因此没有改变处理器的状态,等到5NOP指令流水完成后,流水线过渡到新的程序地址处重新开始流水,又恢复了正常的状态。”

附件: 流水线跳转NOP.JPG (2010-11-22 23:07, 36.97 KB) / 下载次数 1
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE1OTY0fDY5ZjdhMTI5fDE3MzIzNTcyNzB8MHww
时间:  2010-11-23 00:25
作者: 墨斗鱼1986

写的真好~ 通俗易懂~ 看完之后再配合着看看基本概念就一切清晰了~
时间:  2010-11-23 09:40
作者: cyanbirdfly     标题: 回复 1# 的帖子

好文啊
时间:  2010-11-23 10:22
作者: xzranger

也就是说真正的地址跳转在5个cycle之后发生,为了防止期间其它指令修改处理器状态所以加入5个NOP指令是吗
时间:  2010-11-23 10:46
作者: shore70     标题: LZ这样的高人应该推荐到高校做教授,那将是民族之幸哦

写的理论透彻、根本,文字通俗简练,语言风趣形象,好!
时间:  2010-11-23 11:52
作者: xinbohan

马克,谢谢楼主。关注了
时间:  2010-11-23 12:12
作者: davidchan110

希望中国多点像楼主那样的人才:)
时间:  2010-11-23 14:37
作者: taigerzhm     标题: 回复 1# 的帖子

真不错,通俗易懂,致敬
时间:  2010-11-23 23:23
作者: 木兮清扬

基本上是这样。要跳转的地址在当前时刻已经算出来了,由于指令是流水执行的,再过5个cycle进入执行单元,执行跳转后的新指令。中间这5个cycle要保证处理器状态不改变,所以加了5个NOP。

原帖由 xzranger 于 2010-11-23 10:22 发表
也就是说真正的地址跳转在5个cycle之后发生,为了防止期间其它指令修改处理器状态所以加入5个NOP指令是吗

时间:  2010-11-24 08:10
作者: 木兮清扬

每次调格式,插图太麻烦,今天起改为图片拷贝。




(17)分支预测

连载17.JPG

附件: 连载17.JPG (2010-11-24 08:10, 119.65 KB) / 下载次数 19
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE2MTE2fDdkODc4Mjg3fDE3MzIzNTcyNzB8MHww
时间:  2010-11-24 10:54
作者: 汉江之畔

楼主真强悍,讲解通俗易懂,顶一下
时间:  2010-11-25 00:57
作者: tian_mengguang

真的讲的好,让我这个处理器的门外汉也产生了兴趣!
时间:  2010-11-25 23:01
作者: 墨斗鱼1986

讲的真好~
时间:  2010-11-26 00:02
作者: 木兮清扬

(18)处理器的分支预测实现
18.JPG

附件: 18.JPG (2010-11-26 00:02, 129.16 KB) / 下载次数 5
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE2MzM4fDg4ZGQ0N2Y5fDE3MzIzNTcyNzB8MHww
时间:  2010-11-26 16:56
作者: bigdinosaur     标题: up~~~~~~~~~~~~~~~~~~~~~~~~

mark~~~~~~~~~~~~~~~~~~
时间:  2010-11-26 19:17
作者: yixinuestc     标题: 回复 88# 的帖子

楼主能不能讲一下对于The static predictor为什么跳转指令向后跳就很有可能是循环,预测就发生跳转,向前跳,预测就不发生跳转?
时间:  2010-11-26 23:10
作者: 木兮清扬

看这个循环的代码:

loop: MPY c,x, prod
        ADD y, prod, y
        SUB cnt, 1, cnt
     [cnt] B  loop;实现跳转功能
循环代码的跳转是向后跳的,循环代码第一次绝大多数都是会执行的,所以预测为跳转。
if ,else语句产生的汇编,跳转指令跳转到else分支,是向前跳,通常将最有可能执行的分支写在if中,因此预测为不跳转。


原帖由 yixinuestc 于 2010-11-26 19:17 发表
楼主能不能讲一下对于The static predictor为什么跳转指令向后跳就很有可能是循环,预测就发生跳转,向前跳,预测就不发生跳转?

时间:  2010-11-26 23:19
作者: 木兮清扬     标题: (19)分支预测算法

19.JPG

[ 本帖最后由 木兮清扬 于 2010-11-26 23:22 编辑 ]

附件: 19.JPG (2010-11-26 23:19, 143.63 KB) / 下载次数 6
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE2NDYwfDcxNmI2ZmVhfDE3MzIzNTcyNzB8MHww

附件: 19.JPG (2010-11-26 23:21, 138.84 KB) / 下载次数 6
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE2NDYyfGM4MWM0MjczfDE3MzIzNTcyNzB8MHww
时间:  2010-11-27 10:56
作者: everhappy     标题: 强贴

不错:)
时间:  2010-11-27 11:15
作者: yixinuestc

谢谢楼主,明白了
原帖由 木兮清扬 于 2010-11-26 23:10 发表
看这个循环的代码:

loop: MPY c,x, prod
        ADD y, prod, y
        SUB cnt, 1, cnt
     [cnt] B  loop;实现跳转功能
循环代码的跳转是向后跳的,循环代码第一次绝大多数都是会执行的,所以预测为跳 ...

时间:  2010-11-27 11:17
作者: yixinuestc

如楼主所说,循环和条件判断的跳转方向是不一样的,处理器怎么知道是循环还是条件判断?
原帖由 木兮清扬 于 2010-11-26 23:10 发表
看这个循环的代码:

loop: MPY c,x, prod
        ADD y, prod, y
        SUB cnt, 1, cnt
     [cnt] B  loop;实现跳转功能
循环代码的跳转是向后跳的,循环代码第一次绝大多数都是会执行的,所以预测为跳 ...

时间:  2010-11-27 20:20
作者: 木兮清扬

处理器不知道是循环还是条件判断,只知道是向前跳转还是向后跳转。

原帖由 yixinuestc 于 2010-11-27 11:17 发表
如楼主所说,循环和条件判断的跳转方向是不一样的,处理器怎么知道是循环还是条件判断?

时间:  2010-11-27 21:20
作者: 木兮清扬

20.JPG

附件: 20.JPG (2010-11-27 21:20, 82.25 KB) / 下载次数 6
https://www.txrjy.com/forum.php?mod=attachment&aid=MTE2NTA4fGU2ZDMzMTRmfDE3MzIzNTcyNzB8MHww
时间:  2010-11-28 11:17
作者: yixinuestc

那我是不是理解为只要这次向后跳转,下次就预测为跳转,只要向前跳转,下次就预测不跳转
原帖由 木兮清扬 于 2010-11-27 20:20 发表
处理器不知道是循环还是条件判断,只知道是向前跳转还是向后跳转。

时间:  2010-11-28 11:30
作者: yixinuestc

楼主能不能把这个图详细讲一下啊

原帖由 木兮清扬 于 2010-11-27 21:20 发表
116508

时间:  2010-11-28 21:31
作者: zxr1001

有个小请求
麻烦楼主下次截图的时候能不能尽量让图片小于一个word的A4页面的大小呢,我都是每次的连载复制到word里整理收藏的,有时候太大的图片,word显示不全
时间:  2010-11-28 23:42
作者: 木兮清扬

The Static Predictor 是配合BTB用的,当BTB中没有历史信息时,用The Static Predictor,有了历史信息后,就用BTB。如果一开始某个分支指令的目的地址是向上(后)跳转,就认为很可能是循环,就预测为跳转,否则,预测为不跳转。

原帖由 yixinuestc 于 2010-11-28 11:17 发表
那我是不是理解为只要这次向后跳转,下次就预测为跳转,只要向前跳转,下次就预测不跳转

时间:  2010-11-28 23:43
作者: 木兮清扬

慢慢来讲,一次是讲不清楚的。

原帖由 yixinuestc 于 2010-11-28 11:30 发表
楼主能不能把这个图详细讲一下啊






通信人家园 (https://www.txrjy.com/) Powered by C114