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

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Мультипроцессорные системы»)
Перейти к навигации Перейти к поиску

Мультипроцессор (от англ. 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.

Примеры SMP/UMA-систем в 1998 году[3]
Система Процессор Максимум процессоров
SGI Power Challenge MIPS R10000 36
DEC AlphaServer 8400 Alpha 21164 14
Sun E6000 UltraSPARC II 30
Sun E10000 UltraSPARC II 64
HP/Convex Exemplar PA-8000 16
Cray T90 Cray Vector 32

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

Примеры ccNUMA-систем в 1998 году[4]
Система Процессор Процессоров на узел Максимум процессоров
Data General AV-20000 Pentium 4 32
Sequent NUMA-Q 2000 Pentium 4 32
SGI Origin 2000 MIPS R10000 2 128
HP Exemplar X-Class PA-8000 16 256
HP 9000 V-Class

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

Примеры nccNUMA-систем в 1998 году[5]
Система Процессор Процессоров на узел Максимум процессоров
Cray T3E Alpha 21164 2 2048
BBN TC-2000 Motorola MC88100 1 256
BBN TC-2000 Motorola 604 2 512

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

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

Литература

[править | править код]
  • Charles Severance, Kevin Dowd. High Performance Computing (RISC Architectures, Optimization & Benchmarks), 2nd Edition. — O'Reilly Media, 1998. — 466 p. — ISBN 156592312X. (англ.)
  • Современные операционные системы (пер. с англ.), Эндрю С. Таненбаум. Глава 8.1 Мультипроцессоры (англ.)

Примечания

[править | править код]
  1. "1930–35; multi- + process + -ing 1" — Dictionary.com Unabridged: "multiprocessor Архивная копия от 26 декабря 2015 на Wayback Machine"
  2. MultiProcessor Specification. Дата обращения: 17 октября 2013. Архивировано 9 января 2017 года.
  3. Severance_Dowd, 1998, p. 260.
  4. Severance_Dowd, 1998, p. 263.
  5. Severance_Dowd, 1998, p. 264.