Для большинства базовых уровней возможность взаимодействия с файлом - это возможность читать информацию, предварительно записанную в файл, причем не только биты данных, но и фактическую информацию, которую эти биты представляют. MPI гарантирует полноту возможностей взаимодействия в пределах одной среды MPI и поддерживает расширенные возможности взаимодействия вне этой среды через внешнее представление данных (раздел 7.5.2) также как и функции преобразования данных (раздел 7.5.3).
Возможность взаимодействия в пределах одной среды MPI (которую
можно было бы назвать ``операбельностью'') гарантирует, что данные
файла, записанные одним процессом MPI могут читаться любым другим
процессом MPI, с учетом ограничений для последовательностей (см.
раздел 7.6.1), т.е. при условии, что есть возможность запустить два
процесса одновременно, и сделать это так, чтобы они существовали в
одном MPI_COMM_WORLD
. Кроме того, оба процесса должны ``видеть'' одни и
те же значения данных для каждого уже записанного байта по любому
абсолютному смещению в файле.
Эта возможность взаимодействия с файлом в одной среде подразумевает, что данные файла доступны независимо от числа процессов.
Существуют три аспекта возможности взаимодействия с файлом:
Первые два аспекта возможности взаимодействия с файлом не входят
в область рассмотрения данного стандарта, поскольку оба в большой
степени машинно-зависимы. Однако требуется, чтобы передача битов в
файл и из файла в среде MPI (например, во время записи файла на
ленту) поддерживалась всеми реализациями MPI. В частности, реализация
должна определять, как известные операции, подобные POSIX cp
, rm
,
и mv
могут быть применены для файла. Кроме того, ожидается, что
предоставляемые средства поддерживают соответствие между абсолютными
смещениями байта (например, после возможного преобразования файловой
структуры, биты данных в байте по смещению 102 в среде MPI
расположены в байте по смещению 102 и вне среды MPI). Как пример,
простая автономная утилита преобразования, которая пересылает и
преобразовывает файлы между исходной файловой системой и средой MPI,
является приемлемой, если она поддерживает режим работы со смещением,
упомянутый выше. В высококачественной реализации MPI, пользователи
смогут управлять файлами MPI, используя такие же инструментальные
средства управления файлами, как предлагает исходная файловая система
или подобные им.
Оставшийся аспект возможности взаимодействия с файлом -
преобразование между различными машинными представлениями -
поддерживается во время ввода информации, указанной в etype
и
filetype
. Это средство позволяет информации в файлах быть разделяемой
любыми двумя приложениями, независимо от того, используют ли они MPI,
и независимо от архитектуры машины, на которой они выполняются.
MPI поддерживает много представлений данных: native
,
internal
и external32
. Реализации могут поддерживать
дополнительные
представления данных. MPI также поддерживает определяемые
пользователем представления данных (см. раздел 7.5.3). Исходное и
внутреннее представления данных зависят от реализации в то время, как
представление external32
является общим для всех реализаций MPI и
облегчает возможность взаимодействия с файлом. Представление данных
указывается в аргументе datarep
для MPI_FILE_SET_VIEW
.
Совет пользователям: MPI не гарантирует сохранение информации о том, какое представление данных использовалось во время записи в файл. Поэтому, для правильности извлечения данных из файла, приложение MPI должно быть ответственно за указание того же представления данных, что использовалось при создании файла.[]
native
: Данные в этом представлении сохраняются в файле точно в
таком же виде, как они находятся в памяти. Преимущество этого
представления данных состоит в том, что точность данных и
эффективность ввода-вывода не теряются при преобразованиях типов в
чистой гомогенной среде. Недостатком является потеря
``прозрачности'' возможности взаимодействия в гетерогенной среде
MPI.
Совет пользователям: Это представление данных должно использоваться только в гомогенной среде MPI, или в тех случаях, когда приложение MPI способно выполнить преобразование типа данных самостоятельно. []
Совет разработчикам: Когда осуществляются операции чтения и
записи на вершине потока сообщений MPI, данные сообщений должны
вводиться в виде MPI_BYTE
, чтобы гарантировать, что подпрограммы
обработки сообщений не сделают никаких преобразований над данными.[]
internal
: Это представление данных может использоваться для
операций ввода-вывода в гомогенной или гетерогенной среде; реализация
будет выполнять преобразование типов в случае необходимости.
Реализация вольна сохранять данные в любом формате по выбору с тем
ограничением, что она будет поддерживать постоянные экстенты для
всех предопределенных типов данных в любом файле. Среда, в которой
полученный в результате файл может многократно использоваться,
определяется реализацией и должна быть документирована ей.
Объяснение: Это представление данных позволяет реализации выполнять ввод-вывод эффективно в гетерогенной среде, хотя и с наложенными реализацией ограничениями на повторное использование файла.[]
Совет разработчикам: С тех пор, как external32
стал
``супернабором'' функциональных возможностей, предоставляемых internal
,
реализация может выбрать internal
с тем же успехом, что и
external32
.[]
external32
: Для этого представления данных принимается, что
операции чтения и записи преобразовывают все данные из и в
представление external32
, определенное в секции 7.5.2. Правила
преобразования данных для коммуникации также применимы и к этим
преобразованиям (см. раздел 3.3.2, страницы 25-27 документа MPI-
1).
Данные на носителе - всегда в этом каноническом представлении, а
данные в памяти - всегда в исходном представлении локального
процесса.
Это представление данных имеет несколько преимуществ. Во-первых, все процессы, читающие файл в гетерогенной среде MPI автоматически преобразуют данные к их соответствующим исходным представлениям. Во- вторых, файл может экспортироваться из данной среды MPI и импортироваться в любую другую среду MPI с гарантией того, что другая среда будет иметь возможность читать все данные в файле.
Совет разработчикам: Когда осуществляются операции чтения и
записи на вершине потока сообщений MPI, данные сообщения должны быть
преобразованы в представление или из представления external32
клиентом, и посланы в виде типа MPI_BYTE
. Это позволит избежать
возможного двойного преобразования типа данных и связанной с этим
дальнейшей потери точности и производительности.[]