Здавалка
Главная | Обратная связь

Освобождение созданного типа данных



MPI_Type_free(datatype)

INOUT datatype тип данных, который освобождается (handle)

Устанавливает datatype в MPI_DATATYPE_NULL.

 

Вектор

Выполняет размножение типов данных, которые состоят из равных блоков. Интервал между блоками кратно протяжённости старого типа данных.

MPI_Type_vector(count, blocklength, stride, oldtype, newtype)

IN count число блоков (int)
IN blocklength число элементов в каждом блоке (int)
IN stride число элементов между началом каждого блока (int)
IN oldtype старый тип данных
OUT newtype новый тип данных

Пример:пусть, oldtype имеет карту типа {(double, 0), (char,8)}, с протяжённостью 16. Вызов MPI_Type_vector(2, 3, 4, oldtype, newtype) создаст тип данных с картой:

{(double, 0), (char, 8), (double, 16), (char, 24), (double, 32), (char, 40), (double, 64), (char, 72), (double, 80), (char, 88), (double, 96), (char, 104)}.

Это два блока с тремя копиями старого типа в каждом, с шагом 4 элемента (4×16 байтов) друг от друга.

Вызов MPI_Type_contiguous (count, oldtype, newtype) эквивалентен вызову MPI_Type_vector (count, 1, 1, oldtype, newtype)

 

3. Hвектор

Функция MPI_Type_hvectorаналогична MPI_Type_vector, за исключением того, что stride задается в байтах, а не в элементах, поэтому смещение возможно на произвольное число байт. Символ h добавляет смысл heterogeneous – неоднородность.

Int MPI_Type_hvector(int count, int blocklength, int stride, MPI_Datatype oldtype,

MPI_Datatype *newtype)

IN count число блоков
IN blocklength число элементов в каждом блоке
IN stride число байт между началом каждого блока
IN oldtype старый тип данных
OUT newtype новый тип данных

Индексированные данные

Функция MPI_Type_indexedвыполняет размножение старого типа в последовательность блоков (каждый блок это конкатенация старого типа данных), где каждый блок может содержать различное число копий и иметь различное смещение. Все смещения блоков кратны протяжённости старого типа.

MPI_Type_indexed (count, array_of_blocklengths, array_of_displacements, oldtype, newtype)

IN count число блоков
IN array_of_blocklengths число элементов в каждом блоке (массив длиной count)
IN array_of_displacements смещение каждого блока, в количестве протяжённостей oldtype (массив длиной count)
IN oldtype старый тип данных
OUT newtype новый тип данных

Пример Пусть oldtype имеет карту типа {(double, 0), (char, 8)}, c протяженностью 16. Пусть B= (3,1) и пусть D= (4,0). Вызов MPI_Type_indexed (2, B, D, oldtype, newtype) возвращает тип данных с картой типа {(double, 64), (char, 72), (double, 80), (char, 88), (double, 96), (char, 104), (double, 0), (char, 8)}: три карты старого типа, начинающиеся со смещения 64, и одна копия, начинающаяся со смещения 0.

 

Вызов MPI_Type_vector (count, blocklength, stride, oldtype, newtype)эквивалентен вызову MPI_Type_indexed (count, B, D, oldtype, newtype), где

 

Функция MPI_Type_hindexed идентична MPI_Type_indexed, за исключением того, что смещения между блоками в array_of_displacements определены в байтах, а не в значениях, кратных протяжённости oldtype. Буква h добавляет смысл heterogeneous – неоднородность.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.