Можно ли указать MPI_COMM_WORLD в качестве другого коммуникатора внутри субкоммуникаторов?

Я пишу приложение MPI, Aв C ++, который ссылается на внешнее приложение, B, который также использует MPI. В приложении AМне нужно запустить параллельные функции в B в параллели. Количество процессоров, mтребуется для вызова параллельных функций в B известен и постоянен. Кроме того, количество параллельных экземпляров Bвызов функции, nв пределах А известен и постоянен.

В настоящее время планирую расщепление MPI_COMM_WORLD в n коммуникаторы размера m и работает BФункция внутри каждого сгенерированного коммуникатора. Однако если B имеет жесткий код MPI_COMM_WORLD как его коммуникатор для всех вызовов MPI, есть ли способ для меня, чтобы отличить это MPI_COMM_WORLD следует рассматривать как соответствующий коммуникатор, недавно созданный в A вместо глобального коммуникатора для всех процессоров?

Я знаю, что это может быть странно, но я был вдохновлен этот статья, которая читает

Хотя MPI_Comm_split является наиболее распространенной функцией создания коммуникатора, существует множество других. MPI_Comm_dup является наиболее простым и создает дубликат коммуникатора. Может показаться странным, что существует функция, которая создает только копию, но это очень полезно для приложений, которые используют библиотеки для выполнения специализированных функций, таких как математические библиотеки. В таких приложениях важно, чтобы коды пользователей и коды библиотек не мешали друг другу. Чтобы избежать этого, первое, что должно сделать каждое приложение, — это создать дубликат MPI_COMM_WORLD, что позволит избежать проблем других библиотек, также использующих MPI_COMM_WORLD. Сами библиотеки также должны делать дубликаты MPI_COMM_WORLD, чтобы избежать той же проблемы.

Означает ли это, что то, что я предлагаю, возможно, или я просто неправильно понимаю статью? Если нет, есть ли подобная стратегия для достижения того, что я описал?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …