- Параллелизм на уровне инструкций (ILP, Instruction Level Parallelism) – скрытый от пользователя параллелизм, нет необходимости в специальном параллельном программировании со стороны пользователя, нет проблем с переносимостью кода с одного компьютера на другой.
- Суперскалярные процессоры – способны за один такт вызвать несколько команд. Широко используется конвейерное выполнение инструкций. Количество выполняемых команд в конкретный момент времени зависит от конструкции процессора и от текущей ситуации.
- Предполагается, что программа не содержит никакой информации о возможности ее распараллеливания. Задача обнаружения и реализации параллелизма возлагается на аппаратуру, которая и строит соответствующую последовательность команд.
- Максимально возможное количество вызываемых команд – обычно от двух до шести – зависит от аппаратной реализации. Если для выполнения команды необходим недоступный в данный момент функциональный блок или еще не полученный результат другой команды – такая команда не будет вызвана к выполнению.
- Несколько ФУ, параллельно работающих в процессоре, исполняют по мере возможности инструкции, находящиеся в специальном буфере, куда они поступили после декодирования. Распараллеливание происходит на уровне команд, совмещая выполнение двух или более арифметических операций. Чтобы эффективно применять такую архитектуру, кэш 1го уровня должен обладать высокими пропускной способностью и емкостью.
Схема суперскалярного процессора с пятью функциональными блоками. - Схема пятиступенчатого конвейера выполнения команд.
- Возможны сдвоенные конвейеры
Параллелизм на уровне инструкций – VLIW - Very Large Instruction World (VLIW) – параллелизм реализуется за счет сверхдлинного командного слова.
- Команда, выдаваемая компьютеру на каждом такте, содержит сразу несколько операций, которые выполнятся параллельно. Команда состоит из набора полей, каждое отвечает за свою операцию (работа с памятью, активизация ФУ, операции с регистрами и др). Если какая-то часть процессора на данном этапе не задействована, соответствующее поле команды не заполняется.
- Компилятор программы выявляет параллелизм и сообщает аппаратуре, какие операции не зависят друг от друга. Формируется точный план, как процессор будет выполнять программу (последовательность выполнения операций, подключение ФУ, какие операнды в каких регистрах…) и генерируется последовательность VLIW-инструкций.
- Поскольку не все команды в полях VLIW-инструкций могут в нужный момент обратиться к нужным функциональным устройствам – в современных архитектурах предусмотрен механизм «связок» нескольких VLIW-инструкций, которые могут быть выполнены целиком. Задача по подготовке таких связок решается компилятором.
Do'stlaringiz bilan baham: |