流水线

流水线的通用原理

匿名 (未验证) 提交于 2019-12-02 23:03:14
在流水线化的系统中,待执行的任务被划分成了若干个独立de 阶段 以《深入理解计算机系统》一书上的图做说明,而不是我们常见的五段流水线,我想能更好的说明一些问题。 首先:将系统执行的计算分成三个部分A B C,每个阶段需要100ms然后在各个阶段之间放上流水线寄存器,这样每条指令都会按照三步经过这个系统,从头到尾需要三个完整的时间周期。在稳定状态下,三个阶段都应该是活动的,每个时钟周期,一条指令离开系统,一条新的进入,从时刻240~360可以看出这一点,此时,I1在C阶段,I2在B阶段,I3在A阶段。 重要观点:每一步都有流水线寄存器,故流水线机制需要增加硬件 。 观察流水线上的时钟信号,流水线阶段之间的指令转移是由时钟信号来控制的,每隔120ms,信号从0上升至1,开始下一组流水线阶段的计算。 在时刻240时钟上升之前,指令I1和指令I2已经完成了B,A,在时钟上升后,这些指令开始传送到阶段C和B,而指令I3开始经过阶段A,就在时钟再次在360上升之前,这些指令的结果就会传到流水线寄存器的输入。 总结 :由此可以看出时钟对于计算机系统的重要性,指令流随着之中周而复始的上升和下降,不同的指令就会通过流水线的各个阶段,不会相互干扰。 转载请标明出处: 流水线的通用原理 文章来源: 流水线的通用原理

阿里员工感慨:码农们过去暴富有多轻松,现在赚钱就有多辛苦!

冷暖自知 提交于 2019-12-02 09:10:38
言: 互联网的世界也是一座围城。有人挤破脑袋想要进去。而有人又觉得是被互联网的光鲜表象欺骗了忙着要出来,但最终,这些人都会离开。 码农继承了一个农字,遗传了很多农民的特色。为什么码农的阶层低,笔者先来分析一下。当年,第一产业的宿命就是进化成第二产业。农业合作逐渐代替小农经济,农业合作开始代替自由的生存与放牧。这流水线就成了第一生产力。经济效率的提高,开始推动历史,这再也没谁能阻挡它的趋势,于是,都开始实行了流水线。上世纪日本人把流水线发展到了极致,发明了精益生产,这些玩意后来被富士康学会,然后又带到了国内。 说回码农,互联网进入国内后,随着大公司的码农越来越多,老板们管理不了这些农民了。因此顺利的也将这些码农们顺利变成了流水线上的工人,接着,码农时代就来了 在互联网职场论坛,一位职场人发帖感慨到。有个直觉,往后的互联网工作的性价比很低。现在加入互联网的人,大部分都是给过去十年暴富的互联网从业者买单。过去暴富有多轻松,现在赚钱就有多辛苦。这样的感慨也是瞬间引起了网友的围观与议论,我们先来看看网友们都是怎么说。 有网友就说到。老阿里vs新阿里?才知道啊,现在新加的8是给2年前的7打工,那下一个风口是什么?大概是行情不好了吧,不过还是缺人啊,特别是小厂,维护数据。 也有网友说到。can't agree more,参考十几年前的通信行业。兴起的时候,一个个都是高工资,现在就没有之前那么好了

计算机处理器基础原理笔记

被刻印的时光 ゝ 提交于 2019-12-02 06:43:50
1. 计算机每执行一条指令的过程,可以分解成这样几个步骤。 (1) Fetch (取得指令) ,也就是从PC寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把PC寄存器自增,在未来执行下一条指令。 (2) Decode (指令译码) ,也就是根据指令寄存器里面的指令,解析成要进行什么样的操作,是MIPS指令集的R、I、J中哪一种指令,具体要操作哪些寄存器、数据或者内存地址。 (3) Execute (执行指令) ,也就是实际运行对应的 R、I、J 这些特定的指令,进行算术逻辑操作、数据传输或者直接的地址跳转。 (4)重复进行(1)~(3)的步骤。 这其实就是一个永不停歇的“Fetch - Decode - Execute”的循环,这个循环称之为 指令周期 (Instruction Cycle)。 在取指令的阶段,指令是放在 存储器 里的,实际上, 通过 PC 寄存器和指令寄存器取出指令的过程,是由控制器(Control Unit )操作的。指令的解码过程,也由控制器进行 。到了执行指令阶段,无论是进行算术操作、逻辑操作的R型指令,还是进行数据传输、条件分支的I型指令,都是由 算术逻辑单元 (ALU)操作的,也就是由 运算器 处理的。不过,如果是一个简单的无条件地址跳转,那么我们可以直接在 控制器 里面完成,不需要用到运算器,如下所示:

2-1 线程理论

梦想的初衷 提交于 2019-12-01 06:44:25
一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于cpu),而一条流水线必须属于一个车间,一个车间的工作过程是一个进程,车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一条流水线。 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。 多线程(即多个控制线程)的概念是,在一个进程中存在多个线程,多个线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源。例如,北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个线程,北京地铁所有的线路共享北京地铁所有的资源,比如所有的乘客可以被所有线路拉。 二 线程与进程的区别 Threads share the address space of the process that created it; processes have their own address space. Threads have direct access to the data segment of its process; processes have their own copy of the data segment of the parent process.

2.1.5 指令级并行【译】

僤鯓⒐⒋嵵緔 提交于 2019-12-01 02:05:25
计算机设计师致力于提升他们设计的机器的性能。提升时钟速度是让运行芯片更快的一种方法,但是任何新的设计都不得不受限于当时的历史环境。因此,大部分计算机体系结构在给定时钟速度的情况下,依靠并行(同时处理两件或以上的事务)来获得更多性能。 并行分为指令级并行和处理器级并行两种。前者的并行指的是运用内部独立指令来获取更多的指令输出。后者的并行指的是多个CPU同时运行来解决相同的问题。两种方案各有优势。在本节我们将研究指令级并行;下一节我们研究处理器级并行。 流水线 众所周知,从内存中读取指令这一过程是影响指令执行速度的一大瓶颈。为了缓和这个问题,老古董IBM Stretch(1959)能提前从内存中读取指令,这样当用到这些指令时,它们已经被读取过了。这些指令被存在一组特殊的寄存器中,它就是预取缓冲器。这样,当需要一个指令时,通常从缓冲器中取出而不是等待内存读取完成。 实际上,预取指令的执行可以分为两部分:读取和实际执行。流水线得概念更加深入的执行了这个策略。相比于仅仅被分成两部分,指令的执行通常被分为许多部分(十几个或更多),每个部分由专门的一块硬件处理,所有部分可以并行执行。 图2-4(a)表示一个五单元流水线。第一步从内存读取指令,然后把它放入缓冲区直到被取出。第二步对指令解码,获取指令类型和它需要的操作子。第三步定位并获取操作子,每个操作子都是从内存或寄存器中读取

软件设计师笔记

和自甴很熟 提交于 2019-11-30 21:16:48
上午题 一、计算机组成原理与结构体系 数据的表示 进制转换 R进制转十进制 : 按权展开法 例如二进制 10100 = $1\times2^4+1\times2^2$ = 20 例如七进制 604 = $6\times7^2 + 4\times7^0$ = 298 十进制转R进制 : 短除法 例如20转二进制 2|20 余 0 2|10 余 0 2|5 余1 2|2 余0 2|1 余1 ​ 0 余数从下往上就是10100 二进制转八进制与十六进制 转八进制,从右到左三位一段 例如 10 001 110 = 2 1 6 转十六进制,从右到左四位一段 例如1000 1110 = 8 E 原码反码补码移码 正数 1 负数 1 正1加负1 (1-1) 原码 0000 0001 1000 0001 1000 0010 反码 0000 0001 1111 1110 1111 1111 补码 0000 0001 1111 1111 0000 0000 移码 1000 0001 0111 1111 1000 0000 原码: 1B(字节byte) = 8bit 如果用一个字节表示1,会先转成二进制,再在右边补7个0,其中最右边的0是符号位,0代表正数,1代表负数 即1= 0 000 0001 -1= 1 000 0001 当1+(-1)时,原码1000 0010,值是-2,值是不对的

流水线生产流程与批量生产流程

試著忘記壹切 提交于 2019-11-30 09:16:49
如果您试图找到最有利于生产操作的生产过程,则可能正在考虑装配线或批量生产过程。 批生产被标识为流水线生产过程的按比例缩小版本。 批生产过程不是在组装线上像连续流那样生产,而是与成组地生产有关。 虽然这听起来像许多生产设施应该使用的方法,但批生产还可能造成延迟,这仅仅是因为公司必须在批生产之间停止生产线。 如果要延迟及时地将产品提供给客户,这些延误可能会变得越来越成问题。 话虽如此,批量生产仍然是制造操作可以利用的实质上有益的生产过程。 如果您正在考虑流水线生产或批量生产,则这两个过程都具有优势。 首先,我们将讨论组装线生产的一些优点和缺点。 流水线生产的利与弊 在流水线生产中,存在以下各种优点和缺点: 流水线 生产的优势 -生产线或流水线使制造商能够及时有效地有效生产大量物品。 工人和机器执行特定的任务,当产品沿生产线下移时,它​​会构建产品的一部分,一旦过程完成,最终将成为成品。 流水线生产有利于规模经济,这是指由于产量增加而降低了平均生产成本。 生产线生产的缺点 - 生产线生产 的主要缺点之一是无法控制生产线内的浪费和财务损失。 大型生产线通常包括富有表现力的组装机,这对于制造商以更高的产出利用率而言仅是经济的。 话虽如此,大批量生产增加了制造错误的机会,这些错误导致制造商无法销售的有缺陷的产品。 大量的产量也可能使制造商陷入大量由于消费者需求下降而无法出售的产品的困境。

深入浅出计算机组成原理:Superscalar和VLIW-如何让CPU的吞吐率超过1?(第26讲)

不想你离开。 提交于 2019-11-29 03:10:51
一、引子 到今天为止,专栏已经过半了。过去的20多讲里,我给你讲的内容,很多都是围绕着怎么提升CPU的性能这个问题展开的。我们先回顾一下第4讲,不知道你是否还记得这个公式: 程序的CPU执行时间 = 指令数 × CPI × Clock Cycle Time 这个公式里,有一个叫CPI的指标。我们知道,CPI的倒数,又叫作IPC(Instruction Per Clock),也就是一个时钟周期里面能够执行的指令数,代表了CPU的吞吐率。那么,这个指标,放在我们前面几节反复优化流 水线架构的CPU里,能达到多少呢? 答案是,最佳情况下,IPC也只能到1。因为无论做了哪些流水线层面的优化,即使做到了指令执行层面的乱 这说明,无论指令后续能优化得多好,一个时钟周期也只能执行完这样一条指令,CPI只能是1。但是,我们现在用的Intel CPU或者ARM的CPU,一般的CPI都能做到2以上,这是怎么做到的呢? 今天,我们就一起来看看,现代CPU都使用了什么 “黑科技”。 二、多发射与超标量:同一实践执行的两条指令 1、整数和浮点数计算的电路,在CPU层面也是分开的 之前讲CPU的硬件组成的时候,我们把所有算术和逻辑运算都抽象出来,变成了一个ALU这样的“黑盒子”。你应该还记得第13讲到第16讲,关于加法器、乘法器、乃至浮点数计算的部分,其实整数的计算和 浮点数的计算过程差异还是不小的。实际上

深入浅出计算机组成原理:冒险和预测(二)-流水线里的接力赛(第23讲)

岁酱吖の 提交于 2019-11-29 02:35:34
一、引子 1、解决不同指令之间的数据依赖问题。 上一讲,我为你讲解了结构冒险和数据冒险,以及应对这两种冒险的两个解决方案。一种方案是增加资源,通过添加指令缓存和数据缓存,让我们对于指令和数据的访问可以同时进行。 这个办法帮助CPU解决了取指令和访问数据之间的资源冲突。另一种方案是直接进行等待。通过插入NOP这样的无效指令,等待之前的指令完成。这样我们就能解决不同指令之间的数据依赖问题 2、上一讲的这两种方案这两种方案都有点儿笨。 着急的人,看完上一讲的这两种方案,可能已经要跳起来问了:“这也能算解决方案么?”的确,这两种方案都有点儿笨。 第一种解决方案,好比是在软件开发的过程中,发现效率不够,于是研发负责人说:“ 我们需要双倍的人手和研发资源 。”而第二种解决方案,好比你在提需求的时候,研发负责人告诉你说: “来不及做,你只能等 我们需求排期。” 你应该很清楚地知道,“堆资源”和“等排期”这样的解决方案,并不会真的提高我们的效率,只是避免冲突的无奈之举。 那针对流水线冒险的问题,我们有没有更高级或者更高效的解决方案呢?既不用简单花钱加硬件电路这样 “堆资源” ,也不是纯粹等待之前的任务完成这样 “等排期” 。 答案当然是有的。这一讲,我们就来看看计算机组成原理中,一个更加精巧的解决方案, 操作数前推 二、NOP操作和指令对齐 要想理解操作数前推技术,我们先来回顾一下,第5讲讲过的

深入浅出计算机组成原理:冒险和预测(四)-今天下雨了,明天还会下雨么?(第24讲)

让人想犯罪 __ 提交于 2019-11-29 01:47:32
一、引子 1、取指令(IF)和指令译码(ID)的阶段,是不需要停顿的 过去三讲,我主要为你介绍了结构冒险和数据冒险,以及增加资源、流水线停顿、操作数前推、乱序执行,这些解决各种“冒险”的技术方案。 在结构冒险和数据冒险中,你会发现,所有的流水线停顿操作都要从 指令执行阶 段开始。流水线的前两个阶段,也就是取指令(IF)和指令译码(ID)的阶段,是不需要停顿的。CPU 会在流水线里面直接去取下一条指令,然后进行译码。 2、一旦遇到 if…else 这样的条件分支,或者 for/while 循环就会不成立 取指令和指令译码不会需要遇到任何停顿,这是基于一个假设。这个假设就是,所有的指令代码都是顺序加载执行的。不过这个假设,在执行的代码中,一旦遇到 if…else 这样的条件分支, 或者 for/while 循环,就会不成立。 我们先来回顾一下,第6讲里讲的cmp比较指令、jmp和jle这样的条件跳转指令。可以看到,在jmp指令发生的时候,CPU可能会跳转去执行其他指令。jmp后的那一条指令是否应该顺序加载执行, 在流水线里面进行取指令的时候,我们没法知道。要等jmp指令执行完成,去更新了PC寄存器之后,我们才能知道,是否执行下一条指令,还是跳转到另外一个内存地址,去取别的指令 3、如何解决停顿 这种为了确保能取到正确的指令,而不得不进行等待延迟的情况,就是今天我们要讲的 控制冒险