Page 47 - 4868
P. 47

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

                         <if (a[i]> m) m = a[i]; >
                         # повторна перевірка значення змінноїm

                     Ідея полягає в тому, щоб спочатку перевірити нерівність, а потім, якщо
               воно виконується, провести ще одну перевірку перед оновленням значення
               змінної  m.  Дана  перевірка  може  здатися  зайвою,  але  це  не  так.  Наприклад,
               якщо  деякий  процес  оновив  значення  m,  то  частина  інших  процесів
               визначить,  що  їх  значення  a[i]  менші  нового  значення  m,  і  не  буде
               виконувати  тіло  оператора  if.  Після  подальших  оновлень  ще  менша
               кількість  процесів  визначать,  що  умова  в  першій  перевірці  задовольняє
               істині.  Отже,  якщо  перевірки  самі  по  собі  виконуються  в  певному
               випадковому порядку, а не паралельно, то це підвищує ймовірність того, що
               процесам не потрібно буде проводити наступну перевірку.
                     Даний  частковий  випадок,  не  дуже  годиться  для  вирішення  за
               допомогою  паралельної  програми,  якщо  тільки  вона  не  виконується  на
               SIMD-машині,  побудованої  спеціально  для  ефективного  виконання
               дрібномодульних  програм.  Проте  в  ньому  розглядається  три  ключові
               моменти.  По-перше,  синхронізація  необхідна  для  отримання  правильних
               результатів, якщо процеси і зчитують, і записують спільні змінні. По-друге,
               для  задання  неподільності  дій  вводиться  використання  символів  « < »  та
               « > ».  По-третє,  описаний  метод  подвійної  перевірки  перед  оновленням
               спільної змінної досить корисний, особливо коли існує ймовірність того, що
               перша  перевірка  дасть  помилковий  результат,  і,  отже,  друга  перевірка  не
               знадобиться.


                     Запитання для самоперевірки

                     1. Що розуміють під поняттям «стан» у паралельній програмі?
                     2. Які дії у паралельній програмі називаються неподільними?
                     3. Що розуміють під історією виконання паралельної програми?
                     4. Що таке критична секція у термінах паралельної програми?
                     5. У чому полягає суть синхронізації за умовою?
                     6. Що розуміють під властивістю паралельної програми?
                     7. Дайте визначення поняттю «взаємне виключення»
                     8. Яка  основна  вимога  повинна  задовольнятися  для  можливості
               розпаралелювання будь-якої програми?
                     9. Яке  призначення  оператора  co  під  час  реалізації  паралельної
               програми?
                     10. У чому полягає суть незалежності паралельних процесів?



                     ЛЕКЦІЯ 7. НЕПОДІЛЬНІ ДІЇ ТА ОПЕРАТОРИ ОЧІКУВАННЯ


                     7.1. Дрібномодульна неподільність

                     Як  згадувалося  раніше,  виконання  паралельної  програми  можна
               представити  як  чергування  неподільних  дій,  що  виконуються  окремими
   42   43   44   45   46   47   48   49   50   51   52