Генерация двух независимых словарей параллельно - PullRequest
0 голосов
/ 25 октября 2018

Я хочу построить словарь оценок функций параллельно, но я изо всех сил пытаюсь выяснить, как это сделать эффективно.

Возьмем случайную матрицу:

import functools
import multiprocessing
import numpy as np
import time

#generate random symmetric matrix
N = 500
b = np.random.random_integers(-2000,2000,size=(N,N))
b_symm = (b + b.T)/2

#identity matrix
ident = np.eye(N)

# define worker function:
def func(w, b_mat):

    if w !=0:
        L = np.linalg.inv(1j * w * ident - b_mat)

    else:
        L = np.linalg.pinv(-b_mat)

    return L

Теперь я хочу сэмплировать многие значения w и построить словарь выходных данных.Это было бы смущающей параллельной проблемой.Я могу сделать это, используя общий словарь, используя что-то вроде этого:

def dict_builder(w, d):
    d[w] = func(w, b_symm)

manager = multiprocessing.Manager()

val_dict = manager.dict()


wrange = np.linspace(-10,10,200)

processors=2
pool = multiprocessing.Pool(processors)

st = time.time()
data = pool.map(functools.partial(dict_builder, d= val_dict), wrange,2)
pool.close()
pool.join()
en = time.time()
print("parallel test took ",en - st," seconds.")

, но это кажется более сложным, чем необходимо, так как я оцениваю функцию только в уникальных точках и требует дополнительных затратобъект разделяемой памяти.

Я бы хотел разделить wrange на n блоков, где n - количество процессоров, независимо собрать n словарей и объединить их в один словарь.Итак, два вопроса: 1) Будет ли это выгодно в вычислительном отношении?2) Как лучше всего это реализовать с помощью многопроцессорного модуля?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...