0

Я новичок параллельного программирования и MPI, и я застрял на этом, возможно, легкой проблеме ...памяти эффективное распараллеливание цикла с использованием MPI и mpi4py

Я пытаюсь написать код, эволюционировать систему N гравитационно взаимодействующих частиц вперед во времени. Это довольно просто, используя наивный алгоритм, который я и сделал. Но теперь я хочу распараллелить свой код. В частности, я пишу на Python, используя mpi4py. Упрощенная (и сильно оптимизируемыми, но это не точка), не параллельная реализация будет выглядеть примерно так:

# pos and vel are arrays storing the positions and velocities of all particles 
dt = 0.01 # The time step 
for i in range(N): 
    for j in range(N): 
     if i == j: 
      continue 
     # Calculate force between i'th and j'th particle 
     r = pos[j] - pos[i] 
     force -= r/norm(r)**3 
     # Update velocity 
     vel[i] -= dt*force 
# Now use vel to update pos ... 

Как идти о распараллеливания этого алгоритма? Поскольку число частиц N может быть очень большим, я хочу хранить pos и vel только в корневом процессе, чтобы сохранить память. Моя первоначальная мысль заключалась в том, чтобы распараллелить i -loop, но для каждого процесса по-прежнему нужен доступ к pos и vel полностью! То есть схема Scatter/Gather не помогает.

Должен ли я иметь копию pos и vel в памяти для каждого процесса, или есть какой-то выход из этого? Простым выходом будет совместное использование памяти, содержащей pos, и vel для всех процессов без дублирования. Я не знаю, возможно ли это с MPI (и, в частности, mpi4py).

Любая помощь была бы с благодарностью принята!

+0

многопроцессорная обработка, общая память - два ключевых слова, которые вам нужны –

ответ

1

Я думаю, что обычным способом решения этой проблемы является использование разложения домена. Вы делите частицы на столько доменов, сколько хотите (обычно один за процесс MPI или один на ядро, если вы выполняете многопоточность). Затем вы используете призрачные области и MPI-связь для определения взаимодействий между различными доменами.

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