Рубрики
|
индикация |
события |
инструменты |
беспроводная связь |
датчики |
источники питания |
компоненты |
корпуса |
микроконтроллеры |
приборы |
промышленная мебель |
прочее |
сетевые решения |
силовая электроника |
средства разработки |
новые технологии |
Интересные статьи
Рубрика: прочее
DSP-процессор с фиксированной или плавающей точкой? Неожиданно сложный
23.09.2008 Какой DSP-процессор выбрать: с фиксированной точкой или плавающей? Всегда ли выбор очевиден, особенно если стоимость процессоров практически одинакова? Ответ вас может удивить так же, как могут удивить и причины трудности выбора. В этой статье на примере двух DSP-процессоров стоимостью примерно по 5 долл. США рассматриваются аргументы «за» и «против» того или иного выбора.
Введение
Преимущество процессоров с плавающей точкой (ППТ) известны: реализация многих алгоритмов занимает меньшее количество циклов выполнения, нежели код с фиксированной точкой (при условии, что код с фиксированной точкой обеспечивает такую же точность). ППТ часто проще программировать на ассемблере. Но качество компиляторов становится всё лучше, а написание кода на языке С практически одинаково простая задача, будь то плавающая, либо фиксированная точка. Более того, на С можно писать программу с плавающей точкой для исполнения ее на процессоре с фиксированной точкой (ПФТ), правда это вызовет значительное ухудшение производительности. При выборе важны производительность конечной системы, её цена и время выхода на рынок.
Проведем сравнительный анализ на примере двух процессоров компании ADI близких по цене: ADSP-21531 Blackfin — ПФТ и ADSP-21375 SHARC — ППТ. Можно подумать, что раз уж за кристаллы платится одинаковая цена, то лучше выбрать ППТ просто потому, что он может выполнять операции с плавающей точкой на случай, если это вдруг когда-либо понадобится. Но одинаковая цена за кристалл не всегда означает одинаковую цену за систему в целом. Например, энергопотребление процессоров SHARC для аналогичных задач с плавающей точкой гораздо больше, нежели потребление Blackfin. Это приводит к тому, что помимо всего прочего система на процессорах SHARC будет дороже с точки зрения используемого источника питания. В любом случае для каждого приложения требуется сделать однозначный выбор одного более эффективного процессора из двух. Для примера рассмотрим четыре отдельных приложения:
- военный радар;
- мобильное ТВ;
- профессиональный процессор аудиоэффектов;
- авто подавитель эха в hands-free портативных устройствах.
Необходимо добавить, что ни один анализ не является завершённым, если не рассматривается специализированные (ASIC) аппаратные сопроцессоры и FPGA для того, чтобы передать им часть задач по обработке сигнала. Обсуждение этого вопроса выходит за рамки данной статьи, но следует иметь в виду подобные возможности.
Военный радар
В военном радаре чаще используется ППТ, потому что производительность операций с плавающей точкой в этом приложении является существенным фактором. Радар работает по принципу обнаружения максимальной абсолютной величины функции неопределённости. Эта функция есть результат перекрёстного соотношения отправленного тестового сигнала с принятым эхом. Подобная функция задаётся следующим образом:
Этот интеграл может быть вычислен с использованием быстрых преобразований Фурье. Поддержка операций с плавающей точкой оказывается очень кстати при вычислении подобных преобразований. Энергопотребление здесь не является проблемой. Цена процессора также не главное, поскольку она составляет ничтожную долю по сравнению с общей стоимостью системы. Реально едва ли кто выберет даже ADSP-21367 SHARC для подобной задачи, так как основная цель данного приложения — это иметь столько вычислительной мощности на каждый квадратный мм площади, насколько это возможно. Так что высокопроизводительный ADSP-TS201 из семейства TigerSHARC ADI был бы более подходящим выбором для данного приложения.
Мобильное ТВ
Этот случай является другим примером простого выбора. В мобильном ТВ нет необходимости в обработке данных с плавающей точкой. Основная часть цепи обработки сигнала — это стандартные декодеры, такие как MPEG2, MPEG4, JPEG2000 и H.264. Эти алгоритмы были разработаны для работы с фиксированной точкой. Лучшая точность и динамический диапазон плавающей точки не будет использоваться, поскольку алгоритмы в основном задают необходимую точность до бита.
Например, преобразование, используемое для перехода в частотную область в видеокодеках — это один из видов дискретного косинусного преобразования (DCT). На первый взгляд может показаться, что плавающая точка более удобна для вычислений косинусного преобразования, также как и в случае с преобразованиями Фурье, о которых велась речь выше. Но, к сожалению, DCT-преобразования в видеокодеках были разработаны для исполнения на ПФТ и имеют точность до бита — так что использование большой точности здесь было бы ошибкой. Более того, основная рабочая часть видеокодека располагается в программе управления — где тем более нет необходимости в плавающей точке. Например, шифраторы случайных чисел (entropy encoders), используемые в видеокодеках, занимают значительную часть общего объёма выполняемой работы. (Это лишь частично верно для CABAC шифраторов, используемых в H.264).
Из двух рассматриваемых здесь процессоров правильный выбор ещё более очевиден, если учесть, что процессоры Blackfin имеют специализированные инструкции для ускорения выполнения алгоритмов видеообработки. Процессоры SHARC таких инструкций не имеют. Плюс ко всему, энергопотребление является очень существенным фактором на рынке мобильной аппаратуры, что тем более исключает возможность использования процессоров с плавающей точкой. Это делает выбор очевидным.
Профессиональный процессор аудиоэффектов
Теперь мы переходим к приложению, где выбор далеко не очевиден. В отличие от мобильных приложений здесь нет жёстких ограничений по энергопотреблению. До тех пор, пока процессор не требует принудительного охлаждения (достаточно дорогое решение), обсуждение энергопотребления сводится к цене источника питания. Пусть, например, процессор эффектов должен уметь выполнять эхо La Scalа в двухканаль-ной системе. Нужно было бы сходить в дом оперы La Scala и измерить его импульсную характеристику (impulse response) достаточной длительности для того, чтобы окончательное эхо стало совершенно неслышимым. Или можно было бы схитрить и найти уже измеренную импульсную характеристику. Собственно это я и сделал, и полученная импульсная характеристика была длительностью порядка 2 секунд. Предполагая частоту выборки равной 96 кГц, это означает 192 тыс. точек. Итак, для того, чтобы иметь точную реализацию эха, нам надо было бы спроектировать 192000-элементный полосовой КИХ-фильтр (192000-tap FIR).
Конечно, реализация 192000-эле-ментного фильтра в лоб является довольно сумасбродным решением — потребуется 192 тыс. умножителей на каждую выходную выборку. Имея 96 тыс. выборок, это означало бы выполнение более 18 биллионов операций умножения в секунду. Умножив это на два, чтобы учесть тот факт, что выходных каналов у нас два, добавив дополнительную обработку, которую необходимо делать, учтя резерв для возможных расширений в будущем, получается 100 биллионов MAC-операций в секунду. Итак, необходимо провести оптимизацию, причем способ оптимизации зависит от типа процессора.
Вначале рассмотрим реализацию на ППТ. Как уже упоминалось ранее, обработка с плавающей точкой хороша в том случае, если необходимо проводить быстрые преобразования Фурье (FFT) для большого объёма данных, поэтому мы можем реализовать конечную частотную импульсную характеристику (FIR). Один из широко используемых для этой цели алгоритмов является преобразование Фурье методом перекрытия с суммированием (overlap-add FFT). В этом случае мы выберем окно из 1024 точек для вычисления преобразования Фурье методом перекрытия с суммированием (overlap-add FFT).
Процессор ADSP-21367 SHARC может выполнять сложные преобразования Фурье с использованием технологии SIMD (SIMD FFT) по 1024 точкам примерно за 9200 циклов. Таким образом, чтобы вычислить 1024 выходных выборки необходимо выполнить преобразование Фурье для 1024 точек, затем 1024 комплексных умножения, затем обратное быстрое преобразование Фурье (IFFF) по 1024 точкам. На процессорах SHARC комплексные умножения займут 2048 циклов. Таким образом, чтобы рассчитать 1024 величины потребуется 9200 + 2048 + 9200 = 20448 циклов, что составляет примерно по 20 циклов на одну выходную величину. Учтём добавление нулями, необходимое для того, чтобы выполнить преобразование Фурье методом перекрытия с суммированием, обращения к внешней памяти для извлечения предварительно вычисленных FFT для импульсной характеристики, всё умножим на два для того, чтобы учесть оба канала, и вот мы уже имеем по 100 циклов на каждую выходную величину. Другими словами, это потребует только 10 миллионов операций в секунду — 10 MIPS.
Теперь давайте рассмотрим эту же задачу, но решим её на ПФТ. По пытавшись реализовать быстрое преобразование Фурье тем способом, как было сделано выше, мы натолкнёмся на большие проблемы. Комбинация прямого и обратного преобразований Фурье по 1024 точкам приводит к увеличению в 1024, то есть — на десять бит. Для того чтобы избежать переполнения в ходе вычисления прямого и обратного преобразований — сигнал должен будет сдвигаться вправо на 10 бит. Если мы хотим, чтобы на выходе у нас было 24-битное разрешение, то нам следовало бы выполнять 34-битные операции. Поскольку преобразователи АЦП и ЦАП обычно имеют соотношение сигнал/шум (SNR) меньше чем 24 бита, то потребуется использовать 32-битные операции и иметь 22-битную пропускную способность. 16-битный процессор с фиксированной точкой должен выполнять 4 умножения, а также ещё несколько сдвигов и операций сложения для того, чтобы в результате получить 32-битное умножение.
При использовании процессора Blackfin нам необходимо выполнять по 6 циклов на каждое 32-битное умножение. В результате обработка, выполняемая на SHARC с частотой 10 МГц, потребует 60 MГц на Blackfin. Раз процессор может справиться с рабочей нагрузкой, то для решения о выборе следует учесть другие факторы, например потребляемую мощность. На низких частотах она невелика, однако чем выше становится вычислительная нагрузка, тем больше становится динамическое потребление мощности. Имея шестикратную разницу по рабочей частоте предпочтительней, конечно же, выбрать SHARC. В предельном случае реализация на Blackfin просто выйдет за пределы возможной производительности, и SHARC остаётся единственным вариантом.
При другом подходе можно было бы реализовать что-то вроде приближения к требуемому искусственному эху. Это можно было бы сделать, сохраняя только доминантные отсчёты и обнуляя всё остальное. Предположив, что мы хотим сохранить только 1% отсчётов ненулевыми, получим 1920-элементный КИХ-фильтр. Мы не можем больше использовать быстрое преобразование Фурье для реализации данного фильтра, потому что быстрое преобразование Фурье не может вычислять отсчёты выборочно — оно должно рассчитывать их все. Поэтому нам пришлось бы реали-зовывать этот фильтр напрямую. Это означает, что нам потребовалось бы по 1920 умножений на каждый выходной отсчет. Для сохранения 24-битной точности мы должны умножить это на 6. Процессор Blackfin умеет выполнять по два 16-разрядных умножения в цикле, поэтому для того, чтобы получить требуемое число циклов — делим на два. В результате получаем 5760 циклов на каждый выходной отсчет. Чтобы получить общую загрузку, умножаем это на количество каналов (2), далее вновь умножаем, но теперь уже на частоту выборки 96 МГц, и делаем некоторый резерв для учёта издержек и возможной новой функциональности. Выполнив всё это, мы приходим к частоте 2 ГГц. Теперь мы обнуляем 99,9% отсчётов импульсной характеристики и делаем то же самое на 200 МГц. Эта частота гораздо выше, чем в случае применения быстрого преобразования Фурье, которое мы использовали на SHARC. Кроме того, гораздо важнее то, что пропускная способность фильтра начинает ухудшаться, когда мы обнуляем 99,9% отсчётов.
На практике процессор для профессиональных аудиоэффектов должен иметь гораздо большие функциональные возможности, нежели просто подавление эхо. Для полной оценки соотношения выгод и потерь при использовании плавающей, либо фиксированной точки, следовало бы проводить этот анализ для каждого из участков обработки. Это непростая задача, но пример с эхом указывает, что решения с плавающей точкой позволят обойтись меньшим потреблением мощности, нежели решения на процессорах с фиксированной точкой — несмотря на тот факт, что данные о потребляемой мощности, приведённые в руководствах на процессоры, говорят совершенно обратное.
Автоматический подавитель эха в переносных hands-free устройствах
Автоматический подавитель эха зачастую использует быстрое преобразование Фурье для расчета корреляции к опорному сигналу. Вы можете подумать, что использование быстрого преобразования Фурье априори определяет выбор в пользу процессора с плавающей точкой. Однако есть очень важное различие между быстрым преобразованием Фурье в предыдущем примере и преобразованием Фурье здесь. В предыдущем примере — до ушей слушателей доходит результат прямого и обратного преобразований Фурье (FFT/IFFT). Так что мы должны были сохранить очень высокое качество соотношения сигнал/шум (SNR). В подавителе же эха быстрое преобразование Фурье используется только для вычисления времени задержки эха — и оно не изменяет фактический звуковой поток. Так что вы спокойно можете обойтись быстрым преобразованием Фурье с 16-битной точностью. И это существенно изменяет анализ количества требуемых циклов.
Кроме того, важно заметить, что подавители эха зачастую используются в портативных hands-free устройствах. Это налагает очень серьёзные ограничения на допустимую мощность. Процессор с плавающей точкой просто-напросто имеет слишком высокую рассеиваемую мощность для того, чтобы быть конкурентоспособным кандидатом для решения это задачи.
Как мы видим, в очевидных ситуациях выбор между фиксированной и плавающей точкой ясен. Однако в не совсем однозначных случаях анализ может быть довольно сложным. Кроме того, всё становится ещё более сложным, если вы хотите учесть другие факторы, как например аппаратное ускорение для разгрузки вычислений, простоту программирования (которая влияет на время выхода продукта на рынок), максимум соотношения dl/dt (которое влияет на стоимость развязки источника питания), или разводку платы. При выполнении подобного рода анализа игра стоит свеч, поэтому не следует тыкать пальцем в процессор с фиксированной или плавающей точкой, основываясь только на каких-то ваших предвзятых мнениях. Вы можете быть неприятно удивлены, когда обнаружите, что всё это время использовали процессор не того типа.
Борис Лернер (Boris Lerner), инженер, Analog Devices, Электронные компоненты №7 2008 (c)
другие статьи
Комментарии
Комментариев нет. Ваш комментарий будет первым.
Чтобы оставить свой комментарий Вам необходимо зарегистрироваться.