From a29f1c8c0215134efd3377c5cd447b0c12c3523b Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Sat, 9 Oct 2021 13:12:41 +0800 Subject: [PATCH] fix(cmake/midout): fix cmake midout GitOrigin-RevId: 0fb93deb191ba235cbe312f7e7deaa979e810c9f --- CMakeLists.txt | 46 ++++++++++++++++++------------ lite/src/mge/common.cpp | 4 +++ src/bin_reduce_cmake.h | 14 +++++++++ src/megbrain_build_config.h.in | 2 +- tools/gen_header_for_bin_reduce.py | 32 +++++++++++++++------ 5 files changed, 70 insertions(+), 28 deletions(-) create mode 100644 src/bin_reduce_cmake.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e367ae1b7..f85ff5721 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,7 +50,7 @@ option(MGE_WITH_JIT "Build MegEngine with JIT." ON) option(MGE_WITH_JIT_MLIR "Build MegEngine with MLIR JIT." OFF) option(MGE_WITH_HALIDE "Build MegEngine with Halide JIT" OFF) option(MGE_WITH_MIDOUT_PROFILE "Build MegEngine with Midout profile." OFF) -option(MGE_WITH_MINIMUM_SIZE "Swith off MGE_ENABLE_RTTI、MGE_ENABLE_EXCEPTIONS、MGE_ENABLE_LOGGING and switch on MGE_INFERENCE_ONLY so that compile minimum load_and_run. Take effect only when MGE_BIN_REDUCE was set" OFF) +option(MGE_WITH_MINIMUM_SIZE "Swith off MGE_ENABLE_RTTI、MGE_ENABLE_EXCEPTIONS、MGE_ENABLE_LOGGING and switch on MGE_INFERENCE_ONLY so that compile minimum load_and_run." OFF) option(MGE_ARMV8_2_FEATURE_FP16 "Enable armv8.2-a+fp16 support" OFF) option(MGE_DISABLE_FLOAT16 "Disable MegEngine float16 support." OFF) option(MGE_WITH_CUDA "Enable MegEngine CUDA support." ON) @@ -143,16 +143,32 @@ else() set(MGE_WITH_ANY_CUDA_STUB OFF) endif() -if(NOT ${MGE_BIN_REDUCE} STREQUAL "") - message(STATUS "build with BIN REDUCE") - if(MGE_WITH_MINIMUM_SIZE) - set(MGE_ENABLE_RTTI OFF) - set(MGE_ENABLE_LOGGING OFF) - set(MGE_ENABLE_EXCEPTIONS OFF) - set(MGE_INFERENCE_ONLY ON) +if(MGE_WITH_MIDOUT_PROFILE) + message(STATUS "build with MIDOUT PROFILE and force set MGE_WITH_MINIMUM_SIZE off and force rtti ON") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMIDOUT_PROFILING") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMIDOUT_PROFILING") + set(MGE_WITH_MINIMUM_SIZE OFF) + set(MGE_ENABLE_RTTI ON) + if(WIN32) + message(FATAL_ERROR "do not support midout at WIN32") endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${MGE_BIN_REDUCE}") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -include ${MGE_BIN_REDUCE}") +endif() + +set(BIN_REDUCE ${PROJECT_SOURCE_DIR}/src/bin_reduce_cmake.h) +if(MGE_WITH_MINIMUM_SIZE) + message(STATUS "build with MGE_WITH_MINIMUM_SIZE bin_reduce header is: ${BIN_REDUCE}") + set(MGE_ENABLE_RTTI OFF) + set(MGE_ENABLE_LOGGING OFF) + set(MGE_ENABLE_EXCEPTIONS OFF) + set(MGE_INFERENCE_ONLY ON) + # MGE_WITH_MINIMUM_SIZE will triger unused-parameter + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter") +endif() + +if(NOT MGE_WITH_MIDOUT_PROFILE AND NOT WIN32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${BIN_REDUCE}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -include ${BIN_REDUCE}") endif() if (NOT APPLE) @@ -176,12 +192,6 @@ else() message(STATUS "lto is not supported in this compiler") endif() -if(MGE_WITH_MIDOUT_PROFILE) - message(STATUS "build with MIDOUT PROFILE") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMIDOUT_PROFILING") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMIDOUT_PROFILING") -endif() - if (APPLE) set (BUILD_SHARED_LIBS OFF) message(STATUS "build static for xcode framework require") @@ -253,9 +263,9 @@ if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo) endif() -if(${CMAKE_BUILD_TYPE} STREQUAL "Release" AND NOT MGE_WITH_TEST AND NOT ${MGE_ARCH} STREQUAL "x86_64") +if(${CMAKE_BUILD_TYPE} STREQUAL "Release" AND NOT MGE_WITH_TEST AND NOT ${MGE_ARCH} STREQUAL "x86_64" AND NOT MGE_WITH_MIDOUT_PROFILE) set(MGE_ENABLE_RTTI OFF) - message(STATUS "disable MGE_ENABLE_RTTI when Release/NON-x86_64 mode!!") + message(STATUS "disable MGE_ENABLE_RTTI when Release/NON-x86_64/NON-MGE_WITH_MIDOUT_PROFILE mode!!") endif() if(MSVC OR WIN32) diff --git a/lite/src/mge/common.cpp b/lite/src/mge/common.cpp index 96d10455d..d1855fa42 100644 --- a/lite/src/mge/common.cpp +++ b/lite/src/mge/common.cpp @@ -83,9 +83,11 @@ LTensorLayout lite::to_impl_layout(const Layout& layout) { case LiteDataType::LITE_FLOAT: mge_layout.dtype = mgb::dtype::Float32(); break; +#if !MEGDNN_DISABLE_FLOAT16 case LiteDataType::LITE_HALF: mge_layout.dtype = mgb::dtype::Float16(); break; +#endif case LiteDataType::LITE_INT: mge_layout.dtype = mgb::dtype::Int32(); break; @@ -120,9 +122,11 @@ Layout lite::to_lite_layout(const LTensorLayout& mge_layout) { case mgb::DTypeEnum::Float32: layout.data_type = LiteDataType::LITE_FLOAT; break; +#if !MEGDNN_DISABLE_FLOAT16 case mgb::DTypeEnum::Float16: layout.data_type = LiteDataType::LITE_HALF; break; +#endif case mgb::DTypeEnum::Int32: layout.data_type = LiteDataType::LITE_INT; break; diff --git a/src/bin_reduce_cmake.h b/src/bin_reduce_cmake.h new file mode 100644 index 000000000..c240b676e --- /dev/null +++ b/src/bin_reduce_cmake.h @@ -0,0 +1,14 @@ +/** + * \file src/bin_reduce_cmake.h + * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") + * + * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + */ + +/* + * always empty, override by ../tools/gen_header_for_bin_reduce.py + */ diff --git a/src/megbrain_build_config.h.in b/src/megbrain_build_config.h.in index 0753327d7..94b8902f0 100644 --- a/src/megbrain_build_config.h.in +++ b/src/megbrain_build_config.h.in @@ -1,5 +1,5 @@ /** - * \file src/core/include/megbrain_build_config.h + * \file src/megbrain_build_config.h.in * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") * * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. diff --git a/tools/gen_header_for_bin_reduce.py b/tools/gen_header_for_bin_reduce.py index 38c7ba16e..882deba42 100755 --- a/tools/gen_header_for_bin_reduce.py +++ b/tools/gen_header_for_bin_reduce.py @@ -53,7 +53,16 @@ class HeaderGen: cls._megvii3_root_cache = str(wd) return cls._megvii3_root_cache wd = wd.parent - raise RuntimeError('This script is supposed to run in megvii3.') + return None + + _megengine_root_cache = None + @classmethod + def get_megengine_root(cls): + if cls._megengine_root_cache is not None: + return cls._megengine_root_cache + wd = Path(__file__).resolve().parent.parent + cls._megengine_root_cache = str(wd) + return cls._megengine_root_cache def extend_netinfo(self, data): self._has_netinfo = True @@ -125,11 +134,11 @@ class HeaderGen: with tempfile.NamedTemporaryFile() as ftmp: fpath = os.path.realpath(ftmp.name) subprocess.check_call( - ['./brain/megbrain/dnn/scripts/gen_param_defs.py', + ['./dnn/scripts/gen_param_defs.py', '--write-enum-items', 'Elemwise:Mode', - './brain/megbrain/dnn/scripts/opr_param_defs.py', + './dnn/scripts/opr_param_defs.py', fpath], - cwd=self.get_megvii3_root() + cwd=self.get_megengine_root() ) with open(fpath) as fin: @@ -178,8 +187,10 @@ class HeaderGen: if not self._midout_files: return - gen = os.path.join(self.get_megvii3_root(), 'brain', 'midout', - 'gen_header.py') + gen = os.path.join(self.get_megengine_root(), 'third_party', 'midout', 'gen_header.py') + if self.get_megvii3_root(): + gen = os.path.join(self.get_megvii3_root(), 'brain', 'midout', 'gen_header.py') + print('use {} to gen bin_reduce header'.format(gen)) cvt = subprocess.run( [gen] + self._midout_files, stdout=subprocess.PIPE, check=True, @@ -212,10 +223,13 @@ def main(): ' 1. json files generated by ' 'megbrain.serialize_comp_graph_to_file() in python; ' ' 2. trace files generated by midout library') - parser.add_argument('-o', '--output', help='output file', - default=os.path.join(HeaderGen.get_megvii3_root(), - 'utils', 'bin_reduce.h')) + default_file=os.path.join(HeaderGen.get_megengine_root(), 'src', 'bin_reduce_cmake.h') + is_megvii3 = HeaderGen.get_megvii3_root() + if is_megvii3: + default_file=os.path.join(HeaderGen.get_megvii3_root(), 'utils', 'bin_reduce.h') + parser.add_argument('-o', '--output', help='output file', default=default_file) args = parser.parse_args() + print('config output file: {}'.format(args.output)) gen = HeaderGen() for i in args.inputs: -- GitLab