SMP
Симетричне мультипроцесування (англ. Symmetric Multiprocessing, або SMP) — це архітектура багатопроцесорних комп'ютерів, в якій два або більше однакових процесорів підключаються до загальної пам'яті. Більшість багатопроцесорних систем сьогодні використовують архітектуру SMP.
SMP системи дозволяють будь-якому процесору працювати над будь-яким завданням незалежно від того, де в пам'яті зберігаються дані для цього завдання; за належної підтримки операційною системою, SMP системи можуть легко переміщувати завдання між процесорами ефективно розподіляючи навантаження. З другого боку, пам'ять набагато повільніша процесорів, які до неї звертаються, навіть однопроцесорним машинам доводиться витрачати значний час на отримання даних з пам'яті. У SMP ситуація ще більш ускладнюється, тому що тільки один процесор може звертатися до пам'яті в певну одиницю часу.
Зміст |
Альтернативи [ред.]
SMP — це лише один підхід до побудови багатопроцесорної машини; іншим підходом є NUMA, яка надає процесорам окремі банки пам'яті. Це дозволяє працювати з пам'яттю паралельно, та може значно підвищити її пропускну здатність, у разі коли дані прив'язані до конкретного процесу (а отже і процесору). З другого боку, NUMA підвищує вартість переміщення даних між процесорами, значить і балансування завантаження обходиться дорожче. Переваги NUMA обмежені специфічним колом завдань, в основному серверами, де дані часто тісно прив'язані до конкретних задач або користувачів.
Іншими підходами є асиметрична мультипроцесування (ASMP), в якому окремі спеціалізовані процесори використовуються для конкретних завдань, та кластерна мультипроцесорність ( Beowulf), в якому не вся пам'ять доступна всім процесорам. Такі підходи не часто застосовуються (хоча високопродуктивні 3D чіпсети в сучасних відеокартах можуть розглядатися як форма асиметричної мультипроцесорності), у той час як кластерні системи широко застосовуються при побудові дуже великих суперкомп'ютерів.
Переваги та недоліки [ред.]
SMP часто застосовується в науці, промисловості, бізнесі, де програмне забезпечення спеціально розробляється для багатопоточного виконання. У той же час, більшість користувацьких продуктів, таких як текстові редактори та комп'ютерні ігри написані так, що вони не можуть отримати високий приріст продуктивності від SMP систем. У випадку ігор це найчастіше пов'язане з тим, що оптимізація програми під SMP системи призведе до втрати продуктивності при роботі на однопроцесорних системах, які займають велику частину ринку. У силу природи різних методів програмування, для максимальної продуктивності будуть потрібні окремі проекти для підтримки одного процесора та SMP систем. І все ж програми, запущені на SMP системах, одержують приріст продуктивності навіть якщо вони були написані для однопроцесорних систем. Це пов'язано з тим, що апаратні переривання, зазвичай припиняють виконання програми для їх обробки ядром, можуть оброблятися на вільному процесорі. Ефект у більшості програм виявляється не стільки в прирості продуктивності, скільки у відчутті, що програма виконується більш плавно. У деяких додатках, зокрема програмних компіляторах і деяких проектах розподілених обчислень, підвищення продуктивності буде майже прямо пропорційним числу додаткових процесорів.
Підтримка SMP повинна бути вбудована в операційну систему. Інакше додаткові процесори будуть залишатися не завантаженими і система буде працювати як однопроцесорна.
Обмеження кількості процесорів [ред.]
При збільшенні кількості процесорів помітно збільшується вимога до смуги пропускання шини пам'яті. Це накладає обмеження на кількість процесорів в SMP архітектурі. Сучасні конструкції дозволяють розмістити до чотирьох процесорів на одній системній платі.
Проблема когерентності кеш-пам'яті [ред.]
Проблема, про яку йде мова, виникає через те, що значення елементу даних у пам'яті, що зберігається в двох різних процесорах, доступне цим процесорам тільки через їх власні Кеші. Якщо процесор змінить значення елементу даних у своєму кеші, то при спробі виведення даних з пам'яті, буде отримано старе значення. Навпаки, якщо підсистема вводу/виводу вводить в комірку основної пам'яті нове значення, в кеш-пам'яті процесора, як і раніше залишається старе.
