Я пытаюсь скомпилировать numpy
v1.12 для получения поддержки подпрограмм ATLAS/LAPACK.
Эта проблема
Настройки, которые я использую для компиляции, похоже, не работают, чтобы привести библиотеки ATLAS/LAPACK в numpy
.
Настройка
У меня нет прав администратора на хосте (ах), над которым я работаю (вычислительный кластер).
Однако узлы предоставляют доступ к библиотекам и заголовкам gcc
4.7.2 и 5.3.0, glibc
2.17 и 2.22 и ATLAS/LAPACK v3.10.2 через модули GNU.
По причинам совместимости я работаю с виртуальной средой, которая содержит Python 2.7.16. По той же причине я устанавливаю более старую версию numpy
. Если что-то будет работать, я могу изучить новые версии numpy
но сейчас я работаю с этим.
В моем исходном каталоге для numpy
есть файл конфигурации с именем site.cfg
, в который входят следующие директивы:
[ALL]
library_dirs = /usr/local/lib:/net/module/sw/glibc/2.22/lib64:/net/module/sw/atlas-lapack/3.10.2/lib
include_dirs = /usr/local/include:/net/module/sw/glibc/2.22/include:/net/module/sw/atlas-lapack/3.10.2/include
[atlas]
libraries = lapack,f77blas,cblas,atlas
library_dirs = /net/module/sw/atlas-lapack/3.10.2/lib
include_dirs = /net/module/sw/atlas-lapack/3.10.2/include
Я компилирую numpy
помощью следующей команды:
$ CFLAGS="${CFLAGS} -std=c99 -fPIC" LDFLAGS="-L/home/areynolds/.conda/envs/genotyping_environment/lib -Wl,-rpath=/home/areynolds/.conda/envs/genotyping_environment/lib -Wl,--no-as-needed -Wl,--sysroot=/,-L/net/module/sw/glibc/2.22/lib64" python setup.py build --fcompiler=gnu95
Я использую --fcompiler=gnu95
поскольку библиотеки ATLAS/LAPACK были скомпилированы с GNU Fortran. Я переопределяю переменные CFLAGS
и LDFLAGS
чтобы инструментарий GCC мог правильно компилироваться и связываться.
Вопрос
После компиляции я тестирую библиотеку numpy
чтобы увидеть, что установлено одним способом:
$ python
...
>>> import numpy.distutils.system_info as sysinfo
>>> sysinfo.get_info('atlas')
ATLAS version 3.10.2 built by root on Wed Jun 1 15:39:08 PDT 2016:
UNAME : Linux module0.altiusinstitute.org 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb 16 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
INSTFLG : -1 0 -a 1 -l 1
ARCHDEFS : -DATL_OS_Linux -DATL_ARCH_UNKNOWNx86 -DATL_CPUMHZ=2876 -DATL_AVXMAC -DATL_AVX -DATL_SSE3 -DATL_SSE2 -DATL_SSE1 -DATL_USE64BITS -DATL_GAS_x8664
F2CDEFS : -DAdd_ -DF77_INTEGER=int -DStringSunStyle
CACHEEDGE: 229376
F77 : /net/module/sw/gcc/5.3.0/bin/gfortran, version GNU Fortran (GCC) 5.3.0
F77FLAGS : -O -mavx2 -mfma -m64 -fPIC
SMC : /usr/bin/x86_64-redhat-linux-gcc, version x86_64-redhat-linux-gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
SMCFLAGS : -O -fomit-frame-pointer -mavx2 -mfma -m64 -fPIC
SKC : /usr/bin/x86_64-redhat-linux-gcc, version x86_64-redhat-linux-gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
SKCFLAGS : -O -fomit-frame-pointer -mavx2 -mfma -m64 -fPIC
{'libraries': ['lapack', 'f77blas', 'cblas', 'atlas', 'f77blas', 'cblas'], 'library_dirs': ['/net/module/sw/atlas-lapack/3.10.2/lib'], 'define_macros': [('ATLAS_INFO', '"\\"3.10.2\\""')], 'language': 'f77', 'include_dirs': ['/net/module/sw/atlas-lapack/3.10.2/include']}
Это выглядит хорошо, может быть?
Но когда я проверяю другим способом, я получаю другой ответ:
>>> np.show_config()
lapack_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
blas_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
openblas_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
blis_info:
NOT AVAILABLE
openblas_lapack_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
lapack_mkl_info:
NOT AVAILABLE
blas_mkl_info:
NOT AVAILABLE
Несмотря на ручную настройку, описанную в site.cfg
, нет никаких упоминаний об ATLAS, и при этом LAPACK явно не указывает на правильный каталог модуля (/net/module/sw/atlas-lapack/3.10.2
).
Как правильно скомпилировать поддержку ATLAS/LAPACK в numpy
или действительно проверить, что у меня есть работающая настройка ATLAS/LAPACK, интегрированная в numpy
, что дает мне непротиворечивый (и надежный) ответ?