Студопедия — Передача упакованных данных
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Передача упакованных данных






Функция MPI_Pack упаковывает элементы предопределенного или производного типа MPI, помещая их побайтное представление в выходной буфер.

C:

int MPI_Pack(void* inbuf, int incount, MPI_Datatype datatype,

void *outbuf, int outsize, int *position, MPI_Comm comm)

FORTRAN:

MPI_PACK(INBUF, INCOUNT, DATATYPE, OUTBUF, OUTSIZE,

POSITION, COMM, IERROR)

<type> INBUF(*), OUTBUF(*)

INTEGER INCOUNT, DATATYPE, OUTSIZE, POSITION, COMM, IERROR

IN inbuf - адрес начала области памяти с элементами, которые требуется упаковать;
IN incount - число упаковываемых элементов;
IN datatype - тип упаковываемых элементов;
OUT outbuf - адрес начала выходного буфера для упакованных данных;
IN outsize - размер выходного буфера в байтах;
INOUT position - текущая позиция в выходном буфере в байтах;
IN comm - коммуникатор.

Функция MPI_Pack упаковывает incount элементов типа datatype из области памяти с начальным адресом inbuf. Результат упаковки помещается в выходной буфер с начальным адресом outbuf и размером outsize байт. Параметр position указывает текущую позицию в байтах, начиная с которой будут размещаться упакованные данные. На выходе из подпрограммы значение position увеличивается на число упакованных байт, указывая на первый свободный байт. Параметр comm при последующей посылке упакованного сообщения будет использован как коммуникатор.

Функция MPI_Unpack извлекает заданное число элементов некоторого типа из побайтного представления элементов во входном массиве.

C:

Int MPI_Unpack(void* inbuf, int insize, int *position, void *outbuf,

int outcount, MPI_Datatype datatype, MPI_Comm comm)

FORTRAN:

MPI_UNPACK(INBUF, INSIZE, POSITION, OUTBUF, OUTCOUNT,

DATATYPE, COMM, IERROR)

<type> INBUF(*), OUTBUF(*)

INTEGER INSIZE, POSITION, OUTCOUNT, DATATYPE, COMM, IERROR

IN inbuf - адрес начала входного буфера с упакованными данными;
IN insize - размер входного буфера в байтах;
INOUT position - текущая позиция во входном буфере в байтах;
OUT outbuf - адрес начала области памяти для размещения распакованных элементов;
IN outcount - число извлекаемых элементов;
IN datatype - тип извлекаемых элементов;
IN comm - коммуникатор.

Функция MPI_Unpack извлекает outcount элементов типа datatype из побайтного представления элементов в массиве inbuf, начиная с адреса position. После возврата из функции параметр position увеличивается на размер распакованного сообщения. Результат распаковки помещается в область памяти с начальным адресом outbuf.

Для посылки элементов разного типа из нескольких областей памяти их следует предварительно запаковать в один массив, последовательно обращаясь к функции упаковки MPI_Pack. При первом вызове функции упаковки параметр position, как правило, устанавливается в 0, чтобы упакованное представление размещалось с начала буфера. Для непрерывного заполнения буфера необходимо в каждом последующем вызове использовать значение параметра position, полученное из предыдущего вызова.

Упакованный буфер пересылается любыми коммуникационными операциями с указанием типа MPI_PACKED и коммуникатора comm, который использовался при обращениях к функции MPI_Pack.

Полученное упакованное сообщение распаковывается в различные массивы или переменные. Это реализуется последовательными вызовами функции распаковки MPI_Unpack с указанием числа элементов, которое следует извлечь при каждом вызове, и с передачей значения position, возвращенного предыдущим вызовом. При первом вызове функции параметр position следует установить в 0. В общем случае, при первом обращении должно быть установлено то значение параметра position, которое было использовано при первом обращении к функции упаковки данных. Очевидно, что для правильной распаковки данных очередность извлечения данных должна быть той же самой, как и при упаковке.

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

C:

int MPI_Pack_size(int incount, MPI_Datatype datatype,

MPI_Comm comm, int *size)

FORTRAN:

MPI_PACK_SIZE(INCOUNT, DATATYPE, COMM, SIZE, IERROR)

INTEGER INCOUNT, DATATYPE, COMM, SIZE, IERROR

IN incount - число элементов, подлежащих упаковке;
IN datatype - тип элементов, подлежащих упаковке;
IN comm - коммуникатор;
OUT size - размер сообщения в байтах после его упаковки.

Первые три параметра функции MPI_Pack_size такие же, как у функции MPI_Pack. После обращения к функции параметр size будет содержать размер сообщения в байтах после его упаковки.

Рассмотрим пример рассылки разнотипных данных из 0-го процесса с использованием функций MPI_Pack и MPI_Unpack.

char buff[100];double x, y;int position, a[2];{MPI_Comm_rank(MPI_COMM_WORLD, &myrank);if (myrank == 0){ /* Упаковка данных*/position = 0;MPI_Pack(&x, 1, MPI_DOUBLE, buff, 100, &position, MPI_COMM_WORLD);MPI_Pack(&y, 1, MPI_DOUBLE, buff, 100, &position, MPI_COMM_WORLD);MPI_Pack(a, 2, MPI_INT, buff, 100, &position, MPI_COMM_WORLD);} /* Рассылка упакованного сообщения */MPI_Bcast(buff, position, MPI_PACKED, 0, MPI_COMM_WORLD); /* Распаковка сообщения во всех процессах */if (myrank!= 0)position = 0;MPI_Unpack(buff, 100, &position, &x, 1, MPI_DOUBLE, MPI_COMM_WORLD);MPI_Unpack(buff, 100, &position, &y, 1, MPI_DOUBLE, MPI_COMM_WORLD);MPI_Unpack(buff, 100, &position, a, 2, MPI_INT, MPI_COMM_WORLD);}






Дата добавления: 2015-09-15; просмотров: 386. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Предпосылки, условия и движущие силы психического развития Предпосылки –это факторы. Факторы психического развития –это ведущие детерминанты развития чел. К ним относят: среду...

Анализ микросреды предприятия Анализ микросреды направлен на анализ состояния тех со­ставляющих внешней среды, с которыми предприятие нахо­дится в непосредственном взаимодействии...

Типы конфликтных личностей (Дж. Скотт) Дж. Г. Скотт опирается на типологию Р. М. Брансом, но дополняет её. Они убеждены в своей абсолютной правоте и хотят, чтобы...

Подкожное введение сывороток по методу Безредки. С целью предупреждения развития анафилактического шока и других аллергических реак­ций при введении иммунных сывороток используют метод Безредки для определения реакции больного на введение сыворотки...

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

ПРОФЕССИОНАЛЬНОЕ САМОВОСПИТАНИЕ И САМООБРАЗОВАНИЕ ПЕДАГОГА Воспитывать сегодня подрастающее поколение на со­временном уровне требований общества нельзя без по­стоянного обновления и обогащения своего профессио­нального педагогического потенциала...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия