Page 104 - 6571
P. 104

}

                        Хоча  в  програмі  1.14  бар’єрна  синхронізація  реалізована

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

                  очікуванням  ефективна,  якщо  тільки  кожен  процес  виконується
                  на окремому процесорі, так що  процесу  Coordinator потрібен
                  свій  власний  процесор.  Проте,  можливо  даний  процесор
                  доцільніше  було  б  використовувати  для  іншого  робочого

                  процесу.
                        Другий  недолік  використання  керуючого  процесу  полягає  в

                  тому, що час виконання кожної ітерації процесу Coordinator, і,
                  отже, кожного екземпляра бар’єрної синхронізації пропорційний
                  числу процесів Worker. У ітераційних алгоритмах дуже часто всі
                  робочі  процеси  мають  ідентичний  код.  Це  означає,  що  якщо

                  кожен робочий процес виконується на окремому процесорі, то всі
                  вони підійдуть до бар’єра приблизно в один і той же час. Таким
                  чином,  всі  прапорці  arrive  будуть  встановлені  практично

                  одночасно.  Однак  процес  Coordinator  перевіряє  прапорці  в
                  циклі, по черзі очікуючи, коли буде встановлений кожен із них.


                        12.3 Бар’єр з об’єднуючим деревом



                        Обидві проблеми можна вирішити, об’єднавши дії керуючого
                  і робочих процесів так, щоб кожен робочий процес був одночасно
                  і  керуючим.  Організуємо  робочі  процеси  в  дерево  (рис.  12.1).

                  Сигнал  про  те,  що  процес  підійшов  до  бар’єра  (прапорець
                  arrive[i]),  відсилається  вгору  по  дереву,  а  сигнал  про  дозвіл
                  продовжити  виконання  (прапорець  continue[i])  –  вниз  по
                  дереву.





















                                                             103
   99   100   101   102   103   104   105   106   107   108   109