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

文章目录

    • 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.mzph.cn/diannao/26777.shtml

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

相关文章

git下载项目登录账号或密码填写错误不弹出登录框

错误描述 登录账号或密码填写错误不弹出登录框 二、解决办法 控制面板\用户帐户\凭据管理器 找到对应的登录地址进行更新或者删除 再次拉取或者更新就会提示输入登录信息

影响数字本振信噪比的因素

2048 点 -66 4096 点-72 8192 点-77 16384 点-84

SAP PP学习笔记21 - 计划策略的Customize:策略组 > 策略 > 需求类型 > 需求类(消费区分,计划区分)

上面几章讲了MTS,MTO,ATO的计划策略。 本章来讲一下它的后台 Customize。 1,Customizeing:Planned Indep.Reqmts Management 这是配置计划策略的整个过程: - Requirements Type / Class 需求类型 / 需求类 - Plann…

VUE之重定向redirect

VUE之路由和重定向redirect 这个小知识点是在学习做项目的时候遇到的一个问题,借鉴了一个他人的项目,是一个酒店管理系统,拿到源码之后导到我的vscode里。 参考链接 导的过程比较顺利,正常安装,加依赖,没有…

java操作数据库语法

1 新建数据库 1.1 新建数据库 1 启动mysql数据库 2 新建数据库 1.2 mysql数据库语法 1 选择数据库 use java_demo1 2 移除数据库 drop database java_web1 3 创建表 CREATE TABLE user (id int(11) PRIMARY KEY AUTO_INCREMENT,name varchar(255) NOT NULL,age int(11)…

【python】通行网格地图四叉树化 (leeccode 427)

【python】通行网格地图四叉树化 受到Leecode 427题的启发,427. 建立四叉树 想将由0和1组成的网格地图绘制为四叉树地图,0表示可通行网格,1表示不可通行网格。 import matplotlib.pyplot as plt import matplotlib.patches as patches …

【数学建模】MATLAB入门教程:插值与拟合(下)

前言 插值与拟合在数据处理和科学计算中扮演着非常重要的角色&#xff0c;它们用于估算未知数据点的值&#xff0c;帮助我们理解和预测数据趋势 一、一维插值 1、一维插值定义 已知n1个节点(,)(j0,1,...,n,其中互不相同&#xff0c;不妨设a<<...<b),求任一插值点(…

鸿蒙开发:任务(Mission)与启动模式

任务&#xff08;Mission&#xff09;与启动模式 如前文所述&#xff0c;一个UIAbility实例对应一个任务。UIAbility实例个数与UIAbility配置的启动模式有关。在FA模型下&#xff0c;通过config.json配置文件中的“launchType”属性配置&#xff1b;在Stage模型下&#xff0c;…

C#聊天室②

客户端 桌面 MyClient client;public Form1(){InitializeComponent();}// 进入聊天室按钮方法private void button1_Click(object sender, EventArgs e){if (!string.IsNullOrEmpty(textBox1.Text)){// 开始连接服务器 封装一个自定义客户端类client new MyClient(); // 给cl…

基于jeecgboot-vue3的Flowable流程-流程处理(一)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 这部分修正一些流程处理中VForm3线上的一些bug问题 1、初始化流程提交与现实的前端页面代码 <!--初始化流程加载默认VForm3表单信息--><el-col :span"16" :offset&qu…

nlp学习笔记

目录 很多入门例子 bert chinese 很多入门例子 https://github.com/lansinuote/Huggingface_Toturials bert chinese import torch import torch.nn as nn from transformers import AutoTokenizer, AutoModel, BertModel, TFBertModel, BertTokenizer# youpath = D:/bert-…

【Mybatis】动态SQL的绑定和公共sql语句片段

Mybatis还有三个标签&#xff0c;分别是bind&#xff0c;sql和include ①bind&#xff1a;这个标签作用就是将OGNL标签里的值&#xff0c;进行二次加工&#xff0c;在绑定到另一个变量里&#xff0c;供其他标签使用&#xff0c;举个例子 调用getUsers方法的时候&#xff0c;我…

网络编程(二)TCP

一、TCP网络编程 网络编程模型&#xff1a; C/S模型&#xff1a;客户端服务器模型 优点&#xff1a; 客户端可以缓存一些数据&#xff0c;使用时直接在本地读取&#xff0c;无需每次重新下载&#xff1b; 由于客户端和服务器都是自己开发的&#xff0c;可以自定义协议 缺点&a…

文案提取小帮手轻松将视频为转文字!而且不限时长

作为一个自媒体的资深用户总在一个一个的敲字真的太慢了&#xff0c;而且很多创作者都知道追热点是和时间赛跑。如果你嫌弃自己手抄效率太低&#xff0c;看视频又嫌时间太长。 今天叫教你一个可以将视频转文字的工具&#xff0c; 这个工具就叫文案提取小帮手&#xff0c;而且…

Vue前端ffmpeg压缩视频再上传(全网唯一公开真正实现)

1.Vue项目中安装插件ffmpeg 1.1 插件版本依赖配置 两个插件的版本 "ffmpeg/core": "^0.10.0", "ffmpeg/ffmpeg": "^0.10.1"package.json 和 package-lock.json 都加入如下ffmpeg的版本配置&#xff1a; 1.2 把ffmpeg安装到项目依…

Java老人护理上门服务类型系统小程序APP源码

&#x1f338; 老人上门护理服务系统&#xff1a;温暖与专业并存 &#x1f338; 一、&#x1f3e0; 走进老人上门护理服务系统 随着社会的快速发展&#xff0c;我们越来越关注老年人的生活质量。老人上门护理服务系统应运而生&#xff0c;它结合了现代科技与人性化服务&#…

最小生成树prim算法详解

prim算法解决的是最小生成树问题&#xff0c;即在一个给定的无向图G中求一棵生成树T&#xff0c;使得这棵树拥有图G中的所有顶点&#xff0c;且所有边都是来自图G中的边&#xff0c;并且满足整棵树的边权之和最小。 prim算法的基本思想是对图G设置集合S来存放已被访问的顶点&a…

【源码】【Spring+SpringMVC+MyBatis】电子商城网上购物平台的设计与开发

学生成绩管理系统 系统功能开发环境开发技术前端技术后端技术 系统展示登录界面注册界面系统首页商品详情页下单界面付款界面购物车界面 源码获取↓↓↓↓&#xff1a; 源码可在后台私信联系博主或文末添加博主微信获取帮助 系统功能 登录、注册模块&#xff1a;如果用户第一次…

基于Java+Swing+mysql幼儿园信息管理系统V2

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

【网络编程】基于UDP的服务器端/客户端

UDP可看作是信件邮寄&#xff0c;邮寄过程可能会信件丢失&#xff0c;是一种不可靠的数据传输服务。 但UDP性能更高&#xff0c;实现更加简洁。流控制是区分UDP和TCP的最重要标志。 IP的作用就是让离开主机B的UDP数据包传递给主机B&#xff0c;UDP根据端口号将传到主机的数据包…