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

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

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

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

Уровень аппаратного обеспечения работает на динамическом параллелизме, тогда как, уровень программного обеспечения работает на статическом параллелизме. Процессор Pentium работает на динамической последовательности параллельного выполнения, но Itanium процессор работает на статическом параллелизме.

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

  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 использовались для повышения производительности, несмотря на растущее несоответствие между рабочими частотами процессора и времени доступа к памяти (ранние конструкции ILP, такие как IBM System/360 Model 91 использовали методы ILP чтобы преодолеть ограничения, налагаемые относительно небольшого файл регистров). В настоящее время его потери кэша в основную память стоят несколько сотен циклов процессора. Хотя в принципе можно использовать ILP допуская даже такие задержки памяти связывающие ресурсы и расходы рассеиваемой мощности непропорционально. Кроме того, сложность и часто латентность базового оборудования структур приводит к снижению рабочей частоты и дальнейшего сокращения каких либо преимуществ. Таким образом, вышеупомянутые методы оказываются недостаточными, чтобы держать процессор от остановки данных вне кристалла. Вместо этого, отрасль движется в сторону использования более высоких уровней параллелизма, которые могут быть использованы с помощью таких методов, как многопроцессорность и многопоточность.

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