Аноним

Ресинхронизация схемы: различия между версиями

Материал из WEGA
 
(не показано 7 промежуточных версий 1 участника)
Строка 6: Строка 6:




Формальное определение задачи выглядит следующим образом. Пусть дан ориентированный граф <math>G = (V, E) \;</math>, представляющий схему, в котором каждая вершина <math>v \in V \;</math> представляет вентиль, а каждое ребро <math>e \in E \;</math> – передачу сигнала от одного вентиля к другому с задержкой <math>d: V \to \mathbb{R}^+ \;</math> и номерами регистров <math>w: E \to \mathbb{N} \;</math>. Целью задачи нахождения минимальной площади является перемещение регистров <math>w': E \to \mathbb{N} \;</math>, такое, что количество регистров в схеме минимально в пределах заданной длительности такта <math>\varphi \;</math>. Задача нахождения минимальной длительности ищет решение с минимальной длительностью такта.
Формальное определение задачи выглядит следующим образом. Пусть дан ориентированный граф <math>G = (V, E) \;</math>, представляющий схему в котором каждая вершина <math>v \in V \;</math> представляет вентиль, а каждое ребро <math>e \in E \;</math> – передачу сигнала от одного вентиля к другому с задержками <math>d: V \to \mathbb{R}^+ \;</math> и количествами регистров <math>w: E \to \mathbb{N} \;</math>. Целью задачи ресинхронизации с нахождением минимальной площади является перемещение регистров <math>w': E \to \mathbb{N} \;</math>, такое, что количество регистров в схеме минимально в пределах заданной длительности такта <math>\varphi \;</math>. Задача ресинхронизации с нахождением минимальной длительности ищет решение с минимальной длительностью такта.


== Нотация ==
== Нотация ==
Чтобы гарантировать, что новые регистры – это перемещенные старые, метка <math>r: V \to \mathbb{Z} \;</math> используется для обозначения того, сколько регистров перемещены из исходящих ребер каждой вершины на входящие. Используя эту нотацию, можно вычислить новое количество регистров ребра (u, v) по формуле w'[u, v] = w[u, v] + r[v] r[u].
Чтобы гарантировать, что новые регистры – это перемещенные старые, метка <math>r: V \to \mathbb{Z} \;</math> используется для обозначения того, сколько регистров перемещены из исходящих ребер каждой вершины на входящие. Используя эту нотацию, можно вычислить новое количество регистров ребра (u, v) по формуле  
 
<math>w'[u, v] = w[u, v] + r[v] - r[u] \;</math>.




Строка 27: Строка 29:




С другой стороны, при наличии ресинхронизации r минимальное количество регистров между двумя любыми вершинами u и v задается формулой W[u, v] r[u] + r[v]. Это количество не будет отрицательным в силу предыдущего ограничения. В случае, когда оно оказывается нулевым, будет иметь место путь с задержкой D[u, v], на котором не имеется регистров.
С другой стороны, при наличии ресинхронизации r минимальное количество регистров между двумя любыми вершинами u и v задается формулой W[u, v] - r[u] + r[v]. Это количество не будет отрицательным в силу предыдущего ограничения. В случае, когда оно оказывается нулевым, будет иметь место путь с задержкой D[u, v], на котором не имеется регистров. Таким образом, для ресинхронизации схемы с длительностью такта <math>\varphi \;</math> должно удовлетворяться следующее ограничение:
 
 
Таким образом, для ресинхронизации схемы с длительностью такта <math>\varphi \;</math> должно удовлетворяться следующее ограничение:


<math>P1(r) \triangleq  \forall u, v \in V: D[u, v] > \phi \implies W[u, v] + r[v] - r[u] \ge 1 \;</math>.
<math>P1(r) \triangleq  \forall u, v \in V: D[u, v] > \phi \implies W[u, v] + r[v] - r[u] \ge 1 \;</math>.
Строка 39: Строка 38:
<math>\sum_{v \in V} (in[v] - out[v]) \ast r[v] + \sum_{(u, v) \in E} w[u, v] \;</math>,
<math>\sum_{v \in V} (in[v] - out[v]) \ast r[v] + \sum_{(u, v) \in E} w[u, v] \;</math>,


где in[v] – полустепень захода, а out[v] – полустепень исхода вершины v. Поскольку второй терм является константой, задачу можно переформулировать в виде следующей целочисленной линейной программы:
где in[v] – [[Полустепень захода вершины|полустепень захода]], а out[v] – [[полустепень исхода вершины]] v. Поскольку второй терм является константой, задачу можно переформулировать в виде следующей целочисленной линейной программы:


Минимизировать <math>\sum_{v \in V} (in[v] - out[v]) * r[v]</math> так, чтобы выполнялись неравенства
Минимизировать <math>\sum_{v \in V} (in[v] - out[v]) * r[v]</math> так, чтобы выполнялись неравенства
Строка 50: Строка 49:




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




'''Теорема 1. Целочисленная линейная программа для задачи ресинхронизации с минимальной площадью является двойственной к задаче нахождения потока с минимальной стоимостью в сети.'''
'''Теорема 1. Целочисленная линейная программа для задачи ресинхронизации с минимальной площадью является двойственной к следующей задаче нахождения сетевого потока с минимальной стоимостью:'''


'''Минимизировать <math>\sum_{(u, v) \in E} w[u, v] * f[u, v] + \sum_{D[u, v] > \phi} (W[u, v] - 1) * f[u, v]</math> так, чтобы выполнялись соотношения'''
'''Минимизировать <math>\sum_{(u, v) \in E} w[u, v] * f[u, v] + \sum_{D[u, v] > \phi} (W[u, v] - 1) * f[u, v]</math> так, чтобы выполнялись соотношения'''


<math>in[v] + \sum_{(v, w) \in E \vee D[u, v] > \phi} f[v, w] = out[v] + \sum_{(u, v) \in E \; \; D[u, v] > \phi} f[u, v] \; \; \forall v \in V</math>
<math>in[v] + \sum_{(v, w) \in E \vee D[v, w] > \phi} f[v, w] = out[v] + \sum_{(u, v) \in E \; \; D[u, v] > \phi} f[u, v] \; \; \forall v \in V</math>


<math>f[u, v] \ge 0 \; \; \forall (u, v) \in E \; \; D[u, v] > \phi</math>
<math>f[u, v] \ge 0 \; \; \forall (u, v) \in E \; \; D[u, v] > \phi</math>
Строка 68: Строка 67:




Для построения потока в сети с минимальной стоимостью необходимо вначале вычислить обе матрицы, W и D. Поскольку W[u, v] – кратчайший путь из u в v относительно w, вычисление W можно выполнить при помощи алгоритма нахождения кратчайших путей между всеми парами – например, алгоритма Флойда-Уоршелла [1]. Далее, если упорядоченная пара (w[x, y], - d[x]) используется в качестве веса ребра для каждой пары <math>(x, y) \in E \;</math>, алгоритм нахождения кратчайших путей между всеми парами можно также использовать для вычисления W и D. Алгоритм будет присваивать веса при помощи покомпонентного сложения и затем сравнивать их посредством лексикографической сортировки.
Для построения сетевого потока с минимальной стоимостью необходимо вначале вычислить обе матрицы, W и D. Поскольку W[u, v] – кратчайший путь из u в v относительно w, вычисление W можно выполнить при помощи алгоритма нахождения кратчайших путей между всеми парами – например, [[Алгоритм Флойда|алгоритма Флойда-Уоршелла]] [1]. Далее, если упорядоченная пара (w[x, y], - d[x]) используется в качестве веса ребра для каждой пары <math>(x, y) \in E \;</math>, алгоритм нахождения кратчайших путей между всеми парами можно также использовать для вычисления W и D. Алгоритм будет присваивать веса при помощи покомпонентного сложения и затем сравнивать их посредством лексикографической сортировки.




Первый алгоритм Лейзерсона и Сакса [3] для ресинхронизации с минимальной длительностью был также основан на использовании матриц W и D. Этот алгоритм основывался на том, что ограничения в целочисленной линейной программе для ресинхронизации с минимальной длительности можно эффективно проверять при помощи алгоритма нахождения кратчайших путей Беллмана-Форда [1], поскольку представляют собой просто разностные неравенства. Это позволяет выполнять проверку применимости для любой заданной длительности такта <math>\varphi \;</math>. После этого бинарным поиском по диапазону возможных длительностей можно найти оптимальную длительность такта. Проверку применимости можно выполнить за время <math>O(|V|^3) \;</math>; таким образом, общее время выполнения такого алгоритма составит <math>O(|V|^3 \; log \; |V|)</math>.
Первый алгоритм Лейзерсона и Сакса [3] для ресинхронизации с минимальной длительностью был также основан на использовании матриц W и D. Идея алгоритма заключалась в том, что ограничения в целочисленной линейной программе для ресинхронизации с минимальной длительности можно эффективно проверять при помощи [[Алгоритм Флойда|алгоритма нахождения кратчайших путей Беллмана-Форда]] [1], поскольку они представляют собой просто разностные неравенства. Это позволяет выполнять проверку применимости для любой заданной длительности такта <math>\varphi \;</math>. После этого бинарным поиском по диапазону возможных длительностей можно найти оптимальную длительность такта. Проверку применимости можно выполнить за время <math>O(|V|^3) \;</math>; таким образом, общее время выполнения такого алгоритма составит <math>O(|V|^3 \; log \; |V|)</math>.




В своем втором алгоритме авторы избавились от построения матриц W и D, однако по-прежнему использовали проверку применимости длительности такта во время бинарного поиска. Однако проверка применимости в этот раз выполняется при помощи инкрементной ресинхронизации и работает следующим образом. Начиная с r = 0 алгоритм вычисляет время прибытия в каждую вершину при помощи вычисления самых длинных путей в ориентированном [[ациклический граф|ациклическом графе]]. Для каждой вершины v, время прибытия в которую превышает заданную длительность <math>\varphi \;</math>, значение r[v] увеличивается на единицу. Процесс вычисления времени прибытия и увеличения r повторяется |V| — 1 раз. Если после этого какое-либо время прибытия остается большим, чем <math>\varphi \;</math>, то длительность является неприменимой. Проверку применимости можно выполнить за время O(|V| |E|), а полное время выполнения ресинхронизации с минимальной длительностью составляет O(|V| |E| log |V|).
В своем втором алгоритме авторы избавились от построения матриц W и D, но по-прежнему использовали проверку применимости длительности такта во время бинарного поиска. Однако проверка применимости в этот раз выполняется при помощи инкрементной ресинхронизации и работает следующим образом. Начиная с r = 0 алгоритм вычисляет время прибытия в каждую вершину при помощи вычисления самых длинных путей в ориентированном [[ациклический граф|ациклическом графе]]. Для каждой вершины v, время прибытия в которую превышает заданную длительность <math>\varphi \;</math>, значение r[v] увеличивается на единицу. Процесс вычисления времени прибытия и увеличения r повторяется |V| — 1 раз. Если после этого какое-либо время прибытия остается большим, чем <math>\varphi \;</math>, то длительность является неприменимой. Проверку применимости можно выполнить за время O(|V| |E|), а полное время выполнения ресинхронизации с минимальной длительностью составляет O(|V| |E| log |V|).


== Применение ==
== Применение ==
Строка 80: Строка 79:


== Открытые вопросы ==
== Открытые вопросы ==
Как можно понять из упомянутого второго алгоритма ресинхронизации с минимальной длительностью и из алгоритма Чжоу [8] в статье [[Ресинхронизация схемы: инкрементный подход]], инкрементное вычисление самых длинных комбинационных путей (т.е. путей, на которых не имеется регистров) оказывается эффективнее построения плотного графа (при помощи матриц W и D). Однако алгоритм ресинхронизации с нахождением минимальной площади по-прежнему основывается на поиске сетевого потока с минимальной стоимостью в плотном графе. Остается открытым любопытный вопрос – можно ли разработать более эффективный алгоритм на базе инкрементной ресинхронизации для решения задачи о минимальной площади.
Как можно понять при рассмотрении упомянутого второго алгоритма ресинхронизации с минимальной длительностью и алгоритма Чжоу [8] в статье [[Ресинхронизация схемы: инкрементный подход]], инкрементное вычисление самых длинных комбинационных путей (т.е. путей, на которых не имеется регистров) оказывается эффективнее построения плотного графа (при помощи матриц W и D). Однако алгоритм ресинхронизации с нахождением минимальной площади по-прежнему основывается на поиске сетевого потока с минимальной стоимостью в плотном графе. Остается открытым любопытный вопрос – можно ли разработать более эффективный алгоритм на базе инкрементной ресинхронизации для решения задачи о минимальной площади.


== Экспериментальные результаты ==
== Экспериментальные результаты ==
Строка 104: Строка 103:


8. Zhou, H.: Deriving a new efficient algorithm for min-period retiming. In Asia and South Pacific Design Automation Conference, Shanghai, China, Jan. ACM Press, New York (2005)
8. Zhou, H.: Deriving a new efficient algorithm for min-period retiming. In Asia and South Pacific Design Automation Conference, Shanghai, China, Jan. ACM Press, New York (2005)
[[Категория: Совместное определение связанных терминов]]