【MicroPython】计算性能测试
[复制链接]
一直有网友担心,MicroPython运行是否足够快,性能够不够用。所以我做了一个小测试,用python计算阶乘,看看速度到底会有多快,是否可以达到大家的期望值。
我们先编写一小段测试程序,这段代码先计算阶乘,然后计算总的耗时。测试程序如下:
import time
def fact(n):
r=1
t1=time.ticks_us()
while n>1:
r=r*n
n=n-1
t2=time.ticks_us()
print('elapsed: ', time.ticks_diff(t1,t2), 'us')
return r复制代码
我们先在小钢炮开发板上进行测试,它使用了STM32F401RE,最高主频84MHz,SRAM是64KB。
MicroPython v1.7 on 2016-04-17; CANNON with STM32F401xE
Type "help()" for more information.
>>> import fact_t
>>> n=fact_t.fact(100)
elapsed: 2534 us
>>> n=fact_t.fact(1000)
elapsed: 174353 us
>>> n=fact_t.fact(5000)
elapsed: 4223822 us
>>> n=fact_t.fact(10000)
Traceback (most recent call last):
File "", line 1, in File "fact_t.py", line 7, in fact
MemoryError: memory allocation failed, allocating 6498 bytes
计算速度还不错,计算5000阶乘也只用了4.2秒。在计算10000的阶乘时因为SRAM不足而出错。因为python支持大数计算,所以计算的位数只受SRAM大小的限制。在进行大数计算的时候,数字范围远远超出了一般数据的范围,因此比较容易测试计算性能。
在换用PYBOARD进行测试,PYBOARD使用了STM32F405RG,它的最高主频是168MHz,SRAM达到192KB。运行同样的测试,结果如下:
MicroPython v1.7 on 2016-04-17; PYBv1.0 with STM32F405RG
Type "help()" for more information.
>>> import fact_t
>>> n=fact_t.fact(100)
elapsed: 1417 us
>>> n=fact_t.fact(1000)
elapsed: 108004 us
>>> n=fact_t.fact(5000)
elapsed: 2333655 us
>>> n=fact_t.fact(10000)
elapsed: 9839525 us
>>> n=fact_t.fact(20000)
Traceback (most recent call last):
File "", line 1, in
File "fact_t.py", line 7, in fact
MemoryError: memory allocation failed, allocating 16210 bytes
得益于更高的主频和大SRAM,计算用时缩短了接近一半,计算直到20000时才内存不足。最后在试试性能更好的STM32F746DISC,它使用了STM32F746NGH6,主频达到216MHz,SRAM有320KB。
MicroPython v1.8 on 2016-05-15; F7DISC with STM32F746
Type "help()" for more information.
>>> import fact_t
>>> n=fact_t.fact(100)
elapsed: 979 us
>>> n=fact_t.fact(1000)
elapsed: 45384 us
>>> n=fact_t.fact(5000)
elapsed: 1174590 us
>>> n=fact_t.fact(10000)
elapsed: 4386010 us
>>> n=fact_t.fact(20000)
elapsed: 18040829 us
>>> n=fact_t.fact(25000)
elapsed: 33982479 us
>>> n=fact_t.fact(30000)
Traceback (most recent call last):
File "", line 1, in File "fact_t.py", line 7, in fact
MemoryError: memory allocation failed, allocating 49620 bytes
从上面的测试中,我们可以看出python的运行效率还是不错的,计算速度足以满足普通的应用。