Не спи - проворонишь диэспи
Архив[i37020]
Присмотревшись к сегодняшним видео- и аудиокартам и даже - жестким дискам, нетрудно обнаружить, как по-хозяйски на многих из них обосновались «особенные» микропроцессоры, благодаря которым видеоизображение стремительно приблизилось к естественному, звук приобрел осязаемую объемность, а жесткие диски демонстрируют невиданную скорость обмена данными. Вместе с тем большинство из нас, погружаясь в многомерную виртуальность видео и звука, и не задумывается о тайной сути происходящих явлений…
Упомянутые микропроцессоры - одна из разновидностей (или отпочковавшаяся ветвь) процессоров цифровой обработки сигналов, известных во всем мире под аббревиатурой DSP (Digital Signal Processor), а у нас как ЦОС-процессоры [1]. Спрос на DSP постоянно растет (~35% в год в странах цивилизованного капитализма), а цена неумолимо снижается - благодаря их широкому применению в следующих областях:
-
сотовая связь;
-
цифровое радиовещание и телефония;
-
цифровые видеокамеры, принтеры высокого разрешения, факсимильные аппараты и т. п.;
-
кодирование/декодирование аудио- и видеосигналов (плейеры DVD);
-
промышленные системы контроля, управления и диагностики.
Везде, где надо обрабатывать потоки информации в строго оговоренный и заранее известный срок, без малейшей заминки, то есть в реальном времени, используются DSP.
DSP пришли из мира военных компьютерных систем. Отсюда и наследование качеств, свойственных операционным системам жесткого реального времени (ОСРВ), в которых любое промедление смерти подобно, а за «шаг влево, шаг вправо» по своевольному дележу ресурсов - расстрел. Многие ОСРВ имеют очень скромные аппетиты (и масштабируются при этом от автономных ПЗУ до многопользовательских сетевых приложений) и могли бы неплохо работать на персональных компьютерах, которые ныне угрожающими темпами перекочевывают живьем из офисов на свалку.
Не удивительно, что DSP можно, образно говоря, воткнуть куда угодно: они крайне неприхотливы к окружающему «железу» и готовы функционировать под управлением «лично-ПЗУшного» кода. Производители выпускают немало гибридов, объединяющих DSP и микроконтроллер, что фактически дает бортовой микрокомпьютер.
Самые характерные черты DSP:
-
рекордная скорость выполнения определенных вычислений;
-
компактность и малое энергопотребление;
-
благоприятное соотношение цена/производительность;
-
способность к запараллеливанию с DSP-собратьями для наращивания производительности.
С другой стороны, усовершенствование обычных процессоров (GPP - General Purpose Processor) не обходится без заимствования решений, типичных для DSP. Лучший пример - появление технологии MMX, содержание которой сводится к 57 инструкциям по обработке сигналов и видео. При этом полезно иметь в виду, что ни одна из «виндовых» операционных систем не является ОС реального времени, хотя порою обладает некоторыми чертами таковой.
DSP or QPP?
Вопрос, что лучше: DSP или GPP, возникает не из праздного любопытства. В более корректной постановке он звучит так: когда применять DSP, а когда GPP?
Конечно, простому пользователю чаще приходится выбирать лишь между полным апгрейдом своей ненаглядной персоналки или частичным апгрейдом вкупе с очередным приобретением какой-нибудь платы типа аппаратного декодера DVD [2].
А вот кому придется поломать голову над данным вопросом, так это студентам АСУ и зрелым программистам-системотехникам, которым предстоит разрабатывать технику XXI века. Кто знает, может быть, завтра кому-то из нас суждено придумать-создать нечто, чтобы реакторы ни с того ни сего не взрывались, газо- и нефтепроводы не лопались, субмарины не тонули и системы пожарной сигнализации не изводили ложными срабатываниями настолько, чтобы их «вырубали из розетки».
По большому счету, сравнивать в лоб DSP и GPP - все равно что сравнивать сверкающий хромированным кенгурятником монстроподобный джип-вседорожник с молниеносным болидом Формулы-1 или с экономично-резвым шоссейно-переднеприводным «народным вагоном». У каждого свое предназначение, своя ниша рынка, свои преимущества и недостатки. Хотя существуют и смежные области, в которых DSP и GPP еще посоревнуются за звание абсолютного лидера продаж. Какие именно? Не будем спешить с предположениями.
Справедливости ради отметим, что спектр DSP чрезвычайно широк: от скромной, ограниченной по функциям целочисленной «мелюзги» до всеядных программируемых ультра-«кремней». Производителей DSP в мире поболее, чем производителей GPP: Analog Devices, Texas Instruments, Motorola, Siemens, Hitachi, Lucent Technologies, IBM, DSP Group, Mentor Graphics, Zoran, Cirrus Logic… Линейка продукции одной только Texas Instruments насчитывает больше десятка процессоров. Тактовая частота - от 30 до 300 МГц, поддерживаемая память - от 64 Кбайт до 4 Гбайт. Цена варьируется от пяти до более сотни «вечнозеленых» при закупочной партии в 10 тыс. штук.
Сущности
С момента появления в начале 80-х первых коммерческих DSP возможности этих микропроцессоров существенно возросли (см. рис. 1), но осталась неизменной специализация на быстром выполнении тех или иных математических операций. В цифровой обработке сигналов, будь то фильтрация или преобразование сигнала из временной области в частотную, чаще всего используется многократно повторяющаяся операция умножения (например, вектора на вектор) с накоплением суммы.
Первая особенность DSP - способность выполнять операцию умножения с накоплением суммы, часто называемую MAC (от Multiply-Aссumulate), за один цикл (single instruction cycle). Вторая особенность всех DSP - способность совершать несколько обращений к памяти опять-таки за один цикл. Третья особенность - генерация адресов регистров параллельно с выполнением арифметических операций. Все перечисленное предопределило тяготение к гарвардской архитектуре, согласно которой программы и данные хранятся в раздельных запоминающих устройствах, и процессор может одновременно обращаться к двум банкам памяти через две различные шины. Тогда как обычные процессоры, имеющие фон-неймановскую архитектуру, требуют дополнительных циклов, в частности, чтобы генерировать адреса, необходимые для загрузки операндов. А операнды не могут быть загружены, пока не будут выполнены инструкции, поскольку есть только одна шина данных.
Некоторые DSP имеют встроенные специальные функции, например, адресацию с реверсированием бит, что облегчает задачу получения результата в алгоритмах быстрого преобразования Фурье (БПФ).
Чтобы обеспечить быстродействующий ввод и вывод данных, большинство DSP обладает несколькими интерфейсами ввода-вывода (последовательными и/или параллельными) и специализированными механизмами обработки ввода-вывода типа прерываний низкого уровня и прямого доступа в память (DMA). Благодаря этому высвобождается процессор. В некоторых DSP-семействах, особенно TMS320C4x и ADS2106x, предусмотрены специальные аппаратные средства (например, коммуникационные линки), облегчающие создание мультипроцессорных систем с параллельной обработкой данных.
DSP с плавающей запятой имеют более широкий динамический диапазон и обычно поддерживают большее пространство памяти, чем DSP с фиксированной (целочисленной) арифметикой, и поэтому проще программируются. Ясно, что когда нет нужды постоянно проверять переполнение, то и программировать веселее, и рожденный код будет выполняться шустрее [3]. Эх, если б не крайне выгодная цена целочисленных DSP…
Одной из первых попыток превращения «окошек» в ОС реального времени было создание IA-SPOX, берущей свое начало от SPOX - ОСРВ, признанной большинством изготовителей DSP. IA-SPOX представляет собой набор виртуальных драйверов, которые работают совместно с ядром Windows. Intel сделала ставку на IA-SPOX, чтобы реализовывать мультимедиа-функции программным путем (так называемые Native Signal Processing) без использования DSP [7]. Тогда Microsoft, очевидно, сделала предложение, от которого Intel «не смогла отказаться», и в результате мир заполонили ММХ-процессоры под управлением Windows, развивающейся традиционным путем. Интересно, какие шаги предпримут законодатели мод теперь, ведь справедливый натиск DSP становится все ощутимее? Недаром ставший стандартом де-факто Sound Blaster, в котором активно используется DSP-технология, ассоциируют с троянским конем, проложившим DSP путь на материнские платы [8]. |
Нюансы программирования
Фундаментальный вопрос: как программируемый DSP будет… программироваться!
Удивительно, но большая часть программ для DSP все еще пишется на ассемблере. По крайней мере, любой листинг на Си пестрит ассемблерными вставками. Задачи, требующие применения DSP, часто накладывают взаимоисключающие требования, и программисты ограничены в использовании трансляторов (сред разработки), генерирующих «медленный» ассемблерный код. Они вынуждены оптимизировать код вручную, минимизируя время его выполнения и приводя размеры программ к приемлемым значениям, что особенно актуально в крупносерийной продукции, где разница в стоимости более производительного DSP или дополнительного процессора может сыграть решающую роль [1].
В последнее время на рынке появляются все новые и новые среды разработки с упором на элементы графического программирования. Тут и VisualDSP от Analog Devices, и Pegasus от Jovian Systems и многие другие. Все бы хорошо, складывай и складывай кубики, как в конструкторе Лего, да код неповоротливый и длиннющий получается. Более того, может выйти «накладочка» с выбором операционной системы, АЦП или самого DSP.
Операционные системы и среды разработки
Популярная среди операционных систем реального времени VxWorks имеет большие возможности для применения нескольких процессоров. Активно внедряется специализированная ОС WiSP, основанная на VxWorks, со средой разработки Tornado, но поддержка некоторых популярных DSP в ней пока не реализована.
Необходимо отметить, что Texas Instruments и Analog Devices обеспечивают потребителей собственными инструментальными средствами разработки (Cи-транслятором, отладчиком, компоновщиком, Cи-библиотекой, математическими и DSP-библиотеками, загрузчиком), включая драйверы для WinNT и/или некоторых ОС реального времени.
Имеются специальные ОС реального времени: Parallel C (теперь называемая Diamond), Virtuoso, SPOX, которые оптимизированы для DSP и даже для… Pentium (как SPOX). Одно из отличий этих OС - то, что код программы выполняется не только на главном (host) процессоре, но и на процессорах DSP целевой (target) платы. Следовательно, этот код распределен по многим различным типам памяти, обычно расположенным на DSP-платах: быстрая SRAM, медленная DRAM, внешняя ROM и энергонезависимая оперативная память. При этом необходима очень осторожная организация потоков данных между устройствами ввода-вывода, DSP и CPU. Отметим, что Windows (95 или NT) может быть установлена и функционировать на host CPU, размещенном на той же самой шине, что и платы target DSP, но не все DSP-платы поддерживают такую комбинацию без дополнительного специального программного обеспечения [2].
В случае операционной системы Diamond, Win32-сервер (драйвер связи) заботится о загрузке и старте приложений Diamond, связи между host- и target-системами, и об обслуживании запросов ввода-вывода из target-платы. Diamond - система с кросс-разработкой, загружаемая из PC-совместимого компьютера под управлением DOS/Windows, или из SPARC-системы под управлением Sun OS 4.x или Solaris 2.x. Исходные файлы хранятся, редактируются и компилируются на host-компьютере, что позволяет использовать стандартные инструментальные средства. Полезно помнить, что программирование требует наличия инструментальных средств разработки 32-битных приложений, поддерживающих Microsoft Foundation Classes.
Для простых применений, где не нужно запараллеливать несколько DSP и каждый DSP по отдельности выполняет одну простую функцию, можно обойтись без специализированной операционной системы: код для DSP просто загружается в ПЗУ на target-плате. Когда же возрастает количество и сложность задач, возлагаемых на DSP, использование ОСРВ будет оправданно, - дабы распределить ресурсы системы (оперативная память и т. д.), а также потоки обработанных и необработанных данных.
Ожидается, что в ближайшем будущем появятся очень мощные и простые в использовании среды разработки программного обеспечения для DSP в различных ОС реального времени. ОС Diamond активно поддерживается разработчиками подобных сред, но количество драйверов пока ограничено. Ходят слухи, что уже удается «полуавтоматом» генерировать коды, размер которых лишь на 25% больше кустарного.
1 (обратно к тексту) - В каждой стране, особенно с нездоровыми амбициями, DSP норовят обозвать по-своему: не удивляйтесь, если где-то услышите «цифрова обробка процессор» или что-то в этом духе.
2 (обратно к тексту) - Владельцы компьютера хуже РII-400 будут разочарованы качеством программного декодирования DVD-видео из-за дергания картинки (при быстром перемещении в кадре немелких объектов или смене крупных планов). Обладателей же Р-100 не спасет и аппаратный декодер - звук (на выходе самого декодера) при проигрывании DVD будет заикаться.
3 (обратно к тексту) - Одна из попыток преодолеть ограничения целочисленной арифметики - проект SARITH (Safe ARITHmetic). - Г.Б.
Есть два пути выбора DSP. Первый начинается с выбора оптимального соотношения стоимости/эффективности DSP для конкретной задачи, после чего создается программное обеспечение, вручную или путем использования подходящей простой среды разработки приложений (если таковая будет найдена для выбранного DSP).
Второй - с выбора удобной среды разработки программного обеспечения для DSP (подобные среды, как правило, все еще поддерживают ограниченное число процессоров), после чего остается выбрать более или менее подходящий DSP, а на оптимизацию соотношения стоимость/эффективность, как правило, закрывают глаза.
При штучном производстве второй путь еще как-то оправдан. При массовом - лучше идти первым путем. Очевидно, и в том и в другом случае целесообразно использовать готовые библиотеки ЦОС.
Советую воспользоваться бесплатным виртуальным «DSP Калькулятором» [3], чтобы предварительно выбрать DSP для вашей задачи. При этом следует хорошо представлять, какой величины поток входных/выходных данных будет обрабатываться. Например, для 64-канального сонара получим 25,6 Мбит/с (16 бит, 200 кГц), а для радара входной и выходной потоки вместе потянут на 160 Мбит/с (12 бит, 40 МГц).
Oценка производительности
Обычно быстродействие DSP измеряется в миллионах инструкций в секунду (МIPS). Но одна инструкция может содержать разное число команд для разных процессоров. При измерении производительности в миллионах операций в секунду (MOPS) или миллионах операций с плавающей запятой в секунду (MFLOPS) понятие «операция» порой трактуется по-разному. Иногда для сравнения используется MMACS (миллионы умножений/сложений в секунду), но при таком подходе не учитывается, как вводятся блоки данных и обновляются указатели, как выполняются параллельные функции и др. Например, если сравнить процессоры TMS320C6202 (250 МГц) и TMS320C549 (120 МГц), то соотношение по МIPS составит примерно 17:1, а по MMACS - примерно 4:1. При этом соотношение по скорости вычислений составит около 2:1 для фильтра и ~8:1 для быстрого преобразования Фурье [1].
Реальная производительность DSP зависит от особенностей конкретной прикладной задачи (программы)! Грубо говоря, не исключено, что для фильтрации будет оптимален один DSP, для вычисления БПФ - другой, а для выполнения некой специфической задачи - третий.
В сравнении производительности при выполнении некой практической задачи таится другая опасность. Например, при декодировании АС-3-звука 39% ресурсов уходит на обратное преобразование косинусов (IDCT), 11% - на нормировку, 25% - на блочно-оконную предобработку и 25% - на остальные подзадачи [1]. Поскольку каждый DSP в рамках той или иной подзадачи программируется по-своему, то получаем сравнение искусства программиста, а не производительности процессора.
Таким образом, для оценки производительности целесообразно использовать комплексный подход, оценивая скорость выполнения нескольких элементарных базовых (kernel) задач.
Азбука DSP: цифровой фильтр
Специфику работы DSP легче понять, если в качестве примера рассмотреть алгоритм цифрового фильтра. Возьмем FIR - Finite Impulse Response (или, по-русски, КИХ) фильтр, как наиболее простой. Из названия следует, что фильтр имеет конечно-импульсную характеристику, то есть его отклик на мгновенное воздействие ограничен во времени. Амплитудно-частотная характеристика (АЧХ) фильтра неизбежно будет отличаться от идеальной, особенно на границах рабочей полосы фильтра, как бы мы ни пытались подобрать весовые коэффициенты. Желающим поупражняться в конструировании цифровых фильтров рекомендуем скачать бесплатную (по крайней мере, до 1 декабря) программку, зарегистрировавшись по адресу www.techonline.com/analog/2192.htm [4].
Отклик фильтра в момент времени t вычисляется следующим образом (для прозрачности запишем на «школьном» Паскале):
Y[t]:=0;
for i:=1 to N do Y[t]:=Y[t]+W[i]*X[t-i];
где X[i] - исходный сигнал, W[i] - весовые коэффициенты.
Каждый раз для получения одного значения на своем выходе некаузальный фильтр использует предысторию сигнала в пределах N отсчетов. Поэтому при поступлении очередного отсчета приходится переставлять элементы массива X, сдвигая их на один влево и отбрасывая уже не нужный первый элемент массива. Не влезая в дебри, замечу: эта процедура на DSP отъедает значительно меньшую часть вычислительных ресурсов, чем на GPP.
Нетрудно прикинуть, что для стереосигнала [5] с частотой дискретизации 44100 Гц вычисление каждого выходного значения фильтра должно осуществляться (в реальном времени) в течение интервала между отсчетами: 1/44100/2=~11 мкс. Для N=128 (чем больше, тем точнее фильтр будет вырезать ненужные частотные составляющие) получаем 128 умножений плюс 128 сложений, то есть очень приличную задачку, которая может стать не по зубам многим хваленым GPP.
Кстати, для подавления эха в телефонных линиях используется адаптивный FIR-фильтр, в котором весовые коэффициенты постоянно обновляются (подстраиваются) согласно алгоритму LMS. В этом случае добавляется как минимум N+1 сложений и N умножений.
При кодировании-сжатии стереозвука число одновременно задействуемых фильтров может достигать 32. Правда, это простые полосовые фильтры с некоторым проникновением частотных компонентов в рабочие области частот соседних фильтров, так что вычислений не столь много, и самым крутым GPP «сам бог велел» успевать делать это в реальном времени.
Итак, FIR-фильтр - это базовая задача цифровой обработки, в силу своей простоты не слишком подверженная влиянию особенностей алгоритмического воплощения. Поэтому добросовестные производители DSP указывают время, за которое вычисляется либо одно выходное значение фильтра, либо блок из нескольких дискрет. Также поэтому FIR-фильтр используется независимыми тестерами производительности DSP. На рис. 3 можно видеть время выполнения фильтрации разными высокопроизводительными DSP и PIII-1000. Трехкратный «тормоз» того же 100-мегагерцового ADSP-21160 относительно гигагерцового Pentium, по сути, нельзя считать явным проигрышем, поскольку, например, по одному DSP можно посадить рядышком с АЦП на каждый канал, а вот с «пнем» такой фокус не пройдет: вентиляторов не напасешься. Целочисленным 250-мегагерцовому TMS320C6202 и трехсотке от Siemens удалось обскакать многоуважаемый GPP, но, опять-таки, суть не в скорострельности как таковой, а в том, что каждый процессор должен заниматься своим делом.
БПФ: от тестов к практике
БПФ стало базовой задачей цифровой обработки сигналов благодаря своей фундаментальности и массовому применению. Не буду утомлять рассказом про так называемые бабочки самого алгоритма БПФ (хотя эти бабочки определяют программирование алгоритма), отмечу только, что обработка данных происходит исключительно блоками. Например, накопили блок из 1024 отсчетов, после чего вычислили БПФ, продолжая параллельно накапливать следующий блок дискрет, и т. д. При этом сдвижка в реальном времени между блоками на одну дискрету практически не используется в «мирной» обработке сигналов из-за высокой требовательности к вычислительным ресурсам.
Зависимость скорости вычислений от объема блока - нелинейная, так что, например, для 2048 отсчетов время вычислений возрастет не в два раза (относительно 1024 отсчетов), а больше [6]. Тем не менее БПФ используется во всех «правильных» тестах по оценке производительности DSP.
Поскольку лишь некоторые DSP заточены под БПФ-вычисления, в высокопроизводительных системах реального времени применяются комбинации различных DSP. Так, векторный LH9124 от Sharp наиболее подходит для выполнения интенсивных математических вычислений при высокоскоростном вводе данных. В частности, фирма Sundance MultiProcessor Technology [4] производит почти не устаревшую «милитаристскую» плату SMT311 (512 Кбайт быстрой SRAM, 32 Кбайт ROM начальной загрузки, 12795 долларов), которая имеет интегральный двойной конструктив на основе TMS320C44 и LH9124 и оптимизирована для БПФ (1024 точки комплексного БПФ за 80 мкс). Следует отметить, что SMT311 (см. рис. 4) был спроектирован именно для обработки гигантских потоков данных, параллельной обработки больших массивов, в частности для радаров и гидроакустики. SMT311 можно подключать к несущей плате модели SMT301 (размер «C», восемь TIM-слотов, 4795 долларов). Пусть цены вас не пугают, высокая надежность (особенно конструктива VME) в жестких условиях эксплуатации того стоит.
Специализированные БПФ-процессоры являются «закрытой» продукцией; самый быстродействующий из известных - это, пожалуй, DSP-24, который вычисляет 1024 точки комплексного БПФ за 21 мкс [5]. Другой DSP общего назначения - ADSP 2106x SHARC (40 МГц, 560 Мбит/с общий ввод-вывод, 4 Мбайт, расширенная точность 40 бит, поддержка многопроцессорности) - имеет быстродействие 385-510 мкс для 1024 комплексных точек и 260 мкс для реальных чисел. Еще один высокоэффективный DSP с плавающей запятой - TMS320C67 (167 МГц, ~400 Мбит/с, 1 Мбайт, 64 бит, двойная точность) - вычисляет 1024 точки за 109 мкс, тогда как TMS320C6201 (с фиксированной точкой) - за 70 мкс [6]. [7] Последние используются ведущими российскими фирмам при производстве DSP-модулей для шин PCI, CompactPCI и VME (рис. 5). Так что, расплатившись родными деревянными, хочешь - втыкай DSP в «домашнюю» персоналку, а хочешь - в «промышленный» крейт со встраиваемым host-процессором. Альянс одного GPP и нескольких DSP - вот золотая середина!
DSP |
Цена, S |
Производительность |
Частота, МГц |
Арифметика |
Примечание |
TMS320C6712 |
~10 |
600 MFLOPS |
100 |
Плавающая |
Производительность достаточна для кодирования шести каналов ААС-звука в реальном времени |
ADSP-2199 |
~5 |
320 MIPS |
160 |
16 бит |
Голосовые технологии, подавление эха, модемы, факсы |
TMS320DSC21 |
<15 |
100-500 MIPS |
? |
? |
Объединяет ядра ARМ7, C54X и два сопроцессора обработки изображений. Используется в цифровой фотокамере Hewlett-Packard PhotoSmart 315 (рис. 6) |
CS49300 |
15 |
? |
? |
? |
Универсальный DSP-аудиодекодер: 24 бита, 192 кГц, до восьми каналов AC3/THX EX, DTS, AAC, MPEG, PCM, LMP |
Вместо заключения
Перефразируя знаменитого режиссера, нередко после прочтения некого опуса хочется воскликнуть: «О чем статья? Да ни о чем…»
Так о чем же все-таки эта статейка? Да простят меня читатели за «галоп по Европе», но желание приоткрыть мир DSP, который существует и бурно развивается независимо от представления о нем массовых пользователей, было абсолютно искренним.
Реальная тенденция такова, что каждый из нас неизбежно столкнется с DSP: как покупатель готовой продукции и/или ее разработчик.
Безусловно, для некоторых читателей информация, изложенная в статье, не станет открытием. Но если кто-то придет к выводу, что при выборе своей будущей специальности или при создании российского продукта на уровне мировых стандартов ему не обойтись без DSP, то цель статьи будет достигнута. Кстати, взрывной спрос на DSP-программистов более чем вероятен, а уж «за бугром» и подавно.
Напоследок в полной уверенности скажу: кто сегодня прозевает DSP, того завтра опередят более мудрые конкуренты.
Источники
[1] www.bdti.com.
[2] www.3L.com/tech/ws32/boards.htm.
[4] www.sundance.com.
[6] www.orc.ru/~insys/dspcard/adp6267pci.htm.
[7] С. Сорокин. Windows// Современные технологии автоматизации №2, 1997, с. 18.
[8] www.analog.com/publications/whitepapers/products/soundbls.html.
4 (обратно к тексту) - Позволяющую вдобавок рассчитывать БИХ-фильтры и тут же проверять импульсные, фазовые, амплитудные и иные характеристики синтезированного фильтра. - Г.Б.
5 (обратно к тексту) - И, соответственно, двух каналов.
6 (обратно к тексту) - Наряду с вычислением БПФ двух последовательностей длиной 1024 отсчета дополнительно потребуется 2048 умножений. - Г.Б.
7 (обратно к тексту) - Ради интереса сравните с данными из следующей статьи. - Г.Б.