arm64高速缓存基础知识

高速缓存的替换策略

  1. 随机法:随机地确定替换的高速缓存行,由一个随机数产生器产生随机数来确认替换行

  2. FIFO法:选择最先调入的高速缓存行进行替换

  3. LRU法:最少使用的行优先替换。

高速缓存的共享属性

  1. 内部共享的高速缓存通常指的是CPU内部集成的高速缓存,它们最靠近CPU内核

  2. 外部共享的高速缓存指的是通过系统总线扩展的高速缓存

  3. 高速缓存可以分成4个共享域------不可共享域、内部共享域、外部共享域以及系统共享域

  • 不可共享域:只能被一个处理器访问,其他处理器不能访问

  • 内部共享:这个区域里的处理器可以访问

  • 外部共享:这个区域里的处理器以及具有访问内存能力的硬件单元可以访问

  • 系统共享:所有访问内存的单元都可以访问和共享这个区域

4. 共享域的目的:指定其中所有可以访问内存的硬件单元实现缓存一致性的范围,主要用于高速缓存维护指令以及内存屏障指令

5. 一个处理器系统中,除了处理器,还有其他的可以访问内存的硬件单元,这些硬件单元(如DMA设备,GPU等)通常具有访问内存总线的能力。

6. PoU和PoC的区别

  • 全局缓存一致性角度(PoC):系统中所有可以发起内存访问的硬件单元(如处理器、DMA设备、GPU等)都能保证观察到的某一个地址上的数据是一致的或者是相同的副本,通常PoC表示站在系统的角度来看高速缓存的一致性问题

  • 处理器缓存一致性角度(PoU):表示站在处理器的角度来看高速缓存的一致性问题,例如看到的指令高速缓存、数据高速缓存、TLB、MMU等都是同一份数据的副本,数据是一致的,PoU有两个观察点。

  • 站在处理器角度来看,也就是针对单个处理器

  • 站在内部共享的属性的范围来看(同属于内部共享属性的一组处理器)

高速缓存的维护指令

  1. 高速缓存的管理主要有如下3种情况

  • 失效(invalida)操作:使整个高速缓存或者某个高速缓存行失效。之后,丢弃高速缓存上的数据

  • 清理(clean)操作:把标记为脏的整个高速缓存或者某个高速缓存行写回下一级高速缓存或者内存中,然后清理高速缓存中的脏位,使得高速缓存行的内容与下一级高速缓存或者内存中的数据保存一致

  • 清零(zero)操作:在某些情况下,用于对高速缓存进行预取和加速,例如:当程序需要使用较大的临时内存时,如果在初始化阶段对这块内存进行清0操作,高速缓存控制器就会主动把这些零数据写入高速缓存行中,如果程序主动使用高速缓存的清零操作,那么将大大的减少系统内部总线的带宽

2. ARM64还提供一种混合的操作,即清理并使其失效,会先执行清理,然后再使高速缓存行失效。

3. 对于高速缓存的操作可以指定如下不同的范围

  • 整个高速缓存

  • 某个虚拟地址

  • 特定的高速缓存行或组或路。

4. ARMV8指令

数据缓存指令: DC <operation>, <Xt>

指令缓存指令: IC <operation>, <Xt>

  • 操作码可以分为4部分

  • 功能:包括高速缓存指令的功能,例如清理等

  • 类型:用来指定指令操作的类型,例如,VA是针对单个虚拟地址的操作,SW表示针对高速缓存中的路和组进行操作,ALL表示针对整个高速缓存

  • 观察点:表示站在哪个角度来对高速缓存进行操作,U表示站在处理器一致性角度,C表示站在全局缓存一致性角度

  • 共享:IS表示内部共享属性

例: ic ialluis 使内部共享域中的所有处理器的指令高速缓存都失效

··········································ARMV8体系结构的高速缓存指令

指令类型

辅助操作符

描述

·····DC

cisw

清理并使指定的组和路的高速缓存失效

civac

站在PoC,清理并使指定的虚拟地址对应的高速缓存失效

csw

清理指定的组或路的高速缓存

cvac

站在PoC,清理指定的虚拟地址对应的高速缓存

cvau

站在PoU,清理指定的虚拟地址对应的高速缓存

isw

使指定的路或组的高速缓存失效

ivac

站在PoC,使指定的虚拟地址中对应的高速缓存失效

zva

把虚拟地址中的高速缓存清零

·····IC

ialluis

站在PoU,使所有的指令高速缓存失效,这些指令高速缓存是内存共享的

iallu

站在PoU,使所有的指令高速缓存失效

ivau

站在PoU,使指定的虚拟地址对应的指令高速缓存失效

  1. CLIDR_EL1

用来标识高速缓存的类型以及系统最多支持几级高速缓存

添加图片注释,不超过 140 字(可选)

  • Ctype<n>, bits [3(n-1)+2:3(n-1)], for n = 7 to 1,Cache Type字段,描述各个缓存等级的的类型。比如Ctype1字段,描述的是Level1缓存的类型。可以有以下值:

  • LoUIS:标识内部共享PoU的边界所在的高速缓存级别

  • LoC字段表示PoC的边界所在的高速缓存级别

  • LoUU字段表示单处理器PoU边界所在的高速缓存级别

  • ICB字段表示内部缓存边界,ICB字段的编码如下:

  • 0b001:L1是最高级别的内部共享的高速缓存

  • 0b010:L2是最高级别的内部共享的高速缓存

  • ….

  • 0b111:L7是最高级别的内部共享的高速缓存

2. CTR_EL0

记录了高速缓存的相关信息,例如高速缓存行的大小、高速缓存策略等

  • L1Ip, bits [15:14]:Level 1中的指令缓存(instruction cache)的缓存策略。指示了index和tag的生成方式。可能包含的值如下,其中,VIPT和PIPT较常使用:

0b00---表示通过VMID指定的高速缓存策略位物理索引物理标记(VPIPT)

0b01---表示通过ASID指定的高速缓存策略为虚拟索引虚拟标记 (AIVIVT)

0b10---Virtual Index, Physical Tag (VIPT) 虚拟索引物理标记

0b11---Physical Index, Physical Tag (PIPT)物理索引物理标记

  • DminLine字段表示数据高速缓存或者联合高速缓存的缓存行大小

  • ERG字段表示独占访问的最小单位,用于独占加载和存储指令

  • CWG字段表示高速缓存回写的最小单位,

  • IDC字段表示清理数据高速缓存时是否要求指令对数据的一致性

  • DIC字段表示无效指令高速缓存时是否要求数据与指令的一致性

  • TminLine字段表示缓冲行中标签的大小。

3. CSSELR_EL1

  • InD, bit [0]:选择的高速缓存类型

0b0 Data or unified cache.数据高速缓存或者联合高速缓存

0b1 Instruction cache. 指令高速缓存

  • Level, bits [3:1]:指定要查询的高速缓存的层次

  • TnD字段用来指定高速缓存标记的类型

0b0:表示数据、指令或者联合高速缓存

0b1:表示独立分配标记的高速缓存

5. CCSIDR_EL1

  • LineSize:(Log2(Number of bytes in cache line)) - 4,表示一个cache line的大小为多少个字节。它的值需要进行换算:如果LineSize = 0,2^(0+4) = 16,表明此时的cache line大小为16个字节。相反,如果cache line大小为64 bytes,此时LineSize = log2(64) - 4 = 6 - 4 = 2 =0x10。

  • Associativity:Number of ways in cache -1,如果Associativity = 3,则说明有4个way。

  • NumSets:(Number of sets in cache)-1,组的数量-1,也就是说该字段的数值加1,才是当前cache的set数量。

6. DCZID_EL0寄存器

这个寄存器用来指定清零(DC ZVA)的数据块大小

  • DZP: 0b0 Instructions are permitted. 0b1 Instructions are prohibited.

  • BS, bits [3:0] :Log2 of the block size in words. The maximum size supported is 2KB (value == 9)

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

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

相关文章

Flutter基本组件Text使用

Text是一个文本显示控件&#xff0c;用于在应用程序界面中显示单行或多行文本内容。 Text简单Demo import package:flutter/material.dart;class MyTextDemo extends StatelessWidget {const MyTextDemo({super.key});overrideWidget build(BuildContext context) {return Sca…

飞速了解Conda的作用和安装使用教程

当我们想要在github上克隆不同的项目下来运行时&#xff0c;会发现项目的语言环境或包的版本不同&#xff0c;出现版本冲突问题会导致程序无法运行、兼容性问题频出。我们常常需要管理多个项目&#xff0c;每个项目可能依赖于不同的包版本或编程语言环境。如果不加以管理&#…

agentuniverse快速开始和踩坑

https://github.com/alipay/agentUniverse/tree/mastergithub地址:https://github.com/alipay/agentUniverse/tree/master 老大看了演示demo也想跟着做个agent工具,但踩坑太多,含泪写下博客 前置环节 git clone https://github.com/alipay/agentUniverse.git conda create -n…

AndroidStudio清除重置Http Proxy代理的方式

问题背景 在国内做代码开发的都知道&#xff0c;在国际互联网我们存在看不见的墙&#xff0c;导致无法访问一些代码库和资源&#xff0c;所以在使用开发工具拉取第三方库的时候总会遇到无法连接或者连接超时的情况&#xff0c;所以就会使用一些安全的网络代理工具&#xff0c;辅…

【JavaSE】Java基本数据类型缓存池

new Integer(18) 、 Integer.valueOf(18) 、Integer.valueOf(300) 的区别 new Integer(18) &#xff1a;每次都会创建一个新对象Integer.valueOf(x)&#xff1a; x in [-128, 127]&#xff1a;使用缓存池中的对象x not in [-128, 127]&#xff1a;创建新对象 Integer缓存池大…

【Qt】事件分发器

事件分发器 概述 在 Qt 中&#xff0c;事件分发器(Event Dispatcher) 是⼀个核⼼概念&#xff0c;⽤于处理 GUI 应⽤程序中的事件。事件分发器负责将事件从⼀个对象传递到另⼀个对象&#xff0c;直到事件被处理或被取消。每个继承⾃ QObject类 或 QObject类 本⾝都可以在本类中…

《纳瓦尔宝典》的核心思想在于阐述如何通过智慧和策略实现财富自由和生活幸福

《纳瓦尔宝典》概况 图书概况 《纳瓦尔宝典》是2022年5月10日由中信出版社出版的一本书籍&#xff0c;作者是美国作家埃里克乔根森。该书通过收集和整理硅谷知名天使投资人纳瓦尔拉维坎特在推特、博客和播客等平台上的智慧箴言&#xff0c;形成了一本关于财富积累和幸福人生的…

如何在红米手机中恢复已删除的照片?(6 种方式可供选择)

凭借出色的相机和实惠的价格&#xff0c;小米红米系列已成为全球知名品牌。但是&#xff0c;最近有些人抱怨他们在 红米设备上丢失了许多珍贵的图片或视频&#xff0c;并希望弄清楚如何从小米手机恢复已删除的照片。好吧&#xff0c;在小米设备上恢复已删除的视频/照片并不难。…

AI预测福彩3D采取888=3策略+和值012路或胆码测试9月8日新模型预测第81弹

经过80期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;70多期一共只错了8次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大…

牛客周赛 Round 59(下)

逆序数 题目描述 登录—专业IT笔试面试备考平台_牛客网 运行代码 #include<bits/stdc.h> using namespace std; typedef long long ll; int main() {ll n,k;cin>>n>>k;ll sum(n*(n-1))/2;cout<<sum-k<<endl;return 0; } 代码思路 组合数的计…

手机到了外地ip地址就变了吗

手机到了外地IP地址就变了吗&#xff1f;随着智能手机的普及&#xff0c;人们越来越频繁地使用手机进行各种网络活动。然而&#xff0c;关于手机IP地址是否会随着地理位置的变化而改变&#xff0c;许多用户仍心存疑惑。本文将深入探讨这一问题&#xff0c;揭示IP地址变化的奥秘…

【C/C++】“秒懂”学C/C++不可错过的“经典编程题” — 日期类的经典运用 (含题链接)

“秒懂”学C/C不可错过的“经典编程题” — 日期类的经典运用 (含题链接&#xff09; 1. 计算日期到天数转换(1). 解题思路&#xff1a;(2). 代码实现&#xff1a; 2. 打印日期(1). 解题思路&#xff1a;(2). 代码实现&#xff1a; 3. 日期累加(1). 解题思路&#xff1a;(2). 代…

顶点照明渲染路径

1. 顶点照明渲染路径处理光照的方式 基本思想就是所有的光都按照逐顶点的方式进行计算的&#xff0c;在内置渲染管线中&#xff0c;它只会最多记录8个光源的数据&#xff0c;只会将光相关的数据填充到那些逐顶点相关的内置光源变量 顶点照明渲染路径仅仅是前向渲染路径的一个…

【数据结构】希尔排序(缩小增量排序)

目录 一、基本思想 1.1 引入希尔排序的原因 1.2 基本思想 二、思路分析 三、gap分组问题 四、代码实现 4.1 代码一&#xff08;升序&#xff09; 4.2 代码二&#xff08;升序&#xff09; 五、易错提醒 六、时间复杂度分析 七、排序小tips 一、基本思想 1.1 引入希尔…

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息&#xff0c;然后展示在页面上。 效果展示 首次发送需要…

【老课推荐】基于LangChain和知识图谱的大模型医疗问答机器人项目

在当今数据驱动和人工智能主导的时代&#xff0c;大模型和知识图谱的结合是一个重要的研究和应用方向。大模型实战课程通过48课时&#xff0c;分为六个主要章节&#xff0c;涵盖了从基本概念到高级应用的多方面内容。学员将通过本课程学习如何使用LangChain和OpenAI进行开发&am…

windows10-VMware17-Ubuntu-22.04-海康2K摄像头兼容问题,求解(已解决)

文章目录 1.webrtc camera测试2.ffmpeg 测试3.Ubuntu 自带相机4.解决办法 环境&#xff1a;windows10系统下&#xff0c;VMware的Ubuntu-22.04系统 问题&#xff1a;摄像头出现兼容问题&#xff0c;本来是想开发测试的&#xff0c;Ubuntu方便些。买了海康2K的USB摄像头&#xf…

自动驾驶ADAS算法--使用MATLBA和UE4生成测试视频

原文参考&#xff1a;金书世界 环境搭建参考&#xff1a;用MATLAB2020b和虚拟引擎&#xff08;Unreal Engine&#xff09;联合仿真输出AVM全景测试视频----Matlab环境搭建 matlab参考&#xff1a; https://ww2.mathworks.cn/help/driving/ug/simulate-a-simple-driving-sce…

【Transformer】Positional Encoding

文章目录 为什么需要位置编码&#xff1f;预备知识三角函数求和公式旋转矩阵逆时针旋转顺时针旋转旋转矩阵的性质 原始Transformer中的位置编码论文中的介绍具体计算过程为什么是线性变换&#xff1f; 大模型常用的旋转位置编码RoPE基本原理最简实现形式Llama3中的代码实现 两种…

智汇云舟受邀参加2024第四届国产水科学数值模型开发创新与技术应用研讨会,并成为“科技智水产业联盟”创始成员

在数字化浪潮的推动下&#xff0c;智慧水利作为国家战略的重要组成部分&#xff0c;正迎来前所未有的发展机遇。8月27-29日&#xff0c;由浙江贵仁信息科技股份有限公司主办、浙江省水利学会协办的“2024第四届国产水科学数值模型开发创新与技术应用研讨会”在杭州白马湖建国饭…