0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SVE架构特性和指令基本用法介绍

安芯教育科技 来源:极术社区 作者:yang 2021-02-08 10:05 次阅读

SVE(Scalable Vector Extension)是arm AArch64架构下的下一代SIMD指令集,旨在加速高性能计算,SVE引入了很多新的架构特点, 比如

• 可变矢量长度

• 每通道预测

• 聚集加载和分散存储

• 横向操作

本文将对SVE做个基本介绍。

1. SIMD指令发展史 intel vs arm

eea2c696-6258-11eb-8b86-12bb97331649.jpg

从上图我们可以看出,SIMD指令总体趋势是向着越来越长的方向发展的,到了arm SVE,最长可以支持2048位的矢量操作。

2. 背景

Armv7的高级SIMD (即arm NEON 或“MPE” 多媒体处理引擎) 指令集自2005年发布,已经面世十几年了。Armv7 NEON的主要特性如下:

• 支持8/16/32位整数操作,支持非IEEE兼容单精度浮点操作,支持指令条件执行

• 32个64位矢量寄存器,也可视为16个128位矢量寄存器

• 旨在CPU端加速多媒体处理任务

在升级到armv8架构时,AArch64 NEON指令集做出了许多改进,比如:

• 支持IEEE兼容单精度和双精度浮点操作和64位整数矢量操作

• 32个128位矢量寄存器

• 这些改进使NEON指令集更适用于通用计算,而不仅仅是多媒体计算

但是到了现在,armv8的新市场需要更彻底的SIMD指令改进。我们需要能够并行处理非常规数据和复杂数据结构,也需要更长的矢量,SVE因此而生,SVE旨在加速高性能计算。

3. SVE特性

SVE是armv8 AArch64架构的下一代SIMD指令集,它不是NEON的替代,而是聚焦于高性能计算。主要特性如下:

• 可变矢量长度

• 128位的整数倍。 最高可支持2048位

• 不同的实现可以适应不同的应用场景,不用更改指令集

• 每通道预测

• 支持复杂嵌套循环和if/then/else条件跳转, 没有循环尾数。

• 聚集加载和分散存储支持复杂数据结构,如步长数据存取、数组索引,链表等。

• 横向操作

• 支持基本的reduction操作,降低循环依赖性

4. SVE寄存器

SVE寄存器有两种:矢量寄存器和预测寄存器。

SVE共有32个可变长矢量寄存器Z0-Z31(128位的整数倍, 最高可达2048位) ,其中Z0-Z31的低128位[127:0],与AArch64 SIMD&FP寄存器V0-V31共享硬件资源。假设SVE的矢量长度为256,其矢量寄存器视图如下。SVE支持8/16/32/64位整数操作和单精度/双精度浮点操作。

eed8e460-6258-11eb-8b86-12bb97331649.jpg

SVE预测寄存器用于控制每通道操作,有16个可变长预测寄存器P0-P15。每一个预测寄存器的位对应矢量寄存器的字节。假设SVE的矢量长度为256,预测寄存器在管理32位和64位操作时,其视图如下。在控制32位数据操作时,如果Pg寄存器的最低为1,则该通道操作为激活状态,该通道操作结果被正常存储到目的寄存器;如果Pg寄存器的最低为0,则该通道操作为未激活状态,该通道操作结果不会被存储到目的寄存器,目的寄存器的该通道数据有两种可能:

• 指令指定为Pg/z - 清零模式,该通道数据被清零。

• 指令指定为Pg/m – 合并模式,该通道数据保持原值

ef163554-6258-11eb-8b86-12bb97331649.jpg

5. SVE指令实例

下面我们通过一些实例来介绍常用SVE指令的用法。

a. 矢量加法

大家也许都熟悉NEON的指令格式(如下),NEON指令通过对指令助记符添加“f”前缀来区分整数操作和浮点操作,如“add”和“fadd”;另外通过寄存器后缀“.2s”、“.4s”、“.2d”表示操作两个32位、四个32位数据、两个64位数据。

• add v0.4s, v0.4s, v1.4s

• fadd v0.2s, v0.2s, v1.2s

• fadd v0.2d, v0.2d, v1.2d

SVE指令也通过对指令助记符添加 “f” 前缀来区分整数操作和浮点操作。但是SVE是未知矢量长度编程,因此在指令中我们只需要指明操作数据类型就可以了。

• add z0.s, z0.s, z1.s

• fadd z0.s, z0.s, z1.s

• fadd z0.d, z0.d, z1.d

b. 矢量加载

对于加载指令,NEON指令通过助记符“ld1”、“ld2”表示加载一维数组、二维数组;通过寄存器后缀“.8h”、“.4s”表示加载八个16位、四个32位数据。

• ld1 {v0.8h}, [x1]

• ld1 {v0.4s}, [x1]

• ld2 {v0.4s, v1,4s}, [x1]

SVE加载指令添加指令助记符后缀 “h“、”w“表示读取存储元素宽度;寄存器后缀”.h“、”.s“表示元素在寄存器中的宽度。寄存器元素宽度必须大于等于读取存储宽度。对于加载指令,读取元素可以通过符号扩展或者零扩展填充到矢量寄存器;对于存储指令,每个矢量元素被截断后存储到内存中。

• ld1h {z0.h}, p0/z, [x1]

• ld1w {z0.s}, p0/z, [x1]

• ld2w {z0.s, z1.s}, p0/z, [x1]

6. 小结

本文简单介绍了SVE架构特性和指令基本用法,后续还会再写文章介绍如何在C程序中利用SVE。

原文标题:一文了解SIMD指令集SVE(可伸缩矢量扩展),加速高性能计算

文章出处:【微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指令集
    +关注

    关注

    0

    文章

    206

    浏览量

    23174
  • SIMD
    +关注

    关注

    0

    文章

    33

    浏览量

    10226

原文标题:一文了解SIMD指令集SVE(可伸缩矢量扩展),加速高性能计算

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式系统的概念与范围开发 指令架构要怎么选才合适?

    想要搭建一套嵌入式系统,首先得确认想要采用的指令架构(Instruction Set Architectures, ISA),各家的指令架构各有其优缺点与拥护者,本文将为您大致
    的头像 发表于 03-28 09:35 187次阅读
    嵌入式系统的概念与范围开发 <b class='flag-5'>指令</b>集<b class='flag-5'>架构</b>要怎么选才合适?

    三菱FX系列PLC置位与复位指令的使用教程

    有关三菱PLC置位与复位指令的功能说明,以FX2N为例,介绍其基本逻辑指令和步进指令用法,置位与复位
    发表于 12-26 10:19 1250次阅读
    三菱FX系列PLC置位与复位<b class='flag-5'>指令</b>的使用教程

    现代处理器的主要指令架构

    ​ ​现代处理器的主要指令架构(ISA)包括:x86指令架构、RISC指令架构
    的头像 发表于 12-11 09:55 1094次阅读
    现代处理器的主要<b class='flag-5'>指令</b>集<b class='flag-5'>架构</b>

    plsy指令具体用法

    、WAV等。下面将详细介绍plsy的用法。 安装: 在使用plsy之前,首先需要在Unix系统中安装。你可以通过在终端上运行以下命令来安装plsy: sudo apt-get install plsy
    的头像 发表于 12-08 14:10 858次阅读

    ARM Cortex-A510核心软件优化指南

    )和SVE2 SIMD指令集, 提供高级SIMD(ASIMD)和浮点(FP)架构支持·支持单独许可的可选加密扩展·活动监控单元(AMU)本文档介绍了影响软件性能的Cortex-A510
    发表于 08-28 08:15

    移植和优化Arm SVE文档的HPC应用程序

    可伸缩向量扩展(SVE)是Armv8.2-A中引入的AArch64的可选向量扩展。 与其他SIMD架构不同,SVE不定义向量寄存器的大小,而是将其限制在一个可能的值范围内,从最小128位到最大
    发表于 08-24 07:46

    欧姆龙比较指令用法 欧姆龙cmp指令用法

    首先我们了解一下欧姆龙CMP指令,CMP指令是一种用于比较两个数值的指令,常用于控制系统中的逻辑判断和决策。该指令可以比较两个16位的数据,如果它们相等,则将零标志位设置为1,否则将其
    发表于 08-23 11:12 2774次阅读
    欧姆龙比较<b class='flag-5'>指令</b>的<b class='flag-5'>用法</b> 欧姆龙cmp<b class='flag-5'>指令</b><b class='flag-5'>用法</b>

    ARMv8-A TrustZone软件对实施SVE的系统的影响

    本文档介绍ARMv8-A[ARMv8]的可伸缩向量扩展[SVE]对在应用程序处理器上以安全状态执行的软件的影响。 本文档考虑了部署现有ARMv8-A TrustZone软件对实施SVE的系统的影响,并为实施
    发表于 08-23 06:17

    SVE编程示例

    集。 这种下一代ARM SIMD指令集称为可伸缩向量扩展(SVE)。 它允许矢量长度不可知的编码风格,其中代码不需要重新编写或重新编译,因为它动态地适应所实现的矢量长度。 SVE架构
    发表于 08-22 06:29

    SVE优化指南

    。 Arm 现有的高级 SIMD 指令集。 SVE 的应用包括机器学习( ML)、高性能计算(HPC)、数据分析以及可能的任何可计算约束软件。 请参看 SVE 指南的导言, 以便更完整地介绍
    发表于 08-17 08:06

    针对ARM SVE 4.0版移植和优化HPC应用程序文档

    介绍如何将高性能计算(HPC)应用程序移植到基于SVE的Arm硬件,如何在移植后开始优化应用程序,以及Arm提供了哪些工具可以提供帮助。
    发表于 08-10 07:11

    Arm编译器可扩展矢量扩展用户指导

    包含SVE指令的ELF对象文件。 •使用高级自动矢量器为启用SVE的目标编译C和C++代码,该矢量器能够利用SVE特性。 •使用内部函数直接
    发表于 08-08 06:34

    SVE编码和霓虹灯编码之间的区别

    Neon技术是Armv8-A架构配置文件的高级单指令多数据(SIMD)功能。Neon是指令架构(ISA)的一个功能,提供可以对多个数据流并行执行数学运算的
    发表于 08-02 18:35

    了解Armv9-A体系结构之SVE2简介

    的比较。 我们还描述了如何为 SVE2 启用目标开发一个程序。 在您开始之前, 文章假定您已经熟悉以下概念 : 单指令多数据 ; 神经 神经 · 神经可缩放 ; 如果您不熟悉这些概念, 读 : • 将 Neon 引入 Armv8- A 的 ; 什么是可缩放矢量扩展(
    发表于 08-02 08:19

    SCL语言for指令用法

    小文老师说在最前面: 今天来给大家讲一下for这个指令用法,在PLC编程中,能用好for指令,会让我们的开发效率更高,想要更好的调用for指令,我们今天通过这篇文章,几分钟的时间带你严
    的头像 发表于 06-19 14:51 1628次阅读
    SCL语言for<b class='flag-5'>指令</b>的<b class='flag-5'>用法</b>