Page 220 - 6571
P. 220

Пояснимо розглянуті поняття на наступному прикладі. Нехай
                  в повідомлення повинні входити значення змінних:

                        double a; /* адрес 24 */
                        double b; /* адрес 40 */
                        int n;    /* адрес 48 */

                        Тоді похідний тип для опису таких даних повинен мати карту
                  типу наступного виду:

                        {(MPI_DOUBLE, 0), (MPI_DOUBLE, 16), (MPI_INT, 24)}

                        Додатково для похідних типів даних в MPI використовується
                  наступний ряд нових понять:

                        - нижня границя типу:
                             lb(TypeMap) = min (disp );
                                                                     j
                                                           j
                        - верхня границя типу:
                             ub(TypeMap) = max (disp +sizeof(type ))+Δ;
                                                                     j
                                                           j
                                                                                           j
                        - протяжність типу:.
                             extent(TypeMap) = ub(TypeMap)-lb(TypeMap).
                        Згідно з визначенням, нижня межа є зміщенням для першого
                  байту значень даного типу даних. Відповідно, верхня межа є змі-

                  щенням  для  байту,  розташованого  вслід  за  останнім  елементом
                  даного типу даних. При цьому величина зміщення для верхньої
                  межі може бути закруглена вгору з урахуванням вимог вирівню-
                  вання  адрес.  Так,  одна  з  вимог,  які  накладають  деякі  реалізації

                  мов C, полягає в тому, щоб адреса елементу була кратна довжині
                  цього елементу у байтах. Наприклад, якщо тип int займає чоти-
                  ри байти, то адреса елементу типу int повинна без остачі діли-

                  тися на чотири. Саме ця вимога і відбивається у визначенні верх-
                  ньої межі типу даних MPI. Пояснимо цей момент на раніше розг-
                  лянутому прикладі набору змінних a, b і n, для якого нижня межа

                  дорівнює 0, а верхня набуває значення 32 (величина округлення
                  6  або  4  залежно  від  розміру  типу  int).  Тут  слід  зазначити,  що
                  необхідне вирівнювання визначається за типом першого елемен-

                  ту даних в карті типу.
                        Слід  також  вказати  на  відмінність  понять  «протяжність»  і
                  «розмір  типу».  Протяжність  –  це  розмір  пам’яті  у  байтах,  який

                  треба відводити для одного елементу похідного типу. Розмір типу
                  даних – це число байтів, які займають дані (різниця між адресами
                  останнього і першого байтів даних). Відмінність в значеннях про-


                                                             219
   215   216   217   218   219   220   221   222   223   224   225