Выбор между программируемым процессором и аппаратной реализацией
разъясняет Марк Джакобс, специалист фирмы Videantis
http://www.videantis.com/can-programmable-processors-really-be-smaller-than-hardwired-logic.htmlФирма Videantis распространяет свой процессор v-MP6000UDX для выполнения таких программ, как сверточная нейронная сеть (CNN), задачи компьютерного зрения и видеокодеки. Часто такие алгоритмы реализуются в спецпроцессорах с аппаратной реализацией. Интуитивно понятно, что подход с аппаратной реализацией приводит к гораздо меньшим аппаратным затратам и меньшим энергозатратам. Но в Videantis изучали многие проекты и обнаружили, что часто происходит обратное: использование процессора приводит к меньшим аппаратным затратам и меньшей потребляемой мощности, чем с использованием аппаратной реализации. Далее разъясняются причины такого феномена.
Высокая загрузка аппаратуры
Первая причина, с помощью которой программируемый процессор может привести к меньшему по аппаратуре решению, заключается в том, что выполняемые в процессоре команды гораздо больше используют аппаратуру повторно. Часто это называют повторным использованием кремния, то есть, транзисторных схем, которые реализованы на поверхности кремниевого кристалла.
При аппаратной реализации каждая функция в спецпроцессоре становится отдельной индивидуальной схемой. При использовании программируемого процессора каждая функция просто становится некоторой подпрограммой, которая находится в памяти. Эта подпрограмма затем может быть выполнена на процессоре, предоставляя процессору практически неограниченную функциональность. Чем сложнее алгоритм, который следует реализовать, тем эффективнее становится подход на основе программируемого процессора по сравнению с его реализацией в жесткой логике. Например, просто невозможно аппаратно внедрить все средства ОС Android.
Темный кремний на уровне задачи
Повторное использование кремния происходит на разных уровнях. Например, многие процессоры, встроеные в мобильных телефонах, содержат аппаратные ускорители для кодирования и декодирования видеопотоков. Они часто являются отдельными блоками, и в большинстве случаев одновременно используют лишь один из нескольких блоков. При этом блок, который является незагруженным, не потребляет мощности. О нем говорят, что его кремний является темным, то есть он не светится в инфракрасном диапазоне. Следовательно, наличие темного кремния свидетельствует о неэффективном использовании аппаратных ресурсов.
Кроме того, указанные спецпроцессоры должны поддерживать многие стандарты кодирования видео. Поскольку одновременно можно использовать только один стандарт, схемы, которые поддерживают неактивные стандарты кодирования, также имеют темный кремний.
Темный кремний на уровне блоков
Также явление темного кремния происходит на более низких уровнях реализации алгоритмов. Возьмем, к примеру, процессор обработки входного видеопотока, который часто используется в компьютерном зрении для отслеживания движения камеры и объектов, находящихся в поле зрения. Обработка видеопотока обычно является лишь небольшой но важной частью алгоритма компьютерного зрения. Алгоритм сначала находит набор признаков, характерных точек на изображении, которые можно отслеживать. Затем он отслеживает эти точки от кадра к кадру, пытаясь найти соответствие между кадрами.
Этот алгоритм зависит от данных: некоторые сцены будут иметь тысячи характерных точек, а некоторые — очень мало. Сцена дерева с листьями имеет очень много характерных точек. А если видеокамера смотрит на белую стену или на голубое небо, таких точек будет минимум. В этих случаях в спецпроцессоре с жесткой логикой схемы согласования характерных точек должны или отслеживать тысячи характерных точек, или, возможно, не выполняют никакой работы, поскольку таких точек нет.
Этот дисбаланс приводит к темному кремнию. Иногда схемы максимально загружены, иногда они выключаются. В случае, если алгоритм реализован программно, при отсутствии этих характерных точек процессор немедленно освобождается для выполнения следующего задания, которое нагружается на него диспетчером.
Повторное использование памяти
Еще одной областью, где много возможностей для повторного использования аппаратуры, является память. Многие спецпроцессоры выполнены из нескольких модулей, каждый из которых имеет свой собственный блок памяти. В процессорах обработки изображений и глубокого обучения это буфера FIFO, или буферы, которые сохраняют фрагменты изображений. Эти буферы распределены по всему процессору и не могут быть использованы повторно между различными модулями, поскольку каждый модуль имеет свои собственные требования к размеру массива, формата данных и пропускной способности.
При использовании программируемого процессора существует естественная иерархия памяти из блоков памяти, встроенных в микросхему, а также часто внешней памяти. Выделение памяти, выяснение, каким данным назначить определенные адреса, осуществляется в программном обеспечении и часто выполняется компилятором. При разработке спецпроцессора эта задача выполняется один раз на бумаге на этапе проектирования. А в случае программной реализации этой задачи выполняется в программном обеспечении, частично автоматизированным компилятором, и может со временем регулироваться и оптимизироваться. Как следствие, при процессорной реализации существует гораздо больше возможностей повторного использования памяти, что снова приводит к снижению мощности и меньшим аппаратным затратам.
Kолесо реинкарнации
Идеи специализированных процессоров разрабатывались в течение последних восьмидесяти лет. Сатерленд и Мейер предложили важную идею более 50 лет назад в своей работе «О разработке процессоров для дисплеев» (http://cva.stanford.edu/classes/cs99s/papers/myer-sutherland-design-of-display-processors.pdf ).
В ней описано интересное наблюдение о природе разработки аппаратуры:
«Постепенно процессор стал более сложным. Мы не были обеспокоены этим, потому что компьютерная графика, в конце концов, является сложной. В итоге, процессор дисплея напоминал полноценный компьютер с некоторыми особыми графическими функциями. И тогда произошла странная вещь. Мы почувствовали, что надо добавить к процессору второй, вспомогательный процессор, который сам по себе стал расти по сложности. Именно тогда обнаружили тревожную истину. Разработка процессора для отображения графики может стать бесконечным циклическим процессом. На самом деле мы увидели, что этот процесс настолько разочаровывающий, что мы решили назвать его «колесом реинкарнации» ».
Только когда эти авторы несколько раз крутанули это колесо, они поняли, что происходит. Как только они это сделали, они попытались рассмотреть всю проблему с более широкой перспективы. Это хороший пример того, как они искали компромиссы между аппаратными средствами и процессорами еще 50 лет назад.
Оптимизация на разных уровнях абстракции
Оптимизация проекта происходит на разных уровнях. На высших уровнях выбирается архитектура программы, выбираются алгоритмы и структуры данных. На нижнем уровне оптимизация выполняется при разработке схем, выборе системы команд и операций. Такая оптимизация зависит от процессорной платформы, тогда как изменения на более высоком архитектурном уровне и уровне алгоритмов не зависят от платформы.
Оптимизация, происходящая на высших уровнях абстракции, обычно имеет большее влияние на производительность, чем выбор реализации на низком уровне. Например, изменение алгоритма со сложностью O (n2) на алгоритм с O (n) может иметь огромное влияние на производительность. Поскольку жесткое аппаратное проектирование происходит на низком уровне абстракции, обычно на оптимизацию на уровне алгоритма расходуется мало усилий.
Реализация в программном обеспечении, работающем на процессоре выполняется на высшем уровне, предоставляя гибкость для реализации более широкого спектра способов оптимизации. Опять же, это изменение фокуса приводит к снижению ожидаемой мощности и увеличению производительности реализации на основе процессора.
Продолжительность разработки
Другим аспектом является продолжительность разработки, которой всегда не хватает. Более трудоемкой является разработка схем аппаратных средств, чем разработка программного обеспечения. Поэтому разработчики аппаратных средств начали использовать новые средства, такие как высокоуровневый синтез, генерирующий схемы из файлов на C / C ++. Это позволило разработчикам получить большие объемы разработанной аппаратуры за счет менее эффективных реализаций.
Благодаря подходу, базирующемуся на процессорах, оптимизация выполняется на двух уровнях: сам процессор со временем может быть оптимизирован, сохраняя неизменность архитектуры системы команд. Это позволяет тому же программному обеспечению работать на реализациях той же архитектуры, которые являются усовершенствованными, более быстрыми или с меньшей аппаратурой и с меньшим энергопотреблением. Кроме того, для оптимизации программного обеспечения доступно больше времени, поскольку для внедрения программного обеспечения по сравнению с разработкой аппаратных схем требуется меньше времени.
Впрочем, полностью аппаратная реализация визуальных вычислительных алгоритмов и приложений часто бывает раздутой и глубоко перерабатывается в течение многих лет.
Итак, спецпроцессор на жестких логических схемах может быть гораздо меньше, чем программируемый процессор. В случае, если нужно, например, просто умножить входной 16-битный сигнал на постоянный коэффициент, такой спецпроцессор будет намного меньше, чем при использовании подхода на основе программируемого процессора с его общими блоком умножения, памятью команд, дешифратором команд, которые можно считать накладными расходами.
Но если приложение существенно сложнее, например, система, которая работает с различными сетями глубокого обучения, полноценным кодированием видео или стеками компьютерного зрения, то тщательно продуманный программируемый процессор, оптимизированный для визуальных вычислений, может привести к проекту, который обеспечивает большее отношение производительность на ватт и большее отношение производительности на доллар стоимости микрсхемы.
15-летний опыт фирмы Videantis показывает, что приложения на базе программируемых процессоров являются очень экономичными как по стоимости так и энергопотреблению и регулярно обходят аппаратные ускорители по этим ключевым показателям, оставаясь при этом программируемыми, что является ключевым в сфере визуальных вычислений, где алгоритмы и приложения быстро меняются.