Я выполняю параллельную задачу поиска соседей, ближайших к определенной точке, следуйте параллельной версии в Python:
from functools import partial
import numpy.matlib
import numpy as np
def distance_parall(x,n,i):
dist = abs(np.matlib.repmat(x[i],1,n) - x)
Neighb = np.argsort(dist[0],axis=-1, kind='mergesort', order=None) # order index
return Neighb
if __name__ == '__main__':
import multiprocessing
pool = multiprocessing.Pool(processes=4)
input_values = [i for i in range(n)]
Neighb = pool.map(partial(distance_parall, x, len(x)), input_values)
Код дает правильные результаты! Я все еще не могу набрать скорость по отношению к последовательной процедуре. На самом деле l oop быстрее. Я знаю это, потому что, когда функция distance_parall
не имеет выхода, происходит более высокая скорость. Однако, когда я ставлю вывод Neighb
по какой-то странной причине, я теряю большую скорость. Не работает ли pool.map
с выходами массива?
PS x
- это одномерный массив и общая переменная между процессами. Neighb
- это выход со всеми соседями для каждого элемента x
.