Page 176 - 4868
P. 176
Ошибка! Стиль не определен. 174
де
ndims – розмірність масиву;
sizes – кількість елементів в кожній розмірності початкового масиву;
subsizes – кількість елементів в кожній розмірності підмасиву, що
визначається;
starts – індекси початкових елементів в кожній розмірності
підмасиву, що визначається;
order – параметр для вказування необхідності переупорядковування;
oldtype – тип елементів початкового масиву;
newtype – новий тип даних для опису підмасиву.
3. Індексний спосіб конструювання. При індексному способі
конструювання похідного типу даних в 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 – новий тип даних, що визначається.
Як випливає з опису, при індексному способі новий похідний тип
створюється як набір блоків різного розміру з елементів початкового типу,
при цьому між блоками можуть бути різні проміжки по пам’яті. Для
пояснення цього способу можна навести приклад конструювання типу для
опису верхньої трикутної матриці розміром NxN:
// конструювання типу для опису верхньої трикутної матриці
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 індексного способу конструювання для