The OpenNET Project / Index page

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

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

Другие конструкторы производных типов

MPI_Type_struct() является самым общим конструктором типов данных в MPI. Поэтому пользователь должен обеспечить полное описание каждого элемента типа. Если данные, которые будут переданы, состоят из подмножества элементов массива, возможно не стоит обеспечивать слишком детальную информацию, так как все элементы имеют тот же самый основной тип. MPI обеспечивает три производных конструктора данных для того, чтобы работать в этой ситуации: MPI_Type_Contiguous(), MPI_Type_vector() и
MPI_Type_indexed(). Первый конструктор строит производный тип, элементами которого являются смежные элементы массива. Второй конструктор строит тип, элементами которого являются равномерно разделенные промежутками элементы массива, а третий строит тип, элементы которого являются произвольными элементами массива. Прежде чем любой производный тип может быть использован в коммуникации, он должен быть объявлен вызовом MPI_Type_commit().

Ниже приведены сведения о синтаксисе дополнительных конструкторов типов MPI:

int MPI_Type_contiguous(int count,

    MPI_Datatype oldtype, MPI_Datatype* newtype);

MPI_Type_contiguous() создает производный тип данных, состоящий из count элементов типа oldtype. Элементы расположены в памяти последовательно:

int MPI_Type_vector(int count, int block_length,

    int stride, MPI_Datatype element_type,

    MPI_Datatype* newtype);

MPI_Type_vector() создает производный тип, состоящий из count элементов. Каждый элемент содержит block_length значений с типом element_type. Stride определяет длину промежутка элементов с типом element_type между действительными элементами new_type (рис. 3):

\includegraphics{fig2.eps}

Рис. 3. Результат вызова MPI_Type_vector() для count=2, stride=3, block_length=2

int MPI_Type_indexed(int count,

    int* array_of_block_lengths,

    int* array_of_displacements,

    MPI_Datatype element_type,

    MPI_Datatype* newtype);

MPI_Type_indexed создает производный тип из count элементов. Элемент i (i = 0, 1, ..., count-1), содержит массив из block_lengths[i] значений с типом element_type, смещенный на
array_of_displacements[i] позиций типа element_type от начала new_type.



2004-06-22



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

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