Серверы корпоративных баз данных


Аппаратные средства поддержки большой степени распараллеливания - часть 2


Проверка размещается внизу так, что на каждой итерации цикла выполняется только один переход.

J looptest

start: LW R5,0(R4)

ADDI R5,R5,#1

SW 0(R4),R5

LW R4,4(R4)

looptest: BNEZ R4,start

Развернув цикл однажды можно видеть, что разворачивание в данном случае не помогает:

J looptest

start: LW R5,0(R4)

ADDI R5,R5,#1

SW 0(R4),R5

LW R4,4(R4)

BNEZ R4,end

LW R5,0(R4)

ADDI R5,R5,#1

SW 0(R4),R5

LW R4,4(R4)

looptest: BNEZ R4,start

end:

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

  • Первая команда в итерации цикла (LW R5,0(R4)) зависит по управлению от обоих условных переходов. Таким образом, команда не может выполняться успешно (и безопасно) до тех пор, пока мы не узнаем исходы команд перехода.
  • Вторая и третья команды в итерации цикла зависят по данным от первой команды цикла.
  • Четвертая команда в каждой итерации цикла (LW R4,4(R4)) зависит по управлению от обоих переходов и антизависит от непосредственно предшествующей ей команды SW.
  • Последняя команда итерации цикла зависит от четвертой.

Вместе эти условия означают, что мы не можем совмещать выполнение никаких команд между последовательными итерациями цикла! Имеется небольшая возможность совмещения посредством переименования регистров либо аппаратными, либо программными средствами, если цикл развернут, так что вторая загрузка более не антизависит от SW и может быть перенесена выше.

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


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