cblas.cmake 6.1 KB
Newer Older
L
lzhao4ever 已提交
1
# Find the CBlas and lapack libraries
Z
zhangjinchao01 已提交
2 3 4 5 6 7
#
# It will search MKL, atlas, OpenBlas, reference-cblas in order.
#
# If any cblas implementation found, the following variable will be set.
#    CBLAS_PROVIDER  # one of MKL, ATLAS, OPENBLAS, REFERENCE
#    CBLAS_INC_DIR   # the include directory for cblas.
8
#    CBLAS_LIBS      # a list of libraries should be linked by paddle.
Z
zhangjinchao01 已提交
9 10 11 12 13 14 15
#                    # Each library should be full path to object file.
#
# User should set one of MKL_ROOT, ATLAS_ROOT, OPENBLAS_ROOT, REFERENCE_CBLAS_ROOT
# during cmake. If none of them set, it will try to find cblas implementation in
# system paths.
#

L
liaogang 已提交
16
set(CBLAS_FOUND OFF)
Z
zhangjinchao01 已提交
17

T
tensor-tang 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
## Find MKL Lite First.
if(WITH_MKL_LITE AND MKL_LITE_INC_DIR AND MKL_LITE_LIB)
  set(CBLAS_FOUND ON)
  set(CBLAS_PROVIDER MKL_LITE)
  set(CBLAS_INC_DIR ${MKL_LITE_INC_DIR})
  set(CBLAS_LIBRARIES ${MKL_LITE_LIB})

  add_definitions(-DPADDLE_USE_MKL_LITE)
  add_definitions(-DLAPACK_FOUND)

  message(STATUS "Found cblas and lapack in MKL Lite "
    "(include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
  return()
endif()

## Then find MKL.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
set(INTEL_MKL_ROOT "/opt/intel/mkl" CACHE PATH "Folder contains intel mkl libs")
set(MKL_ROOT $ENV{MKL_ROOT} CACHE PATH "Folder contains env MKL")

set(MKL_INCLUDE_SEARCH_PATHS
  ${MKL_ROOT}/include
  ${INTEL_MKL_ROOT}/include)
set(MKL_LIB_SEARCH_PATHS
  ${MKL_ROOT}/lib
  ${MKL_ROOT}/lib/intel64
  ${INTEL_MKL_ROOT}/lib
  ${INTEL_MKL_ROOT}/lib/intel64)

if(MKL_LITE_INC_DIR AND MKL_LITE_LIB)
  set(CBLAS_FOUND ON)
  set(CBLAS_PROVIDER MKL_LITE)
  set(CBLAS_INC_DIR ${MKL_LITE_INC_DIR})
  set(CBLAS_LIBRARIES ${MKL_LITE_LIB})

  add_definitions(-DPADDLE_USE_MKL_LITE)
  add_definitions(-DLAPACK_FOUND)

  message(STATUS "Found cblas and lapack in MKL Lite "
    "(include: ${MKL_LITE_INC_DIR}, library: ${CBLAS_LIBRARIES})")
  return()
endif()
Z
zhangjinchao01 已提交
59

L
Liu Yiqun 已提交
60
find_path(MKL_INC_DIR mkl.h PATHS
61
  ${MKL_INCLUDE_SEARCH_PATHS})
L
Liu Yiqun 已提交
62
find_path(MKL_LAPACK_INC_DIR mkl_lapacke.h PATHS
63
  ${MKL_INCLUDE_SEARCH_PATHS})
B
backyes 已提交
64
find_library(MKL_CORE_LIB NAMES mkl_core PATHS
65
  ${MKL_LIB_SEARCH_PATHS})
B
backyes 已提交
66
find_library(MKL_SEQUENTIAL_LIB NAMES mkl_sequential PATHS
67
  ${MKL_LIB_SEARCH_PATHS})
B
backyes 已提交
68
find_library(MKL_INTEL_LP64 NAMES mkl_intel_lp64 PATHS
69
  ${MKL_LIB_SEARCH_PATHS})
Z
zhangjinchao01 已提交
70

L
liaogang 已提交
71 72
if(MKL_LAPACK_INC_DIR AND MKL_INC_DIR AND MKL_CORE_LIB AND MKL_SEQUENTIAL_LIB AND MKL_INTEL_LP64)
  set(CBLAS_FOUND ON)
Z
zhangjinchao01 已提交
73
  set(CBLAS_PROVIDER MKL)
L
liaogang 已提交
74 75 76
  set(CBLAS_INC_DIR ${MKL_INC_DIR} ${MKL_LAPACK_INC_DIR})
  set(CBLAS_LIBRARIES ${MKL_INTEL_LP64} ${MKL_SEQUENTIAL_LIB} ${MKL_CORE_LIB})

Z
zhangjinchao01 已提交
77
  add_definitions(-DPADDLE_USE_MKL)
L
liaogang 已提交
78
  add_definitions(-DLAPACK_FOUND)
L
liaogang 已提交
79 80 81 82

  message(STATUS "Found MKL (include: ${MKL_INC_DIR}, library: ${CBLAS_LIBRARIES})")
  message(STATUS "Found lapack in MKL (include: ${MKL_LAPACK_INC_DIR})")
  return()
Z
zhangjinchao01 已提交
83 84 85 86 87 88 89 90 91 92 93 94 95
endif()

## Then find atlas.
set(ATLAS_ROOT $ENV{ATLAS_ROOT} CACHE PATH "Folder contains Atlas")
set(ATLAS_INCLUDE_SEARCH_PATHS
        ${ATLAS_ROOT}/include
        /usr/include
        /usr/include/atlas)
set(ATLAS_LIB_SEARCH_PATHS
        ${ATLAS_ROOT}/lib
        /usr/lib
        /usr/lib/blas/atlas
        /usr/lib/atlas
L
liaogang 已提交
96 97
        /usr/lib/atlas-base   # special for ubuntu 14.04.
    )
98
find_path(ATLAS_INC_DIR NAMES cblas.h
Z
zhangjinchao01 已提交
99
  PATHS ${ATLAS_INCLUDE_SEARCH_PATHS})
L
lzhao4ever 已提交
100 101
find_path(ATLAS_CLAPACK_INC_DIR NAMES clapack.h
  PATHS ${ATLAS_INCLUDE_SEARCH_PATHS})
102
find_library(ATLAS_CBLAS_LIB NAMES cblas libcblas.so.3
Z
zhangjinchao01 已提交
103
  PATHS ${ATLAS_LIB_SEARCH_PATHS})
L
liaogang 已提交
104
find_library(ATLAS_CLAPACK_LIB NAMES lapack_atlas liblapack_atlas.so.3
Z
zhangjinchao01 已提交
105 106
  PATHS ${ATLAS_LIB_SEARCH_PATHS})

L
liaogang 已提交
107 108
if(ATLAS_CLAPACK_INC_DIR AND ATLAS_INC_DIR AND ATLAS_CBLAS_LIB AND ATLAS_CLAPACK_LIB)
  set(CBLAS_FOUND ON)
Z
zhangjinchao01 已提交
109
  set(CBLAS_PROVIDER ATLAS)
L
liaogang 已提交
110 111 112
  set(CBLAS_INC_DIR ${ATLAS_INC_DIR} ${ATLAS_CLAPACK_INC_DIR})
  set(CBLAS_LIBRARIES ${ATLAS_CLAPACK_LIB} ${ATLAS_CBLAS_LIB})

113
  add_definitions(-DPADDLE_USE_ATLAS)
L
liaogang 已提交
114
  add_definitions(-DLAPACK_FOUND)
L
liaogang 已提交
115 116 117

  message(STATUS "Found ATLAS (include: ${ATLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
  message(STATUS "Found lapack in ATLAS (include: ${ATLAS_CLAPACK_INC_DIR})")
Z
zhangjinchao01 已提交
118 119 120 121 122 123 124 125
  return()
endif()

## Then find openblas.
set(OPENBLAS_ROOT $ENV{OPENBLAS_ROOT} CACHE PATH "Folder contains Openblas")
set(OPENBLAS_INCLUDE_SEARCH_PATHS
        ${OPENBLAS_ROOT}/include
        /usr/include
L
liaogang 已提交
126 127
        /usr/include/openblas
        /usr/local/opt/openblas/include)
Z
zhangjinchao01 已提交
128 129 130 131
set(OPENBLAS_LIB_SEARCH_PATHS
        ${OPENBLAS_ROOT}/lib
        /usr/lib
        /usr/lib/blas/openblas
L
liaogang 已提交
132 133
        /usr/lib/openblas
        /usr/local/opt/openblas/lib)
Z
zhangjinchao01 已提交
134 135 136

find_path(OPENBLAS_INC_DIR NAMES cblas.h
  PATHS ${OPENBLAS_INCLUDE_SEARCH_PATHS})
L
lzhao4ever 已提交
137 138
find_path(OPENBLAS_LAPACKE_INC_DIR NAMES lapacke.h
  PATHS ${OPENBLAS_INCLUDE_SEARCH_PATHS})
Z
zhangjinchao01 已提交
139 140 141
find_library(OPENBLAS_LIB NAMES openblas
  PATHS ${OPENBLAS_LIB_SEARCH_PATHS})

L
liaogang 已提交
142 143
if(OPENBLAS_LAPACKE_INC_DIR AND OPENBLAS_INC_DIR AND OPENBLAS_LIB)
  set(CBLAS_FOUND ON)
Z
zhangjinchao01 已提交
144
  set(CBLAS_PROVIDER OPENBLAS)
L
liaogang 已提交
145
  set(CBLAS_INC_DIR ${OPENBLAS_INC_DIR} ${OPENBLAS_LAPACKE_INC_DIR})
L
liaogang 已提交
146
  set(CBLAS_LIBRARIES ${OPENBLAS_LIB})
L
liaogang 已提交
147

L
liaogang 已提交
148
  add_definitions(-DPADDLE_USE_OPENBLAS)
L
liaogang 已提交
149
  add_definitions(-DLAPACK_FOUND)
L
liaogang 已提交
150 151 152

  message(STATUS "Found OpenBLAS (include: ${OPENBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
  message(STATUS "Found lapack in OpenBLAS (include: ${OPENBLAS_LAPACKE_INC_DIR})")
Z
zhangjinchao01 已提交
153 154 155 156 157 158 159
  return()
endif()


## Then find the reference-cblas.  www.netlib.org/blas/


160
set(REFERENCE_CBLAS_ROOT $ENV{REFERENCE_CBLAS_ROOT} CACHE PATH
Z
zhangjinchao01 已提交
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
  "Folder contains reference-cblas")
set(REFERENCE_CBLAS_INCLUDE_SEARCH_PATHS
  ${REFERENCE_CBLAS_ROOT}/include
  /usr/include
  /usr/include/cblas
)

set(REFERENCE_CBLAS_LIB_SEARCH_PATHS
  ${REFERENCE_CBLAS_ROOT}/lib
  /usr/lib
  /usr/lib/blas/reference/
  /usr/lib/reference/
)

find_path(REFERENCE_CBLAS_INCLUDE_DIR NAMES cblas.h PATHS
        ${REFERENCE_CBLAS_INCLUDE_SEARCH_PATHS})
find_library(REFERENCE_CBLAS_LIBRARY NAMES cblas PATHS
        ${REFERENCE_CBLAS_LIB_SEARCH_PATHS})

if (REFERENCE_CBLAS_INCLUDE_DIR AND REFERENCE_CBLAS_LIBRARY)
L
liaogang 已提交
181
  set(CBLAS_FOUND ON)
Z
zhangjinchao01 已提交
182 183
  set(CBLAS_PROVIDER REFERENCE)
  set(CBLAS_INC_DIR ${REFERENCE_CBLAS_INCLUDE_DIR})
L
liaogang 已提交
184
  set(CBLAS_LIBRARIES ${REFERENCE_CBLAS_LIBRARY})
L
liaogang 已提交
185
  add_definitions(-DPADDLE_USE_REFERENCE_CBLAS)
L
liaogang 已提交
186
  message(STATUS "Found reference-cblas (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
Z
zhangjinchao01 已提交
187
endif()