【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

FineBI开发中的一些数据处理方法

在这里记录在FineBI开发中的遇到的一些数据处理方法。 1、获取一星期中的首日日期 假设电商数据分析场景中有张订单表,其中有一列为订单日期(order_create_dt),如果需要统计订单金额周同比,一般我们都需要构建一张日期维度表(如…

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

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

VUE之重定向redirect

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

SIM卡 移动、联通、电信对比

中国移动、联通、电信优势劣势分析 移动和联通采用GSM终端,电信采用CDMA终端(码分多址),上网速度快,保密性好联通也有CDMA关于GSM、CDMA、TDMA、 TD-SCDMA、WCDMA之间的各种纠结 中国联通:网络安全的“攻”与“防” 联通保密性…

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;…

QTableWidget自定义代理,实现自动换行

尝试使用setWordWrap(true)&#xff0c;但是仅对中文有效&#xff0c;对英文不会自动换行&#xff0c;最后只能用代理。 代理实现 class WordWrapDelegate : public QStyledItemDelegate { public:using QStyledItemDelegate::QStyledItemDelegate;void paint(QPainter *pai…

【镜像制作】Oracle JDK项目镜像压缩

文章目录 简介代码 简介 大家有没有试过在使用Oracle jdk的项目时&#xff0c;由于jdk的包太大&#xff0c;制作出来的镜像往往特别大&#xff0c;在大规模容器化的场景下&#xff0c;镜像的大小对存储的空间&#xff0c;拉取速度&#xff0c;启动的快慢都有一定 影响&#xff…

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…

【Qt实现录频】

在Qt中实现录制视频可以通过使用Qt Multimedia模块来实现。你可以使用QCamera类来访问摄像头并捕获视频数据。以下是一个简单的示例代码,用于在Qt中实现录制视频: #include <QCamera> #include <QCameraInfo> #include <QCameraViewfinder> #include <…

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-…

实时通信websocket和sse

microsoft/fetch-event-source是一个JavaScript库&#xff0c;用于处理服务器发送的事件&#xff08;Server-Sent Events&#xff0c;简称SSE&#xff09;。它提供了一个简单易用的API&#xff0c;使得客户端可以与服务器进行实时通信。这个库主要用于浏览器环境 安装依赖npm i…

【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…

【React】在 React 中的useDeferredValue的作用是什么,怎么使用

在React中,useDeferredValue是一个在React 18版本中引入的新Hook,其主要作用是为了优化渲染性能,特别是在处理大量状态更新或复杂渲染逻辑时,通过延迟某些非关键性的更新来提高用户体验和应用的流畅性。 作用: 优化渲染性能:当组件的某个状态或属性发生变化时,React通常…