Nucleo STM32H5E5ZJ是一款新产品,本文是对其CPU性能进行一个测试。官方由数据可以参考,但开发环境差异应该
3 n- Z6 Q+ \; W) |: o' f# W& M6 {7 v
也能造成不同的结果,尤其是编译器的性能。
* i8 d* B+ H7 @- `+ E' k! H7 j 本次也尝试使用现在流行的AI Agent工具进行辅助。因为免费的使用AI工具对软件的操作还不如手动快,所以自己动手创建基本工程。# X) i( Q! n6 H$ K& Z# l+ g% \
使用CubeMX创建FreeRTOS工程,带上开发板的BSP
* {0 M4 m. u7 Q" U
) D$ d1 c9 l2 z
不增加任务也是可以的,在CoreMark中是会再创建任务的。
/ C6 O1 J6 S5 ~' L7 _0 J
' n: F& F1 O$ N+ N 然后工程摆在那里,给Agent输入任务,移植CoreMark到工程里。代码的结构如下图6 N3 m! @9 q( B" B- _9 P& b
2 L! @2 j4 L7 R# G
值得一提的是,代码成功率很高,编译没有问题。不过实测还是有一些问题的,比如串口配置就有冲突。最终使用BSP的串口配置,修改完并配置编译器优化选项. t# `9 k9 x, u0 _) O* n, y, ^, s' d/ K
7 A, |# A2 _3 N: b( h3 o0 N
8 y6 ^" }+ F( q5 R* l 运行结果如下
6 ] c: k3 V- E5 {' f( W( F9 A- STM32H5E5ZJT6 CORE PERFORMANCE BENCHMARK
# L8 d$ P$ z0 E& i+ M - ------------------------------------------------------------------------
& O- M6 d7 g$ @4 b - CPU : Cortex-M33 @ 250 MHz (TrustZone disabled)3 j: m3 \: F7 k1 ?; D% }
- Timebase
9 `& M, K& v/ E: }' Y Y - [09:41:22.978]收←◆ : DWT CYCCNT, 1 count = 4 ns
2 Q) o# w4 a5 t: N7 ^ - Toolchain : GNU Tools for STM32 14.3.rel14 P6 e" g0 {* \* S* F$ d
- Reference : ST official 1023 CoreMark @250MHz (4.09 CoreMark/MHz)
4 S$ w- C6 Z; M - Note : if numbers look far below reference, check that the
6 e X% q1 g$ w6 I - build profile is -O2, not -O0 (Debug default)./ Q3 y& F- y% e2 L
9 J M/ `5 ?+ J1 ~
' W: d! `# x0 @. I, `: k" W- [1] CONTEXT SWITCH (ping-pong, 2000 rounds), L7 r4 f! [/ x: \# t
- task notify (A->B) min 375 cyc ( 1500 ns) | avg 377 cyc ( 1508 ns) | max 1721 cyc ( 6884 ns) | n=2000 r4 Y& v p0 C4 o$ i2 U
- binary semaphore (A->B) min 473 cyc ( 1892 ns) | avg 476 cyc ( 1904 ns) | max 1758 cyc ( 7032 ns) | n=2000
$ G/ ?% [7 \8 w1 R9 I: K5 |; x - (value = API call + PendSV + context save/restore, one direction)
" u5 R/ T$ Q6 I# n f9 Z6 ~; z# k - : n' W9 u# a* u7 V* O
- [2] INTERRUPT LATENCY
! W4 X6 j- e. J0 T/ }1 l - software pend -> ISR min 38 cyc ( 152 ns) | avg 38 cyc ( 152 ns) | max 38 cyc ( 152 ns) | n=1" b6 m7 D4 `( J9 M {
- timer overflow -> ISR min 19 cyc ( 76 ns) | avg 19 cyc ( 76 ns) | max 20 cyc ( 80 ns) | n=46+ M" `1 x3 `# ?5 Q4 V+ O+ v, c J
- (period = 4 ns, DWT ticks; 1 tick = 4 ns)
& O3 X! L! y* W4 b( ~3 J9 ]5 h - ) V8 Q& k" w2 z$ a! I
- [3] CORE PIPELINE (business throughput @ 250 MHz)
+ L0 o: A2 O, I4 x6 h - CRC32 table 10497 us | 24.97 MB/s (24.97 Mops/s). b, b$ @& g. G3 u
- FIR Q15 64-tap x512 932 us | 0.54 Msample/s | 35.12 MMAC/s8 ~& y! Z* b: N& m) z
- FFT f32 256-pt x100 17076 us | 5.85 kFFT/s | 5.99 Mbutterfly/s
3 |; k! H- R/ Q" w - matmul i32 32x32 1214 us | 26.97 MMAC/s; `! F' t5 Q, r& _, g" a$ q
- memcpy 32KB x8 787 us | 332.83 MB/s
1 ~, ~, e$ q+ k+ E4 a - ! h: A8 s/ d2 ^; |
- [4] COREMARK (EEMBC official, 2K performance run)9 A: H$ l$ f, \7 I
- CoreMark port: STM32H5E5 / FreeRTOS / 250 MHz. U# ?3 z6 r2 r2 c7 M! D
; u9 r, J2 C' d* `; h) D; X- [09:41:39.983]收←◆2K performance run parameters for coremark.
& k" J0 H2 `/ w- W8 B - CoreMark Size : 666
4 @# b4 y) C& F; Y1 l6 Q - Total ticks : 15274/ N+ a1 m% {1 @& b1 Z& ^
- Total time (secs): 15.2740003 @) ^' w: a- G& w" P5 d8 L) V1 Z
- Iterations/Sec : 720.178080) R3 I+ O$ T6 g
- Iterations : 110001 \7 h/ i, `. j/ u5 N; l
- Compiler version : GNU Tools for STM32 14.3.rel1
) C) m1 @6 a7 j- E6 z - Compiler flags : -O2 -mcpu=cortex-m33 -mfloat-abi=hard
# Z$ `5 R+ B9 `7 j8 D* s - Memory location : STATIC
7 r5 x1 a3 b) V8 f( Z( l. V8 R0 e - seedcrc : 0xe9f5
9 Y! t* y& O/ {; O - [0]crclist : 0xe7148 q8 g J( A/ {: u$ _$ R
- [0]crcmatrix : 0x1fd7( r- U, U) R: ~0 g# h, A! S
- [0]crcstate : 0x8e3a, ]0 W5 Y" I. Z6 Q, e7 ?4 `% n
- [0]crcfinal : 0x33ff& ~7 z D6 G% S" d
- Correct operation validated. See README.md for run and reporting rules.
4 K) ]/ C8 n8 L; ]& K8 S2 [: g- U& h2 S - CoreMark 1.0 : 720.178080 / GNU Tools for STM32 14.3.rel1 -O2 -mcpu=cortex-m33 -mfloat-abi=hard / STATIC
复制代码 对比官方如下5 e( \) J9 n V0 k% X X$ U( h3 V/ g
* n5 b. ]$ h7 [: j, d
因为gcc没有MDK和IAR的编译器效率高,这是大家的共识,所以结果也就娱乐一下,不做真实性对照。单过程是真实有效的。0 Z0 O9 A5 s; O- V* o2 K! F
中断响应 76 ns已达 Cortex-M33 架构下限,任务切换 1.51 微秒与 FreeRTOS 在同类内核上的表现一致,系统级实时性没有短板。
4 F2 Q& F3 A: k4 h 用 GCC 在 -O3 下拿到 2.881CoreMark/MHz,与社区同类实测水平吻合。
! O6 d" \# ?! {* U5 [ 当前 FIR、FFT、CRC 均为标量朴素实现,改用CMSIS-DSP 与查表优化后有 3~4 倍空间,这部分收益远大于在编译器选项上抠百分点。$ G4 Y* n7 ~5 G6 _; k, z1 d2 p
1 X0 B# l: M( p% }
7 E/ O+ o- b( l% Z' Q! I |