CPU Study - Pipeline Basic

参考来源:《超标量处理器设计》—— 姚永斌

超标量处理器

一个程序执行时间的公式如下,而这个公式通常也反映了处理器的性能:
CPI
图中的CPI - Cycle Per Instruction也就是CPU每条指令需要的周期数量,CPI计算方法就是周期数量除以这段周期内的指令数量。
而基于CPI,就有IPC - Instructions Per Cycle参数,定义执行一条指令需要多少时钟周期,属于更为通用的定义处理器性能的参数。

通常有以下几个加快处理器速度方法:

  • 减少指令数量
  • 减少CPI,让每个周期执行更多指令,也就是增加IPC,让一个指令的执行时间更短
  • 超频,减少单个周期时间

超标量处理器就是通过在同一个时间内并行执行n条指令来提高IPC的n-way处理器,拥有以下优势:

  • 可以通过硬件或者软件配合编译器支持决定哪些指令可以并行执行
  • 每个周期可以从Instruction Cache中取出n条指令送到CPU流水线,CPU每个周期也可以执行n条指令(n-way超标量处理器)
  • 支持超长指令字(Very Long Instruction Word, VLIW)

后续文章中会围绕超标量流水线处理器的设计进行分享,这里先对于Pipeline进行分享。

Pipeline

流水线设计是超标量处理器中基础的一环,理想情况下,流水线具有以下特征:

  • 每个阶段所需要的时间近似
  • 每个阶段操作重复执行(实际存在依赖空档期)
  • 各个操作阶段之间相互独立、互不干扰(实际RAW场景是相互依赖的)

假设处理器没有使用流水线的周期为D,频率为1/D。在n级流水线中周期为"D/n + S",S为流水线寄存器的延时,变化信息如下所示:
流水线
可以看到,流水线在延时S不影响整体的前提下,能有效提高处理器频率。
当然,更多的流水线设计也会更多消耗硬件面积资源。

不同指令集的流水线实现复杂度也不同:
CISC指令长度以及执行时间不等,实现流水线较为复杂。
RISC指令长度相等,指令执行任务较为规整,比较容易实现流水线。

RISCV流水线如下如图所示:
RISCV PIPE

阶段任务
Fetch取指令,使用PC寄存器的数值作为地址,从I-Cache取指令并存储在指令寄存器中
Decode & RegFile read指令解码,根据结果读取寄存器堆(register file)获取指令源操作数
Execute根据指令类型,完成计算任务。例如算数类型进行算数运算,访存类型完成地址计算
Memory访问D-Cache,主要面向读load/写store指令,其他指令类型此阶段不执行
Write Back若指令存在目的寄存器,将最终结果写到目的寄存器

流水线指令相关性

RAW-先写后读
Read指令操作数来自之前指令Write的,此场景下是强依赖关系。

Write: R1 = R2 + R3
Read: R5 = R1 + R4 // R5结果依赖R1数值

WAR-先读后写
Write指令需要将结果写到某个寄存器中,但是这个寄存器还在被其他指令Read,无法立即写入。

Read: R1 = R2 + R3
Write: R2 = R5 + R4 // R2状态受到之前的访问限制

上述这种情况都可以通过修改下一条指令写入位置(不写入R2寄存器)避免依赖。

WAW-先写后写

Write: R1 = R2 + R3
Write: R1 = R5 + R4

这种依赖性也是可以通过将第二条指令写入其他寄存器避免。

还有一些指令的相关性类型如下:

控制相关性
分支指令引起,只有分支结果确定后,才知道从哪里取得后续指令执行。只能通过预测的方法取指。

存储器相关性
当两个寄存器存储的数值来源的内存地址一样时,会存在隐蔽的相关性。

sw	r1, 0(r5) // 将寄存器r1数值保存到MEM[r5]
lw	r2, 0(r6) // 将MEM[r6]数值读取到r2寄存器

直接看上面的指令很难看出两条指令的相关性,但实际上r5寄存器数值和r6寄存器数值都来自于一块内存。
那么第二条指令的读取,必须等待第一条指令的写入才可以,即RAW的依赖。

而这些指令相关性都会阻碍超标量处理器中的指令乱序执行,都需要在流水线中进行特殊处理,后续会在这篇文章介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

keep-alive - 2024最新版前端秋招面试短期突击面试题【100道】

keep-alive - 2024最新版前端秋招面试短期突击面试题【100道】 &#x1f5c4;️ <keep-alive> 是 Vue.js 中的一个内置组件&#xff0c;用于在组件切换时缓存组件的状态&#xff0c;避免重复渲染&#xff0c;从而提升应用性能。以下是关于 keep-alive 的详细总结。 1. …

Debezium系列之:Debezium3版本增量快照和只读增量快照应用的变化

Debezium系列之:Debezium3版本增量快照和只读增量快照应用的变化 一、需求背景二、基于数据库信号表使用增量快照案例三、基于Kafka信号Topic使用增量快照案例四、只读增量快照案例五、增量快照技术总结增量快照相关知识请阅读博主下面系列文章: Debezium系列之:实现增量快照…

YOLO即插即用---PConv

Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks 论文地址&#xff1a; 1. 论文解决的问题 2. 解决问题的方法 3. PConv 的适用范围 4. PConv 在目标检测中的应用 5. 评估方法 6. 潜在挑战 7. 未来研究方向 8.即插即用代码 论文地址&#xff1a; …

【JavaScript】V8,Nodejs 与浏览器

V8 V8 是一个 JavaScript engine&#xff0c;负责编译并执行 JavaScript 源代码&#xff0c;处理对象的内存分配&#xff0c;并对不再需要的对象进行垃圾收集。 V8 包含两个主要组件&#xff1a; Memory Heap&#xff1a;负责存储分配。 Call Stack&#xff1a;代码执行时&am…

RoCE与IB对比分析(一):协议栈层级篇

在 AI 算力建设中&#xff0c; RDMA 技术是支持高吞吐、低延迟网络通信的关键。目前&#xff0c;RDMA技术主要通过两种方案实现&#xff1a;Infiniband和RoCE&#xff08;基于RDMA的以太网技术&#xff0c;以下简称为RoCE&#xff09;。 RoCE与IB网络架构概述 RoCE和InfiniBa…

AI - 使用LangChain请求LLM结构化生成内容

AI - 使用LangChain请求LLM结构化生成内容 基于深度学习的大型语言模型&#xff08;LLM&#xff09;不仅可以生成文本&#xff0c;还可以帮助我们完成许多复杂任务&#xff0c;如自动化客服、内容创作和数据分析。然而&#xff0c;如何从这些模型中结构化地获取输出&#xff0c…

lsblk 命令学习

一、命令介绍 lsblk(list block devices) 是一个用于列出块设备的命令&#xff0c;它提供了关于系统中所有块设备的详细信息。块设备包括硬盘、分区、磁盘镜像文件等。lsblk 命令非常有用&#xff0c;特别是在需要查看和管理存储设备时。 $ lsblk NAME MAJ:MIN RM SIZE RO…

Linux基础-常用操作命令详讲

Linux基础-常用操作命令详讲 一、openssl加密简单介绍 1. 生成加密的密码散列&#xff08;password hash&#xff09;​编辑 1.1 常见的选项总结表 1.2 加密参数详解 2. 自签名证书 3. 证书转换 二、文件管理 1. 创建空文件 ​编辑 2. 删除文件 4. 新建目录 ​编辑…

Windows、Linux系统上进行CPU和内存压力测试

CPU和内存压力测试 1. Linux环境 Linux环境下&#xff0c;我们可以用 stress 工具进行内存、CPU等的压力测试。 【1】. stress工具说明 [kalamikysrv1 ~]$ stress --help stress imposes certain types of compute stress on your systemUsage: stress [OPTION [ARG]] ...-…

windows C#-析构元组和其他类型(下)

用户定义类型的扩展方法 如果没有创建类、结构或接口&#xff0c;仍可通过实现一个或多个 Deconstruct 扩展方法来析构该类型的对象&#xff0c;以返回所需值。 以下示例为 System.Reflection.PropertyInfo 类定义了两个 Deconstruct 扩展方法。 第一个方法返回一组值&#x…

Linux 经典面试八股文

快速鉴别十个题 1&#xff0c;你如何描述Linux文件系统的结构&#xff1f; 答案应包括对/, /etc, /var, /home, /bin, /lib, /usr, 和 /tmp等常见目录的功能和用途的描述。 2&#xff0c;在Linux中如何查看和终止正在运行的进程&#xff1f; 期望的答案应涵盖ps, top, htop, …

香港服务器网络延迟的测量指标包括哪些?

网络延迟是影响香港服务器性能和用户体验的关键因素。网络延迟是指数据包从源头传输到目的地所需的时间。延迟的产生可能受到多种因素的影响&#xff0c;包括网络拥塞、传输媒介、路由器处理时间等。理解延迟的不同测量指标是评估和优化网络性能的重要基础。 主要测量指标&…

各种网络设备的工作原理

网络设备的工作原理涉及多种设备&#xff0c;包括路由器、交换机、防火墙等&#xff0c;它们各自承担着不同的功能。以下是对这些设备工作原理的详细解释&#xff1a; 一、路由器路由器是互联网通信中的关键设备&#xff0c;它负责在不同网络之间传输数据包。功能&#xff1a;路…

GEE 使用 JavaScript 中的 API 自动删除文件夹内的所有资产

目录 简介 函数 ee.data.listAssets(parent, params, callback) Arguments: Returns: api.ListAssetsResponse ee.data.deleteAsset(assetId, callback) Arguments: forEach(outputNames) Arguments: Returns: Reducer 代码 简介 使用 JavaScript 中的 API 自动删除…

JVM知识点大全(未完...)

JVM运行时数据区域 堆 堆是Java虚拟机中用于存储对象的主要区域&#xff0c;包括字符串常量池。绝大多数对象都是在堆中创建的&#xff08;少部分对象可能会在栈上分配&#xff09;。为了更好地进行垃圾回收&#xff0c;堆被划分为年轻代和老年代两部分。年轻代又被进一步分为E…

九宫格按键输入

题目描述 九宫格按键输入&#xff0c;有英文和数字两个模式&#xff0c;默认是数字模式&#xff0c;数字模式直接输出数字&#xff0c;英文模式连续按同一个按键会依次出现这个按键上的字母&#xff0c;如果输入""或者其他字符&#xff0c;则循环中断&#xff0c;输…

EPSON机械手与第三方相机的校准功能设计By python

EPSON机械手与第三方相机的校准功能设计By python 使用Python来实现EPSON机械手与第三方相机的校准功能是一个复杂但可行的任务。这通常涉及以下几个步骤:硬件接口通信、图像处理、标定算法实现和控制逻辑编写。 1. 环境准备 首先,库 pip install numpy opencv-python pyse…

ZISUOJ 2024算法基础公选课练习一(1)

前言、 又是一年算法公选课&#xff0c;与去年不同的是今年学了一些纯C&#xff08;而不是带类的C&#xff09; 一、我的C模板 1.1 模板1 #include <bits/stdc.h> using i64 long long;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);return 0; } 1…

基于STM32的八位数码管显示Proteus仿真设计

基于STM32的八位数码管显示Proteus仿真设计 1.主要功能2.仿真设计3. 程序设计4. 设计报告5. 资料清单&下载链接 基于STM32的八位数码管显示Proteus仿真设计(仿真程序设计报告讲解视频&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;…

【机器学习】Lesson 4 - 朴素贝叶斯(NB)文本分类

目录 背景 一、适用数据集 1. 数据集选择 1.1 适用领域 1.2 数据集维度&#xff08;特征数&#xff09; 1.3 数据行数 2. 本文数据集介绍 2.1 数据集特征 2.2 数据格式 3. 数据集下载 二、算法原理 1. 朴素贝叶斯定理 2. 算法逻辑 3. 运行步骤 4. 更多延申模型 …