性能优化--CPU微架构
一 指令集架构
Intel X86, ARM v8, RISC-V 是当今广泛使用的指令架构的实例。
大多数现代架构可以归类为基于通用寄存器的加载和存储型架构,在这种架构下,操作数倍明确指定,只能使用夹在和存储指令访问内存。除提供基本的功能之外,广泛部署的架构还在集训增强其ISA 以支持新的计算方式。包括增强的向量处理指令(例如Intel AVX2, AVX512 ARM SVE)和矩阵指令。使用这些高级指令的软件往往在性能上有几个数量级的提升。
二 指令流水线
流水线是加快CPU速度的基础性技术,指令可以重叠执行。
指令执行的过程1 取指令,2 译码 3 执行 4 访问内存 5 回写。
在第一个时钟周期,指令x进入流水线的取指IF阶段。在第二个时钟周期,指令x进入译码ID阶段,同时程序的下一条指令进入取指IF阶段,以此类推。当整个流水线满载时,图7中第5个时钟周期所示,CPU的所有流水线阶段都忙于处理不同的指令,如果没有流水线的话,指令x + 1就需要等到指令x执行完毕才能开始执行。
流水线机器中每条指令的执行时间 = 非流水线机器中每条指令执行的执行时间/ 流水线阶段数。
在现代CPU中所有类别的冒险都是由硬件处理的。
结构冒险
由资源冲突而导致,在很大程度上,可以通过复制硬件资源 如使用多端口寄存器或者存储器 来消除。然而,要消除所有这些冒险,在硅面积和功耗方面成本可能会变得非常高昂。
数据冒险
写后读Read after write. 冒险要求相关的读取操作在写入操作后执行。当指令x + 1 在上一条指令x写入某个位置之前读取同一位置时,就会发生这种冒险,从而导致读取错误的值。CPU通过实现从流水线后期阶段到早期阶段的数据转发来减轻与RAW冒险相关的损失,这个想法是,在指令x完全完成之前,指令x的结果可以转发到指令x+1我们看一下例子。
R1 = R0 ADD 1
R2 = R1 ADD 2
高速缓存
m路组关联告诉缓存中的每个缓存块都有一个与其关联的地址标签。此外,该标签还包含诸如标记数据有效与否的有效位之类的状态位。标签还可以包含其他位,以指示访问信息,共享信息等,这些内容将在后面的章节中描述。
图11展示了如何使用流水线生成的地址来查找高速缓存。最低顺序地址位定义了给定块内的偏移量,即块偏移量位(32字节缓存行需5位。64字节缓存行需要6位)。 组则是基于上述公式使用索引位来选择,一旦组被选定,就可以使用标签位与该组中的所有标签进行比较。如果其中一个标签与传入请求的标签匹配并且设置了有效位,则缓存命中。与该块条目关联的数据。
块地址
标签,索引 块偏移量。
缓存未命中
典型的替换算法是最近最少使用(Least Recently Used, LRU)策略,即最近访问次数最少的缓存块被释放,为未命中地址腾出缓冲空间,另一种可选算法则随机的选择一个缓存块作为牺牲对象。大多数CPU在硬件层定义这些功能。
管理写操作
CPU的设计使用两种基本机制来处理高速缓存中的缓存命中写入操作:
在写直达(Write-Through)高速缓存中,命中的数据同时写入缓存块的层次结构中较低的层级。
在回写(Write Back)高速缓存中,命中的数据只写入缓存。
在写入未命中时分配Write-Allocate 或者读取Fetch高速缓存中,未命中位置的数据从层次结构中较低层级家在到高速缓存,随后写入命中情况一样处理剩余写入操作。
假如高速缓存使用非写分配(no-write-allocate)策略,写入未命中的事物直接被发送到层次结构中所有较低层级,并且缓存块不会被夹在到高速缓冲中。
平均访问时延 = 命中花费的时间 + 未命中比例 x 未命中花费的时间。
硬件和软件预取技术
减少缓存未命中以及后续停顿的方法之一,就是先于流水线需要将指令和数据预取到高速缓冲区的不同层级。prefetch指令。
主存
就是常说的内存,大多数CPU都支持的主流DRAM技术是DDR,DRAM技术。历史上,DRAM带宽每一代都得到了提升,而延迟保持不变,甚至更高。表2展示了最新三代DDR技术的最高数据速率对应的延迟,数据速率以每秒百万传输次数(10^6)的单位度量。
DDR3 2133 10.3ns
DDR4 3200 12.5ns
DDR5 6400 14
虚拟内存
虚拟地址包含两部分,
虚拟页编号 页偏移量
页表 物理地址 主存
单指令多数据处理器
simd 在SIMD处理器中,单条指令通常在单个时钟周期内使用许多独立的功能单元对多个数据元素进行操作。向量和矩阵的科学计算都非常适合SIMD架构,因为向量或者矩阵的每个元素都需要使用相同指令进行处理。
相关文章:
性能优化--CPU微架构
一 指令集架构 Intel X86, ARM v8, RISC-V 是当今广泛使用的指令架构的实例。 大多数现代架构可以归类为基于通用寄存器的加载和存储型架构,在这种架构下,操作数倍明确指定,只能使用夹在和存储指令访问内存。除提供基本的功能之外,…...
在 Sanic 框架中实现高效内存缓存的多种方法
在使用 Sanic 框架开发 Web 应用时,我们可以通过内存缓存来提升应用的性能,减少对数据库或其他外部服务的频繁请求。下面提供一些在 Sanic 中实现内存缓存的基本方法。 使用 Python 内置的 functools.lru_cache 如果你的缓存需求比较简单,且…...
Mac 环境变量配置基础教程
MacOS 下一般配置有多个 Shell,如 Bash、ZSH 等,不同的 Shell 其创建 Terminal 时使用的环境变量配置文件也不尽相同,但一般都会读取并执行脚本文件 /etc/profile 来加载系统级环境变量,而用户级别环境变量,一般都会在…...
Qt如何屏蔽工具栏(QToolBar)自动折叠功能
最近发现Qt上工具栏一行放不下的时候,会自动折叠起来。当用户点击展开功能的小三角按钮时,工具栏会展开成多行。这个功能本身没什么问题,但是当工具栏展开的时候,鼠标光标一旦不小心移动到了工具栏外面,这时候…...
【数据分享】中国统计摘要(1978-2024)
数据介绍 《中国统计摘要(1978 - 2024)》犹如一部浓缩的历史巨著,承载着中国几十年来的发展轨迹与辉煌成就。它是由国家统计局精心编纂的重要资料,为我们全方位地展现了中国在经济、社会、民生等各个领域的深刻变革。 这本统计摘…...
unity运行状态下移动、旋转、缩放控制模型
demo地址:https://download.csdn.net/download/elineSea/90017272 unity2021以上版本用下面的插件 https://download.csdn.net/download/elineSea/90017305...
《 C++ 点滴漫谈 一 》C++ 传奇:起源、演化与发展
摘要 C 是一门兼具高效性与灵活性的编程语言,自上世纪 80 年代诞生以来,已经深刻影响了计算机科学与技术的发展。从 Bjarne Stroustrup 的初步构想到如今遍布各大领域,C 经历了语言规范的不断完善与功能的持续扩展。本文详细回顾了 C 的起源…...
Github客户端工具github-desktop使用教程
文章目录 1.客户端工具的介绍2.客户端工具使用感受3.仓库的创建4.初步尝试5.本地文件和仓库路径5.1原理说明5.2修改文件5.3版本号的说明5.4结合码云解释5.5版本号的查找 6.分支管理6.1分支的引入6.2分支合并6.3创建测试仓库6.4创建测试分支6.5合并分支6.6合并效果查看6.7分支冲…...
自然语言处理:第六十三章 阿里Qwen2 2.5系列
本人项目地址大全:Victor94-king/NLP__ManVictor: CSDN of ManVictor 项目地址: QwenLM/Qwen2.5: Qwen2.5 is the large language model series developed by Qwen team, Alibaba Cloud. 官网地址: 你好,Qwen2 | Qwen & Qwen2.5: 基础模型大派对&a…...
springboot中设计基于Redisson的分布式锁注解
如何使用AOP设计一个分布式锁注解? 1、在pom.xml中配置依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.3.26</version></dependency><dependenc…...
C++初阶学习第十一弹——list的用法和模拟实现
目录 一、list的使用 二.list的模拟实现 三.总结 一、list的使用 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。 常见的list的函数的使用 std::list<int> It {1,…...
共享单车管理系统项目学习实战
前言 Spring Boot Vue前后端分离 前端:Vue(CDN) Element axios(前后端交互) BaiDuMap ECharts(图表展示) 后端:Spring Boot Spring MVC(Web) MyBatis Plus(数据库) 数据库:MySQL 验证码请求...
详细解读TISAX汽车信息安全评估
TISAX汽车信息安全评估是一个针对汽车行业的信息安全评估和交换机制,以下是对其的详细解读: 一、背景与目的 TISAX是在德国汽车工业协会(VDA)的支持下开发的,旨在确保跨公司边界的汽车行业信息安全评估的认可度&…...
gitlab cicd搭建及使用笔记(二)
cicd之gitlab-runner使用要点 官方链接:https://docs.gitlab.com/runner/ 附历史文章链接 https://blog.csdn.net/qq_42936727/article/details/143624523?spm1001.2014.3001.5501 gitlab-runner常用命令及解释 gitlab-runner verify 容器内,检查注…...
鸿蒙实战:页面跳转传参
文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙项目2.2 编写首页代码2.3 新建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 本次实战,学习如何在HarmonyOS应用中实现页面间参数传递。首先创建项目,编写首页代码,实现按钮跳转至第二个页面并…...
Spring Security SecurityContextHolder(安全上下文信息)
在本篇博客中,我们将讨论 Spring Security 的 SecurityContextHolder 组件,包括其实现方式、关键特性,并通过实际示例进行说明。 理解 SecurityContextHolder SecurityContextHolder 是 Spring Security 存储当前安全上下文详细信息的地方。…...
蓝队技能-应急响应篇日志自动采集日志自动查看日志自动化分析Web安全内网攻防工具项目
知识点: 1、应急响应-系统日志收集-项目工具 2、应急响应-系统日志查看-项目工具 3、应急响应-日志自动分析-项目工具 演示案例-蓝队技能-工具项目-自动日志采集&自动日志查看&自动日志分析 系统日志自动采集-观星应急工具(Windows系统日志) SglabIr_Co…...
Python JSON 数据解析教程:从基础到高级
Python JSON 数据解析教程:从基础到高级 引言 在现代编程中,JSON(JavaScript Object Notation)已成为数据交换的标准格式。它以易于阅读和编写的文本格式存储和传输数据,广泛应用于Web API和配置文件中。Python提供了…...
25.UE5时间膨胀,慢动作,切换地图,刷BOSS
2-27 时间膨胀、慢动作、切换地图、刷BOSS_哔哩哔哩_bilibili 目录 1.刷新BOSS逻辑 2.时间膨胀实现慢动作 3.胜利画面,下一关 3.1胜利画面UI 3.2第一关、第二关游戏模式 3.3下一关按钮事件的绑定 1.刷新BOSS逻辑 实现当场上的怪物都死亡后,进行刷…...
Three.js 相机控制器Controls
在 3D 场景中,摄像机的控制尤为重要,因为它决定了用户如何观察和与场景互动。Three.js 提供了多种相机控制器,最常用的有 OrbitControls、TrackballControls、FlyControls 和 FirstPersonControls。OrbitControls 适合用于查看和检查 3D 模型…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
