next up previous contents
Next: Доступ к данным с Up: Подпрограммы доступа к данным. Previous: Координация.   Contents

Соглашения доступа к данным.

Данные перемещаются между файлами и процессами при помощи подпрограмм чтения и записи. Подпрограммы чтения перемещают данные из файла в память. Подпрограммы записи перемещают данные из памяти в файл. Файл обозначается дескриптором файла fh. Позиция данных в файле определяется смещением в текущем виде. Данные в памяти представляются в виде тройки: buf (буфер), count (количество элементов) и datatype (тип данных). После завершения количество данных, к которым осуществил доступ вызывающий процесс, возвращается в качестве состояния (status). Смещение обозначает начальную позицию для доступа в файле. Смещение представляется в единицах е-типов относительно текущего вида. Подпрограммы, работающие с точным смещением, получают его в качестве аргумента (отрицательные значения недопустимы). Подпрограммы, работающие с файловыми указателями, используют неопределенные смещения, поддерживаемые MPI.

Подпрограммы доступа к данным пытаются переместить (прочитать или записать) count элементов данных типа datatype между буфером пользователя buf и файлом. Тип данных, передаваемый в подпрограмму, должен быть согласован. Расположение данных в памяти, соответствующих buf, count, datatype, интерпретируется таким же образом, как и в функциях связи MPI-1; см. раздел 3.12.5 в [6]. Доступ к данным файла осуществляется в тех его частях, которые определены его текущим видом (раздел File Views ).

Сигнатура типа datatype должна совпадать с типовой сигнатурой некоторого количества копий е-типа текущего вида. Как и при приеме, ошибочно определять тип данных для чтения, который содержит перекрывающиеся регионы (области памяти, в которые будут сохранены данные больше, чем один раз).

Неблокирующие подпрограммы доступа к данным указывают, что MPI может начать доступ к данным и ассоциировать дескриптор запроса и сам запрос с операцией ввода-вывода. Неблокирующие операции завершаются посредством MPI_TEST, MPI_WAIT или любых их вариантов.

Операции доступа к данным, когда завершаются, возвращают количество данных, к которым был осуществлен доступ, в качестве состояния.

Совет пользователям: Для того чтобы предупредить проблемы, связанные с копированием аргументов и регистровой оптимизацей, выполняемых компиляторами Фортрана, обратите внимание на советы в подразделах ``Проблемы из-за копирования данных'' и ``Проблема регистровой оптимизации'' в разделе A Problem with Register Optimization . []

Для блокирующих подпрограмм состояние возвращается напрямую. Для неблокирующих и разделенных коллективных подпрограмм состояние возвращается, когда операция завершается. Количество элементов типа datatype и заранее определенных элементов может быть выделено из status при помощи использования MPI_GET_COUNT и MPI_GET_ELEMENTS соответственно. Интерпретация поля MPI_ERROR такая же, как и для других операций, обычно не определена, но имеет значение, если подпрограмма MPI возвратила MPI_ERR_IN_STATUS. Пользователь может передать (в Си и ФОРТРАН) MPI_STATUS_IGNORE в аргументе status, если возврат этого аргумента не нужен. В С++ аргумент status не обязателен. В status может передаваться MPI_TEST_CANCELLED, чтобы определить, что операция была отменена. Все остальные поля в status не определены. При чтении программа может обнаружить конец файла, обращая внимание на то, что количество прочитанных данных меньше запрошенного количества. Запись после конца файла увеличивает размер файла. Количество записанных данных будет равно запрошенному количеству, если только не возникнет ошибка (или чтение достигнет конца файла).



Alex Otwagin 2002-12-10