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


Мультипроцессор (от англ. multiprocessor, multiprocessing[1]) — это подкласс многопроцессорных компьютерных систем, где есть несколько процессоров и одно адресное пространство, видимое для всех процессоров. В таксономии Флинна мультипроцессоры относятся к классу 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[2], который стал на долгие годы стандартом де-факто для SMP-машин c архитектурой x86.