【FireBeetle 2 ESP32 C6】几种esp32性能对比测试
[复制链接]
为了了解esp32c6的性能,在手上的几个开发板上,做了一个简单的性能对比。编写了一小段测试程序,分别计算分形、圆周率等。测试不是太严谨,只作为一个参考。
从左到右分别是:rpi PICO、esp32s2、esp32s3、esp32c3、esp32c6,硬件方面的对比请参考【FireBeetle 2 ESP32 C6】esp32系列芯片对比 这个帖子。
测试程序如下,包括了加法、乘法(除法)、分形、圆周率等计算程序,分别计算每项测试所用的时间,时间越短代表性能越好。为了保证在相同的环境下进行测试,在测试前,将开发板的固件都升级到最新的测试版本。
from time import ticks_ms, ticks_diff
from machine import freq
from platform import platform
import gc
def run(func, *param):
gc.collect()
t1 = ticks_ms()
if param == None:
func()
else:
func(*param)
t2 = ticks_ms()
print('calc time:', ticks_diff(t2, t1), 'ms\n')
def mandelbrot(iter=80):
def in_set(c):
z = 0
for i in range(iter):
z = z * z + c
if abs(z) > 4:
return False
return True
for v in range(31):
for u in range(81):
if in_set((u / 30 - 2) + (v / 15 - 1) * 1j):
print(' ', end='')
else:
print('#', end='')
print()
def pi(places=100):
# 3 + 3*(1/24) + 3*(1/24)*(9/80) + 3*(1/24)*(9/80)*(25/168)
# The numerators 1, 9, 25, ... are given by (2x + 1) ^ 2
# The denominators 24, 80, 168 are given by (16x^2 -24x + 8)
extra = 8
one = 10 ** (places+extra)
t, c, n, na, d, da = 3*one, 3*one, 1, 0, 0, 24
while t > 1:
n, na, d, da = n+na, na+8, d+da, da+32
t = t * n // d
c += t
return c // (10 ** extra)
def add_test(N=100000, A=1.1, B=2.2):
for i in range(N):
A + B
def mul_test(N=100000, A=1.1, B=2.2):
for i in range(N):
A * B
print('\nSystem:', platform())
print('Frequency:', freq())
print('Memory:', gc.mem_free()+gc.mem_alloc())
print('\nBegin test\n')
print('Calculate 1000000 additions')
run(add_test, 1000000)
print('Calculate 1000000 multiplications')
run(mul_test, 1000000)
print('Calculate 1000000 divisions')
run(mul_test, 1000000, 12345, 1/13)
print('Calculate mandelbrot with iterations 200')
run(mandelbrot, 200)
print('Calculate 1000 digits of pi')
run(pi, 1000)
print('Calculate 10000 digits of pi')
run(pi, 10000)
测试结果(时间单位是ms)
|
esp32c3 |
esp32c6 |
esp32s2 |
es32s3 |
rpi PICO |
频率 |
160MHz |
160MHz |
160MHz |
160MHz |
125MHz |
ram |
203264 |
342528 |
7797248 |
252416 |
233024 |
加法 1000000 次 |
5798 |
5642 |
7693 |
6403 |
10392 |
乘法 1000000 次 |
5955 |
5555 |
7670 |
6334 |
10257 |
除法 1000000 次 |
6263 |
5937 |
7307 |
5884 |
10313 |
mandelbrot (迭代次数 200) |
4526 |
3862 |
8154 |
4122 |
7331 |
计算圆周率 1000 位 |
407 |
420 |
675 |
463 |
562 |
计算圆周率 10000 位 |
32997 |
30260 |
60229 |
36467 |
66017 |
从测试结果可以看到,esp32c6在性能上,相比esp32c3略有提升,综合起来有5-10%左右。几种esp32芯片的性能差异都不算太大,但risc-v内核的esp32cx系列还是略有优势。这样看起来,后续的H系列(低成本低功耗无线通信)和P系列(高性能高安全通用型)也会比较值得期待。
|