Симметричная многопроцессорная обработка или многопроцессорная обработка с общей памятью [1] ( SMP ) включает в себя многопроцессорную компьютерную аппаратную и программную архитектуру, где два или более идентичных процессора подключены к одной общей основной памяти , имеют полный доступ ко всем устройствам ввода и вывода и управляются одним экземпляром операционной системы, который обрабатывает все процессоры одинаково, не резервируя ни один для специальных целей. Большинство многопроцессорных систем сегодня используют архитектуру SMP. В случае многоядерных процессоров архитектура SMP применяется к ядрам, рассматривая их как отдельные процессоры.
Профессор Джон Д. Кубятович традиционно считает, что SMP-системы содержат процессоры без кэшей. [2] Каллер и Пал-Сингх в своей книге 1998 года «Архитектура параллельных компьютеров: аппаратно-программный подход» упоминают: «Термин SMP широко используется, но вызывает некоторую путаницу. [...] Более точное описание того, что подразумевается под SMP, — это многопроцессорная система с общей памятью, где стоимость доступа к ячейке памяти одинакова для всех процессоров; то есть она имеет равномерную стоимость доступа, когда фактический доступ осуществляется к памяти. Если ячейка кэширована, доступ будет быстрее, но время доступа к кэшу и время доступа к памяти одинаковы для всех процессоров». [3]
Системы SMP представляют собой тесно связанные многопроцессорные системы с пулом однородных процессоров, работающих независимо друг от друга. Каждый процессор, выполняющий разные программы и работающий с разными наборами данных, имеет возможность совместного использования общих ресурсов (памяти, устройства ввода-вывода, системы прерываний и т. д.), которые соединены с помощью системной шины или кроссбара .
Системы SMP имеют централизованную общую память, называемую основной памятью (MM), работающую под управлением одной операционной системы с двумя или более однородными процессорами. Обычно каждый процессор имеет связанную с ним частную высокоскоростную память, известную как кэш-память (или кэш), для ускорения доступа к данным основной памяти и снижения трафика системной шины.
Процессоры могут быть соединены между собой с помощью шин, коммутаторов crossbar или ячеистых сетей на кристалле. Узким местом в масштабируемости SMP с использованием шин или коммутаторов crossbar является пропускная способность и энергопотребление межсоединения между различными процессорами, памятью и дисковыми массивами. Ячеистые архитектуры избегают этих узких мест и обеспечивают почти линейную масштабируемость до гораздо большего количества процессоров в ущерб программируемости:
Серьёзные проблемы программирования остаются с этим типом архитектуры, поскольку он требует двух различных режимов программирования: один для самих ЦП и один для взаимосвязи между ЦП. Единый язык программирования должен быть способен не только разделять рабочую нагрузку, но и понимать локальность памяти, что является серьёзным в архитектуре на основе сетки. [4]
Системы SMP позволяют любому процессору работать над любой задачей, независимо от того, где в памяти находятся данные для этой задачи, при условии, что каждая задача в системе не выполняется на двух или более процессорах одновременно. При надлежащей поддержке операционной системы системы SMP могут легко перемещать задачи между процессорами для эффективной балансировки рабочей нагрузки.
Самой ранней производственной системой с несколькими идентичными процессорами была Burroughs B5000 , которая была функциональна примерно в 1961 году. Однако во время выполнения это было асимметрично , с одним процессором, ограниченным прикладными программами, в то время как другой процессор в основном обрабатывал операционную систему и аппаратные прерывания. Burroughs D825 впервые реализовал SMP в 1962 году. [5] [6]
IBM предложила двухпроцессорные компьютерные системы на основе System/360 Model 65 и тесно связанной Model 67 [7] и 67–2. [8] Операционные системы, которые работали на этих машинах, были OS/360 M65MP [9] и TSS/360 . Другое программное обеспечение, разработанное в университетах, в частности Michigan Terminal System (MTS), использовало оба процессора. Оба процессора могли получать доступ к каналам данных и инициировать ввод-вывод. В OS/360 M65MP периферийные устройства обычно могли быть подключены к любому процессору, поскольку ядро операционной системы работало на обоих процессорах (хотя с «большой блокировкой» вокруг обработчика ввода-вывода). [10] Супервизор MTS (UMMPS) может работать на обоих процессорах IBM System/360 model 67–2. Блокировки супервизора были небольшими и использовались для защиты отдельных общих структур данных, к которым можно было получить доступ одновременно с любого процессора. [11]
Другие мэйнфреймы, которые поддерживали SMP, включали UNIVAC 1108 II , выпущенный в 1965 году, который поддерживал до трех процессоров, а также GE-635 и GE-645 , [12] [13] хотя GECOS на многопроцессорных системах GE-635 работал в асимметричном режиме «ведущий-ведомый», в отличие от Multics на многопроцессорных системах GE-645, которые работали симметрично. [14]
Начиная с версии 7.0 (1972), операционная система TOPS-10 корпорации Digital Equipment Corporation реализовала функцию SMP, самой ранней системой, работающей с SMP, была двухпроцессорная система DECSystem 1077 KI10. [15] Более поздняя система KL10 могла объединять до 8 ЦП в режиме SMP. Напротив, первая многопроцессорная система VAX компании DEC , VAX-11/782, была асимметричной, [16] но более поздние многопроцессорные системы VAX были SMP. [17]
Ранние коммерческие реализации Unix SMP включали Sequent Computer Systems Balance 8000 (выпущен в 1984 году) и Balance 21000 (выпущен в 1986 году). [18] Обе модели были основаны на процессорах National Semiconductor NS32032 с частотой 10 МГц , каждый из которых имел небольшой кэш сквозной записи, подключенный к общей памяти для формирования системы общей памяти . Еще одной ранней коммерческой реализацией Unix SMP была Honeywell Information Systems Italy XPS-100 на базе NUMA, разработанная Дэном Гиланом из VAST Corporation в 1985 году. Ее конструкция поддерживала до 14 процессоров, но из-за электрических ограничений самой большой продаваемой версией была двухпроцессорная система. Операционная система была получена и портирована VAST Corporation из кода AT&T 3B20 Unix SysVr3, используемого внутри AT&T.
Существовали и более ранние некоммерческие многопроцессорные порты UNIX, включая порт под названием MUNIX, созданный в Военно-морской аспирантуре в 1975 году. [19]
Системы с разделением времени и серверные системы часто могут использовать SMP без внесения изменений в приложения, поскольку в них может одновременно работать несколько процессов , а система с более чем одним запущенным процессом может запускать разные процессы на разных процессорах.
На персональных компьютерах SMP менее полезен для приложений, которые не были изменены. Если система редко запускает более одного процесса одновременно, SMP полезен только для приложений, которые были изменены для многопоточной (многозадачной) обработки. Программируемое на заказ программное обеспечение может быть написано или изменено для использования нескольких потоков, так что оно может использовать несколько процессоров.
Многопоточные программы также могут использоваться в системах с разделением времени и серверных системах, поддерживающих многопоточность, что позволяет им эффективнее использовать несколько процессоров.
В современных системах SMP все процессоры тесно связаны внутри одного корпуса с помощью шины или коммутатора; в более ранних системах SMP один процессор занимал целый шкаф. Некоторые из компонентов, которые являются общими, — это глобальная память, диски и устройства ввода-вывода. На всех процессорах работает только одна копия ОС, и ОС должна быть спроектирована так, чтобы использовать преимущества этой архитектуры. Некоторые из основных преимуществ включают экономически эффективные способы увеличения пропускной способности. Для решения различных проблем и задач SMP применяет несколько процессоров для решения одной проблемы, известной как параллельное программирование .
Однако существуют некоторые ограничения масштабируемости SMP из-за согласованности кэша и общих объектов.
Однопроцессорные и SMP-системы требуют разных методов программирования для достижения максимальной производительности. Программы, работающие на SMP-системах, могут испытывать увеличение производительности, даже если они были написаны для однопроцессорных систем. Это происходит потому, что аппаратные прерывания обычно приостанавливают выполнение программы, в то время как ядро , которое их обрабатывает, может вместо этого выполняться на простаивающем процессоре. Эффект в большинстве приложений (например, игр) заключается не столько в увеличении производительности, сколько в том, что программа работает гораздо более плавно. Некоторые приложения, в частности, для создания программного обеспечения и некоторых проектов распределенных вычислений , работают быстрее в (почти) раз, равный количеству дополнительных процессоров. (Сами по себе компиляторы являются однопоточными, но при создании программного проекта с несколькими блоками компиляции, если каждый блок компиляции обрабатывается независимо, это создает неловко параллельную ситуацию во всем проекте с несколькими блоками компиляции, что позволяет почти линейно масштабировать время компиляции. Проекты распределенных вычислений изначально параллельны по своей сути.)
Системные программисты должны встроить поддержку SMP в операционную систему , в противном случае дополнительные процессоры останутся бездействующими, и система будет функционировать как однопроцессорная.
Системы SMP также могут привести к большей сложности в отношении наборов инструкций. Однородная процессорная система обычно требует дополнительных регистров для «специальных инструкций», таких как SIMD (MMX, SSE и т. д.), в то время как неоднородная система может реализовывать различные типы оборудования для различных инструкций/использований.
Когда одновременно выполняется более одной программы, система SMP имеет значительно лучшую производительность, чем однопроцессорная система, поскольку разные программы могут одновременно выполняться на разных ЦП. Напротив, асимметричная многопроцессорная обработка (AMP) обычно позволяет только одному процессору выполнять программу или задачу одновременно. Например, AMP можно использовать для назначения определенных задач ЦП на основе приоритета и важности выполнения задачи. AMP был создан задолго до SMP с точки зрения обработки нескольких ЦП, что объясняет недостаточную производительность на основе приведенного примера.
В случаях, когда среда SMP обрабатывает много заданий, администраторы часто сталкиваются с потерей эффективности оборудования. Разработаны программы для планирования заданий и других функций компьютера, чтобы использование процессора достигало своего максимального потенциала. Хорошие программные пакеты могут достичь этого максимального потенциала, планируя каждый ЦП отдельно, а также имея возможность интегрировать несколько машин и кластеров SMP.
Доступ к оперативной памяти осуществляется последовательно; это, а также проблемы с когерентностью кэша приводят к небольшому отставанию производительности от количества дополнительных процессоров в системе.
SMP использует единую общую системную шину , которая представляет собой один из самых ранних стилей многопроцессорной машинной архитектуры, обычно используемый для создания небольших компьютеров с числом процессоров до 8.
Более крупные компьютерные системы могут использовать более новые архитектуры, такие как NUMA (неоднородный доступ к памяти), которая выделяет разные банки памяти разным процессорам. В архитектуре NUMA процессоры могут быстро получать доступ к локальной памяти и медленнее к удаленной памяти. Это может значительно повысить пропускную способность памяти, пока данные локализованы в определенных процессах (и, следовательно, процессорах). С другой стороны, NUMA делает стоимость перемещения данных с одного процессора на другой, как при балансировке рабочей нагрузки, более дорогой. Преимущества NUMA ограничены определенными рабочими нагрузками, особенно на серверах , где данные часто тесно связаны с определенными задачами или пользователями.
Наконец, есть кластеризованная многопроцессорная обработка (такая как Beowulf ), в которой не вся память доступна всем процессорам. Методы кластеризации довольно широко используются для создания очень больших суперкомпьютеров.
Переменная симметричная многопроцессорность (vSMP) — это специфическая технология мобильного использования, инициированная NVIDIA. Эта технология включает в себя дополнительное пятое ядро в четырехъядерном устройстве, называемое ядром Companion, созданное специально для выполнения задач на более низкой частоте в режиме мобильного активного ожидания, воспроизведения видео и воспроизведения музыки.
Проект Kal-El ( Tegra 3 ), [20] запатентованный NVIDIA, был первой SoC (системой на кристалле), которая реализовала эту новую технологию vSMP. Эта технология не только снижает энергопотребление мобильных устройств в активном режиме ожидания, но и максимизирует производительность четырехъядерных процессоров во время активного использования для интенсивных мобильных приложений. В целом эта технология удовлетворяет потребность в увеличении производительности батареи во время активного и резервного использования за счет снижения энергопотребления мобильных процессоров.
В отличие от текущих архитектур SMP, ядро vSMP Companion прозрачно для ОС, что означает, что операционная система и запущенные приложения совершенно не знают об этом дополнительном ядре, но все равно могут им воспользоваться. Некоторые из преимуществ архитектуры vSMP включают в себя когерентность кэша, эффективность ОС и оптимизацию энергопотребления. Преимущества этой архитектуры описаны ниже:
Эти преимущества приводят к тому, что архитектура vSMP значительно превосходит другие архитектуры, использующие технологии асинхронного тактирования [ peacock prose ] .