Современные высокопроизводительные компьютеры
Метод Снижает
Разворачивание циклов Приостановки по управлению
Базовое планирование конвейера Приостановки 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]; Каждая итерация цикла может перекрываться с любой другой итерацией, хотя внутри каждой итерации цикла практическая возможность перекрытия небольшая. Имеется несколько методов для превращения такого параллелизма уровня цикла в параллелизм уровня команд. Эти методы основаны главным образом на разворачивании цикла либо статически, используя компилятор, либо динамически с помощью аппаратуры. Ниже в этом разделе мы рассмотрим подробный пример разворачивания цикла. Важным альтернативным методом использования параллелизма уровня команд является использование векторных команд. По существу векторная команда оперирует с последовательностью элементов данных. Например, приведенная выше последовательность на типичной векторной машине может быть выполнена с помощью четырех команд: двух команд загрузки векторов x и y из памяти, одной команды сложения двух векторов и одной команды записи вектора-результата.
|