Page 36 - 4868
P. 36

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













                                  Рисунок 1.13 – Синхронізація на рівні команд

                     Наступний  рівень  паралелізму,  що  проявляється  в  ітеративних
               програмах  –це  цикл.  Не  усі  цикли  піддаються  паралельному  виконанню.
               Рішення про це приймає, як правило, програміст, наприклад, за допомогою
               директив компіляції (ця технологія реалізована в OpenMP).
                     Подальше  використання  паралелізму  проводиться  на  рівні  підпрограм
               (функцій).  Рішення  підзадач  може  бути  оформлене  у  вигляді  окремих
               функцій, кожна з яких виконується в іншому потоці. За наявності декількох
               процесорів виконання декількох потоків може відбуватися паралельно. Цей
               рівень  вимагає  ретельного  проектування  синхронізації  і  взаємодії  між
               процесами,  які  в  свою  чергу  багато  в  чому  визначаються  архітектурою
               обчислювальної системи.
                     Ще  одним  рівнем  паралелізму  виступаютьоб’єктитапроцеси,  що  є
               характерними для розподілених програмних систем.
                     Наступний етап проектування – це планування зв’язків або комунікацій
               між  частинами  програми.  Методи  зв’язування,  як  правило,  визначаються
               архітектурою  обчислювальної  системи  (спільні  змінні,  канали  і  т.д.),  а  їх
               конкретна       програмна       реалізація      задається      обраним       інструментом
               програмування – мовою або бібліотекою.
                     Оскільки,під  час  розпаралелювання  декілька  потоків  програми
               працюють  в  межах  однієїзадачі,  то  їх  функціонування  потребує
               координування,  тому  важливим  моментом  проектування  таких  систем  є
               синхронізація.  Необхідно  передбачити,  які  із  завданьповинні  виконуватися
               паралельно,  а  які  послідовно;  якщо  деякі  частини  програми  були  виконані
               раніше,  то  чи  варто  процесору  зайнятися  виконанням  інших  частин
               програми.
                     При  некоректній  організації  зв’язків  і  синхронізації  зазвичай
               з’являються наступні проблеми:
                     1. «Гонка  даних»  виникає  через  те,  що  декілька  задач  одночасно
               намагаються  обновити  та  використовувати  спільні  дані.  Ця  проблема
               найчастіше  виникає  у  випадку,  якщо  відбувається  одночасна  модифікація
               даних. Однак проблема «гонки даних» також часто виникає і у випадку, коли
               одна  задача  повинна  неодноразово  використовувати  дані,  що  оновлюються
               іншоюзадачею.  При  відсутності  узгодженості  процесу,«задача-споживач»
               може  використовувати  застарілі  дані  (при  випереджувальномузчитуванні)
               або  втратити  дані  («задача-виробник»  може  при  записі  затерти  ще
               невикористані дані).
   31   32   33   34   35   36   37   38   39   40   41