Mic*_*bon 7 performance assembly signal-processing texas-instruments davinci
我将为德州仪器DaVinci平台编写一些图像处理程序.有适合C语言编程的工具,但我想知道是否真的可以在不使用汇编语言的情况下充分利用DSP处理器.你知道在这个DSP平台上用C语言编写的程序和汇编程序之间的速度比较吗?
小智 11
我已经使用了一些其他TI DSP,而C通常很好.通常的方法是首先在C中编写所有内容,然后分析代码以查看是否需要手动优化任何内容.
您也可以经常在C中进行优化,通过调整C代码直到获得所需的汇编输出.了解DSP如何工作以及哪种工作方式更快或更慢非常重要.
小智 10
OMAP3上用于C64x/C64x + DSP的TI编译器包括对TI称为"内在"函数调用的支持.它们不是真正的函数调用,它们只是一种告诉编译器用于可能无法在C中直接表达的操作的汇编操作码的方法.它对于利用C64x/C64x + DSP中的SIMD操作码特别有用. C.
一个例子可能是:
A = _add2(B,C);
此SIMD指令将B和C的低/高16位加在一起,并将结果存储在A的低/高16位中.您无法在常规C中表达此信息,但您可以使用内部C操作码进行此操作.
我已经使用内在的C来使用完整的汇编语言(在5-10%之内)非常接近你可以做的事情.它对于过滤和运动补偿等视频功能特别有用(_dotpsu4!).
我通常用-al开关编译并查看管道以尝试识别哪些功能单元被重载然后查看我的内在函数以查看是否可以重新平衡循环(如果我使用太多S单元,我可能会看到如果我可以改变操作码使用M单位).
此外,记住C64x DSP有64个寄存器是有帮助的,因此加载局部变量并且永远不会将指令的输出分配回同一个变量 - 这将对编译器正确管道化的能力产生负面影响.
通常C是一个很好的起点.您可以快速了解整体框架和算法,并编写大部分在真实数学之间移动数据的管道.一旦到位并且您对数据结构正确感到满意,您可以在分析器中查看并找出需要手动挤压的例程.
C编译器(据我测试)没有充分利用该架构.
但是你可以侥幸成功,因为DSP可能足够快,可以完成你需要做的操作.
因此,它归结为测试和分析代码,以查看必须加速以使系统工作的部分.