pytorch

Форк
0
/
FindMKLDNN.cmake 
119 строк · 4.7 Кб
1
# - Try to find MKLDNN
2
#
3
# The following variables are optionally searched for defaults
4
#  MKL_FOUND             : set to true if a library implementing the CBLAS interface is found
5
#
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
10
#
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.
14

15
IF(NOT MKLDNN_FOUND)
16
  SET(MKLDNN_LIBRARIES)
17
  SET(MKLDNN_INCLUDE_DIR)
18

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)
27

28
  FIND_PACKAGE(BLAS)
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)
39

40
  IF(NOT IDEEP_INCLUDE_DIR OR NOT MKLDNN_INCLUDE_DIR)
41
    MESSAGE(STATUS "MKLDNN source files not found!")
42
    RETURN()
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)
48
  IF(MKL_FOUND)
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})
53
  ELSE(MKL_FOUND)
54
    SET(MKLDNN_USE_MKL "NONE" CACHE STRING "" FORCE)
55
  ENDIF(MKL_FOUND)
56

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")
61
    IF(USE_TBB)
62
      MESSAGE(STATUS "MKL-DNN is using TBB")
63

64
      SET(TBB_cmake_included TRUE)
65
      SET(Threading_cmake_included TRUE)
66

67
      SET(DNNL_CPU_THREADING_RUNTIME ${MKLDNN_CPU_RUNTIME})
68
      INCLUDE_DIRECTORIES(${TBB_INCLUDE_DIR})
69
      LIST(APPEND EXTRA_SHARED_LIBS TBB::tbb)
70
    ELSE()
71
      MESSAGE(FATAL_ERROR "MKLDNN_CPU_RUNTIME is set to TBB but TBB is not used")
72
    ENDIF()
73
  ENDIF()
74
  MESSAGE(STATUS "MKLDNN_CPU_RUNTIME = ${MKLDNN_CPU_RUNTIME}")
75

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)
82

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)
88
  ELSE()
89
    IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
90
      IF(CPU_INTEL)
91
        # Do not specify arch in oneDNN build option, for the portability in older systems
92
        SET(DNNL_ARCH_OPT_FLAGS "" CACHE STRING "" FORCE)
93
      ELSEIF(CPU_AARCH64)
94
        SET(DNNL_ARCH_OPT_FLAGS "-mcpu=generic" CACHE STRING "" FORCE)
95
      ENDIF()
96
    ELSE()
97
      SET(DNNL_ARCH_OPT_FLAGS "" CACHE STRING "" FORCE)
98
    ENDIF()
99
  ENDIF()
100

101
  ADD_SUBDIRECTORY(${MKLDNN_ROOT})
102

103
  IF(NOT TARGET dnnl)
104
    MESSAGE("Failed to include MKL-DNN target")
105
    RETURN()
106
  ENDIF(NOT TARGET dnnl)
107

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)
115

116
  SET(MKLDNN_FOUND TRUE)
117
  MESSAGE(STATUS "Found MKL-DNN: TRUE")
118

119
ENDIF(NOT MKLDNN_FOUND)
120

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.