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