基于圖形處理器的并行化約束檢測方法
【專利摘要】本發(fā)明是一種基于圖形處理器的并行化地檢測約束的方法,步驟:1)以量詞為分割點,將一條約束分割成若干處理單元,通過調(diào)度這些處理單元,消除檢測過程中的遞歸并最大化并行度;2)根據(jù)當前的處理單元和信息集合,產(chǎn)生相應(yīng)數(shù)量的GPU線程,每個GPU線程根據(jù)自身的線程號計算其對應(yīng)的變量賦值,并處理在此賦值下的處理單元。一個被賦值的處理單元稱為一個并行計算單元,并行計算單元是能在GPU中并行處理的最小單元;3)索引-結(jié)果池的二層次存儲策略,所有并行計算單元的節(jié)點產(chǎn)生的非定長結(jié)果存儲在結(jié)果池中,而在索引中存儲節(jié)點產(chǎn)生的結(jié)果在結(jié)果池中的起始地址和長度,該策略“串行分配空間,并行寫結(jié)果”,能達到較高的寫速度。
【專利說明】基于圖形處理器的并行化約束檢測方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種基于圖形處理器的并行化約束檢測方法。
【背景技術(shù)】
[0002] 約束檢測是一種常用的驗證信息有效性的方法。一條約束反映了一條信息或者多 條信息之間應(yīng)該滿足的關(guān)系。一般而言,一條約束由若干種節(jié)點聯(lián)接而成:"全稱量詞"節(jié) 點,"存在量詞"節(jié)點,"與"節(jié)點,"或"節(jié)點,"蘊含"節(jié)點,"非"節(jié)點和"函數(shù)"節(jié)點。每種節(jié) 點描述了一個特定的關(guān)系。檢測約束即:將獲取的信息與預(yù)定義的約束進行核對,違反了約 束的一條信息或者一組信息是無效的。約束檢測通常是結(jié)合其他應(yīng)用中的。
[0003] 當前約束檢測的方式主要有兩類:增量式檢測和并行檢測。但是,這兩種方式都完 全依賴于中央處理器(CPU),因此會消耗大量本來應(yīng)該用于其他應(yīng)用的計算資源。本方法的 計算不再依賴于CPU,相反,它主要依賴圖形處理器(GPU)進行計算。因此,該方法在提高了 約束檢測的速度的同時,也保證了有充分的計算資源供其他應(yīng)用使用。
【發(fā)明內(nèi)容】
[0004] 針對現(xiàn)有技術(shù)中存在的不足,對當前約束檢測耗時過大,占用資源過多的缺點,本 發(fā)明提出了一種基于GPU的約束檢測方法。該方法的核心在于三個部分:約束預(yù)處理;并行 策略;存儲策略。
[0005] 本發(fā)明的技術(shù)方案為:一種基于圖形處理器的并行化約束檢測方法,它包括:
[0006] 約束預(yù)處理,基于量詞的約束分割方法;具體為:
[0007] 步驟1、指定約束頭節(jié)點為當前節(jié)點,從當前節(jié)點開始分割;
[0008] 步驟2、若當前節(jié)點為"全稱量詞"或者"存在量詞"節(jié)點,則將該部分分割成兩個 子部分,一個子部分以該量詞節(jié)點結(jié)束,另一部分從該量詞節(jié)點的子節(jié)點開始,指定該量詞 節(jié)點的子節(jié)點為當前節(jié)點繼續(xù)分割;
[0009] 步驟3、若當前節(jié)點為"與"節(jié)點,"或"節(jié)點或者"蘊含"節(jié)點,則指定該節(jié)點的左 子節(jié)點為當前節(jié)點繼續(xù)分割,處理完左子節(jié)點后,指定該節(jié)點的右子節(jié)點為當前節(jié)點繼續(xù) 分割;
[0010] 步驟4、若當前節(jié)點為"非"節(jié)點,則指定該節(jié)點的子節(jié)點為當前節(jié)點繼續(xù)分割;
[0011] 步驟5、若當前節(jié)點為"函數(shù)"節(jié)點,則停止當前分支的遞歸;
[0012] 經(jīng)過分割后,一條約束被轉(zhuǎn)變?yōu)槿舾商幚韱卧?,各個處理單元不相交,且所有處理 單元共同構(gòu)成該約束。
[0013] 并行策略,基于處理單元的并行處理方法;具體為:
[0014] 步驟1、計算所需線程數(shù)N,設(shè)從當前處理單元的父節(jié)點開始,到約束頭結(jié)點的路 徑中的變量〈^,u 2,..· un>對應(yīng)的上下文信息集合為〈Si,S2,...Sn>,各個上下文信息集 合中的信息條數(shù)為〈1,1 2, . . . In>,則N = L X I2X. . · X In ;若當前處理單元到頭節(jié)點不包 含任何變量,或者當前處理單元包含頭節(jié)點,則N = 1 ;
[0015] 步驟2、生成N個GPU線程,線程id從0至N-1 (該id由GPU自動分配);各個線 程根據(jù)自身id獨立計算其對應(yīng)的賦值,設(shè)整數(shù)值% = j表示變量u i取其對應(yīng)集合Si中 第j條信息(〇彡Μ'Ι);則吣的取值按以下步驟得出:
[0016] i :設(shè) size = 1, cur = η ;
[0017] ii :若cur彡1,轉(zhuǎn)子iii,否則結(jié)束;
[0018] iii :
【權(quán)利要求】
1. 一種基于圖形處理器的并行化約束檢測方法,其特征在于,它包括: 基于量詞的約束分割步驟; 基于處理單元的并行處理步驟; 存儲策略步驟。
2. 根據(jù)權(quán)利要求1所述的并行化約束檢測方法,其特征在于:所述基于量詞的約束分 割步驟具體為: 步驟1、指定約束頭節(jié)點為當前節(jié)點,從當前節(jié)點開始分割; 步驟2、若當前節(jié)點為"全稱量詞"或者"存在量詞"節(jié)點,則將該部分分割成兩個子部 分,一個子部分以該量詞節(jié)點結(jié)束,另一部分從該量詞節(jié)點的子節(jié)點開始,指定該量詞節(jié)點 的子節(jié)點為當前節(jié)點繼續(xù)分割; 步驟3、若當前節(jié)點為"與"節(jié)點,"或"節(jié)點或者"蘊含"節(jié)點,則指定該節(jié)點的左子節(jié)點 為當前節(jié)點繼續(xù)分割,處理完左子節(jié)點后,指定該節(jié)點的右子節(jié)點為當前節(jié)點繼續(xù)分割; 步驟4、若當前節(jié)點為"非"節(jié)點,則指定該節(jié)點的子節(jié)點為當前節(jié)點繼續(xù)分割; 步驟5、若當前節(jié)點為"函數(shù)"節(jié)點,則停止當前分支的遞歸; 經(jīng)過分割后,一條約束被轉(zhuǎn)變?yōu)槿舾商幚韱卧鱾€處理單元不相交,且所有處理單元 共同構(gòu)成該約束。
3. 根據(jù)權(quán)利要求1所述的并行化約束檢測方法,其特征在于:所述基于處理單元的并 行處理步驟,具體為: 步驟1、計算所需線程數(shù)N,設(shè)從當前處理單元的父節(jié)點開始,到約束頭結(jié)點的路徑中 的變量〈υ η u 2,. . · u n>對應(yīng)的上下文信息集合為〈Si,S2,. . . Sn>,各個上下文信息集合中 的信息條數(shù)為〈Ip 12,. . . In>,則N = LX I2X. . · X In ;若當前處理單元到頭節(jié)點不包含任 何變量,或者當前處理單元包含頭節(jié)點,則N = 1 ; 步驟2、生成N個GPU線程,線程id從0至N-1 (該id由GPU自動分配);各個線程根 據(jù)自身id獨立計算其對應(yīng)的賦值,設(shè)整數(shù)值^ = j表示變量u i取其對應(yīng)集合Si中第j條 信息(〇彡M'D ; 步驟3、各個線程將所計算出的賦值映射到處理單元中,產(chǎn)生各個線程需要處理的并行 計算單元;各個線程獨立處理各個并行計算單元; 所述的所有GPU線程并發(fā)執(zhí)行,且互相之間不存在依賴關(guān)系。
4. 根據(jù)權(quán)利要求3所述的并行化約束檢測方法,其特征在于:步驟2中Mi的取值按以 下步驟得出: i. 子步驟 i :設(shè) size = 1,cur = η ; ii. 子步驟ii :若cur彡1,轉(zhuǎn)子步驟iii,否則結(jié)束; 子步驟 iii ,size = size*Icur ;cur = cur-1,轉(zhuǎn)子步驟 ii。
5. 根據(jù)權(quán)利要求1所述的并行化約束檢測方法,其特征在于:所述存儲策略步驟具體 為:索引-結(jié)果池的二層次存儲方法,包含三個部分:1)索引數(shù)組,包含兩個域:結(jié)果的起 始位置pos和長度len ;2)結(jié)果數(shù)組;3)結(jié)果數(shù)組位置指針Pointer (簡稱位置指針),它只 能被互斥地寫;設(shè)η個線程產(chǎn)生的結(jié)果長度分別為I 12. . . L . . in,所述索引-結(jié)果池的 二層次存儲方法具體為: 步驟1、各個線程根據(jù)其賦值計算各自當前節(jié)點在索引數(shù)組中的存儲位置; 步驟2、各個線程互斥的獲取結(jié)果數(shù)組位置指針,設(shè)第i個線程獲取到該結(jié)果數(shù)組位置 指針,則它將該節(jié)點的起始位置P〇s設(shè)為Pointer當前值,之后, 步驟3、更新該結(jié)果數(shù)組位置指針的值:Pointernew = Pointeiv^+li,其中,Pointer^S 位置指針初始值,li為第i個線程產(chǎn)生的結(jié)果長度; 步驟4、更新后釋放該結(jié)果數(shù)組位置指針供其他線程使用,并將結(jié)果填入結(jié)果數(shù)組,結(jié) 果長度填入該節(jié)點的結(jié)果長度len中。
【文檔編號】G06F9/46GK104123178SQ201410358441
【公開日】2014年10月29日 申請日期:2014年7月25日 優(yōu)先權(quán)日:2014年7月25日
【發(fā)明者】許暢, 馬曉星, 呂建, 眭駿 申請人:南京大學