2016-05-12 6 views
7

Ich benutze numpy und scipy in verschiedenen Umgebungen (MacOS, Ubuntu, RedHat). Normalerweise installiere ich numpy mit dem Paketmanager, der verfügbar ist (z. B. Mac-Ports, apt, yum).Finde heraus, ob/welche BLAS-Bibliothek von Numpy benutzt wird

Wenn Sie Numpy jedoch nicht manuell kompilieren, wie können Sie sicher sein, dass es eine BLAS-Bibliothek verwendet? Bei Verwendung von Mac-Ports wird ATLAS als Abhängigkeit installiert. Ich bin mir jedoch nicht sicher, ob es wirklich benutzt wird. Wenn ich einen einfachen Benchmark durchführe, benötigt die Funktion numpy.dot() ca. 2 Mal die Zeit als ein Skalarprodukt, das mit der Eigen C++ - Bibliothek berechnet wird. Ich bin nicht sicher, ob dies ein vernünftiges Ergebnis ist ..

Mit freundlichen Grüßen, Apo

Antwort

16

numpy.show_config() gibt nicht immer zuverlässige Informationen. wenn ich die Ausgabe von np.show_config() Zum Beispiel sieht apt-get install python-numpy auf Ubuntu 14.04, wie folgt aus:

Es sieht aus, als ob numpy ist die Standard-cblas Bibliothek. Ich weiß jedoch, dass numpy OpenBLAS verwendet, das ich über das libopenblas-dev-Paket installiert habe.


Die endgültige Art und Weise auf * nichts zu überprüfen ist ldd zu verwenden, um herauszufinden, welche Bibliotheken numpy Links gegen zur Laufzeit geteilt (ich einen Mac nicht besitzen, aber ich denke, Sie otool -L anstelle von verwenden können, ldd).

  • Für Versionen von numpy älter als v1.10:

    ~$ ldd /<path_to_site-packages>/numpy/core/_dotblas.so 
    

    Wenn _dotblas.so nicht existiert, bedeutet dies wahrscheinlich, dass numpy alle BLAS-Bibliotheken zu erkennen ist fehlgeschlagen, wenn es ursprünglich kompiliert wurde, In diesem Fall baut es einfach keine der BLAS-abhängigen Komponenten auf.

  • Für numpy v1.10 und höher:

    _dotblas.so has been removed, aber Sie die Abhängigkeiten von multiarray.so statt überprüfen:

    ~$ ldd /<path_to_site-packages>/numpy/core/multiarray.so 
    

Mit Blick auf die Version von numpy ich über apt-get installiert:

~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so 
    linux-vdso.so.1 => (0x00007fff12db8000) 
    libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fce7b028000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fce7ac60000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fce7a958000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fce7a738000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007fce7ca40000) 

/usr/lib/libblas.so.3 ist actua Der Anfang einer Kette von Symlinks. Wenn ich sie zu ihrem Endziel mit readlink -e folgen, sehe ich, dass sie meine OpenBLAS Shared Library verweisen:

~$ readlink -e /usr/lib/libblas.so.3 
/usr/lib/openblas-base/libblas.so.3 
+0

Vielen Dank, die mir geholfen! In der Tat verwendet es die Standard libblas Bibliothek ... – Apoptose

1

Sie möchten zu überprüfen, numpy.show_config(), um zu sehen, welche Bibliotheken konfiguriert sind.

2

numpy.show_config() sagt nur, dass info auf meinem Debian Linux nicht verfügbar ist.

Allerdings/usr/lib/python3/dist-packages/scipy/lib hat ein Unterverzeichnis für blas, das Ihnen sagen kann, was Sie wollen. Es gibt ein paar Testprogramme für BLAS in Unterverzeichnisstests.

Hoffe, das hilft.