Введение
Использование двух или более центральных процессоров (ЦП) в одной компьютерной системе
Многопроцессорность – это использование двух или более центральных процессоров (ЦП) в одной компьютерной системе. Учебник 2009 года дает аналогичное определение многопроцессорной системы, но отмечает, что процессоры могут совместно использовать "часть или всю память системы и средства ввода-вывода"; также приводится термин "тесно связанная система" как синоним. На уровне операционной системы многопроцессорность иногда используется для обозначения одновременного выполнения нескольких процессов в системе, когда каждый процесс работает на отдельном ЦП или ядре, в отличие от выполнения одного процесса в любой момент времени. При таком определении многопроцессорность иногда противопоставляется многозадачности, которая может использовать только один процессор, но переключать его между задачами по временным интервалам (то есть система с разделением времени). Однако многопроцессорность подразумевает истинное параллельное выполнение нескольких процессов с использованием более чем одного процессора. В остальной части данной статьи рассматривается многопроцессорность исключительно в этом аппаратном смысле. В таксономии Флинна многопроцессоры, как определено выше, являются машинами типа MIMD. Поскольку термин "многопроцессор" обычно относится к тесно связанным системам, в которых все процессоры используют общую память, многопроцессоры не охватывают весь класс машин MIMD, который также включает в себя мультикомпьютерные системы с передачей сообщений.
Симметрия процессора
В многопроцессорной системе все процессоры могут быть равноправными, либо некоторые из них могут быть зарезервированы для специальных задач. Сочетание аппаратных и программных решений при проектировании операционной системы определяет симметричность (или ее отсутствие) в конкретной системе. Например, аппаратные или программные требования могут предписывать, чтобы только один процессор обрабатывал все аппаратные прерывания, в то время как вся остальная нагрузка в системе может быть равномерно распределена между процессорами; или выполнение кода ядра может быть ограничено только одним процессором, а код пользовательского режима может выполняться на любой комбинации процессоров. Многопроцессорные системы часто проще в проектировании при наличии таких ограничений, но, как правило, они менее эффективны, чем системы, в которых используются все процессоры. Системы, которые рассматривают все процессоры как равноправные, называются системами симметричной мультипроцессорности (SMP). В системах, где процессоры не равноправны, системные ресурсы могут быть разделены различными способами, включая асимметричную мультипроцессорность (ASMP), мультипроцессорность с неравномерным доступом к памяти (NUMA) и кластерную мультипроцессорность.
Система многопроцессоров "мастер/слев"
В многопроцессорной системе "мастер/ведомый" центральный процессор (CPU) управляет компьютером, а ведомый(ые) CPU выполняет(ют) назначенные задачи. Процессоры могут существенно различаться по скорости и архитектуре. Некоторые (или все) процессоры могут использовать общую шину, каждый также может иметь собственную шину (для частных ресурсов), либо они могут быть изолированы, за исключением общего канала связи. Аналогично, процессоры могут совместно использовать общую оперативную память и/или иметь собственную оперативную память, недоступную для других процессоров. Роли мастера и ведомого могут меняться между процессорами. Два ранних примера многопроцессорных систем "мастер/ведомый" на основе мэйнфреймов – Bull Gamma 60 и Burroughs B5000. Ранним примером многопроцессорной системы микропроцессоров с архитектурой "мастер/ведомый" является настольный компьютер Tandy/Radio Shack TRS 80 Model 16, выпущенный в феврале 1982 года и работавший под управлением многопользовательской/многозадачной операционной системы Xenix, версии UNIX от Microsoft (под названием TRS XENIX). Model 16 оснащена двумя микропроцессорами: 8-битным процессором Zilog Z80 с тактовой частотой 4 МГц и 16-битным процессором Motorola 68000 с тактовой частотой 6 МГц. При загрузке системы Z80 выступает в роли мастера, а процесс загрузки Xenix инициализирует ведомый 68000, после чего управление передается 68000, и процессоры меняются ролями: Z80 становится ведомым процессором, ответственным за все операции ввода-вывода, включая работу с диском, связь, принтером и сетью, а также клавиатурой и встроенным монитором, в то время как операционная система и приложения работают на CPU 68000. Z80 может использоваться для выполнения других задач. Более ранняя модель TRS 80 Model II, выпущенная в 1979 году, также может рассматриваться как многопроцессорная система, поскольку она включала в себя как процессор Z80, так и микроконтроллер Intel 8021, расположенный в клавиатуре. 8021 сделала Model II первой настольной компьютерной системой с отдельной, съемной, легкой клавиатурой, подключенной одним тонким гибким кабелем, и, вероятно, первой клавиатурой, использующей выделенный микроконтроллер – обе эти особенности впоследствии были скопированы Apple и IBM спустя несколько лет.
Инструкции и потоки данных
В многопроцессорной обработке процессоры могут использоваться для выполнения одной последовательности инструкций в нескольких контекстах (одна инструкция, несколько данных или SIMD, часто используемых в векторной обработке), нескольких последовательностей инструкций в одном контексте (много инструкций, один поток данных или MISD, используемых для обеспечения отказоустойчивости и иногда применяемых для описания конвейерных процессоров или гиперпоточности), или нескольких последовательностей инструкций в нескольких контекстах (много инструкций, много потоков данных или MIMD).
Тесно связанная многопроцессорная система
Тесно связанные мультипроцессорные системы содержат несколько процессоров, соединенных на уровне шины. Эти процессоры могут иметь доступ к центральной общей памяти (SMP или UMA) или участвовать в иерархии памяти, включающей как локальную, так и общую память (SM)(NUMA). IBM p690 Regatta является примером высокопроизводительной SMP-системы. Процессоры Intel Xeon доминировали на рынке мультипроцессоров для бизнес-ПК и были единственным основным вариантом x86 до выхода линейки процессоров AMD Opteron в 2004 году. Оба семейства процессоров имели собственный встроенный кэш, но обеспечивали доступ к общей памяти: процессоры Xeon – через общий канал, а процессоры Opteron – по независимым путям к системной оперативной памяти. Чип-мультипроцессоры, также известные как многоядерные вычисления, подразумевают размещение нескольких процессоров на одном чипе и могут рассматриваться как наиболее развитая форма тесно связанной мультипроцессорности. Мейнфреймы с несколькими процессорами часто являются тесно связанными системами.
Система с неразъединенным мультипроцессором
Свободно связанные мультипроцессорные системы (часто называемые кластерами) основаны на нескольких независимых компьютеров с относительно небольшим количеством процессоров, соединенных высокоскоростной системой связи (распространенным вариантом является гигабитный Ethernet). Кластер Linux Beowulf – пример свободно связанной системы. Тесно связанные системы демонстрируют более высокую производительность и имеют меньшие физические размеры, чем свободно связанные, однако исторически требовали больших первоначальных вложений и могли быстро терять в стоимости; узлы в свободно связанной системе обычно представляют собой недорогие компьютеры, доступные на рынке, и могут быть использованы повторно как самостоятельные машины после вывода из состава кластера. Энергопотребление также является важным фактором. Тесно связанные системы, как правило, гораздо более энергоэффективны, чем кластеры. Это объясняется тем, что значительное снижение энергопотребления достигается за счет проектирования компонентов для совместной работы с самого начала в тесно связанных системах, в то время как в свободно связанных системах используются компоненты, которые изначально не предназначались для работы именно в таких системах. Свободно связанные системы позволяют запускать различные операционные системы или их версии на разных узлах.