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

Мультипроцессор (от англ. 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 ChallengeMIPS R1000036
DEC AlphaServer 8400Alpha 2116414
Sun E6000UltraSPARC II30
Sun E10000UltraSPARC II64
HP/Convex ExemplarPA-800016
Cray T90Cray Vector32

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

Примеры ccNUMA-систем в 1998 году[4]
СистемаПроцессорПроцессоров на узелМаксимум процессоров
Data General AV-20000Pentium432
Sequent NUMA-Q 2000Pentium432
SGI Origin 2000MIPS R100002128
HP Exemplar X-ClassPA-800016256
HP 9000 V-Class

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

Примеры nccNUMA-систем в 1998 году[5]
СистемаПроцессорПроцессоров на узелМаксимум процессоров
Cray T3EAlpha 2116422048
BBN TC-2000Motorola MC881001256
BBN TC-2000Motorola 6042512

Развитие миниатюризации в вычислительной электронике позволило размещать несколько процессоров в одном корпусе или на одном кристале (англ. 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"
  2. MultiProcessor Specification
  3. Severance_Dowd, 1998, p. 260.
  4. Severance_Dowd, 1998, p. 263.
  5. Severance_Dowd, 1998, p. 264.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.