Процедуры MPI_COMM_SPAWN и MPI_COMM_SPAWN_MULTIPLE
предоставляют интерфейс между MPI и средой выполнения
приложения MPI. Трудность состоит в том, что существует огромное
число сред выполнения и требований приложения, и MPI не должен
заниматься каждым случаем в отдельности. Ниже приведены примеры таких
сред:
Многопроцессорная система, управляемая
системой очередей пакетов. Системы очередей пакетов обычно
распределяют ресурсы перед стартом приложения, устанавливают
ограничения на использование ресурсов (процессорное время,
использование памяти и т.д.), и не позволяют изменения распределения
ресурсов после начала задачи. Кроме того, многие многопроцессорные
системы имеют специальные ограничения или расширения, такие, как лимит
количества процессов на одном процессоре, или способность групповой
диспетчеризации процессов параллельного приложения.
Сеть рабочих станций с PVM. PVM позволяют пользователю
создавать виртуальную машину над сетью рабочих станций. Приложение
может расширять виртуальную машину или управлять процессами
(создавать, уничтожать, перенаправлять вывод и т.д.) посредством
библиотеки PVM. Запросы на управление машиной или процессами могут
перехватываться и обслуживаться внешним менеджером ресурсов.
Сеть рабочих станций, управляемая системой распределения
нагрузки. Система распределения нагрузки может выбирать размещение
порожденных процессов, основанное на динамических величинах, таких как
средняя загрузка. Система может прозрачно перемещать процессы с одной
машины на другую, если ресурс стал недоступен.
Большие
симметричные многопроцессорные системы (SMP) на Unix. На SMP
приложения запускаются непосредственно пользователем. Диспетчеризация
проводится на низком уровне операционной системой. Процессы могут
иметь специальные характеристики диспетчеризации (групповая
диспетчеризация, близость процессоров, диспетчеризация по дедлайну (deadline),
блокировка процессоров и т.д.) и являться субъектами ресурсных
ограничений операционной системы (число процессов, количество памяти и
т.д.).
MPI предполагает существование параллельной среды, в которой
запускаются приложения. Он не предоставляет сервисов операционной
системы, таких, как общая способность запросить, какие процессы
запущены, уничтожить произвольный процесс, или определить свойства
среды выполнения (сколько процессов, сколько памяти и т.д.).
Сложное взаимодействие приложения MPI с его средой выполнения
должно выполняться через специфичный для среды программный интерфейс
приложения (API). Примером такого API может быть задача PVM и
процедуры управления машиной pvm_addhosts, pvm_config,
pvm_tasks и т.д., возможно модифицированные, чтобы возвращать пару
MPI (группа, ранг), если это возможно. Condor или PSB API может
быть еще одним примером.
На некотором низком уровне, очевидно,
MPI должен уметь взаимодействовать с системой выполнения, но
взаимодействие не заметно на уровне приложения, и детали
взаимодействия не определены в стандарте MPI.
Во многих случаях информация, специфическая для среды, не может
выноситься за пределы интерфейса MPI без серьезного ограничения
функциональности MPI. Поэтому, многие процедуры MPI
принимают аргумент info, позволяющий приложению определить
информацию, специфичную для среды. Это сделка между функциональностью
и переносимостью, однако, приложения, использующие info,
не являются переносимыми.
MPI не требует наличия в основе модели виртуальной машины, в
которой существует согласованный общий вид приложения MPI и
неявная операционная система для управления ресурсами и процессами. В
частности, процессы, порожденные одной задачей могут не быть видны
другой; дополнительные машины, добавленные к среде выполнения одного
процесса, могут быть не видны другому процессу; задачи, порожденные
разными процессами, не могут автоматически распределяться по доступным
ресурсам.
Взаимодействие между MPI и средой выполнения ограничивается
следующими областями:
Процесс с помощью MPI_COMM_SPAWN и MPI_COMM_SPAWN_MULTIPLE может запустить
новые процессы .
Если процесс порождает дочерний процесс, он
может по желанию использовать аргумент info, чтобы сообщить
среде выполнения, где или как запустить процесс. Эта дополнительная
информация может быть скрыта для MPI.
Атрибут MPI_UNIVERSE_SIZE для MPI_COMM_WORLD
сообщает программе, насколько ``большой'' является начальная среда
выполнения, а именно, сколько процессов могут быть запущены вообще.
Можно отнять размер MPI_COMM_WORLD от этой величины, чтобы
найти, сколько процессов могут быть запущены дополнительно к уже
работающим.