Changes

Jump to: navigation, search
Testbed
|January 2020
|First public release
|-
|1.0.1
|March 2020
|Added more details about the software configuration
|}
 
==Introduction==
According to [https://community.nxp.com/docs/DOC-343798 NXP documentation], ''eIQ Machine Learning Software is a collection of software and development tools for NXP microprocessors and microcontrollers to do inference of neural network AI models on embedded systems.''
This Technical Note (TN for short) illustrates hot how to use [https://www.nxp.com/design/software/development-software/eiq-ml-development-environment:EIQ eIQ] in combination with Mito8M, one of the DAVE Embedded Systems's latest SoM's, which is built upon the [https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i.mx-applications-processors/i.mx-8-processors/i.mx-8m-family-armcortex-a53-cortex-m4-audio-voice-video:i.MX8M i.MX8M processor by NXP].
==Testbed==
With regards regard to the hardware, the testbed consists of the same platform described [[MISC-TN-008:_Running_Debian_Buster_(armbian)_on_Mito8M |here]].
Concerning the software, the following combination was used:
* U-Boot 2018.03 retrieved from the standard Mito8M Yocto-based Board Support Package (BSP)
* Device tree retrieved from the standard Mito8M Yocto-based BSP
* Linux kernel imx8qmmek 4.14.98-imx_4.14.98_2.0.0(built with the Linux L4.14.98 GA Yocto BSP release for i.MX 8 family of devices with support for NXP eIQ software)* eIQ-enabled YocotYocto-based root file system(built with the Linux L4.14.98 GA Yocto BSP release for i.MX 8 family of devices with support for NXP eIQ software); as such, this root file system includes the following packages:**OpenCV 4.0.1**Arm Compute Library 19.02**Arm NN 19.02**ONNX runtime 0.3.0**TensorFlow 1.12**TensorFlow Lite 1.12.
For more information about the kernel and the root file system, please refer to the following section.
 
==Building NXP eIQ software==
NXP document [https://www.nxp.com/docs/en/nxp/user-guides/UM11226.pdf UM11226Rev. 2, 06/2019] illustrates how to build eIQ software support using Yocto Project tools. Even though the official procedure was tested against Ubuntu 16.04, a the build was completed successfully on the host running Ubuntu 18.04 was used successfullyas well.  By following step by step the official procedure,         
The build process produces several artifacts:
<pre class="board-terminal">
~/devel/eIQ/fsl-arm-yocto-bsp/build-xwayland/tmp/deploy/images/imx8qmmek$ ll
total 7434020
drwxr-xr-x 3 sysadmin sysadmin 12288 gen 28 15:28 ./
drwxrwxr-x 3 sysadmin sysadmin 4096 gen 27 17:31 ../
-rw-r--r-- 2 sysadmin sysadmin 102464 gen 28 13:37 dpfw.bin
-rw-r--r-- 1 sysadmin sysadmin 160725 gen 28 14:45 fsl-image-qt5-imx8qmmek-20200128133644.testdata.json
-rw-r--r-- 2 sysadmin sysadmin 5603590144 gen 28 15:18 fsl-image-qt5-imx8qmmek-20200128141054.rootfs.ext4
-rw-r--r-- 2 sysadmin sysadmin 124653 gen 28 15:17 fsl-image-qt5-imx8qmmek-20200128141054.rootfs.manifest
-rw-r--r-- 2 sysadmin sysadmin 1654353401 gen 28 15:21 fsl-image-qt5-imx8qmmek-20200128141054.rootfs.sdcard.bz2
-rw-r--r-- 2 sysadmin sysadmin 1644018076 gen 28 15:18 fsl-image-qt5-imx8qmmek-20200128141054.rootfs.tar.bz2
-rw-r--r-- 1 sysadmin sysadmin 160723 gen 28 15:16 fsl-image-qt5-imx8qmmek-20200128141054.testdata.json
lrwxrwxrwx 2 sysadmin sysadmin 50 gen 28 15:18 fsl-image-qt5-imx8qmmek.ext4 -> fsl-image-qt5-imx8qmmek-20200128141054.rootfs.ext4
lrwxrwxrwx 2 sysadmin sysadmin 54 gen 28 15:17 fsl-image-qt5-imx8qmmek.manifest -> fsl-image-qt5-imx8qmmek-20200128141054.rootfs.manifest
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 28 15:28 fsl-image-qt5-imx8qmmek.sdcard.bz2 -> fsl-image-qt5-imx8qmmek-20200128141054.rootfs.sdcard.bz2
lrwxrwxrwx 2 sysadmin sysadmin 53 gen 28 15:27 fsl-image-qt5-imx8qmmek.tar.bz2 -> fsl-image-qt5-imx8qmmek-20200128141054.rootfs.tar.bz2
lrwxrwxrwx 1 sysadmin sysadmin 52 gen 28 15:16 fsl-image-qt5-imx8qmmek.testdata.json -> fsl-image-qt5-imx8qmmek-20200128141054.testdata.json
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 fsl-imx8qm-mek_ca53.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek_ca53-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 fsl-imx8qm-mek_ca72.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek_ca72-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 61 gen 27 17:52 fsl-imx8qm-mek-dom0-dpu2.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-dom0-dpu2-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 fsl-imx8qm-mek-dom0.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-dom0-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 60 gen 27 17:52 fsl-imx8qm-mek-domu-car.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-domu-car-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 61 gen 27 17:52 fsl-imx8qm-mek-domu-dpu1.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-domu-dpu1-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 66 gen 27 17:52 fsl-imx8qm-mek-domu-dpu1-hdmi.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-domu-dpu1-hdmi-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 fsl-imx8qm-mek-domu.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-domu-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 63 gen 27 17:52 fsl-imx8qm-mek-dsi-rm67191.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-dsi-rm67191-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 55 gen 27 17:52 fsl-imx8qm-mek-dsp.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-dsp-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 51 gen 27 17:52 fsl-imx8qm-mek.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 65 gen 27 17:52 fsl-imx8qm-mek-enet2-tja1100.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-enet2-tja1100-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 fsl-imx8qm-mek-hdmi.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-hdmi-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 59 gen 27 17:52 fsl-imx8qm-mek-hdmi-in.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-hdmi-in-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 58 gen 27 17:52 fsl-imx8qm-mek-inmate.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-inmate-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 73 gen 27 17:52 fsl-imx8qm-mek-jdi-wuxga-lvds1-panel.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-jdi-wuxga-lvds1-panel-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 58 gen 27 17:52 fsl-imx8qm-mek-ov5640.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-ov5640-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 fsl-imx8qm-mek-root.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-root-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 57 gen 27 17:52 fsl-imx8qm-mek-rpmsg.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-rpmsg-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 102464 gen 28 13:37 hdmirxfw.bin
-rw-r--r-- 2 sysadmin sysadmin 102464 gen 28 13:37 hdmitxfw.bin
lrwxrwxrwx 2 sysadmin sysadmin 46 gen 27 17:52 Image -> Image--4.14.98-r0-imx8qmmek-20200127085034.bin
-rw-r--r-- 2 sysadmin sysadmin 104066 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 104066 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek_ca53-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 104066 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek_ca72-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 111054 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-dom0-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 110689 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-dom0-dpu2-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 54940 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-domu-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 56334 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-domu-car-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 52888 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-domu-dpu1-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 53027 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-domu-dpu1-hdmi-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 104761 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-dsi-rm67191-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 104533 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-dsp-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 104241 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-enet2-tja1100-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 104770 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-hdmi-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 105058 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-hdmi-in-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 5472 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-inmate-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 104313 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-jdi-wuxga-lvds1-panel-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 104988 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-ov5640-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 104613 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-root-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 103884 gen 27 17:52 Image--4.14.98-r0-fsl-imx8qm-mek-rpmsg-20200127085034.dtb
-rw-r--r-- 2 sysadmin sysadmin 23163392 gen 27 17:52 Image--4.14.98-r0-imx8qmmek-20200127085034.bin
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 Image-fsl-imx8qm-mek_ca53.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek_ca53-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 Image-fsl-imx8qm-mek_ca72.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek_ca72-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 61 gen 27 17:52 Image-fsl-imx8qm-mek-dom0-dpu2.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-dom0-dpu2-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 Image-fsl-imx8qm-mek-dom0.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-dom0-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 60 gen 27 17:52 Image-fsl-imx8qm-mek-domu-car.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-domu-car-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 61 gen 27 17:52 Image-fsl-imx8qm-mek-domu-dpu1.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-domu-dpu1-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 66 gen 27 17:52 Image-fsl-imx8qm-mek-domu-dpu1-hdmi.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-domu-dpu1-hdmi-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 Image-fsl-imx8qm-mek-domu.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-domu-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 63 gen 27 17:52 Image-fsl-imx8qm-mek-dsi-rm67191.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-dsi-rm67191-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 55 gen 27 17:52 Image-fsl-imx8qm-mek-dsp.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-dsp-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 51 gen 27 17:52 Image-fsl-imx8qm-mek.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 65 gen 27 17:52 Image-fsl-imx8qm-mek-enet2-tja1100.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-enet2-tja1100-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 Image-fsl-imx8qm-mek-hdmi.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-hdmi-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 59 gen 27 17:52 Image-fsl-imx8qm-mek-hdmi-in.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-hdmi-in-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 58 gen 27 17:52 Image-fsl-imx8qm-mek-inmate.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-inmate-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 73 gen 27 17:52 Image-fsl-imx8qm-mek-jdi-wuxga-lvds1-panel.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-jdi-wuxga-lvds1-panel-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 58 gen 27 17:52 Image-fsl-imx8qm-mek-ov5640.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-ov5640-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 56 gen 27 17:52 Image-fsl-imx8qm-mek-root.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-root-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 57 gen 27 17:52 Image-fsl-imx8qm-mek-rpmsg.dtb -> Image--4.14.98-r0-fsl-imx8qm-mek-rpmsg-20200127085034.dtb
lrwxrwxrwx 2 sysadmin sysadmin 46 gen 27 17:52 Image-imx8qmmek.bin -> Image--4.14.98-r0-imx8qmmek-20200127085034.bin
-rwxr-xr-x 2 sysadmin sysadmin 8928 gen 28 13:43 imx8qm_m4_0_TCM_hello_world_m40.bin*
-rwxr-xr-x 2 sysadmin sysadmin 20576 gen 28 13:43 imx8qm_m4_0_TCM_rpmsg_lite_pingpong_rtos_linux_remote_m40.bin*
-rwxr-xr-x 2 sysadmin sysadmin 20000 gen 28 13:43 imx8qm_m4_0_TCM_rpmsg_lite_str_echo_rtos_m40.bin*
-rwxr-xr-x 2 sysadmin sysadmin 8928 gen 28 13:43 imx8qm_m4_1_TCM_hello_world_m41.bin*
-rwxr-xr-x 2 sysadmin sysadmin 40204 gen 28 13:43 imx8qm_m4_1_TCM_power_mode_switch_m41.bin*
-rwxr-xr-x 2 sysadmin sysadmin 27736 gen 28 13:43 imx8qm_m4_1_TCM_rpmsg_lite_pingpong_rtos_linux_remote_m41.bin*
-rwxr-xr-x 2 sysadmin sysadmin 27888 gen 28 13:43 imx8qm_m4_1_TCM_rpmsg_lite_str_echo_rtos_m41.bin*
lrwxrwxrwx 2 sysadmin sysadmin 40 gen 28 13:45 imx-boot-imx8qmmek-sd.bin -> imx-boot-imx8qmmek-sd.bin-flash_linux_m4
-rw-r--r-- 2 sysadmin sysadmin 1398784 gen 28 13:45 imx-boot-imx8qmmek-sd.bin-flash_linux_m4
-rw-r--r-- 2 sysadmin sysadmin 1348608 gen 28 13:45 imx-boot-imx8qmmek-sd.bin-flash_spl
drwxr-xr-x 2 sysadmin sysadmin 4096 gen 28 13:45 imx-boot-tools/
-rw-rw-r-- 2 sysadmin sysadmin 3383601 gen 27 17:52 modules--4.14.98-r0-imx8qmmek-20200127085034.tgz
lrwxrwxrwx 2 sysadmin sysadmin 48 gen 27 17:52 modules-imx8qmmek.tgz -> modules--4.14.98-r0-imx8qmmek-20200127085034.tgz
-rw-r--r-- 2 sysadmin sysadmin 47104 gen 28 13:37 mx8qm-ahab-container.img
lrwxrwxrwx 2 sysadmin sysadmin 16 gen 27 17:31 tee.bin -> tee.mx8qmmek.bin*
-rwxrwxr-x 2 sysadmin sysadmin 316600 gen 27 17:31 tee.mx8qmmek.bin*
lrwxrwxrwx 2 sysadmin sysadmin 24 gen 28 13:44 u-boot.bin -> u-boot-sd-2018.03-r0.bin
lrwxrwxrwx 2 sysadmin sysadmin 24 gen 28 13:44 u-boot.bin-sd -> u-boot-sd-2018.03-r0.bin
lrwxrwxrwx 2 sysadmin sysadmin 24 gen 28 13:44 u-boot-imx8qmmek.bin -> u-boot-sd-2018.03-r0.bin
lrwxrwxrwx 2 sysadmin sysadmin 24 gen 28 13:44 u-boot-imx8qmmek.bin-sd -> u-boot-sd-2018.03-r0.bin
-rw-r--r-- 2 sysadmin sysadmin 692722 gen 28 13:43 u-boot-sd-2018.03-r0.bin
lrwxrwxrwx 2 sysadmin sysadmin 49 gen 28 13:44 u-boot-spl.bin -> u-boot-spl.bin-imx8qmmek-2018.03-r0-sd-2018.03-r0
lrwxrwxrwx 2 sysadmin sysadmin 49 gen 28 13:44 u-boot-spl.bin-imx8qmmek -> u-boot-spl.bin-imx8qmmek-2018.03-r0-sd-2018.03-r0
-rw-r--r-- 2 sysadmin sysadmin 78789 gen 28 13:44 u-boot-spl.bin-imx8qmmek-2018.03-r0-sd-2018.03-r0
lrwxrwxrwx 2 sysadmin sysadmin 49 gen 28 13:44 u-boot-spl.bin-imx8qmmek-sd -> u-boot-spl.bin-imx8qmmek-2018.03-r0-sd-2018.03-r0
lrwxrwxrwx 2 sysadmin sysadmin 49 gen 28 13:44 u-boot-spl.bin-sd -> u-boot-spl.bin-imx8qmmek-2018.03-r0-sd-2018.03-r0
</pre>
Regarding this TN, two of them are of interest: the Linux kernel image (<code>Image--4.14.98-r0-imx8qmmek-20200127085034.bin</code>) and the ext4 root file system image (<code>fsl-image-qt5-imx8qmmek-20200128141054.rootfs.ext4</code>).
Please note that the building process takes several hours to complete and that almost 180 GB of disk space are required:
<pre class="board-terminal">
~/devel/eIQ/fsl-arm-yocto-bsp$ du -ch --max-depth=1
313M    ./.repo
99M     ./sources
30G     ./downloads
147G    ./build-xwayland
177G    .
177G    total
</pre>
==Configuring the target==
The procedure described by NXP makes use of an SD card to store all the software. For convenience, a different approach was followed to test eIQ with Mito8M. While the internal eMMC was used to store U-Boot, the device tree and the Linux kernel image were retrieved via TFTP over the Ethernet connection. Also, the board was configured to mount the root file system via NFS. The resulting configuration reminds the one described [[Deploying_Embedded_Linux_Systems#The_development_environment|here]].
For a detailed dump of the full bootstrap process, please refer to the following section.
===Bootstrap process===
Please click on ''Expand'' on the top right corner to open the box.
<pre class="board-terminal mw-collapsible mw-collapsed">
U-Boot SPL 2018.03-08018-g59e59e6f85-dirty (Nov 29 2019 - 12:42:16 +0100)
imx8qmmek login:
</pre>
 
 
==Running TensorFlow and TensorFlow Lite examples==
To verify that the root file system was generated properly, a couple of ready-to-use examples were run. Again, to execute them, please follow the procedure described in [https://www.nxp.com/docs/en/nxp/user-guides/UM11226.pdf UM11226].
The first one example makes use of TensorFlow:
<pre class="board-terminal">
root@imx8qmmek:~/devel/tensorflow# ls -la
The other one is based on TensorFlow Lite:
<pre class="board-terminal">
root@imx8qmmek:~/devel/tensorflowlite# ls -la
total 77744
drwxr-xr-t 2 200714 89939 4096 Aug 3 2018 .
drwxr-xr-x 4 root root 4096 Jan 28 16:23 ..
-rw-r--r-- 1 200714 89939 17020468 Aug 3 2018 mobilenet_v1_1.0_224_quant.ckpt.data-00000-of-00001
-rw-r--r-- 1 200714 89939 14644 Aug 3 2018 mobilenet_v1_1.0_224_quant.ckpt.index
-rw-r--r-- 1 200714 89939 5143394 Aug 3 2018 mobilenet_v1_1.0_224_quant.ckpt.meta
-rw-r--r-- 1 200714 89939 4276352 Aug 3 2018 mobilenet_v1_1.0_224_quant.tflite
-rw-r--r-- 1 root root 35069912 Aug 3 2018 mobilenet_v1_1.0_224_quant.tgz
-rw-r--r-- 1 200714 89939 885850 Aug 3 2018 mobilenet_v1_1.0_224_quant_eval.pbtxt
-rw-r--r-- 1 200714 89939 17173742 Aug 3 2018 mobilenet_v1_1.0_224_quant_frozen.pb
-rw-r--r-- 1 200714 89939 89 Aug 3 2018 mobilenet_v1_1.0_224_quant_info.txt
root@imx8qmmek:~/devel/tensorflowlite# /usr/bin/tensorflow-lite-1.12.0/examples/label_image -m mobilenet_v1_1.0_224_quant.tflite -t 1 -i /usr/bin/tensorflow-lite-1.12.0/examples/grace_hopper.bmp -l /usr/bin/tensorflow-lite-1.12.0/examples/labels.txt
Loaded model mobilenet_v1_1.0_224_quant.tflite
resolved reporter
invoked
average time: 308.553 ms
0.780392: 653 military uniform
0.105882: 907 Windsor tie
0.0156863: 458 bow tie
0.0117647: 466 bulletproof vest
0.00784314: 835 suit
</pre>
 
== Overall results ==
This section illustrates the overall results achieved by the benchmarks.
 
===STREAM===
{| class="wikitable"
|+
Overall results (ARM core frequency = 800 MHz)
! rowspan="2" |Function
! colspan="2" |Mito8M
! rowspan="2" |Axel Lite
efficiency
 
[%]
|-
!Best rate
[MB/s]
!Efficiency
 
[%]
|-
|Copy
|6770
|51.7
|14.0
|-
|Scale
|6093
|46.5
|13.8
|-
|Add
|5263
|40.1
|14.6
|-
|Triad
|4820
|36.8
|14.9
|}
 
{| class="wikitable"
|+
Overall results (ARM core frequency = 1300 MHz)
! rowspan="2" |Function
! colspan="2" |Mito8M
! rowspan="2" |Axel Lite
efficiency
 
[%]
|-
!Best rate
[MB/s]
!Efficiency
 
[%]
|-
|Copy
|7125
|54.3
|14.0
|-
|Scale
|7501
|57.2
|13.8
|-
|Add
|6762
|51.6
|14.6
|-
|Triad
|6354
|48.5
|14.9
|}
 
Apart from the increase over Axel Lite in absolute terms, it is noteworthy that Mito8M exhibits a significant improvement in terms of efficiency too, as shown in the above tables. This is especially true in the case of ARM core frequency set to 1300 MHz.
 
Another interesting thing to note is how the bandwidth is affected by the ARM core frequency. If it scaled linearly, we should have an improvement of 62.5% from 800 to 1300 MHz. The average bandwidth at 800 MHz is 5761 MB/s. At 1300 MHz, it is 6935 MB/s. Therefore, the increase is 20.4%. With regard to STREAM benchmark, the achieved bandwidth does not scale linearly with ARM core frequency.
 
Please see [https://www.cs.virginia.edu/stream/ this page] for more details about STREAM benchmark.
 
===LMbench===
For what regards the memory bandwidth, LMbench provides many results organized in different categories. For the sake of simplicity, the following tables details just a couple of categories. The full results are available for download [http://mirror.dave.eu/mito/Mito8M/lmbench-Mito8M.0-800MHz.txt here (ARM core frequency set to 800 MHz)] and [http://mirror.dave.eu/mito/Mito8M/lmbench-Mito8M.0-1300MHz.txt here (ARM core frequency set to 1300 MHz)].
 
{| class="wikitable"
|+Memory read bandwidth
! rowspan="2" |Buffer size
! colspan="2" |Bandwitdth
[MB/s]
|-
!ARM core frequency = 800 MHz
!ARM core frequency = 1300 MHz
|-
|512B
|1553
|2521
|-
|1kB
|1567
|2546
|-
|2kB
|1575
|2560
|-
|4kB
|1575
|2564
|-
|8kB
|1577
|2564
|-
|16kB
|1577
|2567
|-
|32kB
|1528
|2490
|-
| 0.065536 |64kB
|1531
|2494
|-
|128kB
|1547
|2530
|-
|256kB
|1552
|2526
|-
|512kB
|1514
|2518
|-
|1MB
|1318
|2181
|-
|2MB
|1430
|2148
|-
|4MB
|1420
|2108
|-
|8MB
|1423
|2038
|-
|16MB
|1420
|2116
|-
|32MB
|1365
|2117
|-
|64MB
|1393
|2035
|-
|128MB
|1382
|2035
|-
|256MB
|1372
|2050
|-
|512MB
|1367
|1998
|}
 
{| class="wikitable"
|+Memory write bandwidth
! rowspan="2" |Buffer size
! colspan="2" |Bandwitdth
[MB/s]
|-
!ARM core frequency = 800 MHz
!ARM core frequency = 1300 MHz
|-
|512B
|2932
|4771
|-
|1kB
|3048
|4956
|-
|2kB
|3100
|5046
|-
|4kB
|3136
|5097
|-
|8kB
|3135
|5101
|-
|16kB
|3150
|5120
|-
|32kB
|2864
|5127
|-
|64kB
|3033
|5071
|-
|128kB
|3093
|4886
|-
|256kB
|2956
|5056
|-
|512kB
|3024
|5054
|-
|1MB
|3075
|5092
|-
|2MB
|3095
|5116
|-
|4MB
|3121
|5118
|-
|8MB
|3137
|5120
|-
|16MB
|3145
|5121
|-
|32MB
|3146
|5120
|-
|64MB
|3146
|5125
|-
|128MB
|3147
|5123
|-
|256MB
|3150
|5124
|-
|512MB
|3144
|5125
|-
|1GB
|3146
|5124
|}
 
There are some interesting facts to stress:
* Read and write bandwitdth are not effected by the buffer size.
* They are significantly affected by the ARM core frequency. For instance, the improvement of the write bandwidth (about 62% when the buffer is 1GB) is practically the same of the increase in frequency.
 
For more information regarding LMbench, please see [http://lmbench.sourceforge.net/ this page].
 
===pmbw===
As defined by the author, <code>pmbw</code> is "a set of assembler routines to measure the parallel memory (cache and RAM) bandwidth of modern multi-core machines." It performs a myriad of tests. Luckily, it comes with a handful tool that plots the results—which are stored in a text file—in a series of charts. Again,the benchmark was run at two different ARM core frequencies, 800 and 1300 MHz.
 
The complete results and the charts are available at the following links:
*http://mirror.dave.eu/mito/Mito8M/pmbw-stats-Mito8M-800MHz.txt
*http://mirror.dave.eu/mito/Mito8M/pmbw-plots-Mito8M-800MHz.pdf
*http://mirror.dave.eu/mito/Mito8M/pmbw-stats-Mito8M-1300MHz.txt
*http://mirror.dave.eu/mito/Mito8M/pmbw-plots-Mito8M-1300MHz.pdf
 
Generally speaking, the charts exhibit significant declines in the performances when the array size is around the L1 and the L2 cache size.
 
For more details about <code>pmbw</code>, please refer to [https://panthema.net/2013/pmbw/ this page].
 
===stressapptest===
According to the documentation, stressapptest—which was developed at Google—is "a memory interface test. It tries to maximize randomized traffic to memory from processor and I/O, with the intent of creating a realistic high load situation in order to test the existing hardware devices in a computer."
{| class="wikitable"
|+
! rowspan="2" |Test
! colspan="2" |Bandwidth
[MB/s]
|-
!ARM core frequency = 800 MHz
!ARM core frequency = 1300 MHz
|-
|Memory copy
|5483
|5804
|}
 
The above table lists the achieved results when the benchmark was run as detailed in [[#Running_the_tests_4|this section]]. In this case, the different when running at different ARM core frequencies is very little.
 
For more information about stressapptest, please refer to [https://github.com/stressapptest/stressapptest this page].
 
==Useful links==
*Joshua Wyatt Smith and Andrew Hamilton, [http://inspirehep.net/record/1424637/files/1719033_626-630.pdf Parallel benchmarks for ARM processors in the highenergy context]
*T Wrigley, G Harmsen and B Mellado, [http://inspirehep.net/record/1424631/files/1719033_275-280.pdf Memory performance of ARM processors and itsrelevance to High Energy Physics]
*G. T. Wrigley, R. G. Reed, B. Mellado, [http://inspirehep.net/record/1424637/files/1719033_626-630.pdf Memory benchmarking characterisation of ARM-based SoCs]
 
==Appendix A: Detailed testing procedures==
This section details how the benchmarks were configured and run on the testbed.
===STREAM===
 
====Building====
To build STREAM:
* clone its git repository
*modify the <code>Makefile</code> as shown below
*issue the <code>make</code> command.
4,650
edits

Navigation menu