Ich habe gehört, dass mit OMP_NUM_THREADS=1
vor dem Aufruf eines Python-Skript, das Multiprocessing verwenden, das Skript schneller.Verwendung von OMP_NUM_THREADS = 1 für Python Multiprocessing
Ist es wahr oder nicht? Wenn ja, warum?
Ich habe gehört, dass mit OMP_NUM_THREADS=1
vor dem Aufruf eines Python-Skript, das Multiprocessing verwenden, das Skript schneller.Verwendung von OMP_NUM_THREADS = 1 für Python Multiprocessing
Ist es wahr oder nicht? Wenn ja, warum?
Da sagte Sie in einem Kommentar, dass Ihr Python-Programm ein C-Modul ruft die OpenMP verwendet:
OpenMP ist innerhalb eines Prozesses Multi-Threading und die Standard-Anzahl der Threads ist in der Regel die Anzahl, dass die CPU kann tatsächlich gleichzeitig laufen. (Dies ist im Allgemeinen die Anzahl der CPU-Kerne, oder ein Vielfaches dieser Zahl, wenn die CPU über eine SMT-Funktion wie Intels Hyper-Threading verfügt.) Wenn Sie beispielsweise eine CPU ohne CPU mit vier Kernen besitzen, wird OpenMP dies tun Ich möchte 4 Threads standardmäßig ausführen.
Wenn Sie Pythons Modul multiprocessing
verwenden, startet Ihr Programm mehrere Python-Prozesse, die gleichzeitig ausgeführt werden können. Sie können die Anzahl der Prozesse steuern, aber oft möchten Sie, dass es sich um die Anzahl der CPU-Kerne/Threads handelt, z. zurückgegeben von multiprocessing.cpu_count()
.
Also, was passiert auf dieser Quad-Core-CPU, wenn Sie ein multiprocessing
Programm ausführen, das 4 Python-Prozesse ausführt, und jeder Aufruf eine OpenMP-Funktion 4 Threads ausgeführt wird? Am Ende laufen 16 Threads auf 4 Kernen. Das wird funktionieren, aber nicht mit maximaler Effizienz, da jeder Kern einige Zeit zwischen den Aufgaben wechseln muss.
Einstellung OMP_NUM_THREADS=1
schaltet das OpenMP-Multithreading grundsätzlich aus, sodass jeder Ihrer Python-Prozesse single-threaded bleibt.
Stellen Sie sicher, dass Sie genug Python-Prozesse starten, wenn Sie dies tun! Wenn Sie 4 CPU-Kerne haben und Sie nur 2 single-threaded Python-Prozesse ausführen, haben Sie 2 Kerne verwendet und die anderen 2 Leerlauf. (In diesem Fall sollten Sie OMP_NUM_THREADS=2
einzustellen.)
in den Kommentaren Entschlossen:
OMP_NUM_THREADS ist eine Option für OpenMP, ein C/C++/Fortran API dafür innerhalb eines Prozesses Multi-Threading.
Es ist unklar, wie das überhaupt mit Python-Multiprocessing verwandt ist.
Ruft Ihr Python-Programm in C geschriebene Module auf, die OpenMP intern verwenden? - Wyzard
'OMP_NUM_THREADS' ist eine Option für [OpenMP] (https://en.wikipedia.org/wiki/OpenMP), eine C/C++/Fortran API für Multithreading innerhalb eines Prozesses. Es ist unklar, wie das mit dem Python-Multiprocessing zusammenhängt. Ruft Ihr Python-Programm in C geschriebene Module auf, die OpenMP intern verwenden? – Wyzard
Korrigieren. Das erklären Dinge! Also, ich schätze, die Option vermeidet Python-Multiprocessing, um einen anderen Prozess aufzurufen, der Multiprocessing durchführt. –