Page 175 - 4868
P. 175
173 Ошибка! Стиль не определен.
У певному плані наявність неперервного способу конструювання є
надмірним, оскільки використання аргументу count в процедурах MPI
рівносильно використанню неперервного типу даних такого ж розміру.
2. Векторний спосіб конструювання. При векторному способі
конструювання похідного типу даних в MPI застосовуються функції
int MPI_Type_vector(int count, int blocklen, int stride,
MPI_Data_type oldtype, MPI_Datatype *newtype)
та
int MPI_Type_hvector(int count, int blocklen,
MPI_Aint stride, MPI_Data_type oldtype,
MPI_Datatype *newtype)
де
count – кількість блоків;
blocklen – розмір кожного блоку;
stride – кількість елементів, розташованих між двома сусідніми
блоками;
oldtype – початковий тип даних;
newtype – новий тип даних, що визначається.
Відмінність способу конструювання, що визначається функцією
MPI_Type_hvector, полягає лише в тому, що параметр stride для
визначення інтервалу між блоками задається у байтах, а не в елементах
початкового типу даних.
Як випливає з опису, при векторному способі новий похідний тип
створюється як набір блоків з елементів початкового типу, при цьому між
блоками можуть бути регулярні проміжки по пам’яті. Наведемо декілька
прикладів використання цього способу конструювання типів:
конструювання типу для виділення половини (тільки парних або
тільки непарних) рядків матриці розміром NxN:
MPI_Type_vector(n/2, n, 2*n, &StripRowType, &ElemType)
конструювання типу для виділення стовпця матриці розміром NxN:
MPI_Type_vector(n, 1, n, &ColumnType, &ElemType)
конструювання типу для виділення головної діагоналі матриці
розміром NxN:
MPI_Type_vector(n, 1, n+1, &DiagonalType, &ElemType).
З урахуванням характеру прикладів, що наводяться, можна згадати
наявну в MPI можливість створення похідних типів для опису підмасивів
багатовимірних масивів за допомогою функції (ця функція передбачається
стандартом MPI-2):
int MPI_Type_create_subarray(int ndims, int *sizes,
int *subsizes,int *starts, int order,
MPI_Data_type oldtype,MPI_Datatype *newtype)