Lar*_*der 5 floating-point optimization arm fpu
我读过(http://www.stereopsis.com/FPU.html)中提到的(在x86上将float转换为int的最快方法是什么).有谁知道缓慢的简单演员(参见下面的代码片段)是否也适用于ARM架构?
inline int Convert(float x)
{
int i = (int) x;
return i;
}
Run Code Online (Sandbox Code Playgroud)
要应用FPU文章中提到的一些技巧,您必须设置浮点运算的精度.我如何在ARM上做到这一点?
在ARM体系结构上,最快的浮点转换是什么?
谢谢!
Ste*_*non 10
简短版,"不".
那篇文章很古老,甚至不适用于现代x86系统,更不用说ARM了.在ARMv7(iPhone 3GS/4)上,一个简单的转换为整数的速度相当快,尽管从VFP/NEON寄存器到通用寄存器有一个适度的停止移动数据.但是,鉴于您的float
数据可能来自在VFP/NEON寄存器中完成的计算,无论您如何进行转换,都必须为该移动付费.
我不认为这是一个有利可图的优化路径,除非你有迹象表明这是你的程序的主要瓶颈.即便如此,最快的转换是你不做的转换; 您几乎总能找到更好的方法来消除程序中的转换.
如果确实需要优化转换,请查看vcvt.i32.f32
指令,该指令将两个或四个浮点数的向量转换为两个或四个整数的向量,而不会将数据移出NEON寄存器(因此,不会产生停顿我提到过).当然,您需要在NEON单元上进行后续的整数计算,以便进行有利可图的优化.
问题:你真的想做什么?为什么你认为你需要更快的float-> int转换?