当前位置: 首页 > news >正文

Arm Cortex-M的FP和MVE

Floating-point Support目前Arm architecture支持的floating-point extension版本是FPv5。FPv5提供了以下功能单精度算术运算可选的双精度算术运算整数、双精度、单精度、和半精度格式之间的转换用于浮点处理的寄存器S0-S31或D0-D15在Arm通用寄存器(GPR)和FPv5 extension寄存器S0-S31或D0-D15之间进行单精度或双精度值的数据传输软件可以启用或禁用的“Flush-to-zero”模式IEEE 754-2008的半精度格式和alternative半精度格式通过FPSCR.AHP指示选择哪一种FPv5也增加了以下系统寄存器在CP10和CP11系统寄存器空间的FPSCRSCB里的FPCAR, FPCCR, FPDSCR, MVFR0, MVFR1和MVFR2从Armv8.1-M开始FPv5提供半精度算术运算。当floating-pointer extension实现时软件可以查询MVFR0, MVFR1和MVFR2来查看所实现的浮点特性有哪些。另外执行产生floating-point exception的floating-point指令会更新FPSCR的一些状态字段。FPv5为浮点处理添加的寄存器如下所示32单精度寄存器S0-S3116双精度寄存器D0-D15这些寄存器映射关系如下Arm手册使用的浮点术语与IEEE 754-2008中使用的术语不同如下Arm支持的标准浮点运算有IEEE 754-2008再加上以下配置Flush-to-zero mode enabled.Default NaN mode enabled.Round to Nearest mode selected.Alternative half-precision interpretation not selected.根据IEEE 754的定义FPv5支持以下浮点数据Normalized numbers.Denormalized numbers.Zeros, 0 and -0.Infinities, ∞ and −∞.NaNs, signaling NaNs and quiet NaN.另外Denormalized的数字可以使用Flush-to-zero模式刷新为0。IEEE 754 Floating-point exception有:Invalid OperationDivision by zeroOverflowUnderflowInexact这些IEEE 754浮点exception对应的状态标志是FPSCR.{IOC, DZC, OFC, UFC,IXC}Flush-to-zero mode当Flush-to-zero mode开启时所有floating-point操作的single-precision denormalized输入、double-precision denormalized输入或half-precision denormalized输入都会被视为0也就是说它们的值被刷新为0了。当floating-point操作的输入被刷新为0时PE生成一个输入denormal exception。而且输入denormal exception也只有在Flush-to-zero mode下才会产生的。当floating-point操作的结果刷新为零时PE生成一个Underflow exception。当floating-point数字被刷新为0时符号将被保留。也就是说0的符号位与被刷新为0的数字的符号位相匹配。NaNNaN是Not a Number的缩写。当数值和无穷大都不合适时可以使用的NaN浮点值。NaN可以是quiet NaN通过大多数浮点操作传输也可以是signaling NaN在使用时导致Invalid Operation floating-point exception。当启用Default NaN模式时Default NaN是以下两种情况的结果所有产生untrapped Invalid Operation exception的浮点操作。所有输入至少包含一个queit NaN但不包含signaling NaN的浮点运算。Vector ExtensionVector指令对固定的128-bit矢量宽度进行操作。MVE-I可以操作32-bit16-bit和8-bit数据类型。MVE-F也可以对half-precision和single-precision floating-point值进行操作。Vector操作分为两种正交的方式LanesBeats每个beat可以执行多个lanesElement表示放入每个beat的一个lane中的数据。每个vector指令有4个beats。Vector指令的伪代码是按一个beat来写的因此需要执行4次才是一个vector指令的真正功能。GetCurInstrBeat()函数返回当前节beat数和predication细节。它们决定了在当前执行代码期间对哪些lanes进行操作。Lanes正被执行的指令决定了操作的lane宽度。每一个beat允许的lane宽度和lane操作有For a 64-bit lane size, a beat performs half of the lane operation.For a 32-bit lane size, a beat performs a one lane operation.For a 16-bit lane size, a beat performs a two lane operations.For an 8-bit lane size, a beat performs a four lane operations.Beatsvector指令按顺序执行beat从节拍0-3开始。在一般情况下每个tick的beat数目描述了在每个architecture tick下更新了多少architectural state。在一个简单的实现中一个architecture tick可能是一个时钟周期In a single-beat system, one beat might occur for each tick.In a dual-beat system, two beats might occur for each tick.In a quad-beat system, four beats might complete for each tick.每个architecture tick执行多少beats是IMPLEMENTATION DEFINED的。每个tick的beat数可能在运行时改变不需要保持恒定。在一个architecture tick内可能出现多个faults。在这种情况下只有一个fault会raise起来被raise情况的fault按以下优先级确定来自最早指令的fault优先如果多个fault与最早的fault指令相关联则按编码按最低beat产生的fault优先在dual-beat overlap系统中vector指令的最后两个beat和下一条vector指令的前两个beat可以重叠处理。下面是一个dual-beat系统的例子其中每个architecture tick可以处理两个beat。如图PE可以从任何有效的ECI值恢复exception continuable instruction的执行即使PE不能生成所有的ECI值。对于vector指令来说只有当该条的所有beats都完成后PC才会更新。由于Vector的load和store会产生多笔memory访问Arm规定了由同一Observers对同一vector store指令生成的多个elements写入可以按任何顺序被观察到但不同elements对同一位置的写入是按vector element number递增的顺序被观察的。如果CCR.BFHFNMIGN为1如果请求为负priority且执行一条指令产生多个load或store访问时生成了BusFault该 BusFault可能会影响该指令生成的所有访问而不仅仅是生成BusFault的访问。Vector register fileMVE定义了8个向量寄存器Qn它们复用Floating-point Extension的寄存器实体。Q[0][127:96] S3, Q[0][95:64] S2, Q[0][63:32] S1, Q[0][31:0] S0Q[1][127:96] S7, Q[1][95:64] S6, Q[1][63:32] S5, Q[1][31:0] S4...Q[7][127:96] S31, Q[7][95:64] S30, Q[7][63:32] S29, Q[7][31:0] S28这些寄存器映射如下为了减少对vector register的压力许多vector指令可以使用GPR作为参数。Predication/conditional executionMVE包括predication机制可以在vector操作中对每个lane进行独立屏蔽。它支持以下predication机制Loop tail predication循环尾部预测它消除了如果要处理的elements数量不是vector中element数量的倍数那么在循环之后需要特殊的vector尾部代码处理的需求。VPT predication这使得基于数据值比较的数据相关条件能够单独屏蔽每个向量lane。Loop tail predication和VPT predication是分开操作的。每个机制产生的predication标记加在一起。因此只有当loop tail predication和VPT predication的条件都为真时vector操作的一个lane才会处于active状态。MVE interleaving/de-interleaving loads and stores对于包含MVE的实现可以使用VLD2/VLD4和VST2/VST4以步长2/步长4进行interleave和de-interleave处理数据流。Interleaving和de-interleaving指令每次总是对128-bit数据进行操作。当使用VLD4时4条VLD4指令中每一条都读取128-bit数据并部分更新四个目的vector寄存器。要访问的memory地址偏移量和目的寄存器部分安排如下
http://www.gsyq.cn/news/1377683.html

相关文章:

  • 黑龙江省同江市寄快递省钱指南|全网高性价比寄件渠道汇总,寄全国省心又划算 - 时讯资讯
  • 2026宣威市黄金回收白银回收铂金回收店铺哪家好 实力靠谱门店排行榜推荐及联系方式 - 亦辰小黄鸭
  • ArcGIS Pro平差工具实战:从‘三调’到日常,聊聊面积数据整合的那些坑与最佳实践
  • 从硬球碰撞数据中学习H函数:用DeepSets与孪生网络发现时间箭头
  • 从伪加密ZIP到RSA解密:手把手带你复现BUUCTF那道ACTF新生赛Crypto题
  • 2026咸阳市黄金回收白银回收铂金回收店铺哪家好 实力靠谱门店排行榜推荐及联系方式 - 亦辰小黄鸭
  • 基于Voronoi描述符与神经网络的胶体多体相互作用建模
  • c++乱码问题
  • 告别‘胶水’封装:一文看懂UCIe 1.0如何用PCIe/CXL‘缝合’CPU与加速器
  • Windows安卓子系统终极优化指南:如何通过WSABuilds实现完美Android体验
  • 2026襄阳市黄金回收白银回收铂金回收店铺哪家好 实力靠谱门店排行榜推荐及联系方式 - 亦辰小黄鸭
  • Windows热键冲突终极指南:3分钟找出偷走你快捷键的“小偷“
  • 5分钟快速解锁中兴光猫:终极免费工具zteOnu完整指南
  • 2026孝感市黄金回收白银回收铂金回收店铺哪家好 实力靠谱门店排行榜推荐及联系方式 - 亦辰小黄鸭
  • 符号回归的范式革命:SISSO如何让机器学习模型重新拥抱可解释性
  • 如何像硬件工程师一样调校你的AMD Ryzen处理器:SMUDebugTool完全指南
  • 从‘位置’到‘父子关系’:彻底搞懂Godot节点坐标系的3层理解(附调试方法)
  • 2026辛集市黄金回收白银回收铂金回收店铺哪家好 实力靠谱门店排行榜推荐及联系方式 - 亦辰小黄鸭
  • 从酒店评论到情感分析:手把手教你用fastText做文本分类(Python实战避坑指南)
  • 深入解析AlienFX Tools:从硬件直连到个性化灯光控制的完整技术方案
  • JMeter原生不支持gRPC?压测插件实战指南
  • 5分钟快速上手:D3KeyHelper暗黑3技能连点器完全指南
  • UE5 GAS技能系统避坑指南:搞懂这8个标签配置,别再让技能乱放或放不出来
  • 基于隐马尔可夫结构的伊辛模型:凯莱树上的精确推断与机器学习应用
  • Linux服务器挖矿木马排查与加固实战指南
  • Python调用WebAssembly破解APP签名算法实战
  • Python运算符:成员运算符(in/not in)的使用场景
  • 流体-机器人多物理场仿真:统一框架与工程实践
  • 2026 郑州装修公司综合实力 TOP10:五大维度深度测评 - 资讯纵览
  • 2026新乐市黄金回收白银回收铂金回收店铺哪家好 实力靠谱门店排行榜推荐及联系方式 - 亦辰小黄鸭