32
широко используются при написании программ MPI. Это связано не
только с естественностью таких операций (часто используемые
алгоритмы предполагают рассылку данных всем вычислительным
процессам, или наоборот, сборку рассчитанных данных на корневом
процессе), но и высокой эффективностью таких операций. Однако,
прежде чем перейти к рассмотрению этих операций MPI, необходимо
более глубоко ознакомиться с понятием коммуникатора.
5.1. Коммуникаторы
Как уже говорилось ранее, весь обмен данных в MPI
осуществляется в рамках коммуникаторов, которые определяют
контекст обмена и группу процессов, с ними связанных. До сих пор мы
использовали только предопределенный коммуникатор
MPI_COMM_WORLD, определяющий единый контекст и совокупность
всех выполняющихся процессов MPI. В MPI имеются средства
создания и изменения коммуникаторов, предоставляющие
возможность программисту создавать собственные группы процессов,
что делает возможным использование в программах достаточно
сложных типов взаимодействия. Типичной проблемой, которую может
решить использование коммуникаторов, является проблема
недопущения "пересечения" обменов по тегам. В самом деле, если
программист использует какую-то библиотеку параллельных методов,
то он часто не знает, какие теги использует библиотека при передаче
сообщений. В таком случае существует опасность, что тег, выбранный
программистом, совпадет с одним из тегов, используемых
библиотекой. Чтобы этого не произошло, программист может создать
собственный коммуникатор и выполнять операции обмена в его
рамках. Несмотря на то, что этот коммуникатор будет содержать те же
процессы, что и коммуникатор библиотеки, обмены в рамках этих двух
разных коммуникаторов "не пересекутся".
5.2. Управление группами
С понятием коммуникатора тесно связано понятие группы
процессов. Под группой понимают упорядоченное множество
процессов. Каждому процессу в группе соответствует уникальный
номер - ранг. Группа - отдельное понятие MPI, и операции с группами