Wie um zu überprüfen, BLAS/LAPACK-Kopplung in NumPy und SciPy?
Ich bin builing meine numpy/scipy-Umgebung, basierend auf blas-und lapack-mehr oder weniger basierend auf diese Spaziergang durch.
Wenn ich damit fertig bin, wie kann ich überprüfen, dass meine numpy/scipy Funktionen wirklich tun, verwenden Sie die zuvor erstellte blas/lapack-Funktionen?
- Ich bemerkte, Sie sind noch aktiv auf Stack Overflow. Blick auf die akzeptierten und die Spitze gewählt Antworten, schlage ich vor, dass Sie überlegen, Kennzeichnung der Spitze gewählt Antwort als angenommen, statt der derzeit akzeptierte man:)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was du suchst ist dieser:
system info
Den ich kompiliert habe, numpy/scipy mit atlas und ich können dies überprüfen, mit:
Überprüfen Sie die Dokumentation für weitere Befehle.
sysinfo.get_info('blas')
zurückgegeben{'include_dirs': ['/usr/local/include', '/usr/include', '/opt/local/include', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include'], 'libraries': ['blas', 'blas'], 'library_dirs': ['/usr/lib']}
undsysinfo.get_info('lapack')
zurückgegeben{'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']}
Was bedeutet es ?Die Methode
numpy.__config__.show()
gibt Informationen über Gestänge versammelten sich zum Zeitpunkt der Erstellung. Meine Ausgabe sieht wie folgt aus. Ich denke, es bedeutet, ich bin mit dem BLAS/LAPACK, dass Schiffe, die mit Mac OS.numpy.__config__
sollte wirklich eine öffentliche API. Dennoch, gewinnen Sie diese Runde, davost.lapack_opt_info
gezeigt wird, bedeutet, dass numpy ist verbunden mit lapack?numpy.show_config()
, das ist wahrscheinlich eine öffentliche API-Funktion, die aufgrund der Abwesenheit von Beginn unterstreicht. Aber es ist nicht online dokumentiert und hat keinen docstring, so ist es keine überraschung, dass es so schwer zu finden. Hoffentlich werden Sie das beheben.numpy
? Welche version von Python benutzt du?Als es nutzt, die dynamisch geladenen Versionen, können Sie genau dies tun:
wo
anyoftheCmodules.so
werden könnte, zum Beispielnumpy/core/_dotblas.so
, die links zulibblas.so
.numpy/core/_dotblas.so
? (siehe Kommentar unten talonmies Antwort).so
Dateien in es. Nur die Suche innerhalb der NumPy-Verzeichnis (sagen wir, mitfind /path/to/numpy -name "*.so"
). Ein paar von diesen (_dotblas.so
,lapack_lite.so
unter Ubuntu vorkompilierte, zum Beispiel), stellen Sie die Verwendung von BLAS/LAPACK_dotblas.so
existiert nicht mehr in numpy v1.10 und neuere, aber Sie können überprüfen, dass die Verknüpfung vonmultiarray.so
stattnumpy.__config__
Objekt zur Laufzeit statt. (Siehe davost's ausgezeichnete Antwort.)Können Sie über den link-loader dependency-tool zum suchen auf C-level-hook-Komponenten von Ihrem bauen und sehen, ob Sie externe Abhängigkeiten auf Ihrem blas-und lapack der Wahl. Ich bin nicht in der Nähe einer linux-box, aber auf einem OS X-Maschine, die Sie tun können diese innerhalb der site-packages-Verzeichnis, das hält die Installationen:
Ersatz
ldd
im Ortotool
auf einem gnu/Linux-system, und Sie sollten die Antworten bekommen, die Sie brauchen.numpy/core/_dotblas.so
? (siehe Kommentar unten Ricardos Antwort)_dotblas.so
an der Schnittstelle wrapper, um was auch immer blas wurde genutzt, um die Verteilung. Auf windows wird es genannt_dotblas.pyd
, aber die Funktion ist die gleiche._dotblas.so
wird nur gebaut, wenn Sie eine[atlas]
Abschnitt insite.cfg
(und ein CBLAS-aktivierter BLAS-Bibliothek). Also, sollten Sie verwenden, dass, auch wenn Sie nicht mit dem ATLAS (außer, wenn Sie mit Intel MKL, das hat einen eigenen Abschnitt)._dotblas.so
existiert nicht mehr in numpy v1.10 und neuere, aber Sie können überprüfen, dass die Verknüpfung vonmultiarray.so
stattnm /path/to/numpy/core/multiarray.so | grep blas_dot
. Wenn es keineblas_dot
symbol, dann numpy ist nicht mit gegen BLAS (für v1.10)Können Sie anzeigen, BLAS, LAPACK, MKL-Anlenkung mit
show_config()
:Welches für mich gibt Ausgabe:
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']