作者:yang来源极术社区:SVE(可伸缩矢量扩展)介绍

SVE(可伸缩矢量扩展)介绍
SVE(Scalable Vector Extension)是arm AArch64架构下的下一代SIMD指令集,旨在加速高性能计算,SVE引入了很多新的架构特点, 比如
• 可变矢量长度
• 每通道预测
• 聚集加载和分散存储
• 横向操作
本文将对SVE做个基本介绍。
1. SIMD指令发展史 intel vs arm

从上图我们可以看出,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位整数操作和单精度/双精度浮点操作。

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

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。

扩展单精度格式是什么_SVE(可伸缩矢量扩展)介绍相关推荐

  1. 扩展单精度格式是什么_网络资讯:EPS 是什么

    今天来说一下EPS 是什么这方面的一些讯息,不少朋友对EPS 是什么这方面的一些讯息颇感兴趣的,小编今天就整理了一些信息,希望对有需要的朋友有所帮助. EPS是Adobe Illustrator中基于 ...

  2. 英特尔® 高级矢量扩展(AVX)指令集简介

    来源:https://software.intel.com/zh-cn/articles/introduction-to-intel-advanced-vector-extensions 作者:Chr ...

  3. 使用ABAP绘制可伸缩矢量图

    Jerry去年的文章 动手使用ABAP Channel开发一些小工具,提升日常工作效率 里曾经介绍过一些用ABAP实现的可供娱乐的小程序,比如用古老的HPGL接口在SAPGUI里绘图: 关于如何用SA ...

  4. 【Google Play】APK 扩展包 ( 2021年09月02日最新处理方案 | 扩展文件名格式 | 扩展文件下载存放地址 )

    文章目录 前言 一.当前 Google Play 上传 APK 文件现状 二.APK 扩展文件名格式 三.APK 扩展文件下载地址 四.博客资源 前言 2021年08月01日 之后 , Google ...

  5. 常用数据库的 扩展名 格式 后缀 端口

    Access数据库的扩展名是.mdb MSSQL数据库的扩展名是.mdf MySQL数据库的扩展名是.myd Paradox SQLite 数据库的扩展名是.db Oracle数据库的扩展名是.dbf ...

  6. Chrome浏览器扩展开发系列之一:初识Google Chrome扩展

    1.       Google Chrome扩展简介 Google Chrome扩展是一种软件,以增强Chrome浏览器的功能. Google Chrome扩展使用HTML.JavaScript.CS ...

  7. safari的java扩展_用 Web 技术为 Safari 编写扩展

    原标题:用 Web 技术为 Safari 编写扩展 作者:希德,iOS 开发者,前"有经验的前端开发工程师",就职于网易严选.正在写书<Thinkable SwiftUI&g ...

  8. windows server 2012中配置扩展文件服务器之实现,Wins 2012中实现扩展文件服务器的7个步骤...

    要学习在Windows Server 2012中实现扩展文件服务器的具体步骤,首先我们得介绍下扩展文件服务器背后的技术SMB 3.0和CSV 2.0. SMB 3.0 和CSV 2.0是扩展文件服务器 ...

  9. 【转】Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展

    引用自: http://blog.163.com/yesaidu@126/blog/static/51819307200861853827582/ Part I: A step-by-step tut ...

最新文章

  1. STL笔记(5)条款49:学习破解有关STL的编译器诊断信息
  2. 猿团专访云信CTO阙杭宁——网易云信“稳定”背后的秘密
  3. Apache增加SSL功能的步骤
  4. xilinx FPGA的远程更新(动态加载)详解(Using a Microprocessor to Configure 7 Series FPGAs)
  5. oracle数据库主键自增序列_oracle数据库ID自增长--序列
  6. EL表达式和JSTL标准标签库
  7. Vuejs 写法实例
  8. Java Applet 问题汇总
  9. Oracle日期和时间总结
  10. 我为什么放弃了 Chrome?
  11. CentOS7添加Nginx为系统服务
  12. Data()笔记之getDate()的基本用法
  13. raster2pgsql命令参数详解
  14. 计算机网络之网络层-网络层拥塞控制
  15. Python中的and和or运算
  16. 后渗透之关闭防火墙、杀毒软件并开启远程桌面
  17. XCode14 iOS16适配 pod签名
  18. 高效剪辑,给多个视频同时添加上下图片的操作方法
  19. 【C++】用递归函数实现Hermite多项式求值
  20. Visual Studio 2013 下载地址 V12各种版本官方下载网址

热门文章

  1. vue路由异步组件案例
  2. airflow 部署
  3. android studio使用ndk,jni随记
  4. 解析对象体内与方法体内引用内部方法的不同
  5. android 开发对gif解码(适配android 4.2、4.3、4.4版本)
  6. 十大经典排序算法5(Python版本)
  7. 微课|玩转Python轻松过二级:第3章课后习题解答2
  8. 使用Python检查密码安全程度
  9. 数据中心安全风控_平安银行Hadoop集群跨数据中心迁移项目告捷项目骨干专访
  10. 电子计算机专业211大学,这所高校不是211,但“计算机”实力远超985,被称“IT人才摇篮”...