相关疑难解决方法(0)

ARM Cortex-A8:VFP和NEON之间的区别是什么

在ARM Cortex-A8处理器中,我了解NEON是什么,它是一个SIMD协处理器.

但VFP(矢量浮点)单元也是一个协处理器,可以作为SIMD处理器使用吗?如果是这样哪个更好用?

我读了几个链接,如 -

  1. 链接1

  2. Link2.

但不是很清楚他们的意思.他们说VFP从未打算用于SIMD,但在Wiki上我读了以下内容 - " VFP架构还支持短向量指令的执行,但这些指令依次对每个向量元素进行操作,因此不提供真正的SIMD性能(单指令多数据并行. "

它不是很清楚要相信什么,任何人都可以详细说明这个话题吗?

arm simd neon cortex-a8

43
推荐指数
3
解决办法
3万
查看次数

iOS ARM设备(iPhone 4)支持低于标准的IEEE 754浮点数

在将应用程序从Linux x86移植到iOS ARM(iPhone 4)时,我发现浮点算术和小值的行为存在差异.

在IEEE 754-1985/IEEE 754-2008标准中,小于[+/-] 2.2250738585072014E-308的64位浮点数(双)被称为非正规/非正规化/次正规数.

在iPhone 4上,这样的小数字被视为零(0),而在x86上,可以使用次正规数字进行计算.

我无法在Apple的文档Mac OS X手册页上找到有关符合IEEE-754标准的任何解释.对于float(3).

但由于对堆栈溢出(一些答案刷新到零的行为在浮点运算,双VS浮在iPhone上),我已经找到了一些线索.

根据一些搜索,似乎沿着ARM内核使用的VFP(或NEON)数学协处理器正在使用Flush-To-Zero(FTZ)模式(例如,在输出处将次正常值转换为0)和Denormals-Are-Zero( DAZ)模式(例如,当用作输入参数时,将正常值转换为0)以提供快速硬件处理的IEEE 754计算.

  • 完全符合IEEE754标准的ARM支持代码
  • 运行快速模式,符合IEEE754标准(仅限硬件)

关于FTZ和DAZ的一个很好的解释可以在IA-32中的 x87和SSE浮点辅助中找到:清零(FTZ)和非正规零(DAZ):

FTZ和DAZ模式都处理发生无效浮点数据或使用下溢或非正常条件处理的情况.[...].FTZ和DAZ处理的数字之间的差异非常微妙.FTZ处理下溢情况,而DAZ处理非正规数.当计算导致非正规时,发生下溢情况.在这种情况下,FTZ模式将输出设置为零.DAZ修复了非正规用作输入时的情况,可以是常量,也可以是将无效内存读入寄存器.DAZ模式在计算之前将计算的输入设置为零.然后可以说FTZ处理[输出]而DAZ处理[输入].

关于Apple开发者网站上FTZ的唯一内容似乎是在iOS ABI函数调用指南中:

VFP状态寄存器| FPSCR | 特别| 函数调用不保留条件代码位(28-31)和饱和位(0-4).异常控制(8-12),舍入模式(22-23)和清零到零(24)位应仅由影响应用程序状态的特定例程(包括框架API函数)修改.在函数进入和退出时,短向量长度(16-18)和步长(20-21)位必须为零.不得修改所有其他位.

根据ARM1176JZF-S技术参考手册,18.5操作模式(第一个iPhone处理器),VFP可以配置为完全支持IEEE 754(子正常算术),但在这种情况下它需要一些软件支持(陷入内核到用软件计算).

注意:我还阅读了Debian的ARM Hard Float Port和VFP比较页面.

我的问题是:

  • 哪里可以找到关于跨iOS设备的次正规数处理的明确答案?

  • 是否可以设置iOS系统以支持次正规数而无需编译器仅生成完整的软件浮点代码?

谢谢.

c floating-point arm ieee-754 ios

11
推荐指数
1
解决办法
3471
查看次数

标签 统计

arm ×2

c ×1

cortex-a8 ×1

floating-point ×1

ieee-754 ×1

ios ×1

neon ×1

simd ×1