Вопрос знатокам MPI - возможно ли из процесса узнать, в каких коммуникаторах он состоит? Если возможно, то как?
Вопрос вызван следующей проблемой: коммуникатор с трехмерной декартовой топологией "режется" на коммуникаторы с одномерной топологией по одной из размерностей с помощью функции MPI_Cart_sub. При этом, в адресном пространстве каждого из процессов (функция MPI_Cart_sub не локальная), помещается массив новых одномерных коммуникаторов (output аргумент MPI_Cart_sub). Далее для каждого из новых коммуникаторов необходимо выполнить функцию MPI_Reduce, НО - непонятно в каком именно из созданных коммуникаторов оказывается текущий процесс и, как следствие, непонятно на каком коммуникаторе вызывать, собственно, эту самую MPI_Reduce.
Не хотелось бы искать для каждого процесса в списке новых коммуникаторов (он может получаться довольно объемистым) тот, в который данный процесс попал при делении исходного коммуникатора и уже потом вызывать на нем MPI_Reduce. Также не хотелось бы в каждом процессе вызывать MPI_Reduce подряд для всех новых коммуникаторов. Можно ли обойтись без этого?
|