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

    文章

    228

    浏览量

    24235
  • SIMD
    +关注

    关注

    0

    文章

    36

    浏览量

    10866

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    modbus消息帧的模块化架构介绍

    MODBUS消息帧的模块化架构 1. 地址字段:通信寻址的核心 Modbus RTU协议采用单字节(8位)地址字段,支持1-247个从站设备(0保留为广播地址)。 广播机制:地址0的报文会被所有从站
    发表于 11-17 08:15

    时钟周期、机器周期、指令周期介绍

    执行操作,以时钟作为驱动完成每一步。因此时钟周期决定了计算机的工作节奏,进而影响到计算机工作速度。 机器周期:通常用从内存中读取一个指令字的最短时间来规定CPU周期(机器周期),也即CPU完成一个
    发表于 11-17 07:54

    C语言的printf基本用法介绍

    大家只需要掌握最基本的用法,以后随着编程知识的学习,我们会逐步介绍更加高级的用法,最终让大家完全掌握 printf。
    发表于 11-12 07:04

    欧盟CE-RED指令介绍

    欧盟CE-RED指令,全称是RadioEquipmentDirective(无线电设备指令),指令编号为2014/53/EU,是欧盟针对所有带无线发射功能设备制定的一项强制性法规。它是欧盟CE认证
    的头像 发表于 11-05 14:01 287次阅读
    欧盟CE-RED<b class='flag-5'>指令</b><b class='flag-5'>介绍</b>

    人脸识别和AES加密协同的SOC设计架构

    这个是我们整体的架构图。我们SOC主要包括了三个模块组,计算核心组,系统外设组,数据外设组。计算核心组包括了RISCV内核,RISCV内核中集成了一个ITCM和DTCM的指令存储器和数据存储器。另外
    发表于 10-29 08:21

    利用蜂鸟内核实现指令的仿真模拟

    现在我们组在进行浮点扩展,既然要进行扩展,我们必须能够检验扩展的正确性,因此本篇文章介绍一下自己编写指令,并通过仿真观察指令结果的正确性。 RSIC-V指令
    发表于 10-24 08:52

    利用蜂鸟内核来实现指令的仿真模拟

    现在我们组在进行浮点扩展,既然要进行扩展,我们必须能够检验扩展的正确性,因此本篇文章介绍一下自己编写指令,并通过仿真观察指令结果的正确性。 RSIC-V指令
    发表于 10-24 08:17

    对于指令集中back2back情况的简单介绍

    两个4位操作数相乘的结果。但是对于RISC-V架构的CPU来说,它所有的通用寄存器都是32位的,如果我们要进行两个32位操作数的乘法操作,那该如何保存这个操作的结果呢?RISC-V对于乘除法相关的指令
    发表于 10-23 06:52

    基于蜂鸟E203架构指令集K扩展

    蜂鸟E203是一款基于RISC-V架构的微处理器,其指令集包含RV32I的基本指令集,RV32M的乘法扩展指令集,以及一些常用的定点指令和控
    发表于 10-21 09:38

    浮点指令扩展中16位指令的处理

    指令取代对应的宽指令由它们决定。 为了能在一系列的程序上得到良好的代码压缩效果, RISC-V 架构师精心挑选了 RVC扩展中的指令。同时,基于以下的三点观察,
    发表于 10-20 11:02

    同一水平的 RISC-V 架构的 MCU,和 ARM 架构的 MCU 相比,运行速度如何?

    ARM 架构与 RISC-V 架构的 MCU 在同一性能水平下的运行速度对比,需从架构设计原点、指令特性及实际测试数据展开剖析。以 ARM
    的头像 发表于 07-02 10:29 1201次阅读
    同一水平的 RISC-V <b class='flag-5'>架构</b>的 MCU,和 ARM <b class='flag-5'>架构</b>的 MCU 相比,运行速度如何?

    步进电机控制指令详解

    这些指令主要是针对用 PLC 直接联动伺服放大器,目的是可以不借助其他扩展设备(例如1GM 模块)来进行简单的点位控制, 使用这些指令时最好配合三菱的伺服放大器 (如 MR-J2)。然而,我们也可以用这些指令来控制步进电机的运行
    的头像 发表于 06-12 10:33 1583次阅读
    步进电机控制<b class='flag-5'>指令</b>详解

    RISC-V核低功耗MCU指令架构(ISA)特点

    RISC-V核低功耗MCU通过开源生态、模块化架构与能效优化技术,成为物联网、穿戴设备等领域的理想选择‌。 一、‌开源与可定制性‌ 完全开源免费‌:RISC-V ISA无需专利授权费用,允许开发者
    的头像 发表于 04-23 10:01 1036次阅读

    CPU的各种指令和执行流程

    、数据传输等功能。要深入理解CPU的指令,我们需要从多个维度进行分析,尤其是指令的构成、分类、执行流程以及与不同架构的关系。
    的头像 发表于 04-18 11:24 1907次阅读

    RISC-V架构及MRS开发环境回顾

    一、RISC-V架构介绍 1. RISC 架构的起源 1981年,在David Patterson(大卫·帕特森)的带领下,美国加州大学伯克利分校的一个研究团队起 草了RISC-I,是今天RISC
    发表于 12-16 23:08