Skip to content

Commit

Permalink
added cmake detection of the OpenBLAS library
Browse files Browse the repository at this point in the history
- thanks to
  https://github.com/BVLC/caffe/blob/master/cmake/Modules/FindOpenBLAS.cmake
- added dedicated openblas test, which has the same testing source the same as for the blas test
  • Loading branch information
Miro Ilias authored and Miro Ilias committed May 30, 2016
1 parent 808d094 commit da89ffd
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 0 deletions.
76 changes: 76 additions & 0 deletions modules/math/openblas.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#.rst:
#
# Find and link to OpenBLAS.
#
# Variables defined::
#
# OpenBLAS_FOUND
# OpenBLAS_LIB
# OpenBLAS_INCLUDE_DIR
#
# autocmake.yml configuration::
#
# docopt: "--openblas Find and link to OpenBLAS [default: False]."
# define: "'-DENABLE_OPENBLAS={0}'.format(arguments['--openblas'])"

SET(Open_BLAS_INCLUDE_SEARCH_PATHS
/usr/include
/usr/include/openblas
/usr/include/openblas-base
/usr/local/include
/usr/local/include/openblas
/usr/local/include/openblas-base
/opt/OpenBLAS/include
$ENV{OpenBLAS_HOME}
$ENV{OpenBLAS_HOME}/include
)

SET(Open_BLAS_LIB_SEARCH_PATHS
/lib/
/lib/openblas-base
/lib64/
/usr/lib
/usr/lib/openblas-base
/usr/lib64
/usr/local/lib
/usr/local/lib64
/opt/OpenBLAS/lib
$ENV{OpenBLAS}cd
$ENV{OpenBLAS}/lib
$ENV{OpenBLAS_HOME}
$ENV{OpenBLAS_HOME}/lib
)

FIND_PATH(OpenBLAS_INCLUDE_DIR NAMES cblas.h PATHS ${Open_BLAS_INCLUDE_SEARCH_PATHS})
FIND_LIBRARY(OpenBLAS_LIB NAMES openblas PATHS ${Open_BLAS_LIB_SEARCH_PATHS})

SET(OpenBLAS_FOUND ON)

# Check include files
IF(NOT OpenBLAS_INCLUDE_DIR)
SET(OpenBLAS_FOUND OFF)
MESSAGE(STATUS "Could not find OpenBLAS include. Turning OpenBLAS_FOUND off")
ENDIF()

# Check libraries
IF(NOT OpenBLAS_LIB)
SET(OpenBLAS_FOUND OFF)
MESSAGE(STATUS "Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off")
ENDIF()

IF (OpenBLAS_FOUND)
IF (NOT OpenBLAS_FIND_QUIETLY)
MESSAGE(STATUS "Found OpenBLAS libraries: ${OpenBLAS_LIB}")
MESSAGE(STATUS "Found OpenBLAS include: ${OpenBLAS_INCLUDE_DIR}")
ENDIF (NOT OpenBLAS_FIND_QUIETLY)
ELSE (OpenBLAS_FOUND)
IF (OpenBLAS_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find OpenBLAS")
ENDIF (OpenBLAS_FIND_REQUIRED)
ENDIF (OpenBLAS_FOUND)

MARK_AS_ADVANCED(
OpenBLAS_INCLUDE_DIR
OpenBLAS_LIB
OpenBLAS
)
11 changes: 11 additions & 0 deletions test/fc_openblas/cmake/autocmake.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
name: example
min_cmake_version: 2.8
modules:
- fc:
- source: ../../../modules/fc.cmake
- math:
- source: ../../../modules/math/openblas.cmake
- default_build_paths:
- source: ../../../modules/default_build_paths.cmake
- src:
- source: ../../../modules/src.cmake
6 changes: 6 additions & 0 deletions test/fc_openblas/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
if(OpenBLAS_FOUND)
add_executable(example example.f90)
target_link_libraries(example ${OpenBLAS_LIB})
else()
message(FATAL_ERROR "OpenBLAS library not found")
endif()
45 changes: 45 additions & 0 deletions test/fc_openblas/src/example.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
program example

implicit none

integer, parameter :: n = 10

integer :: i, j
logical :: test_ok

real(8), allocatable :: a(:, :)
real(8), allocatable :: b(:, :)
real(8), allocatable :: c(:, :)

allocate(a(n, n))
allocate(b(n, n))
allocate(c(n, n))

a = 1.0d0
b = 2.0d0
c = 0.0d0

call dgemm('n', 'n', n, n, n, 1.0d0, a, n, b, n, 0.0d0, c, n)

test_ok = .true.

do i = 1, n
do j = 1, n
if (dabs(c(i, j) - 20.0d0) > tiny(0.0d0)) then
print *, 'ERROR: element', i, j, 'is', c(i, j)
test_ok = .false.
end if
end do
end do

deallocate(a)
deallocate(b)
deallocate(c)

if (test_ok) then
print *, 'PASSED'
else
print *, 'FAILED'
end if

end program

0 comments on commit da89ffd

Please sign in to comment.