Begrenzen Sie die Anzahl der threads in numpy
Es scheint, dass meine numpy-Bibliothek ist mit 4 threads und Einstellung OMP_NUM_THREADS=1
nicht zu stoppen.
numpy.show_config()
gibt mir diese Ergebnisse:
atlas_threads_info:
libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = f77
include_dirs = ['/usr/include']
blas_opt_info:
libraries = ['ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = c
include_dirs = ['/usr/include']
atlas_blas_threads_info:
libraries = ['ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = c
include_dirs = ['/usr/include']
openblas_info:
NOT AVAILABLE
lapack_opt_info:
libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
library_dirs = ['/usr/lib64/atlas']
define_macros = [('ATLAS_INFO', '"\\"3.8.4\\""')]
language = f77
include_dirs = ['/usr/include']
So, ich weiß, es ist mit blas, aber ich kann nicht herausfinden, wie man es verwenden 1 thread für matrix-Multiplikation.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, alle der folgenden:
Manchmal ist es ein bisschen schwierig zu sehen, wo genau multithreading eingeführt.
export VECLIB_MAXIMUM_THREADS=1
; siehe performance-of-numpy-with-different-blas-implementations auf SO. Achtung:man Accelerate
sagt, "der Wert von VECLIB_MAXIMUM_THREADS zwischengespeichert werden kann, die von der Bibliothek und wiederverwendet; wenn Sie brauchen, um die single-Thread-Ausführung, sollten Sie VECLIB_MAXIMUM_THREADS vor jedem Beschleunigen Anrufe"os.system("export OMP_NUM_THREADS=1")
? Ich habe gemischte Kritiken gelesen, ob oder nicht, dass wird die Arbeit richtig, und selbst wenn es funktioniert, ist, dass der beste Weg, dies zu tun? Es scheint ein wenig hacky aus irgendeinem Grund.http://numpy-discussion.10968.n7.nabble.com/Set-threads-from-within-python-code-td44108.html
Sie tun könnenos.environ["OMP_NUM_THREADS"] = "1"
etc, aber Sie haben zu setzen, dass bevor Sie habenimport numpy
. Offenbar numpy prüft nur die für diese zu importieren.In Bezug auf, dies zu tun aus einem python-Skript anders als bei der bash-Eingabeaufforderung pro dieser thread können Sie Folgendes tun (die gleichen Befehle wie die Antwort oben):
aber Sie haben zu setzen, dass vor Sie
import numpy
. Offenbar numpy prüft nur die für diese zu importieren.(dies ist weiterverbreitet als Antwort auf @Messer Kommentar oben.)
Gibt es mehr als die 3 genannten Umgebungsvariablen. Im folgenden werden die vollständige Liste von Umgebungsvariablen und das Paket, das verwendet wird, die variable Steuerung der Anzahl der threads, die es erzeugt. Beachten Sie als, müssen Sie diese Variablen, bevor Sie
import numpy
:So, in der Praxis, die Sie tun können:
Beachten Sie, dass ab November 2018 werden die Numpy-Entwickler arbeiten daran, das möglich zu tun, nachdem Sie
import numpy
als gut. Ich werde aktualisieren diesen post, sobald Sie diese änderungen.