Симметричная многопроцессорность

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Симметричная многопроцессорность (англ. symmetric multiprocessing, сокращённо SMP) — архитектура многопроцессорных компьютеров, в которой два или более одинаковых процессора сравнимой производительности подключаются единообразно к общей памяти (и периферийным устройствам) и выполняют одни и те же функции (почему, собственно, система и называется симметричной)[1]. В английском языке SMP-системы носят также название tightly coupled multiprocessors[2], так как в этом классе систем процессоры тесно связаны друг с другом через общую шину и имеют равный доступ ко всем ресурсам вычислительной системы (памяти и устройствам ввода-вывода) и управляются все одной копией операционной системы.

В таксономии Флинна SMP-машины относятся к классу SM-MIMD-машин. Большинство многопроцессорных систем сегодня использует архитектуру SMP.

Описание[править | править код]

SMP-системы позволяют любому процессору работать над любой задачей независимо от того, где в памяти хранятся данные для этой задачи, — при должной поддержке операционной системой SMP-системы могут легко перемещать задачи между процессорами, эффективно распределяя нагрузку.

Разные SMP-системы соединяют процессоры с общей памятью по-разному. Самый простой и дешевый подход — это соединение по общей шине (system bus)[3][4]. В этом случае только один процессор может обращаться к памяти в каждый данный момент, что накладывает существенное ограничение на количество процессоров, поддерживаемых в таких системах. Чем больше процессоров, тем больше нагрузка на общую шину, тем дольше должен ждать каждый процессор, пока освободится шина, чтобы обратиться к памяти. Снижение общей производительности такой системы с ростом количества процессоров происходит очень быстро, поэтому обычно в таких системах количество процессоров не превышает 2-4. Примером SMP-машин с таким способом соединения процессоров являются любые многопроцессорные серверы начального уровня.

Диаграмма устройства системы с симметричной многопроцессорностью. Процессоры обращаются к общей памяти по общей шине

Второй способ соединения процессоров — через коммутируемое соединение (crossbar switch)[3][5]. При таком соединении вся общая память делится на банки памяти, каждый банк памяти имеет свою собственную шину, и процессоры соединены со всеми шинами, имея доступ по ним к любому из банков памяти. Такое соединение схемотехнически более сложное, но оно позволяет процессорам обращаться к общей памяти одновременно. Это позволяет увеличить количество процессоров в системе до 8-16 без заметного снижения общей производительности. Примером таких SMP-машин являются многопроцессорные рабочие станции RS/6000.

SMP-машина с коммутируемым соединением процессоров

Преимущества и недостатки[править | править код]

SMP — самый простой и экономически выгодный способ масштабирования вычислительной системы: путём наращивания числа процессоров. Также просто и программирование: с помощью потоков и сопутствующих механизмов обмена данными между ними через общие переменные в памяти.

SMP часто применяется в науке, промышленности, бизнесе, где программное обеспечение специально разрабатывается для многопоточного выполнения. В то же время большинство потребительских продуктов, таких как текстовые редакторы и компьютерные игры, написано так, что оно не может использовать сильные стороны SMP-систем. В случае игр это зачастую связано с тем, что оптимизация программы под SMP-системы приведёт к потере производительности при работе на однопроцессорных системах, которые еще недавно занимали большую часть рынка ПК (современные многоядерные процессоры — лишь еще одна аппаратная реализация SMP). В силу природы разных методов программирования для максимальной производительности потребуются отдельные проекты для поддержки одного одноядерного процессора и SMP-систем. И все же программы, запущенные на SMP-системах, получают незначительный прирост производительности, даже если они были написаны для однопроцессорных систем. Это связано с тем, что аппаратные прерывания, обычно приостанавливающие выполнение программы для их обработки ядром, могут обрабатываться на свободном процессоре (процессорном ядре). Эффект в большинстве приложений проявляется не столько в приросте производительности, сколько в ощущении, что программа выполняется более плавно. В некоторых прикладных программах (в частности: программных компиляторах и некоторых проектах распределённых вычислений) повышение производительности будет почти прямо пропорционально числу дополнительных процессоров.

Выход из строя одного процессора приводит к некорректной работе всей системы и требует перезагрузки всей системы для отключения неисправного процессора. Выход же из строя одного процессорного ядра нередко оборачивается выходом из строя всего многоядерного процессора, если многоядерный процессор не оснащен встроенной защитой, отключающей неисправное процессорное ядро и через это позволяющей исправным процессорным ядрам продолжать работать штатно.

Ограничение на количество процессоров[править | править код]

При увеличении числа процессоров заметно увеличиваются требования к пропускной возможности шины памяти. Это налагает ограничение на количество процессоров в SMP-архитектуре. Современные SMP-системы позволяют эффективно работать при 16 процессорах.

Проблема когерентности кэш-памяти[править | править код]

Каждый современный процессор оборудован многоуровневой кэш-памятью для более быстрой выборки данных и машинных команд из основной памяти, которая работает медленнее, чем процессор. В многопроцессорной системе наличие кэш-памяти у процессоров снижает нагрузку на общую шину или на коммутируемое соединение, что весьма благоприятно сказывается на общей производительности системы. Но так как каждый процессор оборудован своей индивидуальной кэш-памятью, то возникает опасность, что в кэш-память одного процессора попадёт значение переменной, отличное от того, что хранится в основной памяти и в кэш-памяти другого процессора. Представим, что процессор изменяет значение переменной в своем кэше, а другой процессор запрашивает эту переменную из основной памяти, — и он (второй процессор) получит уже недействительное значение переменной. Или, например, подсистема ввода-вывода записывает в основную память новое значение переменной, а в кэш-памяти процессора все еще остается устаревшее. Разрешение этой проблемы возложено на протокол согласования кэшей (cache coherence protocol), который призван обеспечить согласованность («когерентность») кэшей всех процессоров и основной памяти без потери общей производительности[6].

Поддержка операционной системой[править | править код]

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

Поддержка многопроцессорности в ОС Linux была добавлена в версии ядра 2.0[7] и усовершенствована в версии 2.6. Линейка ОС Windows NT изначально создавалась с поддержкой многопроцессорности (Windows 9x SMP не поддерживали).

Альтернативы[править | править код]

SMP — лишь один вариант построения многопроцессорной машины. Другая концепция — NUMA, которая предоставляет процессорам отдельные банки памяти. Это позволяет процессорам работать с памятью параллельно, и это может значительно повысить пропускную способность памяти в случае, когда данные привязаны к конкретному процессу (а, следовательно, и процессору). С другой стороны, NUMA повышает стоимость перемещения данных между процессорами, значит, и балансирование загрузки обходится дороже. Преимущества NUMA ограничены специфическим кругом задач, в основном серверами, где данные часто жестко привязаны к конкретным задачам или пользователям.

Другая концепция — асимметричное мультипроцессирование (ASMP), в котором отдельные специализированные процессоры используются для конкретных задач, и кластерная многопроцессорность (Beowulf), в которой не вся память доступна всем процессорам. Такие подходы нечасто используются (хотя высокопроизводительные 3D-чипсеты в современных видеокартах могут рассматриваться как разновидность асимметричной многопроцессорности), в то время как кластерные системы широко применяются при построении очень больших суперкомпьютеров.

См. также[править | править код]

Примечания[править | править код]

  1. Stallings, 2011, p. 33.
  2. Chevance, 2004, p. 265.
  3. 1 2 Severance_Dowd, 1998, p. 195.
  4. Chevance, 2004, p. 266.
  5. Chevance, 2004, p. 267.
  6. Severance_Dowd, 1998, p. 198.
  7. Dhamdhere, 2008, p. 355.

Литература[править | править код]

  • Charles Severance, Kevin Dowd. High Performance Computing (RISC Architectures, Optimization & Benchmarks), 2nd Edition (англ.). — O'Reilly Media, 1998. — 466 p. — ISBN 156592312X.

Ссылки[править | править код]