将C和汇编代码结合起来是实现DSP软件设计的最佳方法

电脑杂谈  发布时间:2020-05-23 19:15:38  来源:网络整理

dsp算法大全c语言 pdf_dsp软件开发与c语言编程_编程c语言软件

众所周知,汇编语言具有更高的性能优势,并且可以更轻松,快速地实现C语言编码. DSP处理器功能的不断增强和编译器优化技术的改进已逐渐消除了用汇编语言编写DSP应用程序的传统做法. 当前几乎所有的DSP应用程序都由C代码和汇编代码组成. 在性能中起决定性作用的关键功能中,DSP工程师将继续使用高度优化的汇编代码,同时切换到C语言来编写那些不太关键的功能,这将有助于代码维护和可移植性. C和汇编代码的这种结合要求DSP工程师拥有专门的工具和方法.

正确混合C代码和汇编代码

问题是在C代码和汇编代码之间划分界限. 这取决于探查器提供的性能分析结果. 但是,在使用跟踪器之前,DSP工程师需要为应用程序定义明确的目标. 这些目标通常包括循环数,代码大小和数据量. 确定目标后,在使用跟踪器分析性能之前,应使用C语言编写和创建所有应用程序.

在某些特定情况下,主要在控制应用中dsp软件开发与c语言编程,C级编码已足够. 但是在大多数情况下,最初编写的C语言应用程序无法满足一个或多个目标要求. 这通常意味着需要一些汇编代码. 在进行汇编编程之前,强烈建议保存原始的C代码. 这不仅方便调试,而且在条件成熟时(例如使用功能更强大的平台),还可以返回这些C语言的实现.

代码的汇编部分应尽可能小. 为此,工程师需要仔细分析跟踪器提供的性能结果,并确定应用程序中的关键功能. 关键功能是那些占用大部分执行时间的功能,必须用汇编语言重写这些功能才能满足性能目标. 重写几个关键功能后,需要进行性能分析. 如果仍未满足目标要求,则应确定并重写其他关键功能. 图1显示了使用专用硬件机制来获得高度优化的汇编代码.

C和汇编代码结合 是实现DSP软件设计的最好方式

图1: 用C语言创建的循环缓冲区代码(左)和CEVA-teakLite-III创建的等效汇编代码(右).

编译器注意事项

dsp软件开发与c语言编程_dsp算法大全c语言 pdf_编程c语言软件

在编写需要与C代码结合的汇编代码时,汇编程序员必须了解编译器的约定和假设. 汇编程序员还必须了解编译器的寄存器使用约定. 通常,寄存器使用约定将硬件寄存器分为被调用者保存(或调用者使用)和被调用者使用(或调用者保存)寄存器. 图2显示了一个示例代码,该示例代码取自CEVA-X1641 DSP内核的FFT实现. 左侧第二行中的add指令符合CEVA-X1641编译器的调用约定,以便将指针参数传递到r0地址寄存器中. 右侧的推入指令用于备份将由以下功能使用的被调用方保存寄存器.

C和汇编代码结合 是实现DSP软件设计的最好方式

图2: 从CEVA-X1641 DSP内核的FFT实现中提取的一段汇编代码.

除了调用约定和寄存器使用约定之外,某些编译器可能还具有关于手动编写的汇编代码的其他假设. 这些假设通常特定于编译器,因此编译器提供程序将提供完整的信息和说明.

用于C和程序集连接的常用C语言扩展

大多数用于嵌入式平台的编译器,尤其是用于DSP编程的编译器,都具有丰富的C和汇编语言连接功能. 大多数功能不属于标准C语言dsp软件开发与c语言编程,因此称为C语言扩展. 下面列出了一些有利于DSP编程的功能.

内联汇编: 此功能可帮助程序员将汇编指令插入C代码.

硬件寄存器绑定C变量: 此函数通常与汇编指令内联函数结合使用,以帮助内联汇编代码访问C级变量(参见图3).

dsp算法大全c语言 pdf_dsp软件开发与c语言编程_编程c语言软件

C和汇编代码结合 是实现DSP软件设计的最好方式

图3: 结合了内联汇编和硬件寄存器绑定的代码示例.

内存区域属性: 此功能允许程序员将上述变量和功能分配给唯一的用户定义的内存区域,从而使程序员可以将C级单元分配给实际的内存位置,这对于DSP应用至关重要.

用户定义的调用约定: 在某些情况下,汇编函数可以通过用户定义的调用约定获得更好的优化效果. 编译器内在函数: 指可使用特殊宏或函数调用触发的内置编译器函数的通用名称. 没有内部函数支持的编译器必须调用用户定义的函数. 这样做可能会导致用户定义的函数生成函数调用并在循环中返回(请参见图4),从而导致巨大的开销.

C和汇编代码结合 是实现DSP软件设计的最好方式

图4: ETSI的mult_r(乘法和舍入)基本操作的C代码实现(左)和CEVA-TeakLite-III编译器生成的相应汇编代码(右).

汇编内部函数: 这是将汇编代码内联到C代码中的高级方法,下面将对其进行详细说明.

将汇编指令写为C语句

dsp软件开发与c语言编程_dsp算法大全c语言 pdf_编程c语言软件

内联汇编功能具有明显的缺点. 它破坏了各种编译器优化操作,因为编译器不了解内联代码的内容,并使用了最坏的假设. 并可能迫使程序员处理寄存器分配和指令调度等底层问题.

汇编内部函数可以帮助程序员实现内联汇编代码,而这些缺点是不存在的. 从程序员的角度来看,程序集的内部功能就像C宏或函数一样. 它们接收C语言变量并返回C语言输出结果,同时显示为单个汇编指令. 因为与此功能相关的所有代码都是C语言级别的,所以程序员不必担心寄存器分配,指令调度和其他低级问题. 汇编内部函数不仅不会妨碍编译器的优化操作,而且会像参与程序通常由编译器生成的汇编指令一样参与优化过程. 这些功能使程序集内部功能的功能非常强大.

使用汇编内部函数,程序员可以受益于编译器无法生成的独特汇编指令. 例如,CEVA-X1641的bitrev(位反转)指令是针对FFT等算法定制的. 由于编译器不太可能将程序视为FFT并使用bitrev指令,因此程序员可以将bitrev程序集内部函数完全嵌入到C代码中. 结合对应用程序的透彻理解,程序员还可以使用C应用程序的精确序列来以精确序列组装内部函数,以确保编译器生成的代码与手工编写的代码一样有效.

图5是使用CEVA-X1641编译器和程序集内部功能的示例. CEVA-X1641编译器处理的问题所决定的机器,例如寄存器分配,指令调度和硬件单元分配,也使汇编内部功能受益.

C和汇编代码结合 是实现DSP软件设计的最好方式

图5: 使用CEVA-X1641编译器支持的程序集内部功能.

使用混合代码调试应用程序

汇编代码调试需要深入了解体系结构和机器级别的问题,例如延迟和内存对齐限制. 简单地将C代码和汇编代码放在一起会使事情变得更加麻烦,因为程序员现在必须调试C代码和汇编代码之间的连接.

dsp软件开发与c语言编程_dsp算法大全c语言 pdf_编程c语言软件

调试混合代码应用程序的第一步是隔离问题. 假设汇编代码的C语言实现保持不变并且C语言实现程序正常运行,则将汇编函数转换为C语言实现并重新测试应用程序相对容易. 为了快速发现问题,程序员可以在每一步将一半的可疑函数转换为相应的C语言实现.

一旦确定了有问题的汇编函数,就应将其作为独立的汇编问题以及C与汇编之间的连接问题进行分析. 对于汇编程序员来说,调试独立的汇编问题非常简单明了,但是C和汇编之间的联系有点麻烦. 考虑组装函数本身时,C和组装之间的连接问题是不可见的,这与独立组装问题不同. 为了识别这些问题,程序员必须检查编译器约定,例如调用约定和注册使用约定.

程序员还必须检查编译器的假设,例如汇编指令的去向. 为了节省调试时间,程序员在首次实现汇编函数时应验证是否遵循所有编译器约定和假设.

案例研究: H.264视频编码器和AMR-NB

本文讨论的技术和方法已被CEVA用于各种应用程序,包括视频编,音频编,声音合成器和设备驱动程序. 本文中描述的功能可以大大提高这些应用程序的性能. H.264视频编码器是一个很好的案例研究. 它对处理能力和其他资源有非常严格的要求,特别是与语音编等其他类型的编相比.

CEVA的CEVA-X16xx高端DSP内核系列及其MM2000多媒体平台可提供此编码器所需的处理能力. 首先使用高级跟踪技术确定此编码器的关键功能,然后逐步对其进行优化. 首先,使用汇编内部函数在C语言级别上完全优化了这些函数. 然后,在汇编语言级别,进一步优化编译器提供的汇编代码.

图6显示了通过完全优化该编码器的关键功能而获得的性能改进. 仅最后一个优化阶段涉及纯汇编程序设计,所有其他阶段均基于具有汇编内部功能的C代码. 这些程序集内部函数主要用于SIMD操作,例如avg_acW_acX_acZ_4b. 该指令平均输入8个字节,并产生4字节的结果. 对于执行大量字节级计算的视频编,此SIMD操作非常有用.

C和汇编代码结合 是实现DSP软件设计的最好方式

图6: 优化了H.264编码器的关键功能以提高性能. AMR-NB(自适应多速率窄带)是一种广泛用于无线通信应用中的语音编. 通常使用纯汇编来实现声音合成器,但是C语言实现和CEVA-X1620编译器使用本文中讨论的各种功能来获得与汇编实现相当的结果. 图7显示了通过整个AMR-NB应用程序的整体优化实现的MCPS(每秒数百万个周期)的性能改进. 仅最后的优化阶段涉及纯汇编编程. 其他所有阶段均基于具有ETSI内部功能和汇编内部功能的C代码.

C和汇编代码结合 是实现DSP软件设计的最好方式

图7: 通过各种优化方法实现的ARM-NB性能改善.

简而言之,H.264编码器和AMR-NB示例清楚地表明了程序集实现的性能优势,但同时也表明,纯程序集实现不是首选的优化方法. 使用高质量软件开发工具提供的C和汇编功能,DSP程序员无需使用纯汇编语言就可以在整个应用程序中获得令人满意的性能.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-219739-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...