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)
我在gp2x手持设备上做了一些编码,这个设备有一个200Mhz的ARM处理器.我正在做3D图形和使用花车进行数学运算本来就太慢了.
即使仅对每个顶点计算使用浮点数学运算,性能也比使用固定点慢得多.这是"soft-fp",编译器使用浮点仿真库.当让内核处理浮点仿真时,性能会更加糟糕.
我开发了一个C++ Fixed Point Libray,它提供了一个带有重载运算符的类,可以使用而不是float.