Параллелизм на уровне команд (англ. Instruction-level parallelism — ILP) является мерой того, какое множество операций в компьютерной программе может выполняться одновременно. Потенциальное совмещение выполнения команд называется «параллелизмом на уровне команд».
Есть два подхода к выявлению параллелизма (parallelism extraction) на уровне команд:
Уровень аппаратного обеспечения работает на динамическом параллелизме, тогда как уровень программного обеспечения работает на статическом параллелизме. Современные высокопроизводительные процессоры x86 (Intel Pentium 4, Intel Core) работают на динамической последовательности параллельного выполнения (Внеочередное исполнение команд). Статический параллелизм применялся в процессорах Itanium (однако в Itanium 2 применяется гибридный подход).
Рассмотрим следующую программу:
Операция 3 зависит от результатов 1 и 2, поэтому она не может быть рассчитана, пока обе из них не будут завершены. Однако операции 1 и 2 не зависят от любой другой операции, так что они могут быть вычислены одновременно. Если предположить, что каждая операция может быть завершена в одну единицу времени, то эти три инструкции могут быть завершены в общей сложности за две единицы времени, давая ILP 3/2.
Цель разработчиков компилятора и процессора заключается в выявлении и получении от ILP максимально возможной выгоды. Обычные программы, как правило, написаны под последовательную модель исполнения, где команды выполняются одна за другой в порядке, установленном программистом. ILP позволяет компилятору и/или процессору перекрывать выполнение нескольких инструкций или даже изменить порядок, в котором команды выполняются.
Сколько 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].
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .