Набор атрибутов, которые описывают исполнительную среду, подключается к коммуникатору MPI_COMM_WORLD во время инициализации MPI. Значение этих атрибутов можно узнать, используя функцию MPI_ATTR_GET, описанную в главе 5. Удаление этих атрибутов, освобождение их ключей или изменение их значений является ошибкой.
Список предопределенных ключей атрибутов включает:
Поставщики реальных систем могут добавлять определенные параметры (такие, как номер узла, реальный размер памяти, размер виртуальной памяти, и т.д.).
Эти предопределенные атрибуты не изменяют свое значение между MPI инициализацией (MPI_INIT) и MPI завершением (MPI_FINALIZE) и не могут быть модифицированы или удалены пользователями.
Совет пользователям: Заметим, что в языке Си значение, возвращаемое этими атрибутами, является указателем на int, содержащем запрошенную величину.[]
Запрашиваемые значения параметров более детально обсуждаются ниже:
Значения тэга. Величина тэга изменяется в диапазоне от 0 до величины, возвращенной MPI_TAG_UB включительно. Эти значения не должны изменяться в течение выполнения программы MPI. Кроме того, верхнее значение границы тэга должно быть по крайней мере 32767. Реализация MPI вправе делать величину MPI_TAG_UB больше, чем это значение; например, значение - также разрешенное значение для MPI_TAG_UB.
Атрибут MPI_TAG_UB имеет одно и то же значение на всех процессах MPI_COMM_WORLD.
Номер хост процесса. Значение, возвращенное MPI_HOST, дает номер хост-процесса в группе, связанной с коммуникатором MPI_COMM_WORLD, если такой имеется. Если хост-процесса нет, возвращается MPI_PROC_NULL. MPI не определяет, что значит хост-процесс, и не требует, чтобы хост-процесс существовал.
Атрибут MPI_HOST имеет одно и то же значение во всех процессах MPI_COMM_WORLD.
Номер процесса ввода/вывода. Значение, возвращенное MPI_IO, есть номер процесса, который может обеспечивать стандартные для некоторого языка операторы ввода/вывода. Для языка ФОРТРАН это означает, что поддерживаются все операции ввода/вывода (например,OPEN, REWIND, WRITE). Для языка Си это означает, что поддерживаются все ANSI-коды операторов ввода/вывода (например, open, fprintf, lseek).
Если каждый процесс может обеспечивать стандартный для языка ввод/вывод, то будет возвращено значение MPI_ANY_SOURCE. В противном случае, если этот вызывающий процесс может обеспечивать стандартный для языка ввод/вывод, то будет возвращен номер этого процесса. Другими словами, если некоторый процесс может обеспечивать стандартный для языка ввод/вывод, то будет возвращен номер одного такого процесса. Одно и то же значение не обязательно должно возвращаться всем процессам. Если ни один из процессов не может обеспечить стандартный для языка ввод/вывод, то будет возвращено значение MPI_PROC_NULL.
Совет пользователям: Заметим, что ввод данных не является коллективной операцией и этот атрибут не указывает, какой процесс может выполнять или выполняет ввод.[]
Синхронизация часов. Значение, возвращаемое MPI_WTIME_IS_GLOBAL равно 1, если часы для всех процессах в MPI_COMM_WORLD синхронизированы, в противном случае - 0. Совокупность часов рассматривается синхронизированной, если была явная попытка синхронизировать их. Погрешность измерения времени при обращении к MPI_WTIME должна быть меньше половины полного времени для MPI сообщения нулевой длины. Если время в процессе измеряется точно перед отправкой сообщения и в другом процессе точно после приема, то второе время должно быть всегда больше, чем первое. Атрибут MPI_WTIME_IS_GLOBAL может не присутствовать, когда часы не синхронизированы (однако, ключ атрибута MPI_WTIME_IS_GLOBAL всегда имеет силу). Этот атрибут может быть связан с коммуникатором, отличным от MPI_COMM_WORLD. Атрибут MPI_WTIME_IS_GLOBAL имеет то же самое значение во всех процессах MPI_COMM_WORLD.
Синтаксис функции MPI_GET_PROCESSOR_NAME представлен ниже.
MPI_GET_PROCESSOR_NAME(name, resultlen)
OUT | name | уникальный описатель для фактического (в противоположность виртуальному) узла. | |
OUT | resultlen | длина (в печатных знаках) результата, возвращаемого в name |
int MPI_Get_processor_name(char *name, int *resultlen)
MPI_GET_PROCESSOR_NAME(NAME, RESULTLEN, IERROR)
CHARACTER*(*) NAME
INTEGER RESULTLEN,IERROR
void MPI::Get_processor_name(char* name, int& resulten)
Эта процедура возвращает имя процессора, на котором был выполнен вызов. Для максимальной гибкости имя является символьной строкой. От этого значения обязательно требуется конкретное описание единицы оборудования, например: ``процессор 9 в стойке 4 из mpp.cs.org'' и ``231'' (где 231 - фактический номер процессора в текущей однородной системе).
Аргумент name должно иметь длину не менее MPI_MAX_PROCESSOR_NAME знаков.
MPI_GET_PROCESSOR_NAME может добавить к этому много символов в
name. Фактическое число символов возвращается в выходном параметре
resultlen.
Объяснение: Эта функция разрешает реализациям MPI процессов, допускающих миграцию процессов, возвратить имя текущего процессора. Заметим, что ничто в MPI не требует определения мигрирующих процессов; определение MPI_GET_PROCESSOR_NAME просто допускает такую реализацию.[]
Совет пользователям: Пользователь должен обеспечить место размером по крайней мере MPI_MAX_PROCESSOR_NAME для записи имени процессора. Пользователь должен проверить выходной параметр resultlen, чтобы определить фактическую длину имени.[]