arm_neon.h是否缺少所有float16_t类型?

Pho*_*non 1 android arm simd neon

我正在使用NEON SIMD指令编写Android应用程序的一部分,目标是Cortex A8处理器.根据这篇参考手册,NEON支持16位和32位浮点数,即float16_tfloat32_t.当我尝试使用float16_t它及其所有相关的矢量类型时,我得到一个错误,说这种类型是未声明的.在查看内容时arm_neon.h,我发现这种类型确实是未声明的.

是否有一个原因?ARM的高级SIMD显然支持这些数据类型和指令.有没有人遇到/解决了这个?是否记录在任何地方?

Ste*_*non 6

Cortex-A8处理器不支持硬件中的16位浮点数.

Cortex-A9处理器确实具有在16位和32位浮点之间进行转换的指令,但这就是你得到的全部内容(而这一切应该在IEEE-754系统上提供 - float16不是用于算术的,只适用于紧凑型存储).使用模型是加载float16数据,将其转换为float32来进行算术运算,然后在存储之前转换回float16.