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

Optimization ARM上的快速浮点到整数转换和浮点精度(iPhone 3GS/4),optimization,floating-point,arm,fpu,Optimization,Floating Point,Arm,Fpu,我读了()中提到的()。有人知道慢速简单转换(见下面的代码片段)是否也适用于ARM体系结构吗 inline int Convert(float x) { int i = (int) x; return i; } 要应用FPU文章中提到的一些技巧,必须设置浮点运算的精度。我怎样在手臂上做 ARM架构上最快的浮点到整数转换是什么 谢谢 简短版本,“否” 这篇文章很古老,甚至不适用于现代x86系统,更不用说ARM了。在ARMv7(iPhone3GS/4)上,简单的强制转换为整数的速度相当快,

我读了()中提到的()。有人知道慢速简单转换(见下面的代码片段)是否也适用于ARM体系结构吗

inline int Convert(float x)
{
  int i = (int) x;
  return i;
}
要应用FPU文章中提到的一些技巧,必须设置浮点运算的精度。我怎样在手臂上做

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

谢谢

简短版本,“否”

这篇文章很古老,甚至不适用于现代x86系统,更不用说ARM了。在ARMv7(iPhone3GS/4)上,简单的强制转换为整数的速度相当快,不过将数据从VFP/NEON寄存器移动到通用寄存器时会出现适度的停顿。然而,考虑到您的
浮点
数据可能来自VFP/NEON寄存器中的计算,无论您如何进行转换,您都必须为该移动支付费用

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

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


问:你到底想做什么?为什么您认为需要更快的浮点->整数转换?

请不要用实码命名这样的函数
Convert
:P@Billy我明白你的意思。Floor会更好:-)回到那时(15年前),在x86上进行正常类型转换(int)时出现性能问题,这是因为fpu寄存器中默认的float2int是Floor而不是round。所以,为了使代码在那个时代变得快速,专门编写了汇编程序。从那时开始的任何代码都希望浮点到整数的转换使用floor操作,而不是普通的round操作。然而,你可能会得到一个双重打击使用地板功能,然后投到int,而不是仅仅投到int(四舍五入到最近)。