SMP

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

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

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

Альтернативи[ред.ред. код]

SMP — це лише один підхід до побудови багатопроцесорної машини; іншим підходом є NUMA, яка надає процесорам окремі банки пам'яті. Це дозволяє працювати з пам'яттю паралельно, та може значно підвищити її пропускну здатність, у разі коли дані прив'язані до конкретного процесу (а отже і процесору). З другого боку, NUMA підвищує вартість переміщення даних між процесорами, значить і балансування завантаження обходиться дорожче. Переваги NUMA обмежені специфічним колом завдань, в основному серверами, де дані часто тісно прив'язані до конкретних задач або користувачів.

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

Переваги та недоліки[ред.ред. код]

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

Підтримка SMP повинна бути вбудована в операційну систему. Інакше додаткові процесори будуть залишатися не завантаженими і система буде працювати як однопроцесорна.

Обмеження кількості процесорів[ред.ред. код]

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

Проблема когерентності кеш-пам'яті[ред.ред. код]

Проблема, про яку йде мова, виникає через те, що значення елементу даних у пам'яті, що зберігається в двох різних процесорах, доступне цим процесорам тільки через їх власні Кеші. Якщо процесор змінить значення елементу даних у своєму кеші, то при спробі виведення даних з пам'яті, буде отримано старе значення. Навпаки, якщо підсистема вводу/виводу вводить в комірку основної пам'яті нове значення, в кеш-пам'яті процесора, як і раніше залишається старе.

Див. також[ред.ред. код]