Параллелизм на уровне команд

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Параллелизм на уровне команд (англ. Instruction-level parallelism - ILP) — является мерой того, какое множество операций в компьютерной программе может выполняться одновременно. Потенциальное совмещение выполнения команд называется "параллелизмом на уровне команд".

Описание[править | править вики-текст]

Есть два подхода к параллелизму на уровне команд:

Уровень аппаратного обеспечения работает на динамическом параллелизме, тогда как, уровень программного обеспечения работает на статическом параллелизме. Современные высокопроизводительные процессоры x86 (Intel Pentium 4, Intel Core) работают на динамической последовательности параллельного выполнения (Внеочередное исполнение команд). Статический параллелизм применялся в процессорах Itanium (однако в Itanium 2 применяется гибридный подход).

Рассмотрим следующую программу:

  1. e = a + b
  2. f = c + d
  3. m = e * f

Операция 3 зависит от результатов 1 и 2, поэтому она не может быть рассчитана, пока обе из них не будут завершены. Однако операции 1 и 2 не зависят от любой другой операции, так что они могут быть вычислены одновременно. Если предположить, что каждая операция может быть завершена в одну единицу времени, то эти три инструкции могут быть завершены в общей сложности за две единицы времени, давая ILP 3/2.

Цель разработчиков компилятора и процессора, заключается в выявлении и получении от ILP максимально возможной выгоды. Обычные программы, как правило, написана под последовательную модель исполнения, где команды выполняются одна за другой в порядке, установленном программистом. ILP позволяет компилятору и процессору перекрывать выполнение нескольких инструкций или даже изменить порядок, в котором команды выполняются.

Сколько ILP существует в программах - сильно зависит от области применения программы. В некоторых областях, таких как графики и научные вычисления, число может быть очень большим. Тем не менее, рабочие нагрузки, такие как криптография, могут проявлять гораздо меньше параллелизма.

Микроархитектурные методы для обеспечения ILP:

  • Вычислительный конвейер, где выполнение нескольких инструкций может частично перекрываться.
  • Суперскалярное выполнение, VLIW и тесно связанная с ними концепция микропроцессорной архитектуры с явным параллелизмом команд, в которой несколько функциональных блоков используются для выполнения нескольких команд параллельно
  • Внеочередное исполнение, где инструкции выполняются в любом порядке, который не нарушает зависимости данных. Обратите внимание, что этот метод не зависит ни от конвейера, ни от суперскаляра. Текущая реализация внеочередного исполнения динамично (то есть, в то время как программа выполняется и без всякой помощи со стороны компилятора) извлекает ILP от обычных программ. В качестве альтернативы можно извлечь этот параллелизм во время компиляции и как-то передать эту информацию к аппаратному обеспечению. Из-за сложности техники пересчета внеочередного исполнения, промышленность пересмотрела набор команд, которые явно кодируют несколько независимых операций в инструкции.
  • Переименование регистров, которое ссылается на метод, используемый, чтобы избежать ненужной сериализации операций, произведенных программой, которые налагают повторное использование регистров по этим операциям, используется для внеочередного исполнения.
  • Спекулятивное выполнение, которое позволяет выполнению полных инструкций или частей инструкций убедиться, следует ли этому выполнению состояться. Часто используемой формой спекулятивного исполнения является предположение управления потоком, где инструкции пропускают управление потоком инструкций (например, переход) и выполняются до того как определится цель потока управления инструкций. Несколько другие формы спекулятивного исполнения были предложены и используются в том числе для спекулятивного исполнения, обусловлены прогнозированием значения, прогнозирования зависимости памяти и прогнозирования латентности кэша.
  • Предсказание переходов, который используется, чтобы избежать приостановки контроля зависимостей, которые необходимо решить. Предсказатель переходов используется со спекулятивным исполнением.

Потоковые архитектуры представляют собой другой класс архитектур, где ILP явно указаны, см., например, архитектуру TRIPS.

Реализации[править | править вики-текст]

Ранние реализации ILP, в таких мейнфреймах как IBM System/360 Model 91, использовали методы ILP, чтобы преодолеть ограничения, налагаемые относительно небольшим регистровым файлом.

В микропроцессорах различные формы параллелизма на уровне инструкций стали применяться с конца 1980-х. В качестве примера первых суперскалярных процессоров можно привести Intel 960CA (1989 год[1]), IBM Power RS/6000 (1990 год), DEC Alpha 21064 (1992 год)[2]. Внеочередное исполнение команд и переименование регистров в микропроцессорах впервые было реализовано в IBM POWER1 (1990 г.).

Первым IA-32-процессором с конвейером стал Intel 80486 (1989 г.); первым суперскалярным IA-32-процессором стал Intel Pentium (1993 г); первый IA-32-процессор с внеочередным исполнением команд и переименованием регистров - Intel Pentium Pro (1995 г.),

В период с 1999 по 2005 год компании AMD и Intel вели активную конкурентную борьбу по выпуску все более и более производительных микропроцессоров для массового потребительского и серверного рынков. В процессорах, выпущенных за этот период, обеими компаниями активно совершенствовались техники эксплуатации параллелизма на уровне команд. Например, в архитектуре NetBurst компания Intel наращивала стадии вычислительного конвейера, доведя их число в Pentium 4 Prescott до 31. Обе компании повышали тактовую частоту процессоров (т.н. "гонка гигагерцев"), уменьшали техпроцесс, чтобы поместить еще больше транзисторов на подложке процессора с целью использовать их для еще большего повышения эффективности работы суперскалярных конвейеров.

К концу 2005 года стало ясно, что все эти способы и методы себя исчерпали. Закон масштабирования Деннарда перестал работать. При неизменных темпах увеличения количества транзисторов производительность самих процессоров повышалась незначительно, но при этом росло энергопотребление процессоров и их тепловыделение, приблизившись к ограничениям недорогих систем теплоотвода (power ceiling, power wall[3][4]).

С конца 2005 года рост тактовых частот и однопоточной производительности значительно замедлились[5][6][7] и отрасль производства микропроцессоров начала движение в сторону использования других уровней параллелизма, а именно параллелизма на уровне потоков и задач, реализованого в многопроцессорности, многоядерности и аппаратной многопоточности[8]. Это отразилось в свою очередь на подходах к программированию[9].

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Ron Copeland Intel Ready to Announce i960CA Microprocessor With 66 MIPS // InfoWorld. — 1989. — Т. 11, № 36. — С. 19.  (англ.)
  2. Kai Hwang, Naresh Jotwani. Advanced Computer Architecture. — second edition. — McGraw-Hill Education, 2011. — С. 152. — 723 с. — ISBN 978-0-07-070210-3.  (англ.)
  3. Christopher Mims. Why CPUs Aren't Getting Any Faster (англ.). MIT Technology review (October 12, 2010). — «power wall (the chip’s overall temperature and power consumption). .. arguably the defining limit of the power of the modern CPU.»  Проверено 3 сентября 2016.
  4. Russell Fish. Future of computers - Part 2: The Power Wall (англ.). EDN (January 06, 2012). Проверено 3 сентября 2016.
  5. DATA PROCESSING IN EXASCALE-CLASS COMPUTER SYSTEMS, Chuck Moore (AMD), The Salishan Conference on High Speed Computing (LANL / LLNL / SNL) April 27, 2011
  6. The death of CPU scaling: From one core to many — and why we’re still stuck, Joel Hruska on February 1, 2012
  7. A Look Back at Single-Threaded CPU Performance, 2012 - после 2004 г рост однопоточной производительности по SpecInt составляет около 15-20 % в год, вместо 50% в предыдущие десять лет
  8. [1] Intel Developer Forum in 2005 - Intel President Paul Otellini - "We are dedicating all of our future product development to multicore designs. We believe this is a key inflection point for the industry".
  9. Herb Sutter. The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software

Литература[править | править вики-текст]

Ссылки[править | править вики-текст]