MCU 성능 측정을 할수 있는 벤치마크 방법은 여러가지가 있지만 Dhrystone, Whetstone 방식을 많이 사용한다.
각각의 특징은 아래와 같다.
- Dhrystone - 정수(ALU)연산성능 측정, MIPS 수치로 표기
- Whetstone - 부동소수점(FPU)연산성능 측정, MFLOPS 수치로 표기
테스트 코드는 STM32H MCU Dhrystone, Whetstone, IIR Benchmark 성능 테스트 를 이용하였다.
STM32G030 의 Dhrystone, Whetstone, IIR Filter 벤치마크 테스트 결과 플래시 메모리 용량 관계로 컴파일 에러가 발생한다.
정수 연산은 나쁘지 않은데 부동소수점 연산은 좋지 않다. STM32의 Cortex-M4코어와 비교하면 상당한 성능 차이가 있는것 같다.
appdata/local/arduino15/packages/stmicroelectronics/tools/xpack-arm-none-eabi-gcc/10.3.1-2.3/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe: region `FLASH' overflowed by 4868 bytes
collect2.exe: error: ld returned 1 exit status
우선 정수 연산만 확인 해 보자. 64Mhz 클럭에서 65DMIPS 정도로 Corrtexx-M0+ 코어 수준인것 같다.
mode = Arduino
Dhrmode = Arduino
Dhrystone Benchmark, Version 2.1 (Language: C)
Execution starts, 300000 runs through Dhrystone
Execution ends : 2.624 Seconds
Microseconds for one run through Dhrystone: 8.75
Dhrystones per Second: 114309.23
VAX MIPS rating = 65.06 DMIPS
부동소수점 연산은 플래시 메모리가 많이 차지하는데 옵티마이즈 옵션을 사이즈로 하면 컴파일은 되지만 속도가 많이 느리다.
Whetstone Benchmark, Version 1.2 (Language: C)
Loops: 1000, Iterations: 1, Duration: 33221 ms.
C Converted Single Precision Whetstones: 3.01 MIPS
옵티마이즈를 Speed 우선으로해서 IIR Flot 연산도 느린것 같다.
4th order float IIR speed benchmark
---------------------------------------------------
total number of samples: 15000 duration [us]: 617 ==> speed [kiloSamples/second] : 24.31
반응형