Page 172 - 4868
P. 172

Ошибка! Стиль не определен.                                                              170

               представлений в табл. 2.2). Зрозуміло, що в загальному випадку необхідні до
               пересилки  дані  можуть  поруч  не  розташовуватися  і  складатися  із  значень
               різних  типів.  Звичайно,  і  в  цих  ситуаціях  розрізнені  дані  можуть  бути
               передані  з  використанням  декількох  повідомлень,  але  такий  спосіб
               неефективний  в  силу  накопичення  латентностей  множини  виконуваних
               операцій  передачі  даних.  Інший  можливий  підхід  полягає  в  попередній
               упаковці  даних,  що  передаються  у  формат  певного  вектору,  проте  і  тут
               з’являються  зайві  операції  копіювання  даних,  та  і  зрозумілість  таких
               операцій передачі далека від бажаної.
                     Для  забезпечення  додаткових  можливостей  при  визначенні  складу
               повідомлень,  що  передаються  в  MPI  передбачений  механізм  так  званих
               похідних типів даних.
                     У  найзагальнішому  вигляді  під  похідним  типом  даних  в  MPI  можна
               розуміти  опис  набору  значень  передбаченого  в  MPI  типу,  причому  в

               загальному  випадку  описувані  значення  не  обов’язково  безперервно
               розташовуються  в  пам’яті.  Задання  типу  в  MPI  прийнято  здійснювати  за
               допомогою  карти  типу  (type  map)  у  вигляді  послідовності  описів  значень,
               що  входять  в  тип;  кожне  окреме  значення  описується  вказуванням  типу  і
               зміщення адреси місцерозташування від деякої базової адреси, тобто
                          TypeMap = {(type 0, disp 0),...,(type n-1, disp n-1)}.

                     Частина  карти  типу  з  вказуванням  тільки  типів  значень  називається  в
               MPI сигнатурою типу:
                                    TypeSignature ={type 0,...,type n-1}.

                     Сигнатура  типу  описує,  які  базові  типи  даних  утворюють  деякий
               похідний  тип  даних  MPI,  і,  тим  самим,  управляє  інтерпретацією  елементів
               даних  при  передачі  або  отриманні  повідомлень.  Зміщення  карти  типу
               визначають, де знаходяться значення даних.
                     Пояснимо  розглянуті  поняття  на  наступному  прикладі.  Нехай  в
               повідомлення повинні входити значення змінних:
                     double a; /* адрес 24 */
                     double b; /* адрес 40 */
                     int n;    /* адрес 48 */

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

                     {(MPI_DOUBLE, 0), (MPI_DOUBLE, 16), (MPI_INT, 24)}
                     Додатково для похідних типів даних в MPI використовується наступний
               ряд нових понять:

                       нижня границя типу:
                          lb(TypeMap) = min j(disp j);

                       верхня границя типу:
                          ub(TypeMap) = max j(disp j+sizeof(type j))+Δ;
                       протяжність типу:.
   167   168   169   170   171   172   173   174   175   176   177