[学习笔记]《CSAPP》深入理解计算机系统 - Chapter 4 处理器体系结构Chapter 5 优化程序性能
总结一些第四章和第五章的一些关键信息
- Chapter 4 处理器体系结构
- 将处理组织成阶段
- Chapter 5 优化程序性能
Chapter 4 处理器体系结构
在硬件中,寄存器直接将它的输入和输出线连接到电路的其他盆。
在机器级变成中,寄存器代表的是 CPU 中为数不多的可寻址的字,这里的地址是寄存器的 ID。这些字通常都存在寄存器文件中,虽然我们会看到硬件有时
可以直接将一个字从一个指令传到另一个指令,以避免先写寄存器文件再读出来的延迟。
-
寄存器(
Register):
寄存器是CPU内部的小型、快速的存储单元。
它们用于存储指令、数据、地址等信息,以便快速访问和处理。
寄存器通常用于临时存储操作数、中间计算结果、地址等。
寄存器可以被看作是CPU内部的“工作区”,用于执行算术和逻辑运算。 -
寄存器文件(
Register File):
寄存器文件是一组寄存器的集合,它们被组织在一起,形成一个存储结构。
寄存器文件通常包含多个寄存器,每个寄存器都有一个唯一的标识符或编号。
寄存器文件允许CPU通过寄存器的编号来访问和操作这些寄存器。
寄存器文件是CPU内部的一个物理结构,它实现了寄存器的物理存储和访问。
简单来说,寄存器是单个的存储单元,而寄存器文件是这些寄存器的集合。寄存器文件提供了一个结构化的方式来管理和访问多个寄存器。在CPU的设计中,寄存器文件是实现寄存器存储和访问的关键组件。
将处理组织成阶段
- 取指(
fetch): 取指阶段从内存读取指令字节,地址为程序计数器(PC)的值。 - 译码(
decode): 译码阶段从寄存器文件读入最多两个操作数,得到值valA和valB。通常,它读入指令rA和rB字段指明的寄存器,不过有些指令是读寄存器%rsp的。 - 执行(
execute): 在执行阶段,算数/逻辑单元(ALU)要么执行指令指明的操作,计算内存引用的有效地址,要么增加或减少栈指针,这个阶段会检验条件和传送条件,如果条件成立,则更新目标寄存器。 - 访存(
memory): 访存阶段可以将数据写入内存,或者从内存读出数据。 - 写回(
write back): 写回阶段最多可以写两个结果到寄存器文件 - 更新
PC(PC update): 将PC设置成下一条指令的地址。
在计算机体系结构中,CPI(Cycles Per Instruction)是一个重要的性能指标,它表示执行一条指令所需的时钟周期数。CPI是衡量计算机运算速度的一个指标,它与程序的编写、ISA指令集和计算机的架构有关。CPI
的值越低,意味着每条指令平均需要的时钟周期数越少,从而计算机的性能越高效。
Chapter 5 优化程序性能
1 g 00 0 m 00 0 k 000 = = 1 × 1 0 9 1_{g}000_{m}000_{k}000 == 1 \times 10^9 1g000m000k000==1×109
-
当表明一个系统有
4GHz处理器,这表示处理器时钟运行频率为 4 × 1 0 9 4 \times 10^{9} 4×109个周期.每个始终周期的时间是始终频率的倒数。通常以纳秒(nanosecond,1纳秒的 1 0 − 9 10^{-9} 10−9秒)或皮秒(picosecond,1皮秒等于 1 0 − 12 10^{-12} 10−12秒)为单位.
一个4GHz的时钟,其周期为0.25纳秒或250皮秒. -
在实际的处理器中,是同时对多条指令进行求值的,这个现象被称为指令级并行.但是存在两个下界描述了程序的最大性能
- 延迟界限:在下一条指令开始之前,这条指令必须结束
- 吞吐量界限: 处理器功能单元的原始计算能力。这个界限是程序性能的终极限制
-
SIMD是"Single Instruction, Multiple Data"的缩写,最新版本为AVX (advanced vector extension),指用单条指令对整个向量数据进行操作。具备特殊的寄存器,比如长为512位长64字节的寄存器,每个寄存器都可以存放8个64位数,16个32位数。(一般长4个或8个字节,分别对应32位和64位机器) -
在
CPU架构中,CPE(Cycles Per Element)是一个衡量处理器性能的指标,它表示处理器执行特定计算任务时,每个数据元素所需的平均时钟周期数。CPE值越低,意味着处理器处理数据的效率越高。CPE的计算公式为:CPE = Total Cycles / Number of Elements,其中Total Cycles是执行任务所需的总时钟周期数,Number of Elements是处理的数据元素数量。
CPE值通常不会低于0.5,这主要是因为现代处理器的设计和工作方式。在执行计算任务时,即使是最简单的操作,如加载数据、执行算术操作或存储结果,也会涉及到多个时钟周期。例如,一个简单的浮点加法可能就需要多个周期来完成,包括取指令、执行指令、访存等步骤。此外,现代处理器的流水线和超标量设计允许在一个时钟周期内开始多条指令的执行,但这并不意味着每个元素的处理可以在一个时钟周期内完成。
相关文章:
[学习笔记]《CSAPP》深入理解计算机系统 - Chapter 4 处理器体系结构Chapter 5 优化程序性能
总结一些第四章和第五章的一些关键信息 Chapter 4 处理器体系结构将处理组织成阶段 Chapter 5 优化程序性能 Chapter 4 处理器体系结构 在硬件中,寄存器直接将它的输入和输出线连接到电路的其他盆。 在机器级变成中,寄存器代表的是 CPU 中为数不多的可寻…...
案例分享|我是这样转型做数据产品经理的?
本文为才聚学员投稿的原创作品,现在才聚正面向专业项目管理者征集“项目管理实战案例”原创文章,被采纳即可获得丰厚稿酬,欢迎大家关注公众号踊跃投稿。 如您有意向投稿,可将稿件投递给我们。 故事介绍 三段故事,讲…...
ffmpeg面向对象-rtsp拉流相关对象
目录 1.AVFormatContext和FFFormatContext类。1.1 概述1.2 构造函数1.3 oopc的继承实现 2. AVInputFormat 类。2.1 多态的实现 3.所用设计模式3.1模板模式3.2 工厂模式? 3.3 rtsp拉流建链 4.this指针5.小结6.rtsp拉流流程 1.AVFormatContext和FFFormatContext类。 …...
feign client发送Post请求,发送对象参数,服务端接收不到正确参数报错排查
记一次feignclient发送请求服务端接收不到正确参数排查 服务端代码: Operation(summary "Create team")PostMapping("post")RequiresPermissions("team:add")public RestResponse addTeam(Valid Team team) {this.teamService.crea…...
Hadoop林子雨安装
文章目录 hadoop安装教程注意事项: hadoop安装教程 链接: 安装教程 注意事项: 可以先安装ububtu增强功能,完成共享粘贴板和共享文件夹 ubuntu增强功能 2.这里就可以使用共享文件夹 或者在虚拟机浏览器,用 微信文件传输助手 传文…...
Springboot项目总结
1.为了调用写在其他包里面的类的方法 但是不使用new来实现调用这个类里面的方法,这个时候我们就需要将这个类注入到ioc容器里面,通过ioc容器来实现自动生成一个对象。 对ioc容器的理解:自动将一个对象实现new. 考察了and 和 or组合使用&…...
目标检测从入门到精通——数据增强方法总结
以下是YOLO系列算法(从YOLOv1到YOLOv7)中使用的数据增强方法的总结,包括每种方法的数学原理、相关论文以及对应的YOLO版本。 YOLO系列数据增强方法总结 数据增强方法数学原理相关论文图像缩放将输入图像缩放到固定大小(如448x44…...
SQL server 的异常处理 一个SQL异常 如何不影响其他SQL执行
在 SQL Server 中,存储过程中的 SQL 语句是顺序执行的。如果其中任何一个 SQL 语句遇到了错误或异常,那么默认情况下,这个错误会导致整个事务(如果有的话)回滚,并且存储过程会立即停止执行,不会…...
STM32——看门狗通俗解析
笔者在学习看门狗的视频后,对看门狗仍然是一知半解,后面在实际应用中发现它是一个很好用的检测或者调试工具。所以总结一下笔者作为初学小白对看门狗的理解。 主函数初始化阶段、循环阶段和复位 众所周知,程序的运行一般是这样的࿱…...
点亮第一盏LED灯 5): stm32CubeMX生成Keil代码
嵌入式入门,继续点亮第一盏LED灯,前面文章已经配置了GPIO引脚和时钟,那么基本上stm32CubeMX的配置就完成了,还有一点就是可以对PC13这个引脚起个别名, 这里起的别名是 LED_PC13,还有注意地方就是GPIO mode…...
ollama语言大模型部署使用
ollama语言大模型部署使用 前言一、下载安装maxkb1、下载解压赋权2、安装 二、安装ollamadocker运行 三、无需获取api_keymaxkb安装ollama模型对,就是这,你选好基础模型后,只需要给他地址,添加完成后自行调用ollama安装你选择好的…...
redis 基本数据类型—string类型
一、介绍 Redis 中的字符串,直接就是按照二进制数据的方式存储的,不会做任何的编码转换。 Redis对于 string 类型,限制了大小最大是512M 二、命令 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖&#…...
Git 使用教程:从入门到精通
Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 创建,用于有效、高速地处理从小到大的项目版本管理。本教程将带你从 Git 的安装开始,逐步学习到如何使用 Git 进行日常的版本控制操作。 安装 Git Windows 访问 Git 官方网站 下载 …...
ES查询的一些优化方式
ES查询的一些优化方式 filter和query Query会计算得分,filte不是, 整体上query会更耗时 字段方式: KEYWORD 和 text, Text检索的方式往往会占用更多性能,它往往需要伴随着模糊匹配和分词 分页的大小 From 和size的大小合理设置…...
计算左边(比自己小的元素)的最长距离
前言:一般做的题目都是使用单调栈来求出距离这个点最近的那个比这个数大或小的元素,但是如果是需要找到最远的那个元素呢?我们可以用到类似逆序对的思路,我们先进行排序从小到大,接着我们先处理左边,每次维…...
【C++算法】二分查找
二分查找 题目链接 二分查找https://leetcode.cn/problems/binary-search/ 算法原理 代码步骤 代码展示 class Solution { public:int search(vector<int>& nums, int target) {int left 0, right nums.size() - 1;while(left < right){// 防止溢出int mid …...
红日靶场通关
初始准备 首先是网络配置,看教程来的,我配置完的效果如下 windows7:(内:192.168.52.143 / 外:192.168.154.136) windows2003:(内:192.168.52.141)windows2008:(内:192.…...
用Python爬虫制作一个简易翻译器
我们通常是通过requestsBS4的方法来获取网页内容,这种方法导入模块较多,速度相对有点儿慢,此时我们可以用requests的post方法向指定服务器发送请求,获取数据后格式化为json,然后获取相关键值。这种方法用到了requests和…...
Shader Graph Create Node
一、Artistic 1、Adjustment 1)、Channel Mixer(通道混合) 根据权重对每个通道进行混合。 Contrast(对比度) 可调整对比度 调整对比度可以改变图像的鲜明度和层次感。增加对比度会使图像中的明暗差异更加显著,使图像看起来更加清晰、明亮;减少对比…...
共模干扰的形成和滤除
1、共模就是共同对地的干扰: 如图,我们可以看到共模的原理图。UPQ就是共模电压,ICM1 ICM2 就是共模电流。 ICM1 ICM2 大小不一定相同,方向相同。 2、共模信号和差模信号的区别: 通常电源线有三根线:火线L、…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
