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

2024-06-01 00:42:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在和python一起研究覆盆子派。我用互补滤波器从陀螺仪中得到更好的值,但是它消耗了太多的树莓的能量——大约70%。我想我可以通过降低浮点精度来提高性能。现在,结果有12位小数,这比我需要的要多。有没有办法设置最大精度?仅仅四舍五入这个数字不符合我的需要,因为这只是另一种计算。谢谢!在

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


Tags: 模块方法编辑覆盆子精度数字性能树莓
2条回答

可以使用numpy强制单精度浮点计算。在

但是,如果使用单精度浮点运算速度比双精度快,我会非常惊讶:raspberry pi支持硬件浮点,所以我希望所有的计算都是在完全80位精度下完成的,然后在保存到内存时四舍五入得到32位或64位的结果。唯一可能的增益是在保存值时使用的内存带宽稍小一些。在

可能是你找错了方向。在

陀螺仪的数据流相当慢,所以你应该有足够的时间用任何合理的过滤器过滤它。即使是Kalman滤波器也应该是可用的(尽管可能是不必要的)。你多久采样一次陀螺仪和加速计数据?合理的最大值是几百赫兹,而不是更多。在

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

根据使用互补滤波器所做的工作,滤波器本身需要一些浮点运算。如果你计算弧切线或等效函数,那就需要几百次浮点运算。如果你以1千赫的速率这样做,你可能会消耗几百kFLOPS(每秒浮点运算)。RPi的FP吞吐量大约为100 MLFOPS,因此有很大的余量。在

因此,降低FP精度不会有很大帮助,问题出在别处。也许如果你多展示一点代码,就可以确定问题出在哪里了!在

相关问题 更多 >