专利名称:数据处理装置及其内存数据处理方法
技术领域:
本发明涉及计算机应用技术领域,尤其涉及一种数据处理装置及其内存数据处理方法。
背景技术:
各种数据处理设备中,经常利用内存进行数据处理(以下简称内存数据处理), 例如,进行内存数据拷贝、删除、移动等处理,用于执行这些处理的函数采用C语言来实现。CPU (Central Processing Unit,中央处理器)通过各种内存处理函数处理一个字节的数据和处理一个机器字的数据一样,都是在一条指令、一个CPU时钟周期内完成的。但是,这种处理方式并不能有效利用数据设备的硬件性来提高内存数据处理效率。例如,在Linux系统中,Glibc库是最底层的函数库,为其上的应用程序提供系统接口以及其它功能函数,Linux系统上的其它函数库都需要直接或间接依赖于Glibc库。此外,Glibc库还是以C语言构建开发程序时使用的基本函数库。例如,作为基本函数库中函数之一的memcpy即为通过C语言来实现的内存数据拷贝函数。以龙芯3A处理器为例,龙芯3A处理器实现了 64位的MIPS (millions ofinstructions per second,百万条指令/秒)III指令集,整数寄存器和浮点寄存器均为64位,指令流水线每个时钟周期取四条指令进行译码,将译码后的指令动态地发射到五个全流水的功能部件中。龙芯3A处理器包含两级Cache (高速缓冲存储器)结构,一级Cache中包括数据或指令,为64kB ;二级Cache是混合Cache,其中同时包括指令和数据,为64kB。一级Cache和二级Cache都采用四路组相联结构,均采用随机替换算法,每个Cache行大小均为32字节,即可以存放8个字。目前,在龙芯3A处理器中,内存处理函数通常按照机器字长逐字进行数据操作,以机器字为单位,每次处理机器字数量的数据,直至剩余数据少于机器字数量的数据。然后,以字节为单位进行数据处理,直至将数据处理完毕。在32位机中,一个机器字等于4个字节。可见,对于高速缓冲存储器及寄存器均已为64位的龙芯3A,在内存拷贝过程中仍然统一采取以机器字或者字节为单位并不能充分利用硬件能力,效率比较低。此时,如果采用C语言来实现内存拷贝等处理,在龙芯3A处理器的数据处理过程,需要通过编译器将C语言编译成汇编语言,在此编译过程中编译器可能产生低效、冗余的代码,且会按编译器的方式进行编译和优化,即使对小数据量的拷贝也难以高效进行。
发明内容
本发明所要解决的技术问题之一是需要提供一种能够提高内存数据处理效率的数据处理装置及其内存数据处理方法。为了解决上述技术问题,本发明提供了一种数据处理装置的内存数据处理方法,该方法包括第一确定步骤,确定待处理数据的数据量;第二确定步骤,根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量,其中,所述单次数据处理量小于等于所述待处理数据的数据量;处理步骤,通过执行n次数据处理子任务来完成对所述待处理数据的数据量的一部分,其中,n等于所述待处理数据的数据量与所述单次数据处理量的商,所述单次数据处理量为每执行一次所述数据处理子任务所处理的数据量。根据本发明的另一方面的内存数据处理方法,还包括若所述待处理数据中还存在未被处理的数据,则将所述待处理数据更新为经过所述处理步骤后仍未被处理的数据,并返回所述第一确定步骤。根据本发明的另一方面的内存数据处理方法,在根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量的步骤中,当所述待处理数据的数据量大于等于所述数据处理装置的一个机器字长时,将所述单次数据处理量设置小于等于待处理数据的数据量且为所述数据处理装置的机器字长的整数倍。根据本发明的另一方面的内存数据处理方法,在根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量的步骤中,当待处理数据的数据量大于等于所述数据处理装置的一个机器字长时,使得单次数据处理量小于等于待处理数据的数据量且为所述数据处理装置的机器字长的2的整数次幂倍。根据本发明的另一方面的内存数据处理方法,在根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量的步骤中,当所述待处理数据的数据量大于等于所述数据处理装置的一个机器字长时,使得所述单次数据处理量小于等于待处理数据的数据量且为所述数据处理装置的机器字长的2的最大整数次幂倍。根据本发明的另一方面的内存数据处理方法,在根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量的步骤中,当所述待处理数据的数据量小于所述数据处理装置的一个机器字长时,使得所述单次数据处理量等于所述待处理数据的数据量。根据本发明的另一方面的内存数据处理方法,利用汇编语言来实现本方法。根据本发明的另一方面的内存数据处理方法,所述内存数据处理为内存数据拷贝、删除和/或移动处理。根据本发明的又一方面,还提供了一种数据处理装置,所述数据处理装置的机器字长大于32位,其中,所述数据处理装置采用上述的内存数据处理方法来处理数据。根据本发明的又一方面,上述数据处理装置为龙芯3A。与现有技术相比,本发明的一个或多个实施例可以具有如下优点在本发明的内存数据处理方法能够尽可能减少循环次数,减少分支情况,充分利用流水处理,使得Cache尽量命中,从而提高数据处理效率。本发明的一个实施例中,通过根据机器字长和待处理数据的数据量来设定单次数据处理量,且通过顺次执行多次数据处理子任务来完成对该待处理数据的数据量的一部分,可顺次执行批量(一个以上机器字长的)的数据,这样相比每处理32位数据就需要执行一次循环跳转的传统技术,大大提高了数据处理效率。本发明的几个实施例中,通过进一步改进单次数据处理量的确定方式,可进一步减少循环次数,从而进一步提高数据处理效率。虽然在下文中将结合一些示例性实施及使用方法来描述本发明,但本领域技术人员应当理解,为并不旨在将本发 明限制于这些实施例。反之,旨在覆盖包含在所附的权利要求书所定义的本发明的精神与范围内的所有替代品、修正及等效物。本发明的其他优点、目标,和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书,权利要求书,以及附图中所特别指出的结构来实现和获得。
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中图I是根据本发明第一实施例的数据处理装置的内存数据处理方法的流程示意图;图2是根据本发明第二实施例的数据处理装置的内存数据处理方法的流程示意图。
具体实施例方式以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。第一实施例信息处理设备中通过提供常见的通用功能实现,如字符串处理等。它们提供基本的、与操作系统无关的功能,其有一定的计算量,这里关注的就这些函数中关于内存数据处理的方法。为了便于说明,本实施例的数据处理装置以龙芯3A作为例子来进行说明,本领域技术人员可以明白,本发明对于其它信息处理装置也同样适应。本发明的发明人注意到,内存拷贝是较底层的操作,其与硬件结合紧密。龙芯3A等信息处理装置对缓存行的操作都是完整进行的,更具体地,龙芯3A的Cache行(亦称作高速缓存行或缓存行)大小为64字节,一个Cache行可以存放8个字,这样,即使在只要读一个字节数据的情况下,信息处理装置的CPU实际上也会载入(读取)整个Cache行,因此,如何使得CPU每读一次缓存行都尽可能读取更多的数据,是提高内存数据拷贝的关键因素之一。本发明的一方面正是基于这一原理作出的。此外,本发明的发明人还注意到,转移/跳转指令会增加额外的开销,而且会刷新缓冲行,会导致必须重装数据到内存,而内存数据拷贝方法(通常通过memcpy函数来实现)又不可避免的存在循环和不少的分支跳转情况。因此,如何使得内存数据拷贝(本发明对于其它例如数据删除、数据移动等数据处理也适用)方法尽可能减少循环次数,减少分支情况,充分利用流水处理,使得Cache尽量命中。通常把指令已经在Cache中存在或者没有被替换出去的情况叫Cache命中。本发明能够较好地将要执行的指令都预先装入Cache然后再执行,以提高Cache命中。由于载入指令的开销相对指令执行还大,本发明通过减少将指令载入Cache的次数,可减少时间开销。本发明通过使得Cache尽量命中,可尽量实现在一个CPU时钟周期完成一条指令,从而使得C PU的运算速度得以提升,提高内存数据拷贝效率。本实施例将循环根据机器字尽可能地展开,减少了循环次数,减少了取指次数;对于每次循环,增加处理数据量;对数据处理的读取和写入操作进行分组,通过执行一次数据处理子任务处理一个数据分组,这样尽可能将读取操作连续,写入操作连续,从而减少了数据处理开销,减少处理器切换效率,提高了内存数据拷贝效率。下面将参考图I详细说明本实施例的各步骤。步骤110,确定待处理数据的数据量。步骤120,根据机器字长和待处理数据的数据量来设定单次数据处理量,其中,单次数据处理量小于等于待处理数据的数据量。以S表示单次数据处理量。由于龙芯3A的机器字长为64位,即8字节,因此对于龙芯3A,可优选地使得S设置为1,2,3...个机器字长,对应于8、16、24个字节等。步骤130,通过执行n次数据处理子任务来完成对该待处理数据的数据量的一部分,其中,n等于待处理数据的数据量与单次数据处理量的商,每执行一次数据处理子任务将处理单次数据处理量S的数据。可选地,还可包括步骤140,若还存在未被处理的数据,则将待处理数据更新为经过步骤130后仍未被处理的数据并返回步骤110。此外,也可以通过传统技术来执行步骤130后仍未被处理的数据而无需返回步骤110。通过上述流程可知,本实施通过循环来处理待处理数据,并且每次循环中,将数据分为多个单位来处理。下面通过几个实例来进行详细说明。在一个例子中,若待处理数据的数据量为200字节,表示为T = 200。以下分析在该例子中各步骤的处理。在第一次循环中,步骤110确定为待处理数据的数量为200字节。步骤120中,根据龙芯3A机器字长64位(8字节)和所述待处理数据的数据量200来设定单次数据处理量S。优选地,当待处理数据的数据量大于等于一个机器字长时,将单次数据处理量S设置为小于等于待处理数据的数据量且为龙芯3A的机器字长的整数倍,例如可将单次数据处理量设置为机器字长的I倍、2倍、3倍、4倍或5倍等,对应于8、16、24、32或40字节。考虑到龙芯3A —个机器字长为8个字节,在本例中,将单次数据处理量设为8X3字节,即S = 24,这种情况下,步骤130中,n为200除以24的商,即n = 8,表示需要执行8次数据处理子任务,区别于传统技术中一次循环只执行32位数据,本例子在第一次循环中,逐次执行n = 8次数据处理子任务,每执行一次处理S = 24字节的数据量;而步骤140中,还剩下200-24X 8 = 8个字节的数据量,返回步骤110,亦即,此时执行完第一次循环,将进入第二次循环。在第二次循环中,步骤110确定待处理数据的数据量为8个字节。由于8个字节正好为I个机器字,在步骤120可设置S = 8。步骤130中,执行一次每次处理8个字节的数据处理子任务即可完成对所有待处理数据的处理,在步骤140中结束处理。第二实施例在本实施例中,以步骤220替代了第一实施例的步骤120,其它步骤与第一实施例类似。与第一实施例相同或类似的步骤,采用与第一实施例相同的附图标记,并且不再对其重复说明。在步骤220中,优选为当待处理数据的数据量大于等于一个机器字长时,使得单次数据处理量S满足小于等于待处理数据的数据量且为机器字长的2的整数次幂倍。更具 体地,参考图2,若待处理数据的数据量为500字节,表示为T = 500。以下分析在该例子中各步骤的处理。在第一次循环中,步骤110确定为待处理数据的数量为500字节。步骤220中,根据龙芯3A机器字长8字节和所述待处理数据的数据量500来设定单次数据处理量S。优选地,将单次数据处理量S设置为机器字长的2的3次幂倍,即,使得S = 8字节X23 = 64字节。进入步骤130,此时,n为500除以64的商,即n = 7,表示需要逐次执行7次数据处理子任务,区别于传统技术中一次循环只执行32位数据,本例子在第一次循环内部无需再执行循环跳转操作,而是逐次执行n = 7次数据处理子任务,每次数据处理子任务处理64个字节的数据;而步骤140中,还剩下500-64X7 = 52个字节的数据量。此时,第一次循环结束,然后通过返回步骤110将进入第二次循环。在第二次循环中,步骤110确定待处理数据的数据量为52个字节。在步骤220中,更优选地,当待处理数据的数据量大于等于一个机器字长时,使得单次数据处理量S满足小于等于待处理数据的数据量且为机器字长的2的最大整数次幂倍(可以理解,在第一次循环中也可以采用该优选方式来确定S的值)。这里,由于8X22等于32,而8X23等于64,而64大于待处理数据的数据量52,因此满足小于等于待处理数据的数据量且为机器字长的2的最大整数次幂倍的S应为8X 22,步骤130中,待处理数据的数据量52除以S的商为I。实际上当使得使得单次数据处理量S满足小于等于待处理数据的数据量且为机器字长的2的最大整数次幂倍,n必须等于1,因此可以在不求得待处理数据的数据量与单次数据处理量的商的情况下,直接使得n = 1,亦即,该循环只执行一次数据处理子任务,而该数据处理子任务顺次处理S个字节。因此在步骤130中,只需执行一次每次处理S = 32字节的数据处理子任务。此时,第二次循环结束,然后通过返回步骤110将进入第三次循环。在第三次循环中,步骤110确定待处理数据的数据量为52-32 = 20个字节。在步骤220中,使得单次数据处理量S满足小于等于待处理数据的数据量且为机器字长的2的最大整数次幂倍。这里,由于8X 21等于16,而8X 22等于32,而32大于待处理数据的数据量20,因此满足小于等于待处理数据的数据量且为机器字长的2的最大整数次幂倍的S应为8X21,步骤130中,类似在第二次循环中那样,只需执行一次每次处理S = 16字节的数据处理子任务。也就是说,执行一次数据处理子任务,该数据处理子任务处理16个字节。此时,第三次循环结束,然后通过返回步骤110将进入第四次循环。在第四次循环中,步骤110确定待处理数据的数据量为20-16 = 4个字节。在步骤120中,待处理数据的数据量小于一个机器字长。当待处理数据的数据量小于一个机器字长时,优选为使得单次数据处理量S等于待处理数据的数据量,亦即,通过执行一次单次数据处理量S等于待处理数据的数据量的数据处理子任务即可全部处理完成。处理结束。
此外,为了最大限度利用硬件能力,优选为使用MIPS汇编语言等汇编语言代替C语言来实现本发明的方法,使得描述更精确、直接,目标代码更精练,且没有了从C语言编译成汇编语言的编译过程。直接使用汇编编程,使得程序占用资源少,效率高、性能高。在编译汇编文件过程中,适当采用优化编译。虽然上面重点以龙芯3A作为例子对本发明的数据处理装置及其内存数据处理方法进行了说明,但本发明同样适应于其它数据处理装置,优选为应用于机器长字大于32位的数据处理装置。以上所述,仅为本发明的具体实施案例,本发明的保护范围并不局限于此,任何熟悉本技术的技术人员在本发明所述的技术规范内,对本发明的修改或替换,都应在本发明的保护范围之内。虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
权利要求
1.一种数据处理装置的内存数据处理方法,其特征在于,包括 第一确定步骤,确定待处理数据的数据量; 第二确定步骤,根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量,其中,所述单次数据处理量小于等于所述待处理数据的数据量; 处理步骤,通过执行n次数据处理子任务来完成对所述待处理数据的数据量的一部分,其中,n等于所述待处理数据的数据量与所述单次数据处理量的商,所述单次数据处理量为每执行一次所述数据处理子任务所处理的数据量。
2.根据权利要求I所述的方法,其特征在于,还包括 若所述待处理数据中还存在未被处理的数据,则将所述待处理数据更新为经过所述处理步骤后仍未被处理的数据,并返回所述第一确定步骤。
3.根据权利要求I所述的方法,其特征在于,在根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量的步骤中, 当所述待处理数据的数据量大于等于所述数据处理装置的一个机器字长时,将所述单次数据处理量设置小于等于待处理数据的数据量且为所述数据处理装置的机器字长的整数倍。
4.根据权利要求I所述的方法,其特征在于,在根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量的步骤中, 当待处理数据的数据量大于等于所述数据处理装置的一个机器字长时,使得单次数据处理量小于等于待处理数据的数据量且为所述数据处理装置的机器字长的2的整数次幂倍。
5.根据权利要求I所述的方法,其特征在于,在根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量的步骤中, 当所述待处理数据的数据量大于等于所述数据处理装置的一个机器字长时,使得所述单次数据处理量小于等于待处理数据的数据量且为所述数据处理装置的机器字长的2的最大整数次幂倍。
6.根据权利要求I所述的方法,其特征在于,在根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量的步骤中, 当所述待处理数据的数据量小于所述数据处理装置的一个机器字长时,使得所述单次数据处理量等于所述待处理数据的数据量。
7.根据权利要求I所述的方法,其特征在于,利用汇编语言来实现本方法。
8.根据权利要求I所述的方法,其特征在于,所述内存数据处理为内存数据拷贝、删除和/或移动处理。
9.一种数据处理装置,所述数据处理装置的机器字长大于32位,其中,所述数据处理装置采用权利要求I至8中任一项所述的内存数据处理方法来处理数据。
10.根据权利要求9所述的方法,其特征在于,所述数据处理装置为龙芯3A。
全文摘要
本发明公开了一种数据处理装置及其内存数据处理方法。该方法包括确定待处理数据的数据量;根据所述数据处理装置的机器字长和所述待处理数据的数据量来设定单次数据处理量,其中,所述单次数据处理量小于等于所述待处理数据的数据量;通过执行n次数据处理子任务来完成对所述待处理数据的数据量的一部分,其中,n等于所述待处理数据的数据量与所述单次数据处理量的商,所述单次数据处理量为每执行一次所述数据处理子任务所处理的数据量。在本发明的内存数据处理方法能够提高数据处理效率。
文档编号G06F9/44GK102662678SQ20121011365
公开日2012年9月12日 申请日期2012年4月17日 优先权日2012年4月17日
发明者何曌君, 夏颖, 杨冲, 胡秋立, 许国昌, 黄卫军 申请人:中标软件有限公司