Compare commits

...

6 Commits

Author SHA1 Message Date
Radovan Bast
ba05c8aafc add __init__.py 2016-07-11 16:42:37 +02:00
Radovan Bast
9d1ab64720 do not repeat all that code 2016-07-11 16:32:00 +02:00
Radovan Bast
18349229ff trim 2016-07-11 16:29:14 +02:00
Radovan Bast
05f4ad9116 do not entangle tests 2016-07-11 16:20:44 +02:00
Radovan Bast
1aa7e1a4bd do not repeat tests 2016-07-11 16:18:25 +02:00
Radovan Bast
4d902ea85c add Miro's modifications for OpenBLAS detection 2016-07-11 16:14:44 +02:00
7 changed files with 211 additions and 3 deletions

View File

@ -7,7 +7,7 @@ matrix:
- os: linux - os: linux
python: 2.7 python: 2.7
compiler: gcc compiler: gcc
env: SOURCES=ubuntu-toolchain-r-test env: SOURCES=ubuntu-toolchain-r-test TEST_SCRIPT=test.py
addons: addons:
apt: apt:
sources: sources:
@ -32,7 +32,7 @@ matrix:
- os: linux - os: linux
python: 3.5 python: 3.5
compiler: gcc compiler: gcc
env: SOURCES=ubuntu-toolchain-r-test env: SOURCES=ubuntu-toolchain-r-test TEST_SCRIPT=test.py
addons: addons:
apt: apt:
sources: sources:
@ -53,6 +53,22 @@ matrix:
# boost # boost
- libboost-all-dev - libboost-all-dev
- os: linux
python: 3.5
compiler: gcc
env: SOURCES=ubuntu-toolchain-r-test TEST_SCRIPT=test_openblas.py
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
# compilers
- g++
- gfortran
- cmake
- libblas-dev
- libopenblas-dev
- os: osx - os: osx
osx_image: xcode6.4 osx_image: xcode6.4
compiler: gcc compiler: gcc
@ -79,7 +95,7 @@ script:
- pep8 --ignore E501,E265 autocmake - pep8 --ignore E501,E265 autocmake
# unit tests # unit tests
- py.test -vv autocmake/* - py.test -vv autocmake/*
- py.test -vv test/test.py - py.test -vv test/$TEST_SCRIPT
notifications: notifications:
email: false email: false

124
modules/math/openblas.cmake Normal file
View File

@ -0,0 +1,124 @@
# this file is adapted from https://github.com/BVLC/caffe/blob/master/cmake/Modules/FindOpenBLAS.cmake
# and reused by providing the corresponding copyright notice:
#
#
# COPYRIGHT
#
# All contributions by the University of California:
# Copyright (c) 2014, 2015, The Regents of the University of California (Regents)
# All rights reserved.
#
# All other contributions:
# Copyright (c) 2014, 2015, the respective contributors
# All rights reserved.
#
# Caffe uses a shared copyright model: each contributor holds copyright over
# their contributions to Caffe. The project versioning records all such
# contribution and copyright details. If a contributor wants to further mark
# their specific copyright on a particular contribution, they should indicate
# their copyright solely in the commit message of the change when it is
# committed.
#
# LICENSE
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#
#.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'])"
option(ENABLE_OPENBLAS "Find and link to OpenBLAS" OFF)
if (ENABLE_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
)
endif()

0
test/__init__.py Normal file
View File

View File

@ -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

View File

@ -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()

View File

@ -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

6
test/test_openblas.py Normal file
View File

@ -0,0 +1,6 @@
from .test import configure_build_and_exe, skip_on_osx
@skip_on_osx
def test_fc_openblas():
configure_build_and_exe('fc_openblas', 'python setup --fc=gfortran --openblas')