Aufrufe von Numpy-Routinen aus Multiverarbeitungsaufgaben heraus sind sehr langsamPython

Python-Programme
Anonymous
 Aufrufe von Numpy-Routinen aus Multiverarbeitungsaufgaben heraus sind sehr langsam

Post by Anonymous »

Ich rufe numpy.linalg.inv innerhalb einer Multiprocessing-Aufgabe auf, die vom Python-Multiprocessing-Modul abgeleitet ist. Ich vergleiche die Numpy-Routine mit meiner eigenen inversen Routine my_inv.
Was ich sehe, ist, dass die Numpy-Routine deutlich schneller ist als meine Routine, wenn beide seriell ausgeführt werden (wie erwartet).
Wenn ich jedoch dieselben Routinen innerhalb einer Multiprocessing-Aufgabe verwende, ist die Numpy-Routine etwa 100x langsamer. Und nur bei my_inv sehe ich eine parallele Beschleunigung.
Ich würde mich über jede Erklärung freuen – auch über offensichtliche.

Code: Select all

from numpy import eye, inf
from numpy.linalg import norm, inv
from numpy.random import rand, seed

import time

import multiprocessing as mp

mp.set_start_method('fork',force=True)

def task(N):
S = eye(N)
#     inv(S)      # Very slow
my_inv(S)   # okay

def process_serial(N,num_tasks):
for _ in range(num_tasks):
task(N,)

def process_parallel(N,num_tasks):
itlist = [(N,)]*num_tasks
with mp.Pool() as pool:
pool.starmap(task,itlist)
pool.close()
pool.join()

num_tasks = 1

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post