Теория и практика параллельных вычислений

         

Индексный способ конструирования


При индексном способе конструирования производного типа данных в MPI используются функции:

int MPI_Type_indexed(int count, int blocklens[], int indices[], MPI_Data_type oldtype, MPI_Datatype *newtype) и int MPI_Type_hindexed(int count, int blocklens[], MPI_Aint indices[], MPI_Data_type oldtype, MPI_Datatype *newtype),

где

  • count — количество блоков;
  • blocklens — количество элементов в каждом блоке;
  • indices — смещение каждого блока от начала типа;
  • oldtype — исходный тип данных;
  • newtype — новый определяемый тип данных.

Как следует из описания, при индексном способе новый производный тип создается как набор блоков разного размера из элементов исходного типа, при этом между блоками могут иметься разные промежутки по памяти. Для пояснения данного способа можно привести пример конструирования типа для описания верхней треугольной матрицы размером n?n:

// Конструирование типа для описания верхней треугольной матрицы for ( i = 0, i < n; i++ ) { blocklens[i] = n - i; indices [i] = i * n + i; } MPI_Type_indexed(n, blocklens, indices, &UTMatrixType, &ElemType).

Как и ранее, способ конструирования, определяемый функцией MPI_Type_hindexed, отличается тем, что элементы indices для определения интервалов между блоками задаются в байтах, а не в элементах исходного типа данных.

Следует отметить, что существует еще одна дополнительная функция MPI_Type_create_indexed_block индексного способа конструирования для определения типов с блоками одинакового размера (данная функция предусматривается стандартом MPI-2).



Содержание раздела