5

我阅读了(在 x86 上将 float 转换为 int 的最快方法是什么)中提到的( http://www.stereopsis.com/FPU.html)。有谁知道缓慢的简单转换(见下面的片段)是否也适用于 ARM 架构?

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

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

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

谢谢!

4

1 回答 1

11

简短版本,“不”。

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

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

如果您确实需要优化转换,请查看vcvt.i32.f32指令,该指令将两个或四个浮点数的向量转换为两个或四个整数的向量,而无需将数据移出 NEON 寄存器(因此,不会导致停顿我提到的)。当然,您需要在 NEON 单元上进行后续整数计算,这样才能实现有利可图的优化。

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

于 2010-08-15T05:50:26.077 回答