ESP32がどれくらいの性能なのかをある程度客観的に押さえておくために、ESP32でCoreMarkベンチマークを動かしてみます。
Espressifのフォーラムの情報をかなり参考にしましたが、私の手元の環境ではそのままでは動かなかったため、一部手順を変えています。
前提・注意事項
- ESP-IDFがインストールしてあること。
- ESP32の片コアのみで実行するものとする
- 実験環境: macOS Mojava
- 対象ボード: HUZZAH32 (たまたま手元にあったものを使用。ESP32-DevKitCでも手順は変わらない)
Step1: ESP-IDF一式をワークディレクトリにコピーする。
$ mkdir workspace $ cd workspace # 適当なディレクトリを作り、そこに移動する。 $ cp -r $IDF_PATH/examples/get-started/hello_world CoreMark $ cd CoreMark
Step2: CoreMarkのソースコードをクローンする。
$ git clone https://github.com/eembc/coremark.git
Step3: CoreMarkの中から必要なファイルのみ取り出し、不要なファイルを削除する。
$ cd coremark $ cp core_list_join.c core_main.c coremark.h core_matrix.c core_state.c core_util.c simple/core_portme.c simple/core_portme.h ../main/ $ cd .. $ rm -rf coremark main/hello_world_main.c
Step4: ESP32用にファイルを書き換える。
main/core_portme.c
の38行目
volatile ee_s32 seed4_volatile=ITERATIONS;
→
volatile ee_s32 seed4_volatile=10000;
main/core_portme.h
の77行目
#define COMPILER_FLAGS FLAGS_STR /* "Please put compiler flags here (e.g. -o3)" */
→
#define COMPILER_FLAGS "-Os" /* "Please put compiler flags here (e.g. -o3)" */
main/core_portme.h
の159行目
#define MAIN_HAS_NOARGC 0
→
#define MAIN_HAS_NOARGC 1
main/core_main.c
の89行目
MAIN_RETURN_TYPE main(void) {
→
MAIN_RETURN_TYPE app_main(void) {
Step5: ビルドパラメータを設定する。
$ make menuconfig
メニューから以下のパラメータを設定する。
- Compiler options > Optimization Level
最適化オプションを最大レベルにする。
( ) Debug (-Og) (X) Release (-Os)
- Component config > Common ESP-related
ベンチマーク実行中にウォッチドッグタイマーが動作しないようにする。
[ ] Interrupt watch dog [ ] Initialize Task Watchdog Timer on startup
- Component config > ESP32-specific
最大クロックで動作するようにする。
( ) 80MHz ( ) 160MHz (X) 240MHz
- Serial flasher config > Default serial port
ESP32に書き込むためのシリアルポートを指定する(実行環境に応じて変えること)
/dev/tty.SLAB_USBtoUART
Step6: ビルドする。
$ make -j4
Step7: 正常にビルドできたらESP32に書き込んで実行する。
$ make flash monitor (中略) 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 28200 Total time (secs): 28.200000 Iterations/Sec : 354.609929 Iterations : 10000 Compiler version : GCC5.2.0 Compiler flags : -Os Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x988c Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 354.609929 / GCC5.2.0 -Os / STACK
この最後の行の354.609929がCoreMark値となる。
コメント