Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can CMake FindBLAS find OpenBLAS?

Tags:

cmake

blas

For demonstration, I use the 3-line CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
find_package( BLAS REQUIRED )
message( STATUS BLAS found: ${BLAS_LIBRARIES} )

I have cblas, ATLAS and OpenBLAS including developer packages installed on a Debian Linux system, plus CMake 2.8.9. When I call

cmake . -DBLA_VENDOR=ATLAS -DCMAKE_PREFIX_PATH=/usr/lib/atlas-base

the ATLAS library nicely appears found:

-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Looking for dgemm_
-- Looking for dgemm_ - found
-- A library with BLAS API found.
-- BLASfound:/usr/lib/atlas-base/libf77blas.so/usr/lib/atlas-base/libatlas.so
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp

Similarly, just

cmake .

will find /usr/lib/libblas.so for me. (I do not forget to remove the cache files before the second call.)

When I look into /usr/share/cmake-2.8/Modules/FindBLAS.cmake, I read as the permitted values of BLA_VENDOR:

##  Goto,ATLAS PhiPACK,CXML,DXML,SunPerf,SCSL,SGIMATH,IBMESSL,Intel10_32 (intel mkl v10 32 bit),Intel10_64lp (intel mkl v10 64 bit,lp thread model, lp64 model),
##  Intel10_64lp_seq (intel mkl v10 64 bit,sequential code, lp64 model),
##  Intel( older versions of mkl 32 and 64 bit), ACML,ACML_MP,ACML_GPU,Apple, NAS, Generic

That is, OpenBLAS is not listed. And a few random trials like

cmake . -DBLA_VENDOR=open -DCMAKE_PREFIX_PATH=/usr/lib/openblas-base

do not work either. Do I have to write my own FindBLAS in order to link to OpenBLAS with CMake?

like image 431
Bernhard Bodenstorfer Avatar asked Dec 02 '13 13:12

Bernhard Bodenstorfer


2 Answers

CMake supports finding OpenBLAS using FindBLAS since CMake 3.6.0, as this commit finally made it into the release.

NB: OpenBLAS can also be used to substitute LAPACK, for which you should use the FindLAPACK command, that is also available since 3.6.0.

The "FindBLAS" and "FindLAPACK" modules learned to support OpenBLAS.

(See: https://blog.kitware.com/cmake-3-6-0-rc3-is-now-ready/)

like image 97
knedlsepp Avatar answered Oct 31 '22 01:10

knedlsepp


I think you have to write your own CMake module for that. You can check there and there maybe for inspirations

like image 32
coincoin Avatar answered Oct 31 '22 01:10

coincoin