为了了解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系列(高性能高安全通用型)也会比较值得期待。
引用: 秦天qintian0303 发表于 2024-4-28 09:14 esp32c3到esp32c6,为什么中间跨度这么大?
厂家任性啊