mllite / ml2cpp

Machine Learning Models Deployment using C++ Code Generation
BSD 3-Clause "New" or "Revised" License
6 stars 1 forks source link

Experiments with Small Devices : C++ Compiler Validation #29

Closed antoinecarme closed 3 years ago

antoinecarme commented 3 years ago

See #25

For each device, Check the availability of a strong enough C++ compiler.

Desired functions :

  1. C++-17 support (std::any or a workaround)
  2. RTTI
  3. Exceptions
  4. ...
antoinecarme commented 3 years ago

https://en.wikipedia.org/wiki/C%2B%2B17

image

antoinecarme commented 3 years ago

ESP32 : Setup Linux Toolchain from Scratch

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-setup-scratch.html

C++ Compiler OK.

antoinecarme commented 3 years ago

Kendryte RISC-V GNU Compiler Toolchain

https://github.com/kendryte/kendryte-gnu-toolchain

C++ Compiler OK.

antoinecarme commented 3 years ago

STM32 is based on an ARM processor. gcc for arm is OK.

https://en.wikipedia.org/wiki/STM32

image

C++ Compiler OK.

antoinecarme commented 3 years ago

For K210, executables with different optimization flags , to be flashed:

-rwxr-xr-x 1 antoine antoine  689744 Nov  6 22:36 bin/k210_model1_O0
-rwxr-xr-x 1 antoine antoine  561872 Nov  6 22:36 bin/k210_model1_O0_stripped
-rwxr-xr-x 1 antoine antoine  602232 Nov  6 22:36 bin/k210_model1_O1
-rwxr-xr-x 1 antoine antoine  529080 Nov  6 22:36 bin/k210_model1_O1_stripped
-rwxr-xr-x 1 antoine antoine  589336 Nov  6 22:36 bin/k210_model1_O2
-rwxr-xr-x 1 antoine antoine  516792 Nov  6 22:36 bin/k210_model1_O2_stripped
-rwxr-xr-x 1 antoine antoine  641344 Nov  6 22:36 bin/k210_model1_O3
-rwxr-xr-x 1 antoine antoine  570040 Nov  6 22:36 bin/k210_model1_O3_stripped
-rwxr-xr-x 1 antoine antoine  578656 Nov  6 22:36 bin/k210_model1_Os
-rwxr-xr-x 1 antoine antoine 3588400 Nov  6 22:36 bin/k210_model1_Os_debug
-rwxr-xr-x 1 antoine antoine  504528 Nov  6 22:36 bin/k210_model1_Os_debug_stripped
-rwxr-xr-x 1 antoine antoine  504528 Nov  6 22:36 bin/k210_model1_Os_stripped
antoinecarme commented 3 years ago

For STM32 , executables with different optimization flags , to be flashed:

-rwxr-xr-x 1 antoine antoine 1285876 Nov  6 22:36 bin/stm32_model1_O0
-rwxr-xr-x 1 antoine antoine  227124 Nov  6 22:36 bin/stm32_model1_O0_stripped
-rwxr-xr-x 1 antoine antoine 1181476 Nov  6 22:36 bin/stm32_model1_O1
-rwxr-xr-x 1 antoine antoine  203436 Nov  6 22:36 bin/stm32_model1_O1_stripped
-rwxr-xr-x 1 antoine antoine 1217284 Nov  6 22:37 bin/stm32_model1_O2
-rwxr-xr-x 1 antoine antoine  242036 Nov  6 22:37 bin/stm32_model1_O2_stripped
-rwxr-xr-x 1 antoine antoine 1224536 Nov  6 22:37 bin/stm32_model1_O3
-rwxr-xr-x 1 antoine antoine  248020 Nov  6 22:37 bin/stm32_model1_O3_stripped
-rwxr-xr-x 1 antoine antoine 1171556 Nov  6 22:36 bin/stm32_model1_Os
-rwxr-xr-x 1 antoine antoine 1839796 Nov  6 22:36 bin/stm32_model1_Os_debug
-rwxr-xr-x 1 antoine antoine  179044 Nov  6 22:36 bin/stm32_model1_Os_debug_stripped
-rwxr-xr-x 1 antoine antoine  179044 Nov  6 22:36 bin/stm32_model1_Os_stripped
antoinecarme commented 3 years ago

For ESP32 , executables with different optimization flags , to be flashed:

-rwxr-xr-x 1 antoine antoine 1470760 Nov  6 22:36 bin/esp32_model1_O0
-rwxr-xr-x 1 antoine antoine  291532 Nov  6 22:36 bin/esp32_model1_O0_stripped
-rwxr-xr-x 1 antoine antoine 1490528 Nov  6 22:36 bin/esp32_model1_O1
-rwxr-xr-x 1 antoine antoine  369960 Nov  6 22:36 bin/esp32_model1_O1_stripped
-rwxr-xr-x 1 antoine antoine 1618392 Nov  6 22:36 bin/esp32_model1_O2
-rwxr-xr-x 1 antoine antoine  498652 Nov  6 22:36 bin/esp32_model1_O2_stripped
-rwxr-xr-x 1 antoine antoine 1621156 Nov  6 22:36 bin/esp32_model1_O3
-rwxr-xr-x 1 antoine antoine  501464 Nov  6 22:36 bin/esp32_model1_O3_stripped
-rwxr-xr-x 1 antoine antoine 1471676 Nov  6 22:36 bin/esp32_model1_Os
-rwxr-xr-x 1 antoine antoine 2255776 Nov  6 22:36 bin/esp32_model1_Os_debug
-rwxr-xr-x 1 antoine antoine  349136 Nov  6 22:36 bin/esp32_model1_Os_debug_stripped
-rwxr-xr-x 1 antoine antoine  351292 Nov  6 22:36 bin/esp32_model1_Os_stripped
antoinecarme commented 3 years ago

ESP32 compiler has some issues when linking, there is a workaround (define some functions with no-op equivalents)

https://github.com/antoinecarme/ml2cpp/blob/master/tests/small_devices_experiments/xtensa_missing_symbols.i

antoinecarme commented 3 years ago

Some info about generated executables.

file bin/*_Os_stripped
bin/esp32_model1_Os_stripped: ELF 32-bit LSB executable, Tensilica Xtensa, version 1 (SYSV), statically linked, stripped
bin/k210_model1_Os_stripped:  ELF 64-bit LSB executable, UCB RISC-V, version 1 (GNU/Linux), statically linked, BuildID[sha1]=32aa8357610c3d8673094ad13829d1f8c1805510, for GNU/Linux 4.15.0, stripped
bin/stm32_model1_Os_stripped: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, stripped
antoinecarme commented 3 years ago

All automatically generated codes for the ML model can be compiled on all devices without special tweaking.

Binary objects have been generated for all platforms.

antoinecarme commented 3 years ago

Closing