Знакомство в компании
Представим, что процессы – это компания незнакомых людей, которые знакомятся с помощью следующей игры:
-
Начинает процессор 0. Случайным образом он выбирает другой процессор i и посылает ему сообщение со своим именем (можете случайным образом задавать имя)
-
Процессор i отсылает сообщение случайному процессору j (которые еще не участвовал в игре), в сообщении – все имена и ранги предыдущих процессоров в правильном порядке. Номер процессора j знает только I, так что все должны быть начеку.
-
Игра заканчивается через N ходов. Используйте синхронную пересылку MPI_SSend
Напишите программу используя MPI. (25 баллов)
Параллельный одномерный клеточный автомат.
С помощью MPI распараллельте одномерный клеточный автомат Вольфрама (Rule110).
Игра происходит следующим образом:
-
Инициализируйте одномерный массив 0 и 1 случайным образом
-
В зависимости от значений: левого соседа, себя, правого соседа на следующем шаге клетка либо меняет значение, либо остается той же. Посмотрите, например, что значит Rule110 (https://en.wikipedia.org/wiki/Rule_110)
Сделайте периодические и непериодические граничные условия (5 баллов)
Работает параллельный код на нескольких процессах (20 баллов)
Имплементированы клетки-призраки (ghost cells) (10 балла)
Можно поменять правило игры (сделать одно из 256) (20 баллов)
График ускорения работы программы от кол-ва процессов (5 баллов)
Картинка эволюции для одного правила (15 баллов)
Итого баллов: 75 + 25 = 100 баллов за базовую часть из 2 заданий
Бонус Параллельная игра «Жизнь» (*) 20 баллов Распараллельте игру «Жизнь» Конвея (https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life)
Бонус Война и Мир (*) 10 баллов С помощью работы на нескольких процессах (MPI) найдите топ-10 встречающихся слов в романе «Война и Мир» Л.Н. Толстого
Пример запуска:
chmod +x acquaintance.py
mpirun --allow-run-as-root -n 8 acquaintance.py
Вывод программы:
Я processor_0
Я processor_6 и знаком с ['processor_0']
Я processor_2 и знаком с ['processor_0', 'processor_6']
Я processor_5 и знаком с ['processor_0', 'processor_6', 'processor_2']
Я processor_3 и знаком с ['processor_0', 'processor_6', 'processor_2', 'processor_5']
Я processor_4 и знаком с ['processor_0', 'processor_6', 'processor_2', 'processor_5', 'processor_3']
Я processor_1 и знаком с ['processor_0', 'processor_6', 'processor_2', 'processor_5', 'processor_3', 'processor_4']
Я processor_7 и знаком с ['processor_0', 'processor_6', 'processor_2', 'processor_5', 'processor_3', 'processor_4', 'processor_1']
Пример запуска:
chmod +x automata.py
mpirun --allow-run-as-root -n 8 automata.py --periodic --show-progress
Вывод программы:
⬜⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬛⬛⬜⬛⬜⬛⬛⬜⬜⬛⬜⬜⬛⬜
⬜⬛⬛⬛⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬜⬛⬛⬜
⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜
⬛⬛⬜⬜⬜⬛⬛⬜⬜⬜⬜⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬛⬛
⬜⬛⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬛⬛⬜
⬛⬛⬜⬛⬛⬜⬛⬜⬜⬛⬛⬜⬜⬛⬜⬜⬛⬛⬜⬜⬜⬛⬛⬜⬛⬜⬜⬜⬛⬛⬛⬜
⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬜⬜⬛⬛⬛⬛⬛⬜⬜⬛⬛⬜⬛⬛
⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬛⬜⬛⬛⬜⬜⬜⬛⬜⬛⬛⬛⬛⬛⬜
⬜⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬛⬛⬛⬛⬜⬜⬜⬛⬜
⬜⬜⬜⬜⬛⬛⬛⬛⬛⬜⬛⬜⬜⬜⬛⬛⬜⬜⬜⬜⬛⬜⬛⬛⬜⬜⬛⬜⬜⬛⬛⬜
⬜⬜⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬜
⬜⬜⬛⬛⬛⬜⬜⬛⬛⬜⬛⬜⬛⬛⬜⬛⬜⬜⬛⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬛⬜
⬜⬛⬛⬜⬛⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬜⬛⬛⬜⬜⬜⬜⬛⬛⬛⬜
⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬜⬜⬛⬛⬜⬛⬜
⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬜⬜⬛⬛⬛⬛⬛⬛
⬛⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬜⬛⬛⬛⬜⬛⬛⬜⬜⬜⬜⬜
⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬜⬜⬛⬛⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛
⬛⬜⬜⬛⬛⬜⬛⬜⬜⬜⬜⬛⬛⬛⬜⬜⬛⬛⬜⬛⬛⬛⬛⬛⬜⬜⬛⬜⬜⬜⬛⬛
⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜⬛⬛⬜⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜⬛⬜⬛⬛⬜⬜⬛⬛⬜
⬛⬛⬛⬜⬜⬜⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛⬜⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛
⬜⬜⬛⬜⬜⬛⬛⬜⬛⬛⬜⬜⬜⬜⬜⬛⬜⬜⬛⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜
⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬜⬛⬛⬜⬛⬜⬜⬜
⬛⬛⬛⬛⬛⬜⬜⬜⬜⬛⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜
⬛⬜⬜⬜⬛⬜⬜⬜⬛⬛⬜⬜⬛⬛⬜⬜⬜⬛⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬛⬜⬜⬛
⬛⬜⬜⬛⬛⬜⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬛⬛⬜⬜⬛⬛⬜⬜⬛⬜⬜⬛⬛⬜⬛⬛
⬛⬜⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬛⬛⬜
⬛⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛⬛
⬜⬜⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬜⬛⬜⬜⬛⬛⬜
⬜⬛⬛⬜⬛⬜⬜⬜⬛⬛⬜⬛⬜⬜⬛⬛⬜⬛⬛⬛⬜⬛⬜⬜⬜⬛⬛⬜⬛⬛⬛⬜
⬛⬛⬛⬛⬛⬜⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬜⬛⬛⬛⬛⬛⬜⬛⬜
⬛⬜⬜⬜⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬛⬜⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬛
⬛⬜⬜⬛⬛⬛⬛⬛⬜⬜⬛⬛⬜⬛⬜⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬜⬛⬛⬜⬜⬜
⬛⬜⬛⬛⬜⬜⬜⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬜⬛
Time for world_size = 8: 0.8093 seconds
Аргументы программы:
--rule-id - номер правила игры (по умолчанию 110)
--size - длина автомата в ширину (по умолчанию 32 и должна делиться нацело на количество процессоров)
--num-epochs - количество эпох работы автомата (по сути высота картинки) (по умолчанию 32)
--periodic - при указании делает периодические граничные условия
--show-progress - при указании выводит на экран картинку
В автомат имплементированы клетки-призраки, код работает на нескольких процессах.
Вывод автомата для rule_id = 30:
⬛⬜⬜⬛⬜⬛⬛⬜⬛⬜⬜⬜⬛⬜⬜⬛⬛⬛⬛⬛⬜⬜⬛⬛⬜⬜⬛⬛⬛⬜⬛⬜
⬛⬛⬛⬛⬜⬛⬜⬜⬛⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬛⬜
⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬛⬜⬜⬜⬜⬛⬜⬜⬛⬛⬜⬜⬜⬛⬜⬜⬛⬜⬛⬛⬜
⬛⬛⬜⬜⬛⬛⬜⬜⬜⬛⬛⬛⬛⬜⬜⬛⬛⬛⬛⬛⬜⬛⬜⬛⬛⬛⬛⬛⬜⬛⬜⬜
⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬛⬛⬛
⬜⬜⬛⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬛⬜⬜⬛⬜⬜⬜⬛⬛⬜⬛⬛⬜⬜⬜⬛⬛⬜⬜
⬜⬛⬛⬛⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬛⬛⬛⬜⬛⬛⬜⬜⬛⬜⬛⬜⬛⬛⬜⬛⬜
⬛⬛⬜⬜⬜⬛⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬜⬜⬛⬛
⬜⬜⬛⬜⬛⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬜⬜⬛⬛⬜⬛⬜⬜⬜⬛⬜⬛⬛⬛⬛⬜
⬜⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬜⬛⬛⬜⬛⬛⬜⬛⬜⬜⬜⬛
⬜⬛⬜⬜⬛⬛⬜⬜⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬛⬛⬜⬜⬛⬜⬜⬛⬛⬜⬛⬛
⬜⬛⬛⬛⬛⬜⬛⬜⬛⬛⬜⬜⬛⬜⬛⬜⬛⬛⬛⬛⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬛⬜
⬛⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛⬛⬛⬛
⬜⬜⬛⬜⬜⬛⬛⬜⬛⬜⬛⬜⬜⬜⬛⬜⬛⬛⬜⬛⬛⬜⬜⬛⬜⬜⬜⬛⬛⬜⬜⬜
⬜⬛⬛⬛⬛⬛⬜⬜⬛⬜⬛⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬛⬛⬛⬛⬜⬛⬛⬜⬛⬜⬜
⬛⬛⬜⬜⬜⬜⬛⬛⬛⬜⬛⬜⬜⬛⬜⬜⬛⬛⬛⬛⬜⬛⬜⬜⬜⬜⬛⬜⬜⬛⬛⬜
⬛⬜⬛⬜⬜⬛⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬜⬜⬛⬛⬛⬛⬛⬜⬜
⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬛⬜⬛⬛⬛⬜⬜⬜⬜⬛⬛
⬜⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬛⬜⬜⬛⬜⬜⬛⬛⬜
⬜⬛⬛⬛⬜⬜⬛⬛⬜⬛⬜⬛⬛⬜⬜⬛⬛⬜⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜⬛
⬜⬛⬜⬜⬛⬛⬛⬜⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛
⬜⬛⬛⬛⬛⬜⬜⬛⬛⬛⬜⬛⬜⬛⬜⬜⬜⬛⬛⬛⬛⬜⬛⬜⬜⬜⬜⬜⬜⬜⬛⬛
⬜⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬜⬛⬛⬜⬛⬛⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬛⬛⬜
⬛⬛⬛⬜⬛⬛⬜⬜⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬛⬛⬜⬛⬜⬜⬜⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬜⬜⬛⬛⬛⬛⬜⬛⬛⬛⬛⬜⬜⬛⬛⬜⬛⬛⬜⬜⬛
⬛⬜⬜⬛⬛⬜⬛⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬜⬜⬜⬛⬛⬛⬜⬜⬛⬜⬛⬛⬛
⬜⬛⬛⬛⬜⬜⬛⬛⬜⬛⬛⬜⬜⬜⬛⬜⬜⬛⬛⬛⬜⬛⬛⬜⬜⬛⬛⬛⬜⬛⬜⬜
⬛⬛⬜⬜⬛⬛⬛⬜⬜⬛⬜⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜⬛⬜⬛⬛⬛⬜⬜⬜⬛⬛⬜
⬛⬜⬛⬛⬛⬜⬜⬛⬛⬛⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬛⬛⬜⬜
⬛⬜⬛⬜⬜⬛⬛⬛⬜⬜⬜⬛⬜⬛⬛⬜⬜⬛⬛⬜⬛⬜⬜⬛⬛⬛⬛⬜⬛⬜⬛⬛
⬜⬜⬛⬛⬛⬛⬜⬜⬛⬜⬛⬛⬜⬛⬜⬛⬛⬛⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜⬛⬜⬛⬜
⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬛⬛⬛⬜⬜⬜⬛⬜⬜⬛⬛⬜⬛⬛
⬜⬛⬜⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬛⬜⬛⬛⬛⬛⬜⬜⬛⬜⬛⬛⬛⬛⬛⬜⬜⬛⬜
Time for world_size = 8: 0.7389 seconds
Вывод автомата для rule_id = 184:
⬜⬛⬜⬛⬛⬛⬜⬛⬜⬜⬛⬜⬛⬜⬛⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜
⬜⬜⬛⬛⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬛
⬛⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜
⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛
⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜
⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬛
⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛
⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜
⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜
⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜
⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜
⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛
⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜
⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛
⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜
⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜
⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛
⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜
⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛
⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜
⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛
⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜
⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛
⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜
⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛
⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜
⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛
⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜
⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛
⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜
⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛
⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬜
⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛
Time for world_size = 8: 0.8143 seconds
Вывод автомата для rule_id = 54:
⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬛⬜⬛
⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛
⬜⬜⬜⬛⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬛⬛⬛⬜⬜⬛⬜⬜⬜⬜⬛⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜
⬜⬛⬜⬜⬜⬛⬛⬛⬛⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜
⬛⬛⬛⬜⬛⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬜
⬜⬜⬜⬛⬛⬛⬜⬜⬛⬜⬜⬛⬜⬛⬛⬛⬜⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬛
⬛⬜⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬜⬛⬛⬛⬛⬛
⬜⬛⬛⬛⬜⬛⬜⬜⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜
⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬜
⬛⬛⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬛
⬜⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬜⬛⬛⬛⬛⬜
⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬛
⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬜⬜⬛⬛
⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬛⬜⬜
⬜⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬜⬛⬜⬜⬛⬜
⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛
⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬛⬛⬜⬛⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬛
⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬛⬛
⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬛⬜⬜⬛⬛⬛⬜⬛⬛⬛⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬜⬛⬜
⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬜⬛⬛⬛
⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬜⬜⬜
⬛⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬛⬛⬜⬜⬜⬛⬜⬛⬜⬜⬛⬜⬛
⬜⬜⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬛⬛⬛⬛⬛⬜⬛⬜⬜⬛⬜⬛⬛⬛⬛⬛⬛⬛⬛⬜
⬜⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛
⬛⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬛
⬜⬛⬜⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬛⬛⬛⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬛⬜⬜
⬛⬛⬛⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬛⬛⬛⬜
⬜⬜⬜⬛⬜⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬛⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛⬜⬜⬜⬛
⬛⬜⬛⬛⬛⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬜⬛⬛
⬜⬛⬜⬜⬜⬛⬜⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬛⬛⬛⬜⬜⬛⬛⬛⬜⬜
Time for world_size = 8: 0.7173 seconds
Вывод автомата для rule_id = 73:
⬜⬜⬛⬜⬜⬜⬜⬛⬜⬛⬛⬛⬜⬛⬜⬛⬛⬜⬜⬛⬛⬛⬜⬜⬛⬜⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬛⬛⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬛⬜⬛⬜⬛⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
⬜⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬛⬛⬜⬛
⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜
⬛⬛⬛⬜⬛⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛
Time for world_size = 8: 1.4379 seconds
Проанализировать скорость работы программы от кол-ва процессов можно с помощью команды:
chmod +x time.sh
./time.sh 6
Вывод скрипта:
Time for world_size = 1: 39.9391 seconds
Time for world_size = 2: 44.5940 seconds
Time for world_size = 3: 44.4641 seconds
Time for world_size = 4: 22.2608 seconds
Time for world_size = 5: 19.2947 seconds
Time for world_size = 6: 17.1178 seconds
Можно заметить, что в начале при увеличении world_size скорость слегка проседала (возможно это из-за времени пересылки данных между процессорами), но при дальнейшем увеличении параметра программа ускоряется в разы.