Я не думаю (образованная мысль, не окончательная), что вы сможете делать то, что вы хотите полностью из своей программы MPI.
Ответ системы на вызов MPI_Get_processor_name
зависит от системы;в вашей системе он может возвращать node00
, node01
, node02
, node03
в зависимости от ситуации или может возвращать my_big_computer
для любого процессора, на котором вы фактически работаете.Первый вариант более вероятен, но не гарантирован.
Одна из стратегий состоит в том, чтобы запустить 32 процесса и, если вы можете определить, на каком узле работает каждый, разделить ваш коммуникатор на 4 группы, по одной на каждый узел.,Таким образом, вы можете самостоятельно управлять внутренними и внутренними коммуникациями.
Другая стратегия заключается в запуске 4 процессов и их закреплении на разных узлах.То, как вы прикрепляете процессы к узлам (или процессорам), будет зависеть от вашей среды выполнения MPI и любой вашей системы управления заданиями, такой как Grid Engine.Вероятно, это потребует установки переменных среды, но вы ничего не скажете нам о своей системе времени выполнения, поэтому мы не можем догадаться, что они могут быть.Затем вы можете динамически порождать каждый из 4-х процессов (7 или 8) и привязывать их к тому же узлу, что и начальный процесс.Чтобы сделать это, прочитайте тему межкоммуникаторов и документацию вашей системы времени выполнения.
Третья стратегия, которая сейчас немного сходит с ума, - это запуск 4 отдельных программ MPI (по 8 процессов в каждой),по одному на каждом узле вашего кластера, и присоединиться к ним по мере их выполнения.Подробнее читайте о MPI_Comm_connect
и MPI_Open_port
.
Наконец, для дополнительного удовольствия вы можете подумать о гибридизации вашей программы, запуская по одному MPI-процессу на каждом узле, и каждый из этих процессов выполняет OpenMP совместнопамять (под) программа.