Многие ``динамические'' приложения MPI планируется использовать в статической среде выполнения, в которой ресурсы распределяются до того, как будет запущено приложение. Когда одно из таких квази-статических приложений запускается, пользователь (или, возможно, пакетная система) обычно определяет количество процессов для запуска и общее число ожидаемых процессов. Приложение должно знать, сколько слотов существует, т.е. сколько процессов нужно порождать.
MPI предоставляет атрибут MPI_UNIVERSE_SIZE (MPI::UNIVERSE_SIZE в С++), используемый
MPI_COMM_WORLD,
который позволяет приложению получить эту информацию переносимым
способом. Этот атрибут указывает общее число ожидаемых процессов. В
ФОРТРАН атрибут имеет целочисленное значение. В Си атрибут -
указатель на целочисленное значение. Приложение обычно вычитает размер
MPI_COMM_WORLD из MPI_UNIVERSE_SIZE, чтобы определить,
сколько процессов нужно породить. MPI_UNIVERSE_SIZE
инициализируется во время выполнения MPI_INIT и не изменяется
MPI. Если он определен, то имеет то же самое значение для всех
процессов MPI_COMM_WORLD. MPI_UNIVERSE_SIZE
определяется механизмом запуска приложения способом, не описанным в
MPI. (Размер MPI_COMM_WORLD - еще один пример такого
параметра).
Ситуации, для которых может быть установлен MPI_UNIVERSE_SIZE, включают:
Реализация должна документировать, как устанавливается MPI_UNIVERSE_SIZE. Если реализация не поддерживает возможность установки MPI_UNIVERSE_SIZE, атрибут MPI_UNIVERSE_SIZE не устанавливается.
MPI_UNIVERSE_SIZE является рекомендацией, а не жестким ограничением. В частности, некоторые реализации могут позволить приложению порождать до 50 процессов на процессор, если это требуется. Однако, пользователь, вероятно, желает порождать только один процесс на процессор.
MPI_UNIVERSE_SIZE считается определенным, когда приложение запускается и является, в сущности, переносимым механизмом, чтобы позволить пользователю передачу к приложению (через механизм запуска процессов MPI, такой как mpiexec) части критичной информации времени выполнения. Отметьте, что здесь не требуется никакого взаимодействия со средой выполнения. Если среда выполнения изменяет размер, когда программа выполняется, MPI_UNIVERSE_SIZE не обновляется, и приложение должно обнаружить изменения посредством прямого соединения с системой выполнения.