2016-05-08 2 views
0

Я искал последние пару часов, и я не могу понять, как это сделать - я новичок в мире параллельных вычислений.Параллелизация с joblib - Clarity

Моя задача: Я хочу обновить определенное значение (или три) на массиве частиц. В настоящее время, у меня есть функция, которая делает что-то вроде:

def velocity_update(particle_array, Field1, Field2) 
    for n in range(N) 
     particle_array[0,n] = # vx equation 
     particle_array[1,n] = # vy equation 
     particle_array[2,n] = # vz equation 
return particle_array 

Где массив частиц содержит атрибуты каждой частицы (положение, скорость и т.д.) для N частиц в 2D Numpy массива. Field1 и Field2 - поля, действующие на эти частицы, но частицы не влияют друг на друга или поля, поэтому это просто другие массивы, служащие в качестве поисковых таблиц.

Мой вопрос: Как я могу использовать joblib для параллелизации этого цикла? Должен ли я удалить цикл из функции и выполнить итерацию в основной программе (отправка только одного столбца моего массива для конкретной частицы, а не всего массива), или есть способ распараллеливания внутри функции, чтобы я все еще мог вернуть мой обновленный массив частиц? Я знаю, что кажется, что неэффективно копировать весь массив каждый раз, но положение частиц также важно, поэтому мне нужны все данные о частицах (хотя я только изменяю скорости).

Обычно у меня есть игра с ней, но в настоящий момент я изо всех сил пытаюсь понять, как ее применять, чтобы предоставить образец кода. Любая помощь будет принята с благодарностью!

ответ

0

Я столкнулся с поиском параллельных вычислений с использованием joblib и нашел это link в параллельном классе joblib. Надеюсь, это может решить вашу проблему.

Всего наилучшего!

+0

Благодарим за отзыв! Я читал эту страницу и большинство других в Google. Проблема в том, что я не понимаю, как применить процесс параллелизации к этой конкретной проблеме - функцию с циклом в ней, где это цикл, который я хочу распараллелить. Joblib похоже только функции. – Yoshi

+0

'Защита parallel_looping (номер): данные = Параллельный (n_jobs = 2) (задержка (SQRT) (я ** 2) для я в диапазоне (номер)) вернуть data' Смотрите в этом примере цикле в настоящее время распараллелен –

+0

В этом случае меня особенно беспокоит, как обрабатывать вывод. Информация о частицах содержится в матрице. Мне нужно иметь возможность обновлять скорость каждой частицы, используя информацию в этой матрице, а затем * хранить * ее в соответствующем разделе матрицы. В этом случае решение не кажется мне сразу очевидным, и копирование примеров из google (которое я прочитал), к сожалению, не помогает. – Yoshi

Смежные вопросы