面向通用字符串处理的硬件加速结构装置及控制方法与流程

文档序号:15850288发布日期:2018-11-07 09:45阅读:203来源:国知局
面向通用字符串处理的硬件加速结构装置及控制方法与流程

本发明涉及大数据应用及硬件加速技术领域,具体而言,涉及一种面向通用字符串处理的硬件加速结构装置及控制方法。

背景技术

随着大数据应用处理的数据量的剧增,通用处理器在面向数据量巨大的大数据应用处理中效率并不高,其主要原因是传统通用处理器在设计之初是面向科学计算类型应用,强调数据复杂运算大于数据存取。而急速发展的大数据应用的主要特征在于数据存取,数据计算反而简单。因此,导致了目前通用处理器在大数据应用处理方面的低效率。

在大数据处理应用中,字符操作是最基本的一类操作,几乎所有的高级语言中都有针对字符串操作的基本函数库。在搜索引擎和社交网络等应用逐渐占据人们大部分生活的今天,字符操作变得尤其重要。例如,网络服务、云计算、网络数据包安全检测、数据库查询、自然语言处理中的词法语法分析、生物计算中的dna序列比对以及蛋白质氨基酸序列比对等等。字符串处理已经深入到大数据应用的各个方面。因此,如何实现快速有效的字符串处理成为亟需解决的问题。



技术实现要素:

本发明提供一种面向通用字符串处理的硬件加速结构装置及控制方法,用以提高大数据应用中的字符串操作执行效率。。

本发明提供一种面向通用字符串处理的硬件加速结构装置,所述硬件加速结构集成于通用处理器中,受来自于流水线中的字符串专用处理指令控制,并将计算和处理结果写回到流水线中,所述硬件加速结构装置包括:

字符串对比加速结构,设置在存储控制器旁边,直接从所述存储控制器中请求存储器中的数据进行对比操作处理;

字符串拷贝加速结构,设置在一级缓存旁边,直接从一级缓存中请求数据,每次请求数据时以一个缓存行为数据处理的长度单位。

进一步地,所述字符串对比加速结构根据所述字符串专用处理指令中包含的用户指定的需要对比的字符串的长度或者根据字符串结束标识或文件结束标识,自动判断字符串对比与否结束。

进一步地,所述字符串对比加速结构中的字符串对比器从存储器中直接读取数据,并在存储单元上存储。

字符串对比操作可以按照数据读取的速度执行流式的对比,无需等待字符串全部到达再对比。

进一步地,所述存储单元为缓存(寄存器、ram或者其它形式的存储单元)。

进一步地,所述字符串对比加速结构通过预取的方式,加速从存储器读取字符串。即本次读取的数据执行对比操作时,可根据本次字符串的地址去预取下一次可能要对比的字符串内容。

进一步地,所述字符串拷贝加速结构以流式的字符串操作方式进行拷贝操作。

进一步地,所述字符串拷贝加速结构从一级缓存中以缓存行为单位读取字符串数据,本次缓存行中包含的有效字符串将会在本次操作中拷贝拷贝到目的地址,剩余在其它缓存行中的字符串则在下一次操作中拷贝拷贝到目的地址。

进一步地,所述字符串拷贝加速结构通过预取的方式,加速从缓存行读取字符串。即本次读取的数据执行拷贝操作时,可根据本次字符串的地址去预取下一次可能要拷贝的字符串内容。

本发明还提供了一种硬件加速结构装置的控制方法,字符串对比加速包括以下步骤:

步骤11:将字符串对比操作指令从流水线发送至硬件加速结构装置;

步骤12:硬件加速结构装置的译码和控制单元根据接收到的指令进行解析并向存储控制器发出数据读请求;

步骤13:将读回的数据缓存在存储单元中,同时对存储器执行预取操作,下一拍的数据送入移位操作寄存器后,预取的数据继续放入存储单元中;

步骤14:将存储单元中的数据根据需求在寄存器中进行一定的移位操作以实现对齐;

步骤15:经过移位对齐操作之后,在字符对比器中执行数据对比操作;

步骤16:如果字符串对比指令指示按照字符串最短的数据的长度执行等长度的对比操作,则字符串本次未做操作的字符串进入下一次对比操作;如果未指定长度,则检测是否指定文件结束标识,如指定则根据是否对比到文件结束标识进行判断结束为止;如果都未指定,则根据字符串结束标识判断是否结束;

步骤17:如果对比结束,则将最后的对比结果“>,==,<”或者匹配的位置或者匹配的数量执行结果返回操作,返回给流水线;

步骤18:对于本次对比未执行完成的操作继续进入下一次对比操作,直到按照某个条件判断结束。

进一步地,字符串拷贝操作加速包括以下步骤:

步骤21:将字符串拷贝操作指令从流水线发送至硬件加速结构装置;

步骤22:硬件加速结构装置的译码和控制单元根据接收到的指令进行解析并向一级缓存发出数据读请求;

步骤23:将读回的数据缓存在存储单元中,下一拍的数据送入移位操作寄存器,执行缓存预取的下一个缓存行继续读入数据到存储单元中;

步骤24:存储单元中的数据会根据需求在寄存器中进行一定的移位操作;

步骤25:经过移位操作之后,有效数据在对比器中执行数据对比操作,判断本次要拷贝字符串是否结束;。

步骤26:在步骤25进行对比操作的同时,利用源地址和当前数据地址计算剩余数据的长度;如果未指定长度,则根据字符串结束标识判断是否结束;

步骤27:若未结束,则继续以相同的方式执行剩余的数据的拷贝操作。

本发明实现了以下有益效果:

本发明的面向通用字符串处理的硬件加速结构可以集成于目前主流的通用处理中,且本加速结构中的字符串读取和对比操作基于存储控制器,旁路各级cache(缓存),显著提高处理性能;另一方面,针对字符串操作中涉及到的拷贝,本发明基于一级cache实现更为有效的结构设计。字符串拷贝基于一级cache的主要考虑是避免引起多核cache之间的一致性遭到破坏而考虑如何去维护一致性的复杂开销,从而使本发明的结构能够更加容易的集成到目前的通用处理器中。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一个实施例的字符加速处理结构与通用处理器结构集成示意图;

图2为本发明一个实施例的添加字符加速处理结构后控制命令及数据流动示意图;

图3为本发明一个实施例的双字符串对比器(comparator)示意图;

图4为本发明一个实施例的字节与字符串对比器(comparator)示意图;

图5为本发明一个实施例的字符加速处理结构中的字符串比较操作加速结构示意图;

图6为本发明一个实施例的字符加速处理结构中的字符串拷贝操作加速结构示意图;

图7为本发明一个实施例的字符加速处理流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

针对大数据处理领域中的普遍存在的字符基本操作,本发明通过硬件加速结构实现可集成现有通用处理器的字符串处理通用硬件加速装置。

实施例1

如图1所示,字符串硬件加速结构装置(stingaccelerator)设置于片上,邻近于存储控制器以及片上cache。对于字符串对比操作(stringcompare),相应的加速处理结构设置于临近存储控制器(ddrcontroller)。对于字符串拷贝(stringcopy)相应的加速处理结构设置邻近于片上一级cache。这样做的原因是:1)本装置的目标是设计通用的字符串处理加速结构,能够集成于通用处理器中,因此需要将结构集成于片上;2)由于本装置面向的是大数据应用,数据量巨大,例如terasort面向的是tb级别的数据排序。因此,本装置的设计原则是将处理装置尽量靠近主存储器,字符串比较处理结构设置于片上的存储控制器旁边,这是片上离主存储最近的位置,能够尽早获取存储数据,且在大数据应用的大多数的字符串操作中,以字符串读为主,字符串写操作较少,因此将字符串对比操作放在存储控制器旁边是较好的权衡;3)对于占比较大的数据读取操作,可以放置在存储控制器旁边尽量靠近主存储器,但是对于数据拷贝(以排序类操作为主,例如terasort应用),如果放置在存储控制器旁边,则会严重破坏cache一致性。即对于写的数据,有可能已经存在cache的某一级或多级中。如果将字符串拷贝也放置在存储器旁边则需要同时添加机制去维护cache一致性,这将严重增加处理结构的设计复杂度。因此,对于数据拷贝,我们将相应的处理加速装置放置于一级cache旁边,借助cacheline(缓存行)的操作行为,提高数据拷贝的效率。

如图2所示,为添加了字符串处理加速结构的处理器流水线结构及数据的流动方向。在x86的指令集中,需要添加一条专用的字符处理指令。指令经过取指(fetchstage)、译码(decodestage),发射(issuestage)阶段,区分出stringinstruction(si,字符串指令)指令,并将si指令直接发送至字符串处理加速结构中。字符串加速结构通过指令所标识的操作类型和数据以及其它信息进行字符串的操作。

如图3所示,为字符处理装置的核心部件,字符串比较器(stringcomparator),其宽度可根据需求设置,例如设置为于cacheline宽度一致64bytes。对比器可以对两个字符串执行比较操作。如图4所示,字符串比较器可以执行单字符与字符串的比较。

如图5所示,为字符串比较操作加速装置。si从流水线发送至加速装置。指令分为7个部分,分别为op、addr1、addr2、len1、len2、eof1以及eof2。op为操作类型,可以分为字符串比较,字符串拷贝,字符与字符串比较等等类型,可由用户指定。addr1与addr2分别为两个字符串的首地址。len1与len2为需要操作的字符串的长度,此两个值为可选项,可以不指定。eof1与eof2为指定所需要做的操作是否以某个文件的结尾为结束的标准。字符串比较加速器根据接收到的指令的地址通过存储控制器直接向存储器发出数据读请求。读回的数据缓存在buf1和buf2中,同时对存储器执行预取操作。在buf中的数据会根据需求执行移位等操作,这主要是考虑对齐的问题。因为所需的数据不一定是一次存储访问所能对齐的数据,例如读取一个字符,8bits。通常,存储器会根据地址将对齐的几个字节读取至片上。因此需要做相应的移位处理,获取我们所需的内容。经过移位对齐操作之后,执行数据对比操作。按照字符串最短的数据的长度执行等长度的对比操作。字符串本次未做操作的字符串进入下一次对比操作。在对比阶段存在三个比较器,分别比较的内容为字符串1与字符串2,字符串1与“/0”或eof,字符串2与“/0”或eof。第一个比较器对比字符串内容,后两个字符串分别检测是否某个字符串已经结束。如果已经结束时,则将最后的对比结果“>,==,<”或者匹配的位置pos或者匹配的数量counter执行结果返回操作。返回给流水线regs。其中判断是否结束时,也可以根据len1和len2的值进行判断,即程序指定的对比长度已结束。此时结果也需要返回给流水线的寄存器regs。对于本次对比为执行完成的操作继续进入下一次对比操作,知道按照某个条件判断结束。因为数据从存储器读取时,受访存带宽的影响,因此整个字符串比较操作会通过流水数据操作方式执行,即来到数据即可执行,无需等待,以提高执行效率。

图6所示为字符串拷贝处理加速结构。此结构集成于一级cache旁边,通过利用cacheline的行为,实现高宽度的字符串拷贝,提高字符串处理效率。与上述所述字符串比较操作结构运行机制类似,加速结构通过接收流水线(pipeline)发来的操作指令,根据指令的内容进行处理。指令分为4个主要的部分,op为操作类型,src_addr为源数据地址,dst_addr目标地址,len为将要操作的数据的长度。len为可选项,若不指定len长度,则根据字符串结束标识符“/0”结束本次操作。首先加速结构根据源地址,到一级cache中读取相应的cacheline数据,数据进入加速结构后需要根据制定的len进行数据的移位或掩码操作,截取所需要操作的长度的数据。若未指定长度,则根据字符串中的“/0”作为操作数据的终止位置。由于源数据或是目的地址不一定在一个cacheline里面,所以需要判断本次拷贝能够写多少,剩下的部分将会在下次拷贝中继续拷贝。

图7为字符加速处理流程示意图。用户通过在程序中使用字符串加速处理接口,编译器将相应的字符串操作编译成专用的字符串处理指令。字符串操作指令经过流水线701发送相应的加速处理结构中,在发送之前需要判断是否是字符串对比指令702,若是,则发送至字符串对比加速结构703中,若不是,则发送至字符串拷贝加速结构704中。若为字符串对比操作,加速处理结构接收到指令后,首先需要对要处理的字符串的地址进行解析705,按照解析后的地址执行访存操作705,对于访存回的数据,由于对齐等原因,无法保证字符串的首地址即为访存回来的数据的首位数据,因此需要执行相应的移位操作707。之后进行对比器进行数据的比对709。本次比对结束后,一方面需要积累比对的结果715,另一方面需要判断是否比对结束711。若结束,则将结果写回流水线713,若未结束,则继续进行访存和数据的对比715。若为字符串拷贝,则执行类似的操作。首先对地址进行解析并发起访存操作706,对于返回的数据进行移位等操作708。之后执行拷贝操作710。每次拷贝操作需要判断是否结束712,若未结束则记录已经执行的字符串的长度,并继续发起访存操作706,若结束,则完成本次操作714。

实施例2

如图1所示,本发明基于传统的处理器系统之上,增加了字符串处理加速结构104,加速结构104字符串比较操作放置于存储控制器103旁边,通过直接从存储控制103中请求数据,进行字符串的处理。加速结构104字符串拷贝放置于一级cache102旁边,通过从一级cache102中读取cacheline数据进行字符串的拷贝。加速结构104受处理器核101的流水线发出的指令控制,并将操作的结果写回处理器核101中。

以下为各功能模块具体操作步骤:

如图5所示,为字符串比较操作加速装置。字符比较操作步骤:

步骤11:si502从流水线501发送至加速装置。

步骤12:字符串加速结构的译码和控制单元505根据接收到的指令进行解析并向存储控制器506发出数据读请求。需要注意的是,在对存储器进行访问的时候,需要考虑cache一致性的问题,即主存储器(ddr)中的数据有可能在cache中有备份且被修改,因此每次访存的时候需要同时维护cache一致性,确保读出的数据是最新修改的数据。

步骤13:读回的数据缓存在buf1507和buf2508中,同时对存储器执行预取操作,下一拍buf1507和buf2508的数据送入移位操作寄存器509、510后,预取的数据继续放入buf1507以及buf2508中。

步骤14:buf中的数据会根据需求在寄存器509和510中进行一定的移位操作,这主要是考虑对齐的问题。因为所需的数据不一定是一次存储访问所能对齐的数据,例如读取一个字符,8bits。通常,存储器会根据地址将对齐的几个字节读取至片上。因此需要做相应的移位处理,获取我们所需的内容。

步骤15:经过移位对齐操作之后,在字符对比器511、512以及513中执行数据对比操作。在对比阶段存在三个比较器,分别比较的内容为字符串1与字符串2,字符串1与“/0”或eof,字符串2与“/0”或eof。第一个比较器对比字符串内容,后两个字符串分别检测是否某个字符串已经结束。

步骤16:如果指令si502指示按照字符串最短的数据的长度执行等长度的对比操作,则字符串本次未做操作的字符串进入下一次对比操作。如果未指定长度,则检测是否指定eof,则根据是否对比到eof进行判断结束为止。如果都未指定,则根据“/0”判断是否结束。

步骤17:如果已经结束时,则将最后的对比结果“>,==,<”或者匹配的位置pos或者匹配的数量counter(计数器)执行结果返回操作。返回给流水线regs(寄存器)。

步骤18:对于本次对比未执行完成的操作继续进入下一次对比操作,直到按照某个条件判断结束。因为数据从存储器读取时,受访存带宽的影响,因此整个字符串比较操作会通过流水数据操作方式执行,即来到数据即可执行,无需等待,以提高执行效率。

图6所示为字符串拷贝处理加速结构,具体步骤:

步骤21:si602从流水线601发送至加速装置。

步骤22:字符串加速结构的译码和控制单元605根据接收到的指令进行解析并向一级cache604发出数据读请求。

步骤23:读回的数据缓存在buf1606中,下一拍buf1606的数据送入移位操作寄存器608,执行cache预取的下一个cacheline继续读入数据到buf1606中。

步骤24:buf中的数据会根据需求在寄存器608中进行一定的移位操作,这主要是考虑所需的数据并不一定在cacheline的首地址开始的位置,因此需要做相应的移位处理,获取我们所需的内容。

步骤25:经过移位操作之后,有效数据在对比器609中执行数据对比操作,对比操作的主要目的是判断本次要拷贝字符串是否结束(未制定长度len的情况下)。

步骤26:于此同时,利用源地址和当前数据地址计算剩余数据的长度。如果未指定长度,则根据“/0”判断是否结束。

步骤27:若未结束,则继续以相同的方式执行剩余的数据的拷贝操作。

综上所述,本发明实现了以下有益效果:

本发明的面向通用字符串处理的硬件加速结构可以集成于目前主流的通用处理中,且本加速结构中的字符串读取和对比操作基于存储控制器,旁路各级cache(缓存),显著提高处理性能;另一方面,针对字符串操作中涉及到的拷贝,本发明基于一级cache实现更为有效的结构设计。字符串拷贝基于一级cache的主要考虑是避免引起多核cache之间的一致性遭到破坏而考虑如何去维护一致性的复杂开销,从而使本发明的结构能够更加容易的集成到目前的通用处理器中。

以上说明对本发明而言只是说明性的,而非限制性的,本领域普通技术人员理解,在不脱离以下所附权利要求所限定的精神和范围的情况下,可做出许多修改、变化或等效,但都将落入本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1