Page 174 - 4868
P. 174
Ошибка! Стиль не определен. 172
int MPI_Address(void *location, MPI_Aint *address)
де
location – адреса пам’яті;
address – адреса пам’яті в переносимому MPI-форматі.
Слід зазначити, що ця функція є переносимим варіантом засобів
отримання адрес в алгоритмічних мовах C і Fortran.
23.2. Способи конструювання похідних типів даних
Для зниження складності в MPI передбачені декілька різних способів
конструювання похідних типів :
неперервний спосіб дозволяє визначити неперервний набір елементів
існуючого типу як новий похідний тип;
векторний спосіб забезпечує створення нового похідного типу як
набору елементів існуючого типу, між елементами якого є регулярні
проміжки по пам’яті. При цьому розмір проміжків задається в числі
елементів початкового типу, тоді як у варіанті H-векторного способу цей
розмір вказується у байтах;
індексний спосіб відрізняється від векторного методу тим, що
проміжки між елементами початкового типу можуть мати нерегулярний
характер (є і H-індексний спосіб, що відрізняється способом задання
проміжків);
структурний спосіб забезпечує найзагальніший опис похідного типу
через явну вказівку карти створюваного типу даних.
Далі перераховані способи конструювання похідних типів даних будуть
розглянуті детальніше.
1. Безперервний спосіб конструювання. При неперервному способі
конструювання похідного типу даних в MPI використовується функція:
int MPI_Type_contiguous(int count, MPI_Data_type oldtype,
MPI_Datatype *newtype)
де
count – кількість елементів початкового типу;
oldtype – початковий тип даних;
newtype – новий тип даних, що визначається.
Як випливає з опису, новий тип newtype створюється як count
елементів початкового типу oldtype. Наприклад, якщо початковий тип
даних має карту типу
{(MPI_INT, 0), (MPI_DOUBLE, 8)},
то виклик функції MPI_Type_contiguous з параметрами
MPI_Type_contiguous(2, oldtype, &newtype);
призведе до створення типу даних з картою типу
{(MPI_INT, 0), (MPI_DOUBLE, 8), (MPI_INT, 16), (MPI_DOUBLE,
24)}