3
# The following variables are optionally searched for defaults
4
# MKL_FOUND : set to true if a library implementing the CBLAS interface is found
6
# The following are set after configuration is done:
7
# MKLDNN_FOUND : set to true if mkl-dnn is found.
8
# MKLDNN_INCLUDE_DIR : path to mkl-dnn include dir.
9
# MKLDNN_LIBRARIES : list of libraries for mkl-dnn
11
# The following variables are used:
12
# MKLDNN_USE_NATIVE_ARCH : Whether native CPU instructions should be used in MKLDNN. This should be turned off for
13
# general packaging to avoid incompatible CPU instructions. Default: OFF.
17
SET(MKLDNN_INCLUDE_DIR)
19
SET(IDEEP_ROOT "${PROJECT_SOURCE_DIR}/third_party/ideep")
20
SET(MKLDNN_ROOT "${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn")
21
IF(NOT APPLE AND NOT WIN32 AND NOT BUILD_LITE_INTERPRETER)
22
MESSAGE("-- Will build oneDNN Graph")
23
SET(LLGA_ROOT "${PROJECT_SOURCE_DIR}/third_party/ideep/mkl-dnn")
24
SET(BUILD_ONEDNN_GRAPH ON)
25
SET(ONEDNN_BUILD_GRAPH ON CACHE BOOL "" FORCE)
26
ENDIF(NOT APPLE AND NOT WIN32 AND NOT BUILD_LITE_INTERPRETER)
29
FIND_PATH(IDEEP_INCLUDE_DIR ideep.hpp PATHS ${IDEEP_ROOT} PATH_SUFFIXES include)
30
FIND_PATH(MKLDNN_INCLUDE_DIR dnnl.hpp dnnl.h PATHS ${MKLDNN_ROOT} PATH_SUFFIXES include/oneapi/dnnl)
31
IF(NOT MKLDNN_INCLUDE_DIR)
32
MESSAGE("MKLDNN_INCLUDE_DIR not found")
33
EXECUTE_PROCESS(COMMAND git${CMAKE_EXECUTABLE_SUFFIX} submodule update --init mkl-dnn WORKING_DIRECTORY ${IDEEP_ROOT})
34
FIND_PATH(MKLDNN_INCLUDE_DIR dnnl.hpp dnnl.h PATHS ${MKLDNN_ROOT} PATH_SUFFIXES include)
35
ENDIF(NOT MKLDNN_INCLUDE_DIR)
36
IF(BUILD_ONEDNN_GRAPH)
37
FIND_PATH(LLGA_INCLUDE_DIR dnnl_graph.hpp PATHS ${LLGA_ROOT} PATH_SUFFIXES include/oneapi/dnnl)
38
ENDIF(BUILD_ONEDNN_GRAPH)
40
IF(NOT IDEEP_INCLUDE_DIR OR NOT MKLDNN_INCLUDE_DIR)
41
MESSAGE(STATUS "MKLDNN source files not found!")
43
ENDIF(NOT IDEEP_INCLUDE_DIR OR NOT MKLDNN_INCLUDE_DIR)
44
LIST(APPEND MKLDNN_INCLUDE_DIR ${IDEEP_INCLUDE_DIR})
45
IF(BUILD_ONEDNN_GRAPH)
46
LIST(APPEND MKLDNN_INCLUDE_DIR ${LLGA_INCLUDE_DIR})
47
ENDIF(BUILD_ONEDNN_GRAPH)
49
ADD_DEFINITIONS(-DIDEEP_USE_MKL)
50
# Append to mkldnn dependencies
51
LIST(APPEND MKLDNN_LIBRARIES ${MKL_LIBRARIES})
52
LIST(APPEND MKLDNN_INCLUDE_DIR ${MKL_INCLUDE_DIR})
54
SET(MKLDNN_USE_MKL "NONE" CACHE STRING "" FORCE)
57
SET(MKL_cmake_included TRUE)
58
IF(NOT MKLDNN_CPU_RUNTIME)
59
SET(MKLDNN_CPU_RUNTIME "OMP" CACHE STRING "")
60
ELSEIF(MKLDNN_CPU_RUNTIME STREQUAL "TBB")
62
MESSAGE(STATUS "MKL-DNN is using TBB")
64
SET(TBB_cmake_included TRUE)
65
SET(Threading_cmake_included TRUE)
67
SET(DNNL_CPU_THREADING_RUNTIME ${MKLDNN_CPU_RUNTIME})
68
INCLUDE_DIRECTORIES(${TBB_INCLUDE_DIR})
69
LIST(APPEND EXTRA_SHARED_LIBS TBB::tbb)
71
MESSAGE(FATAL_ERROR "MKLDNN_CPU_RUNTIME is set to TBB but TBB is not used")
74
MESSAGE(STATUS "MKLDNN_CPU_RUNTIME = ${MKLDNN_CPU_RUNTIME}")
76
SET(MKLDNN_CPU_RUNTIME ${MKLDNN_CPU_RUNTIME} CACHE STRING "" FORCE)
77
SET(DNNL_BUILD_TESTS FALSE CACHE BOOL "" FORCE)
78
SET(DNNL_BUILD_EXAMPLES FALSE CACHE BOOL "" FORCE)
79
SET(DNNL_LIBRARY_TYPE STATIC CACHE STRING "" FORCE)
80
SET(DNNL_ENABLE_PRIMITIVE_CACHE TRUE CACHE BOOL "" FORCE)
81
SET(DNNL_GRAPH_CPU_RUNTIME ${MKLDNN_CPU_RUNTIME} CACHE STRING "" FORCE)
83
IF(BUILD_ONEDNN_GRAPH)
84
SET(DNNL_GRAPH_LIBRARY_TYPE STATIC CACHE STRING "" FORCE)
85
ENDIF(BUILD_ONEDNN_GRAPH)
86
IF(MKLDNN_USE_NATIVE_ARCH) # Disable HostOpts in MKLDNN unless MKLDNN_USE_NATIVE_ARCH is set.
87
SET(DNNL_ARCH_OPT_FLAGS "HostOpts" CACHE STRING "" FORCE)
89
IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
91
# Do not specify arch in oneDNN build option, for the portability in older systems
92
SET(DNNL_ARCH_OPT_FLAGS "" CACHE STRING "" FORCE)
94
SET(DNNL_ARCH_OPT_FLAGS "-mcpu=generic" CACHE STRING "" FORCE)
97
SET(DNNL_ARCH_OPT_FLAGS "" CACHE STRING "" FORCE)
101
ADD_SUBDIRECTORY(${MKLDNN_ROOT})
104
MESSAGE("Failed to include MKL-DNN target")
106
ENDIF(NOT TARGET dnnl)
108
IF(NOT APPLE AND CMAKE_COMPILER_IS_GNUCC)
109
TARGET_COMPILE_OPTIONS(dnnl PRIVATE -Wno-maybe-uninitialized)
110
TARGET_COMPILE_OPTIONS(dnnl PRIVATE -Wno-strict-overflow)
111
TARGET_COMPILE_OPTIONS(dnnl PRIVATE -Wno-error=strict-overflow)
112
ENDIF(NOT APPLE AND CMAKE_COMPILER_IS_GNUCC)
113
LIST(APPEND MKLDNN_LIBRARIES ${MKL_OPENMP_LIBRARY})
114
LIST(APPEND MKLDNN_LIBRARIES dnnl)
116
SET(MKLDNN_FOUND TRUE)
117
MESSAGE(STATUS "Found MKL-DNN: TRUE")
119
ENDIF(NOT MKLDNN_FOUND)