diff --git a/CMakeLists.txt b/CMakeLists.txt index 4504cd497e330b869502f18a89f4a691a7e066ac..9c2075deec6344db3f56effc01ff4f62460ae20a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,13 @@ option(MGE_WITH_TRT "Build MegEngine with TensorRT." ON) option(MGE_USE_SYSTEM_LIB "Build MegEngine with system libraries." OFF) option(MGB_WITH_FLATBUFFERS "Build MegBrain with FlatBuffers serialization support." ON) +if(NOT MGE_WITH_JIT) + if(MGE_WITH_HALIDE) + message(WARNING "MGE_WITH_HALIDE is set to OFF with MGE_WITH_JIT disabled") + set(MGE_WITH_HALIDE OFF) + endif() +endif() + if(MGE_WITH_CUDA) include(CheckLanguage) check_language(CUDA) @@ -77,9 +84,6 @@ if(${CMAKE_THREAD_LIBS_INIT} STREQUAL "-pthread" AND MGE_WITH_CUDA) PROPERTY INTERFACE_COMPILE_OPTIONS "$<$:-Xcompiler=-pthread>" "$<$>:-pthread>") endif() -if(CMAKE_THREAD_LIBS_INIT) - add_definitions(-DMGB_HAVE_THREAD=1) -endif() set(MGE_BLAS MKL CACHE STRING "BLAS implementaion used by MegEngine.") @@ -93,12 +97,6 @@ option(MGE_ENABLE_RTTI "Build with RTTI" ON) option(MGE_ENABLE_LOGGING "Build with logging" ON) option(MGE_DEBUG_UTIL "Enable debug utility" ON) -if(MGE_DEBUG_UTIL) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_ENABLE_DEBUG_UTIL=1") -else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_ENABLE_DEBUG_UTIL=0") -endif() - if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") set(CMAKE_BUILD_TYPE RelWithDebInfo) @@ -113,33 +111,6 @@ if(NOT MGE_ENABLE_EXCEPTIONS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exception") endif() -# RTTI -if(MGE_ENABLE_RTTI) - add_definitions(-DMEGDNN_ENABLE_MANGLING=0 -DMEGDNN_ENABLE_RTTI=1) -else() - add_definitions(-DMEGDNN_ENABLE_MANGLING=1 -DMEGDNN_ENABLE_RTTI=0) -endif() - -# Logging -if(MGE_ENABLE_LOGGING) - add_definitions(-DMEGDNN_ENABLE_LOGGING=1 -DMGB_ENABLE_LOGGING=1 -DMGB_ENABLE_JSON=1) -else() - add_definitions(-DMEGDNN_ENABLE_LOGGING=0 -DMGB_ENABLE_LOGGING=0 -DMGB_ENABLE_JSON=0) -endif() - -# Exception -if(MGE_ENABLE_EXCEPTIONS) - add_definitions(-DMEGDNN_ENABLE_EXCEPTIONS=1) -else() - message(STATUS "Exceptions disabled; MegEngine would kill itself when it is supposed to throw an exception.") - add_definitions(-DMEGDNN_ENABLE_EXCEPTIONS=0) -endif() - -if(MGE_WITH_JIT AND MGE_WITH_HALIDE) - set(HALIDE_SHARED_LIBRARY OFF CACHE BOOL "Build as a shared library") - include(cmake/Halide.cmake) - add_definitions(-DMGB_JIT_HALIDE=1) -endif() option(MGE_WITH_TEST "Enable test for MegEngine." OFF) if(MGE_WITH_TEST) @@ -319,25 +290,78 @@ if(MGE_WITH_MKLDNN AND ${MGE_ARCH} STREQUAL "x86_64") include(cmake/MKL_DNN.cmake) endif() +# RTTI +if(MGE_ENABLE_RTTI) + add_definitions(-DMEGDNN_ENABLE_MANGLING=0 -DMEGDNN_ENABLE_RTTI=1) +else() + add_definitions(-DMEGDNN_ENABLE_MANGLING=1 -DMEGDNN_ENABLE_RTTI=0) +endif() +set(MGB_VERBOSE_TYPEINFO_NAME ${MGE_ENABLE_RTTI}) -add_subdirectory(dnn) +# Logging +if(MGE_ENABLE_LOGGING) + add_definitions(-DMEGDNN_ENABLE_LOGGING=1) +else() + add_definitions(-DMEGDNN_ENABLE_LOGGING=0) +endif() +set(MGB_ENABLE_LOGGING ${MGE_ENABLE_LOGGING}) +set(MGB_ENABLE_JSON ${MGE_ENABLE_LOGGING}) + +# Exception +if(MGE_ENABLE_EXCEPTIONS) + add_definitions(-DMEGDNN_ENABLE_EXCEPTIONS=1) +else() + message(STATUS "Exceptions disabled; MegEngine would kill itself when it is supposed to throw an exception.") + add_definitions(-DMEGDNN_ENABLE_EXCEPTIONS=0) +endif() +set(MGB_ENABLE_EXCEPTION ${MGE_ENABLE_EXCEPTIONS}) + +# JIT +if(MGE_WITH_JIT AND MGE_WITH_HALIDE) + set(HALIDE_SHARED_LIBRARY OFF CACHE BOOL "Build as a shared library") + include(cmake/Halide.cmake) +endif() +set(MGB_JIT ${MGE_WITH_JIT}) +set(MGB_JIT_HALIDE ${MGE_WITH_HALIDE}) +# Thread +if(CMAKE_THREAD_LIBS_INIT) + set(MGB_HAVE_THREAD 1) +endif() -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DMGB_ASSERT_LOC=1") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DMGB_ASSERT_LOC=0") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DMGB_ASSERT_LOC=1") -set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -DMGB_ASSERT_LOC=0") +# CUDA +set(MGB_CUDA ${MGE_WITH_CUDA}) -if(MGE_ENABLE_RTTI) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_VERBOSE_TYPEINFO_NAME=1") +# Debug info +if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") + set(MGB_ASSERT_LOC 1) + set(MGB_ENABLE_DEBUG_UTIL 1) +else() + set(MGB_ASSERT_LOC 0) + set(MGB_ENABLE_DEBUG_UTIL 0) endif() -if(MGE_ENABLE_EXCEPTIONS) - add_definitions(-DMGB_ENABLE_EXCEPTION=1) +# TensorRT +set(MGB_ENABLE_TENSOR_RT ${MGE_WITH_TRT}) + +# Inference only +if(MGE_INFERENCE_ONLY) + set(MGB_ENABLE_GRAD 0) + set(MGB_BUILD_SLIM_SERVING 1) else() - add_definitions(-DMGB_ENABLE_EXCEPTION=0) + set(MGB_ENABLE_GRAD 1) + set(MGB_BUILD_SLIM_SERVING 0) endif() +# Distributed communication +set(MGB_ENABLE_OPR_MM ${MGE_WITH_DISTRIBUTED}) + +# Write out megbrain_build_config.h +configure_file(src/core/include/megbrain_build_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h DESTINATION include) + +add_subdirectory(dnn) + list(APPEND MGB_OPR_PARAM_DEFS_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py) set(MGB_OPR_PARAM_DEFS_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/dnn/scripts/gen_param_defs.py) @@ -402,24 +426,3 @@ if(TARGET _mgb) ) endif() -set(MGB_CUDA ${MGE_WITH_CUDA}) -if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") - set(MGB_ASSERT_LOC 1) -else() - set(MGB_ASSERT_LOC 0) -endif() -set(MGB_ENABLE_DEBUG_UTIL ${MGE_DEBUG_UTIL}) -set(MGB_ENABLE_LOGGING ${MGE_ENABLE_LOGGING}) -set(MGB_VERBOSE_TYPEINFO_NAME ${MGE_ENABLE_RTTI}) -set(MGB_ENABLE_EXCEPTION ${MGE_ENABLE_EXCEPTIONS}) -set(MGB_JIT ${MGE_WITH_JIT}) -set(MGB_JIT_HALIDE ${MGE_WITH_HALIDE}) -set(MGB_ENABLE_TENSOR_RT ${MGE_WITH_TRT}) -set(MGB_ENABLE_JSON ${MGE_ENABLE_LOGGING}) -set(MGB_ENABLE_GRAD NOT ${MGE_INFERENCE_ONLY}) -set(MGB_BUILD_SLIM_SERVING ${MGE_INFERENCE_ONLY}) -configure_file(src/core/include/megbrain_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h) -file(READ src/core/include/megbrain_build_config.h _CONTENT) -file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h ${_CONTENT}) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h DESTINATION include) - diff --git a/python_module/CMakeLists.txt b/python_module/CMakeLists.txt index c29a1eb3b23ad08da9d5b4b9de064d7017624f58..f4142ee0adb9dc083a80afb7026e65006a8334ee 100644 --- a/python_module/CMakeLists.txt +++ b/python_module/CMakeLists.txt @@ -10,9 +10,6 @@ find_package(Numpy REQUIRED) find_package(SWIG REQUIRED) set(SWIG_SRC src/swig/mgb.i) set(CMAKE_SWIG_FLAGS -Wall -threads -py3 -modern -DSWIGWORDSIZE64) -if(MGB_ENABLE_JSON) - set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMGB_ENABLE_JSON) -endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") if(MGE_WITH_DISTRIBUTED) @@ -105,5 +102,6 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/src/serialization/include ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/src/plugin/include ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/dnn/include ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/genfiles/megbrain_build_config.h ${CMAKE_CURRENT_BINARY_DIR}/megengine/_internal/include/megbrain_build_config.h ) diff --git a/python_module/src/swig/comp_graph.i b/python_module/src/swig/comp_graph.i index 99154dadaeadeac95988acb02a1baa082b03d5e0..80c055867063f97402a7ac0791d8171f02c3d3cb 100644 --- a/python_module/src/swig/comp_graph.i +++ b/python_module/src/swig/comp_graph.i @@ -69,13 +69,8 @@ class CompGraph { return reinterpret_cast(&$self->get()); } - std::string get_dynamic_info() const { -#ifdef MGB_ENABLE_JSON - auto jsonstr = self->get().get_dynamic_info(); - return jsonstr->to_string(); -#else - return std::string(""); -#endif + std::string get_mem_allocation_info() const { + return self->get().get_mem_allocation_info(); } std::string __repr__() const { diff --git a/python_module/test/unit/core/test_dynamic_profiling.py b/python_module/test/unit/core/test_dynamic_profiling.py index eb7db2a12f2188e3c06b1977f741b3bf98d32494..53e603b87f4e91edb9103eb50406406429ce5014 100644 --- a/python_module/test/unit/core/test_dynamic_profiling.py +++ b/python_module/test/unit/core/test_dynamic_profiling.py @@ -14,40 +14,43 @@ import megengine.functional as F from megengine import graph, tensor -def test_dynmaic_profiling(): - sz = 16 +def test_dynamic_profiling(): + with graph.Graph(): + sz = 16 - cg = graph.get_default_graph() + cg = graph.get_default_graph() - x = tensor(np.arange(0, sz, dtype=np.float32)) - y = F.relu(x) + x = tensor(np.arange(0, sz, dtype=np.float32)) + y = F.relu(x) - str1 = cg.get_dynamic_info() - if str1 == "": - return - json_str1 = json.loads(str1) + str1 = cg.get_mem_allocation_info() + if str1 == "": + return + json_str1 = json.loads(str1) - z = F.add_update(x, y) + z = F.add_update(x, y) - json_str2 = json.loads(cg.get_dynamic_info()) + json_str2 = json.loads(cg.get_mem_allocation_info()) - diff = lambda l1, l2: [x for x in l1 if x not in l2] + diff = lambda l1, l2: [x for x in l1 if x not in l2] - jdiff = diff(json_str2, json_str1) - assert len(jdiff) == 1, "add_update operator should produce only one opr internally" + jdiff = diff(json_str2, json_str1) + assert ( + len(jdiff) == 1 + ), "add_update operator should produce only one opr internally" - dest_key = list(jdiff[0].keys())[0] - assert ( - jdiff[0][dest_key]["output"][0]["memory"] == sz * 4 - ), "output of add_update operator has wrong allocated size" + dest_key = list(jdiff[0].keys())[0] + assert ( + jdiff[0][dest_key]["output"][0]["memory"] == sz * 4 + ), "output of add_update operator has wrong allocated size" - # check add_update is inplace or not - dest_ptr = jdiff[0][dest_key]["output"][0]["dev_ptr"] + # check add_update is inplace or not + dest_ptr = jdiff[0][dest_key]["output"][0]["dev_ptr"] - found = False - for li in json_str1: - if "0" in li.keys(): - src_ptr = li["0"]["output"][0]["dev_ptr"] - found = dest_ptr == src_ptr + found = False + for li in json_str1: + if "0" in li.keys(): + src_ptr = li["0"]["output"][0]["dev_ptr"] + found = dest_ptr == src_ptr - assert found == True, "add_update is not inplace" + assert found == True, "add_update is not inplace" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3af182401f1dd72287bbd534943a32db03a24ce3..7b7f05b79695d28853c97208acfbbf265514327b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,19 +2,9 @@ file(GLOB_RECURSE SOURCES core/impl/*.cpp gopt/impl/*.cpp opr/impl/*.cpp plugin/impl/*.cpp serialization/impl/*.cpp core/impl/*.inl gopt/impl/*.inl opr/impl/*.inl plugin/impl/*.inl serialization/impl/*.inl) -set(MGB_DEF) if(MGE_WITH_JIT) - list(APPEND MGB_DEF -DMGB_JIT=1) file(GLOB_RECURSE SOURCES_ jit/impl/*.cpp jit/impl/*.inl) list(APPEND SOURCES ${SOURCES_}) -else() - list(APPEND MGB_DEF -DMGB_JIT=0) -endif() - -if(MGE_INFERENCE_ONLY) - list(APPEND MGB_DEF -DMGB_ENABLE_GRAD=0 -DMGB_BUILD_SLIM_SERVING=1) -else() - list(APPEND MGB_DEF -DMGB_ENABLE_GRAD=1 -DMGB_BUILD_SLIM_SERVING=0) endif() if(MGE_WITH_DISTRIBUTED) @@ -22,7 +12,7 @@ if(MGE_WITH_DISTRIBUTED) list(APPEND SOURCES ${SOURCES_}) endif() -set(MGB_INC core/include gopt/include opr/include plugin/include serialization/include) +set(MGB_INC ${PROJECT_BINARY_DIR}/genfiles core/include gopt/include opr/include plugin/include serialization/include) if(MGE_WITH_JIT) list(APPEND MGB_INC jit/include) @@ -32,25 +22,13 @@ if(MGE_WITH_JIT) endif() if(MGE_WITH_DISTRIBUTED) - list(APPEND MGB_DEF -DMGB_ENABLE_OPR_MM=1) list(APPEND MGB_INC opr-mm/include) -else() - list(APPEND MGB_DEF -DMGB_ENABLE_OPR_MM=0) -endif() - -if(MGE_WITH_CUDA) -list(APPEND MGB_DEF -DMGB_CUDA=1) -else() -list(APPEND MGB_DEF -DMGB_CUDA=0) endif() if(MGE_WITH_CUDA AND MGE_WITH_TRT) - list(APPEND MGB_DEF -DMGB_ENABLE_TENSOR_RT=1) list(APPEND MGB_INC tensorrt/include) file(GLOB_RECURSE SOURCES_ tensorrt/impl/*.cpp tensorrt/impl/*.inl) list(APPEND SOURCES ${SOURCES_}) -else() - list(APPEND MGB_DEF -DMGB_ENABLE_TENSOR_RT=0) endif() set(MGB_DEF ${MGB_DEF} PARENT_SCOPE) diff --git a/src/core/impl/graph/cg_impl.cpp b/src/core/impl/graph/cg_impl.cpp index 590e558a2393dc0a4817154c043f15e46b77fe81..59e48417945aa8cb515aff4e88663285e66e24e6 100644 --- a/src/core/impl/graph/cg_impl.cpp +++ b/src/core/impl/graph/cg_impl.cpp @@ -726,8 +726,8 @@ std::string ComputingGraphImpl::VarReceiverInfo::to_string() const { allow_empty_value); } +std::string ComputingGraphImpl::get_mem_allocation_info() const { #if MGB_ENABLE_JSON -std::shared_ptr ComputingGraphImpl::get_dynamic_info() const { auto make_var_json = [](VarNode* single_var) { auto &&cur_mem_plan = single_var->mem_plan(); if (cur_mem_plan.valid()) @@ -766,8 +766,11 @@ std::shared_ptr ComputingGraphImpl::get_dynamic_info() const { objlist->add(obj); } - return objlist; -} + return objlist->to_string(); #endif // MGB_ENABLE_JSON + mgb_log_warn("mgb is not configured with MGB_ENABLE_JSON on," + "get_mem_allocation_info returns null string"); + return std::string(); +} // vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}} diff --git a/src/core/impl/graph/cg_impl.h b/src/core/impl/graph/cg_impl.h index e99ddec393161016734c5ab0d65afa30700013ee..ec314fbcec1c97e3a779d2aa20f7cf8c309c71c1 100644 --- a/src/core/impl/graph/cg_impl.h +++ b/src/core/impl/graph/cg_impl.h @@ -146,9 +146,7 @@ public: return m_var_receiver.at(var); } -#if MGB_ENABLE_JSON - std::shared_ptr get_dynamic_info() const override; -#endif + std::string get_mem_allocation_info() const override; VarNode* find_var_by_id(size_t id) const override; diff --git a/src/core/include/megbrain/graph/cg.h b/src/core/include/megbrain/graph/cg.h index 4f83e297705a827302f1ee190529294785ce93e9..6a17d9e50820656a6fc888031d90908c3840af0f 100644 --- a/src/core/include/megbrain/graph/cg.h +++ b/src/core/include/megbrain/graph/cg.h @@ -175,9 +175,7 @@ class ComputingGraph : public std::enable_shared_from_this, virtual const VarReceiverInfo& var_receiver_in_current_comp_seq( const VarNode *var) const = 0; -#if MGB_ENABLE_JSON - virtual std::shared_ptr get_dynamic_info() const = 0; -#endif + virtual std::string get_mem_allocation_info() const = 0; /*! * \brief find var node by its ID diff --git a/src/core/include/megbrain_build_config.h.in b/src/core/include/megbrain_build_config.h.in new file mode 100644 index 0000000000000000000000000000000000000000..aa5612b9b0cabcf4e7018ee99a3e9823d4eefeaf --- /dev/null +++ b/src/core/include/megbrain_build_config.h.in @@ -0,0 +1,123 @@ +/** + * \file src/core/include/megbrain_build_config.h + * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") + * + * Copyright (c) 2014-2020 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. + */ + +#ifndef _HEADER_MGB_BUILD_CONFIG +#define _HEADER_MGB_BUILD_CONFIG + +#cmakedefine01 MGB_CUDA +#cmakedefine01 MGB_ASSERT_LOC +#cmakedefine01 MGB_ENABLE_DEBUG_UTIL +#cmakedefine01 MGB_ENABLE_LOGGING +#cmakedefine01 MGB_ENABLE_GRAD +#cmakedefine01 MGB_VERBOSE_TYPEINFO_NAME +#cmakedefine01 MGB_BUILD_SLIM_SERVING +#cmakedefine01 MGB_ENABLE_EXCEPTION +#cmakedefine01 MGB_JIT +#cmakedefine01 MGB_JIT_HALIDE +#cmakedefine01 MGB_ENABLE_TENSOR_RT +#cmakedefine01 MGB_ENABLE_JSON +#cmakedefine01 MGB_HAVE_THREAD +#cmakedefine01 MGB_ENABLE_OPR_MM + +// whether cuda is available +#ifndef MGB_CUDA +#define MGB_CUDA 1 +#endif + + +// whether to include file/line location for assert message +#ifndef MGB_ASSERT_LOC +#define MGB_ASSERT_LOC 1 +#endif + +// whether to enable utils/debug.h and other debug methods +#ifndef MGB_ENABLE_DEBUG_UTIL +#define MGB_ENABLE_DEBUG_UTIL 1 +#endif + +// whether to enable logging +#ifndef MGB_ENABLE_LOGGING +#define MGB_ENABLE_LOGGING 1 +#endif + +// whether to enable registering opr grad functions +#ifndef MGB_ENABLE_GRAD +#define MGB_ENABLE_GRAD 1 +#endif + +// whether to include actual class name in mgb::Typeinfo object; if this is +// disabled, mgb::serialization::OprRegistry::find_opr_by_name would not work. +#ifndef MGB_VERBOSE_TYPEINFO_NAME +#define MGB_VERBOSE_TYPEINFO_NAME 1 +#endif + +// whether to enbale configuing megbrain internals through env vars +#ifndef MGB_ENABLE_GETENV +#define MGB_ENABLE_GETENV 1 +#endif + +// whether to remove unnecessary features when used for serving +#ifndef MGB_BUILD_SLIM_SERVING +#define MGB_BUILD_SLIM_SERVING 0 +#endif + +// whether to enable exception +#ifndef MGB_ENABLE_EXCEPTION +#if __EXCEPTIONS +#define MGB_ENABLE_EXCEPTION 1 +#else +#define MGB_ENABLE_EXCEPTION 0 +#endif +#endif + +// whether is available and usable +#ifndef MGB_HAVE_THREAD +#define MGB_HAVE_THREAD 1 +#endif + +// whether to trade thread safety for memory usage +#ifndef MGB_THREAD_SAFE +#define MGB_THREAD_SAFE MGB_HAVE_THREAD +#endif + +// whether to enable JIT +#ifndef MGB_JIT +#define MGB_JIT 1 +#endif +#ifndef MGB_JIT_HALIDE +#define MGB_JIT_HALIDE 0 +#endif + + +// whether to enable TensorRT support +#ifndef MGB_ENABLE_TENSOR_RT +#define MGB_ENABLE_TENSOR_RT MGB_CUDA +#endif + +// whether to enable fastrun profile +#ifndef MGB_ENABLE_FASTRUN +#define MGB_ENABLE_FASTRUN 1 +#endif + + +/* ================= following are more finegrind controls ================= */ + +// whether to enable json dumper +#ifndef MGB_ENABLE_JSON +#define MGB_ENABLE_JSON !MGB_BUILD_SLIM_SERVING +#endif + +// whether to enable distributed communication +#ifndef MGB_ENABLE_OPR_MM +#define MGB_ENABLE_OPR_MM 0 +#endif + +#endif // _HEADER_MGB_BUILD_CONFIG