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

news2024/10/5 13:47:59

文章目录

    • 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_test
    stp	    x29, x30, [sp, #-0x10]!

    ptrue p0.b
    ldr w0, =0x11111111
    dup z0.b, w0
    cpy z0.b, p0/z, #0x55

    ldr x1, =0xb0000000
    st1b {z0.d}, p0, [x1]
    mov x0, xzr
    ldr x0, [x1]

    ldp     x29,x30, [sp], #0x10
    ret
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.coloradmin.cn/o/1827269.html

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

相关文章

fs.1.10 ON rockeylinux8 dockerfile模式

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 rockeylinux8 docker上编译安装fs.1.10的流程记录&#xff0c;本文使用dockerfile模式。 环境 docker engine&#xff1a;Version 24.0.6 rockylinux docker&#xff1a;8 freeswitch&#xff1a;v1.10.7 dockerfi…

CleanMyMacX4.15.4如何优化苹果电脑系统缓存,告别MacBook卡顿,提升mac电脑性能

你是否曾为苹果电脑存储空间不够而烦恼&#xff1f;是否曾因系统运行缓慢而苦恼&#xff1f;别担心&#xff0c;今天我要给大家种草一个神器——CleanMyMac&#xff01;这款软件可以帮助你轻松解决苹果电脑的种种问题&#xff0c;让你的电脑焕然一新&#xff01; 让我来给大家介…

显著提高iOS应用中Web页面的加载速度 - 提前下载页面的关键资源(如JavaScript、CSS和图像)

手动下载并缓存资源是一种有效的方式&#xff0c;可以确保在需要时资源已经在本地存储&#xff0c;这样可以显著提高加载速度。 缓存整个 web 页面的所有资源文件 具体实现步骤 下载和缓存资源&#xff1a;包括 HTML 文件、CSS、JavaScript 和图像。在应用启动时预加载资源。…

CSS从入门到精通——动画:CSS3动画执行次数和逆向播放

目录 任务描述 相关知识 动画执行次数 动画反向播放 编程要求 任务描述 本关任务&#xff1a;用 CSS3 实现loading效果。效果图如下&#xff1a; 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.动画执行次数&#xff0c;2.动画反向播放。 需要实现的效…

CSS从入门到精通——动画:CSS3动画延迟和完成后状态的保持

目录 任务描述 相关知识 动画状态 动画完成时的状态 动画延迟 编程要求 任务描述 本关任务&#xff1a;用 CSS3 实现小车等待红绿灯的效果。效果图如下&#xff1a; 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.动画状态&#xff0c;2.动画完成时的状…

mac下Xcode在iphone真机上测试运行iOS软件

最近一个需求需要在iPhone真机上测试一个视频直播的项目。 需要解决如何将项目 app 安装到真机上 在进行真机调试。 安装Xcode 直接在App Store上搜索Xcode安装即可。 关键是要安装Simulator。项目需要安装iOS17.5但是由于安装包太大&#xff0c;并且网络不稳定的原因。在Xco…

关于yolov5训练的那些事儿

1.YOLOv5 的模型系列包括从最小到最大的多种模型&#xff1a;YOLOv5n&#xff08;Nano&#xff09;&#xff0c;YOLOv5s&#xff08;Small&#xff09;&#xff0c;YOLOv5m&#xff08;Medium&#xff09;&#xff0c;YOLOv5l&#xff08;Large&#xff09;&#xff0c;以及 YO…

【Linux硬盘读取】Windows下读取Linux系统的文件解决方案:Linux Reader4.5 By DiskInternals

前言 相信做机器视觉相关的很多人都会安装 Windows 和 Linux 双系统。在 Linux 下&#xff0c;我们可以很方便的访问Windows的磁盘&#xff0c;反过来却不行。但是这又是必须的。通过亲身体验&#xff0c;向大家推荐这么一个工具&#xff0c;可以让 Windows 方便的访问 Ext 2/3…

Linux 文件的权限信息解读 chmod修改权限 数字序号表示权限

ls -l #列出当前文件 显示详细信息 drwxr-xr-x. 2 dpc test 6 Jun 15 07:45 test.txt共分为三部分 drwxr-xr-x.&#xff1a;表示文件和文件夹的权限信息dpc &#xff1a;文件&#xff0c;文件夹所属的用户test &#xff1a; 文件和文件夹所属的用户组 drwxr-xr-x 解读 d表示为…

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

BetterZip是一款功能强大的Mac解/压缩软件&#xff0c;可以满足用户对文件压缩、解压、加密和保护等方面的需求。以下是关于BetterZip软件的主要功能、特点和使用方法的详细介绍&#xff0c;以及对其用户友好度、稳定性和安全性的评价。 安 装 包 获 取 地 址: BetterZip 5-安…

【尚庭公寓SpringBoot + Vue 项目实战】公寓管理(十一)

【尚庭公寓SpringBoot Vue 项目实战】公寓管理&#xff08;十一&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】公寓管理&#xff08;十一&#xff09;1、业务介绍2、逻辑模型介绍3、接口开发3.1、保存或更新公寓信息3.2、根据条件分页查询详细信息3.3、根据ID获…

深度学习(七)——神经网络的卷积操作

卷积操作 一、torch.nn中Convolution Layers函数的介绍 1. 参数介绍 nn.Conv1d: Conv取自Convolution的前四个字母&#xff0c;1d代表的是一个一维操作。 nn.Conv2d: 2d表示是一个二维的操作&#xff0c;比如图像就是一个二维的。 其余参数不常用&#xff0c;见官网文档&am…

分布式事务AP控制方案(下)

分布式事务控制方案 本篇文章给出一种要求高可用性&#xff08;AP思想&#xff09;的分布式事务控制方案 上篇回顾&#xff1a;点我查看 分布式事务控制方案1、前景回顾2、数据库和缓存的操作3、分布式文件系统1&#xff09;页面静态化2&#xff09;远程调用3&#xff09;调用…

adb卸载系统应用

1.进入shell adb shell2.查看所有包 pm list packages3.查找包 如查找vivo相关的包 pm list packages | grep vivo发现包太多了,根本不知道哪个是我们想卸载的应用 于是可以打开某应用,再查看当前运行应用的包名 如下: 4.查找当前前台运行的包名 打开某应用,在亮屏状态输入 …

卫星通讯助力船舶可视化监控:EasyCVR视频汇聚系统新应用

一、背景 随着科技的不断进步和社会治安的日益严峻&#xff0c;视频监控系统已经成为维护公共安全和提升管理效率的重要工具。传统的视频监控主要依赖于有线传输&#xff0c;但受到地域限制、布线成本高等因素的影响&#xff0c;其应用范围和效果受到一定限制。而卫星通讯传输…

学会python——显示进度条(python实例五)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3、进度条显示 3.1 代码构思 3.2 代码示例 3.3 运行结果 4、总结 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读…

ComfyUI中使用 SD3 模型(附模型下载详细说明)

文章目录 背景安装方式一方式二 测试 背景 StabilityAI近日开源了Stable Diffusion 3 Medium&#xff0c;简称 SD3&#xff0c;该模型拥有着20亿参数。其特点如下&#xff1a; 提升了整体图片的质量、真实感提供了三种文本编码器可组合使用&#xff0c;有助于在性能和效率之间…

《大道平渊》· 拾肆 —— 不要为不属于你负责的事情负责

《平渊》 拾肆 "客观世界如是观照&#xff0c;控制自己&#xff0c;不要介入因果。" 美国开国总统华盛顿说过, 不要干涉欧洲事务。 可是他的后任都不听, 于是纷纷卷入了无穷的麻烦之中。 不要为不属于你负责的事情负责。 别人的行为和你有什么关系&#xff1f; 就…

Stable-Diffusion-WebUI 常用提示词插件

SixGod提示词插件 SixGod提示词插件可以帮助用户快速生成逼真、有创意的图像。其中包含&#xff0c;清空正向提示词”和“清空负向提示词、提示词起手式包含人物、服饰、人物发型等各个维度的提示词、一键清除正面提示词与负面提示词、随机灵感关键词、提示词分类组合随机、动…

<Rust><iced>基于rust使用iced库构建GUI实例:图片的格式转换程序

前言 本专栏是Rust实例应用。 环境配置 平台&#xff1a;windows 软件&#xff1a;vscode 语言&#xff1a;rust 库&#xff1a;iced、iced_aw 概述 本文是专栏第二篇实例&#xff0c;是一个图像格式转换程序&#xff0c;基于rust图像处理库image以及文件处理库rfd。 UI演示&…