Мультипроцессор

Мультипроцессор (от ) — это подкласс многопроцессорных компьютерных систем, где есть несколько процессоров и одно адресное пространство, видимое для всех процессоров. В таксономии Флинна мультипроцессоры относятся к классу SM-MIMD-машин. Мультипроцессор запускает одну копию ОС с одним набором таблиц, в том числе тех, которые следят, какие страницы памяти свободны.

Классификация 
По ролям, которые играют процессоры в мультипроцессорной системе, различают: симметричные мультипроцессоры (SMP) - все процессоры играют одинаковую роль и имеют одинаковый доступ к памяти и периферии, и асимметричные мультипроцессоры (AMP) - процессоры играют разные роли или по-разному обращаются к периферийным устройствам. Технология AMP была лишь переходной в 60-х годах до того момента, когда была отработана технология SMP.

По способу адресации памяти различают несколько типов мультипроцессоров, среди которых: UMA (Uniform Memory Access), NUMA (Non Uniform Memory Access) и COMA (Cache Only Memory Access).

Помимо этого мультипроцессоры могут быть гомогенного типа, когда все процессоры в системе одинаковы, или гетерогенного типа - когда процессоры в системе разного типа.

Программирование 
В программировании мультипроцессоров можно использовать две модели программирования: многопоточность, где на каждом процессоре запускается поток исполнения, и они обмениваются друг с другом данными через общие переменные в общей памяти, либо (более сложный) message passing, когда на каждом процессоре запускается отдельный процесс, и они обмениваются данными друг с другом путём обмена сообщениями. Многопоточное программирование используется либо явно (в компилируемых языках программирования с помощью системного API (например в C/C++ с помощью POSIX Threads, а также с помощью boost::thread или std::thread в C++, начиная со стандарта C++11), в интерпретируемых языках (Java и C#) с помощью конструкций языка), либо неявно (декларативно с помощью директив компилятора (OpenMP) или автоматически самим компилятором (High Performance Fortran)).

История 
Мультипроцессорные машины (SMP/UMA) стали предлагаться на рынке в начале в конце 1980-х — начале 1990-х годов, сначала как минисуперкомпьютеры (например, продукция компаний Alliant (англ.), Convex, Sequent, Encore (англ.) и Synapse), затем как серверы обработки данных, и быстро приобрели популярность на рынке серверного оборудования. Первыми мультипроцессорами с архитектурой x86 на базе процессоров Intel 80386 и Intel 486 стали серверы Compaq SystemPro, поступившие на рынок в конце 1989 — в начале 1990 года. Рост предложений на рынке мультипроцессороных x86-серверов привел компанию Intel к созданию стандарта MultiProcessor Specification, который стал на долгие годы стандартом де-факто для SMP-машин c архитектурой x86.

Первыми мультипроцессорами ccNUMA-типа были компьютер KSR1 компании Kendall Square Research и Denelcor HEP компании Denelcor в середине 1980-х годов.

Были созданы также мультипроцессоры и без когерентности кэша (nccNUMA):

		
Развитие миниатюризации в вычислительной электронике позволило размещать несколько процессоров в одном корпусе или на одном кристале (англ. chip-level multiprocessing, CMP), создавая мульти-ядерные процессоры. Это позволяло повышать производительность процессоров путем простого увеличения количества простых по дизайну вычислительных ядер, вместо традиционных попыток повышения тактовой частоты или усложнения вычислительного конвейера одноядерного процессора. При этом многоядерные процессоры более эффективно используют память, работают с многопоточными приложениями, тратят мало электроэнергии и не рассеивают много мощности, что идельно подходит для масштабирования дата-центров.

Начиная примерно с 2005 года все процессоры для потребительского рынка вычислительной техники выпускаются в многоядерном варианте, то есть являются по сути миниатюрными мультипроцессорами (точнее SMP-машинами с UMA-доступом к памяти, с некоторыми оговорками). Дальнейшее развитие этого направления привело к появлению многоядерных мультипроцессоров — систем, где присутствует несколько процессоров, а эти процессоры, в свою очередь, содержат по нескольку ядер. Наиболее распространенный вариант серверов в дата-центрах на 2016 год - сервер с двумя 8-ядерными процессорами класса Intel Xeon, Oracle SPARC или IBM POWER, которые при этом еще и аппаратно поддерживают одновременное исполнение нескольких потоков.

См. также 
 Многопроцессорность
 Мультикомпьютер

Литература 
 
 Современные операционные системы (пер. с англ.), Эндрю С. Таненбаум. Глава 8.1 Мультипроцессоры (англ.)

Примечания

Ссылки 
 multiprocessing -  Encyclopædia Britannica, Inc.

Параллельные вычислительные системы