Симметричная многопроцессорность (англ. 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-системы позволяют эффективно работать при 16 процессорах.
Каждый современный процессор оборудован многоуровневой кэш-памятью для более быстрой выборки данных и инструкций из основной памяти, которая работает медленнее, чем процессор. В многопроцессорной системе наличие кэш-памяти у процессоров снижает нагрузку на общую шину или на коммутируемое соединение, что весьма благоприятно сказывается на общей производительности системы. Но, так как каждый процессор оборудован своей индивидуальной кэш-памятью, возникает опасность, что в кэш-память одного процессора попадет значение переменной, отличное от того, что хранится в основной памяти и в кэш-памяти другого процессора. Представим, что процессор изменяет значение переменной в своем кэше, а другой процессор запрашивает эту переменную из основной памяти. И он получит старое значение переменной. Или, например, подсистема ввода-вывода записывает в основную память новое значение переменной, а в кэш-памяти процессора по-прежнему остается старое. Разрешение этой проблемы возложено на протокол согласования кэшей (cache coherence protocol), который призван обеспечить согласованность («когерентность») кэшей всех процессоров и основной памяти без потери общей производительности[6].
Поддержка SMP должна быть встроена в операционную систему, иначе дополнительные процессоры будут бездействовать, и система будет работать как однопроцессорная. Большинство современных операционных систем поддерживает симметричную мультипроцессорность, но в разной степени.
Поддержка многопроцессорности в ОС Linux была добавлена в версии ядра 2.0[7] и усовершенствована в версии 2.6. Линейка ОС Windows NT изначально создавалась с поддержкой многопроцессорности. Windows 9x не поддерживали SMP.
SMP — лишь один вариант построения многопроцессорной машины. Другая концепция — NUMA, которая предоставляет процессорам отдельные банки памяти. Это позволяет процессорам работать с памятью параллельно, и это может значительно повысить пропускную способность памяти в случае когда данные привязаны к конкретному процессу (а, следовательно, и процессору). С другой стороны, NUMA повышает стоимость перемещения данных между процессорами, значит, и балансирование загрузки обходится дороже. Преимущества NUMA ограничены специфическим кругом задач, в основном серверами, где данные часто жестко привязаны к конкретным задачам или пользователям.
Другая концепция — асимметричное мультипроцессирование (ASMP), в котором отдельные специализированные процессоры используются для конкретных задач, и кластерная мультипроцессорность (Beowulf), в которой не вся память доступна всем процессорам. Такие подходы нечасто используются (хотя высокопроизводительные 3D-чипсеты в современных видеокартах могут рассматриваться как форма асимметричной мультипроцессорности), в то время как кластерные системы широко применяются при построении очень больших суперкомпьютеров.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .