在没有FPU的设备中使用C++中的定点运算的好处

Jav*_*ock 3 c++ optimization arm fixed-point

我想为没有浮点单元的ARM设备优化我的C++代码.我的大多数函数都使用浮点数,我正在考虑将它们更改为定点.

在ARM设备的情况下是否有真正的好处,或者编译器是否足够智能自己做到这一点?

例如,这对ARM设备更有效

//unsigned char const* input
unsigned int a, b;
a= *input++ << 12; 
b= *input++ << 12; 
a*=1024;    //0.25 shifted 12 bits
b*=1024;    //0.25 shifted 12 bits
*output++ = (a+b) >> 24;
Run Code Online (Sandbox Code Playgroud)

比做

float a,b;
a= *input++;
b= *input++;
a=a/4;
b=a/4;
*output++ = a+b;
Run Code Online (Sandbox Code Playgroud)

tre*_*nki 5

我在gp2x手持设备上做了一些编码,这个设备有一个200Mhz的ARM处理器.我正在做3D图形和使用花车进行数学运算本来就太慢了.

即使仅对每个顶点计算使用浮点数学运算,性能也比使用固定点慢得多.这是"soft-fp",编译器使用浮点仿真库.当让内核处理浮点仿真时,性能会更加糟糕.

我开发了一个C++ Fixed Point Libray,它提供了一个带有重载运算符的类,可以使用而不是float.