一种优化的memset标准库函数汇编代码生成方法技术

技术编号:8452858 阅读:776 留言:0更新日期:2013-03-21 13:49
本发明专利技术公开了一种优化的memset标准库函数汇编代码生成方法,包括:根据目标机器的硬件特性,确定待生成的优化的填充执行片段所具有的属性特征及规模;根据待生成的优化的填充执行片段的规模,构造集中跳转表;根据集中跳转表,对输入参数中的目标填充地址和填充规模进行分支判断,建立输入参数集到集中跳转表的映射关系;根据目标机器可用的数据传输指令集、待生成的优化的填充执行片段的属性特征,生成满足填充要求的填充模式集合;根据目标机器的硬件特性,对填充模式集合进行性能筛选,得到具有最优填充性能的填充模式,由此生成优化的填充执行片段。本发明专利技术实现了优化地数据填充,提高了memset标准库函数的数据填充性能,可移植性好。

【技术实现步骤摘要】

本专利技术涉及标准库函数汇编代码生成技术,尤其涉及。
技术介绍
数字信号处理任务通常需要完成大量的数据计算,如数字信号处理中常用的 FIR (Finite Impulse Response,有限长单位冲激响应)滤波器和 FFT (Fast Fourier Transformation,快速傅氏变换)算法,而数组的初始化工作一般由C标准中的memset标准库函数完成。在Cll标准中,memset标准库函数定义为将某一特定大小的内存区域全部以特定单字节数据进行填充。由于内存的速度相对于微处理器来说要慢得多,而对于面向数据密集型应用的微处理器而言,用于数据初始化的memset标准库函数属调用密集型,对其进行优化很有意义。一般地,对于具有不同硬件特性的微处理器而言,标准库函数在高级语言层面上的实现是一致的。然而,正是因为这种一致性,高级语言层面上的标准库函数很难做到针对特定目标体系结构的彻底优化。从优化的时机出发,在汇编级对程序进行优化, 程序越底层,代码越容易调度,更能有效利用指令集。因此,现代微处理器为了提高处理性能,很多标准库函数都是以汇编的形式内嵌静态库中。上述所提及的memset标准库函数所做的操作是把某一特定内存块全部以特定单字节数据进行填充,其典型实现是单字节数据填充。这种算法实现简单,当待填充的内存块规模较小时,性能尚可。然而,当微处理器的数据带宽大于8比特,且待填充的内存块规模较大时,这种单字节数据的填充方式远没有发挥微处理器的数据带宽,性能较低。在大多数平台下,从内存对齐边界处开始对其实现数据填充可以充分发挥微处理器的数据带宽。现有技术中的GCC(GNU Compiler Collection)编译器在对memset标准库函数实现优化时正是利用了这一点,将待填充的内存块规模按照目标填充地址对齐与否分为三部分对齐边界之前的内存块、对齐填充的内存块,对齐边界之后的内存块。其中,目标地址对齐的内存块采用多字节数据传输指令一次性填充多字节数据,不对齐部分仍采用单字节数据传输指令完成填充。GCC编译器对于memset标准库函数的优化在C语言级别上实现了相同的代码,然而,在汇编级实现优化需要针对不同的体系结构,结合各自的硬件特性分别实现,可移植性较差。对于其他自主研发的微处理器,现有的对于标准库函数汇编级的优化, 大部分是根据目标处理器的硬件特性,在由相应编译器编译高级语言生成的汇编代码基础上,对其进行手工优化以获得当前微处理器上的较优性能。然而,这种对于标准库函数的优化方法,是基于编译器编译高级语言得到的汇编代码,冗余较多,优化不够彻底。
技术实现思路
本专利技术的目的是基于标准库函数的行为本质,提供一种优化的memset标准库函数汇编代码的生成方法。为实现上述目的,本专利技术提供了,该方法包括根据目标机器的硬件特性,确定待生成的优化的填充执行片段所具有的属性特征及规模;根据上述待生成的优化的填充执行片段的规模,构造集中跳转表,该集中跳转表由多条分支跳转语句构成,每条分支跳转语句旨在将执行路径引向相应的优化的填充执行片段;根据上述集中跳转表,基于目标机器可用的逻辑运算指令,对输入参数中的目标填充地址和填充规模按照上述待生成的优化的填充执行片段的属性特征进行分支判断,建立输入参数集到集中跳转表的映射关系;根据目标机器可用的数据传输指令集、上述待生成的优化的填充执行片段所具有的属性特征,即特定的填充要求信息,生成满足填充要求的所有填充模式构成的填充模式集合;根据目标机器的硬件特性,对上述填充模式集合进行性能筛选,得到具有最优填充性能的填充模式,由此生成优化的填充执行片段。 本专利技术实施例基于标准库函数的行为本质,设计了,该方法生成的memset标准库函数汇编代码在执行时,能够根据输入参数,即填充要求信息,实现具有针对性优化地数据填充,且只需通过修改硬件特性自定义文件,可扩展到其他基于RISC (Reduced Instruction Set Computer,精简指令集计算机)的体系结构上,可移植性较好。附图说明通过以下结合附图以举例方式对本专利技术的实施方式进行详细描述后,本专利技术的其他特征、特点和优点将会更加明显。图1为本专利技术实施例提供的流程不意图;图2为本专利技术实施例优化的填充执行片段生成的框图;图3为本专利技术实施例填充数据的扩展示意图;图4为本专利技术实施例数据填充任务的分解示意图;图5为本专利技术实施例基本填充模式生成时的功能筛除流程示意图;图6 (a)为本专利技术实施例数据规模为16的一种填充模式;图6 (b)为本专利技术实施例数据规模为16的另一种填充模式。具体实施例方式下面通过附图和实施例,对本申请的技术方案做进一步的详细描述。数组的初始化工作通常由C标准中的memset标准库函数完成。由于C语言中的memset标准库函数出于兼容性考虑,在速度上落后于根据特定体系结构的目标机器写出来的汇编代码。基于优化理论基础,程序越底层,代码越容易调度,更能有效利用指令集。而汇编代码是编译器结合目标机器的硬件特性,将高级语言通过编译优化,代码块合并等操作后生成。因此,现代微处理器为了提高处理性能,很多标准库函数都是以汇编的形式内嵌静态库中。而标准库函数的优化不同于其他开发程序的优化标准库函数的行为明确,可根据其行为描述直接生成优化的代码,而非在冗余代码基础上作修改使其性能较优。在Cll 标准中,memset 标准库函数原型为 void*memset (void*s, intc, size_t, η),其中输入参数s、c和η分别对应于目标填充地址、特定填充数据和填充规模。memset标准库函数本质是将某一特定内存区域以特定单字节数据填充,通常用于为新申请的内存块进行初始化。其典型执行是单字节的数据填充,然而这种算法在内存块较小时性能尚可,当待填充的内存块较大时,多次循环耗时代价大,性能极低。因此,如何实现多字节的填充是众多memset标准库函数优化算法的设计重点。现代微处理器的指令集都提供了字节,半字、字寻址,支持多字节数据传输。为了充分发挥处理器的数据带宽,在采用多字节数据传输指令对特定内存块实现数据填充时,需要考虑目标填充地址的对齐问题。例如,4字节数据传输指令要求目标填充地址必须为4字节对齐,否则不对齐的访问会触发异常。因此,根据待填充内存地址对齐与否,选取可用的数据传输指令,是生成优化的memset标准库函数汇编代码的关键所在。另外,考虑到待填充的数据在高速缓冲存储器(Cache)中不命中时,会影响函数执行性能。因此,以Cache块大小为填充规模的上界,每次只以Cache块大小为循环填充单位,从降低Cache缺失率的角度上提高了 memset标准库函数的执行性能。综上,优化的memset标准库函数在执行时,根据输入参数,进行分支判断,依据判断结果分别跳转到具有针对性优化地填充执行片段上。因此,优化的memset标准库函数的汇编代码需要从填充数据的扩展部分、分支判断部分和优化的填充执行片段部分这几个角度由程序自动生成。图1为本专利技术实施例提供的流程示意图。本专利技术实施例提供的一种优化的memset标准库函数的汇编代码生成方法包括分支判断部分和优化的填充执行片段部分。如图1所示,本专利技术实施例包括步骤101-步骤105。步骤101至本文档来自技高网
...

【技术保护点】
一种优化的memset标准库函数汇编代码生成方法,其特征在于:根据目标机器的硬件特性,确定待生成的优化的填充执行片段所具有的属性特征及规模;根据所述待生成的优化的填充执行片段的规模,构造集中跳转表,所述集中跳转表由多条分支跳转语句构成,每条分支跳转语句旨在将执行路径引向相应的优化的填充执行片段;根据所述集中跳转表,基于目标机器可用的逻辑运算指令,对输入参数中的目标填充地址和填充规模按照所述待生成的优化的填充执行片段的属性特征进行分支判断,建立输入参数集到所述集中跳转表的映射关系;根据目标机器可用的数据传输指令集、所述待生成的优化的填充执行片段的属性特征,生成满足填充要求的填充模式集合;根据所述目标机器的硬件特性,对所述填充模式集合进行性能筛选,得到具有最优填充性能的填充模式,由此生成优化的填充执行片段。

【技术特征摘要】

【专利技术属性】
技术研发人员:朱浩应欢王东辉洪缨
申请(专利权)人:中国科学院声学研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1