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