Wieloprocesowość Pythona trwa znacznie dłużej niż pojedyncze przetwarzanie
Wykonuję kolejno kilka dużych obliczeń na 3 różnych numerycznych tablicach 2D. Macierze są ogromne, 25000x25000 każdy. Każde obliczenie zajmuje dużo czasu, więc postanowiłem uruchomić 3 z nich równolegle na 3 rdzeniach procesora na serwerze. Podążam za standardową wytyczną wieloprocesową i tworzę 2 procesy i funkcję pracownika. Dwa obliczenia przebiegają przez 2 procesy, a trzeci działa lokalnie bez oddzielnego procesu. Przekazuję ogromne tablice jako argumenty procesów takich jak:
p1 = Process(target = Worker, args = (queue1, array1, ...)) # Some other params also going
p2 = Process(target = Worker, args = (queue2, array2, ...)) # Some other params also going
funkcja Worker odsyła dwa wektory liczbowe (tablica 1D) na liście dołączonej do kolejki, np .:
queue.put([v1, v2])
Nie używammultiprocessing.pool
ale zaskakująco nie przyspieszam, w rzeczywistości działa 3 razy wolniej. Czy pokonywanie dużych macierzy zajmuje dużo czasu? Nie jestem w stanie dowiedzieć się, co się dzieje. Czy powinienem używać obiektów pamięci współdzielonej zamiast przekazywać tablice?
Będę wdzięczny, jeśli ktoś może pomóc.
Dziękuję Ci.