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)
   170   171   172   173   174   175   176   177   178   179   180