cblas.cmake 5.0 KB
Newer Older
L
lzhao4ever 已提交
1
# Find the CBlas and lapack libraries
Z
zhangjinchao01 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15
#
# 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.
#    CBLAS_LIBS      # a list of libraries should be linked by paddle. 
#                    # 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 18

## Find MKL First.
L
liaogang 已提交
19 20
set(INTEL_ROOT "/opt/intel" CACHE PATH "Folder contains intel libs")
set(MKL_ROOT ${INTEL_ROOT}/mkl CACHE PATH "Folder contains MKL")
Z
zhangjinchao01 已提交
21

L
Liu Yiqun 已提交
22
find_path(MKL_INC_DIR mkl.h PATHS
B
backyes 已提交
23
  ${MKL_ROOT}/include)
L
Liu Yiqun 已提交
24
find_path(MKL_LAPACK_INC_DIR mkl_lapacke.h PATHS
L
lzhao4ever 已提交
25
  ${MKL_ROOT}/include)
B
backyes 已提交
26 27 28 29 30 31 32 33 34
find_library(MKL_CORE_LIB NAMES mkl_core PATHS
  ${MKL_ROOT}/lib
  ${MKL_ROOT}/lib/intel64)
find_library(MKL_SEQUENTIAL_LIB NAMES mkl_sequential PATHS
  ${MKL_ROOT}/lib
  ${MKL_ROOT}/lib/intel64)
find_library(MKL_INTEL_LP64 NAMES mkl_intel_lp64 PATHS
  ${MKL_ROOT}/lib
  ${MKL_ROOT}/lib/intel64)
Z
zhangjinchao01 已提交
35 36


L
Liu Yiqun 已提交
37
if(MKL_INC_DIR AND MKL_CORE_LIB AND MKL_SEQUENTIAL_LIB AND MKL_INTEL_LP64)
Z
zhangjinchao01 已提交
38
  set(CBLAS_PROVIDER MKL)
L
Liu Yiqun 已提交
39
  set(CBLAS_INC_DIR ${MKL_INC_DIR})
L
liaogang 已提交
40
  set(CBLAS_LIBRARIES ${MKL_INTEL_LP64}
Z
zhangjinchao01 已提交
41 42 43
          ${MKL_SEQUENTIAL_LIB}
          ${MKL_CORE_LIB})
  add_definitions(-DPADDLE_USE_MKL)
L
liaogang 已提交
44 45
  message(STATUS "Found MKL (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
  set(CBLAS_FOUND ON)
L
Liu Yiqun 已提交
46
  if(${MKL_LAPACK_INC_DIR})
47
    add_definitions(-DPADDLE_USE_LAPACK)
L
Liu Yiqun 已提交
48 49
    message(STATUS "Found lapack in MKL (include: ${MKL_LAPACK_INC_DIR})")
  endif()
Z
zhangjinchao01 已提交
50 51 52 53 54 55 56 57 58 59 60 61 62 63
  return() # return file.
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 已提交
64 65
        /usr/lib/atlas-base   # special for ubuntu 14.04.
    )
Z
zhangjinchao01 已提交
66 67
find_path(ATLAS_INC_DIR NAMES cblas.h 
  PATHS ${ATLAS_INCLUDE_SEARCH_PATHS})
L
lzhao4ever 已提交
68 69
find_path(ATLAS_CLAPACK_INC_DIR NAMES clapack.h
  PATHS ${ATLAS_INCLUDE_SEARCH_PATHS})
Z
zhangjinchao01 已提交
70 71
find_library(ATLAS_CBLAS_LIB NAMES cblas libcblas.so.3 
  PATHS ${ATLAS_LIB_SEARCH_PATHS})
L
lzhao4ever 已提交
72
find_library(ATLAS_LIB NAMES lapack_atlas liblapack_atlas.so.3
Z
zhangjinchao01 已提交
73 74
  PATHS ${ATLAS_LIB_SEARCH_PATHS})

L
Liu Yiqun 已提交
75
if(ATLAS_INC_DIR AND ATLAS_CBLAS_LIB AND ATLAS_LIB AND NOT CBLAS_FOUND)
Z
zhangjinchao01 已提交
76
  set(CBLAS_PROVIDER ATLAS)
L
Liu Yiqun 已提交
77
  set(CBLAS_INC_DIR ${ATLAS_INC_DIR})
L
liaogang 已提交
78
  set(CBLAS_LIBRARIES ${ATLAS_LIB} ${ATLAS_CBLAS_LIB})
L
lzhao4ever 已提交
79
  add_definitions(-DPADDLE_USE_ATLAS)  
L
Liu Yiqun 已提交
80
  message(STATUS "Found ATLAS (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
L
liaogang 已提交
81
  set(CBLAS_FOUND ON)
L
Liu Yiqun 已提交
82
  if(ATLAS_CLAPACK_INC_DIR)
83
    add_definitions(-DPADDLE_USE_LAPACK)
L
Liu Yiqun 已提交
84 85
    message(STATUS "Found lapack in ATLAS (include: ${ATLAS_CLAPACK_INC_DIR})")
  endif()
Z
zhangjinchao01 已提交
86 87 88 89 90 91 92 93
  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 已提交
94 95
        /usr/include/openblas
        /usr/local/opt/openblas/include)
Z
zhangjinchao01 已提交
96 97 98 99
set(OPENBLAS_LIB_SEARCH_PATHS
        ${OPENBLAS_ROOT}/lib
        /usr/lib
        /usr/lib/blas/openblas
L
liaogang 已提交
100 101
        /usr/lib/openblas
        /usr/local/opt/openblas/lib)
Z
zhangjinchao01 已提交
102 103 104

find_path(OPENBLAS_INC_DIR NAMES cblas.h
  PATHS ${OPENBLAS_INCLUDE_SEARCH_PATHS})
L
lzhao4ever 已提交
105 106
find_path(OPENBLAS_LAPACKE_INC_DIR NAMES lapacke.h
  PATHS ${OPENBLAS_INCLUDE_SEARCH_PATHS})
Z
zhangjinchao01 已提交
107 108 109 110 111 112
find_library(OPENBLAS_LIB NAMES openblas
  PATHS ${OPENBLAS_LIB_SEARCH_PATHS})

if(OPENBLAS_INC_DIR AND OPENBLAS_LIB)
  set(CBLAS_PROVIDER OPENBLAS)
  set(CBLAS_INC_DIR ${OPENBLAS_INC_DIR})
L
liaogang 已提交
113
  set(CBLAS_LIBRARIES ${OPENBLAS_LIB})
L
Liu Yiqun 已提交
114
  message(STATUS "Found OpenBLAS (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBRARIES})")
L
liaogang 已提交
115
  set(CBLAS_FOUND ON)
L
Liu Yiqun 已提交
116
  if(OPENBLAS_LAPACKE_INC_DIR)
117
    add_definitions(-DPADDLE_USE_LAPACK)
L
Liu Yiqun 已提交
118 119
    message(STATUS "Found lapack in OpenBLAS (include: ${OPENBLAS_LAPACKE_INC_DIR})")
  endif()
Z
zhangjinchao01 已提交
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
  return()
endif()


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


set(REFERENCE_CBLAS_ROOT $ENV{REFERENCE_CBLAS_ROOT} CACHE PATH 
  "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)
  set(CBLAS_PROVIDER REFERENCE)
  set(CBLAS_INC_DIR ${REFERENCE_CBLAS_INCLUDE_DIR})
L
liaogang 已提交
150 151 152
  set(CBLAS_LIBRARIES ${REFERENCE_CBLAS_LIBRARY})
  message(STATUS "Found reference-cblas (include: ${CBLAS_INC_DIR}, library: ${CBLAS_LIBS})")
  set(CBLAS_FOUND ON)
Z
zhangjinchao01 已提交
153
endif()