| # - Try to find MKLDNN |
| # |
| # The following variables are optionally searched for defaults |
| # MKL_FOUND : set to true if a library implementing the CBLAS interface is found |
| # |
| # The following are set after configuration is done: |
| # MKLDNN_FOUND : set to true if mkl-dnn is found. |
| # MKLDNN_INCLUDE_DIR : path to mkl-dnn include dir. |
| # MKLDNN_LIBRARIES : list of libraries for mkl-dnn |
| # |
| # The following variables are used: |
| # MKLDNN_USE_NATIVE_ARCH : Whether native CPU instructions should be used in MKLDNN. This should be turned off for |
| # general packaging to avoid incompatible CPU instructions. Default: OFF. |
| |
| IF (NOT MKLDNN_FOUND) |
| |
| SET(MKLDNN_LIBRARIES) |
| SET(MKLDNN_INCLUDE_DIR) |
| |
| IF(MSVC) |
| MESSAGE(STATUS "MKL-DNN needs omp 3+ which is not supported in MSVC so far") |
| RETURN() |
| ENDIF(MSVC) |
| |
| SET(IDEEP_ROOT "${PROJECT_SOURCE_DIR}/third_party/ideep") |
| SET(MKLDNN_ROOT "${IDEEP_ROOT}/mkl-dnn") |
| |
| FIND_PACKAGE(BLAS) |
| FIND_PATH(IDEEP_INCLUDE_DIR ideep.hpp PATHS ${IDEEP_ROOT} PATH_SUFFIXES include) |
| FIND_PATH(MKLDNN_INCLUDE_DIR mkldnn.hpp mkldnn.h PATHS ${MKLDNN_ROOT} PATH_SUFFIXES include) |
| IF (NOT MKLDNN_INCLUDE_DIR) |
| EXECUTE_PROCESS(COMMAND git${CMAKE_EXECUTABLE_SUFFIX} submodule update --init mkl-dnn WORKING_DIRECTORY ${IDEEP_ROOT}) |
| FIND_PATH(MKLDNN_INCLUDE_DIR mkldnn.hpp mkldnn.h PATHS ${MKLDNN_ROOT} PATH_SUFFIXES include) |
| ENDIF(NOT MKLDNN_INCLUDE_DIR) |
| |
| IF (NOT IDEEP_INCLUDE_DIR OR NOT MKLDNN_INCLUDE_DIR) |
| MESSAGE(STATUS "MKLDNN source files not found!") |
| RETURN() |
| ENDIF(NOT IDEEP_INCLUDE_DIR OR NOT MKLDNN_INCLUDE_DIR) |
| LIST(APPEND MKLDNN_INCLUDE_DIR ${IDEEP_INCLUDE_DIR}) |
| IF(MKL_FOUND) |
| ADD_DEFINITIONS(-DIDEEP_USE_MKL) |
| # Append to mkldnn dependencies |
| LIST(APPEND MKLDNN_LIBRARIES ${MKL_LIBRARIES}) |
| LIST(APPEND MKLDNN_INCLUDE_DIR ${MKL_INCLUDE_DIR}) |
| ELSE(MKL_FOUND) |
| SET(MKLDNN_USE_MKL "NONE" CACHE STRING "" FORCE) |
| ENDIF(MKL_FOUND) |
| |
| SET(MKL_cmake_included TRUE) |
| IF (NOT MKLDNN_THREADING) |
| SET(MKLDNN_THREADING "OMP:COMP" CACHE STRING "") |
| ELSEIF (MKLDNN_THREADING STREQUAL "TBB") |
| IF (USE_TBB) |
| MESSAGE(STATUS "MKL-DNN is using TBB") |
| |
| SET(TBB_cmake_included TRUE) |
| SET(Threading_cmake_included TRUE) |
| |
| REMOVE_DEFINITIONS(-DMKLDNN_THR) |
| ADD_DEFINITIONS(-DMKLDNN_THR=MKLDNN_THR_TBB) |
| |
| SET(TBB_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/third_party/tbb/include") |
| INCLUDE_DIRECTORIES(${TBB_INCLUDE_DIRS}) |
| LIST(APPEND EXTRA_SHARED_LIBS tbb) |
| ELSE() |
| MESSAGE(FATAL_ERROR "MKLDNN_THREADING is set to TBB but TBB is not used") |
| ENDIF() |
| ENDIF() |
| MESSAGE(STATUS "MKLDNN_THREADING = ${MKLDNN_THREADING}") |
| |
| SET(WITH_TEST FALSE CACHE BOOL "" FORCE) |
| SET(WITH_EXAMPLE FALSE CACHE BOOL "" FORCE) |
| SET(MKLDNN_LIBRARY_TYPE STATIC CACHE STRING "" FORCE) |
| IF(MKLDNN_USE_NATIVE_ARCH) # Disable HostOpts in MKLDNN unless MKLDNN_USE_NATIVE_ARCH is set. |
| SET(ARCH_OPT_FLAGS "HostOpts" CACHE STRING "" FORCE) |
| ELSE() |
| IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
| SET(ARCH_OPT_FLAGS "-msse4" CACHE STRING "" FORCE) |
| ELSE() |
| SET(ARCH_OPT_FLAGS "" CACHE STRING "" FORCE) |
| ENDIF() |
| ENDIF() |
| |
| ADD_SUBDIRECTORY(${MKLDNN_ROOT}) |
| IF(NOT TARGET mkldnn) |
| MESSAGE("Failed to include MKL-DNN target") |
| RETURN() |
| ENDIF(NOT TARGET mkldnn) |
| IF(MKL_FOUND) |
| SET(USE_MKL_CBLAS -DUSE_MKL) |
| IF(USE_MKLDNN_CBLAS) |
| LIST(APPEND USE_MKL_CBLAS -DUSE_CBLAS) |
| ENDIF(USE_MKLDNN_CBLAS) |
| TARGET_COMPILE_DEFINITIONS(mkldnn PRIVATE USE_MKL_CBLAS) |
| ENDIF(MKL_FOUND) |
| IF(NOT APPLE AND CMAKE_COMPILER_IS_GNUCC) |
| TARGET_COMPILE_OPTIONS(mkldnn PRIVATE -Wno-maybe-uninitialized) |
| TARGET_COMPILE_OPTIONS(mkldnn PRIVATE -Wno-strict-overflow) |
| TARGET_COMPILE_OPTIONS(mkldnn PRIVATE -Wno-error=strict-overflow) |
| ENDIF(NOT APPLE AND CMAKE_COMPILER_IS_GNUCC) |
| TARGET_COMPILE_OPTIONS(mkldnn PRIVATE -Wno-tautological-compare) |
| LIST(APPEND MKLDNN_LIBRARIES mkldnn) |
| |
| SET(MKLDNN_FOUND TRUE) |
| MESSAGE(STATUS "Found MKL-DNN: TRUE") |
| |
| ENDIF(NOT MKLDNN_FOUND) |