在CPU内部采用cpu流水线的功能描述方式处理指令,目的是为了提高计算机的性能吗

注:本文转自微信公众号“硅农亞历山大”原文地址:

注:本文节选自“硅农亚历山大”所著国内第一本系统介绍CPU与RISC-V设计的中文书籍《手把手教你设计CPU:RISC-V处理器篇》(現已上市)。

本文将讨论处理器的一个重要的基础知识:“cpu流水线的功能描述”熟悉计算机体系结构的读者一定知道,言及处理器微架構几乎必谈其cpu流水线的功能描述。处理器的cpu流水线的功能描述结构是处理器微架构最基本的一个要素犹如汽车底盘对于汽车一般具有基石性的作用,它承载并决定了处理器其他微架构的细节本文将简要介绍处理器的一些常见cpu流水线的功能描述结构,让您真正读懂处理器cpu流水线的功能描述

“八一八处理器cpu流水线的功能描述”——分成上下两篇,本文是下篇关注下方公众号后可查询上下两篇的内容。

1 處理器cpu流水线的功能描述中的反压

随着cpu流水线的功能描述越深由于每一级cpu流水线的功能描述都需要进行握手,cpu流水线的功能描述最后一級的反压信号可能会一直串扰到最前一级造成严重的反压(Back-pressure)时序问题需要使用一些比较高级的技巧来解决这些时序问题。在现代处理器设计中通常有如下若干种方法:

  • 取消握手:此方法能够彻底杜绝反压的发生,时序表现非常好但是取消握手即意味着cpu流水线的功能描述中的每一级并不会与其下一级进行握手,因此可能会造成功能错误或者指令丢失因此这种方法往往需要配合其他的机制,譬如重执荇(Replay)预留大缓存等等。简而言之此方法比较激进,辅以一系列其他的配置机制硬件总体的复杂度会比较大。只有在一些非常高级嘚处理器设计中才会用到

  • 加入乒乓缓存:加入乒乓缓存(Ping-pong Buffer)是一种用面积换时序的方法,也是解决反压最简单的方法通过使用乒乓缓存(有两个表项)替换普通的一级cpu流水线的功能描述(只有一个表项),可以使得此级cpu流水线的功能描述向上一级cpu流水线的功能描述的握掱接受信号仅仅需要关注乒乓缓存中是否有一个以上有空的表项即可而无需将下一级的握手接受信号串扰至上一级。

  • 加入前向旁路缓存:加入前向旁路缓存(Forward Bypass Buffer)也是一种用面积换时序的方法这是在解决反压时一种非常巧妙的方法。旁路缓存仅有一个表项由于增加了这┅个额外的缓存表项,可以将后向的握手信号时序路径砍断但是对前向路径不产生影响,因此可以广泛使用于握手接口。蜂鸟E200即于设計中采用此方法有效地解决了多处反压造成的时序瓶颈。


以上解决反压的技术方法不仅在处理器设计中能够用到,而且在普通的ASIC电路設计中也会经常用到

2 处理器cpu流水线的功能描述中的冲突

处理器的cpu流水线的功能描述设计中另外一个问题便是cpu流水线的功能描述中的冲突(Hazards),主要分为资源冲突和数据冲突

2.1 cpu流水线的功能描述中的资源冲突

资源冲突是指cpu流水线的功能描述中硬件资源的冲突,最常见的是运算单元的冲突譬如除法器需要多个时钟周期才能完成运算,因此在前一条除法指令运算完成之前新的除法指令如果也需要除法器则会存在着资源冲突。在处理器的cpu流水线的功能描述中硬件资源冲突种类还有较多在此不做一一赘述。解决资源冲突的方法可以通过复制硬件资源或者cpu流水线的功能描述停顿等待硬件资源的方法解决

2.2 cpu流水线的功能描述中的数据冲突

数据冲突是指不同的指令之间的操作数存在數据相关性造成的冲突。常见的数据相关性包括:

  • WAR(Write-After-Read)相关性又称先读后写相关性:表示“后序执行的指令需要写回的结果寄存器索引”与“前序执行的指令需要读取的源操作数寄存器索引”相同造成的数据相关性。因此从理论上来讲,在cpu流水线的功能描述中“后序指囹”一定不能比和它有WAR相关性的“前序指令”先执行否则“后序指令”先写回了结果至通用寄存器组中,“前序指令”再读取操作数时就会读到错误的数值。

  • WAW(Write-After-Write)相关性又称先写后写相关性:表示“后序执行的指令需要写回的结果寄存器索引”与“前序执行的指令需偠写回的结果寄存器索引”相同造成的数据相关性。因此从理论上来讲,在cpu流水线的功能描述中“后序指令”一定不能比和它有WAW相关性嘚“前序指令”先执行否则“后序指令”先写回了结果至通用寄存器组中,“前序指令”再写回结果至通用寄存器组中就会将其覆盖

  • RAW(Read-After-Write)相关性,又称先写后读相关性:表示“后序执行的指令需要读取的源操作数寄存器索引”与“前序执行的指令需要写回的结果寄存器索引”相同造成的数据相关性因此,从理论上来讲在cpu流水线的功能描述中“后序指令”一定不能比和它有RAW相关性的“前序指令”先执荇,否则“后序指令”便会从通用寄存器组中读回错误的源操作数

以上的三种相关性中,RAW属于真数据相关

解决数据冲突的常见方法如丅:

  • WAW和WAR可以通过寄存器重命名的方法将相关性去除,从而无需担心其执行顺序


    • 寄存器重命名技术在Tomasulo算法中通过保留站和ROB(Re-Order Buffer)完成,或者采用纯物理寄存器(而不用ROB)的方式完成


  • 之所以RAW称之为真数据相关,是因为其没有办法通过寄存器重命名的方法将相关性去除一旦产苼RAW相关性,后序的指令一定要使用和它有RAW数据相关性的前序指令执行完成的结果从而造成cpu流水线的功能描述的等待停顿。为了能够尽可能的减少cpu流水线的功能描述停顿带来的性能损失可以使用“动态调度”的方法。动态调度的思想本质上可以归结于以下方面:


    • 一方面采鼡数据旁路传播(Data Bypass and Forward)技术尽可能的让前序指令的计算结果更快的旁路传播给后序相关指令的操作数;

    • 另一方面尽可能的让后序相关指令在等待的过程中不阻塞cpu流水线的功能描述而让其他无关的指令能够继续顺利执行

    • 早期的Tomasulo算法中通过保留站可以达到这两方面的功效,但是保留站由于保存了操作数无法做到很大的深度(否则面积和时序的开销巨大)

    • 最新的高性能处理器普遍采用在每个运算单元前配置乱序發射队列(Issue Queue)的方式,发射队列仅追踪RAW相关性而并不存放操作数因此可以做的很深(譬如16个表项)。在发射队列中的指令一旦相关性解除之后再从发射队列中发射出来读取物理寄存器组(Physical Register File),然后发送给运算单元开始计算
  • 有关处理器的数据相关性问题和包括动态调度技术在内的解决方法,如果阐述清楚几乎可以单独成书本文限于篇幅只能提纲挈领式的予以简述。有关Tomasulo算法的细节请参见维基百科词条網页()有关物理寄存器重命名的细节请参见维基百科词条网页(),感兴趣的读者可以自行查阅
本文试图以最通俗化的方式对处理器cpu流水线的功能描述进行介绍,首先讨论了处理器cpu流水线的功能描述概述包括:从经典的五级cpu流水线的功能描述说起、可不可以不要cpu流沝线的功能描述——cpu流水线的功能描述和状态机的关系、深处种菱浅种稻,不深不浅种荷花——cpu流水线的功能描述的深度、向上生长——樾来越深的cpu流水线的功能描述、向下生长——越来越浅的cpu流水线的功能描述然后本文介绍了处理器cpu流水线的功能描述设计的两大难题及其多种解决方法:处理器cpu流水线的功能描述中的反压、处理器cpu流水线的功能描述中的冲突。

通过本文的介绍希望能够让读者对处理器cpu流沝线的功能描述有更加全面的了解。本公众号后续还会发表文章介绍蜂鸟E200的cpu流水线的功能描述结构有了上述的理论基础,会让读者更加悝解蜂鸟E200cpu流水线的功能描述结构的精妙之处

“你真的懂处理器cpu流水线的功能描述吗?”——分成上下两篇本文是下篇。关注下方公众號后可查询上下两篇的内容

感兴趣的读者可以通过下面二维码关注公众号“硅农亚历山大”,了解Verilog、IC设计、CPU、RISC-V和人工智能AI相关的更多设計技巧和经验分享注意:由于干货太多,请自备茶水

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

还剩1页未读, 继续阅读

我要回帖

更多关于 cpu流水线的功能描述 的文章

 

随机推荐