基于图形处理器的并行化约束检测方法

文档序号:6621320阅读:249来源:国知局
基于图形处理器的并行化约束检测方法
【专利摘要】本发明是一种基于图形处理器的并行化地检测约束的方法,步骤:1)以量词为分割点,将一条约束分割成若干处理单元,通过调度这些处理单元,消除检测过程中的递归并最大化并行度;2)根据当前的处理单元和信息集合,产生相应数量的GPU线程,每个GPU线程根据自身的线程号计算其对应的变量赋值,并处理在此赋值下的处理单元。一个被赋值的处理单元称为一个并行计算单元,并行计算单元是能在GPU中并行处理的最小单元;3)索引-结果池的二层次存储策略,所有并行计算单元的节点产生的非定长结果存储在结果池中,而在索引中存储节点产生的结果在结果池中的起始地址和长度,该策略“串行分配空间,并行写结果”,能达到较高的写速度。
【专利说明】基于图形处理器的并行化约束检测方法

【技术领域】
[0001] 本发明涉及一种基于图形处理器的并行化约束检测方法。

【背景技术】
[0002] 约束检测是一种常用的验证信息有效性的方法。一条约束反映了一条信息或者多 条信息之间应该满足的关系。一般而言,一条约束由若干种节点联接而成:"全称量词"节 点,"存在量词"节点,"与"节点,"或"节点,"蕴含"节点,"非"节点和"函数"节点。每种节 点描述了一个特定的关系。检测约束即:将获取的信息与预定义的约束进行核对,违反了约 束的一条信息或者一组信息是无效的。约束检测通常是结合其他应用中的。
[0003] 当前约束检测的方式主要有两类:增量式检测和并行检测。但是,这两种方式都完 全依赖于中央处理器(CPU),因此会消耗大量本来应该用于其他应用的计算资源。本方法的 计算不再依赖于CPU,相反,它主要依赖图形处理器(GPU)进行计算。因此,该方法在提高了 约束检测的速度的同时,也保证了有充分的计算资源供其他应用使用。


【发明内容】

[0004] 针对现有技术中存在的不足,对当前约束检测耗时过大,占用资源过多的缺点,本 发明提出了一种基于GPU的约束检测方法。该方法的核心在于三个部分:约束预处理;并行 策略;存储策略。
[0005] 本发明的技术方案为:一种基于图形处理器的并行化约束检测方法,它包括:
[0006] 约束预处理,基于量词的约束分割方法;具体为:
[0007] 步骤1、指定约束头节点为当前节点,从当前节点开始分割;
[0008] 步骤2、若当前节点为"全称量词"或者"存在量词"节点,则将该部分分割成两个 子部分,一个子部分以该量词节点结束,另一部分从该量词节点的子节点开始,指定该量词 节点的子节点为当前节点继续分割;
[0009] 步骤3、若当前节点为"与"节点,"或"节点或者"蕴含"节点,则指定该节点的左 子节点为当前节点继续分割,处理完左子节点后,指定该节点的右子节点为当前节点继续 分割;
[0010] 步骤4、若当前节点为"非"节点,则指定该节点的子节点为当前节点继续分割;
[0011] 步骤5、若当前节点为"函数"节点,则停止当前分支的递归;
[0012] 经过分割后,一条约束被转变为若干处理单元,各个处理单元不相交,且所有处理 单元共同构成该约束。
[0013] 并行策略,基于处理单元的并行处理方法;具体为:
[0014] 步骤1、计算所需线程数N,设从当前处理单元的父节点开始,到约束头结点的路 径中的变量〈^,u 2,..· un>对应的上下文信息集合为〈Si,S2,...Sn>,各个上下文信息集 合中的信息条数为〈1,1 2, . . . In>,则N = L X I2X. . · X In ;若当前处理单元到头节点不包 含任何变量,或者当前处理单元包含头节点,则N = 1 ;
[0015] 步骤2、生成N个GPU线程,线程id从0至N-1 (该id由GPU自动分配);各个线 程根据自身id独立计算其对应的赋值,设整数值% = j表示变量u i取其对应集合Si中 第j条信息(〇彡Μ'Ι);则吣的取值按以下步骤得出:
[0016] i :设 size = 1, cur = η ;
[0017] ii :若cur彡1,转子iii,否则结束;
[0018] iii :

【权利要求】
1. 一种基于图形处理器的并行化约束检测方法,其特征在于,它包括: 基于量词的约束分割步骤; 基于处理单元的并行处理步骤; 存储策略步骤。
2. 根据权利要求1所述的并行化约束检测方法,其特征在于:所述基于量词的约束分 割步骤具体为: 步骤1、指定约束头节点为当前节点,从当前节点开始分割; 步骤2、若当前节点为"全称量词"或者"存在量词"节点,则将该部分分割成两个子部 分,一个子部分以该量词节点结束,另一部分从该量词节点的子节点开始,指定该量词节点 的子节点为当前节点继续分割; 步骤3、若当前节点为"与"节点,"或"节点或者"蕴含"节点,则指定该节点的左子节点 为当前节点继续分割,处理完左子节点后,指定该节点的右子节点为当前节点继续分割; 步骤4、若当前节点为"非"节点,则指定该节点的子节点为当前节点继续分割; 步骤5、若当前节点为"函数"节点,则停止当前分支的递归; 经过分割后,一条约束被转变为若干处理单元,各个处理单元不相交,且所有处理单元 共同构成该约束。
3. 根据权利要求1所述的并行化约束检测方法,其特征在于:所述基于处理单元的并 行处理步骤,具体为: 步骤1、计算所需线程数N,设从当前处理单元的父节点开始,到约束头结点的路径中 的变量〈υ η u 2,. . · u n>对应的上下文信息集合为〈Si,S2,. . . Sn>,各个上下文信息集合中 的信息条数为〈Ip 12,. . . In>,则N = LX I2X. . · X In ;若当前处理单元到头节点不包含任 何变量,或者当前处理单元包含头节点,则N = 1 ; 步骤2、生成N个GPU线程,线程id从0至N-1 (该id由GPU自动分配);各个线程根 据自身id独立计算其对应的赋值,设整数值^ = j表示变量u i取其对应集合Si中第j条 信息(〇彡M'D ; 步骤3、各个线程将所计算出的赋值映射到处理单元中,产生各个线程需要处理的并行 计算单元;各个线程独立处理各个并行计算单元; 所述的所有GPU线程并发执行,且互相之间不存在依赖关系。
4. 根据权利要求3所述的并行化约束检测方法,其特征在于:步骤2中Mi的取值按以 下步骤得出: i. 子步骤 i :设 size = 1,cur = η ; ii. 子步骤ii :若cur彡1,转子步骤iii,否则结束; 子步骤 iii ,size = size*Icur ;cur = cur-1,转子步骤 ii。
5. 根据权利要求1所述的并行化约束检测方法,其特征在于:所述存储策略步骤具体 为:索引-结果池的二层次存储方法,包含三个部分:1)索引数组,包含两个域:结果的起 始位置pos和长度len ;2)结果数组;3)结果数组位置指针Pointer (简称位置指针),它只 能被互斥地写;设η个线程产生的结果长度分别为I 12. . . L . . in,所述索引-结果池的 二层次存储方法具体为: 步骤1、各个线程根据其赋值计算各自当前节点在索引数组中的存储位置; 步骤2、各个线程互斥的获取结果数组位置指针,设第i个线程获取到该结果数组位置 指针,则它将该节点的起始位置P〇s设为Pointer当前值,之后, 步骤3、更新该结果数组位置指针的值:Pointernew = Pointeiv^+li,其中,Pointer^S 位置指针初始值,li为第i个线程产生的结果长度; 步骤4、更新后释放该结果数组位置指针供其他线程使用,并将结果填入结果数组,结 果长度填入该节点的结果长度len中。
【文档编号】G06F9/46GK104123178SQ201410358441
【公开日】2014年10月29日 申请日期:2014年7月25日 优先权日:2014年7月25日
【发明者】许畅, 马晓星, 吕建, 眭骏 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1