字符串匹配的方法、设备和异构计算系统的制作方法_4

文档序号:9646568阅读:来源:国知局
采用几个具体的实施例,对实施例一的技术方案进行详细说明。
[0110]图9为本发明实施例二提供的字符串匹配的方法的流程图,本实施例主要对实施例一中的步骤102进行详细说明,本实施例中,该每个GPU核的第一匹配的结果为该每个GPU核对应的待匹配的子字符串的匹配标志位的值,该匹配标志位用于指示是否需要对对应的待匹配的子字符串进行该第二匹配。如图9所示,本实施例提供的方法包括以下步骤:
[0111]步骤201、该计算单元中的每个GPU核分别获取对应的待匹配的子字符串,并将待匹配的子字符串输入自动机中进行第一匹配,其中,该自动机是根据多个模式串预先生成的,该自动机的每一个节点对应一个状态,在该第一匹配的匹配过程中,该计算单元中的每个GPU核在该自动机的当前状态时,若没有匹配到模式串,则直接跳转到该自动机的下一个状态进行匹配。
[0112]步骤201的具体实现方式可参照实施例一中步骤101的相关描述,这里不再赘述。
[0113]步骤202、计算单元中的每个GPU核根据第一匹配的结果分别更新对应的待匹配的子字符串的匹配标志位的值。
[0114]该计算单元中的每个GPU核根据第一匹配的结果分别更新自己对应的待匹配的子字符串的匹配标志位的值,具体为:若该计算单元中的第一 GPU核对应的待匹配的子字符串匹配到了该多个模式串中的至少一个模式串,则该第一 GPU核将对应的待匹配的子字符串的匹配标志位的值更新为需要进行该第二匹配,其中,该第一 GPU核为该计算单元中的任意一个GPU核。若该第一 GPU核对应的待匹配的子字符串没有匹配到该多个模式串中任意一个模式串,则该第一 GPU核将对应的待匹配的子字符串的匹配标志的值为更新为不需要进行该第二匹配。
[0115]具体地,该匹配标志位的初始值可以设置为0,在第一匹配的匹配过程中,在输入一个字符后,自动机会从上一个状态跳转到当前状态,第一 GPU核判断当前状态是否为匹配态,若当前状态为匹配态,说明匹配到了模式串,若当前状态为非匹配态,说明没有匹配到模式串。若当前状态为匹配态,则第一 GPU核将匹配标志位的值加1,然后,根据输入的字符跳转到下一个状态继续进行匹配,若当前状态为非匹配态,则第一 GPU核根据输入的字符跳跳转到下一个状态进行匹配。每次第一 GPU核在匹配到模式串后,都会将匹配标志位的值加1。第一 GPU核在匹配完成后,若没有匹配到任意一个模式串,那么匹配标志位的值为0,若第一 GPU核匹配到了模式串,那么匹配标志位的值为非0。
[0116]第一 GPU核在判断当前状态是否为匹配态时,具体可以根据当前状态的Matchbit位的指进行判断,在自动机中每一个状态都设置有Match bit位,Match bit位用来表示对应的状态是否为匹配态。具体可以采用1和0表示匹配态和非匹配态两种状态,若当前状态的Match bit位的值为1,则说明当前状态为匹配态,若当前状态的Match bit位的值为0,则说明当前状态为非匹配态。
[0117]步骤203、计算单元中的每个GPU核将对应的待匹配的子字符串的匹配标志位的值发送给CPU。
[0118]每个GPU核在第一匹配结束后,将对应的待匹配的子字符串的匹配标志位的值发送给CPU,CPU根据待匹配的子字符串对应的匹配标志位的值确定是否对待匹配的子字符串进行第二匹配。
[0119]该计算单元中的每个GPU核将自己对应的待匹配的子字符串的匹配标志位的值发送给该CPU,具体为:首先,计算单元中的每个GPU核将自己对应的待匹配的子字符串的匹配标志位的值从自己的私有内存(Private Memory)写入该计算单元的本地内存中;然后,该计算单元将每个GPU核对应的待匹配的子字符串的匹配标志位的值从该本地内存(Local Memory)写入该GPU的全局内存中,以使该CPU从该GPU的全局内存(Global/Constant Memory)中将该计算单元中的每个GPU核对应的待匹配的子字符串的匹配标志位的值读取到该CPU的内存中。
[0120]图10为GPU的内存的一种结构示意图,如图10所示,GPU共有两个计算单元,每个计算单元都有两个GPU核,每个GPU核有一个私有内存,私有内存只能被所属的GPU核访问,不能被其他GPU核访问。每个计算单元有一个本地内存,本地内存可以被计算单元内的所有GPU核访问,但是不能被其他计算单元的GPU核访问。GPU有一个全局内存,全局内存可以被GPU中的所有的GPU核访问。上述三种内存中,每种内存的大小和访问速度都有差另1J,其中,私有内存的存储空间最小,但是访问速度最快,私有内存可以为寄存器。本地内存的大小一般为几十KB,访问速度比私有内存的速度慢,并且在某些低端设备或早期设备上没有本地内存。全局内存的大小最大,访问速度最慢,全局内存可以通过PC1-E与CPU的内存进行数据交换,全局内存为只读的,且通常为片外存储器,例如GPU的显存。
[0121]本实施例中,每个GPU核对应的待匹配的子字符串的匹配标志位的值存储在GPU核的私有内存中,每个GPU核在匹配到一个模式串时,将自己私有内存中的匹配标志位的值进行累加。在第一匹配结束后,计算单元中的每个GPU都将自己对应的待匹配的子字符串的匹配标志位的值写入计算单元的本地内存中,然后,计算单元会将本地内存中的每个GPU都将自己对应的待匹配的子字符串的匹配标志位的值写入GPU的全局内存中。CPU可以从GPU的全局内存中将每个GPU都将自己对应的待匹配的子字符串的匹配标志位的值读取到自己的内存。
[0122]本实施例中,计算单元中的每个GPU核只对对应的待匹配的子字符串进行第一匹配,通过第一匹配能够确定各待匹配的子字符串是否匹配到了某一个模式串,然后,将第一匹配的匹配结果更新待匹配的子字符串的匹配标志位的值,并将各待匹配的子字符串的匹配标志位的值发送给CPU,以使CPU根据各匹配标志位的值对待匹配的子字符串进行第二匹配。由于每个GPU核在第一匹配的匹配过程中,在匹配到模式串后并不记录待匹配的子字符串的匹配信息,从而使得GPU核在匹配态和非匹配态时所需的执行时间相同,因此,当GPU核在非匹配态时,不需要浪费时间等待计算单元中的其他GPU核的执行,而是直接跳转到该自动机的下一个状态进行匹配,从而缩短了 GPU核的匹配时间,提高了 GPU核的匹配效率,也提高了 GPU核的计算资源的利用率。
[0123]图11为本发明实施例三提供的字符串匹配的方法的流程图,如图10所示,本实施例提供的字符串匹配的方法可以包括以下步骤:
[0124]步骤301、CPU接收计算单元中的每个GPU核发送的第一匹配的结果,其中,该每个GPU核发送的第一匹配的结果是该每个GPU核根据获取的待匹配的子字符串和自动机中进行第一匹配得到的。
[0125]其中,该自动机是根据多个模式串预先生成的,该自动机每一个节点对应一个状态,在该第一匹配的匹配过程中,该计算单元中的每个GPU核在该自动机的当前状态时,若没有匹配到模式串,则直接跳转到该自动机的下一个状态进行匹配。
[0126]该自动机可以是该CPU根据多个模式串预先生成的,自动机的生成过程和第一匹配的匹配过程可参照实施例一中的相关描述,这里不再赘述。CPU接收计算单元中的每个GPU核发送的第一匹配的结果,具体为,CPU将每个GPU核的第一匹配的结果,从GPU的全局内存中读取到CPU的内存中,然后,从CPU内存中读取每个GPU核的第一匹配的结果。
[0127]步骤302、CPU根据该每个GPU核的第一匹配的结果,确定是否对该计算单元中的第一 GPU核对应的待匹配的子字符串进行匹配,该第一 GPU核为该计算单元中的任意一个GPU 核。
[0128]本实施例中,该每个GPU核发送的第一匹配的结果可以为该每个GPU核对应的待匹配的子字符串的匹配标志位的值,其中,该匹配标志位用于指示是否需要对对应的待匹配的子字符串进行该第二匹配。
[0129]当每个GPU核发送的第一匹配的结果可以为该每个GPU核对应的待匹配的子字符串的匹配标志位的值时,该CPU根据该计算单元中的每个GPU核的第一匹配的结果,确定是否对该计算单元中的第一GPU核对应的待匹配的子字符串进行第二匹配,具体为:该CPU判断该第一 GPU核对应的待匹配的子字符串的匹配标志位的值是否指示对该第一 GPU核对应的待匹配的子字符串进行该第二匹配;若该第一 GPU核对应的待匹配的子字符串的匹配标志位的值指示对该第一 GPU核对应的待匹配的子字符串进行该第二匹配,则该CPU确定对该第一 GPU核对应的待匹配的子字符串进行该第二匹配。
[0130]当待匹配的子字符串的匹配标志位的值用0和非0表示时,该CPU判断第一 GPU核对应的待匹配的子字符串的匹配标志位的值是否为非0值,若为非0值,则确定第一 GPU核对应的待匹配的子字符串需要进行第二匹配。
[0131]步骤303、若该CPU确定对该第一 GPU核对应的待匹配的子字符串进行第二匹配,则该CPU将该第一 GPU核对应的待匹配的子字符串输入该自动机进行第二匹配,并记录该第一 GPU核对应的待匹配的子字符串的匹配信息。
[0132]该第一 GPU核对应的待匹配的子字符串的匹配信息包括:该第一 GPU核对应的待匹配的子字符串匹配到的模式串的标识、该第一 GPU核对应的待匹配的子字符串匹配到的模式串在该第一 GPU核对应的待匹配的子字符串中的位置信息。
[0133]图12为CPU的执行时序的示意图,如图11所示,CPU中共有四个核同时进行字符串匹配,写有非匹配态的白色矩形方块表示CPU在非匹配态时的实际执行时间,写有匹配态的灰色矩形方块表示CPU核在匹配态时的实际执行时间。在匹配态CPU核还需要额外的记录该待匹配的子字符串的匹配信息,因此,CPU核在匹配态时的实际执行时间大于在非匹配态时的实际执行时间。当在多核CPU上进行模式串匹配时,由于多核CPU的各个核相对独立,当某一 CPU核在当前状态匹配到模式串,那么该CPU核记录该待匹配的子字符串的匹配信息,并不影响其他CPU核的执行,当该CPU核在当前状态没有匹配到模式串,该CPU核也不需要等待,直接跳转到下一个状态继续执行。通过比较图7和图11也可知,CPU核在匹配态和非匹配态时都不需要等待,即没有等待时间。
[0134]本实施例中,CPU根据每个GPU核的第一匹配的结果,确定是否对该计算单元中的第一 GPU核对应的待匹配的子字符串进行第二匹配,该第一 GPU核为该计算单元中的任意一个GPU核,若第一 GPU核在第一匹配中匹配到了模式串,那么CPU需要对第一 GPU核对应的待匹配的子字符串进行第二匹配,若第一 GPU核在第一匹配中没有匹配到模式串,CPU不对第一 GPU核对应的待匹配的子字符串进行第二匹配。本实施例中,由于在第一匹配中第一 GPU核在匹配到模式串时,不记录待匹配的子字符串的匹配信息,使得第一 GPU核在没有匹配到模式串时不需要等待计算单元中的其他GPU核,缩短了每个GPU核的执行时间,从而提高了 GPU核的执行效率,提高了 GPU核的计算资源的利用率。
[0135]在实施例三的基础上,GPU核在进行第一匹配之前,CPU还要执行以下操作:该CPU接收待匹配的目标字符串,将该目标字符串发送到该GPU的全局内存中;该CPU
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1