prfm命令初探
1. 前言
在查看一段neon代码时,发现有如下片段,为使用汇编进行数据预取操作。这是一个新的知识点,记录一下学习过程。
__asm__ volatile("prfm pldl2keep,[%0, #8192] \n""prfm pldl1keep,[%0, #1024] \n":"=r"(tmp_src):"0"(tmp_src):"cc", "memory");
2. GCC内联汇编
GCC中的内联汇编格式如下
__asm__ __volatile__(指令部: 输出部: 输入部: 副作用列表)
其中的知识点列出如下:
1)__asm__/asm是GCC中的一个关键字,用来声明一个内联汇编表达式。
2)__volatile__/volatile是GCC中的一个关键字,告诉编译器不允许对后面嵌入的代码进行优化。
3)指令部中带有%的数字如%0、%1等,表示需要使用寄存器的操作数
4)输出部:用于描述在指令部中可以修改的C语言变量和它的约束条件。一般以"="/"+"开头,"="表示操作数可写,"+"表示可读可写;然后是一个字母,表示对操作数类型的说明。
5)输入部:描述指令部中智能读取的C语言变量以及约束条件。输入部中的参数只有只读属性,所以不能使用"="/"+"进行修饰。
6)副作用列表:一般以“memory”结束。“cc”表示内嵌代码修改了状态寄存器的相关标志位;“memory”告诉编译器内嵌代码改变了内存状态
看一个例子,代码如下,实现将寄存器中的数据读取出来。
<arch/arm64/include/asm/irqflags.h>static inline unsigned long arch_local_irq_save(void)
{unsigned long flags;asm volatile("mrs %0, daif //读取PSTAT寄存器中的DAIF域到flags变量"msr daifset, #2" //关闭IRQ: "=r" (flags):: "memory");return flags;
}
输出部中%0对应"=r" (flags),“=”表示操作数具备可写属性,“r”表示使用一个通用寄存器;输入部为空;副作用列表表示代码改变了内存状态。
3. prfm指令
prfm是ARM中的一个汇编指令,用于执行预取操作,旨在减少未来的缓存缺失延迟。通过预先加载数据到缓存中,可以在后续访问这些数据时更快地获取它们,从而提高程序的整体性能。
1)命令基本形式
prfm命令的基本形式如下
prfm <type>, <address>
其中<type>表示预取类型,常见类型包括pld、pld1keep、pld2keep等;<address>表示要预取的数据所在的内存地址。
2)预取类型
- pld;将数据预取到最后一级缓存(L1或L2),数据块大小一般为64字节。
- pldl1keep;将数据预取到L1数据缓存,数据块大小一般为64字节。
- pldl2keep;将数据预取到L2数据缓存,数据块大小一般为64字节。
由于涉及到内存操作,有必要在执行预取之前确保地址有效,这也算是一种防御性编程。
4. 小结
再回到最上面的代码,其作用为将tmp_src为基地址偏移8192个字节处的数据加载到L2缓存,并将tmp_src为基地址偏移1024个字节处的数据加载到L1缓存。": "=r"(srcdata_p)":表示 srcdata_p 可以存储在任意类型的寄存器中,并且会被更新;:"0"(srcdata_p)":表示使用与输出约束相同的寄存器编号,即 srcdata_p。
5. 参考
https://zhuanlan.zhihu.com/p/465498325
https://www.cnblogs.com/FireLife-Cheng/p/18186919
相关文章:
prfm命令初探
1. 前言 在查看一段neon代码时,发现有如下片段,为使用汇编进行数据预取操作。这是一个新的知识点,记录一下学习过程。 __asm__ volatile("prfm pldl2keep,[%0, #8192] \n""prfm pldl1keep,[%0, #1024] \n":"r"…...
AI大模型需要学什么?怎么学?从零基础入门大模型(保姆级),从这开始出发!
一.初聊大模型 1.为什么要学习大模型? 在学习大模型之前,你不必担心自己缺乏相关知识或认为这太难。我坚信,只要你有学习的意愿并付出努力,你就能够掌握大模型,并能够用它们完成许多有意义的事情。在这个快速变化的时代…...
python自述3
Python 条件控制 if语句的一般形式如下所示: if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3 Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。 注意: 1、每个条件后面要使用冒号 :,表…...
Redis常见的数据结构
Redis底层的数据结构是Redis高效存储和操作数据的基础,Redis提供了五种基本的数据类型,每种类型在底层都有对应的数据结构来实现。这五种数据类型分别是:字符串(String)、哈希(Hash)、列表(List…...
批量插入insert到SQLServer数据库,BigDecimal精度丢失解决办法,不动代码,从驱动层面解决
概述 相信很多人都遇到过,使用sql server数据库,批量插入数据时,BigDecimal类型出现丢失精度的问题,网上也有很多人给出过解决方案,但一般都要修改应用代码,不推荐。 丢失精度的本质是官方的驱动有BUG造成…...
随手记:uniapp小程序登录方式和小程序使用验证码登录
小程序登录方式: 方式一:小程序授权登录 通过uni.login获取 临时登录凭证code,向后端换取token。 <u-button type"primary" shape"circle" click"login">登 录</u-button>login() {uni.login({p…...
【Hadoop|HDFS篇】DataNode概述
1. DataNode的工作机制 1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。 2)DataNode启动后向NameNod…...
Vue2 VueRouter学习笔记
VueRouter 官方文档 版本对应 vue2:3.x.x vue3:4.x.x 路由:访问路径与vue组件(页面)之间的映射关系 VueRouter:Vue官方提供的插件,本质上是一个 JavaScript 库,用于在 Vue.js 应用…...
3D培训大师,化工企业安全教育与应急演练的新助力
化工企业的生产安全培训,作为保障员工生命安全与企业稳定运营的基石,其重要性不言而喻。传统的培训方式内容僵化、形式单一缺乏互动、效果难以评估,越来越不适应化工企业的实际需求。因此,探索和应用更为高效、创新的培训工具&…...
斯坦福大学论文润色chat-gpt指令
Quick Prompts快速提示 To enhance text clarity-为了增强文本清晰度 As a non-native English speaker, kindly help me revise the following text for improved understand clarity. Please check for spelling and sentence structure errors and suggest alternatives.为…...
简单硬件在环搭建(ROS+Prescan+Carsim+simulink)
本文通过ROSPrescanCarsimsimulink搭建简单的硬件在环仿真测试平台。 系统架构如下: 在Windows中运行prescan场景仿真软件,在jetson Nano中运行ROS,硬件上两台电脑通过一根网线相连传输信息; 1.prescan与carsim的集成 在C:\car…...
【Python 数据分析学习】Pandas基础与应用(1)
题目 1 Pandas 简介1.1 主要特征1.2 Pandas 安装 2 Pandas中的数据结构2.1 Series 数据结构和操作2.1.1 Series的数据结构2.1.2 Seres的操作 2.2 DataFrame 数据结构和操作2.2.1 DataFrame 数据结构2.2.2 Dataframe 操作2.2.3 DateFrame 的特殊操作 2.3 Series 和 DataFrame 的…...
pytorch入门(1)——pytorch加载数据初认识
环境配置及其安装: 2023最新pytorch安装(超详细版)-CSDN博客 pytorch加载数据初认识 Dataset:创建可被Pytorch使用的数据集 提供一种方式获取数据及其label Dataloader:向模型传递数据 为网络提供不同的数据形式 …...
Spring下载文件
1、controller /*** 下载文件通过ID** param auditInformationDTO 靓号稽核文件DTO* param servletResponse 响应体*/ GetMapping(value "/downloadAuditFileByAuditFileId") public void downloadAuditFileByAuditFileId(ModelAttribute final GoodNumberAuditInf…...
如何在数据库中备份表:操作指南与注意事项
在数据库管理中,备份表是一种常见的操作,它可以帮助我们保存数据的当前状态,以便在需要时进行恢复或分析。备份表可以通过创建一个新表并复制原表的所有数据到新表中来实现。 以下是具体的SQL语句: CREATE TABLE backup_table A…...
【数据结构】第八节:链式二叉树
个人主页: NiKo 数据结构专栏: 数据结构与算法 源码获取:Gitee——数据结构 一、二叉树的链式结构 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left; // 左子树根节点struct BinaryT…...
Fair Graph RepresentationLearning via Diverse Mixture-of-Experts
发表于:WWW23 推荐指数: #paper/⭐⭐ 问题背景: 背景 现实世界的数据很多样,阻止GNN学习公平的表示。当去偏见化后,他们面临着可学知识不足且属性有限的重大问题 解决方法: 应对公平训练导致可学习知识…...
电机驱动开发之驱动板
目录 1.主要器件选型2.原理图设计3.PCB绘制电源调理驱动电路电流反馈位置反馈 4.PCB绘制5.打板验证6.总结 1.主要器件选型 器件参数封装理由LDOLM317DCYR (24V-12V 12V-5V)SOT-223小电流应用 LDO比DCDC噪声小响应快更为稳定预驱FD6288TTssop-20常见无刷…...
STM32F1 HAL库笔记2_HAL 系统驱动程序
1、HAL 固件驱动程序 API 1.1、如何使用此驱动程序 通用 HAL 驱动程序包含一组通用的 API,PPP 外设驱动程序可以使用这些 API 来开始使用 HAL。HAL 包含两个 API 类别: • 常见的 HAL API • 服务 HAL API 1.2、初始化和去初始化函数 本节提供的功能&a…...
el-table实现当内容过多时,el-table显示滚动条,页面不显示滚动条
估计有不少小伙伴在开发公司的ERP使用el-table都会遇到这么一个问题,就是产品经理提出,页面不出现滚动条,因为不美观。但是当el-table内容过多,超过页面的宽度时候,页面就会有滚动条。那应该如何解决呢?能不能让滚动条…...
Qwen2.5-VL-Ollama效果对比:vs Qwen2-VL在图表理解与定位精度提升
Qwen2.5-VL-Ollama效果对比:vs Qwen2-VL在图表理解与定位精度提升 1. 引言:从Qwen2-VL到Qwen2.5-VL的进化 如果你之前用过Qwen2-VL,可能会觉得它已经很强了——能看懂图片,能回答问题,基本的多模态任务都能搞定。但用…...
SillyTavern角色创建完全指南:从入门到精通
SillyTavern角色创建完全指南:从入门到精通 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 一、基础认知:揭开角色系统的面纱 1.1 什么是角色系统? 想…...
告别卡顿!Win11Debloat开源系统优化工具让Windows 11性能提升200%
告别卡顿!Win11Debloat开源系统优化工具让Windows 11性能提升200% 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更…...
GLM-4-9B-Chat-1M实战:vLLM部署教程+Chainlit前端搭建,一步到位
GLM-4-9B-Chat-1M实战:vLLM部署教程Chainlit前端搭建,一步到位 1. 项目概述 GLM-4-9B-Chat-1M是智谱AI推出的新一代预训练模型,支持高达1M(约200万中文字符)的上下文长度。本教程将带您完成从模型部署到前端搭建的完…...
从标准到实战:网络变压器在POE应用中的AF/AT/BF/BT详解与电路设计指南
1. 网络变压器在POE系统中的核心作用 第一次接触POE供电系统时,我对着电路板上那个带铁壳的方形元件研究了半天——这就是网络变压器。它看起来平平无奇,却是整个POE系统的"心脏"。简单来说,网络变压器在POE系统中要同时干两件事&a…...
新手必看:5分钟学会用Visio绘制PAD图和N-S图(附实例解析)
零基础掌握Visio绘制PAD图与N-S图的实战指南 在软件设计领域,可视化工具的重要性不言而喻。对于刚入门的开发者来说,掌握如何将抽象的逻辑思维转化为直观的图表是一项必备技能。Visio作为微软旗下的专业绘图工具,以其友好的界面和强大的功能&…...
别再只会用按钮上传了!用JEECG的JUpload组件打造更优雅的后台文件管理界面
从按钮到拖拽:用JEECG的JUpload组件重构后台文件管理体验 在后台管理系统开发中,文件上传功能几乎是每个项目都无法绕开的刚需。但你是否注意到,大多数开发者仍然停留在传统的按钮式上传方式?这种"点击-选择-上传"的三部…...
3000+开源蓝图:革新性一站式戴森球计划工厂解决方案
3000开源蓝图:革新性一站式戴森球计划工厂解决方案 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 面对戴森球计划中错综复杂的生产线布局,你是否曾…...
基于Python的物流管理系统毕业设计源码
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在开发一套基于Python的物流管理系统,以提升物流企业的运营效率和管理水平。具体而言,研究目的可从以下几个方面进行阐述&#x…...
2026年国产化人事管理系统TOP10榜单发布:从信创适配到AI提效的选型指南
国产化人事管理系统的竞争,已经从基础人事与算薪,上升到信创环境适配、集团多级管控、复杂用工合规,以及AI在招聘与员工服务中的真实提效。2026年这份TOP10榜单中,红海云更偏向国央企与大型集团的一体化与信创全栈适配;…...
