Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions apps/microtvm/cmsisnn/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,19 @@ CMAKE ?= cmake
CC = arm-none-eabi-gcc
AR = arm-none-eabi-ar
RANLIB = arm-none-eabi-ranlib
ifeq ($(shell [ -d ${CMSIS_PATH}/CMSIS-NN ]; echo $$?), 0)
CMSIS_NN_PATH = ${CMSIS_PATH}/CMSIS-NN
else
CMSIS_NN_PATH = ${CMSIS_PATH}/CMSIS/NN
endif
PKG_CFLAGS = ${PKG_COMPILE_OPTS} \
-I${STANDALONE_CRT_PATH}/include \
-I${STANDALONE_CRT_PATH}/src/runtime/crt/include \
-I${PWD}/include \
-I${CORSTONE_300_PATH} \
-I${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Include/ \
-I${CMSIS_PATH}/CMSIS/Core/Include \
-I${CMSIS_PATH}/CMSIS/NN/Include \
-I${CMSIS_NN_PATH}/Include \
-I${CMSIS_PATH}/CMSIS/DSP/Include \
-I$(abspath $(BUILD_DIR))/codegen/host/include
CMSIS_NN_CMAKE_FLAGS = -DCMAKE_TOOLCHAIN_FILE=$(abspath $(BUILD_DIR))/../arm-none-eabi-gcc.cmake \
Expand All @@ -56,7 +61,7 @@ DEMO_MAIN = src/demo_bare_metal.c
CODEGEN_SRCS = $(wildcard $(abspath $(BUILD_DIR))/codegen/host/src/*.c)
CODEGEN_OBJS = $(subst .c,.o,$(CODEGEN_SRCS))
CMSIS_STARTUP_SRCS = $(wildcard ${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Source/*.c)
CMSIS_NN_SRCS = $(shell find ${CMSIS_PATH}/CMSIS/NN/Source/*/*.c)
CMSIS_NN_SRCS = $(shell find ${CMSIS_NN_PATH}/Source/*/*.c)
UART_SRCS = $(wildcard ${CORSTONE_300_PATH}/*.c)

demo: $(BUILD_DIR)/demo
Expand Down
1 change: 1 addition & 0 deletions apps/microtvm/cmsisnn/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ If the demo is not run in the ci_cpu Docker container, then you will need the fo
- [GCC toolchain from Arm(R)](https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2)
- [Arm(R) Ethos(TM)-U NPU driver stack](https://review.mlplatform.org)
- [CMSIS](https://github.com/ARM-software/CMSIS_5)
- [CMSIS NN](https://github.com/ARM-software/CMSIS-NN)
- The python libraries listed in the requirements.txt of this directory
- These can be installed by running the following from the current directory:
```bash
Expand Down
9 changes: 7 additions & 2 deletions apps/microtvm/ethosu/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ CMAKE ?= cmake
CC = arm-none-eabi-gcc
AR = arm-none-eabi-ar
RANLIB = arm-none-eabi-ranlib
ifeq ($(shell [ -d ${CMSIS_PATH}/CMSIS-NN ]; echo $$?), 0)
CMSIS_NN_PATH = ${CMSIS_PATH}/CMSIS-NN
else
CMSIS_NN_PATH = ${CMSIS_PATH}/CMSIS/NN
endif
PKG_CFLAGS = ${PKG_COMPILE_OPTS} \
-I${STANDALONE_CRT_PATH}/include \
-I${STANDALONE_CRT_PATH}/src/runtime/crt/include \
Expand All @@ -40,7 +45,7 @@ PKG_CFLAGS = ${PKG_COMPILE_OPTS} \
-I${ETHOSU_PATH}/core_driver/include \
-I${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Include/ \
-I${CMSIS_PATH}/CMSIS/Core/Include \
-I${CMSIS_PATH}/CMSIS/NN/Include \
-I${CMSIS_NN_PATH}/Include \
-I${CMSIS_PATH}/CMSIS/DSP/Include \
-I$(abspath $(BUILD_DIR))/codegen/host/include \
-DETHOSU_TEST_RUNNER_TOL=${ETHOSU_TEST_RUNNER_TOL}
Expand Down Expand Up @@ -78,7 +83,7 @@ endif
CODEGEN_SRCS = $(wildcard $(abspath $(BUILD_DIR))/codegen/host/src/*.c)
CODEGEN_OBJS = $(subst .c,.o,$(CODEGEN_SRCS))
CMSIS_STARTUP_SRCS = $(wildcard ${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Source/*.c)
CMSIS_NN_SOFTMAX_SRCS = $(shell find ${CMSIS_PATH}/CMSIS/NN/Source/SoftmaxFunctions/*.c)
CMSIS_NN_SOFTMAX_SRCS = $(shell find ${CMSIS_NN_PATH}/Source/SoftmaxFunctions/*.c)
UART_SRCS = $(wildcard ${CORSTONE_300_PATH}/*.c)

demo: $(BUILD_DIR)/demo
Expand Down
1 change: 1 addition & 0 deletions apps/microtvm/ethosu/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ If the demo is not run in the ci_cpu Docker container, then you will need the fo
- [GCC toolchain from Arm(R)](https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2)
- [Arm(R) Ethos(TM)-U NPU driver stack](https://review.mlplatform.org)
- [CMSIS](https://github.com/ARM-software/CMSIS_5)
- [CMSIS NN](https://github.com/ARM-software/CMSIS-NN)
- The python libraries listed in the requirements.txt of this directory
- These can be installed by running the following from the current directory:
```bash
Expand Down
26 changes: 16 additions & 10 deletions apps/microtvm/zephyr/template_project/CMakeLists.txt.template
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,27 @@ find_package(Zephyr HINTS $ENV{ZEPHYR_BASE})
project(microtvm_autogenerated_project)

if(DEFINED CMSIS_PATH)
if (EXISTS ${CMSIS_PATH}/CMSIS-NN)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this a temporary fix until we update the docker image?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes it is.

set(CMSIS_NN_PATH ${CMSIS_PATH}/CMSIS-NN)
else()
set(CMSIS_NN_PATH ${CMSIS_PATH}/CMSIS/NN)
endif()

file(GLOB_RECURSE cmsis_lib_srcs
${CMSIS_PATH}/CMSIS/NN/Source/ActivationFunctions/*.c
${CMSIS_PATH}/CMSIS/NN/Source/BasicMathFunctions/*.c
${CMSIS_PATH}/CMSIS/NN/Source/ConcatenationFunctions/*.c
${CMSIS_PATH}/CMSIS/NN/Source/ConvolutionFunctions/*.c
${CMSIS_PATH}/CMSIS/NN/Source/FullyConnectedFunctions/*.c
${CMSIS_PATH}/CMSIS/NN/Source/NNSupportFunctions/*.c
${CMSIS_PATH}/CMSIS/NN/Source/PoolingFunctions/*.c
${CMSIS_PATH}/CMSIS/NN/Source/ReshapeFunctions/*.c
${CMSIS_PATH}/CMSIS/NN/Source/SoftmaxFunctions/*.c
${CMSIS_NN_PATH}/Source/ActivationFunctions/*.c
${CMSIS_NN_PATH}/Source/BasicMathFunctions/*.c
${CMSIS_NN_PATH}/Source/ConcatenationFunctions/*.c
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/*.c
${CMSIS_NN_PATH}/Source/FullyConnectedFunctions/*.c
${CMSIS_NN_PATH}/Source/NNSupportFunctions/*.c
${CMSIS_NN_PATH}/Source/PoolingFunctions/*.c
${CMSIS_NN_PATH}/Source/ReshapeFunctions/*.c
${CMSIS_NN_PATH}/Source/SoftmaxFunctions/*.c
)

set(cmsis_includes
${CMSIS_PATH}/CMSIS/Core/Include
${CMSIS_PATH}/CMSIS/NN/Include
${CMSIS_NN_PATH}/Include
${CMSIS_PATH}/CMSIS/DSP/Include
${CMSIS_PATH}/CMSIS/DSP/Include/dsp
)
Expand Down
44 changes: 28 additions & 16 deletions apps/microtvm/zephyr_cmsisnn/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,34 @@ set(DATA_FILES
${CMAKE_CURRENT_BINARY_DIR}/outputs.c
${CMAKE_CURRENT_BINARY_DIR}/labels.c
)

if (EXISTS ${CMSIS_PATH}/CMSIS-NN)
set(CMSIS_NN_PATH ${CMSIS_PATH}/CMSIS-NN)
set(CMSIS_NN_ADDITIONAL_SOURCES
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/arm_convolve_1x1_s8.c
${CMSIS_NN_PATH}/Source/NNSupportFunctions/arm_nn_mat_mult_nt_t_s8.c
)
else()
set(CMSIS_NN_PATH ${CMSIS_PATH}/CMSIS/NN)
endif()

set(CMSIS_SOURCES
${CMSIS_PATH}/CMSIS/NN/Source/SoftmaxFunctions/arm_softmax_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/ConvolutionFunctions/arm_depthwise_conv_wrapper_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/ConvolutionFunctions/arm_depthwise_conv_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/ConvolutionFunctions/arm_depthwise_conv_s8_opt.c
${CMSIS_PATH}/CMSIS/NN/Source/NNSupportFunctions/arm_nn_depthwise_conv_nt_t_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/NNSupportFunctions/arm_nn_depthwise_conv_nt_t_padded_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/ConvolutionFunctions/arm_convolve_wrapper_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/ConvolutionFunctions/arm_convolve_1_x_n_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/ConvolutionFunctions/arm_convolve_1x1_s8_fast.c
${CMSIS_PATH}/CMSIS/NN/Source/ConvolutionFunctions/arm_convolve_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/ConvolutionFunctions/arm_nn_mat_mult_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/FullyConnectedFunctions/arm_fully_connected_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/NNSupportFunctions/arm_nn_mat_mul_core_4x_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/NNSupportFunctions/arm_nn_vec_mat_mult_t_s8.c
${CMSIS_PATH}/CMSIS/NN/Source/NNSupportFunctions/arm_nn_mat_mul_core_1x_s8.c
${CMSIS_NN_PATH}/Source/SoftmaxFunctions/arm_softmax_s8.c
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/arm_depthwise_conv_wrapper_s8.c
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/arm_depthwise_conv_s8.c
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/arm_depthwise_conv_s8_opt.c
${CMSIS_NN_PATH}/Source/NNSupportFunctions/arm_nn_depthwise_conv_nt_t_s8.c
${CMSIS_NN_PATH}/Source/NNSupportFunctions/arm_nn_depthwise_conv_nt_t_padded_s8.c
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/arm_convolve_wrapper_s8.c
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/arm_convolve_1_x_n_s8.c
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/arm_convolve_1x1_s8_fast.c
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/arm_convolve_s8.c
${CMSIS_NN_PATH}/Source/ConvolutionFunctions/arm_nn_mat_mult_s8.c
${CMSIS_NN_PATH}/Source/FullyConnectedFunctions/arm_fully_connected_s8.c
${CMSIS_NN_PATH}/Source/NNSupportFunctions/arm_nn_mat_mul_core_4x_s8.c
${CMSIS_NN_PATH}/Source/NNSupportFunctions/arm_nn_vec_mat_mult_t_s8.c
${CMSIS_NN_PATH}/Source/NNSupportFunctions/arm_nn_mat_mul_core_1x_s8.c
${CMSIS_NN_ADDITIONAL_SOURCES}
)

add_custom_command(
Expand All @@ -93,5 +105,5 @@ target_sources(app PRIVATE
target_include_directories(app
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/runtime/include ${CMAKE_CURRENT_BINARY_DIR}/codegen/host/include
PUBLIC ${CMSIS_PATH}/CMSIS/NN/Include/ ${CMSIS_PATH}/CMSIS/DSP/Include
PUBLIC ${CMSIS_NN_PATH}/Include/ ${CMSIS_PATH}/CMSIS/DSP/Include
)
5 changes: 5 additions & 0 deletions apps/microtvm/zephyr_cmsisnn/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ Checkout [CMSIS_5](https://github.com/ARM-software/CMSIS_5.git) (default is `/op
git clone "https://github.com/ARM-software/CMSIS_5.git" cmsis
```

Checkout [CMSIS NN](https://github.com/ARM-software/CMSIS-NN.git) (default is `/opt/arm/ethosu/cmsis/CMSIS-NN` to reflect `tlcpack/ci_cortexm`):
```
git clone "https://github.com/ARM-software/CMSIS-NN.git" cmsis/CMSIS-NN
```

And run the demo using `west`, with the path to CMSIS:
```
west build -t run -- -DCMSIS_PATH=/opt/arm/ethosu/cmsis
Expand Down
4 changes: 4 additions & 0 deletions docker/install/ubuntu_install_cmsis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,8 @@ wget ${CMSIS_URL} -O "${DOWNLOAD_PATH}"
echo "$CMSIS_SHASUM" ${DOWNLOAD_PATH} | sha512sum -c
tar -xf "${DOWNLOAD_PATH}" -C "${INSTALLATION_PATH}" --strip-components=1
touch "${INSTALLATION_PATH}"/"${CMSIS_SHA}".sha

CMSIS_NN_TAG="v4.0.0"
CMSIS_NN_URL="https://github.com/ARM-software/CMSIS-NN.git"
git clone ${CMSIS_NN_URL} --branch ${CMSIS_NN_TAG} --single-branch ${INSTALLATION_PATH}/CMSIS-NN
echo "SUCCESS"
3 changes: 3 additions & 0 deletions docker/install/ubuntu_install_ethosu_driver_stack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ cmake -DCMAKE_TOOLCHAIN_FILE=${ethosu_dir}/core_platform/cmake/toolchain/arm-non
make

# Build NN Library
mkdir ${CMSIS_PATH}/CMSIS-NN/build/ && cd ${CMSIS_PATH}/CMSIS-NN/build/
cmake .. -DCMAKE_TOOLCHAIN_FILE=${ethosu_dir}/core_platform/cmake/toolchain/arm-none-eabi-gcc.cmake -DTARGET_CPU=cortex-m55 -DBUILD_CMSIS_NN_FUNCTIONS=YES -DCMSIS_PATH=${CMSIS_PATH}

mkdir ${CMSIS_PATH}/CMSIS/NN/build/ && cd ${CMSIS_PATH}/CMSIS/NN/build/
cmake .. -DCMAKE_TOOLCHAIN_FILE=${ethosu_dir}/core_platform/cmake/toolchain/arm-none-eabi-gcc.cmake -DTARGET_CPU=cortex-m55 -DBUILD_CMSIS_NN_FUNCTIONS=YES
make
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both of the above commands look similar, I hope they are serving two different things. Can you please revisit them?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The first one builds the new CMSIS-NN, and the second one builds the old CMSIS/NN.
When the docker image will be updated I'll remove support for CMSIS/NN, that is, I''ll revert this commit: ff57097.

2 changes: 1 addition & 1 deletion python/tvm/micro/project_api/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -804,7 +804,7 @@ def default_project_options(**kw) -> typing.List[ProjectOption]:
"cmsis_path",
optional=["generate_project"],
type="str",
default=os.environ.get("CMSIS_PATH", None),
default=None,
help="Path to the CMSIS directory.",
),
ProjectOption(
Expand Down
3 changes: 2 additions & 1 deletion tests/micro/zephyr/test_zephyr.py
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,7 @@ def test_schedule_build_with_cmsis_dependency(workspace_dir, board, microtvm_deb
"project_type": "host_driven",
"verbose": bool(build_config.get("debug")),
"board": board,
"cmsis_path": os.getenv("CMSIS_PATH"),
"use_fvp": bool(use_fvp),
}

Expand All @@ -623,7 +624,7 @@ def test_schedule_build_with_cmsis_dependency(workspace_dir, board, microtvm_deb
assert "CMSIS/DSP/Include" in cmake_content
assert "CMSIS/DSP/Include/dsp" in cmake_content
assert "CMSIS/DSP/Include" in cmake_content
assert "CMSIS/NN/Include" in cmake_content
# assert "CMSIS-NN/Include" in cmake_content
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If comment is not useful for future, it can be removed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the future, after the docker image will be updated, we want this assert.



if __name__ == "__main__":
Expand Down
9 changes: 7 additions & 2 deletions tests/python/relay/aot/corstone300.mk
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ CC = arm-none-eabi-gcc
AR = arm-none-eabi-ar
RANLIB = arm-none-eabi-ranlib
CC_OPTS = CC=$(CC) AR=$(AR) RANLIB=$(RANLIB)
ifeq ($(shell [ -d ${CMSIS_PATH}/CMSIS-NN ]; echo $$?), 0)
CMSIS_NN_PATH = ${CMSIS_PATH}/CMSIS-NN
else
CMSIS_NN_PATH = ${CMSIS_PATH}/CMSIS/NN
endif
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doesn't simply looking for the directory work if [ -d " ${CMSIS_PATH}/CMSIS-NN" ]; for simplicity - just curious?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you want I can check and improve that, but this code will be reverted when the docker image will be updated.

PKG_CFLAGS = ${PKG_COMPILE_OPTS} \
${CFLAGS} \
-I$(build_dir)/../include \
Expand All @@ -57,7 +62,7 @@ PKG_CFLAGS = ${PKG_COMPILE_OPTS} \
-I${DRIVER_PATH}/include \
-I${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Include/ \
-I${CMSIS_PATH}/CMSIS/Core/Include \
-I${CMSIS_PATH}/CMSIS/NN/Include \
-I${CMSIS_NN_PATH}/Include \
-I${CMSIS_PATH}/CMSIS/DSP/Include \
-isystem$(STANDALONE_CRT_DIR)/include
DRIVER_CMAKE_FLAGS = -DCMAKE_TOOLCHAIN_FILE=$(ETHOSU_TEST_ROOT)/arm-none-eabi-gcc.cmake \
Expand All @@ -78,7 +83,7 @@ CC_CODEGEN_SRCS = $(shell find $(abspath $(CODEGEN_ROOT)/host/src/*.cc))
C_CODEGEN_OBJS = $(subst .c,.o,$(C_CODEGEN_SRCS))
CC_CODEGEN_OBJS = $(subst .cc,.o,$(CC_CODEGEN_SRCS))
CMSIS_STARTUP_SRCS = $(shell find ${CMSIS_PATH}/Device/ARM/${ARM_CPU}/Source/*.c)
CMSIS_NN_SRCS = $(shell find ${CMSIS_PATH}/CMSIS/NN/Source/*/*.c)
CMSIS_NN_SRCS = $(shell find ${CMSIS_NN_PATH}/Source/*/*.c)
UART_SRCS = $(shell find ${PLATFORM_PATH}/*.c)

ifdef ETHOSU_TEST_ROOT
Expand Down