降低python中的浮点精度以提高性能

时间:2014-07-09 08:46:04

标签: python performance raspberry-pi floating-point-precision

我在raspberry pi上使用python。我正在使用互补滤波器从陀螺仪中获得更好的值,但它吃掉了太多覆盆子的力量 - 它大约是70%。我以为我可以通过降低浮点精度来提高性能。现在,结果大约有12个小数位,这比我需要的还多。有没有办法设置最大精度?只是舍入数字不符合我的需要,因为它只是另一个计算。谢谢!

编辑:我尝试使用十进制模块并将精度设置为6,它比浮点数慢近6倍!有没有其他方法可以使用定点数而不是Decimal(它看起来创建的精度高于性能)

2 个答案:

答案 0 :(得分:3)

您可以使用numpy强制进行单精度浮点计算。

然而,如果使用单精度浮点运算速度比双精度更快,我会感到非常惊讶:raspberry pi具有硬件浮点支持,所以我希望所有计算都以80位精度完成,然后舍入为保存到内存时会产生32位或64位结果。唯一可能的增益是在保存值时使用的内存带宽略少。

答案 1 :(得分:2)

你可能有错误的一端。

陀螺仪的数据流速度相当慢,因此您应该有足够的时间用任何合理的滤波器对其进行过滤。甚至卡尔曼滤波器也应该可用(尽管可能是不必要的)。您多久对陀螺仪和加速度计数据进行采样?合理的最大值是几百赫兹,而不是更多。

用于加速度计和陀螺仪测量的互补滤波器非常轻便,它本身应该消耗很少的处理能力。它可以在一个缓慢的8位处理器上实现,因此Raspberry对它来说太快了。

根据您对互补滤波器的处理方式,滤波器本身需要一些浮点运算。如果计算arcus切线或等效函数,则需要数百个FLOP。如果以1 kHz的速率执行此操作,您可能会消耗几百kFLOPS(每秒浮点运算)。 RPi的FP吞吐量大约为100 MLFOPS,因此有很多余量。

降低FP精度因此无济于事,问题出在其他地方。也许如果你展示一些代码,可以确定问题出在哪里!