Рассмотрим следующий простой сценарий для MPI-приложения: корневой процесс передает (MPI_Bcast
) какие-то параметры (несколько десятков байт - фиксированный размер), затем все узлы начинают выполнять какие-то вычисления, затем корень собирает результаты (MPI_Gather
- возможно, очень большие набор данных). После сохранения данных рутом программа завершает работу.
При каких обстоятельствах (количество процессов, задержка и т. д.) (если таковые имеются) использование коммуникатора, созданного с использованием топологии виртуальной звезды, обеспечит лучшую производительность, чем использование MPI_COMM_WORLD
, и почему? Использует ли коммуникатор ленивую инициализацию для реальных каналов (т. е. открывает канал, сокет и т. д. только в первый раз, когда это требуется). Зависит ли реализация этого поведения?
Примечание: я использую openmpi1.4.3-2
и простой C.