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.

questionAnswers(2)

yourAnswerToTheQuestion