У меня есть сумма, которую я пытаюсь вычислить, и мне трудно распараллелить код. Расчет, который я пытаюсь распараллелить, довольно сложен (он использует как массивы numpy, так и scipy разреженные матрицы). Он выдает массивный массив, и я хочу просуммировать выходные массивы из примерно 1000 вычислений. В идеале я бы сохранил текущую сумму по всем итерациям. Однако я не смог понять, как это сделать.
До сих пор я пробовал использовать функцию Parallel joblib и функцию pool.map с пакетом multiprocessing python. Для обоих из них я использую внутреннюю функцию, которая возвращает массив numpy. Эти функции возвращают список, который я конвертирую в массив, а затем суммирую.
Однако после того, как функция joblib Parallel завершит все итерации, основная программа никогда не продолжит выполнение (похоже, что исходное задание находится в приостановленном состоянии, используя 0% ЦП). Когда я использую pool.map, я получаю ошибки памяти после завершения всех итераций.
Есть ли способ просто распараллелить текущую сумму массивов?
Изменить. Цель состоит в том, чтобы сделать что-то вроде следующего, кроме параллельного.
def summers(num_iters):
sumArr = np.zeros((1,512*512)) #initialize sum
for index in range(num_iters):
sumArr = sumArr + computation(index) #computation returns a 1 x 512^2 numpy array
return sumArr
outputArr = np.array(pool.map(parloop, range(num_views)))
, гдеparloop
возвращает массив numpy. - person Kevin   schedule 30.01.2012numexpr
: code.google.com/p/numexpr Вы расскажете уравнение вы хотите, чтобы он вычислялся (так же, как код Python, но записан в виде строки), и он позаботится об оптимизации и многопоточности за вас - person endolith   schedule 12.07.2012