Параллельная интеграция ODE с использованием SciPy

Я использую модуль SciPys integrate.ode для интеграции большой системы (~ 8000 уравнений) ОДУ. Поскольку мне всегда приходится делать несколько из них с разными параметрами, я распараллелил их с помощью модуля multiprocessing, который, похоже, работает нормально. Однако документация SciPy говорит:

Предупреждение:

Этот интегратор не повторно участвует. У вас не может быть двух экземпляров ode, использующих интегратор vode одновременно.

Итак, теперь мой вопрос: могу ли я доверять своим результатам параллельных прогонов? Или это Waring также применяется к экземплярам в разных процессах?


person obachtos    schedule 08.05.2017    source источник
comment
одновременно, скорее всего, относится к одному и тому же сеансу Python. Если вы запускали скрипт дважды в двух отдельных сеансах, между ними не должно быть никакого взаимодействия. То же самое происходит при многопроцессорной обработке; каждый процесс запускает собственный интерпретатор. Так что я думаю, что вы в безопасности, но некоторые дополнительные исследования не повредят.   -  person kazemakase    schedule 08.05.2017
comment
Использование multiprocessing нормально. См., Например, stackoverflow.com/ вопросы / 34291639 /   -  person Warren Weckesser    schedule 09.05.2017


Ответы (1)


Если вы попытаетесь использовать интегратор дважды в одном сеансе, вы получите сообщение об ошибке:

from scipy.integrate import ode

f = lambda x: x

a = ode(f)
b = ode(f)

a.set_integrator('vode')
b.set_integrator('vode')

a.integrate(0.1)
b.integrate(0.1)
a.integrate(0.1)

# IntegratorConcurrencyError: Integrator `vode` can be used to 
# solve only a single problem at a time. If you want to integrate 
# multiple problems, consider using a different integrator 
# (see `ode.set_integrator`)

Если вы не получаете эту ошибку в многопроцессорной среде, разумно предположить, что ваши результаты действительны.

person kazemakase    schedule 08.05.2017