MPI-параллелизм в хаотических системах - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть программа Fortran для динамики (в основном, алгоритм Verlet).Чтобы быстрее вычислить скорости, я распараллелил алгоритм с MPI.Что меня нервирует, так это то, что если у меня четыре процессора, на каждом процессоре работает Verlet, и когда они достигают точки распараллеливания, они делятся информацией.Однако из-за небольших числовых различий (например, в скомпилированном LAPACK на каждом узле) каждая траектория Verlet может развиваться в совершенно ином направлении в долгосрочной перспективе, что означает, что в точках совместного использования я получу смесь информации изтраектории.Поэтому я решил синхронизировать информацию на каждом временном шаге, чтобы предотвратить расхождение, но это явно создает барьер.

Как обычно решается эта проблема (расхождение узлов)?Любые ссылки?

1 Ответ

1 голос
/ 29 апреля 2011

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

Единственное, что я видел в реальном времени, когда MPI вводил хитрость в таких ситуациях, это то, что такие вещи, как MPI_REDUCE (... MPI_SUM ...), могут приводить к разным ответам на одном и том же числе узлов на разных прогонах, потому Суммирование может быть в другом порядке. Это просто стандартная математика с плавающей запятой. Вы можете избежать этого, выполнив MPI_GATHER () из соответствующих чисел и суммируя их в некотором четко определенном порядке, например, после сортировки по убыванию по величине.

...