Python масштабируемая параллельная обработка для небольших вычислений - PullRequest
1 голос
/ 09 июля 2020

Я работаю над проектом, который по сути является численным интегрированием (Рунге-Кутта) для пути потенциально сотен частиц в векторном поле. Я изучал использование Dask для распараллеливания задачи, но я не уверен, соответствует ли моя проблема специализации Dask. Dask подходит для работы с данными, объем которых превышает объем памяти, за счет параллельной обработки (при которой каждое вычисление может занять минуту). Моя проблема - это примерно 100000 вычислений за 1 секунду.

Просто чтобы показать, каким будет одно из вычислений:

def RK4(field, x0, y0, t0, dt):
    k1x, k1y = field.interpolate(x0, y0, t0) #predefined interpolation routine using scipy.interpolate
    xi = x0+.5*k1x*dt
    yi = y0+.5*k1x*dt
    k2x, k2y = field.interpolate(xi, yi, t0+.5*dt)
    xi = x0+.5*k2x*dt
    yi = y0+.5*k2x*dt
    k3x, k3y = field.interpolate(xi, yi, t0+.5*dt)
    xi = x0+k3x*dt
    yi = y0+k3x*dt
    k4x, k4y = field.interpolate(xi, yi, t0+dt)

    xi = x0+1/6*(k1x*dt+2*k2x*dt+2*k3x*dt+k4x*dt)
    yi = y0+1/6*(k1y*dt+2*k2y*dt+2*k3y*dt+k4y*dt)

    return xi, yi, t0+dt

Вышеупомянутое будет выполняться для каждой из 100 частиц около 100 раз. Возможность масштабирования в HPC / облаке имеет важное значение. Идеальная ситуация - сразу делать партии частиц, но из-за зависимости scipy.interpolate у меня проблема с GIL.

Спасибо за любой совет!

1 Ответ

2 голосов
/ 09 июля 2020

Dask обычно используется для дисковой или распределенной обработки данных, это не лучший инструмент для использования в данном конкретном случае.

Вместо этого рассмотрите возможность использования Cython / Numba / Pypy для реализации обработки чисел, например в твоем примере. Это позволит обойти GIL путем предварительной компиляции функций в двоичные библиотеки, которые CPython затем могут использовать изначально. Это приводит к 5-10-кратному ускорению, в зависимости от задачи. * Если вы проделали эти два шага и по-прежнему испытываете трудности с производительностью, проверьте асимптотику алгоритма и найдите альтернативный алгоритм.

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