我可以将 beagleboard 的 dsp 核心用于哪些应用程序?我可以在 OpenCV 中使用 DSP 加速进行背景减法算法吗?
4 回答
您可以使用 DSP 进行各种计算。它是针对 DSP 应用优化的通用 CPU。所以是的,即使是浮点的东西也可以工作,尽管性能不会很好。
如果您对大型数据数组进行整数计算,DSP 真的很出色。在这里,DSP 可以很容易地计算得如此之快,以至于将数据从内存传输到内存的时间成为了瓶颈。
为了给你一个数字,什么是可能的:我有一个运行后处理来自相机的数据的算法(做拜耳去交错)。我有 8 位输入图像和 24 位输出图像。我在运行在 ~ 350Mhz 的 beagleboard DSP 上归档的性能是每秒 1.44 亿像素。这相当于每秒大约半 GB 的已处理数据。
让 DSP 启动并运行并编译一个 hello world 程序并不简单。您必须集成一个 DSP 内核驱动程序(我使用 DSPLINK)。您必须学习如何使用(巨大的)DSP/ARM 互操作库,如何将工具链用于简单的 hello world。至少计划两周。
一旦成功,真正的工作就从学习如何为 DSP 编写快速代码、如何管理内部存储器、DMA、中断和所有此类内容开始。
最后,这是非常值得的,因为您解锁了一个令人难以置信的快速 DSP,如果分配正确的工作,它可以轻松超越 Cortex-A8。最重要的是,您可以访问图像协处理器,从而进一步减轻计算负担。然后有一个完整的 ARM9 CPU 与 DSP 紧密耦合,它也处于空闲状态并等待使用。
是的,你可以,但如果它不是这个 OpenCV 端口项目的一部分,你将不得不自己实现算法。
BeagleBoard 的 DSP 应该足够强大,可以处理不太大的图像(320x240,也许是 640x480),但是如果您想要最佳吞吐量,则必须在实现中处理定点算法等。
编辑:为什么定点
TI C6xxx DSP 有两种类型:较小的数字 (C64xx) 没有硬件浮点单元,而较大的数字 (C67xx) 有一个。这与英特尔等台式机 CPU 不同。
BeagleBoard-xm 嵌入了没有浮点单元的 C64xx。因此,每当您调用对浮点数进行运算的数学函数时,设备都会模拟浮点计算,这很慢。相反,当您在定点算术中实现这些操作时,将获得最大吞吐量,因为您在整数类型上调用本机操作。
像 beagle board 这样的异构平台中的编程模型通常是将应用程序的计算部分从 GPP (ARM) 卸载到 DSP。您将需要用于 c64x 的 dsp 内核驱动程序和编译器。有关详细信息,请查看 DSP BIOS 编程指南: http: //omapedia.org/wiki/DSPBridge_Project
如果您还没有考虑过,我建议您尝试使用 cortex A8 上的 NEON 来测试您的图像处理算法,看看您会获得什么样的性能提升。在不需要 DSP 驱动程序/编译器的情况下,这很容易用 C 语言编程。
不适用于ARM设备,但是对于搜索“DSP”和“OpenCV”后登陆这里的人来说,对于基于x86的服务器的高性能,一个不错的选择是TI c66x CPU系列,它具有32位定点和浮点指令. OpenCV 已被移植到 c66x 加速器卡并且运行没有问题: