ARM(iPhone 3GS / 4)上的快速浮点到int转换和浮点精度

时间:2010-08-14 14:09:25

标签: optimization floating-point arm fpu

我读了(http://www.stereopsis.com/FPU.html)中提到的(What is the fastest way to convert float to int on x86)。有谁知道慢速简单转换(参见下面的代码片段)是否也适用于ARM体系结构?

inline int Convert(float x)
{
  int i = (int) x;
  return i;
}

要应用FPU文章中提到的一些技巧,您必须设置浮点运算的精度。我如何在ARM上做到这一点?

ARM架构上最快的浮点转换是什么?

谢谢!

1 个答案:

答案 0 :(得分:10)

简短版,“不”。

那篇文章很古老,甚至不适用于现代x86系统,更不用说ARM了。在ARMv7(iPhone 3GS / 4)上,一个简单的转换为整数的速度相当快,尽管从VFP / NEON寄存器到通用寄存器有一个适度的停止移动数据。但是,鉴于您的float数据可能来自在VFP / NEON寄存器中完成的计算,无论您如何进行转换,都必须为该移动付费。

我不认为这是一条有利可图的优化路径,除非您有迹象表明这是您的计划的主要瓶颈。即便如此,最快的转换是你不做的转换;你几乎总能找到减少程序转换的算法方法。

如果真正需要优化转换,请查看vcvt.i32.f32指令,该指令将两个或四个浮点数的向量转换为两个或四个整数的向量没有将数据移出NEON寄存器(因此,不会引起我提到的失速)。当然,您需要在NEON单元上进行后续的整数计算,才能实现盈利优化。

问题:你真正试图做什么?为什么你认为你需要更快的float-> int转换?