Code: Select all
import numpy as np
import itertools
from multiprocessing import Pool
import MyNumericalProblemSolver
chunksize = 100
n_values_per_param = 50
n_processes = 8
p1_values = np.logspace(1,2,n_values_per_param)
p2_values = np.logspace(3,5,n_values_per_param)
param_iterator = itertools.product(p1_values,p2_values)
solver = MyNumericalProblemSolver()
def wrapper(params):
p1,p2 = params
solver.set_parameters(p1=p1,p2=p2)
solver.solve()
p = Pool(n_processes)
p.map(wrapper,param_iterator,chunksize=chunksize)
< /code>
Die Ausführung des obigen Code dauert normalerweise einige Minuten. Mein Laptop hat 8 CPUs (Ausgabe von Multiprocessing.cpu_count () < /code>). CPU < /li>
[*]n_processes = 1
[*]
Code: Select all
n_processes = 2
[*] verwenden
Code: Select all
n_processes = 4
[*] verwenden
Code: Select all
n_processes = 8
Es sieht also so aus, als ob die maximale Gesamtnutzung 200% beträgt. Ich verstehe nicht, warum das passiert. Ich habe bestätigt, dass ich beim Starten des Programms ohne Multiprozessierung in 8 verschiedenen Terminals 8 Prozesse mit jeweils 100%erhalte. Dinge, die ich bisher versucht habe: < /p>
Ändern Sie das Chunkize < /code>; Hilft nicht, dass kleine oder große Stückgrößen die gleiche Leistung geben. Multiplikation langsamer). Also habe ich OS.System (f "taskset -p 0xff {os.getPid ()}") ausprobiert, um die CPU -Affinität nach dem Importieren von Numpy zurückzusetzen, aber es ändert nichts. Wenn ich os.Sched_getaffinity (0) vor und nach dem Importieren von Numphye, erhalte ich die gleiche Ausgabe: {0, 1, 2, 3, 4, 5, 6, 7}.
Code: Select all
from multiprocessing import Pool
import numpy as np
matrix_dim = 100
n_processes = 8
def test_function(x):
for i in range(5000):
matrix = np.random.rand(matrix_dim,matrix_dim)
np.linalg.solve(matrix,np.ones(matrix_dim))
n_iter = 100
chunksize = 10
p = Pool(n_processes)
p.map(test_function,range(n_iter),chunksize=chunksize)
Ausgabe von hwloc -ps -t < /code> Wenn das Programm ausgeführt wird: < /p>
Code: Select all
142024 Core:0 python
142025 Core:0 python
142026 Core:0 python
142027 Core:0 python
142028 Core:0 python
142029 Core:0 python
142030 Core:0 python
142031 Core:0 python