MPI Bcast и количество процессов - PullRequest
1 голос
/ 10 июня 2011

Какова семантика Bcast, когда число процессов во время этого вызова отличается от числа процессов, порожденных в начале вычисления?

Мне нужно обработать ситуацию, когда пользователь указывает слишком много процессов, которыенеобходимо выполнить вычисления.Например, пользователь может решить порождать 16 процессов с mpirun, когда мне нужно только 12 для разделения проблемы между процессами.Я справляюсь с этой ситуацией, сравнивая PID с 12 и заканчивая процессы MPI_Finalize, когда PID слишком высок.Я думаю, что это вызывает тупик в моем приложении, потому что Bcast хочет отправить всем процессам?

Как справиться с этим?Должен ли я просто вызывать Bcast во всех процессах, но игнорировать вывод в некоторых?

Ответы [ 2 ]

2 голосов
/ 10 июня 2011

Учитывая, что мы получаем, что можно считать, неверный ввод от пользователя, должны ли мы действительно продолжать выполнение программы после реализации этого?Лучше не показывать пользователю сообщение об ошибке, сообщая, что запрошено недопустимое количество процессов, а также информируя пользователя о допустимом интервале (например, «запрошено 16 процессов, однако максимальное количество процессов равно 12»).поэтому программа теперь завершит работу ").

В противном случае, если это невозможно в вашей ситуации, глава 6" Группы, контексты, коммуникаторы и кеширование "и / или глава 10" Создание процесса "и «Управление» из документации MPI 2.2 может помочь.Возможно, есть другая, более легкая для чтения документация, доступная где-то еще, но, по крайней мере, это начало.

1 голос
/ 12 июня 2011

При запуске программы каждый процесс должен смотреть на свой собственный ранг (от MPI_Comm_rank), общее количество процессов (от MPI_Comm_size(MPI_COMM_WORLD)) и число, которое фактически нужно вычислению. Расположите их ниже нужного вам числа, создайте новый коммуникатор, который вы фактически будете использовать для своей работы, и оставьте все остальные ряды, просто позвонив по номеру MPI_Finalize.

...