首页> 中国专利> 汇编级内存复制标准库函数的生成方法及装置

汇编级内存复制标准库函数的生成方法及装置

摘要

本发明实施例涉及一种汇编级内存复制标准库函数的生成方法及装置。包括:根据数据搬移要求、目标机器可用数据搬移指令集及其相应的地址对齐要求和当前可用的硬件资源信息,对所述目标机器可用数据搬移指令集进行第一功能筛选,生成满足搬移要求的搬移模式集合;根据每个搬移模式含有的数据搬移指令个数,对所述搬移模式集合进行第一性能筛选,得到最精简搬移模式;根据所述最精简搬移模式生成汇编级内存复制标准库函数,由此确定的汇编级内存复制标准库函数,搬移性能较优,可移植性较好。

著录项

  • 公开/公告号CN102902548A

    专利类型发明专利

  • 公开/公告日2013-01-30

    原文格式PDF

  • 申请/专利权人 中国科学院声学研究所;

    申请/专利号CN201210408416.8

  • 发明设计人 朱浩;应欢;王东辉;洪缨;彭楚;

    申请日2012-10-24

  • 分类号G06F9/44(20060101);

  • 代理机构11309 北京亿腾知识产权代理事务所;

  • 代理人陈霁

  • 地址 100190 北京市海淀区北四环西路21号

  • 入库时间 2024-02-19 17:18:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-06-04

    专利权的转移 IPC(主分类):G06F9/44 登记生效日:20190515 变更前: 变更后: 申请日:20121024

    专利申请权、专利权的转移

  • 2016-08-03

    授权

    授权

  • 2013-03-13

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20121024

    实质审查的生效

  • 2013-01-30

    公开

    公开

说明书

技术领域

本发明涉及微处理器领域,尤其涉及一种汇编级内存复制库函数的生成方法及装置。 

背景技术

在数字信号处理领域,微处理器是面向数据密集型的应用,通常需要完成大量的实时计算。其中,内存复制标准库函数(memcpy标准库函数)是最常用的库函数之一,在微处理器进行多媒体编解码过程中会被频繁调用,属调用密集型函数,对其进行优化有助于提高微处理器数据处理性能。memcpy标准库函数目的是实现内存中任意规模的数据搬移。一般地,对于具有不同硬件特性的微处理器来说,标准库函数在高级语言层面上的实现代码是一致的。然而,正是因为这种一致性,高级语言层面上的标准库函数很难做到针对特定目标体系结构的彻底优化。基于优化理论,对程序的汇编级进行优化,程序越底层,代码越容易调试,更能有效利用指令集。因此,现代微处理器为了提高处理性能,很多标准库函数都是以汇编的形式内嵌静态库中。 

memcpy标准库函数的典型实现算法是单字节数据搬移,即单字节从内存中读数,单字节写回内存。这种算法实现简单,当数据规模较小时,性能尚可。然而,当处理器的数据带宽大于8bits,且数据规模较大时,这种单字节的搬移方式,远没有发挥处理器的数据带宽,搬移性能极低。在大多数平台下,从内存对齐边界开始拷贝可以充分发挥处理器的数据带宽。 

编译器套装(GNU Compiler Collection,GCC)在对memcpy标准库函数实现优化时正是利用了这一点,将待搬移数据按照地址对齐与否分为三部分:对齐边界之前的数据,对齐拷贝的数据,剩余数据。地址对齐部分采用多字节数据搬移指令实现搬移,不对齐部分仍采用单字节数据搬移。然而,GCC对 于memcpy标准库函数的优化,在C语言级别上实现了相同的代码,而在汇编级实现优化需要针对不同的体系结构,结合各自的硬件特性分别实现,可移植性较差。 

Intel公司在汇编级对memcpy标准库函数进行优化时,结合其指令集中的16B对齐数据搬移指令,将需要搬移的数据细分成16种情况:对齐搬移和15种不对齐搬移。其中,地址不对齐的数据通过移位、寄存器拼接等操作,从而使得待搬移数据全部归一化,均可用对齐数据搬移指令来完成数据搬移。然而,当数据规模较大,且地址不对齐时,移位等操作的代价也会对整体优化产生负面影响。 

发明内容

本发明实施例提供了一种汇编级内存复制标准库函数的生成方法及装置,生成的汇编级memcpy标准库函数具有较优的搬移性能,并且可移植性较好。 

在第一方面,本发明实施例提供了一种汇编级memcpy标准库函数的生成方法,所述方法包括: 

根据数据搬移要求、目标机器可用数据搬移指令集及其相应的地址对齐要求和当前可用的硬件资源信息,对所述目标机器可用数据搬移指令集进行第一功能筛选,生成满足搬移要求的搬移模式集合; 

根据每个搬移模式含有的数据搬移指令个数,对所述搬移模式集合进行第一性能筛选,得到最精简搬移模式; 

根据所述最精简搬移模式生成汇编级内存复制标准库函数。 

在第二方面,本发明实施例提供了又一种汇编级memcpy标准库函数的生成方法,所述方法包括: 

将搬移任务分解为头部搬移任务、循环搬移任务和尾部搬移任务; 

分别根据所述头部搬移任务、循环搬移任务、尾部搬移任务、目标机器 可用数据搬移指令集及其相应的地址对齐要求和所述目标机器当前可用的硬件资源信息,对所述目标机器可用数据搬移指令集进行第一功能筛选,并且分别生成第一头部搬移模式集合、第一循环搬移模式集合和第一尾部搬移模式集合; 

根据每个搬移模式所含有的数据搬移指令个数,对所述第一头部搬移模式集合、第一循环搬移模式集合和第一尾部搬移模式集合分别进行第一性能筛选,分别生成第二头部搬移模式集合、第二循环搬移模式集合和第二尾部搬移模式集合; 

将所述第二头部搬移模式集合、第二循环搬移模式集合和第二尾部搬移模式集合中相应的各个元素进行有序组合得到组合搬移模式集合,根据所述组合搬移模式集合中各个元素含有的各条指令执行代价,对所述组合搬移模式集合进行第二性能筛选,得到满足数据搬移要求的执行代价最小的组合搬移模式; 

根据所述组合搬移模式生成汇编级内存复制标准库函数。 

在第三方面,本发明实施例提供了一种汇编级memcpy标准库函数的生成装置,所述装置包括: 

第一功能筛选单元,用于根据数据搬移要求、目标机器可用数据搬移指令集及其相应的地址对齐要求和当前可用的硬件资源信息,对所述目标机器可用数据搬移指令集进行第一功能筛选,生成满足搬移要求的搬移模式集合; 

第一性能筛选单元,用于根据每个搬移模式含有的数据搬移指令个数,对所述搬移模式集合进行第一性能筛选,得到最精简搬移模式; 

生成单元,用于根据所述最精简搬移模式生成汇编级内存复制标准库函数。 

在第四方面,本发明实施例提供了又一种汇编级memcpy标准库函数的生成装置,所述装置包括: 

分解单元,用于将搬移任务分解为头部搬移任务、循环搬移任务和尾部 搬移任务; 

第一功能筛选单元,用于分别根据所述头部搬移任务、循环搬移任务、尾部搬移任务、目标机器可用数据搬移指令集及其相应的地址对齐要求和所述目标机器当前可用的硬件资源信息,对所述目标机器可用数据搬移指令集进行第一功能筛选,并且分别生成第一头部搬移模式集合、第一循环搬移模式集合和第一尾部搬移模式集合; 

第一性能筛选单元,用于根据每个搬移模式所含有的数据搬移指令个数,对所述第一头部搬移模式集合、第一循环搬移模式集合和第一尾部搬移模式集合分别进行第一性能筛选,分别生成第二头部搬移模式集合、第二循环搬移模式集合和第二尾部搬移模式集合; 

第二性能筛选单元,用于将所述第二头部搬移模式集合、第二循环搬移模式集合和第二尾部搬移模式集合中相应的各个元素进行有序组合得到组合搬移模式集合,根据所述组合搬移模式集合中各个元素含有的各条指令执行代价,对所述组合搬移模式集合进行第二性能筛选,得到满足数据搬移要求的执行代价最小的组合搬移模式; 

生成单元,用于根据所述组合搬移模式生成汇编级内存复制标准库函数。 

根据本发明实施例提供的汇编级memcpy标准库函数的生成方法及装置确定的汇编级memcpy标准库函数,搬移性能较优,可移植性较好。 

附图说明

图1是本发明实施例一提供的汇编级memcpy标准库函数的生成方法流程图; 

图2是本发明实施例一提供的数据规模为8的搬移模式汇编代码片段示意图; 

图3是本发明实施例二提供的汇编级memcpy标准库函数的生成方法流程图; 

图4是本发明实施例三提供的汇编级memcpy标准库函数的生成装置示意图; 

图5是本发明实施例四提供的汇编级memcpy标准库函数的生成装置示意图。 

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明具体实施例作进一步的详细描述。 

memcpy标准库函数的典型实现算法是单字节的数据搬移,然而这种算法在数据规模较小时性能尚可,当数据规模较大时,实现代价很大,性能极低。因此,如何实现多字节的拷贝是众多memcpy标准库函数优化算法的设计重点。现代微处理器的指令集都提供了字节、半字、字寻址,一般都支持多字节的搬移指令,为了充分发挥处理器的数据带宽,我们在内存中进行数据搬移时,根据目标机器支持的指令集,每次对有效指令支持的字节数进行搬移。然而,当实现多字节数据搬移时,需要考虑数据地址的对齐问题,如:4字节取数指令要求源数据内存地址必须为4字节对齐,否则不对齐的访问会触发异常。因此,结合搬移数据地址对齐与否,选取可用的数据搬移指令,是由程序自动生成优化的memcpy标准库函数的汇编代码考虑的关键。对于某一特定的数据搬移要求,基于目标机器可用数据搬移指令集,可用的搬移模式是明确的,且当有效数据搬移指令可选时,得到的搬移模式不唯一,其实现代价也各异。 

下述实施例描述的为本发明实施例提供的汇编级memcpy标准库函数的生成过程,图1是本发明实施例一提供的汇编级memcpy标准库函数的生成方法流程图。如图1所示,本发明实施例包括: 

步骤101,根据数据搬移要求、目标机器可用数据搬移指令集及其相应的地址对齐要求和当前可用的硬件资源信息,对所述目标机器可用数据搬移指令集进行第一功能筛选,生成满足搬移要求的搬移模式集合。 

其中,数据搬移要求是指memcpy标准库函数的三个输入参数s1,s2,n,分别为目标搬移地址、源搬移地址和数据规模。 

另外,在进行第一功能筛选之前,首先定义搬移模式。假定目标机器可 用数据搬移指令集为φ,i为其中的某条具体数据搬移指令(i.bytes表示i具备属性bytes,代表搬移指令i可搬移数据的字节数),由此定义某一搬移模式为A,A为由n条数据搬移指令组成的有序n元组,记为A(i1,i2,...in),并且,A中所有指令可搬移数据的字节数总和与数据搬移要求中的数据规模相同。 

第一功能筛选具体过程为:根据数据搬移要求,遍历目标机器可用数据搬移指令集φ,根据当前的地址信息,判断当前指令是否满足相应的地址对齐条件,若不满足,则取下一条指令继续筛选,否则,判断筛选出的指令所需要的硬件资源能否满足,若不满足则取下一条指令继续筛选,若满足,则将该指令添加到当前搬移模式A中,并根据当前搬移模式中已有的搬移指令的可搬移数据的字节数总和及数据搬移要求中的数据规模,判断当前搬移模式生成是否完成,如果没有完成,则取下一条数据搬移指令继续筛选,否则,当前搬移模式生成结束,开始新一个搬移模式的生成。按照上述方法对目标机器可用数据搬移指令集进行筛选,直到生成所有满足搬移要求的搬移模式。 

由于汇编代码的实现依赖于目标硬件平台,因此可用搬移模式的生成与目标机器的硬件特性密切相关。如果在搬移模式生成过程中,目标机器的硬件特性不能满足当前搬移模式生成时需要的相关条件,如数据搬移指令相应的地址对齐要求、所需的硬件资源等,则当前搬移模式生成失效。因此,在上述第一功能筛选过程中,需要及时携带相关硬件信息并随时跟踪,以判断当前搬移模式是否有效。 

步骤102,根据每个搬移模式含有的数据搬移指令个数,对所述搬移模式集合进行第一性能筛选,得到最精简搬移模式。 

具体地,为了保证程序生成性能较优的memcpy汇编代码,需要对生成的搬移模式集合进行第一性能筛选。 

基于memcpy标准库函数的行为本质,在根据某一搬移要求生成多个搬移模式时,对目标机器可用数据搬移指令集进行第一功能筛选后,能够明确得到满足搬移要求的所有搬移模式构成的集合,而搬移模式集合中的各元素的 执行性能取决于它的元素个数。例如,图2是本发明实施例一提供的数据规模为8的搬移模式汇编代码片段示意图。如图2所示,图2中(a)为单字节搬移模式,图2中(b)为4字节搬移模式,对比二者可知,搬移模式中含有的元素个数越少,搬移数据时使用的硬件资源越少,汇编代码的规模也越小。而且,对于一般的微处理器来说,单字节或多字节的访存指令执行代价上无异。即越精简的搬移模式越能有效利用指令集,充分发挥处理器的数据带宽。因此,经过第一性能筛选,可以筛选出最精简的搬移模式,并由此得到优化的memcpy标准库函数汇编代码的核心部分。 

需要说明的是,对搬移模式集合进行第一性能筛选,若得到多个同样精简的搬移模式,取其中任意一个搬移模式作为所述最精简搬移模式。 

步骤103,根据所述最精简搬移模式生成汇编级内存复制标准库函数。 

上述实施例描述的为,根据数据搬移要求、目标机器可用数据搬移指令集及其相应的地址对齐要求和当前可用的硬件资源信息,对目标机器可用数据搬移指令集进行第一功能筛选,生成满足搬移要求的所有搬移模式构成的集合,并对所述搬移模式集合进行第一性能筛选,得到最精简的搬移模式,由此确定的汇编级memcpy标准库函数,搬移性能较优,可移植性较好。 

下述实施例描述的为当数据规模较大时,若将数据规模全部展开实现数据搬移,不仅得到的搬移模式集合规模极大,且搬移模式尺寸也与数据规模成线性增长,导致汇编代码规模急剧增多。因此,需要分解搬移任务,形成循环搬移数据的形式,并且各自生成相应的搬移模式,从而缩减生成的汇编代码规模。图3是本发明实施例二提供的汇编级memcpy标准库函数的生成方法流程图。如图3所示,本发明实施例包括: 

步骤301,将搬移任务分解为头部搬移任务、循环搬移任务和尾部搬移任务。 

具体地,当搬移数据规模较大时,若以循环的形式进行数据搬移不仅能够缩小代码规模,也更能有效的利用指令集。因此,可以先将搬移任务分解为 头部搬移任务、循环搬移任务和尾部搬移任务。例如,若待搬移数据规模为size,则头部搬移任务的规模head_size的取值范围为0~size;循环搬移任务的规模body_size的取值范围为1~size-head_size,循环次数n为(size-head_size)/body_size;尾部搬移任务的规模tail_size的取值范围为(size-head_size)%body_size。对于每一种搬移模式组合,循环搬移任务规模n*body_size、尾部搬移任务规模tail_size以及头部搬移任务大小head_size之和等于所述待搬移数据的规模size。 

步骤302,分别根据所述头部搬移任务、循环搬移任务、尾部搬移任务、目标机器可用数据搬移指令集及其相应的地址对齐要求和所述目标机器当前可用的硬件资源信息,对所述目标机器可用数据搬移指令集进行第一功能筛选,并且分别生成第一头部搬移模式集合、第一循环搬移模式集合和第一尾部搬移模式集合。 

具体地,进行第一功能筛选的过程,在上述实施例中的步骤101中有详细阐述,在此不复赘述。 

步骤303,根据每个搬移模式所含有的数据搬移指令个数,对所述第一头部搬移模式集合、第一循环搬移模式集合和第一尾部搬移模式集合分别进行第一性能筛选,分别生成第二头部搬移模式集合、第二循环搬移模式集合和第二尾部搬移模式集合。 

具体地,进行第一性能筛选的过程,在上述实施例中的步骤102中有详细阐述,在此不复赘述。 

优选地,对第一循环搬移模式集合进行所述第一性能筛选后生成第二循环搬移模式集合之后,还须按照循环次数展开进行第二功能筛选,更新所述第二循环搬移模式集合。具体地,由于进行第一性能筛选后生成的第二循环搬移模式集合规模极大,受指令地址对齐要求的影响,其中可能存在数据搬移过程中访问失效的搬移模式。因此,需要对第二循环搬移模式集合进行第二功能筛选。具体实现步骤如下: 

首先,遍历第二循环搬移模式集合ψ1,假设当前搬移模式为A1(A1∈ψ1),对其进行循环次数展开,得到A1的展开形式A2。 

其次,根据搬移模式生成方法可得到等效的循环搬移任务规模展开后的搬移模式集合Ψ2。 

最后,若A2∈Ψ2,则标记搬移模式A1为有效,否则为无效。 

当遍历完第二循环搬移模式集合ψ1中的每个模式后,会筛选出能够保证正确搬移数据的多个搬移模式,由此更新第二循环搬移模式集合。 

步骤304,将所述第二头部搬移模式集合、第二循环搬移模式集合和第二尾部搬移模式集合中相应的各个元素进行有序组合得到组合搬移模式集合,根据所述组合搬移模式集合中各个元素含有的各条指令执行代价,对所述组合搬移模式集合进行第二性能筛选,得到满足数据搬移要求的执行代价最小的组合搬移模式。 

具体地,对于一般的微处理器来说,汇编代码的执行代价的指标之一为指令的执行周期数,这一指标与目标机器的硬件特性密切相关,可根据不同体系结构在硬件特性自定义文件中定义。汇编级memcpy标准库函数的行为本质为内存间的数据搬移,因此汇编代码中的搬移指令的执行代价在很大程度上决定了整个汇编代码的执行代价。为了获得性能较优的memcpy代码,需要对第二头部搬移模式集合、第二循环搬移模式集合和第二尾部搬移模式集合中相应的各个元素进行有序组合得到组合搬移模式集合,根据所述组合搬移模式集合中各个元素含有的各条指令执行代价,对所述组合搬移模式集合进行第二性能筛选,即根据硬件特性自定义文件中的指令代价信息,计算比较组合搬移模式集合中的各个搬移模式的总体执行代价,得到执行代价近似最小的组合搬移模式。 

步骤305,根据所述组合搬移模式生成汇编级内存复制标准库函数。 

本实施例描述的为当数据规模较大时,将搬移任务分解为头部搬移任务、循环搬移任务和尾部搬移任务,并对各部分数据分别进行第一功能筛选、第 一性能筛选和第二性能筛选,得到满足数据搬移要求的执行代价最小的组合搬移模式。由此生成的汇编级memcpy标准库函数,搬移性能较优,并且可移植性较好。另外,对循环搬移任务进行第一性能筛选后还可以进行第二功能筛选,由此筛选掉失效的搬移模式,以保证生成的汇编级memcpy标准库函数能够正确完成搬移任务。 

相应地,本发明实施例提供了一种汇编级memcpy标准库函数生成装置,图4是本发明实施例三提供的汇编级memcpy标准库函数的生成装置示意图,如图4所示,本发明实施例装置包括:功能筛选单元401、性能筛选单元402和生成单元403。 

功能筛选单元401,用于根据数据搬移要求、目标机器可用数据搬移指令集及其相应的地址对齐要求和当前可用的硬件资源信息,对所述目标机器可用数据搬移指令集进行第一功能筛选,生成满足搬移要求的搬移模式集合。 

性能筛选单元402,用于根据每个搬移模式含有的数据搬移指令个数,对所述搬移模式集合进行第一性能筛选,得到最精简搬移模式。 

生成单元403,用于根据所述最精简搬移模式生成汇编级内存复制标准库函数。 

本发明实施例提供的装置中植入了上述实施例一提供的汇编级memcpy标准库函数的生成方法,即具体工作过程在上述实施例中的步骤101~103中有详细阐述,在此不复赘述。 

上述实施例描述的为,根据数据搬移要求、目标机器可用数据搬移指令及其相应的地址对齐要求和当前可用的硬件资源信息,对目标机器可用数据搬移指令集进行第一功能筛选,生成满足搬移要求的所有搬移模式构成的集合,并对所述搬移模式集合进行第一性能筛选,得到最精简的搬移模式,由此确定的汇编级memcpy标准库函数,搬移性能较优,可移植性较好。 

下述实施例描述的为又一汇编级memcpy标准库函数生成装置,图5是本发明实施例四提供的汇编级memcpy标准库函数的生成装置示意图,如图5所 示,本发明实施例装置包括:分解单元501、第一功能筛选单元502、第一性能筛选单元503、第二性能筛选单元504和生成单元505。 

分解单元501,用于将搬移任务分解为头部搬移任务、循环搬移任务和尾部搬移任务。 

第一功能筛选单元502,用于分别根据所述头部搬移任务、循环搬移任务、尾部搬移任务、目标机器可用数据搬移指令集及其相应的地址对齐要求和所述目标机器当前可用的硬件资源信息,对所述目标机器可用数据搬移指令集进行第一功能筛选,并且分别生成第一头部搬移模式集合、第一循环搬移模式集合和第一尾部搬移模式集合。 

第一性能筛选单元503,用于根据每个搬移模式所含有的数据搬移指令个数,对所述第一头部搬移模式集合、第一循环搬移模式集合和第一尾部搬移模式集合分别进行第一性能筛选,分别生成第二头部搬移模式集合、第二循环搬移模式集合和第二尾部搬移模式集合。 

第二性能筛选单元504,用于将所述第二头部搬移模式集合、第二循环搬移模式集合和第二尾部搬移模式集合中相应的各个元素进行有序组合得到组合搬移模式集合,根据所述组合搬移模式集合中各个元素含有的各条指令执行代价,对所述组合搬移模式集合进行第二性能筛选,得到满足数据搬移要求的执行代价最小的组合搬移模式。 

生成单元505,用于根据所述组合搬移模式生成汇编级内存复制标准库函数。 

优选地,第一性能筛选单元504对第一循环搬移模式集合进行所述第一性能筛选后生成第二循环搬移模式集合之后,还可以按照循环次数展开进行第二功能筛选,以更新所述第二循环搬移模式集合。 

本实施例提供的汇编级memcpy标准库函数生成装置中植入了本发明实施例二提供的汇编级memcpy标准库函数的生成方法,即具体工作过程在上述实施例中的步骤301~305中有详细阐述,在此不复赘述。 

本实施例描述的为当数据规模较大时,将搬移任务分解为头部搬移任务、循环搬移任务和尾部搬移任务,并对各部分数据分别进行第一功能筛选、第一性能筛选和第二性能筛选,得到满足数据搬移要求的执行代价最小的组合搬移模式。由此生成的汇编级memcpy标准库函数,搬移性能较优,并且可移植性较好。另外,对循环搬移任务进行第一性能筛选后还可以进行第二功能筛选,由此筛选掉失效的搬移模式,以保证生成的汇编级memcpy标准库函数能够正确完成搬移任务。 

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。 

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号