[architecture]-armv8-aarch64种的SIMD/FP指令介绍
快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈
目录
1、hardware floating-point 和 Software floating-point
在 ARMv8 中,hardware floating-point 是架构中的部分。AArch32 状态支持 Software floating-point,但 AArch64 状态不支持 Software floating-point
ARM 系统可能具有:
- VFP 协处理器,即支持hardware floating-point
- 没有浮点硬件,即不支持hardware floating-point
如果您为带有硬件 VFP 协处理器的系统进行编译,则 ARM 编译器会使用它。
如果您为没有协处理器的系统编译,编译器会在软件中实现计算。例如,编译器选项-mfloat-abi=hard
选择硬件 VFP 协处理器,该选项-mfloat-abi=soft
指定算术运算将在软件中执行,而不使用任何协处理器指令。
2、armv8中的浮点型介绍
浮点寄存器组与 SIMD 寄存器使用相同的扩展寄存器,且是banked的。
在 AArch32 状态下,除了添加了一些符合 IEEE 754 标准的指令外,浮点支持与 VFPv4 基本没有变化。
AArch64 状态的浮点架构也是基于 VFPv4。主要区别如下:
- 在 AArch64 状态下,128 位 SIMD 和浮点寄存器的数量从16个增加到32个。
- 单精度寄存器不再打包成双精度寄存器,因此寄存器 Sx为 D x[31:0]。
- 浮点硬件的存在是强制性的,因此不支持软件浮点链接。
- AArch64 状态不支持早期版本的浮点架构,例如 VFPv2、VFPv3 和 VFPv4。
- AArch32 或 AArch64 状态不支持 VFP 矢量模式。对向量浮点使用高级 SIMD 指令。
- 添加了一些新说明,包括:
半精度和双精度之间的直接转换。
加载和存储对,替换加载和存储多个。
融合乘加和乘减。
IEEE 754-2008 兼容性说明
3、扩展寄存器的map图
- 32个 128-bit registers V0-V31. (也叫q0-q31,其实是q0-q31直接map到了v0-v31)
- 32个 64-bit registers D0-D31.
- 32个 32-bit registers S0-S31.
- 32个 16-bit registers H0-H31.
- 32个 8-bit registers B0-B31.
4、存储指令对浮点型寄存器的操作
例如:
- LDP Qt1, Qt2, addr //将两个连续的四字从addr寻址的内存中加载到128位Qt1和Qt2中
- STP Qt1, Qt2, addr //将128位Qt1和Qt2的两个连续四字存储到addr寻址的内存中。
(使用是咧)
5、SIMD和浮点型的对比
基本概念:
- VFP : 是指浮点型运算器的架构,如vfpv3 vfpv4,目前在armv8上使用的都是vfpv4
- FP : 是指hardware float-point 指令
- SIMD :是指SIMD指令
- NEON :也一种提供SIMD指令的技术
补充NEON简介
NEON :Arm Neon 技术是适用于 Arm Cortex-A 和 Cortex-R 系列处理器的高级单指令多数据 (SIMD : Single Instruction Multiple Data) 的架构扩展。Neon 技术旨在通过加速音频和视频编码和解码、用户界面、2D/3D 图形和游戏来改善多媒体用户体验。Neon 还可以加速信号处理算法和功能,以加快音频和视频处理、语音和面部识别、计算机视觉和深度学习等应用的速度。
做为一名软件工程师,您可以通过以下方式使用ARM NEON技术
- Neon intrinsics
- Neon-enabled libraries
- Auto-vectorization by your compiler
- Hand-coded Neon assembler
总结: 我猜的哈,VFP是一个运算器(相当于ALU那种),它操作的是v0-v31寄存器(也可以说是q0-q31), 进行浮点型运算。而NEON技术,又提供了一些SIMD指令,也是使用VFP运算器,也是使用V0-V31寄存器。
参考
About floating-point support
Floating-point hardware
Extension register bank mapping in AArch64 state
NEON
![](http://assets.processon.com/chart_image/604719347d9c082c92e419de.png)
相关文章
- 布局尺度单位介绍
- 一个性能较好的jvm參数配置以及jvm的简单介绍
- 地球引擎初级教程——Python API 介绍何安装(通过 Anaconda方法安装)
- Google Earth Engine(GEE)——Landsat 系列卫星及其算法的介绍(新手必备)!
- 百度攻城狮训练营2021-工程能力study1 -- 1.1设计方法与实践介绍 脑图整理
- Mock框架应用(一)-Mock介绍
- swift1.2语言函数和闭包函数介绍
- 《Tableau 8权威指南》—— 1 Tableau 8介绍
- Http协议中Cookie详细介绍
- 论文教程之阅读科学论文11步法,详细介绍了每个部分的关注点
- Vim三种操作模式下的指令介绍
- JS魔法堂:Data URI Scheme介绍