The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
next up previous contents
Next: Доступ к данным с Up: Доступ к данным. Previous: Доступ к данным с   Contents

Доступ к данным с индивидуальными файловыми указателями.

MPI поддерживает по одному индивидуальному файловому указателю в процессе на каждый дескриптор файла. Текущее значение этого указателя неявно определяет смещение в подпрограммах доступа к данным, описанных в данном разделе. Данные подпрограммы используют и обновляют только индивидуальные файловые указатели, поддерживаемые MPI. Общие файловые указатели не используются и не обновляются. Подпрограммы с использованием индивидуальных файловых указателей имеют ту же семантику, что и доступ к данным через подпрограммы точного смещения, описанные в разделе Data Access with Explicit Offsets , со следующим изменением:

После того как была инициирована операция с файловым указателем, индивидуальный файловый указатель изменяется так, чтобы указывать на следующий е-тип после последнего, к которому был осуществлен доступ. Файловый указатель изменяется относительно текущего вида файла.

Если был определен тип доступа MPI_MODE_SEQUENTIAL, когда открывался файл, то вызывать подпрограммы из данного раздела ошибочно.



MPI_FILE_READ(fh, buf, count, datatype, status)



INOUT fh дескриптор файла (дескриптор)
OUT buf начальный адрес буфера (выбор)
IN count количество элементов в буфере (целое)
IN datatype тип данных каждого элемента буфера (дескриптор)
OUT status объект состояния (Status)




int MPI_File_read(MPI_File fh, void *buf, int count,
 MPI_Datatype datatype, MPI_Status *status)
MPI_FILE_READ(FH, BUF, COUNT, DATATYPE, STATUS,
IERROR)
<type> BUF(*)
INTEGER FH, COUNT, DATATYPE,
STATUS(MPI_STATUS_SIZE), IERROR
void MPI::File::Read(void* buf, int count,
 constMPI::Datatype& datatype, MPI::Status& status)
void MPI::File::Read(void* buf, int count,
 const MPI::Datatype& datatype)
MPI_FILE_READ читает файл, используя индивидуальный файловый указатель.

Пример Следующий фрагмент кода на ФОРТРАН - это пример чтения файла до достижения его конца:

!   Читает существующий файл ввода,до тех пор
!   пока не будут прочитаны все данные.
!   Вызывает подпрограмму "process_input", если
!   прочитаны все запрошенные данные.
!   Оператор "exit" языка Fortran 90 завершает
!   цикл.


integer   bufsize, numread, totprocessed,
status(MPI_STATUS_SIZE)
      parameter (bufsize=100)
      real      localbuffer(bufsize)


call MPI_FILE_OPEN( MPI_COMM_WORLD, 'myoldfile', &
                    MPI_MODE_RDONLY, MPI_INFO_NULL, myfh, ierr )
call MPI_FILE_SET_VIEW( myfh, 0, MPI_REAL, MPI_REAL, 'native', &
                          MPI_INFO_NULL, ierr )
      totprocessed = 0
      do
        call MPI_FILE_READ( myfh, localbuffer, bufsize, MPI_REAL, &
                             status, ierr )
        call MPI_GET_COUNT( status, MPI_REAL, numread, ierr )
         call process_input( localbuffer, numread)
         totprocessed = totprocessed + numread
         if ( numread < bufsize ) exit
      enddo


write(6,1001) numread, bufsize, totprocessed
1001  format( "No more data:  read", I3, "and expected", I3, &
              "Processed total of", I6, "before terminating job." )


call MPI_FILE_CLOSE( myfh, ierr )




MPI_FILE_READ_ALL(fh, buf, count, datatype, status)



INOUT fh дескриптор файла (дескриптор)
OUT buf начальный адрес буфера (выбор)
IN count количество элементов в буфере (целое)
IN datatype тип данных каждого элемента буфера (дескриптор)
OUT status объект состояния (Status)




int MPI_File_read_all(MPI_File fh, void *buf, int count,
 MPI_Datatype datatype, MPI_Status *status)
MPI_FILE_READ_ALL(FH, BUF, COUNT, DATATYPE,
STATUS, IERROR)
<type> BUF(*)
INTEGER FH, COUNT, DATATYPE,
STATUS(MPI_STATUS_SIZE), IERROR
void MPI::File::Read_all(void* buf, int count,
 const MPI::Datatype& datatype, MPI::Status& status)
void MPI::File::Read_all(void* buf, int count,
 const MPI::Datatype& datatype)
MPI_FILE_READ_ALL - это коллективная версия блокирующего интерфейса MPI_FILE_READ.





MPI_FILE_WRITE(fh, buf, count, datatype, status)



INOUT fh дескриптор файла (дескриптор)
IN buf начальный адрес буфера (выбор)
IN count количество элементов в буфере (целое)
IN datatype тип данных каждого элемента буфера (дескриптор)
OUT status объект состояния (Status)




int MPI_File_write(MPI_File fh, void *buf, int count,
 MPI_Datatype datatype, MPI_Status *status)
MPI_FILE_WRITE(FH, BUF, COUNT, DATATYPE, STATUS,
IERROR)
<type> BUF(*)
INTEGER FH, COUNT, DATATYPE,
STATUS(MPI_STATUS_SIZE), IERROR
void MPI::File::Write(const void* buf, int count,
const MPI::Datatype& datatype, MPI::Status& status)
void MPI::File::Write(const void* buf, int count,
const MPI::Datatype& datatype)
MPI_FILE_WRITE записывает файл, используя индивидуальный файловый указатель.





MPI_FILE_WRITE_ALL(fh, buf, count, datatype, status)



INOUT fh дескриптор файла (дескриптор)
IN buf начальный адрес буфера (выбор)
IN count количество элементов в буфере (целое)
IN datatype тип данных каждого элемента буфера (дескриптор)
OUT status объект состояния (Status)




int MPI_File_write_all(MPI_File fh, void *buf,
int count, MPI_Datatype datatype, MPI_Status *status)
MPI_FILE_WRITE_ALL(FH, BUF, COUNT, DATATYPE,
STATUS, IERROR)
<type> BUF(*)
INTEGER FH, COUNT, DATATYPE,
STATUS(MPI_STATUS_SIZE), IERROR
void MPI::File::Write_all(const void* buf, int count,
 const MPI::Datatype& datatype, MPI::Status& status)
void MPI::File::Write_all(const void* buf, int count,
 const MPI::Datatype& datatype)
MPI_FILE_WRITE_ALL - это коллективная версия блокирующего интерфейса MPI_FILE_WRITE.





MPI_FILE_IREAD(fh, buf, count, datatype, request)



INOUT fh дескриптор файла (дескриптор)
OUT buf начальный адрес буфера (выбор)
IN count количество элементов в буфере (целое)
IN datatype тип данных каждого элемента буфера (дескриптор)
OUT request объект запроса (дескриптор)




int MPI_File_iread(MPI_File fh, void *buf, int count,
 MPI_Datatype datatype, MPI_Request *request)
MPI_FILE_IREAD(FH, BUF, COUNT, DATATYPE, REQUEST,
IERROR)
<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, REQUEST, IERROR
MPI::Request MPI::File::Iread(void* buf, int count,
 const MPI::Datatype& datatype)
MPI_FILE_IREAD - это неблокирующая версия интерфейса MPI_FILE_READ.

Пример Данный фрагмент кода ФОРТРАНa иллюстрирует семантику обновления файловых указателей:

!   Читает двадцать первых вещественных чисел в
!   два локальных буфера. Заметим, что когда
!   завершается первая MPI_FILE_IREAD, файловый
!   указатель обновляется и указывает на
!   одиннадцатое вещественное чисел в файле.


integer   bufsize, req1, req2
integer, dimension(MPI_STATUS_SIZE) :: status1, status2
      parameter (bufsize=10)
      real      buf1(bufsize), buf2(bufsize)


call MPI_FILE_OPEN( MPI_COMM_WORLD, 'myoldfile', &
                          MPI_MODE_RDONLY, MPI_INFO_NULL, myfh, ierr )
      call MPI_FILE_SET_VIEW( myfh, 0, MPI_REAL, MPI_REAL, 'native', &
                         MPI_INFO_NULL, ierr )
      call MPI_FILE_IREAD( myfh, buf1, bufsize, MPI_REAL, &
                           req1, ierr )
      call MPI_FILE_IREAD( myfh, buf2, bufsize, MPI_REAL, &
                           req2, ierr )


call MPI_WAIT( req1, status1, ierr )
      call MPI_WAIT( req2, status2, ierr )


call MPI_FILE_CLOSE( myfh, ierr )




MPI_FILE_IWRITE(fh, buf, count, datatype, request)



INOUT fh дескриптор файла (дескриптор)
IN buf начальный адрес буфера (выбор)
IN count количество элементов в буфере (целое)
IN datatype тип данных каждого элемента буфера (дескриптор)
OUT request объект запроса (дескриптор)




int MPI_File_iwrite(MPI_File fh, void *buf, int count,
 MPI_Datatype datatype, MPI_Request *request)
MPI_FILE_IWRITE(FH, BUF, COUNT, DATATYPE,
REQUEST, IERROR)
<type> BUF(*)
INTEGER FH, COUNT, DATATYPE, REQUEST, IERROR
MPI::Request MPI::File::Iwrite(const void* buf,
int count, const MPI::Datatype& datatype)
MPI_FILE_IWRITE - это неблокирующая версия интерфейса MPI_FILE_WRITE.





MPI_FILE_SEEK(fh, offset, whence)



INOUT fh дескриптор файла (дескриптор)
IN offset смещение (целое)
IN whehence тип обновления (положение)




int MPI_File_seek(MPI_File fh, MPI_Offset offset,
int whence)
MPI_FILE_SEEK(FH, OFFSET, WHENCE, IERROR)
INTEGER FH, WHENCE, IERROR
INTEGER(KIND=MPI_OFFSET_KIND) OFFSET
void MPI::File::Seek(MPI::Offset offset, int
whence)
MPI_FILE_SEEK изменяет индивидуальный файловый указатель относительно аргумента whence, который может иметь следующие значения:

offset может быть отрицательным, что позволяет вести поиск в обратном направлении. Ошибочно переходить к отрицательным для вида позициям.





MPI_FILE_GET_POSITION(fh, offset)



IN fh дескриптор файла (дескриптор)
OUT offset смещение (целое)




int MPI_File_get_position(MPI_File fh, MPI_Offset *offset)
MPI_FILE_GET_POSITION(FH, OFFSET, IERROR)
INTEGER FH, IERROR
INTEGER(KIND=MPI_OFFSET_KIND) OFFSET
MPI::Offset MPI::File::Get_position() const
MPI_FILE_GET_POSITION возвращает, в аргументе offset, текущую позицию индивидуального файлового указателя в единицах е-типа относительно текущего вида.

Совет пользователям: Смещение может быть использовано при дальнейших вызовах
MPI_FILE_SEEK, используя whence = MPI_SEEK_SET, для возврата к текущей позиции. Чтобы установить смещение файлового указателя, сначала необходимо преобразовать offset в абсолютную позицию байта, используя MPI_FILE_GET_BYTE_OFFSET, а затем вызвать MPI_FILE_SET_VIEW с получившимся смещением. []



MPI_FILE_GET_BYTE_OFFSET(fh, offset, disp)



IN fh дескриптор файла (дескриптор)
IN offset смещение (целое)
OUT disp абсолютная позиция байта с данным смещением (целое)




int MPI_File_get_byte_offset(MPI_File fh,
MPI_Offset offset, MPI_Offset *disp)
MPI_FILE_GET_BYTE_OFFSET(FH, OFFSET, DISP,
IERROR)
INTEGER FH, IERROR
INTEGER(KIND=MPI_OFFSET_KIND) OFFSET, DISP
MPI::Offset MPI::File::Get_byte_offset(const MPI::Offset disp) const
MPI_FILE_GET_BYTE_OFFSET преобразует смещение относительно вида в абсолютную позицию байта. Абсолютная позиция байта (от начала файла) с данным смещением offset относительно текущего вида fh возвращается в disp.


next up previous contents
Next: Доступ к данным с Up: Доступ к данным. Previous: Доступ к данным с   Contents
Alex Otwagin 2002-12-10



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру