Научная статья на тему 'ВЛИЯНИЕ ПРОГРАММНЫХ ПЕРЕХОДОВ И ЗАВИСИМОСТЕЙ ПО ДАННЫМ В ИСПОЛНЯЕМОМ ПРОГРАММНОМ КОДЕ НА ПРОИЗВОДИТЕЛЬНОСТЬ КОНВЕЙЕРА DSP-ЯДРА'

ВЛИЯНИЕ ПРОГРАММНЫХ ПЕРЕХОДОВ И ЗАВИСИМОСТЕЙ ПО ДАННЫМ В ИСПОЛНЯЕМОМ ПРОГРАММНОМ КОДЕ НА ПРОИЗВОДИТЕЛЬНОСТЬ КОНВЕЙЕРА DSP-ЯДРА Текст научной статьи по специальности «Математика»

CC BY
15
7
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРОИЗВОДИТЕЛЬНОСТЬ ПРОЦЕССОРА / ЗАДЕРЖКА ПРОГРАММНЫХ ПЕРЕХОДОВ / РЕДУКЦИЯ ГРАФА ЗАВИСИМОСТЕЙ ПО ДАННЫМ / ЗАВИСИМОСТЬ ПО ДАННЫМ

Аннотация научной статьи по математике, автор научной работы — Беляев Андрей Александрович

Рассмотрено влияние программных переходов и зависимостей по данным в исполняемом программном коде на производительность DSP-ядра при различной структуре и глубине его конвейера. Выведена аналитическая зависимость производительности DSP-ядра от статистических характеристик программной трассы. Предложено обобщенное правило редукции графа зависимостей по данным для программной трассы, позволяющее устранять перекрывающиеся дуги зависимостей и определять статистические характеристики трассы.The influence of the branches and data dependencies in programs on the DSP performance with different structure and depth of its pipeline has been considered. The analytical dependence of the DSP performance on the execution trace statistical characteristics has been derived. A generalized rule for trace simplifying through the data-dependency graph reduction has been proposed, which enables to remove the redundant data-dependency arcs from the graph and to make an accurate estimation for the trace statistics.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «ВЛИЯНИЕ ПРОГРАММНЫХ ПЕРЕХОДОВ И ЗАВИСИМОСТЕЙ ПО ДАННЫМ В ИСПОЛНЯЕМОМ ПРОГРАММНОМ КОДЕ НА ПРОИЗВОДИТЕЛЬНОСТЬ КОНВЕЙЕРА DSP-ЯДРА»

УДК 621.382.8

Влияние программных переходов и зависимостей по данным в исполняемом программном коде на производительность

конвейера Б8Р-ядра

А.А.Беляев ГУП НПЦ «ЭЛВИС» (г. Москва)

Рассмотрено влияние программных переходов и зависимостей по данным в исполняемом программном коде на производительность Б8Р-ядра при различной структуре и глубине его конвейера. Выведена аналитическая зависимость производительности Б8Р-ядра от статистических характеристик программной трассы. Предложено обобщенное правило редукции графа зависимостей по данным для программной трассы, позволяющее устранять перекрывающиеся дуги зависимостей и определять статистические характеристики трассы.

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

В настоящей работе влияние программных переходов и зависимостей по данным на производительность конвейера рассматривается на примере ББР-ядра ЕЬсоге-18™ платформы «Мультикор» [1]. Программный конвейер этого процессора при выполнении вычислительной операции состоит из семи фаз:

1 фаза (А): формирование адреса памяти программ;

2 фаза (Р): выборка инструкции из программной памяти;

3 фаза (О): декодирование инструкции;

4 фаза (Е): чтение данных из КБ;

5 фаза (Е1): исполнение инструкции;

6 фаза (Е2): исполнение инструкции;

7 фаза (Е3): исполнение инструкции, запись данных в ЯБ.

Любой программный конвейер может быть разделен на две части - установочную (подготовительную) и исполнительную. Первые четыре фазы данного конвейера относятся к установочной части - они предназначены для подготовки к исполнению инструкции. В течение последних трех фаз выполняется собственно вычислительная операция, конвейеризованная на три стадии. При такой организации программного конвейера выполнение инструкции программного перехода требует перезагрузки первых четырех (установочных) фаз. Работа такого конвейера при выполнении инструкции программного перехода J #А (переход по адресу #А) проиллюстрирована временной диаграммой на рис.1.

© А.А.Беляев, 2009

А.А.Беляев

_л_a_л_a_a j#A a nop a nop a nop a_a_a_д_/y_

bl Л_л_A_л_л_Л_/Lzi^ino^no^nop^_А_л_л_

_л_a_л_л_л_а л J#A a nop a nop a nopa_л_

Рис.1. Временная диаграмма работы 7-фазного программного конвейера DSP-ядра ELcore-18™ при выполнении инструкции программного перехода J #A

Таким образом, выполнение инструкции программного перехода требует дополнительных временных затрат в виде трех процессорных тактов, необходимых для выборки и декодирования инструкции по адресу #A (на вычислительные устройства в исполнительной части конвейера в течение этих трех дополнительных тактов ожидания подается аппаратно сформированная пустая операция - NOP).

Влияние программных переходов на производительность конвейера (без учета зависимостей по данным) выражается формулой:

BWX = 1 + рь (Ns - 1), (1)

где BW~ - величина, обратная производительности программного конвейера, имеющая смысл среднего числа тактов, затрачиваемых на исполнение одной инструкции; рь - относительная плотность исполненных инструкций программных переходов (т.е. отношение числа таких инструкций к общему числу исполняемых инструкций); Ns - число фаз установочной части конвейера.

Другим источником временных потерь, возникающих при конвейеризации вычислительных операций, является наличие в программном коде рекурсивных зависимостей по данным между вычислительными инструкциями. Под данными в общем случае подразумеваются как числовые операнды, так и их признаки, используемые в качестве кодов условий (condition codes) при исполнении условных инструкций.

Зависимость по данным между вычислительными инструкциями имеется в тех случаях, когда текущая исполняемая инструкция использует в качестве входного операнда результат предыдущей инструкции. В таких случаях текущая инструкция называется зависимой (dependent), а инструкция, результат которой используется, - разрешающей (resolving) [2]. Приведем пример программного кода на ассемблере DSP-ядра ELcore-^™ с зависимостью по данным между вычислительными инструкциями (индекс в скобках указывает номер инструкции):

(n - 1) ADD R1, R2, R3 (n) MPF R3, R4, R5 (n + 1) ASL R6, R7, R7 (n + 2) SUB R5, R8, R8

Здесь инструкция (n) использует в качестве входного операнда значение, хранящееся в регистре R3, являющееся результатом инструкции (n - 1), а инструкция (n + 2) - значение R5, являющееся результатом инструкции (n).

Для получения правильного результата при работе такой программы (рис.2) в конвейер вводятся дополнительные такты торможения (NOP) - два такта перед исполнением инструкции (n) и один такт перед исполнением инструкции (n + 2). Длительность торможения конвейера зависит от расстояния в трассе между зависимыми инструкциями. Будем называть расстоянием зависимости D (dependency distance) между двумя инструкциями (разрешающей и зависимой) число инструкций, расположенных между ними, плюс одна (т.е. расстояние между инструкциями (n) и (n + k) равно k). Если расстояние зависимости между двумя инструкциями D оказывается меньше, чем число фаз исполнительной части конвейера NE , то это приводит к торможению конвейера на (NE - D) тактов.

Л^Х n - 1

n X n + 1 Л n +

^Х n + 2

n + 3

n + 4^ n + 5 X"" + 6X n + 7^ " + 8

F^rn-^i "-1 \ ^X n+ if n + 2 Xn + ^ " + 4 X n+5)T" + 6X n + 7X~

D X n - 3 ){ n- 2 У n- n У n + 1 X" + 2X n + 3 X"+^ n +4 n + 6>T

EDCn^n^nDCnD^Z

BL_/

n + 1 n + 2 n + 3 n + 4 n + 5

Л_/ \_

n + 1

n + 2 n + 3 n + 4

E2 ~x n - 6 n - 4 n - 2 xnrx

n + 1 n + 2 n + 3

ез ~X n - n - 5 x n - 4 X n - з n - 1 XnopX nopX~

n + 1XNOPX n +

Рис.2. Временная диаграмма работы программного конвейера БЬсоге-18 при выполнении фрагмента программы с наличием зависимостей по данным

(БЬ - сигнал блокировки конвейера)

В общем виде влияние зависимостей по данным (без учета программных переходов) на производительность конвейера выражается формулой

Ne-1

BW- = 1 + JPd(NE -D),

(2)

D=1

где Ре - относительная плотность вычислительных инструкций, зависимых по данным с расстоянием зависимости Е (т.е. отношение числа таких инструкций к общему числу исполняемых инструкций).

Таким образом, производительность программного конвейера зависит как от структуры самого конвейера, определяемой параметрами N и ЫЕ, так и от статистических характеристик исполняемого кода рь и рЕ.

Отметим, что формула (2) выведена в предположении, что различные пары зависимостей вносят вклад в торможение конвейера аддитивным образом. Однако из-за того, что такие зависимости частично перекрывают друг друга, некоторые из них, не должны учитываться при определении производительности конвейера по формуле (2).

Величины рь и рЕ удобно определять при помощи графа трассы исполняемого кода с нанесенными на нем дугами зависимостей по данным и инструкциями исполненных программных переходов. Типичный пример графа зависимостей [2] для последовательности из 10 инструкций (обозначенных узлами от 1 до 10) изображен на рис.3,а. Инструкции в конвейере исполняются линейно, в том порядке, в котором они записаны в программе (нет спекулятивной выборки и изменения порядка выполнения операций).

n

n

.1 «2

«3 -> «4

— • 5

— «6 Branch Target

— -7

-> • 8 Branch Target • 9 Branch Target

— •10 а

• 1 • 2

• 3 •4

• 5

• 6 Branch Target •7

• 8 Branch Target

• 9 Branch Target

• 10

б

Рис.3. Типичный граф зависимостей по данным: а - до редукции; б - после редукции по правилам 1-3

До редукции

-► io

-► i1

До редукции —► jo

io — i1

j1

До редукции

"> io -> j0 _ i1

л

После редукции

С

ги-1

in

Зависимости по данным представлены на графе в виде дуг, которые направлены от зависимой инструкции к разрешающей. Например, дуга, направленная от инструкции 7 к 1, означает, что инструкция 7 зависит от инструкции 1. На графе обозначены также инструкции исполненных программных переходов (Taken Branch) - инструкции 5, 7 и 8 и инструкции по адресу перехода (Branch Target) - инструкции 6, 8 и 9.

Если значение рь может быть вычислено достаточно просто как отношение числа исполненных программных переходов к общему числу инструкций (для приведенного графа рь = 3/10), то с определением величин вероятностей pD все обстоит гораздо сложнее. Дуги зависимостей могут частично перекрывать друг друга. Таким образом, влияние некоторых зависимостей по данным может быть частично или полностью скомпенсировано наличием других. Избыточные дуги зависимостей могут быть удалены с графа, при этом общее число тактов торможения конвейера не должно измениться.

В работе [2] приведены с доказательством в виде соответствующих лемм три правила редукции графа зависимостей по данным, используя которые можно в значительной мере освободить граф от избыточных дуг. Для сокращения объема приведем эти правила без доказательств. При формулировании правил используются следующие соглашения по обозначениям, принятые в работе [2]: обозначим дуги зависимостей парой чисел (in, ik), где in представляет зависимый узел (начало дуги), ik - разрешающий узел (конец дуги). При этом предполагается, что нижние индексы k, n и номера узлов ik, in упорядочены одинаковым образом, т.е. если к < n, то и ik < in . Расстояние зависимости для дуги (in, ik) обозначается D(in, ik) = in - ik и представляет собой число инструкций между узлами in и ik (включая ik).

Правило 1. Если в графе зависимостей узел in , где n > 1, зависит от n узлов, i0 , i1 ,..., in-1 , то дуги (in, ik) могут быть удалены с графа для всех 0 < ik < in-2 .

На рис.4,а проиллюстрировано действие приведенного правила.

После редукции

10

После редукции

Рис.4. Правила редукции 1 (а), 2 (б), 3 (в)

Правило 2. При наличии вложенной зависимости, т.е. если в графе имеются две дуги (/1 /0), //0), такие, что/0 < /0 < ¡1 < /1 , то дуга //0) может быть удалена с графа.

Правило 2 проиллюстрировано на рис.4,б. Заметим, что правило 1 поглощается правилом 2, однако правило 1 сохранено как особый случай.

Правило 3. Если в графе имеются две пересекающиеся дуги (/1, /0) и (/1, /0), такие, что /0 </0 < /1 </1 и Е(/1, /0) < Е(/1, /0), и если на интервале [/0 + 1, /0] нет дополнительных задержек (т.е. вложенных дуг или программных переходов), то дуга (/1, /0) может быть удалена с графа.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

На рис.4,в показано действие правила 3.

Применив последовательно правила редукции 1 - 3 к исходному графу зависимостей, изображенному на рис.3,а, можно удалить избыточные дуги, в итоге сильно его упростив (рис.3,б). При этом полученный граф будет характеризоваться точно таким же числом тактов задержки, что и исходный.

Однако предложенных трех правил редукции оказывается недостаточно для того, чтобы полностью освободить любой граф от всех пересекающихся дуг зависимостей, например таких, которые приведены на рис.5,а. В работе [2] предлагается такие «неразделимые цепи» накапливать в отдельных стеках и оценивать для них задержку конвейера, по сути, прямым моделированием.

В настоящей работе предлагается правило редукции 4, позволяющее устранять пересекающиеся дуги зависимостей (см. рис.5,а), и обобщенное правило редукции, которое включает в себя все приведенные выше правила редукции.

Правило 4. Если в графе имеются две пересекающиеся дуги (/1, /0) и (/1, /0), такие, что /0 </0 < /1 </1 и Е(/1, /0) > Е(/1, /0), и если на интервале [/1 + 1, /1 нет дополнительных задержек (т.е. вложенных дуг или программных переходов), то дуга (/1, /0) может быть удалена с графа.

Действие правила 4 показано на рис.5.

Доказательство. Торможение конвейера для дуги (/1, /0) составляет ё/ = ^ - Е(/1, /0) тактов. Вследствие торможения на эту же величину увеличится расстояние зависимости для дуги (/1, /0) и, таким образом, торможение для дуги (/1, /0) составит ё/ = ^ - (Е(/1, /0) - (Щ - Е(/1, /0))) тактов. Суммарно две дуги дадут торможение ё/ + ё/ = (ЫЕ - Е(/1, /0)) +

+ N - (Е(/1, /0) - N - Е(/1, /0)))) = N - Е(/1, /0)

тактов, т.е. ровно столько же, сколько дает одна дуга (/1, /0), что и требовалось доказать.

Прежде чем сформулировать обобщенное правило редукции, которое включает в себя все приведенные выше правила, внесем уточнение, касающееся влияния программных переходов на расстояние зависимости по данным. Поскольку каждый исполненный программный переход вносит в конвейер торможение на (N3 -1) тактов, для всех дуг зависимости, содержащих внутри себя исполненные программные переходы, расстояние зависимости должно быть увеличено по сравнению со значением, определяемым непосредственно из графа зависимостей, на (N3 -1) тактов на каждый такой переход.

Две дуги будем называть перекрывающимися, если они являются либо вложенными одна в другую (эти случаи рассмотрены в правилах 1 и 2), либо пересекаются (эти случаи рассмотрены в правилах 3 и 4). Приводимое правило является обобщением рассмотренных выше правил 1 - 4 и поэтому дается без доказательства.

До редукции —► /0

•/0 /1 '/1

После редукции

/0

-/1

Рис.5. Правило редукции 4

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

В результате применения обобщенного правила граф зависимостей может быть полностью освобожден от перекрывающихся дуг.

Набор вероятностных характеристик ро, полученный из редуцированного графа, позволяет провести оценку производительности по формуле (2). При выводе формулы (2) неявно предполагалось, что задержки конвейера, связанные с программными переходами, существуют как бы отдельно и независимо от задержек, связанных с зависимостями по данным. На самом деле все обстоит сложнее: так же как дуги зависимостей могут взаимно пересекаться и компенсировать действие друг друга, так и исполненные программные переходы могут полностью или частично компенсировать действие зависимостей по данным. Например, исполненный программный переход от инструкции 8 к инструкции 9 на графе на рис.5 компенсирует действие дуги зависимости между инструкциями 10 и 8.

С учетом такой компенсации общая формула влияния программных переходов и зависимостей по данным на производительность конвейера принимает окончательный вид:

NЕ-1 I

БЖ~1 = 1 + ръ (Н, -1) + £ £ри] N -1 - ЛМ5 -1))+ , (3)

I=1 }=о

где оператор (х)+ при отрицательных значениях х дает нулевой результат, а при неотрицательных значениях дает результат х:

+ Го, еслих < 0

( х)+=\

[х, если х > 0

Предложенное в работе обобщенное правило редукции графа зависимостей по данным для программной трассы позволяет полностью устранять из графа перекрывающиеся дуги зависимостей. Это дает возможность определять из полученного редуцированного графа статистические характеристики программных переходов и зависимостей по данным, входящие в формулу зависимости производительности ББР-ядра от глубины его конвейеризации.

Литература

1. Беляев А.А. Организация программного конвейера DSP-ядер серии ELcore- хх™ IP-Библиотеки «МУЛЬТИКОР» // Проблемы разработки перспективных микроэлектронных систем: сб. науч. тр. ИППМ РАН. - 2005. - С. 508-511.

2. Emma P.G., Davidson E.S. Characterization ob branch and data dependencies in programs for evaluating pipeline performance // IEEE Trans. On Computers. - 1987. - Vol. C36, N 7, July. - P. 859-875.

Статья поступила 3 февраля 2009 г.

Беляев Андрей Александрович - начальник лаборатории ГУП НПЦ «ЭЛВИС» (г. Москва). Область научных интересов: микроэлектроника, сигнальные процессоры, многоядерные системы на кристалле, цифровая обработка сигналов, сжатие изображений.

i Надоели баннеры? Вы всегда можете отключить рекламу.