#mpi #openmpi
Вопрос:
Наилучший способ реализации коллективной связи с индивидуальной отправкой и получением зависит от того, как физически подключены узлы, например, с помощью Infiband. Я не смог найти документацию о том, как сообщить OpenMPI, какую сетевую топологию имеет суперкомпьютер, поэтому я полагаю, что он автоматически узнает об этом при выполнении коллективных коммуникаций. Как это работает? В случае, если «топология сети» — неправильный поисковый запрос, я имею в виду такие вещи, как толстое дерево, обрезанное дерево, сетка, гиперкуб.
Комментарии:
1. Топология сети не имеет значения, если вы не знаете, как взаимодействует ваше приложение. Большинство MPI присваивают повышенные ранги последовательным записям в списке хостов. Если ваша программа написана так, чтобы процессы с близкими рангами также были близки в вашем приложении, это неплохой дизайн. Есть несколько подпрограмм MPI, в которых есть параметр, указывающий, что перенумерация разрешена, но поддержка этого является экспериментальной.
2. @VictorEijkhout Мой вопрос относится конкретно к коллективным коммуникациям, извините, если я недостаточно ясно выразился. Таким образом, MPI действительно знает точную схему связи. Вопрос был мотивирован следующим комментарием из «Введения в высокопроизводительные вычисления» Чепмена и Холла. «Хорошие реализации MPI оптимизированы для потока данных при коллективной связи и (должны) также обладать некоторыми знаниями о встроенной топологии сети».
3. Вы спрашиваете конкретно об OpenMPI, с которым у меня нет опыта. В Intel MPI есть множество переменных среды для настройки коллективных алгоритмов: кольцо, дерево, биномиальное, всевозможные вещи. Я полагаю, что в OpenMPI это тоже есть. Посмотрите в руководстве. Я понятия не имею, насколько они настраивают это на оборудование, на которое вы его устанавливаете. Настройка алгоритма по умолчанию, вероятно, выполняется человеком, устанавливающим программное обеспечение MPI. (И да, вы упомянули «коллективный». Я упустил это из виду.)