Comment vérifier la liaison blas / lapack dans numpy / scipy?

Je construis mon environnement numpy / scipy basé sur blas et lapack plus ou moins basé sur cette promenade .

Quand j'ai terminé, Comment puis-je vérifier que mes fonctions numpy/scipy utilisent vraiment les fonctionnalités Blas/lapack précédemment construites?

114
demandé sur Woltan 2012-01-25 13:15:34

5 réponses

Ce que vous recherchez est ceci: Informations système

J'ai compilé numpy / scipy avec atlas et je peux vérifier cela avec:

import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')

Vérifiez la documentation pour plus de commandes.

27
répondu rabra 2015-05-19 17:39:24

La méthode numpy.__config__.show() génère des informations sur le lien recueillies au moment de la construction. Ma sortie ressemble à ceci. Je pense que cela signifie que j'utilise le BLAS / LAPACK livré avec Mac OS.

>>>import numpy as np
>>>np.__config__.show()

lapack_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args = ['-msse3']
    define_macros = [('NO_ATLAS_INFO', 3)]
blas_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args = ['-msse3', '-I/System/Library/Frameworks/vecLib.framework/Headers']
    define_macros = [('NO_ATLAS_INFO', 3)]
258
répondu davost 2013-10-13 21:01:24

Comme il utilise les versions chargées dynamiquement, vous pouvez simplement faire ceci:

$ ldd anyoftheCmodules.so

Où {[1] } pourrait être, par exemple, numpy/core/_dotblas.so, qui lie à libblas.so.

11
répondu Ricardo Cárdenes 2012-01-25 11:29:48

Vous pouvez utiliser l'outil de dépendance link loader pour examiner les composants hook de niveau C de votre build et voir s'ils ont des dépendances externes sur votre blas et lapack de choix. Je ne suis pas près d'une boîte linux en ce moment, mais sur une machine OS X, vous pouvez le faire dans le répertoire site-packages qui contient les installations:

$ otool -L numpy/core/_dotblas.so 
numpy/core/_dotblas.so:
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 268.0.1)

$ otool -L scipy/linalg/flapack.so 
scipy/linalg/flapack.so (architecture i386):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/flapack.so (architecture ppc):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

$ otool -L scipy/linalg/fblas.so 
scipy/linalg/fblas.so (architecture i386):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/fblas.so (architecture ppc):
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

Remplacer ldd au lieu de otool sur un système gnu/Linux et vous devriez obtenir les réponses dont vous avez besoin.

7
répondu talonmies 2012-01-25 12:11:32

Vous pouvez afficher Blas, LAPACK, MKL linkage en utilisant show_config():

import numpy as np
np.show_config()

Qui pour moi donne la sortie:

mkl_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include'] blas_mkl_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include'] blas_opt_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include'] lapack_mkl_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include'] lapack_opt_info: libraries = ['mkl_rt', 'pthread'] library_dirs = ['/my/environment/path/lib'] define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)] include_dirs = ['/my/environment/path/include']

2
répondu M.T 2018-07-19 10:17:43