【ARMv8/ARMv9 硬件加速系列 1 -- SVE | NEON | SIMD | VFP | MVE | MPE 基础介绍】

在这里插入图片描述

文章目录

    • ARM 扩展功能介绍
      • VFP (Vector Floating Point)
      • SIMD (Single Instruction, Multiple Data)
      • NEON
      • SVE (Scalable Vector Extension)
      • SME (Scalable Matrix Extension)
      • CME (Compute Matrix Engine)
      • MVE (M-profile Vector Extension)
      • MPE (Media Processing Engine)
      • 总结

ARM 扩展功能介绍

在ARM架构中,随着各个版本的进化,引入了多种技术和扩展来增强处理能力,特别是针对浮点运算、向量计算和矩阵运算。以下是ARMv8和ARMv9中与这些相关的一些关键技术和扩展的概述:

VFP (Vector Floating Point)

VFP矢量浮点处理单元,用于提升浮点运算性能,它支持单精度和双精度浮点数的运算。之所以被称为“矢量”浮点,是因为不仅对处理浮点数的支持,而且还支持将浮点数作为SIMD运算的矢量处理。

在这种情况下“向量”是将多个数据项打包到一个更大的数据容器中(例如,连续存储在单个寄存器中的多个独立值)。这是Armv8之前Arm体系结构浮点扩展的名称。
在这里插入图片描述

在Armv7体系结构中,不推荐使用VFP扩展来处理矢量中的浮点数,因为此功能已被“高级SIMD”扩展所取代。有不同版本的VFP(VFPv1、VFPv2、VFPv3、VFPv4)引入了对新功能和数据类型的支持。VFPv2是Armv5和Armv6架构的扩展,VFPv3和VFPv4是Armv7架构的扩展。

  • 例子:在需要进行大量浮点运算的图形处理或科学计算应用中,VFP可以提供加速。

SIMD (Single Instruction, Multiple Data)

SIMD技术允许一条指令同时对多个数据进行操作。在ARMv8中,这是通过NEON实现的,NEON提供了丰富的指令对浮点和整数数据进行并行处理。

一些现代软件,尤其是多媒体编解码软件和图形加速软件,有大量的少于机器字长的数据参与运算。例如,在音频应用中16位以内数据是频繁的,在图形与视频领域8位以内数据是频繁的。

当在32位微处理器上执行这些操作时,相当一部分计算单元没有被利用,但是依然消耗着计算资源。为了更好的利用这部分闲置的资源,SIMD技术使用一个单指令来并行地在同样类型和大小的多个数据元素上执行相同的操作。通过这种方法,硬件可以在同样时间消耗内用并行的4个8位数值加法运算来替代通常的两个32位数值加法运算

Figure1.1 展示了 UADD8 R0,R1, R2 指令操作。这个操作展示了以向量形式存储在通用寄存器R1R2中的48位数值的并行加法运算。最终结果也以向量形式存储到寄存器R0

在这里插入图片描述

Figure1.1

NEON

ARMv7 架构引入了高级 SIMD 扩展作为 ARMv7-A 和 ARMv7-R 配置文件的可选扩展。NEON通过定义存储在 64 位双字长的寄存器D 和128 位四字长的寄存器Q中的向量操作指令组来扩展 SIMD 概念。

用在ARM处理器上的高级SIMD扩展的实现称为NEON,这是架构规范之外使用的通用术语。NEON技术在当前所有ARM Cortex-A系列处理器上得到了实现。

NEON 指令作为 ARM 或 Thumb 指令流的一部分执行。相比使用额外的加速器,这简化了软件的开发,调试和集成。传统的ARM或Thumb指令管理所有程序流程和同步。NEON指令涉及以下管理:

  • 内存访问
  • NEON与通用寄存器之间的数据复制
  • 数据类型转换
  • 数据处理

Figure1.2 展示了VADD.I16 Q0, Q1, Q2 指令如何并行地执行存储在Q1,Q2中的8通道16位数值的加法运算,最终结果存储到了Q0

在这里插入图片描述

Figure1.2

SVE (Scalable Vector Extension)

SVE是ARMv8-A架构的一个扩展,它是针对高性能计算(HPC)和机器学习等领域开发的一套全新的矢量指令集,它是下一代SIMD指令集实现,而不是NEON指令集的简单扩展SVE指令集中有很多概念与NEON指令集类似,例如矢量、通道、数据元素等。SVE指令集也提出了一个全新的概念:可变矢量长度编程模型(VectorLength Agnostic,VLA)。

传统的SIMD指令集采用固定大小的向量寄存器,例如NEON指令集采用固定的128位长度的矢量寄存器。而支持VLA编程模型的SVE指令集则支持可变长度的矢量寄存器。这样允许芯片设计者根据负载和成本来选择一个合适的矢量长度。SVE指令集的矢量寄存器的长度最小支持128位,最大可以支持2048位,以128位为增量。SVE设计确保同一个应用程序可以在支持不同矢量长度的SVE指令机器上运行,而不需要重新编译代码,这是VLA编程模型的精髓。

SME (Scalable Matrix Extension)

在这里插入图片描述
ARMv9 引入了 SME (Scalable Matrix Extension),SME 是基于 SVE2 定义的,旨在加速AI和机器学习应用,特别是对于大型生成式AI模型。SME通过增强矩阵操作,提供了更高的灵活性和效率,以应对日益复杂的AI需求。它建立在SVE2的基础上,新增了对矩阵tile的高效存取、向量插入提取以及矩阵转置等功能。SME还引入了Streaming SVE模式,支持高吞吐量的数据流处理,并通过ZA存储优化了硬件资源的使用。这些特性共同确保了Arm架构在AI领域的持续竞争力和创新能力。在这里插入图片描述

CME (Compute Matrix Engine)

计算矩阵引擎是执行可扩展矩阵扩展(SME)操作逻辑的名称。CME的设计使得在多个处理元件(PE)上执行的指令可以共享功能,其中“PE”是我们通常称之为集群内核心的架构术语。在这里插入图片描述

MVE (M-profile Vector Extension)

  • 简介:MVE是针对ARM Cortex-M系列处理器的向量处理扩展,旨在提高能效和处理效率,特别适用于微控制器和嵌入式系统。它提供对各种SIMD操作的支持。类似于NEON作为A级高级SIMD扩展的产品名称,“Helium”是用于M-配置文件矢量扩展的产品名。

MVE有两种变体,MVE-IMVE-FMVE-I仅支持整数矢量,MVE-F支持浮点数矢量。在处理器核心中包含MVE-F还要求处理器支持MVE-I和浮点扩展。

MPE (Media Processing Engine)

媒体处理引擎 (MPE) 是用于多个 Armv7A 处理器上的高级 SIMD 逻辑的名称:Cortex-A5、Cortex-A7 和 Cortex-A9。它也经常/通常称为“NEON MPE”或“NEON 媒体处理引擎”,它是实现 ASE/NEON 支持的处理器部分的另一个名称。
在这里插入图片描述

Structure of the MPE

总结

从VFP到SVE、SME等,ARM架构通过引入一系列技术和扩展持续在浮点运算、向量处理和矩阵计算等方面提升性能。这些技术使得ARM处理器能够广泛应用于从低功耗的嵌入式设备到高性能计算场景。随着ARMv9的推出,对AI、机器学习等领域的支持将进一步加强,标志着处理能力和效率的又一次重大提升。

推荐阅读
https://blog.csdn.net/AngelLover2017/article/details/124309644
https://aijishu.com/a/1060000000466399
https://baijiahao.baidu.com/s?id=1798716186152062162&wfr=spider&for=pc
https://blog.csdn.net/weixin_42135087/article/details/125269850

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/26594.shtml

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

相关文章

嵌入式学习记录6.13(qt day1)

一.思维导图 二.练习(简单模拟tim界面) 2.1代码 mywidget.cpp #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->setWindowTitle("Tim");this->setWindowIcon(QIcon("C:\\Users\\zy\…

微信小程序-uniapp-切换tab时数据列表如何切换?

如图: 这里有两个tab,要保证每次切换后列表保持不变,就必须在运行时要有两个持久化的数据源,每个tab是一个列表,让我们来设计一下这样的数据结构。 首先我们的数据结构是这样的: 体现在vue的data是这样的&a…

Qt多线程之moveToThread()函数

文章目录 一、moveToThread()执行后,当前代码线程没有改变。二、对象执行moveToThread()后,哪些成员加入了子线程1、创建对象时不指定父对象2、对属性对象使用moveToThread加入子线程作用域3、将属性对象的创建放到子线程中执行 三、C内存模型 在使用“继…

ollama系统更改模型存放位置

1.windows 设置完后可以在cmd中检查一下:echo %ollama_models% 2.linux 首先第一步:cd /etc/systemd/system/ 打开配置文件vim ollama.service 第二步:目录下的environment里面分号隔开添加OLLAMA_MODELS环境变量 第三步:source …

【Kadane】Leetcode 918. 环形子数组的最大和【中等】

环形子数组的最大和 给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i 1) % n] ,nums[i] 的前一个元素是 nums…

工作组局域网-ARP欺骗-攻击防御单双向

免责声明:本文仅做技术交流与学习... 目录 断网限制-单向 环境: 演示: win10: 欺骗前 欺骗后 kali: kali执行命令: win10结果: 劫持数据-双向 欺骗: 网络分析: 防御--动态解析改静态 中间人攻击 断网限制-单向 环境: 靶机:win10 攻击机:kali…

硬件电路基础

说起来在华北理工大学某个实验室当了快一年的硬件部部长,但是能力水平还是在单片机编程和应用层面(虽然也很牛逼了,但是我不介意让我更牛逼一点)。对于硬件电路的基础还不是很够。在b站偶尔刷到了我们学校隔壁电协一个学长的毕业视…

抖某音号解封释放实名

##抖音账号封禁后如何解封呢 我相信,做过抖音,或者正在做抖音的朋友,都曾面临一种尴尬至极的局面,辛辛苦苦做起来的账号,或者刚刚准备好的账号,在一时之间,竟然被抖音官方封禁了! 实…

Java项目:110 springboot夕阳红公寓管理系统的设计与实现

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统有管理员,租客 管理员权限操作的功能包括对租客,访客,缴费,维修,留言,公…

OpenCV学习(4.11) OpenCV中的图像转换

1. 目标 在本节中,我们将学习 使用OpenCV查找图像的傅立叶变换利用Numpy中可用的FFT功能傅立叶变换的一些应用我们将看到以下函数:**cv.dft()** ,**cv.idft()** 等 理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像,使用…

CoppeliaSim机器人模拟器与Matlab Simulink环境

一、CoppeliaSim机器人模拟器 CoppeliaSim(原名V-REP,Virtual Robot Experimentation Platform)是一款基于物理引擎的动力学机器人模拟器。它提供了一个集成的开发环境,支持传感器、机械、机器人、环境的系统建模与仿真。Coppeli…

【第9章】“基础工作流”怎么用?(图生图/局部重绘/VAE/更多基础工作流)ComfyUI基础入门教程

🎁引言 学到这里,大家是不是会比较纠结,好像还在持续学习新的东西,未来还有多少基础的东西要学习,才能正常使用ComfyUI呢? 这其实需要转变一个心态。 AI绘画还处于一个快速迭代的过程,隔三岔五的就会有很多新技术、新模型出现,ComfyUI目前同样处于一个快速更新的阶…

vue3之toRefs

import { reactive, toRefs } from vue;export default {setup() {// 创建一个响应式对象const state reactive({count: 0,name: Vue 3});// 使用toRefs将响应式对象的属性转换为响应式引用const refs toRefs(state);// 返回响应式引用,以便在模板中使用return {.…

白嫖 kimi 接口 api

说明:kimi当然是免费使用的人工智能AI,但是要调用api是收费的. 项目: https://github.com/LLM-Red-Team/kimi-free-api 原文地址: https://blog.taoshuge.eu.org/p/272/ railway部署 步骤: 打开Github,新建仓库新建名为Dockerfile文件(没有后缀&…

C#异步编程是怎么回事

首先以一个例子开始 我说明一下这个例子。 这是一个演示异步编程的例子。 输入job [name],在一个同步的Main方法中,以一发即忘的方式调用异步方法StartJob()。输入time,调用同步方法PrintCurrentTime()输出时间。输出都带上线程ID,便于观察。 可以看到,主线程不会阻塞。主…

Vision-LSTM: xLSTM 作为通用视觉主干

摘要 尽管Transformer最初是为自然语言处理引入的,但它现在已经被广泛用作计算机视觉中的通用主干结构。最近,长短期记忆(LSTM)已被扩展为一种可扩展且性能优越的架构——xLSTM,它通过指数门控和可并行化的矩阵内存结…

机器学习笔记 - 用于3D数据分类、分割的Point Net的网络实现

上一篇,我们大致了解了Point Net的原理,这里我们要进行一下实现。 机器学习笔记 - 用于3D数据分类、分割的Point Net简述-CSDN博客文章浏览阅读3次。在本文中,我们将了解Point Net,目前,处理图像数据的方法有很多。从传统的计算机视觉方法到使用卷积神经网络到Transforme…

【MySQL】MySQL45讲-读书笔记

1、基础架构:一条SQL查询语句是如何执行的? 1.1 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。 mysql -h$ip -P$port -u$user -p输完命令之后,输入密码。 1.2 查询缓存 MySQL 拿到一个查询请求后,会先到查询缓…

透明屏幕的显示效果如何

透明屏幕的显示效果可以从以下几个方面进行评估和描述: 透明度:透明屏幕的透光率通常在50-90%左右,具体取决于屏幕的设计和用途。这种高透明度使得屏幕在不用时可以像普通玻璃一样透明,保持视野的清晰。 色彩表现:透明…

SAP MMRV/MMPV 物料账期月结月底月初开关

公告:周一至周五每日一更,周六日存稿,请您点“关注”和“在看”,后续推送的时候不至于看不到每日更新内容,感谢。 这是一条刮刮乐,按住全部选中:点关注的人最帅最美,欢迎&#xff1…