next up previous contents
Next: Доступ к данным. Up: Ввод/вывод. Previous: Зарезервированные файловые советы.   Contents

Файловые виды.





MPI_FILE_SET_VIEW(fh, disp, etype, filetype, datarep, info)



INOUT fh дескриптор файла (дескриптор)
IN disp смещение (целое)
IN etype элементарный тип данных (дескриптор)
IN filetype тип файла (дескриптор)
IN datarep представление данных (строка)
IN info информационный объект (дескриптор)




int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, char *datarep, MPI_Info info) MPI_FILE_SET_VIEW(FH, DISP, ETYPE, FILETYPE, DATAREP, INFO, IERROR) INTEGER FH, ETYPE, FILETYPE, INFO, IERROR CHARACTER*(*) DATAREP INTEGER(KIND=MPI_OFFSET_KIND) DISP void MPI::File::Set_view(MPI::Offset disp, const MPI::Datatype& etype, const MPI::Datatype& filetype, const char* datarep, const MPI::Info& info) Подпрограмма MPI_FILE_SET_VIEW изменяет вид данных файла для процесса. Начало вида устанавливается в disp; тип данных устанавливается в etype; распределение данных по процессам в filetype; и представление данных устанавливается в datarep. Кроме того, MPI_FILE_SET_VIEW сбрасывает все индивидуальные и общие файловые указатели в 0. MPI_FILE_SET_VIEW - коллективная; значения datarep и размеры е-типов в представлении данных должны совпадать во всех процессах в группе; значения disp, filetype и info могут быть различны. Типы данных, передаваемые в etype и filetype, должны согласовываться.

Е-тип всегда определяет расположение данных в файле. Если etype - это портируемый тип данных (см. раздел Semantic Terms), размер е-типа вычисляется масштабированием какого-либо смещения в типе данных до соответствия представлению данных в файле. Если etype не является портируемым типом данных, то при вычислении размера е-типа масштабирование не производится. Пользователь должен быть осторожен при использовании непортируемых е-типов в гетерогенных средах; подробнее см. в разделе Datatypes for File Interoperability. Если при открытии файла был определен тип доступа MPI_MODE_SEQUENTIAL, специальное смещение MPI_DISPLACEMENT_CURRENT должно передаваться в качестве disp. Это установит смещение в текущую позицию общего файлового указателя.

Объяснение:

Для некоторых последовательных файлов, например, соответствующих магнитным кассетам или потоковым сетевым соединениям, смещение может быть незначительно. MPI_DISPLACEMENT_CURRENT позволяет менять вид таких файлов. []

Совет разработчикам:

Ожидается, что вызов MPI_FILE_SET_VIEW будет следовать сразу за MPI_FILE_OPEN во многих случаях. Высококачественная реализация обеспечит эффективность такого поведения. []

Аргумент смещения disp определяет позицию (абсолютное смещения в байтах от начала файла), с которой начинается вид.

Совет пользователям:

disp может быть использован, для того чтобы пропустить заголовки или когда файл включает последовательность сегментов данных, к которым следует осуществлять доступ по различным шаблонам (см. рисунок 15). Отдельные виды, каждый из которых использует свои собственные смещение и тип файла, могут быть использованы для доступа к каждому сегменту.[]

\includegraphics[scale=0.6]{pic/9.3.eps}

Figure 9.3: Смещения

Е-тип (элементарный тип данных) - это единица доступа к данным и позиционирования. Это может быть любой определенный в MPI или производный тип данных. Производные е-типы могут быть созданы при помощи любой из подпрограмм создания типов данных MPI, обеспечивающих, чтобы получающиеся типовые смещения были неотрицательны и монотонно неубывали. Доступ к данным идет в единицах е-типов, считывая или записывая целый блок данных какого-либо из е-типов. Смещения выражаются как количества е-типов; указатели на файл указывают на начала е-типов.

Совет пользователям: Чтобы обеспечить взаимодействие в гетерогенной среде, должны применяться дополнительные ограничения для конструирования е-типов (см. разд. File Interoperability ). []

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

Если файл открыт для записи, ни е-тип, ни файловый тип не должны иметь перекрывающиеся области. Это ограничение эквивалентно ограничению ``тип данных, используемых для получения информации не может определять перекрывающиеся области'' для коммуникации. Заметим, что несмотря на это файловые типы из разных процессов могут перекрываться.

Если в файловом типе есть ``дыры``, то тогда данные в этих ``дырах`` недоступны для вызывающего процесса. Однако аргументы disp, etype и filetype могут быть изменены посредством последующих вызовов MPI_FILE_SET_VIEW, для того чтобы получить доступ к различным частям файла.

Ошибочно использовать абсолютные адреса при создании е-типа и файлового типа.

Аргумент info используется для обеспечения информации относительно шаблонов доступа к файлу и специфики файловой системы для прямой оптимизации (см. раздел File Info ). Константа MPI_INFO_NULL соответствует нулевому info, и может быть использована в тех случаях, когда дополнительная информация не нужна.

Аргумент datarep - это строка, которая определяет представление данных в файле. Смотри дальнейшие детали и обсуждение допустимых значений в разделе File Interoperability. Пользователь должен обеспечить, чтобы все ожидающие обработки неблокирующие запросы и коллективные операции над fh, производимые процессом, были выполнены до вызова MPI_FILE_SET_VIEW - в противном случае вызов MPI_FILE_SET_VIEW - ошибочен.



MPI_FILE_GET_VIEW(fh, disp, etype, filetype, datarep)



IN fh дескриптор файла (дескриптор)
OUT disp смещение (целое)
OUT etype элементарный тип данных (дескриптор)
OUT filetype тип файла (дескриптор)
OUT datarep представление данных (строка)




int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep) MPI_FILE_GET_VIEW(FH, DISP, ETYPE, FILETYPE, DATAREP, IERROR) INTEGER FH, ETYPE, FILETYPE, IERROR CHARACTER*(*) DATAREP, INTEGER(KIND=MPI_OFFSET_KIND) DISP void MPI::File::Get_view(MPI::Offset& disp, MPI::Datatype& etype, MPI::Datatype& filetype, char* datarep) const MPI_FILE_GET_VIEW возвращает вид файла в процессе. Текущее значение смещения возвращается в disp. etype и filetype - это новые типы данных с картами типов равными картам типов текущих е-типа и файлового типа соответственно. Представление данных возвращается в datarep. Пользователь должен обеспечить, чтобы строка datarep была достаточно велика, чтобы содержать возвращаемую строку представления данных. Длина строки представления данных ограничена значением MPI_MAX_DATAREP_STRING. Кроме того, если портируемый тип данных был использован для установки текущего вида, то соответствующий тип данных, возвращаемый MPI_FILE_GET_VIEW, тоже портируемый. Если etype или filetype - это производный тип данных, то ответственность за освобождение их памяти лежит на пользователе.


next up previous contents
Next: Доступ к данным. Up: Ввод/вывод. Previous: Зарезервированные файловые советы.   Contents
Alex Otwagin 2002-12-10