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,一经查实,立即删除!

相关文章

YOLO即插即用---PConv

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

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

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

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

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

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

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

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

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

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

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

九宫格按键输入

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

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. 更多延申模型 …

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述

第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求&#xff0c;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…

使用Vue3和Vue2进行开发的区别

使用Vue3和Vue2进行开发的区别 笔者虽然老早就是用vue3进行开发了&#xff0c;但是上次有人问道使用vue3进行开发跟使用vue2进行开发的区别有哪些这个问题的时候&#xff0c;回答的还是有些琐碎&#xff0c;干脆今天专门整理一下&#xff0c;做个记录。 一、再也不用set了 众所…

项目开发流程规范文档

项目开发流程规范文档 目标: 明确项目组中需求管理人员, 交互设计, 美工以及开发之间的工作输入输出产物. 明确各岗位职责. 以免造成开发, 产品经理以及项目经理之间理解不到位, 沟通成本过高,返工造成资源浪费. 所有环节产生的文档都可以作为项目交付的资源. 而不是事后再补文…

在docker里创建 bridge 网络联通不同容器

1.网络创建&#xff1a; docker network create --subnet192.168.1.0/24 --gateway192.168.1.1 uav_management 2.查看网络&#xff1a; docker network ls 3.给已经创建的容器分配ip: docker network connect --ip 192.168.1.10 uav_management 容器名/容器id 示例&#xf…

【极限编程(XP)】

极限编程&#xff08;XP&#xff09;简介 定义与核心价值观&#xff1a;极限编程&#xff08;Extreme Programming&#xff0c;XP&#xff09;是一种轻量级、敏捷的软件开发方法。它强调团队合作、客户参与、持续测试和快速反馈等价值观&#xff0c;旨在提高软件开发的效率和质…

低代码用户中心:简化开发,提升效率的新时代

随着数字化转型的加速&#xff0c;企业对于快速交付高质量应用的需求日益增长。在这个背景下&#xff0c;低代码开发平台应运而生&#xff0c;成为越来越多企业和开发者的首选工具。今天&#xff0c;我们将聚焦于低代码用户中心&#xff0c;探讨其如何帮助开发者简化流程、提升…

Docker在CentOS上的安装与配置

前言 随着云计算和微服务架构的兴起&#xff0c;Docker作为一种轻量级的容器技术&#xff0c;已经成为现代软件开发和运维中的重要工具。本文旨在为初学者提供一份详尽的指南&#xff0c;帮助他们在CentOS系统上安装和配置Docker及相关组件&#xff0c;如Docker Compose和私有…

Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化

官网文档地址&#xff1a;https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/ 使用版本&#xff1a;Redis7.4.1 什么是 ACL&#xff1f; ACL&#xff08;Access Control List&#xff09;&#xff0c;权限控制列表&#xff0c;是 Redis 提供的一种…

淘宝反爬虫机制的主要手段有哪些?

淘宝的反爬虫机制主要有以下手段&#xff1a; 一、用户身份识别与验证&#xff1a; User-Agent 识别&#xff1a;通过检测 HTTP 请求头中的 User-Agent 字段来判断请求是否来自合法的浏览器。正常用户使用不同浏览器访问时&#xff0c;User-Agent 会有所不同&#xff0c;而爬虫…