性能优化--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 模型…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
