【FireBeetle 2 ESP32 C6】几种esp32性能对比测试

dcexpert   2024-4-27 11:18 楼主

为了了解esp32c6的性能,在手上的几个开发板上,做了一个简单的性能对比。编写了一小段测试程序,分别计算分形、圆周率等。测试不是太严谨,只作为一个参考。

 

从左到右分别是:rpi PICO、esp32s2、esp32s3、esp32c3、esp32c6,硬件方面的对比请参考【FireBeetle 2 ESP32 C6】esp32系列芯片对比 这个帖子。

 

图片.png  

 

测试程序如下,包括了加法、乘法(除法)、分形、圆周率等计算程序,分别计算每项测试所用的时间,时间越短代表性能越好。为了保证在相同的环境下进行测试,在测试前,将开发板的固件都升级到最新的测试版本。

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系列(高性能高安全通用型)也会比较值得期待。

 

 

回复评论 (3)

楼主总结的esp32性能对比内容非常实用,对挑选板子非常具有参考价值,感谢楼主的分享

点赞  2024-4-27 14:06

esp32c3到esp32c6,为什么中间跨度这么大?  

在爱好的道路上不断前进,在生活的迷雾中播撒光引
点赞  2024-4-28 09:14
引用: 秦天qintian0303 发表于 2024-4-28 09:14 esp32c3到esp32c6,为什么中间跨度这么大?  

厂家任性啊

点赞  2024-4-28 09:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复