我正在为OMAP3430开发一个视频编解码器。我已经有了用C++编写的代码,我尝试修改/移植其中的某些部分,以利用DSP (OMAP ZOOM3430 SDK) (我有一个额外的DSP)。
我尝试移植一个小的for循环,它运行在非常小的数据量(大约250个字节)上,但是在不同的数据上运行了大约200万次。但是CPU和DSP之间通信的过载远大于增益(如果有的话)。
我认为这个任务就像优化普通计算机中GPU的代码一样。我的问题是移植什么样的部件是有益的?GPU程序员是如何处理这些任务的?
编辑:
收到消息。
在此之后,DSP程序开始执行,DSP在完成处理时用消息通知GPP。只是为了尝试一下,我没有在DSP程序中放任何处理。我刚刚向GPP发送了一条“处理完毕”的消息。这还会消耗很多时间。这是因为内部/外部内存的使用,还是仅仅是因为通信过载?
发布于 2009-07-14 10:36:33
根据我所做的测量,CPU和DSP之间的一个消息传递周期大约需要160 DSP。我不知道这是因为我使用的内核,还是桥驱动程序;但是对于简单的回发消息来说,这是很长的时间。
如果算法的总计算量与消息传递所需的时间相当,并且该算法适合在CPU和DSP上同时计算,则似乎只有将该算法移植到DSP上才是合理的。
发布于 2009-06-25 16:03:28
OMAP3430没有车载DSP,它有一个连接到系统总线的IVA2+视频/音频解码引擎,而Cortex核有类似DSP的SIMD指令。OMAP3430上的GPU是一个基于PowerVR的SGX单元。虽然它确实有可编程的着色器,我不认为有任何支持通用编程,ala,CUDA或OpenCL。我可能错了,但我从未听说过这样的支持
如果您使用的是船上的IVA2+编码/解码引擎,您需要为这个单元使用适当的库,并且它只支持我所知道的特定的编解码器。你是想把自己的库写到这个模块上吗?
如果您使用DSPish (SIMD指令)中构建的Cortex,请发布一些代码。
如果你的开发板上有一些额外的DSP,什么是DSP,它是如何连接到OMAP的?
关于桌面GPU问题,在视频解码的情况下,您使用供应商提供的函数库对硬件进行调用,在linux上有几个用于Nvidia的VDAPU,在windows上有类似的库(PureViewHD,我认为它被调用了)。ATI也有linux和windows库,用于它们的车载解码引擎,我不知道它们的名称。
发布于 2009-06-25 16:47:18
我不知道您传输数据的时间基础是什么,但是我知道在SDK的specsheet中列出的TMS32064x有一个非常强大的DMA引擎。(我假设这是原始变焦OMAP34X MDK。它说它有64 It。)我希望OMAP有一些类似的东西,充分利用他们的优势。我建议在64 by的内部内存中设置“乒乓”缓冲区,并使用SDRAM作为共享内存,并通过DMA处理传输。外部RAM将成为6 6xxx系列中任何一个部件的瓶颈,因此,请将所有可以锁定在内部内存中的内容保存在内部内存中,以提高性能。通常,这些部件一旦进入内部内存,就能够将8 32位字总线到处理器核心,但这取决于它允许您映射为直接访问内存的缓存级别。TI的成本敏感部件将“可映射内存”移动到比其他芯片更远的地方。此外,所有的部分手册可从TI免费下载PDF格式。他们甚至给我免费的TMS320C6000处理器和指令集手册和许多其他书籍的硬拷贝。
就编程而言,您可能需要使用一些“处理器本质”或内联程序集来优化您正在做的任何数学。对于64 in支持整数操作,如果可能的话,因为它没有内置的浮点核心。(这些是67 in系列的。)如果查看执行单元,并且您可以映射您的计算,使不同的部分以一种可以在单个周期中发生的方式针对不同的操作,那么您将能够从这些部分中获得最佳的性能。指令集手册列出每个执行单元执行的操作的类型。如果您可以将计算分解成一个双数据流集,并稍微展开循环,那么当完全优化启动时,编译器将对您“更好”。这是因为处理器被分解成左侧和右侧,两边的执行单元几乎相同。
希望这能有所帮助。
https://stackoverflow.com/questions/1044313
复制相似问题