Сокращение операций при малой мощности
Operation Reduction for Low Power — это ASIC, метод преобразования программы используемый для снижения энергопотребления конкретного приложения. Преобразование программы — это любая операция, которая изменяет вычислительную структуру, такую как характер и тип вычислительных моделей, их взаимосвязи, последовательность операций, сохраняя неизменным поведение ввода-вывода. В основном мы используем сокращение операций, чтобы уменьшить количество операций, которые необходимо выполнить для выполнения задачи, что снижает необходимое оборудование и, в свою очередь, энергопотребление. Например, в конкретной микросхеме конкретного приложения уменьшение количества необходимых независимых дополнений автоматически уменьшает количество требуемых сумматоров, а также потребляемую мощность.
Замена операции
[ редактировать ]Операция «Замена» — это один из методов сокращения операций, при котором определенные дорогостоящие операции заменяются относительно более дешевыми операциями, которые снижают энергопотребление. Некоторые типичные примеры методов замены операций приведены ниже:
- Умножение путем сложения/вычитания : умножение двух чисел является дорогостоящим по сравнению с сложением двух чисел, поэтому замена его сложением выгодна. Например, чтобы вычислить y = x 2 + Ax + B мы можем вычислить x 2 , Ax, и добавьте их оба к B, который имеет 2 умножения, 3 сложения, или мы можем преобразовать его в y = x(x+A) + B, где мы можем вычислить x+A, умножить его на x и добавить B, где у нас есть 1 умножение и 2 сложения, оба подхода имеют одинаковую длину критического пути, но второй имеет меньшие умножения, что экономит энергию.
- Вычисление синуса/косинуса/tan : Вычисление тригонометрических функций также может оказаться весьма дорогостоящим, поскольку замена их на разложение Тейлора меньшего порядка делает их менее энергозатратными, но мы можем потерять из-за аппроксимации, что является компромиссом, который следует учитывать. разум.
- Умножение-сложение на MAC : операция умножения-накопления — это обычный шаг, при котором вычисляет произведение двух чисел и добавляет это произведение в аккумулятор. Аппаратное обеспечение, используемое для этой цели, называется умножителем-аккумулятором (MAC). Использование MAC также снижает потребляемую мощность. По сути, MAC выполняет умножение и сложение в одном устройстве.
- Уменьшение доступа к памяти . Изменение структуры программы путем замены операций, требующих частого доступа к памяти, на операции, требующие меньшего доступа к памяти, также выгодно, поскольку доступ к памяти является дорогостоящей операцией.
Пример бабочки
[ редактировать ]Популярным примером замены операции является пример «Бабочка». В этом примере нам нужно вычислить два значения y r = a r * x r - a i * x i , y i = a i * x r + a r * x i , что можно сделать, последовательно вычисляя члены, как показано в выражения. Но используя подстановку операций, мы можем вычислить их с помощью выражений: y r = a r * (x i +x r ) - x i * (a i +a r ), y i = a r * (x i +x r ) + x r * (a i -ar r ), где термин (x i +x ) , однажды вычисленный, может использоваться для обоих вычислений, из этого мы можем легко определить, что операции изменились из-за того, что количество операций изменилось с 4 умножений на 3 и 2 Добавьте/подключите к 3. Критический путь в первом методе имел длину 2, тогда как во втором — 3. Итак, снова это компромисс между задержкой и мощностью.
Снижение коммутационной активности
[ редактировать ]Основываясь на частоте изменения входных данных, мы можем смоделировать программу так, чтобы происходило меньшее переключение активности, т.е. если определенные входные данные изменяются реже, то их следует заставить работать в одном модуле, чтобы конкретный модуль был относительно пассивным по сравнению с другими. A+B+C+D можно вычислить как (A+B)+C+D или (A+B)+(C+D), первый из которых подает C,D на два отдельных сумматора, но если они изменяются относительно медленно тогда выгоднее подавать их в один и тот же сумматор.
Планирование и привязка с учетом энергопотребления
[ редактировать ]Любой синтез состоит из трех частей: Распределение (количество и тип ресурсов), Планирование (планирование операций), Привязка (построение схемы). Мы можем запланировать операции в определенном порядке, исходя из того, какое значение в программе активирует сколько модулей. Мы всегда хотим, чтобы операции, требующие выполнения дополнительных операций, были запланированы на более позднее время.
Использование взаимного исключения
[ редактировать ]Рассмотрим следующий фрагмент кода:
if (C > 0) { :A = A * C }
Предположим, что профилирование показало, что, скорее всего, значение C равно 2. Следовательно, поскольку C и C независимы и взаимоисключающие, мы можем изменить код так, чтобы он был
if (c == 2) { A = A << 1 } else if (C > 0) { :A = A * C; }
Здесь умножение заменяется операцией сдвига, которая запускается в большинстве случаев и обходится намного дешевле, чем умножение.
Ссылки
[ редактировать ]- Чандракасан, А. П. и др., Оптимизация мощности с помощью преобразований, IEEE TCAD, том 14, январь 1995 г., стр. 12–31.
- Маломощная конструкция Лек-4 ( https://www.youtube.com/watch?v=J56ExZ9uGkg )