next up previous contents
Next: Распределение памяти Up: Разное Previous: Определение, закончился ли MPI   Contents

Объект Info

Многие из подпрограмм MPI-2 берут аргумент info. info - скрытый объект с указателем типа MPI_Info в Си, MPI::Info в С++ и INTEGER в ФОРТРАН. Он состоит из (key, value) пар (и key и value - строки). Ключ может иметь только одно значение. MPI резервирует несколько ключей и требует, чтобы, если реализация использовала зарезервированный ключ, она должна обеспечить указанные функциональные возможности. Реализация не требует, чтобы поддержать эти ключи и может поддерживать любые другие не зарезервированные MPI.

Если функция не признает ключ, она игнорирует его, если не определено иначе. Если реализация признает ключ, но не признает формат соответствующего значения, результат неопределен.

Ключи имеют максимальную длину MPI_MAX_INFO_KEY, которая определена реализацией, по крайней мере от 32 до 255 символов. Значения имеют определенную реализацией максимальную длину MPI_MAX_INFO_VAL. В языке ФОРТРАН начальный и конечный пробелы удалены из обоих. Возвращенные значения никогда не будут больше чем эти максимальные длины. И key и value являются регистрочувствительными.

Объяснение: Ключи имеют максимальную длину, потому что набор известных ключей будет всегда конечен и известен реализации и потому, что нет никакой причины для того, чтобы ключи были сложными. Маленький максимальный размер позволяет приложениям объявлять ключи размера MPI_MAX_INFO_KEY. Ограничение на размеры значения введено для того, чтобы реализация не имела дела с произвольно длинными строками. []

Совет пользователям: MPI_MAX_INFO_VAL могло бы быть очень большим, так что было бы глупо объявить строку такого размера. []

Когда это - аргумент подпрограммы неблокирования, info анализируется прежде, чем подпрограмма возвратит, так что он может быть изменен или освобожден немедленно после возвращения.

Когда описания обращаются к ключу или значению, являющимся булевой переменной, целым числом, или списком, они означают строковое представление этих типов. Реализация может определять ее собственные правила для того, как строки значения info преобразованы к другим типам, но чтобы гарантировать мобильность, каждая реализация должна поддержать следующие представления. Законные значения для булевой переменной должны включать строки ``истина'' и ``ложь'' (все буквы строчные). Для целых чисел законные значения должны включать строковые представления десятичных значений целых чисел, которые существуют в пределах диапазона стандартного целочисленного типа в программе. (Однако, возможно, что не каждое законное целое число является законным значением для данного ключа.) На положительных числах знаки + необязательные. Между знаком + или - и первой цифрой числа не должно быть никаких пробелов. Для отделенных запятыми списков строка должна содержать законные элементы, отделенные запятыми. Начальные и конечные пробелы удаляются автоматически от типов значений информации, описанных выше и для каждого элемента отделенного запятыми списка. Эти правила относятся ко всем значениям информации этих типов. Реализации свободны определить различную интерпретацию для значений других ключей информации.

MPI_INFO_CREATE(info)

OUT info создает объект информации (указатель)  

int MPI_info_create (MPI_Info *info) MPI_INFO_CREATE(INFO, IERROR) INTEGER INFO, IERROR static MPI::Info MPI::Info::Create()

MPI_INFO_CREATE создает новый объект информации. Недавно созданный объект не содержит никаких пар ключ / значение.

MPI_INFO_SET(info, key, value)

INOUT info объект информации (указатель)  
IN key ключ (строка)  
IN value значение (строка)  

int MPI_info_set(MPI_Info info, char *key, char *value) MPI_INFO_SET(INFO, KEY, VALUE, IERROR) INTEGER INFO, IERROR CHARACTER*(*) KEY, VALUE void MPI::Info::Set(const char* key, const char* value)

MPI_INFO_SET добавляет пару (ключ, значение) к info, и отменяет значение, если значение для того же самого ключа было предварительно установлено. key и value - нуль-терминированные строки в Си. В языке ФОРТРАН начальные и конечные пробелы в key и value удалены. Если либо key, либо value больше, чем позволенные максимумы, возникают ошибки MPI_ERR_INFO_KEY или MPI_ERR_INFO_VALUE, соответственно.

MPI_INFO_DELETE(info, key)

INOUT info объект информации (указатель)  
IN key ключ (строка)  

int MPI_Info_delete(MPI_Info info, char *key) MPI_INFO_DELETE(INFO, KEY, IERROR) INTEGER INFO, IERROR CHARACTER*(*) KEY void MPI::Info::Delete(const char* key)

MPI_INFO_DELETE удаляет пару (ключ, значение) из info. Если key не определен в info, вызов вызывает ошибку класса MPI_ERR_INFO_NOKEY.

MPI_INFO_GET(info, key, valuelen, value, flag)

IN info объект информации (указатель)  
IN key ключ (строка)  
IN valuelen длина параметра arg (целое число)  
OUT value значение (строка)  
OUT flag true, если ключ определен, false, если нет (логический)  

int MPI_info_get(MPI_Info info, char *key, int valuelen, char *value, int *flag) MPI_INFO_GET(INFO, KEY, VALUELEN, VALUE, FLAG, IERROR) INTEGER INFO, VALUELEN, IERROR CHARACTER*(*) KEY, VALUE LOGICAL FLAG bool MPI::Info::Get(const char* key, int valuelen, char* value) const

Эта функция восстанавливает значение, связанное с key в предыдущем вызове MPI_INFO_SET. Если такой ключ существует, она устанавливает flag в true и возвращает значение в value, иначе устанавливает flag в false и оставляет неизменным value. valuelen - число символов, доступное в значении. Если оно меньше, чем фактический размер значения, значение будет усечено. В Си valuelen должно быть на 1 больше, чем количество распределенного пространства, чтобы учесть нуль-терминатор.

Если размер key больше чем MPI_MAX_INFO_KEY, вызов является ошибочным.

MPI_INFO_GET_VALUELEN(info, key, valuelen, flag)

IN info объект информации (указатель)  
IN key ключ (строка)  
OUT valuelen длина параметра arg (целое число)  
OUT flag true, если ключ определен, false, если нет (логический)  

int MPI_Info_get_valuelen (MPI_Info info, char *key, int *valuelen, int *flag) MPI_INFO_GET_VALUELEN (INFO, KEY, VALUELEN, FLAG, IERROR) INTEGER INFO, VALUELEN, IERROR LOGICAL FLAG CHARACTER*(*) KEY bool MPI::Info::Get_valuelen(const char* key, int& valuelen) const

Восстанавливает длину value, связанной с key. Если key определена, в valuelen установлена длина его связанного значения, и flag установлен в true. Если key не определена, valuelen не касаются, и flag установлен в false. Длина, возвращенная в Си или С++ не включает символ конца строки.

Если key длиннее чем MPI_MAX_INFO_KEY, вызов является ошибочным.

MPI_INFO_GET_NKEYS(info, nkeys)

IN info объект информации (указатель)  
OUT nkeys число определенных ключей (целое число)  

int MPI_Info_get_nkeys (MPI_Info info, int *nkeys) MPI_INFO_GET_NKEYS(INFO, NKEYS, IERROR) INTEGER INFO, NKEYS, IERROR int MPI::Info::Get_nkeys() const

MPI_INFO_GET_NKEYS возвращает в info число ключей определенных в настоящее время.

MPI_INFO_GET_NTHKEY(info, n, key)

IN info объект информации (указатель)  
IN n номер ключа (целое число)  
OUT key ключ (строка)  

int MPI_Info_get_nthkey (MPI_Info info, int n, char *key) MPI_INFO_GET_NTHKEY(INFO, N, KEY, IERROR) INTEGER INFO, N, IERROR CHARACTER*(*) KEY void MPI::Info::Get_nthkey(int n, char* key) const

Эта функция возвращает n-ый определенный ключ в info. Ключи пронумерованы от 0 до N-1, где N - значение, возвращенное MPI_INFO_GET_NKEYS. Все ключи между 0 и N-1 гарантированно будут определены. Номер данного ключа не изменяется, пока info не изменится функциями MPI_INFO_SET или MPI_INFO_DELETE.

MPI_INFO_DUP(info, newinfo)

IN info объект информации (указатель)  
OUT newinfo объект информации (указатель)  

int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) MPI_INFO_DUP(INFO, NEWINFO, IERROR) INTEGER INFO, NEWINFO, IERROR MPI::Info MPI::Info::Dup() const

MPI_INFO_DUP дублирует существующий объект информации, создавая новый объект с той же самой парой (ключ, значение) и таким же расположением ключей.

MPI_INFO_FREE(info)

INOUT info объект информации (указатель)  

int MPI_info_free(MPI_Info *info) MPI_INFO_FREE(INFO, IERROR) INTEGER INFO, IERROR void MPI::Info::Free()

Эта функция освобождает info и устанавливает его в MPI_INFO_NULL. Значение аргумента информации интерпретируется всякий раз, когда информацию передают подпрограмме. Изменения в info после возвращения из подпрограммы не затрагивают эту интерпретацию.


next up previous contents
Next: Распределение памяти Up: Разное Previous: Определение, закончился ли MPI   Contents
Alex Otwagin 2002-12-10