Багатопроцесорність

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Багатопроцесорність (англ. Multiprocessing) — це використання двох або більше центральних процесорів (CPU) в одній комп'ютерній системі. Термін також відноситься до здатності системи підтримувати більше одного процесора і/або здатність розділити завдання між ними. Є багато варіацій на цю основну тему, і визначення багатопроцесорності може змінюватися в залежності від контексту, в основному від того, як визначені процесори (кілька ядер на одному кристалі, множина чипів в одному корпусі, множина корпусів в одному системному модулі, і т. д.).

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

Типи[ред.ред. код]

Процесорна симетричність[ред.ред. код]

У багатопроцесорній системі всі центральні процесори можуть бути рівними, або деякі можуть бути зарезервовані для особливої мети. Комбінація конструктивних міркувань програмного забезпечення апаратної та операційної системи визначає симетрію (або відсутність її) в даній системі. Наприклад, апаратні або програмні міркування можуть вимагати, щоб тільки один центральний процесор відповідав на всі апаратні переривання, тоді як вся інша робота в системі може бути розподілена однаково серед процесорів; або виконання коду привілейованого режиму може бути обмежене тільки одним процесором (або певним процесором, або тільки один процесор за один раз), тоді як код непривілейованого режиму може бути виконаний на будь-якій комбінації процесорів. Часто багатопроцесорні системи простіше проектувати, якщо введені такі обмеження, але вони мають тенденцію бути менш ефективними ніж системи, в яких використовуються всі центральні процесори.

Системи, які однаково обробляють всі центральні процесори, називають системами з симетричною багатопроцесорною обробкою (SMP). В системах, де всі центральні процесори не рівні, системні ресурси можуть бути розподілені багатьма засобами, в тому числі асиметричною багатопроцесорною обробкою (ASMP), багатопроцесорною обробкою з неоднорідним доступом до пам'яті (NUMA) і кластерізованою багатопроцесорною обробкою (qq.v.).

Потоки команд і даних[ред.ред. код]

У багатопроцесорній обробці процесори можуть використовуватися для виконання однієї послідовності команд у множинних контекстах (єдина машинна команда, множинні дані або SIMD, часто використовують в векторної обробці), множинні послідовності команд в єдиному контексті («множинний потік команд, одиночний потік даних» або Архітектура MISD, яка використовується для надмірності в відмовостійких системах і іноді застосовувана, щоб описати конвеєрні процесори або гіперпоточність), або множинні послідовності команд у множинних контекстах («множинний потік команд, множинні потік даних» або MIMD).

З'єднання процесорів[ред.ред. код]

Багатопроцесорні системи з сильним зв'язком (англ. Tightly-coupled multiprocessor systems) містять кілька процесорів, які підключені на шинному рівні. Ці процесори можуть мати доступ до центральної розділюючої пам'яті (SMP або UMA), або можуть брати участь в ієрархії пам'яті і з локальної та з пам'яттю (NUMA). Ці процесори можуть мати доступ до центральної розділюючої пам'яті (SMP або UMA), або можуть брати участь в ієрархії пам'яті і з локальної та із розділюючою пам'яттю (NUMA). IBM p690 Regatta є прикладом потужної системи SMP. Процесори Intel Xeon домінували над багатопроцесорним ринком для ділових PC і були єдиною x86-опцією до випуску лінійки процесорів AMD Opteron в 2004 році. Обидві лінійки процесорів мали свій власний вбудований кеш, але по різному забезпечують доступ до розділюючої пам'яті: процесори Xeon через загальний канал, а процесори Opteron через незалежні магістралі до системної оперативної пам'яті.

Багатопроцесорні (багатоядерні) чипи, включають більше одного процесора, розташованого в однокристальній схемі, і можуть вважатися граничною формою багатопроцесорної обробки з сильним зв'язком. Мейнфреймові системи з безліччю процесорів — часто є системами з сильним зв'язком.

Багатопроцесорні системи з гнучкою зв'язком (англ. Loosely-coupled multiprocessor systems), або так звані кластери, засновані на множинних автономних одиночних або подвійних комп'ютерах, пов'язаних через високошвидкісну систему зв'язку (наприклад, Gigabit Ethernet). Кластер Беовульфа під управлінням Linux — приклад гнучко пов'язаної системи.

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

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

Програмні реалізації[ред.ред. код]

Одна інструкція Багато інструкцій Одна програма Багато програм
Одні дані SISD MISD
Багато даних SIMD MIMD SPMD MPMD

Багатопроцесорна обробка з SISD[ред.ред. код]

Докладніше: SISD

У комп'ютері з одиночним потоком команд і одинарним потоком даних один процесор послідовно обробляє команди; кожна машинна команда обробляє один елемент даних. Приклад — фон-нейманівська архітектура.

Багатопроцесорна обробка SIMD[ред.ред. код]

Докладніше: SIMD

У комп'ютері з одинарним потоком команд і множинним потоком даних один процесор обробляє потік команд, кожна з яких може виконати паралельні обчислення на безлічі даних.

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

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

Крім того, програми повинні бути ретельно і спеціально написані, щоб мати можливість максимально використати можливості архітектури. Часто застосовуються спеціальні оптимізуючі компілятори, спроектовані так, щоб створити код спеціально для використання в цьому середовищі. Деякі компілятори в цій категорії забезпечують спеціальні конструкції або розширення, щоб дозволити програмістам безпосередньо визначати операції, які будуть виконані паралельно (наприклад, оператори DO FOR ALL у Фортрані, використовуваного на ILLIAC IV, який був багатопроцесорним суперкомп'ютером з SIMD-архітектурою).

Багатопроцесорна обробка SIMD знаходить широке застосування в деяких областях, таких як комп'ютерне моделювання, але малокорисна в універсальному настільному комп'ютері та бізнес-завданнях.

Багатопроцесорна обробка MISD[ред.ред. код]

Докладніше: MISD

Багатопроцесорна обробка з множинним потоком команд і одинарним потоком даних пропонує головним чином перевагу надмірності, так як модулі мультипрограмування виконують одні завдання на одних даних, зменшуючи можливості неправильних результатів, якщо один з модулів виходить з ладу. Архітектура MISD дозволяє порівнювати результати обчислень з метою виявлення відмов. Крім надмірності та відмовостійкості у цього типу багатопроцесорної обробки небагато переваг. До того ж він надзвичайно дорогий. Він не збільшує продуктивність.

Багатопроцесорна обробка MIMD[ред.ред. код]

Докладніше: MIMD

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

Обробка розділена на кілька потоків, кожен з власним апаратним станом процесора, в рамках єдиного певного програмним забезпеченням процесу або в межах множинних процесів. Оскільки система має кілька потоків, які очікують виконання (системні або користувацькі потоки), ця архітектура ефективно використовує апаратні ресурси.

У MIMD можуть виникнути проблеми взаємного блокування та змагання за володіння ресурсами, так як потоки, намагаючись отримати доступ до ресурсів, можуть зіткнутися непередбачуваним засобом. MIMD вимагає спеціального кодування в операційній системі комп'ютера, але не вимагає змін в прикладних програмах, окрім випадків коли програми самі використовують множинні потоки (MIMD прозорий для однопоточних програм під керуванням більшості операційних систем, якщо програми самі не відмовляються від управління з боку ОС). І системне і користувацьке програмне забезпечення, можливо, повинні використовувати програмні конструкції, такі як семафори, щоб перешкоджати тому, щоб один потік втручався в інший, у разі якщо вони містять посилання на одні й ті самі дані. Така дія збільшує складність коду, знижує продуктивність і значно збільшують кількість необхідного тестування, хоча зазвичай не настільки щоб звести нанівець переваги багатопроцесорної обробки. Схожі конфлікти можуть виникнути на апаратному рівні між процесорами, і повинен зазвичай вирішуватися апаратними засобами, або з комбінацією програмного забезпечення і устаткування.