对于什么样的应用程序,我可以使用beagleboard的dsp核心?我可以将DSP加速用于背景减法算法吗?

时间:2013-03-19 10:35:46

标签: opencv signal-processing beagleboard background-subtraction

对于什么样的应用程序,我可以使用beagleboard的dsp核心?我可以在OpenCV中使用DSP加速算法进行背景减法算法吗?

4 个答案:

答案 0 :(得分:6)

您可以将DSP用于各种计算。它是针对DSP应用而优化的通用CPU。所以是的,即使浮点数也会有效,尽管性能不会很好。

如果对大型数据阵列进行整数计算,DSP确实很有用。在这里,DSP可以轻松地计算得如此之快,以至于从内存传输数据到内存的时间成为瓶颈。

为了给出一个可能的数字:我运行一个算法来处理来自摄像机的数据(进行拜耳解交织)。我有8位输入图像和24位输出图像。我在以350Mhz运行的beagleboard DSP上存档的性能是每秒1.44亿像素。这相当于每秒大约半千兆字节的处理数据。

启动并运行DSP并编译hello world程序并不简单。您必须集成DSP内核驱动程序(我使用DSPLINK)。您必须学习如何使用(巨大的)DSP / ARM互操作库,如何使用工具链只是为了一个简单的hello世界。计划至少两周。

一旦这个工作,真正的工作开始于学习如何编写DSP的快速代码,如何管理内部存储器,DMA,中断和所有这些东西。

最后它非常值得,因为你解锁了一个令人难以置信的快速DSP,如果分配了合适的工作,它可以轻松胜过Cortex-A8。最重要的是,您可以访问图像协处理器,这使您可以进一步卸载计算。然后有一个完整的ARM9 CPU紧密耦合到DSP,它处于空闲状态并等待使用。

答案 1 :(得分:3)

是的,你可以,但如果它不属于this OpenCV port project,你必须自己实施算法。

BeagleBoard的DSP应该足够强大,图像尺寸不要太大(320x240,可能是640x480),但如果你想要最佳的吞吐量,你必须在你的实现中处理定点运算等。

编辑:为何定点

TI C6xxx DSP有两种版本:较小的数字(C64xx)没有硬件浮点单元,而较高的数字(C67xx)有一个。 这与台式机CPU不同,例如英特尔。

BeagleBoard-xm嵌入了一个没有浮点单元的C64xx。 因此,每当您调用对浮点数进行操作的数学函数时,设备都会模拟浮点计算,这很慢。 相反,当您在定点算术中实现这些操作时,获得最大吞吐量,因为您在整数类型上调用本机操作。

答案 2 :(得分:1)

beagle board等异构平台中的编程模型通常是将应用程序的计算部分从GPP(ARM)卸载到DSP。您将需要一个用于c64x的dsp内核驱动程序和编译器。有关详细信息,请查看DSP BIOS编程指南: http://omappedia.org/wiki/DSPBridge_Project

如果您还没有考虑过,我会建议您在皮质A8上尝试使用NEON进行图像处理算法,看看您获得了哪种性能提升。在C语言中编程非常简单,无需DSP驱动程序/编译器。

答案 3 :(得分:0)

不适用于ARM设备,但适用于搜索" DSP"和#34; OpenCV",为了在基于x86的服务器中实现高性能,TI c66x CPU系列有一个很好的选择,它具有32位固定和浮点指令。 OpenCV已移植到c66x加速卡并运行没有问题:

http://processors.wiki.ti.com/index.php/C66x_opencv