Введение

Равное распределение всех ресурсов несколькими идентичными процессорами.

Симметричная многопроцессорность или многопроцессорность с общей памятью (SMP) – это аппаратная и программная архитектура многопроцессорного компьютера, в которой два или более идентичных процессора подключены к единой совместно используемой основной памяти, имеют полный доступ ко всем устройствам ввода-вывода и управляются единственным экземпляром операционной системы, который относится ко всем процессорам одинаково, не резервируя ни один для специальных целей. Большинство современных многопроцессорных систем используют архитектуру SMP. В случае многоядерных процессоров архитектура SMP применяется к ядрам, рассматриваемым как отдельные процессоры. Профессор Джон Д. Кубиатович традиционно считает, что SMP-системы содержат процессоры без кэш-памяти. Каллер и Пал Сингх в своей книге "Параллельная компьютерная архитектура: аппаратно-программный подход" (1998) отмечают: "Термин SMP широко используется, но может вносить некоторую путаницу. […] Более точное описание SMP – это многопроцессор с общей памятью, где стоимость доступа к ячейке памяти одинакова для всех процессоров, то есть имеет единую стоимость доступа при обращении непосредственно к памяти. Если ячейка находится в кэше, доступ будет быстрее, но время доступа к кэшу и время доступа к памяти одинаковы для всех процессоров". Системы SMP – это тесно связанные многопроцессорные системы с пулом однородных процессоров, работающих независимо друг от друга. Каждый процессор, выполняющий различные программы и обрабатывающий различные наборы данных, имеет возможность совместно использовать общие ресурсы (память, устройства ввода-вывода, систему прерываний и т. д.), соединенные посредством системной шины или коммутационной матрицы.

Дизайн

Системы SMP имеют централизованную общую память, называемую основной памятью (MM), работающую под единой операционной системой с двумя или более однородными процессорами. Обычно каждый процессор имеет выделенную частную высокоскоростную память, известную как кэш-память (или кэш), для ускорения доступа к данным в основной памяти и снижения трафика системной шины. Процессоры могут быть соединены между собой с помощью шин, кроссбарных коммутаторов или межсоединений в виде сети на кристалле. Узким местом масштабируемости SMP при использовании шин или кроссбарных коммутаторов является пропускная способность и энергопотребление межсоединений между различными процессорами, памятью и дисковыми массивами. Архитектура сети (mesh) позволяет избежать этих узких мест и обеспечивает почти линейную масштабируемость для значительно большего числа процессоров, но в ущерб программируемости. С этим типом архитектуры остаются серьезные задачи программирования, поскольку она требует двух различных режимов программирования: один для самих процессоров и один для межсоединений между ними. Единый язык программирования должен быть способен не только разделять нагрузку, но и учитывать локальность памяти, которая критична в архитектуре на основе сети. IBM предлагала компьютерные системы с двумя процессорами на базе System/360 Model 65 и тесно связанных моделей 67 и 67–2. Операционными системами, работавшими на этих машинах, были OS/360 M65MP и TSS/360. Другое программное обеспечение, разработанное в университетах, в частности, Michigan Terminal System (MTS), использовало оба процессора. Оба процессора могли получать доступ к каналам данных и инициировать ввод/вывод. В OS/360 M65MP периферийные устройства обычно могли быть подключены к любому процессору, поскольку ядро операционной системы работало на обоих процессорах (хотя и с "большой блокировкой" вокруг обработчика ввода/вывода). Супервизор MTS (UMMPS) имеет возможность работать на обоих процессорах IBM System/360 модели 67–2. Блокировки супервизора были небольшими и использовались для защиты отдельных общих структур данных, к которым можно было одновременно обращаться с любого процессора. Другие мэйнфреймы, поддерживавшие SMP, включали UNIVAC 1108 II, выпущенный в 1965 году и поддерживавший до трех процессоров, а также GE 635 и GE 645, хотя GECOS на многопроцессорных системах GE 635 работал в асимметричном режиме, в отличие от Multics на многопроцессорных системах GE 645, который работал в симметричном режиме. Начиная с версии 7.0 (1972), операционная система TOPS 10 от Digital Equipment Corporation реализовала функцию SMP, а первой системой, работавшей с SMP, была система DECSystem 1077 с двумя процессорами KI10. Позднее система KL10 могла объединять до 8 процессоров в режиме SMP. В отличие от этого, первая многопроцессорная система VAX DEC, VAX 11/782, была асимметричной, но более поздние многопроцессорные системы VAX были SMP. Ранние коммерческие реализации Unix SMP включали Sequent Computer Systems Balance 8000 (выпущен в 1984 году) и Balance 21000 (выпущен в 1986 году). Обе модели были основаны на 10 МГц процессорах National Semiconductor NS32032, каждый из которых имел небольшой кэш с прямой записью, подключенный к общей памяти для формирования системы с общей памятью. Еще одной ранней коммерческой реализацией Unix SMP была система NUMA Honeywell Information Systems Italy XPS 100, разработанная Дэном Гиеланом из VAST Corporation в 1985 году. Ее конструкция поддерживала до 14 процессоров, но из-за электрических ограничений самой продаваемой версией была система с двумя процессорами. Операционная система была получена и портирована VAST Corporation из кода AT&T 3B20 Unix SysVr3, используемого внутри AT&T. Ранее существовали некоммерческие порты UNIX для многопроцессорной обработки, включая порт под названием MUNIX, созданный в Военно-морской аспирантуре в 1975 году.

Применение

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

Преимущества/недостатки

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

Программирование

Системы с однопроцессорной архитектурой и SMP требуют различных методов программирования для достижения максимальной производительности. Программы, работающие на SMP-системах, могут демонстрировать повышение производительности, даже если они были написаны для однопроцессорных систем. Это происходит потому, что аппаратные прерывания обычно приостанавливают выполнение программы, а ядро, обрабатывающее эти прерывания, может выполняться на свободном процессоре. В большинстве приложений (например, в играх) эффект проявляется не столько в увеличении производительности, сколько в более плавной работе программы. Некоторые приложения, особенно средства разработки программного обеспечения и некоторые проекты распределенных вычислений, выполняются быстрее во столько раз, в сколько примерно равно количество дополнительных процессоров. (Компиляторы сами по себе являются однопоточными, но при сборке программного проекта, состоящего из нескольких модулей, если каждый модуль обрабатывается независимо, это создает ситуацию с тривиальным параллелизмом во всем проекте, позволяя почти линейно масштабировать время компиляции. Проекты распределенных вычислений изначально спроектированы с учетом параллельности.) Системные программисты должны обеспечить поддержку SMP в операционной системе, иначе дополнительные процессоры будут простаивать, и система будет функционировать как однопроцессорная. Системы SMP также могут усложнить работу с наборами инструкций. Однородные процессорные системы обычно требуют дополнительных регистров для "специальных инструкций", таких как SIMD (MMX, SSE и т. д.), в то время как неоднородные системы могут использовать различные типы аппаратного обеспечения для разных инструкций и задач.

Выступление

Когда одновременно выполняется более одной программы, система SMP демонстрирует значительно более высокую производительность, чем однопроцессорная система, поскольку различные программы могут выполняться на разных процессорах одновременно. В отличие от этого, асимметричная мультипроцессорность (AMP) обычно позволяет только одному процессору выполнять программу или задачу в каждый момент времени. Например, AMP может использоваться для назначения конкретных задач процессорам в зависимости от приоритета и важности их завершения. AMP была разработана раньше SMP в плане обработки нескольких процессоров, что объясняет отсутствие повышения производительности, как в приведенном примере. В ситуациях, когда среда SMP обрабатывает большое количество задач, администраторы часто сталкиваются с потерей эффективности аппаратных ресурсов. Для планирования задач и других функций компьютера были разработаны программные средства, позволяющие достичь максимальной загрузки процессора. Качественное программное обеспечение может добиться этого максимума, планируя работу каждого процессора отдельно, а также интегрируя несколько SMP-машин и кластеров. Доступ к оперативной памяти осуществляется последовательно, и это, наряду с проблемами обеспечения когерентности кэша, приводит к тому, что производительность незначительно отстает от увеличения количества процессоров в системе.

Альтернативы

SMP использует единую общую системную шину, представляющую собой один из самых ранних стилей архитектур многопроцессорных машин, обычно применяемый для создания небольших компьютеров с количеством процессоров до 8. В более крупных компьютерных системах могут использоваться современные архитектуры, такие как NUMA (Non Uniform Memory Access), которая выделяет различные банки памяти для разных процессоров. В архитектуре NUMA процессоры могут быстро обращаться к локальной памяти и медленнее – к удаленной. Это может значительно повысить пропускную способность памяти, если данные локализованы в пределах конкретных процессов (и, следовательно, процессоров). Однако NUMA увеличивает стоимость перемещения данных между процессорами, например, при балансировке нагрузки. Преимущества NUMA проявляются в основном для определенных типов рабочих нагрузок, особенно на серверах, где данные часто тесно связаны с конкретными задачами или пользователями. Наконец, существует кластерная мультипроцессорность (например, Beowulf), в которой не вся память доступна всем процессорам. Методы кластеризации широко используются для создания очень больших суперкомпьютеров.