【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.rhkb.cn/news/354502.html

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

相关文章

AttributeError: module ‘numpy‘ has no attribute ‘int‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

C++ Windows Hook使用

GitHub - microsoft/Detours: Detours is a software package for monitoring and instrumenting API calls on Windows. It is distributed in source code form. /*挂载钩子 setdll /d:C:\Users\g\source\repos\LotTest\Release\lotDll.dll C:\Users\g\source\repos\LotTest…

React 通信:深层传递(Props、Context、Children Jsx)

在之前的文章 探讨:围绕 props 阐述 React 通信 中总结了关于“父子”组件传值,但是当需要在组件树中深层传递参数以及需要在组件间复用相同的参数时,传递 props 就会变得很麻烦。 实际案例: 下述展示有两种状态:① 详…

【无线传感网】LEACH路由算法

1、LEACH路由算法简介 LEACH协议,全称是“低功耗自适应集簇分层型协议” (Low Energy Adaptive Clustering Hierarchy),是一种无线传感器网络路由协议。基于LEACH协议的算法,称为LEACH算法。 2、LEACH路由算法的基本思想 LEACH路由协议与以往的路由协议的不同之处在于其改变…

<Rust><iced>基于rust使用iced构建GUI实例:如何将svg格式转为ico格式图片?

前言 本专栏是Rust实例应用。 环境配置 平台:windows 软件:vscode 语言:rust 库:iced、iced_aw 概述 本文是专栏第4篇实例,依旧是一个图像格式转换程序,基于rust的svg库resvg、图像处理库image以及文件处理库rfd。 流程是先用resvg获取svg图片的数据并将其转为png数据…

嵌入式实验---实验一 通用GPIO实验

一、实验目的 1、掌握STM32F103 GPIO程序设计流程; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、通过按键实现:按键按下,LED点亮;按键释放,LED熄灭。 三、实验设备和器材 电脑、Keil uVision5软件、Proteus…

清凉夏日运动新选择——气膜体育馆—轻空间

随着气温的不断攀升,夏天成为许多运动爱好者的挑战季节。炎热的天气不仅容易让人感到疲倦,更可能带来中暑等健康风险。然而,气膜体育馆的出现,为爱好运动的你提供了一个理想的避暑之地。气膜体育馆以其独特的结构和诸多优势&#…

【ARM】如何通过Keil MDK查看芯片的硬件信息

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: 解决在开发过程中对于开发项目所使用的的芯片的参数查看的问题 2、问题场景: 在项目开发过程中,经常需要对于芯片的时钟、寄存器或者一些硬件参数需要进行确认。大多数情况下是需…

【科研基础】通感一体化讲座

通信和感知在硬件结构上相似,高效地利用资源,实现相互的增益; 感知是基于不同的任务,比如

从零开始的<vue2项目脚手架>搭建:vite+vue2+eslint

前言 为了写 demo 或者研究某些问题,我经常需要新建空项目。每次搭建项目都要从头配置,很麻烦。所以我决定自己搭建一个项目初始化的脚手架(取名为 lily-cli)。 脚手架(scaffolding):创建项目时…

MaxWell实时监控Mysql并把数据写入到Kafka主题中

配置mysql 启用MySQL Binlog MySQL服务器的Binlog默认是未开启的,如需进行同步,需要先进行开启 修改MySQL配置文件/etc/my.cnf sudo vim/etc/my.cof 增加如下配置 注:MySQL Binlog模式 Statement-based:基于语句,…

通过sql语句直接导出excel文件

SELECT column1 as 名字 FROM your_table INTO OUTFILE /path/to/your_file.csv FIELDS TERMINATED BY , ENCLOSED BY " LINES TERMINATED BY \n 这里的注意事项是,INTO OUTFILE 这后面的路径需要通过下面的SQL查出来 show variables like %secure%; 操作步骤…

Windows桌面运维----第四天

1、U盘故障打不开: 操作方式:WinR打开运行,输入cmd确定,在(C:\Users\Administrator>)后输入chkdsk,空格,输入U盘盘符,例如F:/F,回车,等待修复完成。 2、…

密码学及其应用——为什么选择接近的质数因子对RSA加密算法不安全?

RSA加密算法是一种广泛使用的非对称加密算法,它的安全性依赖于大整数分解的难度。具体来说,RSA算法生成的公钥包含一个大整数N,这是两个大质数p和q的乘积。然而,如果这两个质数p和q太接近,则可以相对容易地对N进行因式…

汽车IVI中控开发入门及进阶(三十一):视频知识扫盲

有效的视频资源管理需要集成许多不同的底层技术,共同为用户提供给定应用程序的最佳体验。其中许多技术是从早期电视广播中使用的技术演变而来的。其他方法,如用于通过网络流式传输视频的压缩方法,相对较新且不断发展。 以下详细概述了与图形和视频处理和传输相关的一些基本…

初阶 《数组》 1. 一维数组的创建和初始化

1. 一维数组的创建和初始化 1.1 数组的创建 数组是一组相同类型元素的集合 数组的创建方式: type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n 是一个常量表达式,用来指定数组的大小数组创建的实例: //代码1 int ar…

C#.Net筑基-类型系统②常见类型

01、结构体类型Struct 结构体 struct 是一种用户自定义的值类型,常用于定义一些简单(轻量)的数据结构。对于一些局部使用的数据结构,优先使用结构体,效率要高很多。 可以有构造函数,也可以没有。因此初始…

数据结构:4.1.1二叉搜素树及查找

静态查找:要找的集合的元素是不动的,主要是find操作,没有delete操作 动态查找:要查找的集合会经常发生插入删除的操作 静态查找的一个很好的方法就是二分查找 把数据直接放在树上 结点右子树的值>结点的值>结点左子树的…

昇思25天学习打卡营第1天|基本介绍及快速入门

1.第一天学习总体复盘 1)成功注册昇思大模型平台,并成功申请算力; 2)在jupyter环境下学习初学入门/初学教程的内容; 在基本介绍部分,快速撸了一边内容,有了一个基本的了解(没理解到位的计划采用…

Ansys Mechanical|学习方法

Ansys Mechanical是Ansys的旗舰产品之一,涉及的学科体系全面丰富,包括的力学分支主要有理论力学,振动理论,连续介质力学,固态力学,物理力学,爆炸力学及应用力学等。 在自媒体及数字经济飞速发展…