如何使用DSP加速OMAP上的代码?

Can*_*Bal 6 c c++ embedded signal-processing omap

我正在为OMAP3430开发视频编解码器.我已经有用C++编写的代码,我尝试修改/移植它的某些部分以利用DSP(SDK(OMAP ZOOM3430 SDK)我有一个额外的DSP).

我尝试移植一个小的for循环,它运行的是非常少量的数据(~250字节),但是在不同的数据上大约需要2M次.但CPU和DSP之间通信的过载远远超过增益(如果我有的话).

我认为这个任务就像在普通计算机中优化GPU的代码一样.我的问题是移植什么样的部件会有益?GPU程序员如何处理这些任务?

编辑:

  1. GPP应用程序分配大小为0x1000字节的缓冲区.
  2. GPP应用程序调用DSPProcessor_ReserveMemory为每个分配的缓冲区保留DSP虚拟地址空间,使用比分配的缓冲区大4K的大小来考虑自动页面对齐.总预留大小也必须沿4K页面边界对齐.
  3. GPP应用程序调用DSPProcessor_Map将每个分配的缓冲区映射到上一步中保留的DSP虚拟地址空间.
  4. GPP应用程序准备一条消息,通知DSP执行阶段虚拟地址空间的基地址,该地址已映射到GPP上分配的缓冲区.GPP应用程序使用DSPNode_PutMessage将消息发送到DSP.
  5. GPP调用memcpy将要处理的数据复制到共享内存中.
  6. GPP应用程序调用DSPProcessor_FlushMemory以确保已刷新数据高速缓存.
  7. GPP应用程序准备一条消息,通知DSP执行阶段已完成写入缓冲区,DSP现在可以访问缓冲区.该消息还包含写入缓冲区的数据量,以便DSP知道要复制的数据量.GPP使用DSPNode_PutMessage将消息发送到DSP,然后调用DSPNode_GetMessage等待从DSP收回消息.

在这些之后,DSP程序的执行开始,并且DSP在完成处理时通过消息通知GPP.只是为了尝试我不在DSP程序中进行任何处理.我只是将"处理完成"消息发送回GPP.这仍然需要耗费大量时间.可能是因为内部/外部内存使用,还是因为通信过载?

Can*_*Bal -1

根据我的测量,CPU 和 DSP 之间的一个消息传递周期大约需要 160us。我不知道这是因为我使用的内核,还是桥驱动程序的原因;但这对于简单的来回消息来说是很长的时间。

看来,只有当总计算负载与消息传递所需的时间相当时,将算法移植到 DSP 才是合理的;以及该算法是否适合在CPU和DSP上同时计算。