并行归并排序的制作方法

文档序号:12287733阅读:388来源:国知局
本发明涉及一种排序方法和一种包括多个互联处理节点并用于对在所述处理节点上分布的输入数据进行排序的处理系统。本发明还涉及以非对称内存为特征的计算机硬件以及一种用于此种非对称内存的并行排序方法。
背景技术
::现代计算机硬件100的特点是每个执行单元具有非对称内存,其中执行单元包括处理器101、103和内核109、119等,在现代计算机硬件上所有内存位置被划分为本地107(相对于节点0101)和远程117内存,如图1所示。访问108本地内存107比访问远程内存117要快,这是因为物理访问路径102的长度不同,如图1所示。非对称内存所产生的问题是,在对于内存非对称性不可知的计算方法中,执行成本高于优化本地和远程内存使用所产生的执行成本。排序被认为是许多计算领域中使用的基本操作之一。例如,很明显需要在非对称内存中进行排序,同时需要在数据库系统中对并行查询方法所产生的查询结果进行排序。SQL(StructuredQueryLanguage,结构化查询语言)子句“ORDERBY”和“GROUPBY”需要这种排序。一些连接方法,像排序合并连接,也需要排序。有许多算法利用系统的多个内核使排序并行并提高性能。但是这些算法都没有考虑内存架构的非对称性。近来,在排序算法中,随机对数据进行分区,并且允许不同线程对该数据进行随机操作。这导致过多地使用远程访问和接口互联,因此会严重限制系统吞吐量。现代处理器200采用如图2所示的多个内核201、202、203、204、主存器205和若干级别的内存缓存206、207、208。目前的排序算法,例如,如US8332595B2、US6427148B1、US5852826A和US7536432B2所描述,并没有解决数据局部性和缓存意识问题。这导致频繁的缓存未命中和执行效率低。处理器设有SIMD(single-instruction,multiple-data,单指令流多数据流)硬件,该SIMD硬件允许执行所谓的矢量化处理,即,在大量紧密相邻的数据上执行相同操作。目前的排序方法未针对SIMD进行优化。技术实现要素:本发明的目的是提供一种改进的排序技术。该目的由独立权利要求的特征来实现。其它实施方式从从属权利要求、描述内容和附图中显而易见。如下文所描述的本发明基于以下发现:可通过利用非对称内存访问延迟的差异提供一种改进的排序技术,以便显著降低内存访问高度密集的排序算法中的内存访问成本。为了详细地描述本发明,将使用以下术语、缩略语和表示:DBMS:数据库管理系统。SQL:结构化查询语言。CPU:中央处理器。SIMD:单指令流多数据流。NUMA:非一致性内存访问。数据库管理系统(databasemanagementSystem,DBMS)是经特殊设计的应用,这些应用与用户、其它应用和数据库本身交互以获取和分析数据。通用数据库管理系统(databasemanagementsystem,DBMS)是一种设计为支持数据库定义、创建、查询、更新和管理的软件系统。不同的DBMS可通过使用诸如SQL和ODBC或JDBC等标准互操作以允许单个应用与一个以上数据库一起操作。SQL(StructuredQueryLanguage,结构化查询语言)是一种专用编程语言,设计用于管理保存在关系数据库管理系统(relationaldatabasemanagementsystem,RDBMS)中的数据。最初以关系代数和元组关系演算为基础,SQL由数据定义语言和数据操作语言组成。SQL的范围包括数据插入、查询、更新和删除、模型创建和修改以及数据访问控制。单指令流多数据流(singleinstruction,multipledata,SIMD)是计算机架构分类中的一类并行计算机。SIMD描述具有多个处理元件的计算机,这些处理元件同时对多个数据点执行相同操作。因此,这些机器利用数据级并行操作,这些机器包括阵列处理器或GPU等。根据第一方面,本发明涉及一种用于对分布在多个互联处理节点的本地内存分区上的输入数据进行排序的排序方法,所述排序方法包括:通过将第一进程部署在处理节点上,在本地按每所述处理节点对所述分布式输入数据进行排序,以在所述处理节点的所述本地内存分区上产生多个已排序列表;在所述处理节点的所述本地内存分区上创建值域块序列,其中每个值域块用于存储在其值域内的数据值;通过将第二进程部署在所述处理节点上,将所述多个已排序列表复制到所述值域块序列,其中每个值域块接收所述已排序列表的元素,所述元素的值在其值域内;通过使用所述第二进程,在本地按每个处理节点对所述值域块的元素进行排序,以在所述值域块上产生已排序元素;以及相对于值域块的值域从所述值域块序列中按顺序读取所述已排序元素,以获得所述已排序输入数据。由于在很大程度上使用本地数据访问而避免了远程访问损失,所以这种排序算法的效率得以提高。在处理节点的本地内存分区上创建值域块序列允许使用顺序访问数据而不是随机访问,这提高了访问局部性和缓存效率。尤其是在远程访问的情况下,使用顺序访问利用抵消远程访问损失的预提取。在计算中使用邻近数据项的矢量允许使用SIMD。根据所述第一方面,在所述排序方法的第一可能实施形式中,所述多个互联处理节点的所述本地内存分区被结构化为非对称内存。对数据进行顺序访问而不是随机访问提高了非对称内存上的访问局部性和缓存效率。根据如上所述第一方面或根据所述第一方面的所述第一实施形式,在所述排序方法的第二可能实施形式中,第一进程的数目等于本地内存分区的数目。当第一进程的数目等于本地内存分区的数目时,可通过相应第一进程并行处理每个本地内存分区,从而提高处理速度。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述排序方法的第三可能实施形式中,所述第一进程产生不相交的已排序列表。当所述第一进程产生不相交的已排序列表时,一个列表中的本地排序可以在没有访问其它列表的情况下执行。这提高了处理效率。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述排序方法的第四可能实施形式中,所述在本地按每个处理节点对所述分布式输入数据进行排序是基于串行排序流程和并行排序流程之一。在排序步骤中使用仅本地内存访问减少了接口间通信开销,因此降低了计算复杂性并提高了所述排序方法的性能。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述排序方法的第五可能实施形式中,第二进程的数目等于值域块的数目。当第二进程的数目等于值域块的数目时,可通过相应的第二进程并行处理每个值域区块,从而提高处理速度。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述排序方法的第六可能实施形式中,每个值域块具有不同的值域。当每个值域区具有不用的值域时,每个内存分区可对不同的数据进行操作,从而允许并行处理,这提高了处理速度。根据如上所述第一方面或根据所述第一方面的前述任一实施形式,在所述排序方法的第七可能实施形式中,每个值域块接收多个已排序列表,具体而言,已排序列表的数目对应于所述第一进程的数目。因此,来自不同处理节点的相似值域中的数据可以在一个处理节点上集中,这提高了所述方法的计算效率。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述排序方法的第八可能实施形式中,在一个处理节点上运行的所述第二进程中的一个第二进程在将所述多个已排序列表复制到所述值域块序列时从所述一个处理节点的所述本地内存以及从其它处理节点的所述本地内存中按顺序读取。在复制步骤中使用顺序远程内存访问减少了远程访问损失。根据所述第一方面的所述第八实施形式,在所述排序方法的第九可能实施形式中,在所述第一个处理节点上运行的所述第二进程在将所述多个已排序列表复制到所述值域块序列时仅写入所述一个处理节点的所述本地内存。这样,所述第二进程在写入内存时不需要等待接口间连接响应。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述排序方法的第十可能实施形式中,所述从所述值域块序列中按顺序读取所述已排序元素利用硬件预提取执行。利用硬件预提取提高了处理速度。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述排序方法的第十一可能实施形式中,所述第二进程使用矢量化处理,具体而言是在单指令流多数据流硬件块上运行的矢量化处理,用于将所述已排序列表的值与所述值域块的值域进行比较以及用于将所述多个已排序列表复制到所述值域块序列中。在排序步骤中使用矢量化处理,诸如SIMD,提高了排序性能。使用矢量化处理,诸如SIMD,同时复制允许利用全内存带宽。根据如上所述第一方面或根据所述第一方面的任一前述实施形式,在所述排序方法的第十二可能实施形式中,所述多个处理节点通过接口间连接进行互联;一个处理节点的本地内存是另一处理节点的远程内存。所述方法使用通过接口间连接进行互联的非对称内存在标准硬件架构上实施。所述方法可应用于多个内核和许多内核处理器平台上。根据第二方面,本发明涉及一种处理系统,包括:多个互联处理节点,每个互联处理节点包括本地内存和处理单元,其中输入数据分布在所述处理节点的所述本地内存上,所述处理单元用于:在本地按每处理节点对所述分布式输入数据进行排序,以在所述处理节点的所述本地内存上产生多个已排序列表;在所述处理节点的所述本地内存上创建值域块序列,其中每个值域块用于存储在其值域内的数据值;将所述多个已排序列表复制到所述值域块序列,其中每个值域块接收所述已排序列表的元素,所述元素的值在其值域内;在本地按每处理节点对所述值域块的所述元素进行排序,以在所述值域块上产生已排序元素;以及相对于所述已排序元素的值域从所述值域块序列中按顺序读取所述已排序元素,以获得所述已排序输入数据。这种对分布式输入数据进行排序的新处理系统能够对大量随机分布的值进行排序,从而最大化硬件资源利用效率。根据第三方面,本发明涉及一种包括可读存储介质的计算机程序产品,所述可读存储介质将程序代码存储在其上以供计算机使用,所述程序代码对分布在多个互联处理节点的本地内存分区上的输入数据进行排序,所述程序代码包括执行以下操作的指令:通过使用在所述处理节点上运行的第一进程在本地按每处理节点对所述分布式输入数据进行排序,以在所述处理节点的所述本地内存分区上产生多个已排序列表;在所述处理节点的所述本地存储器分区上创建值域块序列,其中每个值域块用于存储在其值域内的数据值;通过使用第二进程将所述多个已排序列表复制到所述值域区序列,其中每个值域块接收所述已排序列表中的元素,其值在其值域内;通过使用所述第二进程在本地按每处理节点对所值域块的所述元素进行排序,以在所述值域块上产生已排序元素;以及相对于值域块的值域从所述值域块序列中按顺序读取所述已排序元素,以获得所述已排序输入数据。所述计算机程序可灵活设计,使得很容易实现需求更新。计算机程序产品可在多个内核和许多内核处理系统上运行。因此,本发明的各方面提供了如下文进一步描述的一种改进的排序技术。附图说明本发明的具体实施方式将结合以下附图进行描述,其中:图1为一现代机器硬件100的示意图。图2为一现代处理器200的示意图。图3所示为根据一实施形式的图示一种示例性排序方法300的示意图。图4所示为根据一实施形式的图示图3所描绘的排序方法300的示例性分区动作301的示意图。图5所示为根据一实施形式的图示图3所描绘的排序方法300的示例性本地分区排序动作302的示意图。图6所示为根据一实施形式的图示图3所描绘的排序方法300的提取和排序动作303内的示例性线程部署动作303a的示意图。图7所示为根据一实施形式的图示图3所描绘的排序方法300的示例性提取和排序动作303的示意图。图8所示为根据一实施形式的图示图3所描绘的排序方法300的示例性本地值域排序动作304的示意图。图9所示为根据一实施形式的图示图3所描绘的排序方法300的示例性合并动作305的示意图。图10所示为图示通过在分区数据上使用并行查询处理对数据库管理系统中的查询结果进行排序的示例性方法1000的示意图。图11所示为根据一实施形式的图示一种示例性排序方法1100的示意图。具体实施方式以下结合附图进行详细描述,所述附图是描述的一部分,并通过图解说明的方式示出可以实施本发明的具体方面。可以理解的是,在不脱离本发明范围的情况下,可以利用其它方面,并可以做出结构上或逻辑上的改变。因此,以下详细的描述并不当作限定,本发明的范围由所附权利要求书界定。本文中所描述的设备和方法可基于排序分布式输入数据、本地内存分区和互联处理节点。据了解,结合描述的方法进行的评论同样对于用于执行方法的对应设备和系统成立,反之亦然。例如,如果描述了特定方法步骤,对应的设备可包括执行所描述的方法步骤的单元,即使该单元没有在图中详细描述或图示。此外,应理解,本文中描述的各种示例性方面的特征可相互组合,除非另有特殊说明。本文中描述的方法和设备可在硬件架构中实现,硬件架构包括非对称内存和数据库管理系统,尤其是使用SQL的DBMS。所描述的设备和系统可以包括集成电路和/或无源器件且可以根据各种技术制造。例如,电路可设计为逻辑集成电路、模拟集成电路、混合信号集成电路、光电路、存储器电路和/或集成无源器件。图3所示为根据一实施形式的图示一种示例性排序方法300的示意图,该方法用于对输入数据进行排序,输入数据分布在上文结合图1和图2描述的硬件系统100、200等的多个互联处理节点101、103中的本地内存分区107、117上。排序方法300可包括对分布在非对称内存上的输入数据进行分区301,以获得多个内存分区。排序方法300可包括通过使用任何已知的本地排序方法等在本地对内存分区进行排序302。可为每个内存分区执行排序动作302。排序方法300可包括将本地排序302的结果提取和复制303到值域,值域即用于存储在特定值域的数据的内存区。可为每个内存分区执行提取和复制动作303。排序方法300可包括通过使用任何已知的本地排序方法等在本地对每个值域进行排序304。可为每个值域执行排序动作304。排序方法300可包括合并305已排序的值域。下文结合图4至图9进一步描述了不同的排序步骤或动作。本发明中描述的方法300可在五个步骤内对大量随机分布的值进行排序,因此能够最大化硬件资源利用效率。本方法300利用非对称内存访问延迟的差异,从而显著降低像排序等内存访问高度密集算法中的内存访问成本。图4所示为根据一实施形式的图示图3所描绘的排序方法300的示例性分区动作301的示意图。在非对称内存400上对输入数据进行分区。输入数据分布在非对称内存400的存储体401、402、403、404上。该分区步骤301可以是可选的,因为多数并行数据处理方法,像并行查询处理方法,会产生分区数据。图5所示为根据一实施形式的图示图3所描绘的排序方法300的示例性本地分区排序动作302的示意图。部署线程以在本地对数据进行排序。在本地将第一存储体401上的数据“1、5、3、2、6、4、7”排序在第一存储体401上,得到排序后数据“1、2、3、4、5、6、7”。在本地将第二存储体402上的数据“5、3、2、4、7、6、1”排序在第二存储体402上,得到排序后数据“1、2、3、4、5、6、7”。在本地将第三存储体403上的数据“1、2、3、4、5、6、7”排序在第三存储体403上,得到排序后数据“1、2、3、4、5、6、7”。在本地将第四存储体404上的数据“7、6、5、4、3、2、1”排序在第四存储体404上,得到排序后数据“1、2、3、4、5、6、7”。线程的数目可能等于分区的数目(图5示出了四个分区401、402、403、404,但其它数目也是有可能的)。所有线程可产生如下文所描述的可合并的不相交的已排序列表,以获得最终的排序输出。任何排序方法都可用于排序动作302,串行或并行。本地访问被充分利用。图6所示为根据一实施形式的图示图3所描绘的排序方法300的提取和排序动作303内的示例性线程部署动作303a的示意图。基于数据样本,可创建值域集600,该值域集可用来在不同线程之间分布排序数据。值域可以是包含给定取值范围中值的输入数据的子集,例如,给定取值范围在图6的示例为从1到7。值域可计算为(约)相同大小。这可利用通过在排序阶段执行的采样获得的值分布直方图来实现。值域可基于所有分区401、402、403、404中的数据来计算。在图6中,创建四个值域,第一值域包括数据值1和2,第二值域包括数据值3和4,第三值域包括数据值5和6,第四值域包括数据值7。根据图6,线程的数目为4,但任意其它数目也是可能的,线程的数目可与值域的数目相同。第一线程“线程1”关联到第一值域,第二线程“线程2”关联到第二值域,第三线程“线程3”关联到第三值域,第四线程“线程4”关联到第四值域。基于值域的数目,可在不同的存储体中创建存储器的相同数目的值域块。每个存储体中的值域区块的数目可相同,以便利用所有可用内核。图7所示为根据一实施形式的图示图3所描绘的排序方法300的示例性提取和排序动作303的示意图。可部署线程以基于值将数据从已排序列表401、402、403、404复制到新创建的值域块703、704、713、714。因此,每个值域块703、704、713、714将具有给定取值范围内的多个已排序列表。在图7的示例中,存储体0(701)中的第一值域块703包括数据值1和2;存储体0(701)中的第二值域块704包括数据值3和4;存储体1(702)中的第三值域块713包括数据值4和5;存储体1(702)中的第四值域块714包括数据值7。线程仅可写入本地内存且可从本地和远程内存中按顺序读取。在执行值比较时,线程可使用邻近的串行数据。可利用SIMD的优点。图8所示为根据一实施形式的图示图3所描绘的排序方法300的示例性本地值域排序动作304的示意图。如上文结合图6和图7所述,可使用相同线程(每值域区块一个线程)来执行复制数据的原地排序。可在节点0(701)上实施的存储体0中的第一值域块703可通过使用线程0等将数据从“12121212”排序为“11112222”。可在节点0(701)上实施的存储体0中的第二值域块704可通过使用线程1等将数据从“34343434”排序为“33334444”。可在节点1(702上)实施的存储体1中的第三值域块713可通过使用线程3等将数据从“56565656”排序为“55556666”。可在节点1(702)上实施的存储体1中的第四值域块714可通过使用线程3等将数据从“7777”排序为“7777”。因此,每个块703、704、713、714具有特定值域中的排序数据。可利用任何已知排序方法,例如串行或并行排序方法,执行本地排序。可充分利用数据访问的局部性。数据组织可能有助于利用SIMD进行比较和复制。图9所示为根据一实施形式的图示图3所描绘的排序方法300的示例性合并动作305的示意图。为了获得排序结果,可在值域块703、704、713、714的序列上执行迭代,并读取数据。可从本地701和远程702位置按顺序读取数据,从而通过利用硬件预提取降低接口到接口通信的影响。图10所示为图示通过在分区数据上使用并行查询处理对数据库管理系统中的查询结果进行排序的示例性方法1000的示意图。图10描述一种对数据库管理系统中的排序查询结果进行排序的特定方法,涉及分区数据上的并行查询处理。通过形式为“SELECTA,…FROMtableWHERE…ORDERBYA”的SQL语句表达一个示例查询。方法1000可应用于ORDERBY子句的执行。查询处理器可并行产生工作线程、产生写入每个线程的本地内存(分区)的未排序结果。这由图10的步骤1图示。在步骤2中,每个未排序分区可由专用线程在本地进行排序。在步骤3中,可重新对数据进行分区,从而(a)计算数据取值范围以包含近似相等的数据量,(b)将数据取值范围分区分配给对于工作线程是本地的内存,以及(c)每个工作线程按顺序扫描步骤2中产生的排序分区并提取相关数据,使用匹配值域的数据填充值域分区。在步骤4中,可在本地对每个值域进行排序,从而产生一部分正确排序的结果集(结果分区)。在步骤5中,可通过将结果分区以合适的顺序连接并按该顺序读取结果分区来合并结果集部分。在一个示例中,方法1000可应用于执行:在执行具有JOIN子句或表示为隐式连接的SQL查询的过程中在数据库管理系统中进行排序。在这种情况下,上述步骤2至4可应用于在合并连接方法的环境中对输入表格进行排序。在另一个示例中,方法1000可应用于执行:在执行具有GROUPBY子句的SQL查询的过程中在数据库管理系统中进行排序。在这种情况下,上述步骤2至4可应用于对聚合的计算结果(组)进行排序。图11所示为根据一实施形式的图示对分布在多个互联处理节点的本地内存分区上的输入数据进行排序的示例性排序方法1100的示意图。方法1100可包括:通过将第一进程部署在处理节点上,在本地按每处理节点对分布式输入数据进行排序1101,以在处理节点的本地内存分区上产生多个已排序列表。方法1100可包括在处理节点的本地内存分区上创建1102值域块序列,其中每个值域块用于存储在其值域内的数据值。方法1100可包括:通过将第二进程部署在处理节点上,将多个已排序列表复制1103到值域块序列,其中每个值域块接收已排序列表的元素,所述元素的值在其值域内。方法1100可包括:通过使用第二进程,在本地按每处理节点对值域块的元素进行排序1104,以在值域块上产生已排序元素。方法1100可包括相对于值域块的值域从值域块序列中按顺序读取1105已排序元素以获得已排序输入数据。排序1101可对应于如上文结合图3所描述的在本地对内存分区进行排序302。创建1102和复制1103可对应于如上文结合图3所描述的提取和复制动作303。排序1104可对应于如上文结合图3所描述的在本地对每个值域进行排序304。读取1105可对应于如上文结合图3所描述的合并305排序值域。在一个示例中,多个互联处理节点的本地内存分区可结构化为非对称内存。在一个示例中,第一进程的数目可等于本地内存分区的数目。在一个示例中,第一进程可产生不相交的已排序列表。在一个示例中,在本地按每处理节点对分布式输入数据进行排序可基于串行排序流程和并行排序流程之一。在一个示例中,第二进程的数目可等于值域块的数目。在一个示例中,每个值域块可具有不同的值域。在一个示例中,每个值域块可接收多个已排序列表,具体是,已排序列表的数目对应于第一进程的数目。在一个示例中,在第一处理节点上运行的第二进程中的一个第二进程在将多个已排序列表复制到值域块序列时可从该一个处理节点的本地内存和从其它处理节点的本地内存中按顺序读取。在一个示例中,在该一个处理节点上运行的第二进程在将多个已排序列表复制到值域块序列时仅写入该一个处理节点的本地内存。在一个示例中,可通过利用硬件预提取执行从值域块序列中按顺序读取已排序元素。在一个示例中,第二进程可使用矢量化处理,具体是在单指令流多数据流硬件块上运行的矢量化处理,用于将已排序列表的值与值域块的值域进行比较以及用于将多个已排序列表复制到值域块序列。在一个示例中,多个处理节点可通过接口间连接互联,一个处理节点的本地内存可以是另一处理节点的远程内存。本发明包括一种利用系统中不同存储体的访问时间差的方法。这可通过最低限度使用接口到接口通信链路来实现。直到如今,还没有部署一种对随机安排的数据进行排序的方法,这种方法可最小化通过不同接口的随机数据访问。通过使用测量工具,数据流通过接口,并可为排序操作确定访问模式。本文中所描述的方法、系统和设备可以作为数字信号处理器(DigitalSignalProcessor,DSP)、微控制器或任何其它边处理器中的软件或作为专用集成电路(applicationspecificintegratedcircuit,ASIC)内的硬件电路来实现。本发明可以实施于数字电子电路或计算机硬件、固件、软件或其组合中,例如,实施于常规移动设备的可用硬件或专用于处理本文所描述的方法的新硬件中。本发明还支持一种包括可执行代码或计算机可执行指令的计算机程序产品,当执行这些指令时,使得至少一个计算机执行本文中所描述的执行和计算步骤,具体是上文结合图3至图9所描述的方法300和上文结合图10和图11所描述的方法1000、1100。这种计算机程序产品可包括在其上存储有程序代码的可读存储介质,程序代码供计算机使用。该程序代码可用于对分布在多个互联处理节点的本地内存分区上的输入数据进行排序。该程序代码可包括执行以下操作的指令:通过使用在处理节点上运行的第一进程在本地按每处理节点对分布式输入数据进行排序,以在处理节点的本地内存分区上产生多个已排序列表;在处理节点的本地存储器分区上创建值域块序列,其中每个值域块用于存储在其值域内的数据值;通过使用第二进程将多个已排序列表复制到值域区序列,其中每个值域块接收已排序列表中的元素,所述元素的值在其范围内;通过使用第二进程在本地按每处理节点对值域块的元素进行排序,以在值域块上产生已排序元素;以及相对于值域块的值域从值域块序列中按顺序读取已排序元素,以获得已排的输入数据。尽管本发明的特定特征或方面可能已经仅结合几种实现方式中的一种进行公开,但此类特征或方面可以和其他实现方式中的一个或多个特征或方面相结合,只要对于任何给定或特定的应用是有需要或有利。而且,在一定程度上,术语“包括”、“有”、“具有”或这些词的其他变形在详细的说明书或权利要求书中使用,这类术语和所述术语“包含”是类似的,都是表示包括的含义。同样,术语“示例性地”,“例如”仅表示为示例,而不是最好或最佳的。尽管本文中已经图示和描述了具体方面,但是本领域普通技术人员将会理解各种替代和/或等效实施形式可以代替所示出和描述的具体方面,而不脱离本发明的范围。该申请旨在覆盖本文论述的具体实施方式的任何修改或变更。尽管以下权利要求书中的各元素是借助对应的标签按照特定顺序列举的,除非对权利要求的阐述另有暗示用于实现部分或所有这些元素的特定顺序,否则这些元素并不一定限于以所述特定顺序来实现。通过以上启示,对于本领域技术人员来说,许多替代产品、修改及变体是显而易见的。当然,所属领域的技术人员容易意识到除本文所述的应用之外,还存在本发明的众多其它应用。虽然已参考一个或多个特定实施例描述了本发明,但所属领域的技术人员将认识到在不偏离本发明的范围的前提下,仍可对本发明做出许多改变。因此,应理解,只要是在所附权利要求书及其等效文句的范围内,可以用不同于本文具体描述的方式来实践本发明。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1