Современные высокопроизводительные компьютеры


Параллелизм на уровне выполнения - часть 2


Степень параллелизма, доступная внутри базового блока (линейной последовательности команд, переходы из вне которой разрешены только на ее вход, а переходы внутри которой разрешены только на ее выход) достаточно мала. Например, средняя частота переходов в целочисленных программах составляет около 16%. Это означает, что в среднем между двумя переходами выполняются примерно пять команд. Поскольку эти пять команд возможно взаимозависимые, то степень перекрытия, которую мы можем использовать внутри базового блока, возможно будет меньше чем пять. Чтобы получить существенное улучшение производительности, мы должны использовать параллелизм уровня команд одновременно для нескольких базовых блоков.

МетодСнижает
Разворачивание цикловПриостановки по управлению
Базовое планирование конвейераПриостановки RAW
Динамической планирование с централизованной схемой управленияПриостановки RAW
Динамическое планирование с переименованием регистровПриостановки WAR и WAW
Динамическое прогнозирование переходовПриостановки по управлению
Выдача нескольких команд в одном тактеИдеальный CPI
Анализ зависимостей компиляторомИдеальный CPI и приостановки по данным
Программная конвейеризация и планирование трассИдеальный CPI и приостановки по данным
Выполнение по предположениюВсе приостановки по данным и управлению
Динамическое устранение неоднозначности памятиПриостановки RAW, связанные с памятью

Рис. 6.1.

Самый простой и общий способ увеличения степени параллелизма, доступного на уровне команд, является использование параллелизма между итерациями цикла. Этот тип параллелизма часто называется параллелизмом уровня итеративного цикла. Ниже приведен простой пример цикла, выполняющего сложение двух 1000-элементных векторов, который является полностью параллельным:

for (i = 1; i <= 1000; i = i + 1)

x[i] = x[i] + y[i];

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

Имеется несколько методов для превращения такого параллелизма уровня цикла в параллелизм уровня команд.


Начало  Назад  Вперед



Книжный магазин