issue queue的实现方式

主要从一下几个点进行考虑:

  • 集中式(Centrallized)或者分布式(Distributed);
  • 压缩式(Compressing)或者非压缩式(Non-compressing);
  • 数据捕捉的方式(Data-capture)或者非数据捕捉方式(Non-data-capture);

上述三种结构都是正交的,可以相互组合;

集中式VS分布式

        在超标量处理器中,为了并行执行指令,一般都有很多的FU,例如有些FU负责整数的加减,有些FU负责存储器访问,有些FU负责乘除法运算等。

  • 如果所有的这些FU都共用一个发射队列,称这种结构为集中式的发射队列(Centralized Issue Queue,CIQ);
    • CIQ因为要负责存储所有FU的指令,所以它的容量需要很大
    • 这种设计有着最大的利用效率,不浪费发射队列中的每一个空间,但是会使选择电路和唤醒电路变得比较复杂,因为需要从数量庞大的指令中选择出几条可以被执行的指令(个数取决于每周期最多可以同时执行的指令个数,这个值通常称为Issue Width)
    • 这些被选中的指令还需要将发射队列中所有相关的指令都进行唤醒,这都增加了选择电路和唤醒电路的面积和延迟。
  • 而如果每个FU都有一个单独的发射队列,称这种结构为分布式的发射队列(Distributed IssueQueue,DIQ)。
    • DIQ的设计方式,为每一个FU都配备一个发射队列,所以每个发射队列的容量可以很少,这样就大大简化了选择电路的设计(每个发射队列都对应一个选择电路)。
    • 但是当一个发射队列已经满了时,即使其他的发射队列中还有空间,也不能够继续向其中写入新的指令,此时就需要将发射阶段之前的所有流水线都暂停,直到这个发射队列中有空闲的空间为止。
    • 即使此时其他 FU 的发射队列中还存在空间,也需要将发射阶段之前的流水线都暂停,这样就造成了发射队列利用效率的低下,而且,由于它的分布比较分散,进行唤醒操作时所需要的布线复杂度也随之上升。
  • 现代处理器的折中方式:使某几个FU共用一个发射队列;

数据捕捉 VS 非数据捕捉 

 对于超标量处理器来说,还需要考虑一个重要的事情,就是在流水线的哪个阶段读取寄存器的值,它直接决定了处理器中其他一些部件的设计。

  • 在流水线的发射阶段之前读取寄存器,这种方法也称为数据捕捉(Data-capture)的结构
    • 寄存器重命名之后的指令会首先读取物理寄存器堆(PhysicalRegister File),然后将读取到的值随着指令一起写入发射队列中。
    • 如果有些寄存器的值还没有被计算出来,则会将寄存器的编号写到发射队列中,以供唤醒(wake-up)的过程使用,它会被标记为当前无法获得(non-available)的状态,这些寄存器都会在之后的时间通过旁路网络(bypassing network)得到它们的值,不需要再访问物理寄存器堆。
    • IQ中,存储指令操作数的地方,称之为payload RAM;
      • 当指令从发射队列中被仲裁电路选中时,就可以直接从payload RAM中对应的地方将源操作数读取出来,并送到FU中去执行。
      • 被选中的同时,它会将目的寄存器的编号值进行广播
      • 发射队列中其他的指令都会将自身的源寄存器编号和这个广播的编号值进行比较,一旦发现相等的情况,则在payload RAM对应的位置进行标记
      • 当那条被选中的指令在FU中计算完毕时,就会将它的结果写到payload RAM这些对应的位置中,这是通过旁路网络(bypassing network)来实现的
    • 这种方式就像是payload RAM在“捕捉”FU计算的结果,所以称为数据捕捉(data-capture)结构;
      • 其中,issue queue负责比较寄存器的编号值是否相等;
      • payload RAM负责存储源操作数,并捕捉对应FU的结果;
    • 一些概念:
      • machine width:表示每周期实际可以decode和rename的指令个数;
      • issue width: 每周期最多可以在FU中并行执行的指令个数(即发射个数);
      • 假设每条指令2个源操作数,则PRF需要读的物理端口个数为:machine width x 2;
  • 非数据捕捉方式
    • 在流水线的发射阶段之后,再读取物理寄存器;
    • 在这样的设计中,被重命名之后的指令不会去读取物理寄存器堆,而是直接将源寄存器的编号放到发射队列中
    • 当指令从发射队列中被选中时,会使用这个源寄存器的编号来读取物理寄存器堆,将读取的值送到FU中去执行。由于在发射队列中不需要存储源操作数的payload RAM了,所以它可以被“瘦身”,也就增加了处理的速度。
  • 两种方式的比较:
    •  捕捉方式,占用的面积会更大一些。而且,在这种方法中,很多源操作数都需要经历两次读和一次写的过程,即从寄存器中读取出来,写到发射队列中,然后再从发射队列中读取出来送到FU中执行,很显然,这会消耗更多的能量,不利于实现低功耗的处理器。
    • 而采用在流水线的发射阶段之后读取寄存器的方式,需要寄存器堆有着更多的读端口,但是在发射队列中不再需要存储源操作数,所以发射队列在面积和速度方面会好一些,源操作数也只需要读取一次就可以了,因此相比于另一种方法,它的功耗会低一些。

压缩式vs非压缩式

  •  压缩的发射队列(Compressing Issue Queue)
    • 每当一条指令被选中而离开发射队列时,会出现一个“空隙”,这条指令上面所有的指令都会下移一格,将刚才那条指令的“空隙”填上。
    • 发射队列当中的这些指令,从上往下看,是按照“最新→最旧”的顺序排列的,新来的指令会从发射队列上面的空闲空间开始写入。
    • 通过这种方式,可以保证空闲的空间都是处于发射队列的上部,此时只需要将重命名之后的指令写到发射队列的上部即可;
    • 这种方式,需要每个entry的内容,都能够移动到其下方的entry中,这就需要再每个entry的前面,加上一个多路选择器;
      • 这种压缩的设计方法,一个比较大的优点就是其选择(select)电路比较简单,为了保证处理器可以最大限度地并行执行指令,一般都从所有准备好的指令中优先选择最旧(oldest)的指令送到 FU 中执行,这也称为 oldest-first 方法
      • 而这种压缩方式的发射队列已经很自然地按照“最新→最旧”的顺序将指令排列好了,因此只需要简单地使用优先级编码器进行选择即可。
      • 发射队列中每条指令发出的请求信号都受到它之前指令的影响,只有比它旧的所有指令都没有被选中时,这条指令才有被选中的资格;
    • 该种方式的特点: 
      • 选择发射entry的延迟与发射队列的容量成正比,发射队列中,可以容纳的指令个数越多,延迟也就越大;
      • 分配(allocate)电路很简单,发射队列的空闲空间总是在上部,因此只需要使用发射队列的写指针,指向第一个空闲的空间即可;
      • 选择(select)电路很简单,因为最新,最旧的顺序已经拍好了,因此使用priory encoder来找到已经准备好的,最旧的指令,即实现了oldest-first功能;
      • 实现起来比较浪费硅片的面积;主要是选择电路和布线资源太多;
      • 功耗大,因为每周期需要进行数据移动,因此功耗很大;
  •  非压缩的发射队列(Non-Compressing Issue Queue) 
    • 在这种方法中,顾名思义,就是每当有指令离开发射队列的时候,发射队列中其他的指令不会进行移动,而是继续停留在原来的位置,此时就没有了“压缩”的过程。
    • 在这种方法中,空闲空间在发射队列中的分布将是没有规律的,它可以位于发射队列中的任何位置,因此发射队列当中的指令将不再有“最新→最旧”的顺序,不能够根据指令的位置来判断指令的新旧。
    • select logic, 从发射队列的最下面的指令开始寻找,直到遇到第一条准备好的指令为止;但是这种选择电路,其实是一种比较随机的选择,因为inst的年龄信息,与其在发生队列中的位置,是没有关系的;
    • 这种基于位置的选择电路实现起来很简单,也不会产生错误,但是由于没有实现 oldest-first 的功能,所以没有办法获得最好的性能。       
    • 该实现方式的特点如下:
      • 采用非压缩的发射队列,优点是其中的指令不再需要每个周期都移动,这样大大减少了功耗,也减少了多路选择器和布线的面积。
      • 要实现 oldest-first 功能的选择电路,就需要使用更复杂的逻辑电路,这会产生更大的延迟;
      • 分配(allocation)电路也变得比较复杂,无法像压缩方法中那样直接将指令写入到发射队列的上部即可,而是需要扫描发射队列中所有的空间,尤其是当每周期需要将几条指令写入时,需要更复杂的电路来实现这个功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/254724.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu系统使用Nginx搭建RTMP服务器

环境: 推流端 rockpi s 主控rk3308 运行ubuntu系统 服务端 ubuntu 播放器 VLC播放器 服务端安装依赖: apt-get install build-essential libpcre3 libpcre3-dev libssl-dev创建nginx编译目录: mkdir my_nginx_rtmp cd my_nginx_rtmp/下载 …

Linux性能调优技术概览

Linux性能调优技术概览 概述 这里的Linux性能调优主要是关于Linux系统上程序的性能跟踪,因为只有收集到足够的准确的性能数据才能找到程序和系统的性能瓶颈。Linux性能调优的原理、框架、工具等内容包括三个方面: 信息源 通常是以“事件”的形式&#…

X86汇编语言:从实模式到保护模式(代码+注释)--c10、11(保护模式:32位x86处理器编程架构+进入保护模式)

保护模式:32位x86处理器编程架构 IA-32架构的基本执行环境 寄存器扩展 通用寄存器(32):EAX EBX ECX EDX ESI EDI EBP ESP 指令寄存器(32):EIP 标志寄存器(32)&#xff…

Hive学习新天地一站式掌握Hive技能,让你成为大数据领域的佼佼者!

介绍:Hive是一个构建在Hadoop顶层的数据仓库工具,起源于Facebook为了解决海量数据的统计分析需求。它能够将结构化的数据文件映射为一张数据库表,并提供类似于SQL的查询功能,可以将SQL语句转换为MapReduce任务进行运行。 Hive的出…

【企业转型】以企业架构为中心的SABOE数字化转型五环法

01 传统企业数字化转型面临诸多挑战 即将过去的2023年,chatGPT大模型、数据资产入表等事件的发生,标志着数字经济正在加速发展。数字经济是人类社会继农业经济、工业经济之后的第三种经济形态,将推动生产方式、生活方式和治理方式深刻变革&a…

21.Servlet 技术

JavaWeb应用的概念 在Sun的Java Servlet规范中,对Java Web应用作了这样定义:“Java Web应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的 Servlet容器 中运行。” Java Web应用中可以包含如下…

教师退休享受国家规定的什么待遇

作为一名教师,一直致力于为学生提供最好的教育服务。然而,随着时间的推移,我们的身体和精力可能会逐渐下降,最终不得不退休。 那么,教师退休后可以享受哪些待遇呢?根据我所了解的情况,以下是一些…

2023本四前端社招面经

美团 全程问项目,根据项目提问,SEO优化方案,还出了一道动态规划的题 SEO优化方案 一、内部优化 META 标签优化:例如:TITLE,KEYWORDS,DESCRIPTION (TDK)等的优化 内部链接…

窗口看门狗和独立看门狗的异同

场景:工业自动化控制器 1. 独立看门狗的应用: 要求: 在一个工业自动化控制器中,需要确保周期性任务能够按时完成。在这个场景中,如果周期性任务在规定的时间内没有完成,可能会导致系统的不稳定。 实现&am…

黑皮诺、白皮诺与灰皮诺各自的特点?

黑皮诺在所有葡萄品种中被誉为的“公主般娇弱的身子却有着皇后的命”,被众多酿酒师认为是最娇弱又最名贵的葡萄品种。云仓酒庄的品牌雷盛红酒LEESON分享这么受欢迎的葡萄品种还有两个同样气质出众的妹妹,分别是灰皮诺和白皮诺。只是姐姐黑皮诺的名气实在…

【Python】人工智能-机器学习——不调库手撕贝叶斯分类问题

1. 作业内容描述 1.1 背景 数据集大小150该数据有4个属性,分别如下 Sepal.Length:花萼长度(cm)Sepal.Width:花萼宽度单位(cm)Petal.Length:花瓣长度(cm)Petal.Width:花瓣宽度(cm)category:类别&#xff0…

GNSS定位中常见的几大坐标系统及其相互转换

目录 一、坐标系概念 二、常见的几大坐标系统 1.ECEF坐标系 2.ENU坐标系 3.LLA坐标系 4.三个坐标系之间的相互转化关系 (1)LLA坐标系转ECEF坐标系 (2)ECEF坐标系转LLA坐标系 (3)ECEF坐标系转ENU坐标系 (4)ENU坐标系转ECEF坐标系 (5)LLA坐标系转ENU坐标系 (6)ENU坐标…

Linux下Netty实现高性能UDP服务

前言 近期笔者基于Netty接收UDP报文进行业务数据统计的功能,因为Netty默认情况下处理UDP收包只能由一个线程负责,无法像TCP协议那种基于主从reactor模型实现多线程监听端口,所以笔者查阅网上资料查看是否有什么方式可以接收UDP收包的性能瓶颈…

Jenkins配置代理节点时遇到的坑和解决办法

需求:服务器太满了,需要找个比较空闲的机器分担一下,看上了同网络的某开会用的笔记本,把这个本本利用起来能跑一个算一个。 但配置起来并不容易,遇到的问题有些网上也几乎找不到答案。这里记录一下能救一个是一个&…

STP原理与配置

为了提高网络可靠性,交换网络中通常会使用冗余链路。然而,冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。生成树协议STP(Spanning Tree Protocol&#xff0…

【深度学习目标检测】九、基于yolov5的路标识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型,其具有以下几个优势: 1. 高精度:YOLOv5相比于其前身YOLOv4,在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进,如更深的网络结构、更多的特征层和更高分辨率的输入图…

VSCode 配置自动生成头文件

相关文章 VSCode 开发C/C实用插件分享——codegeex VSCode 开发C/C实用插件分享——koroFileHeader VSCode 配置自动生成头文件 一、snippets二、配置步骤三、效果展示 一、snippets 相信大家对C、C都头文件都不陌生,都会发现每个头文件都会包括下面的这些格式&…

【PostgreSQL】从零开始:(三)PgAdmin4下载与安装

【PostgreSQL】从零开始:(三)PgAdmin4下载与安装 pgAdmin简介liunx下部署通过yum部署pgAdmin4(6.21)1.安装依赖包2.永久停止防火墙3.配置pgadmin4项目源4.下载并安装pgAdmin45.执行初始化命令6.访问我们的网站 liunx下通过python方…

思码逸企业版 4.0 特性之三:研发效能数据的智能化分析与解读

建立研发效能体系,数据的收集与清理并建立指标体系只是第一步,如果不针对这些指标采集到的数据进行分析,那就无法做到研发效能度量闭环,那么指标体系也就毫无意义。所以研发效能分析在整个研发效能改进闭环中占据非常重要的一环。…

前端开发中的webpack打包工具

前端技术发展迅猛,各种可以提高开发效率的新思想和框架层出不穷,但是它们都有一个共同点,即源代码无法直接运行,必须通过转换后才可以正常运行。webpack是目前主流的打包模块化JavaScript的工具之一。 本章主要涉及的知识点有&am…