Звуковой процессор dsp что это
Перейти к содержимому

Звуковой процессор dsp что это

  • автор:

Что такое процессор звука и для чего он нужен

Какими основными функциями обладает автомобильный процессор звука, какого звучания можно добиться с его помощью. Что умеет делать со звуком акустический процессор.

Что из себя представляет звуковой процессор и каковые его функции.

  • Многие автовладельцы вполне довольны звуком штатной аудиосистемы. Однако истинным меломанам всегда хочется его усовершенствовать. Создание качественного автозвука является непростым делом, т. к. акустические характеристики салона машины далеки от идеала. Шумоизоляция слабее, чем в помещении, звуковые волны отражаются одними частями интерьера салона и поглощаются мягкой обивкой кресел, водитель и пассажиры располагаются не в центре по отношению к динамикам – все это неизбежно искажает звучание. Проблему решит процессор, он же DSP (Digital Signal Processor). Это один из важных элементов акустической системы, с помощью которого можно получить максимально качественный автозвук .

Функции звукового процессора

  • Устройство позволяет с высокой точностью настроить различные характеристики звукового сигнала. Он координирует работу всей акустической системы автомобиля. При этом ее элементы продолжают находиться на своих местах: изменение параметров звуковой волны происходит с помощью электроники.
  • К основным функциям процессора относятся:
  • Равномерное распределение звуковой волны. Динамики в салоне автомобиля расположены на разном расстоянии от водителя или пассажира. Так, один из них будет всегда находиться ближе другого. Таким образом, звук будет неравномерным, поскольку один динамик всегда подавляет другой. Процессор способен скорректировать временные задержки звуковых волн. Он также может «сместить» один или несколько динамиков относительно пассажира или водителя, чтобы сконцентрировать звук четко на уши. Это усиливать впечатление от прослушивания музыки.
  • Фильтрация частот. Процессору под силу ограничивать сигналы, которые не способен воспроизводить источник звука. Иными словами, он способен отсечь низкие сигналы, предназначенные для высокочастотного устройства.
  • Акцентирование или «задавливание» определенных частот. Процессор может по-разному задерживать звуковые волны, например перемещать вперед только басы. Данная функция необходима при согласовании сабвуфера и фронтальной акустики. При этом устройство может выступать в роли эквалайзера, в том числе многополосного.
  • Выравнивание амплитудно-частотных характеристик (АЧХ). Интерьер салона машины сделан из разных материалов. По этой причине звуковая волна сильно искажается, т. е. в ней происходят так называемые провалы и пики. Звук считается идеальным, когда совпадают АЧХ слышимого человеком сигнала и воспроизводимого источником. Процессор производит подобную коррекцию.
  • Имитация разных звуковых полей. Устройство способно воссоздавать в салоне автомобиля акустическую обстановку концертного зала, театра, стадиона, храма и т. д. Подобная функция в разы снижает утомляемость слушателя за счет исчезновения ощущения замкнутого помещения. Благодаря ей даже хорошо знакомый трек зазвучит по-новому.
  • Некоторые модели имеют ряд дополнительных функций, среди которых полное вырезание вокала из треков, регулировка громкости звучания автомагнитолы в зависимости от скорости передвижения и т. д.
  • Важна грамотная установка процессора. Только в этом случае можно в полной мере оценить все функции данного устройства.

Источник:

Как DSP-процессор улучшает звук

Работа микрофона заключается в преобразовании звуковых волн, распространяющихся по воздуху, в звуковой сигнал, который можно передавать, усиливать или записывать. За исключением небольших комнат, одного микрофона почти никогда не бывает достаточно. Большинство конференц-залов требуют нескольких микрофонов, которые должны формировать общий микс. Необработанные сигналы от микрофонов похожи на певцов в хоре — независимо от того, насколько они хороши в одиночестве, важно то, как они выступают вместе.

Необходима некоторая пост-обработка, которая полирует и совершенствует каждый отдельный сигнал микрофона, а затем объединяет их в сбалансированный, гармоничный микс. В старые времена для этого требовался рэк, полная коробок с ручками, лампами и счётчиками, которые должны были тщательно настраиваться опытным звукорежиссером для одновременной работы.

К счастью, больше не нужно погружаться в тёмное искусство звуковой инженерии, чтобы выполнить свою работу; теперь все важные процессы могут быть выполнены одним устройством, называемым процессором цифровой обработки сигналов (англ. DSP – Digital Signal Processing). DSP-процессор может быть автономным аппаратным устройством или частью приложения, работающего на ПК, но не каждый DSP-процессор подходит для рабочих мест или университетов. DSP-процессор для видеоконференций имеет дело с видео, управлением вызовами и другими задачами; аудио – это только один из пунктов в списке дел.

То, что вам нужно, — это отдельный DSP-процессор для звука, который предназначен для работы с микрофонами и посвящает всё свое внимание тому, чтобы сделать звучание речи настолько естественным, насколько это возможно. Как и швейцарский армейский нож, DSP-процессор для звука оснащён полным набором инструментов для оптимизации слышимости и разборчивости.

ПРОБЛЕМЫ СО ЗВУКОМ, КОТОРЫЕ МОЖЕТ ИСПРАВИТЬ DSP-ПРОЦЕССОР

В недавнем опросе 80% специалистов назвали проблемы со звуком главными источниками разочарования при проведении виртуальных встреч. Большинство видеоконференций страдают от одного и того же набора хронических проблем. Каждый из инструментов или «блоков обработки» в вашем DSP-процессоре имеет определённую цель и решает одну из следующих проблем:

Проблема №1: Слишком громко или слишком тихо

Одной из самых распространённых проблем со звуком во время видеоконференций является обычное рассогласование по уровням. Иногда люди на одной стороне звонка недостаточно громкие, а иногда они слишком громкие. Решением является автоматическая регулировка усиления (АРУ), которая регулирует уровень каждого канала микрофона (или входного сигнала с удалённой стороны) для обеспечения постоянной громкости. Как хороший звукорежиссер, АРУ немного усиливает голоса тихих спикеров и немного понижает громких. Это идеальный подход для конференц-залов, где расстояние между говорящим и микрофоном различается, поскольку в помещении выступают разные люди.

Проблема №2: Звук как из бочки

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

Проблема №3: Эхо, эхо, эхо.

Во время видеоконференции звук, выходящий из динамика, может быть захвачен микрофоном и повторно передан обратно на дальнюю сторону, что вызывает раздражающее эхо. Акустическое эхоподавление (англ. AEC – Acoustic Echo Canceller) в цифровом виде удаляет входной сигнал удалённой стороны из выходного сигнала, чтобы предотвратить это. Большинство приложений для проведения видеоконференций (например, Microsoft Teams, Zoom или Skype for Business) имеют одноканальный встроенный AEC, который лучше всего подходит, когда вы присоединяетесь к одному из этих собраний с ноутбука. Но для больших переговорных комнат и аудиторий с несколькими участниками и микрофонами для хорошего качества звука требуется внешний DSP-процессор, который выделяет отдельный блок AEC для каждого канала микрофона.

Проблема №4: Отвлекающий шум

В большинстве переговорных комнат присутствует некоторый фоновый шум, вызванный проекторами или компьютерами, системами отопления, вентиляции и кондиционирования воздуха, гулом в здании или окружающим шумом, проникающим извне. Люди в комнате могут не заметить этого, но микрофоны их улавливают. Эквализация может отрегулировать большую часть гула и шипения на низких и высоких частотах, но электронное шумоподавление в цифровом виде удаляет шум, который перекрывает речевой диапазон, поэтому он не слышен участникам собрания. Эффективность DSP-процессора с хорошим шумоподавлением может быть просто удивительной.

Проблема №5: А сейчас слышно?

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

Проблема №6: Звук не синхронизирован с видео

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

DSP-ПРОЦЕССОР: УСТРОЙСТВО ИЛИ ПРОГРАММА?

DSP-процессор для аудио-конференц-связи должен быть расположен там, где это наиболее целесообразно для вашего использования. В малых помещениях микрофон со встроенным DSP-процессором (например, Microflex Advance MXA710 или MXA910) исключает необходимость использования внешнего оборудования и упрощает настройку. В комнатах среднего и большого размера с несколькими микрофонами и другими источниками сигнала DSP-процессор в виде отдельного устройства (например, IntelliMix P300) обеспечивает большую мощность, гибкость и возможности подключения как к аппаратным, так и программным кодекам. Кроме того, Shure также предлагает программное решение DSP, IntelliMix Room, которое может работать на ПК в помещении или на устройстве для проведения видеоконференций, что упрощает развёртывание и обеспечивает централизованное обслуживание сотрудниками IT-службы. Независимо от форм-фактора, высокопроизводительный DSP-процессор обеспечивает естественный звук, который облегчает общение без лишних усилий и максимизирует отдачу от ваших инвестиций в оборудование и технологии.

Подробнее о цифровой обработке сигнала читайте здесь.

В чем суть такой штуки как DSP? Что это? (1 онлайн

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

Itachi1701
Member

3 Авг 2017 43 12 8

Можете в двух словах объяснить что это значит простым языком?
В мониторах вижу в спецификациях пишут о некоем встроенном DSP.
Отсюда еще второй вопрос — влияет ли качество ЦАП\АЦП на звук, который воспроизводят мониторы с этим DSP или эта штука выдает один и тот же звук не зависимо от качества звуковой карты?
Извиняюсь за нубство, но тема как раз для новичков так что спрошу. камнями не кидать если что.

H-ron
Well-Known Member

13 Апр 2011 7.650 5.772 113 58 Москва

@Itachi1701, DSP — Digital Signal Processor. Специализированный процессор для обработки цифрофых сигналов. Может ачх подправить.

Itachi1701
Member

3 Авг 2017 43 12 8

влияет ли
качество ЦАП\АЦП на
звук, который воспроизводят
мониторы с этим DSP
или эта штука выдает
один и тот же звук не
зависимо от качества
звуковой карты?

digilab2
Well-Known Member

19 Июн 2012 12.343 6.451 113 68 Москва www.skbprost.ru

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

Последнее редактирование: 19 Фев 2018

sunet
Victor Buruiana, 1959

18 Июл 2005 12.078 6.372 113 64 Chisinau, Moldova

@digilab2, Судя по вопросу, такой ответ окончательно запутает вопрошавшего. зачем ему эти технические подробности?

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

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

Качество звуковой карты будет влиять на звук в любом случе.

DSP-процессоры: назначение и особенности

источник: https://innovas-services.fr/solving-business-problems/

Большинство из нас в повседневной жизни постоянно сталкивается с различными компьютерными системами: процессорами общего назначения (general-purpose, в основном x86) в ноутбуках и рабочих станциях, их мощными многоядерными версиями в датацентрах, мобильными процессорами в телефонах, многочисленными контроллерами в бытовой технике и на транспорте. Но помимо всех упомянутых вариантов есть ещё одно важное, хотя и редко упоминаемое семейство: цифровые сигнальные процессоры, чаще именуемые Digital Signal Processors или просто DSP.

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

В этой статье будет кратко изложена история DSP, их отличие от процессоров общего назначения, особенности их архитектуры, а также будет подробно рассказано о способах оптимизации кода.

История

Первые DSP появились в 1970-х годах. Эти процессоры стали логичным развитием специализированных аналогово-цифровых устройств, предназначенных для обработки речи, прежде всего её кодирования и фильтрации (прорыв в соответствующих научно-технических отраслях стал возможен благодаря спросу на эти технологии в годы Второй Мировой войны). Трудоемкость и сложность разработки устройств под каждую возникающую задачу, а также успехи в развитии электронной базы (широкое распространение технологии MOSFET) и математических алгоритмов (БПФ, цифровая фильтрация) привели к возможности создания универсальных, т.е. программируемых, цифровых процессоров, которые могли быть с помощью программ адаптированы для широкого класса задач. Адаптируемость на практике означала снижение стоимости разработок, сокращение времени выхода на рынок (time-to-market), возможность послепродажного обновления алгоритма для устранения ошибок, возможность поддержки новых требований пользователей. Во многих случаях эти возможности с лихвой компенсировали ухудшение производительности по сравнению со специальными ускорителями.

Рис. 1 Первый крупный успех DSP: планшет Speak&Spell (Texas Instruments, 1978)Рис. 2 С момента появления стандарта GSM DSP являются обязательным компонентом мобильных сетейРис. 3 Обработка изображений в камерах (дебайеризация, удаление шумов, фильтрация) также выполняются на DSP (источник: https://snapshot.canon-asia.com/india/article/en/5-things-made-possible-with-digic-image-processor)

Из-за необходимости обработки в реальном времени и экономии электроэнергии DSP сильно отличались от процессоров общего назначения. В каком-то смысле они были первым примером программируемых вычислительных ускорителей, т.е. процессоров, максимально эффективно решающих определённый класс задач.

Преимущества DSP

Чем же именно отличаются DSP от обычных мощных процессоров общего назначения, особенно таких мощных как Intel Xeon или Cortex-A, и почему процессоры общего назначения не используют для обработки сигналов? Чтобы ответить на этот вопрос посмотрим на топологию современного процессора от Intel.

Рис. 4 Intel Skylake (источник: https://en.wikichip.org/wiki/intel/microarchitectures/skylake_(client) )

Из рисунка мы видим, что значительная часть площади кристалла отводится не под вычислительные ресурсы, а под сложную логику определения зависимостей, спекулятивного исполнения (out-of-order speculative execution) и составления расписания (scheduling). В сумме накладные расходы приводят к тому, что “КПД” процессора, т.е. энергия, затрачиваемая на выполнение реальных вычислений, составляет менее 1%:

While a simple arithmetic operation requires around 0.5–20 pJ, modern cores spend about 2000 pJ to schedule it.

Conventional multicore processors consume 157–707 times more energy than customized hardware designs.

(из статьи “Rise and Fall of Dark Silicon”, приведённой в списке литературы).

Чтобы сделать сравнение более конкретным, возьмём мощный процессор общего назначения от Intel и мощный DSP фирмы Texas Instruments (например Skylake Xeon Platinum 8180M и TMS320C6713BZDP300):

CPU (Intel)

DSP (TI)

Частота

Число ядер

Пиковая производительность

Энергопотребление

Out-of-order

Цена

$13K (+ система охлаждения)

$35 (оптовая цена)

Target applications

— Большое число циклов

— Высокий параллелизм по данным

— Регулярный паттерн доступа в память

Производительность / Вт / ядро

(в 17 раз лучше Intel)

Производительность / Вт / ядро / $

(в 7000 раз лучше Intel)

Легко видеть, что хотя абсолютные значения производительности у DSP существенно ниже, удельная производительность на 1 ватт потребляемой мощности выше на 4 (!) порядка. Конечно такое сравнение не совсем корректно: DSP могут достигать пиковой производительности только на весьма специфических задачах обработки сигналов: свёртках, БПФ, фильтрации и т.д. Такие задачи характеризуются высокой регулярностью обрабатываемых данных (плоские массивы в памяти, обрабатываемые в циклах) и большим параллелизмом по данным.

Архитектура DSP

Специфика решаемых задач оказывает существенное влияние на архитектуру и системное ПО для DSP. По словам Jennifer Eyre, аналитика исследовательского центра BDTI, “архитектура DSP формируется теми задачами, которые на них считаются” (“Architecture of DSP is molded by algorithms”, из “Evolution of DSP Processors”). Перечислим особенности таких задач:

  • Практически бесконечный параллелизм уровня команд (ILP, Instruction Level Parallelism)
  • Большинство алгоритмов (свертка, быстрое преобразование Фурье, вычисления с комплексными числами) сводятся к выполнению операций сложения и умножения над плотными массивами данных
  • Вычисление производятся на встроенных системах, с жёсткими требованиями по энергопотреблению

Таким образом, основными целями являются максимальное использование присущего задачам параллелизма и снижение энергопотребления при выполнении циклов.

Для использования ILP используются различные техники:

  • Векторные инструкции (SIMD, Single Instruction Multiple Data)
  • Сложные инструкции (CISC, Complex Instruction Set Computer):
    1. Составные математические операции (умножение и вычитание с накоплением, гистограммы, спецфункции, комплексные вычисления)
    2. Операции умножения со сдвигом (для арифметики с фиксированной точкой)
    3. Широкий набор режимов адресации (с шагом, с пре- и пост-инкрементом, циклическим обходом и пр.)
    4. Алгоритмо-специфические операции (например подсчёт контрольных сумм сетевых пакетов, криптография, аудио-видео декодеры)
    5. Расширяемые системы команд (в IP-продуктах Ceva и Tensillica)
  • Сильно расслоенная память (для выдачи нескольких параллельных загрузок за такт или индексных обращений в память типа scatter/gather)
  • Избавление от задержек, вызываемых ветвлениями:
    1. Поддержка предикатного выполнения для всех команд процессора (или подавляющего большинства)
    2. Процессорные хинты (специальные инструкции для предзагрузки данных)
    3. Слоты задержки
    4. Быстрые циклы (zero-overhead loops)
  • Вынесение наиболее вычислительно-ёмких алгоритмов (алгоритм Витерби, БПФ, QR-разложение, нейросетевые вычисления) на встроенные ускорители (т.н. fixed function units)
  • Ускорение продолжительных операций с памятью с помощью специальных блоков прямого доступа в память (DMA), с поддержкой произвольных 2D/3D-шагов

Для снижения же энергопотребления используются

  • Переход от действительных чисел на арифметику с фиксированной точкой
  • Нестандартные типы данных (например 20- и 40-битные целые)
  • Упорядоченные (in-order) вычисления, отсутствие спекулятивности (speculation) и внеочередного выполнения (out-of-order)
  • Явное формирование параллельно исполняемых пакетов инструкций компилятором (VLIW)
  • Отсутствие отслеживания процессором зависимостей между инструкциями и перенос ответственности за точное планирование инструкций на компилятор (exposed pipeline)
  • Отсутствие кэшей
    1. Прямое обращение в глобальную DRAM-память приведёт к остановке процессора для выполнения транзакции
    2. Вместо instruction- и data-кэшей используется небольшая (до 1 Мбайта) быстрая SRAM-память, т.н. scratchpad или Tightly Coupled Memory, загрузками в которую явно управляет программист
    3. Для упрощения таких загрузок часто используются оверлеи – специальный механизм разбиения программы на независимые участки, которые могут по требованию динамически подгружаться в TCM, вытесняя друг друга
  • Вместо таблиц предсказания ветвлений (branch target buffer, BTB) в DSP используются различные техники для амортизации ветвлений (слоты задержки, хинты, быстрые циклы)
  • Кластерные регистровые файлы (т.е. разбиение регистрового файла на блоки, регистры которых не могут использоваться вместе в одной инструкции)

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

Некоторые из указанных подходов можно видеть ниже на примере кода для процессора Texas Instruments:

|| LDW .D2T2 *B4++, B5 ; Две параллельные загрузки с постинкрементом

NOP 3 ; Явная задержка для ожидания загрузок

BDEC .S2 L2, B0 ; Инструкция быстрого цикла (декремент + сравнение + goto)

ADD .L1X B5, A3, A3 ; Слот задержки 1

STW .D1T1 A3, *A5++ ; Слот задержки 2

В частности можно видеть

  • инструкцию быстрого цикла BDEC , сочетающую в себе декремент индекса цикла, сравнение с 0 и условный переход
  • явное указание пареллелизма с помощью лексемы ||
  • явные задержки инструкций с помощью NOP
  • использование слотов задержки

Разработка под DSP

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

В частности, при оптимизации под DSP намного более распространены агрессивные режимы компиляции: LTO (link-time optimization) и PGO/FDO (profile-guided/feedback-driven optimization). Важные циклы аннотируются прагмами для явного контроля векторизации и развертки, а указатели помечаются атрибутами restrict/noalias, чтобы позволить компилятору удалять максимально возможное число зависимостей.

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

Сложные технологии оптимизации, такие как автоматические векторизация и распараллеливание, напротив, менее популярны из-за их непредсказуемости и нестабильности: из-за хрупкости соответствующих алгоритмов каждая новая версия компилятора может перестать оптимизировать какой-нибудь важный цикл.

Компилятор и профилировщик, как правило, оснащены механизмами для выдачи отчётов о проведённых оптимизациях и рекомендаций по улучшению кода: добавлению прагм, использованию оптимальных типов данных и пр. (для реализации подобного функционала в Nvidia Nsight даже используется полноценная экспертная система). Анализ и отработка таких рекомендаций является важной частью работ по оптимизации кода.

Стоит отметить, что оптимизация как правило идёт в тесном контакте и поддержке со стороны поставщика DSP, а иногда и напрямую выполняется его сотрудниками.

В пакет разработки DSP наряду со стандартными компонентами (компилятором, ассемблером, оптимизирующим редактором связей, профилировщиком, отладчиком и IDE) часто также входят специфические программы:

  • симуляторы (потактовые и функциональные)
  • host-библиотека с моделями intrinsic-функций, которые позволяют начать разработку и функциональное тестирование кода ещё до готовности симуляторов (а для сложных и долгих сценариев, которые нельзя моделировать на симуляторе из-за длительного времени ожидания – до готовности “железа”)
  • оптимизирующий ассемблер (“linear assembler”), позволяющий автоматизировать часть работ по написанию ассемблерного кода (планирование инструкций, выделение регистров)
  • автотюнер, т.е. более или менее интеллектуальный переборщик флагов компиляции и source-level директив для поиска оптимальной комбинации (иногда автотюнер прямо интегрируется в компилятор)
  • генераторы boilerplate-кода (например RPC-кода для вызова функций DSP с управляющего микроконтроллера)

Компиляторы DSP

Компилятор является неотъемлемым и важнейшим компонентом DSP как продукта. В случае процессоров общего назначения разница между плохим и хорошим компилятором обычно невелика – производительность режима –O2 редко превосходит –O0 более чем в два-три раза (т.к. процессор компенсирует неэффективность с помощью out-of-order выполнения). В то же время для DSP этот разброс легко достигает десятка. Кроме того, сложность программирования на ассемблере гораздо выше, поэтому переписывание на нём всего performance-critical кода обычно невозможно.

Компиляторы DSP как правило основаны на open-source решениях:

  • Open64 (ранние продукты Ceva и Cadence/Tensilica)
  • GCC (Texas Instruments и ранние продукты Qualcomm)
  • LLVM (новые продукты Ceva, TI и Qualcomm, возможно Cadence/Tensilica)

В основном это связано со сложностью самостоятельной поддержки новых версий C++, подходящей для коммерческого использования лицензией и поддержкой новых языков, таких как OpenCL, OpenMP/OpenACC и Halide.

По сравнению с обычными процессорами в случае DSP приходится значительно больше времени уделять разработке бэкэнда, т.е. низкоуровневой части компилятора (например, бэкэнды DSP Hexagon и AMDGPU занимают столько же места, сколько значительно более активно разрабатываемый бэкэнд для AArch64). Это связано с тем, что для архитектур VLIW требуется гораздо более точные модели конвейера и размеров инструкций: в отличие от процессоров общего назначения здесь любая неточность приведёт либо к генерации некорректного кода, либо ко вставке избыточных NOP’ов и неэффективной работе. В период разработки процессоров Intel Itanium, на которых была впервые опробована используемая в DSP архитектура VLIW, даже возник мем о том, что для компиляции под такие архитектуры требуются “супер-компиляторы” (“heroic compiler”, подразумевалось, что такие компиляторы разработать невозможно). В действительности технологии компиляции с тех пор значительно улучшились, в том числе специально для DSP были разработаны новые алгоритмы (например метод аллокации регистров с помощью Partitioned Boolean Quadratic Programming).

Расширения языка

В контексте оптимизаций, работа компилятора сводится к поиску максимального количества инструкций, которые можно было бы выполнить параллельно. Как уже упоминалось выше, пользователь может помочь компилятору с помощью различных директив:

// Указание диапазона для числа итераций цикла // (позволяет избежать генерации пролога при развертке цикла) #pragma MUST_ITERATE(min, max, multiple) for (i = x; i < y; ++i) . // Функция не меняет глобальные переменные #pragma FUNC_NO_GLOBAL_ASG(func) extern void foo(); // Функция не меняет переменные через сохраненные ранее указатели #pragma FUNC_NO_IND_ASG(func) extern void bar(); // i гарантированно выровнена на 8 _nassert(i & 3 == 0);

Также активно применяются специальные инструкции, например, для предзагрузки данных (типа __builtin_prefetch в GCC) или для указания банков памяти, адресуемых указателями (чтобы компилятор мог запланировать их параллельное выполнение, не рискуя вызвать банк-конфликт).

Кроме того, в некоторых компиляторах можно использовать более агрессивные (по сравнению со стандартом языка Си) правила алиасинга указателей, что избавляет пользователя от явной расстановки атрибутов restrict в коде. Как правило можно выбирать такие расширения:

  • Различные адресные параметры функции всегда указывают на непересекающиеся участки памяти
  • Адресные переменные никогда не указывают на статические переменные
  • Функции не кэшируют переданные адреса

В некоторых компиляторах есть и более агрессивные опции вплоть до полного отключения алиасинга (в стиле флага -Msafeptr=all компиляторов PGI).

Как уже упоминалось, компилятор поддерживает программирование векторных вычислений с помощью интринсиков. Пример такого кода:

int32x4_t acc = 0; int *p = . coeff = . ; for (i = 0; i < N; i += 4) < int32x4_t x = vload(&p[i]); acc = vmac(acc, coeff, x); // acc += coeff * x; Менее надёжный вариант, т.к. полагается на оптимальную работу компилятора >

С помощью intrinsic-функций обычно предоставляется доступ ко всем векторным инструкциям. К недостаткам такого решения относится привязка к определённому вендору и модели процессора (последнее скорее некритично, т.к. поставщики стараются предоставлять конвертеры унаследованного векторного кода для новых моделей процессора).

Оптимизации

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

  • Развертка (unrolling) и конвейеризация циклов (software pipelining)
  • Предикативное выполнение (if-conversion)
  • Переименование индуктивных переменных (induction variable renaming)

Остановимся на них немного подробнее.

При конвейеризации происходит совмещение нескольких итераций исходного цикла в одной итерации преобразованного, чтобы с помощью наложения инструкций можно было скрыть их задержки. Так цикл вида

// Исходный код for (i = 0; i < N; ++i) a[i] = b[i] * 3; // Ассемблер ld (a0)+, a2 nop 3 mul a2, a3, a4 st a4, (a1)+ 

можно было бы конвейеризовать как

// Исходный код tmp2 = b[0] * 3; tmp1 = b[1]; for (i = 0; i < N - 2; ++i) < a[i] = tmp2 tmp2 = tmp1 * 3; tmp1 = b[i + 2] >a[N - 2] = tmp2; a[N - 1] = tmp1 * 3; // Ассемблер st a4, (a1)+ || ld (a0)+, a2 || mul a2, a3, a4 

сократив время итерации с четырех тактов до одного.

При предикативном выполнении мы заменяем блоки кода с ветвлениями на один блок, вычисления в котором выполняются по условию. Схематично такое преобразование заменит код

 for (i = . )
for (i = . )

или даже, если не стоит цель оптимизации энергопотребления, на

for (i = . )

В результате этой замены компилятор сможет для условной инструкции породить код

mul a0, a1, a2, p1

mul a3, a4, a2, !p1

Здесь в процессор поступят обе инструкции умножения, но реально выполнена будет только одна, в зависимости от значения предикатного регистра p1 . Такой “линеаризованный” код не только работает быстрее (из-за отсутствия ветвлений), но и позволяет осуществлять другие оптимизации (ту же конвейеризацию циклов).

Наконец, переименование индуктивных переменных позволяет избавиться от лишних зависимостей, которые часто возникают при развертке циклов. Так развернутый вдвое цикл

// Unroll 2 for (i = . )

преобразуется этой оптимизацией к

// Dependencies removed for (i1, i2 = . )

В данном случае переименование индексной переменной позволяет нам выполнять инструкции, относящиеся к i1 и i2 , параллельно.

Рекомендуемая литература

  • Fifty years of signal processing
  • DSPs for Mobile Communication

Недостатки процессоров общего назначения:

  • The Rise and Fall of Dark Silicon
  • Understanding sources of inefficiency in general-purpose chips
  • J.A. Fisher et al. “Embedded Computing: A VLIW Approach to Architecture, Compilers and Tools” (Джозеф Фишер - создатель концепции VLIW и первого в мире VLIW-процессора Multiflow)
  • Лекции по “Mill computing” на YouTube (и сайт проекта)
  • Компиляторные руководства Texas Instrument (User и особенно Programmer guides, а также App reports)
  • The Making of a Compiler for the Intel Itanium Processor
  • The Multiflow Trace Scheduling Compiler
  • DSP-C Specification и Embedded-C extensions
  • CEVA Launches Machine Learning DSP Solution: CEVA-XM6 (anandtech)
  • CEVA-XC12 The world's most advanced communications DSP

Компиляторы DSP (статьи E. Belaish, CEVA)

  • Combining C code with assembly code in DSP applications
  • Architecture Oriented C Optimizations
  • Compiler optimization for DSP applications

Об авторе

Юрий Грибов, Senior Engineer, System-on-Chip SW Team, Исследовательский центр Samsung

Автор выражает большую признательность рецензентам из Исследовательского центра Samsung: Алексею Пущину, Михаилу Черкашину и Павлу Копылу.

Компания Samsung выпускает мобильные системы на кристалле Exynos со встроенными DSP и NPU. Они используются, например, для обработки изображений с камеры смартфона. В московском Исследовательском центре Samsung разрабатывают state-of-the-art компиляторы для таких устройств, и мы активно ищем людей в нашу команду. Прямо сейчас в нашем центре открыто несколько вакансий для соискателей разного уровня подготовки: от стажеров до разработчиков сениор-уровня. Узнать подробнее о работе и вакансиях нашего отдела можно в интервью моего руководителя на Хабре.

  • dsp
  • compiler
  • компиляторы
  • сигнальные процессоры
  • цифровая обработка сигналов
  • микроархитектура
  • microarchitecture
  • digital signal processing
  • Блог компании Samsung
  • Высокая производительность
  • Компиляторы
  • Процессоры

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *