Распараллеливание данной задачи происходит следующим образом.
Все тела равномерно делятся между процессами, каждый процесс обрабатывает
движения только своих тел. Если у нас N тел и
p процессов, то на каждый процесс приходися (N /
p) тел.
Однако, для вычисления того, куда сдвинуться наши тела, необходимо знать
информацию о состоянии всей системы. Иначе мы не сможем учитывать массу тел,
обрабатываемых другим процессом. Для этого перед каждым вычислением выполняется
операция пересылки данных всем процессам программы.
Такая процедура передачи данных, именуется операцией сбора данных
(single-node gather). В рассматриваемом алгоритме данная
операция должна быть выполнена для каждой подзадачи – такой вариант передачи
данных обычно именуется как операция обобщенного сбора данных
(multi-node gather or all gather).
Как только время, заданное для расчётов,
заканчивается (выполняется критерий остановки ),
нулевой процесс печатает результаты и завершает работу
программы.