Система команд
- 1 year ago
- 0
- 0
Параллелизм на уровне команд ( англ. Instruction-level parallelism — ILP ) является мерой того, какое множество операций в компьютерной программе может выполняться одновременно. Потенциальное совмещение выполнения команд называется « параллелизмом на уровне команд ».
Есть два подхода к выявлению параллелизма ( parallelism extraction ) на уровне команд:
Уровень аппаратного обеспечения осуществляет динамический параллелизм, тогда как уровень программного обеспечения реализует статический параллелизм. Современные высокопроизводительные процессоры x86 ( AMD Ryzen , Intel Core ) работают на динамической последовательности параллельного выполнения ( Внеочередное исполнение команд ). Статический параллелизм применялся в процессорах Itanium (однако в Itanium 2 применялся гибридный подход).
Рассмотрим следующую программу:
Операция 3 зависит от результатов операций 1 и 2, поэтому она не может быть вычислена, пока не будут завершены 1 и 2. Однако операции 1 и 2 не зависят от других операций, поэтому они могут быть вычислены одновременно. Если предположить, что каждая операция может быть завершена за одну единицу времени, то эти три инструкции могут быть завершены в общей сложности за две единицы времени, обеспечивая параллелизм равный 3/2.
Цель разработчиков компилятора и процессора заключается в выявлении параллелизма и получении от него максимального выигрыша. Обычные программы, как правило, написаны под последовательную модель исполнения, где команды выполняются одна за другой в порядке, установленном программистом. ILP позволяет компилятору и/или процессору распараллеливать выполнение нескольких инструкций или даже изменять порядок их выполнения.
Сколько ILP присутствует в программе сильно зависит от области её применения. В некоторых областях, таких как компьютерная графика и научные вычисления, число может быть очень большим. Тем не менее такие задачи как криптография могут демонстрировать гораздо меньше параллелизма.
Аппаратные методы выявления и использования параллелизма:
Потоковые архитектуры представляют собой другой класс архитектур, где ILP явно указаны, см., например, архитектуру TRIPS.
Ранние реализации ILP в таких мейнфреймах , как IBM System/360 Model 91 , использовали методы ILP, чтобы преодолеть ограничения, налагаемые относительно небольшим регистровым файлом .
В микропроцессорах различные формы параллелизма на уровне инструкций стали применяться с конца 1980-х. В качестве примера первых суперскалярных процессоров можно привести Intel 960CA (1989 год ), (1990 год), DEC Alpha 21064 (1992 год) . Внеочередное исполнение команд и переименование регистров в микропроцессорах впервые было реализовано в IBM POWER 1 (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, что позволило добиться максимальных частот, но для обычного кода (не оптимизированного специально для Pentium 4) снизило на столько, что эти процессоры проигрывали в производительности процессорам Athlon 64 с существенно меньшей тактовой частотой.
К концу 2005 года стало ясно, что все эти способы и методы начали себя исчерпывать. Закон масштабирования Деннарда перестал работать. При неизменных темпах увеличения количества транзисторов производительность самих процессоров повышалась незначительно, но при этом росло энергопотребление процессоров и их тепловыделение , приблизившись к ограничениям недорогих систем теплоотвода ( power ceiling , power wall ).
С конца 2005 года рост тактовых частот и однопоточной производительности значительно замедлились и отрасль производства микропроцессоров начала движение в сторону использования других уровней параллелизма , а именно и задач, реализованого в многопроцессорности , многоядерности и аппаратной многопоточности . Это отразилось в свою очередь на подходах к программированию .