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

Позиционирование.

MPI поддерживает три вида позиционирования для подпрограмм доступа к данным: точное смещение, индивидуальные файловые указатели и общие файловые указатели. Различные методы позиционирования могут быть смешаны в одной программе и не влияют друг на друга.

Подпрограммы доступа к данным, которые используют точные смещения, содержат _AT в своем названии (например, MPI_FILE_WRITE_AT). Операции с точными смещениями производят доступ к данным на позиции в файле, заданной непосредственно как аргумент, - файловые указатели не используются и не изменяются. Заметим, что это не эквивалентно поэлементным операциям найти-и-прочитать или найти-и-записать, так как никакого поиска не производится. Операции с точными смещениями описаны в разделе Data Access with Explicit Offsets . Имена подпрограмм, работающих с индивидуальными файловыми указателями не имеют позициональных квалификаторов (например, MPI_FILE_WRITE). Операции с индивидуальными файловыми указателями описаны в разделе Data Access with Individual File Pointers . Подпрограммы доступа к данным, использующие общие файловые указатели, содержат _SHARED или _ORDERED в своих названиях (например, MPI_FILE_WRITE_SHARED). Операции с общими файловыми указателями в разделе Data Access with Shared File Pointers .

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

Более формально, где count - это количество элементов типа данных datatype, к которым осуществляется доступ, elements(X) - это количество определенных типов данных в карте типа Х и old_file_offset - это значение точного смещения перед вызовом. Позиция в файле, new_file_offset, в терминах количества е-типов относительна по отношению к текущему виду.



Alex Otwagin 2002-12-10