基于gpu異構(gòu)計(jì)算平臺的字符串匹配方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法及系統(tǒng),其中的方法包括預(yù)處理階段和匹配階段;其中,在預(yù)處理階段包括對特征字符串進(jìn)行預(yù)處理,以及分別在CPU主存和GPU全局存儲(chǔ)器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存;在匹配階段對待匹配數(shù)據(jù)與特征字符串進(jìn)行匹配,包括在對待匹配數(shù)據(jù)進(jìn)行預(yù)處理后,在GPU中對待匹配數(shù)據(jù)與特征字符串的前綴進(jìn)行匹配,將匹配成功的待匹配數(shù)據(jù)按命中位置復(fù)制到結(jié)果緩存中,然后將結(jié)果緩存中的數(shù)據(jù)復(fù)制到CPU主存的結(jié)果緩存中;在CPU中,通過散列方式找到與命中位置相對應(yīng)的特征字符串,將待匹配數(shù)據(jù)與特征字符串逐字進(jìn)行匹配確認(rèn)。通過本發(fā)明能夠縮短線程流程及減少線程流程分支,提升字符串的匹配效率。
【專利說明】基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息識別【技術(shù)領(lǐng)域】,更為具體地,涉及一種基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著信息技術(shù)的高速發(fā)展,人們對計(jì)算機(jī)處理器的計(jì)算需求量也越來越大。為了滿足日益增長的計(jì)算需求量,出現(xiàn)了由不同類型處理器組成的新型異構(gòu)計(jì)算平臺,而由于GPU (Graphic Processing Unit,圖形處理器)技術(shù)有著強(qiáng)大的計(jì)算能力和高速的存儲(chǔ)帶寬,因此,伴隨著GPU技術(shù)的快速發(fā)展,基于GPU的異構(gòu)計(jì)算平臺開始紛紛涌現(xiàn)。
[0003]由于基于GPU的異構(gòu)計(jì)算平臺能夠適應(yīng)極高并行度的運(yùn)算環(huán)境,并且能夠表現(xiàn)出良好的性能,因此被廣泛地應(yīng)用于各個(gè)領(lǐng)域(例如油氣勘探、金融安全評估等)的海量數(shù)據(jù)計(jì)算中。同樣,在網(wǎng)絡(luò)安全領(lǐng)域內(nèi),在X86架構(gòu)的計(jì)算資源缺乏的情況下,由于使用CPU和GTO組成的異構(gòu)計(jì)算平臺在處理深度報(bào)文檢測時(shí),可以帶來很高的性能提升,因此由CPU和GI^U組成的異構(gòu)計(jì)算平臺逐漸成為計(jì)算領(lǐng)域的一種新的計(jì)算模型。
[0004]在采用CPU和GPU組成的異構(gòu)計(jì)算平臺中,CPU高效處理串行事務(wù),而GPU則處理并行事務(wù),基于GPU的異構(gòu)計(jì)算平臺通過將工作負(fù)載的不同部分指派到最適合的處理器,以極大提升深度網(wǎng)絡(luò)報(bào)文檢測系統(tǒng)的整體性能,然而深度報(bào)文檢測的主要瓶頸在于字符串的匹配。
[0005]目前,在已有的基于GPU的字符串匹配方法中,首先在CPU上進(jìn)行預(yù)處理相關(guān)操作,在匹配執(zhí)行階段,CPU僅負(fù)責(zé)數(shù)據(jù)采集、拷貝、匹配結(jié)果處理等調(diào)度性質(zhì)的工作,特征匹配過程完全由GPU完成。整個(gè)系統(tǒng)中,CPU有較多的空閑計(jì)算資源。如果能夠合理的調(diào)度這部分空閑計(jì)算資源,可以提升系統(tǒng)整體執(zhí)行效率。
[0006]在GPU模式匹配算法方面,目前采用二維表自動(dòng)基類算法,如《基于GPU的高速網(wǎng)絡(luò)報(bào)文內(nèi)容檢測方法》和《Accelerating Pattern Matching Using a Novel ParallelAlgorithm on GPU》中所采用的二維表自動(dòng)基類算法,其中以《Accelerating PatternMatching Using a Novel Parallel Algorithm on GPU》文中提到的 PFAC 算法相對較優(yōu)。PFAC采用任務(wù)并行方式,每個(gè)字符都作為起始偏移,啟動(dòng)一個(gè)線程進(jìn)行匹配,線程之間形成互補(bǔ),消除了傳統(tǒng)AC算法的回溯過程,縮小每個(gè)線程的最長執(zhí)行路徑,使其更適合GPU并發(fā)進(jìn)行計(jì)算的特點(diǎn)。但它的缺點(diǎn)在于,每次自動(dòng)機(jī)狀態(tài)更新都需要執(zhí)行一次大范圍隨機(jī)尋址的訪存操作,尤其是在匹配模式串?dāng)?shù)量較多的情況下,會(huì)影響cache利用率,進(jìn)而影響匹配效率。
[0007]如果僅考慮使用CPU為計(jì)算平臺,用位并行過濾類算法替代二維表自動(dòng)基類算法,一般都能夠大幅提升匹配效率,匹配的特征串?dāng)?shù)量越多,匹配效率的提升就越明顯。位并行過濾類算法更好的利用了空間局部性,在提升過濾過程的執(zhí)行效率時(shí),僅有很低的概率會(huì)執(zhí)行匹配確認(rèn)部分。如果匹配確認(rèn)執(zhí)行次數(shù)越多,過濾類算法的整體效率就越低。由于在大多數(shù)的應(yīng)用場景中,匹配過程不會(huì)發(fā)生命中或者命中較少,其過濾過程的執(zhí)行效率也可視為整體匹配過程的執(zhí)行效率,因此,在此種場景下的過濾類算法通常優(yōu)于二維表自動(dòng)機(jī)類算法。
[0008]但在GPU上,卻放大了過濾類算法的匹配確認(rèn)過程對整體性能的影響。如果有線程進(jìn)入了匹配確認(rèn)過程,那么它就有較長的執(zhí)行路徑和較久的執(zhí)行時(shí)間,干擾線程調(diào)度,力口大了處理異常分支的成本,進(jìn)而拖慢整體匹配效率。在一次多線程匹配結(jié)束后,需要將結(jié)果同步,此時(shí)需要等待最慢的線程執(zhí)行結(jié)束,也會(huì)影響整體效率。因此,如果僅使用GPU作為計(jì)算平臺,位并行過濾類算法沒有明顯優(yōu)勢,相反地會(huì)更加依賴運(yùn)行環(huán)境。
[0009]綜上所述,現(xiàn)有的基于GUP的異構(gòu)計(jì)算平臺在匹配字符串時(shí)存在以下兩點(diǎn)問題:
[0010]1、沒有充分利用CPU計(jì)算資源?,F(xiàn)有的基于GPU的異構(gòu)計(jì)算平臺僅利用CPU執(zhí)行數(shù)據(jù)采集、拷貝等調(diào)度性質(zhì)的工作,而在整個(gè)系統(tǒng)中,CPU有較多的空閑計(jì)算資源,如果可以合理調(diào)度空閑資源,可提升整體效率。
[0011]2、模式匹配算法還有改進(jìn)的余地。如上所述,將二維表類自動(dòng)機(jī)算法替換成位并行過濾算法可以大幅提升不命中場景下的性能,但也因?yàn)楫惓7种幚硎共糠志€程進(jìn)入超長執(zhí)行路徑,使系統(tǒng)整體性能過分依賴環(huán)境,某些場景性能更差,如能解決這個(gè)問題,匹配過程的性能也將會(huì)有明顯改善。
【發(fā)明內(nèi)容】
[0012]鑒于上述問題,本發(fā)明的目的是提供一種基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法及系統(tǒng),以充分利用CPU的計(jì)算資源并且縮短線程流程及減少線程流程分支,達(dá)到提升字符串的匹配效率的目的。
[0013]一方面,本發(fā)明提供一種基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法,包括預(yù)處理階段和匹配階段,其中,預(yù)處理階段在CPU中進(jìn)行,包括:
[0014]對特征字符串進(jìn)行預(yù)處理;其中,以位并行過濾方式構(gòu)建位向量掩碼表,并將位向量掩碼表的每行進(jìn)行壓縮,形成快速過濾子表,將位向量掩碼表和快速過濾子表復(fù)制到GPU全局存儲(chǔ)器;
[0015]分別在CPU主存和GPU全局存儲(chǔ)器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存;
[0016]在匹配階段對待匹配數(shù)據(jù)與特征字符串進(jìn)行匹配,包括:
[0017]對待匹配數(shù)據(jù)進(jìn)行預(yù)處理,將預(yù)處理后的待匹配數(shù)據(jù)從CPU主存的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中進(jìn)行保存;
[0018]在GPU中,采用位并行過濾方式對待匹配數(shù)據(jù)與特征字符串的前綴進(jìn)行匹配,將與特征字符串的前綴匹配成功的待匹配數(shù)據(jù)按命中位置復(fù)制到GPU全局存儲(chǔ)器的結(jié)果緩存中,然后將GPU全局存儲(chǔ)器的結(jié)果緩存中的數(shù)據(jù)復(fù)制到CPU主存的結(jié)果緩存中;
[0019]在CPU中,通過散列方式找到與命中位置相對應(yīng)的特征字符串,將待匹配數(shù)據(jù)與特征字符串逐字進(jìn)行匹配確認(rèn)。
[0020]其中,GPU全局存儲(chǔ)器的結(jié)果緩存中的數(shù)據(jù)包括匹配命中標(biāo)識和匹配結(jié)果;其中,在對待匹配數(shù)據(jù)與特征字符串的前綴進(jìn)行匹配的過程中,如果與特征字符串的前綴匹配成功,則將匹配命中標(biāo)識設(shè)置為1,否則將匹配命中標(biāo)識設(shè)置為0,然后將匹配命中標(biāo)識復(fù)制到CPU主存的結(jié)果緩存中;在CPU中對匹配命中標(biāo)識進(jìn)行判斷,其中,如果匹配命中標(biāo)識非0,則繼續(xù)將GPU全局存儲(chǔ)器的結(jié)果緩存中的匹配結(jié)果復(fù)制到CPU主存的結(jié)果緩存中。[0021]另一方面,本發(fā)明還提供一種基于GPU異構(gòu)計(jì)算平臺的字符串匹配系統(tǒng),包括預(yù)處理單元和匹配單元,其中,預(yù)處理單元在CPU中進(jìn)行,包括:
[0022]特征字符串預(yù)處理單元,用于對特征字符串進(jìn)行預(yù)處理;其中,以位并行過濾方式構(gòu)建位向量掩碼表,并將位向量掩碼表的每行進(jìn)行壓縮,形成快速過濾子表,將位向量掩碼表和快速過濾子表復(fù)制到GPU全局存儲(chǔ)器;
[0023]緩存分配單元,用于分別在CPU主存和GPU全局存儲(chǔ)器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存;
[0024]匹配單元,用于對待匹配數(shù)據(jù)與特征字符串進(jìn)行匹配,包括:
[0025]待匹配數(shù)據(jù)預(yù)處理單元,用于對待匹配數(shù)據(jù)進(jìn)行預(yù)處理,將預(yù)處理后的待匹配數(shù)據(jù)從CPU主存的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中進(jìn)行保存;
[0026]前綴匹配單元,用于在GPU中,采用位并行過濾方式對待匹配數(shù)據(jù)與特征字符串的前綴進(jìn)行匹配,將與特征字符串的前綴匹配成功的待匹配數(shù)據(jù)按命中位置復(fù)制到GPU全局存儲(chǔ)器的結(jié)果緩存中,然后將GPU全局存儲(chǔ)器的結(jié)果緩存中的數(shù)據(jù)復(fù)制到CPU主存的結(jié)果緩存中;
[0027]匹配確認(rèn)單元,用于在CPU中,通過散列方式找到與命中位置相對應(yīng)的特征字符串,將待匹配數(shù)據(jù)與特征字符串逐字進(jìn)行匹配確認(rèn)。
[0028]利用上述根據(jù)本發(fā)明的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法及系統(tǒng),通過利用GPU進(jìn)行高速過濾,再利用CPU進(jìn)行字符串匹配命中確認(rèn),同時(shí)采用流式處理的并行執(zhí)行方式,在充分發(fā)揮GPU的并行計(jì)算優(yōu)勢以及CPU的單線程計(jì)算優(yōu)勢的同時(shí),能夠縮短線程流程及減少線程流程分支,提升字符串的匹配效率。
[0029]為了實(shí)現(xiàn)上述以及相關(guān)目的,本發(fā)明的一個(gè)或多個(gè)方面包括后面將詳細(xì)說明并在權(quán)利要求中特別指出的特征。下面的說明以及附圖詳細(xì)說明了本發(fā)明的某些示例性方面。然而,這些方面指示的僅僅是可使用本發(fā)明的原理的各種方式中的一些方式。此外,本發(fā)明旨在包括所有這些方面以及它們的等同物。
【專利附圖】
【附圖說明】
[0030]通過參考以下結(jié)合附圖的說明及權(quán)利要求書的內(nèi)容,并且隨著對本發(fā)明的更全面理解,本發(fā)明的其它目的及結(jié)果將更加明白及易于理解。在附圖中:
[0031]圖1為根據(jù)本發(fā)明實(shí)施例的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法流程示意圖;
[0032]圖2為根據(jù)本發(fā)明實(shí)施例的基于GPU異構(gòu)計(jì)算平臺的字符串匹配系統(tǒng)邏輯結(jié)構(gòu)框圖。
[0033]在所有附圖中相同的標(biāo)號指示相似或相應(yīng)的特征或功能。
【具體實(shí)施方式】
[0034]以下將結(jié)合附圖對本發(fā)明的具體實(shí)施例進(jìn)行詳細(xì)描述。
[0035]針對前述現(xiàn)有的基于GPU的字符串匹配方法沒有充分利用CPU的計(jì)算資源,以及匹配確認(rèn)過程會(huì)影響整體的匹配效率和依賴運(yùn)行環(huán)境的問題,本發(fā)明通過先利用GPU的并行計(jì)算能力對待匹配數(shù)據(jù)進(jìn)行過濾,然后再利用CPU進(jìn)行字符串匹配命中確認(rèn),同時(shí)在匹配階段采用流式處理的并行執(zhí)行方式進(jìn)行字符串匹配,在充分利用GPU和CPU的優(yōu)勢的同時(shí),縮短線程流程及減少線程流程分支,從而提升字符串的匹配效率。
[0036]為了詳細(xì)的說明本發(fā)明提供的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法,圖1示出了根據(jù)本發(fā)明實(shí)施例的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法流程。
[0037]如圖1所示,本發(fā)明提供的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法包括預(yù)處理階段和匹配階段,其中,預(yù)處理階段在CPU中進(jìn)行,其工作流程包括:
[0038]Slll:對特征字符串進(jìn)行預(yù)處理;其中,以位并行過濾方式構(gòu)建位向量掩碼表,并將位向量掩碼表的每行進(jìn)行壓縮,形成快速過濾子表,將位向量掩碼表和快速過濾子表復(fù)制到GPU全局存儲(chǔ)器。
[0039]其中,在將位向量掩碼表和快速過濾子表復(fù)制到GPU全局存儲(chǔ)器之后,將GPU全局存儲(chǔ)器與紋理存儲(chǔ)器綁定。
[0040]通常位并行過濾算法首先需要截取每個(gè)特征字符串的前綴,然后依據(jù)這些前綴構(gòu)建位向量掩碼表。也就是說,在以位并行過濾方式構(gòu)建位向量掩碼表的過程中,截取每個(gè)特征字符串的前綴,根據(jù)所截取的前綴構(gòu)建位向量掩碼表。
[0041]其中,特征字符串前綴長度是通過對特征字符串的數(shù)據(jù)及長度的統(tǒng)計(jì)分析得到的,一個(gè)特征字符串集合最終會(huì)選定一個(gè)或者多個(gè)特征串前綴長度。這些截取的前綴是特征字符串命中的必要條件。在下述的匹配階段,分為過濾和匹配確認(rèn)兩個(gè)步驟,其中,在過濾步驟中,先匹配特征字符串的前綴,當(dāng)過濾步驟執(zhí)行結(jié)束,如果發(fā)生過前綴匹配,再通過匹配確認(rèn)步驟來比對完整的特征字符串。
[0042]具體地,在本發(fā)明的一個(gè)示例中,集合中包含A、B、C、D四個(gè)特征字符串,假設(shè)最終確定的前綴長度包括3和5,那么特征字符串A、B、C最終截取的前綴即是它們本身,而特征字符串D長度超過5,那么特征字符串D只有前5個(gè)字符會(huì)參與過濾匹配,其余部分都要在匹配確認(rèn)步驟中完成匹配。
[0043]S112:分別在CPU主存和GPU全局存儲(chǔ)器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存。
[0044]其中,GPU全局存儲(chǔ)器的結(jié)果緩存中的數(shù)據(jù)包括匹配命中標(biāo)識和匹配結(jié)果。也就是說,GPU全局存儲(chǔ)器的結(jié)果緩存包括兩塊緩存,一塊是匹配命中標(biāo)識,長度為1,寬度為4字節(jié);另一塊為匹配結(jié)果,長度為待匹配數(shù)據(jù)緩存大小,寬度為I字節(jié)。待匹配數(shù)據(jù)緩存的大小根據(jù)GPU計(jì)算能力和網(wǎng)絡(luò)吞吐實(shí)際情況,既能夠啟動(dòng)足夠多的線程又使得網(wǎng)卡以最小延時(shí)來積攢這些長度的數(shù)據(jù)包。
[0045]在匹配階段對待匹配數(shù)據(jù)與特征字符串進(jìn)行匹配,其工作流程包括:
[0046]S121:對待匹配數(shù)據(jù)進(jìn)行預(yù)處理,將預(yù)處理后的待匹配數(shù)據(jù)從CPU主存的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中進(jìn)行保存。
[0047]其中,在將預(yù)處理后的待匹配數(shù)據(jù)從CPU主存的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中進(jìn)行保存之后,將保存待匹配數(shù)據(jù)的GPU全局存儲(chǔ)器與紋理存儲(chǔ)器綁定。
[0048]具體地,將保存待匹配數(shù)據(jù)的GPU全局存儲(chǔ)器與紋理存儲(chǔ)器綁定的目的是為了通過緩存加快訪存速度。
[0049]需要說明的是,為了提高字符串匹配時(shí)的并行執(zhí)行效率,不僅需要考慮待匹配數(shù)據(jù)緩存和結(jié)果緩存的長度,還需要考慮CPU與GPU之間的數(shù)據(jù)交互。[0050] 由于PC1-E接口的傳輸性能總是隨著數(shù)據(jù)總量的增大而增加,到一定數(shù)值達(dá)到峰值,因此,根據(jù)使用的PC1-E版本和通道數(shù)目,通過計(jì)算GPU匹配函數(shù)在匹配不同長度的數(shù)據(jù)時(shí)的執(zhí)行時(shí)間,得到一個(gè)最優(yōu)的數(shù)據(jù)長度,使待匹配數(shù)據(jù)的復(fù)制時(shí)間和處理該長度的GPU匹配函數(shù)的執(zhí)行時(shí)間大致相等,最終使得數(shù)據(jù)復(fù)制和GPU匹配函數(shù)的并行執(zhí)行程度達(dá)到最高。在本發(fā)明中,CPU使用的主存與GPU使用的顯存之間的數(shù)據(jù)復(fù)制是通過PC1-E接口傳輸?shù)摹?br>
[0051 ] 也就是說,在本發(fā)明中,通過PC1-E接口將預(yù)處理后的待匹配數(shù)據(jù)從CPU主存的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中進(jìn)行保存。
[0052]S122:在GPU中,采用位并行過濾方式對待匹配數(shù)據(jù)與特征字符串的前綴進(jìn)行匹配,將與特征字符串的前綴匹配成功的待匹配數(shù)據(jù)按命中位置復(fù)制到GPU全局存儲(chǔ)器的結(jié)果緩存中,然后將GPU全局存儲(chǔ)器的結(jié)果緩存中的數(shù)據(jù)復(fù)制到CPU主存的結(jié)果緩存中。
[0053]其中,在對待匹配數(shù)據(jù)與特征字符串的前綴進(jìn)行匹配的過程中,如果與特征字符串的前綴匹配成功,則將匹配命中標(biāo)識設(shè)置為1,否則將匹配命中標(biāo)識設(shè)置為0,然后將匹配命中標(biāo)識復(fù)制到CPU主存的結(jié)果緩存中;在CPU中對匹配命中標(biāo)識進(jìn)行判斷,其中,如果匹配命中標(biāo)識非0,則繼續(xù)將GPU全局存儲(chǔ)器的匹配結(jié)果緩存中的匹配結(jié)果復(fù)制到CPU主存的結(jié)果緩存中。
[0054]具體地,首先僅對特征字符串的前綴進(jìn)行匹配,如果未發(fā)生匹配命中,則將GPU全局存儲(chǔ)器的結(jié)果緩存中的匹配命中標(biāo)識設(shè)置為O ;如果前綴匹配命中,則將GPU全局存儲(chǔ)器的結(jié)果緩存中的匹配命中標(biāo)識設(shè)置為1,同時(shí)將與特征字符串的前綴匹配成功的待匹配數(shù)據(jù)按命中位置復(fù)制到GPU全局存儲(chǔ)器的結(jié)果緩存中。
[0055]在將GPU全局存儲(chǔ)器的結(jié)果緩存中的匹配結(jié)果復(fù)制到CPU主存的結(jié)果緩存中的過程中,首先將GPU全局存儲(chǔ)器的結(jié)果緩存中的匹配命中標(biāo)識復(fù)制到CPU主存的結(jié)果緩存中,然后在CPU中對該匹配命中標(biāo)識進(jìn)行判斷,如果該匹配命中標(biāo)識非0,則繼續(xù)將GPU全局存儲(chǔ)器的結(jié)果緩存中的匹配結(jié)果緩存中的數(shù)據(jù)復(fù)制到CPU主存。
[0056]S123:在CPU中,通過散列方式找到與命中位置相對應(yīng)的特征字符串,將待匹配數(shù)據(jù)與特征字符串逐字進(jìn)行匹配確認(rèn)。
[0057]具體地,使用CPU的SMD技術(shù)快速找到CPU主存的結(jié)果緩存中的非O位置,通過散列算法找到與之相對應(yīng)的原特征字符串,并逐字進(jìn)行比較確認(rèn),至此整個(gè)字符串匹配過程結(jié)束。
[0058]作為本發(fā)明的一個(gè)示例,下述以網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的檢測為例,對匹配階段的工作流程作更為詳細(xì)的說明。首先將來自網(wǎng)卡的數(shù)據(jù)報(bào)文進(jìn)行預(yù)處理,包括剝離IP頭,提取數(shù)據(jù)部分等,然后將處理后的數(shù)據(jù)報(bào)文從CPU主存所分配的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中,并將保存處理后的數(shù)據(jù)報(bào)文(即待匹配數(shù)據(jù))的GPU全局存儲(chǔ)器與紋理存儲(chǔ)器綁定。
[0059]在進(jìn)行字符串匹配的過程中,分為過濾和匹配確認(rèn)兩個(gè)步驟,其中,在過濾步驟中,采用位并行類過濾算法進(jìn)行字符串匹配,每個(gè)線程處理報(bào)文的起始位置是上一個(gè)線程最短特征字符串的長度,因此相鄰的線程處理的數(shù)據(jù)報(bào)文是非常接近的。在過濾匹配時(shí),僅匹配特征字符串的前綴,如果發(fā)生前綴命中,則將成功匹配的數(shù)據(jù)按命中位置復(fù)制到CPU主存的結(jié)果緩存中,然后在CPU中再逐字進(jìn)行比較確認(rèn)。[0060]需要說明的是,在整個(gè)匹配階段的工作流程中,都是以流式并行處理方式執(zhí)行匹配過程的。也就是說,在匹配階段采用流式并行處理方式對待匹配數(shù)據(jù)與特征字符串進(jìn)行匹配,該流式并行處理方式是指在GPU執(zhí)行匹配的同時(shí)執(zhí)行待匹配數(shù)據(jù)和匹配結(jié)果的拷入及拷出,同時(shí),CPU進(jìn)行匹配確認(rèn)。
[0061]具體地,在GPU執(zhí)行匹配的同時(shí)執(zhí)行數(shù)據(jù)的拷入及拷出(根據(jù)GPU是否支持單向或雙向并行執(zhí)行的特性決定)操作,在前綴匹配結(jié)束時(shí),將匹配結(jié)果復(fù)制到CPU主存的結(jié)果緩存中,再由CPU做命中確認(rèn)處理。
[0062]一般情況下,數(shù)據(jù)的拷貝與GPU匹配函數(shù)按序依次執(zhí)行,每次執(zhí)行字符串匹配時(shí),首先進(jìn)行數(shù)據(jù)報(bào)文復(fù)制,復(fù)制完成后執(zhí)行匹配函數(shù),再等到匹配函數(shù)執(zhí)行完成后再將匹配結(jié)果復(fù)制出去,結(jié)果復(fù)制完成后再進(jìn)行下一輪的執(zhí)行。這種單流模式的執(zhí)行總體上執(zhí)行效率很低。目前大多數(shù)GPU都支持單向或雙向數(shù)據(jù)復(fù)制與匹配函數(shù)并發(fā)執(zhí)行,因此采用并行執(zhí)行方式,創(chuàng)建多個(gè)流執(zhí)行。
[0063]首先第一個(gè)流將數(shù)據(jù)報(bào)文復(fù)制到GPU,然后GPU開始執(zhí)行第一個(gè)流的匹配函數(shù),此時(shí)就開始復(fù)制下一個(gè)流的數(shù)據(jù)報(bào)文給GPU,第一個(gè)流的匹配函數(shù)執(zhí)行完后就可以將結(jié)果復(fù)制到CPU主存,同時(shí)第二個(gè)流的匹配函數(shù)開始執(zhí)行,如果對于支持雙向并行執(zhí)行的GPU來說,下一個(gè)流的數(shù)據(jù)報(bào)文復(fù)制和上一個(gè)流的結(jié)果復(fù)制可以同時(shí)執(zhí)行,采用這種流式并發(fā)的執(zhí)行方式可以從整體上減少字符串匹配的時(shí)間延遲。
[0064]通過圖1所示的流程可以看出,本發(fā)明提供的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法在充分發(fā)揮GPU的并行計(jì)算優(yōu)勢以及CPU的單線程計(jì)算優(yōu)勢的同時(shí),能夠縮短線程流程及減少線程流程分支,提升字符串的匹配效率。其具體體現(xiàn)如下所述:
[0065]1、將匹配確認(rèn)部分從GPU中移除,可減少GPU線程分支的計(jì)算量,縮短最長執(zhí)行路徑。每個(gè)線程執(zhí)行時(shí)間更平衡,減少在線程同步過程中的空等待,充分發(fā)揮GPU并行計(jì)算的優(yōu)勢,有較大的性能提升。
[0066]2、利用CPU單線程計(jì)算能力的優(yōu)勢,分擔(dān)一部分確認(rèn)命中的計(jì)算量給CPU,CPU的單線程計(jì)算能力優(yōu)于GPU。多數(shù)情況下,使用CPU執(zhí)行匹配確認(rèn)要比GPU更快,如此不僅減少了 GPU分支計(jì)算量,也能縮短全路徑的執(zhí)行時(shí)間,減少延遲。
[0067]3、采用流式并行執(zhí)行方式,實(shí)現(xiàn)從數(shù)據(jù)報(bào)文復(fù)制到GPU,GPU執(zhí)行匹配函數(shù),再從GPU將匹配結(jié)果復(fù)制到CPU主存,并且在CPU中進(jìn)行匹配確認(rèn)的整條流水線并發(fā)執(zhí)行。其中,通過計(jì)算每次匹配數(shù)據(jù)的最優(yōu)值,使得GPU匹配函數(shù)執(zhí)行和數(shù)據(jù)復(fù)制時(shí)間相差不多,系統(tǒng)中耗時(shí)較多的幾個(gè)單元都可以同時(shí)執(zhí)行,整體達(dá)到并發(fā)執(zhí)行最優(yōu),大幅提升了系統(tǒng)的整體性能。
[0068]4、結(jié)果緩存中的數(shù)據(jù)長度和待匹配的數(shù)據(jù)長度相等,GPU執(zhí)行結(jié)束后,結(jié)果緩存中需要處理的數(shù)據(jù)總量更小。在利用PFAC方法進(jìn)行字符串匹配時(shí),其在匹配結(jié)束后,每條線程會(huì)產(chǎn)生一個(gè)匹配結(jié)果,如果特征字符串?dāng)?shù)量超過255,那么就需要兩個(gè)或更多字節(jié)來保存結(jié)果。由于PFAC方法會(huì)在待匹配數(shù)據(jù)每字節(jié)位置啟動(dòng)一條線程,所以一般情況下結(jié)果數(shù)據(jù)量是待匹配數(shù)據(jù)量的兩倍。相比于PFAC方法,本發(fā)明所提供的匹配方法并沒有帶來多余的數(shù)據(jù)交互和冗余計(jì)算,相反地,其數(shù)據(jù)交互和冗余計(jì)算反而更少。
[0069]為了使上述方法所帶來的有益效果更為直觀的顯現(xiàn),下述以實(shí)驗(yàn)的方式和表格的形式對其作具體說明。其中,實(shí)驗(yàn)采用NVIDIA GTX680,待匹配數(shù)據(jù)報(bào)文長度2MB。PC1-E理論速率標(biāo)準(zhǔn)如表1所示:
[0070]
【權(quán)利要求】
1.一種基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法,包括預(yù)處理階段和匹配階段,其中,所述預(yù)處理階段在CPU中進(jìn)行,包括: 對特征字符串進(jìn)行預(yù)處理;其中,以位并行過濾方式構(gòu)建位向量掩碼表,并將所述位向量掩碼表的每行進(jìn)行壓縮,形成快速過濾子表,將所述位向量掩碼表和所述快速過濾子表復(fù)制到GPU全局存儲(chǔ)器; 分別在CPU主存和所述GPU全局存儲(chǔ)器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存; 在所述匹配階段對待匹配數(shù)據(jù)與所述特征字符串進(jìn)行匹配,包括: 對待匹配數(shù)據(jù)進(jìn)行預(yù)處理,將預(yù)處理后的待匹配數(shù)據(jù)從所述CPU主存的待匹配數(shù)據(jù)緩存中復(fù)制到所述GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中進(jìn)行保存; 在GPU中,采用位并行過濾方式對待匹配數(shù)據(jù)與所述特征字符串的前綴進(jìn)行匹配,將與所述特征字符串的前綴匹配成功的待匹配數(shù)據(jù)按命中位置復(fù)制到所述GPU全局存儲(chǔ)器的結(jié)果緩存中,然后將所述GPU全局存儲(chǔ)器的結(jié)果緩存中的數(shù)據(jù)復(fù)制到所述CPU主存的結(jié)果緩存中; 在CPU中,通過散列方式找到與所述命中位置相對應(yīng)的特征字符串,將所述待匹配數(shù)據(jù)與所述特征字符串逐字進(jìn)行匹配確認(rèn)。
2.如權(quán)利要求1所述的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法,其中,在所述匹配階段采用流式并行處理方式對待匹配數(shù)據(jù)與所述特征字符串進(jìn)行匹配,所述流式并行處理方式是指在GPU執(zhí)行匹配的同時(shí),執(zhí)行待匹配數(shù)據(jù)和匹配結(jié)果的拷入及拷出,同時(shí),CPU進(jìn)行匹配確認(rèn)。
3.如權(quán)利要求1所述的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法,其中,在以位并行過濾方式構(gòu)建位向量掩碼表的過程中, 截取每個(gè)特征字符串的前綴,根據(jù)所截取的前綴構(gòu)建位向量掩碼表。
4.如權(quán)利要求1所述的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法,其中,在將所述位向量掩碼表和所述快速過濾子表復(fù)制到GPU全局存儲(chǔ)器之后,將所述GPU全局存儲(chǔ)器與紋理存儲(chǔ)器綁定。
5.如權(quán)利要求1所述的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法,其中,在將預(yù)處理后的待匹配數(shù)據(jù)從所述CPU主存的待匹配數(shù)據(jù)緩存中復(fù)制到所述GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中進(jìn)行保存之后,將保存待匹配數(shù)據(jù)的GPU全局存儲(chǔ)器與紋理存儲(chǔ)器綁定。
6.如權(quán)利要求1所述的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法,其中,所述GPU全局存儲(chǔ)器的結(jié)果緩存中的數(shù)據(jù)包括匹配命中標(biāo)識和匹配結(jié)果;其中,在對待匹配數(shù)據(jù)與所述特征字符串的前綴進(jìn)行匹配的過程中, 如果與所述特征字符串的前綴匹配成功,則將所述匹配命中標(biāo)識設(shè)置為1,否則將所述匹配命中標(biāo)識設(shè)置為O,然后將所述匹配命中標(biāo)識復(fù)制到所述CPU主存的結(jié)果緩存中; 在CPU中對匹配命中標(biāo)識進(jìn)行判斷,其中,如果所述匹配命中標(biāo)識非O,則繼續(xù)將所述GPU全局存儲(chǔ)器的結(jié)果緩存中的匹配結(jié)果復(fù)制到所述CPU主存的結(jié)果緩存中。
7.如權(quán)利要求1所述的基于GPU異構(gòu)計(jì)算平臺的字符串匹配方法,其中,通過PC1-E接口將預(yù)處理后的待匹配數(shù)據(jù)從所述CPU主存的待匹配數(shù)據(jù)緩存中復(fù)制到所述GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中進(jìn)行保存。
8.一種基于GPU異構(gòu)計(jì)算平臺的字符串匹配系統(tǒng),包括預(yù)處理單元和匹配單元,其中,所述預(yù)處理單元在CPU中進(jìn)行,包括: 特征字符串預(yù)處理單元,用于對特征字符串進(jìn)行預(yù)處理;其中,以位并行過濾方式構(gòu)建位向量掩碼表,并將所述位向量掩碼表的每行進(jìn)行壓縮,形成快速過濾子表,將所述位向量掩碼表和所述快速過濾子表復(fù)制到GPU全局存儲(chǔ)器; 緩存分配單元,用于分別在CPU主存和所述GPU全局存儲(chǔ)器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存; 所述匹配單元,用于對待匹配數(shù)據(jù)與所述特征字符串進(jìn)行匹配,包括: 待匹配數(shù)據(jù)預(yù)處理單元,用于對待匹配數(shù)據(jù)進(jìn)行預(yù)處理,將預(yù)處理后的待匹配數(shù)據(jù)從所述CPU主存的待匹配數(shù)據(jù)緩存中復(fù)制到所述GPU全局存儲(chǔ)器的待匹配數(shù)據(jù)緩存中進(jìn)行保存; 前綴匹配單元,用于在GPU中,采用位并行過濾方式對待匹配數(shù)據(jù)與所述特征字符串的前綴進(jìn)行匹配,將與所述特征字符串的前綴匹配成功的待匹配數(shù)據(jù)按命中位置復(fù)制到所述GPU全局存儲(chǔ)器的結(jié)果緩存中,然后將所述GPU全局存儲(chǔ)器的結(jié)果緩存中的數(shù)據(jù)復(fù)制到所述CPU主存的結(jié)果緩存中; 匹配確認(rèn)單元,用于在CPU中,通過散列方式找到與所述命中位置相對應(yīng)的特征字符串,將所述待匹配數(shù)據(jù)與所述特征字符串逐字進(jìn)行匹配確認(rèn)。
9.如權(quán)利要求8所述 的基于GPU異構(gòu)計(jì)算平臺的字符串匹配系統(tǒng),其中,所述特征字符串預(yù)處理單元進(jìn)一步包括: 前綴截取單元,用于在以位并行過濾方式構(gòu)建位向量掩碼表的過程中,截取每個(gè)特征字符串的前綴,根據(jù)所截取的前綴構(gòu)建位向量掩碼表。
【文檔編號】G06F9/38GK103559017SQ201310508005
【公開日】2014年2月5日 申請日期:2013年10月23日 優(yōu)先權(quán)日:2013年10月23日
【發(fā)明者】侯智瀚, 楊梟 申請人:東軟集團(tuán)股份有限公司