【ARMv8/ARMv9 硬件加速系列 3.2 -- SVE 读写内存指令 st1b | st1w | st1w | st1d 使用介绍】

文章目录

    • SVE Load 和 Store 指令使用介绍
      • LD1 加载指令
      • ST1 存储指令
      • PFR 预取指令
      • 参考示例
        • LD1 加载示例
        • ST1 存储示例
      • 代码实例

在这里插入图片描述

SVE Load 和 Store 指令使用介绍

ARMv9架构中的SVE(Scalable Vector Extension)指令集为向量计算提供了强大支持,特别是针对不同数据类型和访问模式的加载(Load)和存储(Store)操作。下面是对您提到的一些SVE指令的简要介绍和使用示例。

LD1 加载指令

  • LD1{B|D|H|W} {Zt.<T>}, Pg/Zn, [Xn, Xm{, LSL #imm}]
    • 加载一个或多个元素到向量寄存器Zt中。
    • {B|D|H|W}指定加载的元素大小(字节、双字、半字、字)。
    • Pg/Zn为谓词寄存器,控制加载操作。
    • [Xn, Xm{, LSL #imm}]指定内存地址。
  • LD1R{B|D|H|W} {Zt.<T>}, Pg/Zn, [Xn]
    • 从内存加载一个元素并重复到向量Zt的所有元素中。
    • R代表重复(Repeat)。
  • LD1RO{B|D|H|W} {Zt.<T>}, Pg/Zn, [Xn, Xm]
    • 从内存加载一个旋转(Rotate)元素到向量Zt中。
    • RO代表旋转(Rotate)。
  • LDFF1{B|H|W|D} {Zt.<T>}, Pg/Zn, [Xn, Xm]
    • 第一次找到的(First-Fault)加载。如果遇到不能访问的内存,则停止加载剩余元素。
    • FF代表第一次遇到故障就停止。

ST1 存储指令

  • ST1{B|D|H|W} {Zt.<T>}, Pg, [Xn, Xm{, LSL #imm}]
    • 将向量寄存器Zt中的一个或多个元素存储到内存。
    • 用法类似于加载指令,但用于存储。

PFR 预取指令

  • PRF{B|D|H|W}
    • 预取指令用于将内存数据预取到高速缓存,以提高访问速度。
    • 指定预取的数据大小和类型。

参考示例

假设我们需要将一个双字(64位)的数据加载到向量寄存器Z0中,然后将这个向量的数据存储回内存。

LD1 加载示例
// 假设X0包含了数据的内存地址
// 使用Pg作为谓词寄存器,控制加载过程
ptrue p0.d// 从[X0]地址加载一个双字数据到Z0的所有元素中
ld1rd {z0.d}, p0, [x0]

这里,ld1rd指令从X0指向的内存地址加载一个双字数据,并将其重复填充到向量寄存器Z0的所有元素中,受谓词寄存器P0的控制。

ST1 存储示例
// 假设X1包含了要存储数据的目标内存地址
// 将Z0寄存器中的数据存储到[X1]地址
st1d {z0.d}, p0, [x1]

这里,st1d指令将向量寄存器Z0中的数据存储到X1指向的内存地址中,操作受谓词寄存器P0的控制。

代码实例

测试代码如下:

  • 首先将谓词寄存器p0中所有字节元素的控制位都设为1,意味着所有后续操作都会影响到z0的所有字节元素;
  • 执行 ST1B {z0.d}, p0, [x1] 按8位(即1字节)的单元将 z0 寄存器中的数据(根据谓词寄存器 p0 的掩码)存储到 x1 指向的开始地址0xb0000000处;
  • 最后将地址0xb0000000地址处的值返回。
func sve_add_teststp	    x29, x30, [sp, #-0x10]!ptrue p0.bldr w0, =0x11111111dup z0.b, w0cpy z0.b, p0/z, #0x55ldr x1, =0xb0000000st1b {z0.d}, p0, [x1]mov x0, xzrldr x0, [x1]ldp     x29,x30, [sp], #0x10ret
endfunc sve_add_byte_test

需要注意的是 指令 ST1{B|D|H|W} 写的次数是和 {z0.n} 的配置有关,比如当测试代码修改为 st1w {z0.d}, p0, [x1] 之后,表示每次写一个word,一共写2次,因为z0 向量寄存器的大小为128bits,在写入操作时每个元素的大小是按照64bits计算的。

msh >dump 0xb0000000 4
0xb0000000: 0x55555555 0x55555555 0x00000000 0x00000000

修改为 st1b {z0.d}, p0, [x1] 之后,在写入操作时每个元素的大小是按照64bits计算的,每次写1入byte:

msh >dump 0xb0000000 4
0xb0000000: 0x00005555 0x00000000 0x00000000 0x00000000

修改为 st1b {z0.b}, p0, [x1] 之后,在写入操作时每个元素的大小是按照8bits计算的,每次写1入byte:

msh >dump 0xb0000000 4
0xb0000000: 0x55555555 0x55555555 0x55555555 0x55555555

修改为 st1b {z0.h}, p0, [x1] 之后,在写入操作时每个元素的大小是按照16bits(half-word)计算的,每次写1入byte, 一共写入8次:

msh >dump 0xb0000000 4
0xb0000000: 0x55555555 0x55555555 0x00000000 0x00000000

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

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

相关文章

10W大奖等你瓜分,OpenTiny CCF开源创新大赛报名火热启动!

OpenTiny CCF开源创新大赛正式启幕&#xff01; &#x1f31f;10万奖金&#xff0c;等你来战&#xff01; &#x1f31f; &#x1f465;无论你是独行侠还是团队英雄&#x1f465; 只要你对前端技术充满热情&#xff0c; 渴望在实战中磨砺技能&#xff0c; 那么&#xff0c…

Day 23 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

# 669. 修剪二叉搜索树 思路 相信看到这道题目大家都感觉是一道简单题&#xff08;事实上leetcode上也标明是简单&#xff09;。 但还真的不简单&#xff01; #递归法 直接想法就是&#xff1a;递归处理&#xff0c;然后遇到 root->val < low || root->val >…

SpringCloud微服务架构(eureka、nacos、ribbon、feign、gateway等组件的详细介绍和使用)

一、微服务演变 1、单体架构&#xff08;Monolithic Architecture&#xff09; 是一种传统的软件架构模式&#xff0c;应用程序的所有功能和组件都集中在一个单一的应用中。 在单体架构中&#xff0c;应用程序通常由一个大型的、单一的代码库组成&#xff0c;其中包含了所有…

英伟达开源 3400 亿巨兽:98% 合成数据训出最强开源通用模型,性能对标 GPT-4o

NVIDIA 最近开源了其大型语言模型 Nemotron-4 340B&#xff0c;这是一个具有划时代意义的模型&#xff0c;它使用了高达 98% 的合成数据进行训练&#xff0c;并且在性能上与 GPT-4 相当。Nemotron-4 340B 包括基础模型、指令模型和奖励模型&#xff0c;支持 4K 上下文窗口、50 …

leetcode刷题记录42-1584. 连接所有点的最小费用

问题描述 给你一个points 数组&#xff0c;表示 2D 平面上的一些点&#xff0c;其中 points[i] [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 &#xff1a;|xi - xj| |yi - yj| &#xff0c;其中 |val| 表示 val 的绝对值。 请你返回将所有点连…

Linux--MQTT(一)简介

一、简介 MQTT &#xff08; Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输&#xff09;&#xff0c; 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。 与 HTTP 协议一样&#xff0c; MQTT 协议也是应用层协议&#xff0c;工作在 TCP/IP 四…

Mybatis做批量操作

动态标签foreach&#xff0c;做过批量操作&#xff0c;但是foreach只能处理记录数不多的批量操作&#xff0c;数据量大了后&#xff0c;先不说效率&#xff0c;能不能成功操作都是问题&#xff0c;所以这里讲一讲Mybatis正确的批量操作方法&#xff1a; 在获取opensession对象…

实用软件下载:XMind 2024最新安装包及详细安装教程

​XMind不仅是一款易用且功能强大的思维导图软件&#xff0c;也是一个开源项目。XMind以构建一个社区向全球提供领先的跨平台思维导图和头脑风暴软件为目标&#xff0c;以帮助用户提升效率。XMind公司是XMind开源项目的主要代码贡献者&#xff0c;与此同时&#xff0c;我们欢迎…

SpringCloud之Zuul源码解析

Zuul 是在云平台上提供动态路由&#xff0c;监控&#xff0c;弹性&#xff0c;安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。Zuul 可以适当的对多个 Amazon Auto Scaling Groups 进行路由请求。 其架构如下图所示&#xff1a; Zuu…

高速公路智能管理系统:构建安全畅通的数字大动脉

随着城市化进程的加速和交通需求的增长&#xff0c;高速公路系统作为城市交通的重要组成部分&#xff0c;正承担着越来越多的交通运输任务。为了提升高速公路的安全性、便捷性和智能化管理水平&#xff0c;高速公路智能管理系统应运而生。本文将深入探讨高速公路智能管理系统的…

Linux shell编程学习笔记58:cat /proc/mem 获取系统内存信息

0 前言 在开展系统安全检查的过程中&#xff0c;除了收集cpu信息&#xff0c;我们还需要收集内存信息。在Linux中&#xff0c;获取内存信息的命令很多&#xff0c;这里我们着重研究 cat /proc/mem命令。 1 cat /proc/mem命令 /proc/meminfo 文件提供了有关系统内存的使用情况…

能耗分析与远程抄表是什么?

一、引言 在21世纪的数字化时代&#xff0c;能耗分析和远程抄表已成为现代能源管理的重要组成部分。这两项技术不仅提高了能源效率&#xff0c;还为企业和个人提供了更精细的能源使用数据&#xff0c;从而实现更科学的节能减排。 二、能耗分析的深度洞察 能耗分析是通过收集…

[Java基本语法] 逻辑控制与方法

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;线程与…

【C++进阶】模板进阶与仿函数:C++编程中的泛型与函数式编程思想

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;栈和队列相关知识 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀模板进阶 &#x1f9e9;<&…

【C语言】13.数组指针与函数指针及其应用

一、数组指针 顾名思义&#xff0c;数组指针就是指向数组的指针。形如&#xff1a;int (*p)[10]; 注意&#xff1a;[]的优先级要高于*号的&#xff0c;所以必须加上&#xff08;&#xff09;来保证p先和*结合。 数组指针的使用 int arr[10] {0}; int (*parr)[10] &arr;…

探索服务器硬件:理解基础组件及其重要性

在现代IT基础设施中&#xff0c;服务器扮演着至关重要的角色。无论是托管网站、管理数据、运行应用程序还是提供各种在线服务&#xff0c;服务器硬件的性能和稳定性都是确保这些任务顺利进行的关键。本文将介绍服务器硬件的基本组件及其功能&#xff0c;以帮助读者更好地理解和…

程序优化 --- arthas trace命令使用

最近在做优化,通过arthas的trace命令去观察方法内的耗时情况以便对程序进行修改. 1.启动arthas之后选择需要监测的程序 2.找到需要监测的接口,一般都是直接找service例子如下: trace 类地址.类名 方法名 (中间有空格)

数据可视化后起之秀——pyecharts

题目一&#xff1a;绘制折线图&#xff0c;展示商家A与商家B各类饮品的销售额 题目描述&#xff1a; 编写程序。根据第9.3.1&#xff0c;绘制折线图&#xff0c;展示商家A与商家B各类饮品的销售额。 运行代码&#xff1a; #绘制折线图&#xff0c;展示商家A与商家B各类饮品的…

一键安全体检!亚信安全携手鼎捷软件推出企业安全体检活动 正式上线

亚信安全联合鼎捷软件股份有限公司&#xff08;以下简称“鼎捷软件”&#xff09;正式推出“一键安全体检”服务。亚信安全网络安全专家将携手鼎捷软件数据安全专家&#xff0c;围绕企业的数智安全状况&#xff0c;进行问题探索与治愈、新问题预测与预警&#xff0c;在全面筛查…

【git使用一】windows下git下载、安装和卸载

目录 &#xff08;1&#xff09;下载安装包 &#xff08;2&#xff09;安装git &#xff08;3&#xff09;安装验证 &#xff08;4&#xff09;卸载git &#xff08;1&#xff09;下载安装包 官网下载地址&#xff1a;Git 国内镜像下载地址&#xff1a;CNPM Binaries Mir…