Для каких приложений я могу использовать ядро dsp beagleboard? Могу ли я использовать ускорение DSP для алгоритма вычитания фона?
Для каких приложений я могу использовать ядро dsp beagleboard? Могу ли я использовать ускорение DSP для алгоритма вычитания фона в OpenCV?
4 ответа
Вы можете использовать DSP для всех видов вычислений. Это процессор общего назначения, оптимизированный для приложений DSP. Так что да, даже материал с плавающей запятой будет работать, хотя производительность не будет большой.
DSP действительно сияет, если вы выполняете целочисленные вычисления для больших массивов данных. Здесь DSP может легко вычислить так быстро, что время передачи данных из памяти и в нее становится узким местом.
Чтобы дать вам представление о том, что возможно: у меня работает алгоритм, который пост-обрабатывает данные с камеры (выполняя обратное чередование Байера). У меня есть 8-битные входные изображения и 24-битные выходные изображения. Производительность, которую я архивирую на DSP beagleboard, работающей на частоте ~ 350 МГц, составляет 144 миллиона пикселей в секунду. Это равняется примерно половине гигабайта обработанных данных в секунду.
Однако настроить DSP и запустить его и скомпилировать программу hello world не так просто. Вы должны интегрировать драйвер ядра DSP (я использую DSPLINK). Вы должны научиться использовать (огромные) библиотеки взаимодействия DSP/ARM, как использовать цепочку инструментов только для простого привет-мира. Запланируйте как минимум две недели.
Как только это сработает, настоящая работа начинается с изучения того, как писать быстрый код для DSP, как управлять внутренними запоминающими устройствами, DMA, прерываниями и всем подобным.
В конце концов, это того стоит, потому что вы открываете невероятно быстрый DSP, который может легко превзойти Cortex-A8, если ему будет назначена правильная работа. Вдобавок ко всему, вы получаете доступ к сопроцессорам изображений, что позволяет еще больше загружать вычисления. Кроме того, имеется полноценный процессор ARM9, тесно связанный с DSP, который находится в режиме ожидания и также ожидает использования.
Да, вы можете, но если он не является частью этого проекта порта OpenCV, вам придется реализовать алгоритм самостоятельно.
DSP BeagleBoard должен быть достаточно мощным для небольших размеров изображений (320x240, может быть 640x480), но вам нужно иметь дело с арифметикой с фиксированной запятой и так далее в вашей реализации, если вы хотите оптимальную пропускную способность.
РЕДАКТИРОВАТЬ: Почему фиксированная точка
DSP TI C6xxx выпускаются в двух вариантах: меньшие числа (C64xx) не имеют аппаратного блока с плавающей запятой, в то время как старшие числа (C67xx) имеют его. Это в отличие от настольных процессоров, таких как Intel.
BeagleBoard-xm встраивает C64xx, у которого нет модуля с плавающей запятой. Следовательно, всякий раз, когда вы вызываете математическую функцию, которая работает с числами с плавающей запятой, вычисления с плавающей запятой эмулируются устройством, что является медленным. Вместо этого максимальная пропускная способность получается, когда вы реализуете эти операции в арифметике с фиксированной запятой, потому что вы вызываете собственные операции для целочисленных типов.
Модель программирования на гетерогенной платформе, такой как Beagle Board, обычно предназначена для передачи вычислительной части вашего приложения из GPP (ARM) в DSP. Вам понадобится драйвер ядра dsp и компилятор для c64x. За подробностями обращайтесь к руководству по программированию DSP BIOS: http://omappedia.org/wiki/DSPBridge_Project
Если вы еще не рассмотрели этот вопрос, я бы порекомендовал попробовать NEON на cortex A8 для вашего алгоритма обработки изображений и посмотреть, какой прирост производительности вы получите. Это довольно просто для программирования на C без необходимости драйвера / компилятора DSP.
Неприменимо к устройствам ARM, но для людей, приземляющихся здесь после поиска "DSP" и "OpenCV", для высокой производительности на серверах на базе x86 хорошим выбором будет серия процессоров TI c66x, которая имеет как 32-битные инструкции с фиксированной, так и с плавающей запятой, OpenCV был портирован на ускорители c66x и работает без проблем: