【ARMv8/ARMv9 硬件加速系列 3 -- SVE 硬件加速向量运算 1】

news2025/1/12 12:18:50

文章目录

    • SVE 使用介绍
      • SVE 特点
      • SVE2 特点
    • SVE 寄存器
      • 扩展的向量寄存器
      • 可扩展的谓词寄存器
        • .d 与 .b 后缀的区别
        • 举例介绍
          • 使用 .d 后缀进行64位元素操作
          • 使用 .b 后缀进行8位元素操作
        • ptrue 指令
          • 小结
      • FFR 寄存器

SVE 使用介绍

前面文章:【ARMv8/ARMv9 硬件加速系列 1 – SVE | NEON | SIMD | VFP | MVE | MPE 基础介绍】 已经对 SVE 做了个大概得介绍,接下来我们就会逐渐深入研究SVE的使用。这里我们再回顾下 ARM 的 SVE :

ARMv9架构中的SVE(Scalable Vector Extension)和SVE2(Scalable Vector Extension 2)是为了增强处理器在处理高性能计算、机器学习、人工智能等领域的性能而设计的关键技术。它们提供了一种可伸缩的向量处理能力,允许更高效地对大量数据进行并行处理。

SVE 特点

SVE是在ARMv8-A架构中首次引入的一种向量扩展,旨在提供一种比传统SIMD(如ARM自己的NEON技术)更灵活的方式来处理向量计算。SVE的关键特性包括:

  • 可伸缩的向量长度:SVE支持从128位到2048位的可伸缩向量长度,向量长度可以根据目标处理器的具体实现而变化。这种可伸缩性允许SVE代码在不同的ARM处理器上运行,而不需要为每个处理器重写代码。
  • 谓词执行:通过谓词寄存器,SVE支持掩码执行,允许对向量中的每个元素独立地进行条件执行。这提高了代码的灵活性和效率。
  • 向量化循环:SVE专门优化了向量化循环的执行,使得循环能够更高效地利用向量化指令。

SVE2 特点

SVE2是SVE的扩展,随ARMv8.2-A及后续版本提供,进一步增强了SVE的能力,特别是针对复杂的数据处理模式。SVE2的新增特性包括:

  • 增强的整数和浮点运算:SVE2引入了更多的整数和浮点向量指令,支持更广泛的数据处理需求。
  • 复杂的数据重排操作:SVE2提供了丰富的数据重排(permutation)和交错(interleaving)操作,这对于实现复杂的算法(如加密算法)非常有用。
  • 增强的字符和字符串处理:为了支持更高效的文本和数据处理,SVE2加入了针对字符和字符串操作的指令。
  • 兼容性:SVE2设计为与SVE向后兼容,意味着能够执行SVE指令的处理器同样能够执行SVE2指令。

在高性能计算和人工智能领域,可以利用SVE和SVE2的强大能力来加速计算密集型任务。例如,使用SVE/SVE2进行矩阵乘法运算可以大幅提升深度学习模型训练和推理的速度。通过利用可伸缩的向量长度和谓词执行,开发者可以编写出既高效又灵活的代码,适配不同的硬件实现,以最大化性能和资源利用率。
总之,SVE和SVE2通过提供可伸缩的向量长度和一系列高级向量处理指令,大大增强了ARM架构在高性能计算、机器学习和人工智能应用中的竞争力。

SVE 寄存器

SVE寄存器有4种:

  • 32个可扩展的向量寄存器,Z0-Z31;
  • 16个可扩展的谓词寄存器,P0-P15;
  • 一个First Fault 谓词寄存器(FFR);
  • 可扩展的向量系统控制寄存器ZCR_Elx

扩展的向量寄存器

SVE共有32个可变长矢量寄存器Z0-Z31(128位的整数倍, 最高可达2048位) ,其中Z0-Z31的低128[127:0],与AArch64 SIMD&FP寄存器V0-V31共享硬件资源。假设SVE的矢量长度为256,其矢量寄存器视图如下:
在这里插入图片描述

  • 可以支持64bits,32bits,16bits 和 8 bits 的元素;

  • 支持整型以及双精度,单精度和半精度浮点元素;

  • 可配置每个异常级别 (EL) 的向量长度。

  • .d后缀:表示操作的数据类型为双字(64位)。当你使用.d后缀(如p0.d)时,这表示谓词寄存器中的每一位控制向量寄存器中对应的64位数据元素。通常用于精细控制对64位数据元素的操作。

  • .b后缀:表示操作的数据类型为字节(8位)。使用.b后缀(如p0.b)时,每一位控制向量寄存器中对应的8位数据元素。这允许对向量寄存器中的单个字节进行更细粒度的控制。

可扩展的谓词寄存器

SVE 谓词寄存器用于控制每通道操作,有16个可变长预测寄存器P0-P15,向量寄存器用于存储实际的数据,而谓词寄存器用于控制向量指令的条件执行。假设SVE的矢量长度为256,谓词寄存器在管理32位和64位操作时,其视图如下:
在这里插入图片描述
谓词寄存器通常被用作对数据操作的 bit mask

  • 每个谓词寄存器是Zx(可扩展向量寄存器)的 1 / 8
  • P0-P7是控制加载、存储和算术的谓词。
  • P8-P15是用于循环管理的额外的谓词。

SVE引入了谓词寄存器(如p0p15),这些寄存器用于控制向量操作的执行。谓词寄存器中的每一位对应向量寄存器中的一个元素,指示该元素是否应该参与到特定的向量操作中。

  • 当谓词寄存器位为 1 时,相应的向量操作会在对应的元素上执行;
  • 当谓词寄存器位为 0 时,相应的元素不会被操作。

接下来将介绍 .d.b后缀在谓词寄存器使用中的区别,并通过例子进行说明。

.d 与 .b 后缀的区别
  • .d后缀:表示操作的数据类型为双字(64位)。当你使用.d后缀(如p0.d)时,这表示谓词寄存器中的每一位控制向量寄存器中对应的64位数据元素。通常用于精细控制对64位数据元素的操作。
  • .b后缀:表示操作的数据类型为字节(8位)。使用.b后缀(如p0.b)时,每一位控制向量寄存器中对应的8位数据元素。这允许对向量寄存器中的单个字节进行更细粒度的控制。
举例介绍

假设我们现在有一个需求,对两个向量z0z1中的数据进行条件性处理,分别涉及对64位(双字)和8位(字节)元素的操作。

使用 .d 后缀进行64位元素操作
// 设置p0,使其对64位元素全开
ptrue p0.d

// 假设z0和z1是两个64位元素的向量
// 使用p0控制的条件加法,只有在p0对应位为真时,z0和z1中对应的64位元素才会相加
add z2.d, p0/m, z0.d, z1.d

在这个例子中,ptrue p0.d指令设置p0中的每一位都为真,表示每一个64位的元素都应该参与下一条add指令的执行。这样,z0z1中的对应64位元素被相加,结果存储在z2中。

使用 .b 后缀进行8位元素操作
// 设置p1,使其对8位元素全开
ptrue p1.b

// 假定z3和z4是包含8位元素的向量
// 使用p1控制的条件加法,只有在p1对应位为真时,z3和z4中对应的8位元素才会相加
add z5.b, p1/m, z3.b, z4.b

在这个例子中,ptrue p1.b指令设置p1中的每一位都为真,意味着每个8位的元素都参与下一条add指令的执行。这样,z3z4中的对应8位元素被相加,结果存储在z5中。

ptrue 指令
  • ptrue 指令用于将谓词寄存器中的元素设置为真(TRUE),指示后续的向量操作应该在所有元素上执行。
  • 例如,ptrue p0.bp0 寄存器中所有的位设置为真,.b 表示操作的最小数据单元是 byte。
小结

.d.b后缀在谓词寄存器使用中代表了操作的数据类型(分别是64位和8位),这允许开发者根据需要对向量寄存器中的数据进行精细的控制。通过使用不同的后缀,可以实现对不同数据大小元素的条件处理,使SVE在处理向量数据时更加灵活和强大。

FFR 寄存器

First Fault Register (FFR) 是一个特殊的谓词寄存器,由 first-fault 加载和存储指令设置,用于指示每个元素的加载和存储操作的成功程度。 FFR 旨在支持推测性内存访问,这使得向量化在许多情况下更容易和更安全。

推荐阅读
https://blog.csdn.net/AngelLover2017/article/details/124808387

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

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

相关文章

Docker 镜像源更换

实现 替换docker 镜像源 前提要求 安装 docker docker-compose 参考创建一键更换docker国内镜像源 Docker 镜像代理DaoCloud 镜像站百度云 https://mirror.baidubce.com南京大学镜像站

企事业单位安全生产月活动怎样向媒体投稿?

作为一名单位的信息宣传员,我肩负着将每一次重要活动的精彩瞬间转化为文字,向外界传递我们单位声音的重任。初入此行时,我满怀热情,坚信通过传统的方式——电子邮件投稿,能够有效地将我们的故事传播出去。然而,现实却给我上了生动的一课。 记得在筹备“安全生产月”活动的宣传时…

linux系统——wget命令

wget命令可以用于下载指定的url地址文件,支持断点续传,支持ftp,http协议下载,在下载普通文件时,即使网络出现故障,依然会不断尝试下载 wget命令直接加url地址 使用-o参数可以将下载文件改名,-c…

「OC」UI练习(二)——照片墙

「OC」UI练习——照片墙 文章目录 「OC」UI练习——照片墙UITapGestureRecognizer介绍照片墙实现 UITapGestureRecognizer介绍 UITapGestureRecognizer是UIKit框架中的一个手势识别器类,用于检测用户在视图上的轻击手势。它是UIGestureRecognizer的一个子类&#x…

人工智能革命:2024年指数报告揭示AI行业十大趋势

随着科技的飞速发展,人工智能(AI)正逐渐渗透到我们生活的方方面面。斯坦福大学李飞飞教授领导的斯坦福以人为本人工智能研究所(HAI)发布的《2024年人工智能指数报告》为我们揭示了AI行业的最新趋势和未来的发展方向。以…

【GIS】全球范围气象站点的逐年平均气温数据(1929-2023年)

数据简介:气象数据包括气象站点温度、湿度、光照等等。提供自1929-2023年以来的全球逐年平均气温数据气象数据下载。数据源为NCDC(美国国家气候数据中心,National Climatic Data Center),隶属于NOAA(美国国…

Ubuntu server 24 (Linux) Zabbix 7.0 LTS 配置mail邮件报警

1 告警--媒介 选择右边默认模板修改 2 用户设置--配置--报警媒介 3 告警--动作--触发器动作 #测试 sudo systemctl stop zabbix-agent 本文使用postfix自建邮件服务器,如有需要请看

Java项目:110 springboot夕阳红公寓管理系统的设计与实现

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统有管理员,租客 管理员权限操作的功能包括对租客,访客,缴费,维修,留言,公…

【PyTorch 新手基础】Regularization -- 减轻过拟合 overfitting

Overfit 过拟合,效果如最右图所示 常见应对方案如下: 增大数据集入手:More data or data argumentation简化模型参数入手:Constraint model complexity (shallow model, regularization) or dropout dropout: torch.nn.Dropout(0…

ElementPlus国际化(将组件的默认语言改为中文)

文章目录 1. Element-plus的默认语言2. 编辑 main.js 文件3. 效果(以分页条组件为例) 1. Element-plus的默认语言 Element-plus的默认语言是英语,可修改为其它语言 2. 编辑 main.js 文件 import {createApp} from vue import ElementPlus …

【简单介绍下Sass,什么是Sass?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

【ARM Cache 与 MMU/MPU 系列文章 1.2 -- Data Cache 和 Unified Cache 的区别是什么?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Data Cache and Unified Cache数据缓存 (Data Cache)统一缓存 (Unified Cache)数据缓存与统一缓存的比较小结 Data Cache and Unified Cache 在 ARM架构中,缓存&#xff08…

景芯SoC A72的时钟树分析

innovus的ctslog中的Clock DAG信息可以报出来CTS主要运行步骤的关键信息,比如clustering,balancing做完后的clock tree的长度,clock tree上所用的buffer、inverter,icg cell数量,clock skew等信息。我们以景芯SoC A72 …

掌握WhoisAPI,提升域名管理的效率

在互联网时代,域名管理是网站运营中非常重要的一环。通过域名,我们能够轻松访问和识别不同的网站。然而,域名的注册和管理也是一项复杂的任务,特别是对于大规模拥有许多域名的企业来说。为了提升域名管理的效率,我们可…

【Spring EL<二>✈️✈️ 】SL 表达式结合 AOP 注解实现鉴权

目录 🍻前言 🍸一、鉴权(Authorization) 🍺二、功能实现 2.1 环境准备 2.2 代码实现 2.3 测试接口 🍹三、测试功能 3.1 传递 admin 请求 ​ 3.2 传递普通 user 请求 🍻四、章末 &a…

Linux Debian12使用podman安装pikachu靶场环境

一、pikachu简介 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 二、安装podman环境 Linux Debian系统如果没有安装podman容器环境,可以参考这篇文章先安装podman环境, Linux Debian11使用国内源安装Podman环境 三…

小而美的算法技巧:前缀和数组

小而美的算法技巧&#xff1a;前缀和数组 类似动态规划。 class NumArray {private int[] preSum;public NumArray(int[] nums) {preSumnew int[nums.length1];//preSum[0]的前缀和为0for(int i1;i<preSum.length;i){preSum[i]nums[i-1]preSum[i-1];//先计算累加和}}publi…

Conda安装

conda可以做到不同项目就用不同虚拟环境,这样就能做到每个项目的依赖包都是相互独立 一、windows Download Success | Anaconda 环境变量 二、nano 本次安装Archiconda的外部python版本为python3.7.1

h5页面上传图片安卓手机无法调用摄像头

<input type”file”> 在ios中&#xff0c;会 而安卓中&#xff0c;没有这些选项 解决方法&#xff1a; 给input 加上accept属性 <input type”file” accept”image/*” /> //调用相机 &#xff0c;图片或者相册 &#xff08;两者都行&#xff09; 加上了cap…

yolo-inference多后端+多任务+多算法+多精度模型 框架开发记录(python版)

先贴出github地址&#xff0c;欢迎大家批评指正&#xff1a;https://github.com/taifyang/yolo-inference 不知不觉LZ已经快工作两年了&#xff0c;由于之前的工作内容主要和模型部署相关&#xff0c;想着利用闲暇时间写一些推理方面的经验总结&#xff0c;于是有了这个工程。其…