亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于gpu計算的字符串匹配方法和系統(tǒng)的制作方法

文檔序號:6516576閱讀:412來源:國知局
基于gpu計算的字符串匹配方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種基于GPU計算的字符串匹配方法及系統(tǒng),其方法包括CPU預(yù)處理階段和GPU匹配階段;CPU預(yù)處理階段包括:對特征字符串進行預(yù)處理和對待匹配數(shù)據(jù)進行預(yù)處理;分別在CPU主存和GPU全局存儲器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存,將預(yù)處理后的待匹配數(shù)據(jù)從CPU主存中的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲器中的結(jié)果緩存中保存;GPU匹配階段包括:采用GPU多線程任務(wù)并行執(zhí)行方式對每個GPU線程中的預(yù)處理后的待匹配數(shù)據(jù)分別與預(yù)處理后的特征字符串前綴和特征字符串后綴進行匹配,將匹配成功的待匹配數(shù)據(jù)與相應(yīng)的特征字符串逐字進行確認(rèn)。利用本發(fā)明,能夠解決Cache利用率低、啟動線程數(shù)量多和訪存開銷大等問題,提升字符串匹配過程的性能。
【專利說明】基于GPU計算的字符串匹配方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息識別【技術(shù)領(lǐng)域】,更為具體地,涉及一種基于GPU計算的字符串匹配方法和系統(tǒng)。
【背景技術(shù)】
[0002]隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展和日益豐富的網(wǎng)絡(luò)應(yīng)用,對網(wǎng)絡(luò)的攻擊方式層出不窮,因此網(wǎng)絡(luò)安全產(chǎn)品也集成了越來越多的安全功能,如入侵防御系統(tǒng)、病毒檢測、垃圾郵件檢測、應(yīng)用識別等,網(wǎng)絡(luò)安全產(chǎn)品的應(yīng)用需要以對通過的網(wǎng)絡(luò)流量進行深度數(shù)據(jù)報文檢測為基礎(chǔ),但是深度報文檢測的模式匹配是制約整個安全產(chǎn)品系統(tǒng)性能的瓶頸。
[0003]隨著GPU (Graphic Processing Unit,圖形處理器)技術(shù)的發(fā)展,GPU已經(jīng)成為適合高并行性和計算量大的應(yīng)用處理核心。由CPU和GPU組成的異構(gòu)計算機為計算領(lǐng)域帶來了一場革命。通過將工作負(fù)載的不同部分匹配到最適合的處理器,可以極大地提升計算機的性能,并且GPU在低成本的并行計算和良好的擴展性等方面的優(yōu)點使其成為安全產(chǎn)品系統(tǒng)中一種字符串匹配的新的執(zhí)行模型。
[0004]圖1示出了現(xiàn)有的基于GPU的字符串匹配方法流程。
[0005]如圖1所示,現(xiàn)有的基于GPU的字符串匹配方法流程包括:首先對特征串集合進行預(yù)處理,形成通常是二維數(shù)組的自動機狀態(tài)轉(zhuǎn)換表,并將該表拷貝到GPU全局存儲器中且與紋理存儲器綁定,使用帶有Cache (高速緩沖存儲器)的紋理存儲器可以提高訪存的效率,并在主機內(nèi)存中采用雙緩沖區(qū)機制分別用于存儲積攢的網(wǎng)絡(luò)數(shù)據(jù)報文和復(fù)制到GPU存儲器中;然后啟動大量線程對數(shù)據(jù)報文進行字符串匹配處理,數(shù)據(jù)報文存儲在GPU全局存儲器或紋理存儲器中(或再從GPU全局存儲器拷貝到共享存儲器中以降低訪存延時)接著在GPU中執(zhí)行匹配函數(shù);最終將匹配結(jié)果從GPU存儲器復(fù)制到CPU主存中。
[0006]在國內(nèi)外已有的基于GPU的字符串匹配方法中,在GPU上進行字符串匹配主要有兩種方法,第一種是數(shù)據(jù)并行,比如專利申請?zhí)枮?01010539214.8的中國專利申請所公開的基于GPU的高速網(wǎng)絡(luò)報文內(nèi)容檢測方法,該專利申請披露了該方法執(zhí)行的方式,將數(shù)據(jù)報文分成多個片段,然后每個片段啟動一個線程執(zhí)行字符串匹配工作;第二種是任務(wù)并行,比如臺灣清華大學(xué)的Cheng-Hung Lin,Chen-Hsiung Liu,Lung-Sheng Chien和Shih-ChiehChang 四人在 ieee 上發(fā)表的論文《Accelerating Pattern Matching Using a NovelParallel Algorithm on GPUs)) (2012年12月),其中論述了以下執(zhí)行方式:在GPU上啟動與數(shù)據(jù)報文字符長度相等數(shù)量的線程,每個字符都作為匹配工作的開始位置,對應(yīng)著一個線程。
[0007]上述兩種進行字符串匹配的方法各自存在著不足。
[0008]在數(shù)據(jù)并行方式中,采用每個線程匹配等長的數(shù)據(jù)報文片段,因此每個線程處理的字符位置間隔較大,不利于集中訪存,對于有Cache機制就會造成大量Cache的換進換出操作,增加了匹配過程中的訪存開銷。并且需要較大的數(shù)據(jù)報文才能啟動足夠數(shù)量的線程發(fā)揮GPU并行處理的優(yōu)勢。字符串匹配算法分支較多,多模字符串匹配算法在匹配失敗時需要回退處理,由于GPU較差的邏輯處理能力,多模字符串匹配算法的執(zhí)行流程包含過多的分支將造成GPU處理單元執(zhí)行效率降低。同時,還需要考慮“邊緣檢測”的情況,即匹配命中的數(shù)據(jù)位于兩個片段分片的位置。
[0009]在任務(wù)并行方式中,每個字符都作為起始偏移,啟動一個線程進行匹配。每字節(jié)的任務(wù)并行方式會啟動大量的線程,即使有的線程執(zhí)行時間較短,但是大量線程的啟動也會有很大的時間開銷。并且,每個啟動的線程至少都會有兩次訪存操作,包括:從待匹配數(shù)據(jù)讀值以及查找狀態(tài)轉(zhuǎn)換表。所以線程增加的同時也增加了內(nèi)存訪問的次數(shù),進而影響性能。最后,每個線程都會返回一個結(jié)果,那么將匹配結(jié)果復(fù)制到CPU主存也會占用很多的時間。
[0010]因此,以上兩種現(xiàn)有的進行字符串匹配的方法都各自存在著效率不高的問題。

【發(fā)明內(nèi)容】

[0011]鑒于上述問題,本發(fā)明的目的是提供一種基于GPU計算的字符串匹配方法和系統(tǒng),以解決cache利用率低、啟動線程數(shù)量多和訪存開銷大等問題,從而提升特征字符串匹配過程的性能。
[0012]本發(fā)明提供的基于GPU計算的字符串匹配方法,包括CPU預(yù)處理階段和GPU匹配階段;其中,
[0013]在CPU預(yù)處理階段的過程中:對特征字符串進行預(yù)處理;其中,首先構(gòu)建位向量掩碼表,并根據(jù)位向量掩碼表生成快速過濾子表;將位向量掩碼表和快速過濾子表拷貝到GPU全局存儲器;
[0014]分別在CPU主存和GPU全局存儲器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存;
[0015]對待匹配數(shù)據(jù)進行預(yù)處理,并將預(yù)處理后的待匹配數(shù)據(jù)從CPU主存中的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲器中的待匹配數(shù)據(jù)緩存中保存;
[0016]在GPU匹配階段的過程中,根據(jù)對特征字符串進行預(yù)處理所構(gòu)建的位相量掩碼表以及生成的快速過濾子表,采用GPU多線程任務(wù)并行執(zhí)行方式對每個GPU線程中預(yù)處理后的待匹配數(shù)據(jù)分別與預(yù)處理后的特征字符串前綴和特征字符串后綴進行匹配;
[0017]將匹配成功的預(yù)處理后的待匹配數(shù)據(jù)與相應(yīng)的特征字符串逐字進行確認(rèn),并保存在結(jié)果緩存中,最后將結(jié)果緩存的數(shù)據(jù)拷貝到CPU主存中的結(jié)果緩存中。
[0018]此外,優(yōu)選的方案是,在采用GPU多線程任務(wù)并行執(zhí)行方式對預(yù)處理后的待匹配數(shù)據(jù)與特征字符串前綴和特征字符串后綴分別進行匹配的過程中,
[0019]根據(jù)每個GPU線程的標(biāo)識確定預(yù)處理后的待匹配數(shù)據(jù)的起始偏移,根據(jù)第一特征字符串前綴的長度和第二特征字符串前綴的長度確定GPU線程的匹配窗口 ;
[0020]從距離預(yù)處理后的待匹配數(shù)據(jù)的起始偏移的第一特征字符串前綴長度的位置上,獲取一個算法字符,根據(jù)算法字符在所述紋理存儲器中查到快速過濾子表的相應(yīng)比特位,根據(jù)所述相應(yīng)比特位判斷GPU線程是否繼續(xù)執(zhí)行;如果相應(yīng)比特位為0,結(jié)束GPU線程執(zhí)行,如果相應(yīng)比特位為1,則GPU線程繼續(xù)執(zhí)行;
[0021]如果相應(yīng)比特位為I時,根據(jù)算法字符在紋理存儲器中查到所述位向量掩碼表獲取一個位向量掩碼值,將位向量掩碼值設(shè)為初始狀態(tài)向量,以算法字符的位置作為起點,在GI^U線程的匹配窗口內(nèi)正向依次獲取算法字符,以位并行方式進行向量更新,在向量更新過程中,預(yù)處理后的待匹配數(shù)據(jù)與特征字符串后綴進行匹配;[0022]根據(jù)特征字符串后綴的匹配結(jié)果,將在以位并行方式進行向量更新中獲取的最后的狀態(tài)向量作為初始向量,以距離預(yù)處理后的待匹配數(shù)據(jù)的起始偏移的第二特征字符串前綴長度的位置作為起點,在GPU線程的匹配窗口內(nèi)反向依次獲取算法字符,以位并行方式進行反向向量更新;在反向向量更新中,預(yù)處理后的待匹配數(shù)據(jù)與特征字符串前綴進行匹配。
[0023]此外,本發(fā)明還提供一種基于GPU計算的字符串匹配系統(tǒng),包括CPU預(yù)處理單元、GPU匹配單元和確認(rèn)存儲單元;其中,
[0024]CPU預(yù)處理單元包括:特征字符串預(yù)處理單元、緩存分配單元和待匹配數(shù)據(jù)預(yù)處理單元;
[0025]特征字符串預(yù)處理單元,用于對特征字符串進行預(yù)處理;首先構(gòu)建位向量掩碼表,并根據(jù)位向量掩碼表生成快速過濾子表;然后將位向量掩碼表和快速過濾子表拷貝到GPU全局存儲器;
[0026]緩存分配單元,用于分別在CPU主存和所述GPU全局存儲器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存;
[0027]待匹配數(shù)據(jù)預(yù)處理單元,用于對待匹配數(shù)據(jù)進行預(yù)處理,并將預(yù)處理后的待匹配數(shù)據(jù)從CPU主存中的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲器中的待匹配數(shù)據(jù)緩存中保存;
[0028]GPU匹配單元,用于根據(jù)對特征字符串進行預(yù)處理所構(gòu)建的位相量掩碼表以及生成的快速過濾子表,采用GPU多線程任務(wù)并行執(zhí)行方式對每個GPU線程中的預(yù)處理后的待匹配數(shù)據(jù)分別與預(yù)處理后的特征字符串前綴和特征字符串后綴進行匹配;
[0029]確認(rèn)存儲單元,用于將匹配成功的預(yù)處理后的待匹配數(shù)據(jù)與相應(yīng)的特征字符串逐字進行確認(rèn),并保存在結(jié)果緩存中,最后將結(jié)果的數(shù)據(jù)緩存拷貝到CPU主存中的結(jié)果緩存中。
[0030]從上面的技術(shù)方案可知,本發(fā)明的基于GPU計算的字符串匹配方法及系統(tǒng),能夠取得以下有益效果:
[0031]I)采用多線程GPU任務(wù)并行方式執(zhí)行,相鄰的線程匹配位置相近的數(shù)據(jù),能夠增大線程讀取待匹配數(shù)據(jù)緩存時的Cache利用率;同時利用相鄰線程的匹配窗口有部分?jǐn)?shù)據(jù)重疊,無須考慮空字符串前綴匹配,能夠減少每個線程內(nèi)部的分支及流程,進而能夠提高匹配效率;
[0032]2)利用子串匹配算法的特點,每次都以最短特征串所包含的算法字符數(shù)為間隔啟動一個線程,即相鄰的兩個匹配窗口的起始偏移的間隔是一個最短特征串中所包含的算法字符數(shù),能夠減少整個匹配過程啟動的線程總數(shù);
[0033]3)在GPU上采用了基于過濾的位并行算法,并進行優(yōu)化,能夠減少狀態(tài)表的空間占用,能夠利于集中訪存,能夠提高查表過程中的cache命中率。
[0034]為了實現(xiàn)上述以及相關(guān)目的,本發(fā)明的一個或多個方面包括后面將詳細(xì)說明并在權(quán)利要求中特別指出的特征。下面的說明以及附圖詳細(xì)說明了本發(fā)明的某些示例性方面。然而,這些方面指示的僅僅是可使用本發(fā)明的原理的各種方式中的一些方式。此外,本發(fā)明旨在包括所有這些方面以及它們的等同物?!緦@綀D】

【附圖說明】
[0035]通過參考以下結(jié)合附圖的說明及權(quán)利要求書的內(nèi)容,并且隨著對本發(fā)明的更全面理解,本發(fā)明的其它目的及結(jié)果將更加明白及易于理解。在附圖中:
[0036]圖1為現(xiàn)有的基于GPU的字符串匹配方法流程圖;
[0037]圖2為根據(jù)本發(fā)明實施例的基于GPU計算的字符串匹配方法流程圖;
[0038]圖3為根據(jù)本發(fā)明實施例的每個GPU線程對預(yù)處理后的待匹配數(shù)據(jù)與特征字符串進行匹配方法流程圖;
[0039]圖4為根據(jù)本發(fā)明實施例的向量更新方法流程圖;
[0040]圖5為根據(jù)本發(fā)明實施例的反向向量更新方法流程圖;
[0041]圖6為根據(jù)本發(fā)明實施例的基于GPU計算的字符串匹配系統(tǒng)邏輯結(jié)構(gòu)圖。
[0042]在所有附圖中相同的標(biāo)號指示相似或相應(yīng)的特征或功能。
【具體實施方式】
[0043]在下面的描述中,出于說明的目的,為了提供對一個或多個實施例的全面理解,闡述了許多具體細(xì)節(jié)。然而,很明顯,也可以在沒有這些具體細(xì)節(jié)的情況下實現(xiàn)這些實施例。
[0044]基于前述兩種方法都各自存在匹配效率不高的問題,本發(fā)明的技術(shù)方案采用相鄰線程來匹配位置相近的數(shù)據(jù),增加Cache的命中,又通過一定間距的窗口劃分,減少啟動的線程總數(shù);同時利用相鄰線程的匹配窗口有部分?jǐn)?shù)據(jù)重疊,無須考慮空字符串前綴匹配,能夠減少每個線程內(nèi)部的分支及流程,總體上能夠提高GPU的匹配效率。
[0045]本發(fā)明基于GPU計算的字符串匹配方法分為兩個階段:CPU預(yù)處理階段和GPU匹配階段。CPU處理階段負(fù)責(zé)前期準(zhǔn)備工作,緩沖來自網(wǎng)卡的數(shù)據(jù)報文(待匹配數(shù)據(jù)),對數(shù)據(jù)報文進行預(yù)處理包括:剝離IP頭和提取數(shù)據(jù)部分,待提取數(shù)據(jù)部分總大小達到設(shè)定要求后復(fù)制到GPU全局存儲器中;再對特征字符串匹配算法進行預(yù)處理,首先根據(jù)模式串生成字符串匹配算法的狀態(tài)轉(zhuǎn)移表,并也復(fù)制到GPU全局存儲器中;在CPU主存中,預(yù)先分配用于存儲GPU匹配結(jié)果的內(nèi)存,長度為數(shù)據(jù)報文的字節(jié)長度,寬度為I字節(jié),待GPU完成匹配后將GPU匹配結(jié)果復(fù)制到該塊內(nèi)存中。
[0046]GPU匹配階段,主要執(zhí)行基于GPU的特征字符串匹配算法,運行在GPU上的程序稱為kernel函數(shù),kernel函數(shù)以線程網(wǎng)格(Grid)的形式組成,每個線程網(wǎng)格由若干個線程塊(block)組成,而每個block又由若干個線程(thread)組成,因此kernel函數(shù)在GPU都是以多線程并發(fā)方式執(zhí)行的,每個線程針對待匹配數(shù)據(jù)中的不同位置單獨執(zhí)行字符串匹配算法,每個線程都有自己獨立的全局線程標(biāo)識id。
[0047]需要說明的是,在本發(fā)明中提到的第一特征字符串皆為最短特征字符串,第二特征字符串皆為最長特征字符串。
[0048]以下將結(jié)合附圖對本發(fā)明的具體實施例進行詳細(xì)描述。
[0049]圖2示出了根據(jù)本發(fā)明實施例的基于GPU計算的字符串匹配方法流程。如圖2所示,本發(fā)明提供的基于GPU計算的字符串匹配方法,包括CPU預(yù)處理階段和GPU匹配階段。
[0050]在CPU預(yù)處理階段的過程中,S210:對特征字符串進行預(yù)處理;其中,首先構(gòu)建位向量掩碼表,并根據(jù)位向量掩碼表生成快速過濾子表;將位向量掩碼表和快速過濾子表拷貝到GPU全局存儲器。[0051]S220:分別在CPU主存和GPU全局存儲器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存。
[0052]S230:對待匹配數(shù)據(jù)進行預(yù)處理,并將預(yù)處理后的待匹配數(shù)據(jù)從CPU主存中的待匹配數(shù)據(jù)緩存中復(fù)制到GPU全局存儲器中的帶匹配數(shù)據(jù)緩存中保存。
[0053]在GPU匹配階段的過程中,S240:根據(jù)對特征字符串進行預(yù)處理所構(gòu)建的位相量掩碼表以及生成的快速過濾子表,采用GPU多線程任務(wù)并行執(zhí)行方式對每個GPU線程中的預(yù)處理后的待匹配數(shù)據(jù)分別與預(yù)處理后的特征字符串前綴和特征字符串后綴進行匹配。
[0054]S250:將匹配成功的預(yù)處理后的待匹配數(shù)據(jù)與相應(yīng)的特征字符串逐字進行確認(rèn),并保存在結(jié)果緩存中,最后將結(jié)果緩存的數(shù)據(jù)拷貝到CPU主存中的結(jié)果緩存中。
[0055]上述步驟S210至步驟S230為CPU預(yù)處理階段的過程,步驟S240至步驟S250為GPU匹配階段的過程。
[0056]具體地,作為示例,在上述步驟S210對特征字符串進行預(yù)處理的過程中,以位并行過濾算法預(yù)處理方式構(gòu)建位向量掩碼表,具體為,首先確定并分配位向量掩碼表的空間,然后依次獲取每個特征字符串中的算法字符,依據(jù)該算法字符值,找到位向量掩碼表中的相對應(yīng)行,依據(jù)當(dāng)前算法字符在特征串中的位置,找到位向量掩碼表中的相應(yīng)列,然后將該位置為I。
[0057]其中,根據(jù)Q-grams技術(shù)原理將特征字符串中特定數(shù)量的一組字符,通過散列函數(shù)轉(zhuǎn)換成算法字符,在本發(fā)明中提到的算法字符都依此方式獲得。
[0058]q-gram技術(shù)廣泛應(yīng)用與信息檢索領(lǐng)域,尤其在字符串匹配算法當(dāng)中應(yīng)用能夠起到較好的效果,它的主要目的是擴大字母表規(guī)模。q-gram技術(shù)將q個字符轉(zhuǎn)化為一個字符來處理,將q個字符轉(zhuǎn)化為一個q-gram字符有兩種方式,包括重疊q-gram和連續(xù)q-gram。當(dāng)使用重疊q-gram時,依次從原串的每一個字符開始取q個字符進行轉(zhuǎn)化;使用連續(xù)q-gram時,依次從原串的每q個字符開始去q個字符進行轉(zhuǎn)化。例如:轉(zhuǎn)化字符串“pony”,使用重疊q-gram轉(zhuǎn)化為“po-on-ny”,而使用連續(xù)q-gram轉(zhuǎn)化為“ρο-ny”。在本發(fā)明中使用q-gram技術(shù)時,使用的都是重疊q-gram,每個轉(zhuǎn)化后的q-gram字符稱其為算法字符。
[0059]本發(fā)明采用的特征字符串匹配算法是以位并行技術(shù)為基礎(chǔ)的一種過濾類算法。位并行技術(shù)利用計算機機器字位運算的內(nèi)在并行性,可將多個值裝在一個機器字內(nèi),通過一次計算既可以更新所有值。采用位并行技術(shù)的典型算法包括:SHIFT-AND/OR、BNDM等。通常位并行類算法的預(yù)處理過程都是相似的,需要將模式串集合與文本串的匹配狀態(tài)用位向量存儲。
[0060]將位向量掩碼表每行壓縮成一個比特位形成快速過濾子表,如果位向量掩碼表整行為0,則快速過濾子表相應(yīng)位為0,否則快速過濾子表相應(yīng)位置1,多數(shù)GPU線程只需要訪問快速過濾子表,因為此快速過濾子表具有更好的空間局部性,查找效率更高,可以吸收大多數(shù)線程的訪存操作,利用GPU的cache機制提升整體性能。
[0061]在上述步驟S230中,將來自網(wǎng)卡的數(shù)據(jù)報文(待匹配數(shù)據(jù))進行預(yù)處理包括:剝離IP頭和提取數(shù)據(jù)部分,待提取數(shù)據(jù)部分總大小達到設(shè)定要求后復(fù)制到GPU全局存儲器中。
[0062]在所述CPU預(yù)處理階段的過程中,在步驟S220中,將拷貝有位向量掩碼表和快速過濾子表的GPU全局存儲器與紋理存儲器綁定;在步驟S230中,將保存有待匹配數(shù)據(jù)的GPU全局存儲器與紋理存儲器綁定。
[0063]需要說明的是,GPU的紋理存儲器可以通過緩存加快訪存時的速度,紋理存儲器是通過圖形渲染發(fā)展而來的且具有緩存功能,紋理存儲器是只讀存儲器。
[0064]在上述步驟S240中,在GPU匹配過程中,采用GPU多線程任務(wù)并行執(zhí)行方式對預(yù)處理后的待匹配數(shù)據(jù)分別與特征字符串前綴和特征字符串后綴進行匹配,其中,每個GPU線程對預(yù)處理后的待匹配數(shù)據(jù)分別與特征字符串前綴和特征字符串后綴進行匹配,圖3示出了根據(jù)本發(fā)明實施例的每個GPU線程對預(yù)處理后的待匹配數(shù)據(jù)與特征字符串進行匹配方法流程。
[0065]如圖3所示,每個GPU線程對預(yù)處理后的待匹配數(shù)據(jù)與特征字符串進行匹配的具體流程如下:
[0066]S241:根據(jù)GPU線程的標(biāo)識確定預(yù)處理后的待匹配數(shù)據(jù)的起始偏移,根據(jù)最短特征字符串前綴的長度和最長特征字符串前綴的長度確定GPU線程的匹配窗口。
[0067]S242:從距離預(yù)處理后的待匹配數(shù)據(jù)的起始偏移的最短特征字符串前綴長度的位置上,獲取一個算法字符,根據(jù)算法字符在紋理存儲器中查到快速過濾子表的相應(yīng)比特位,根據(jù)相應(yīng)比特位判斷當(dāng)前GPU線程是否繼續(xù)執(zhí)行;如果相應(yīng)比特位為0,則當(dāng)前窗口內(nèi)不可能產(chǎn)生命中,結(jié)束當(dāng)前GPU線程執(zhí)行;如果相應(yīng)比特位為1,則當(dāng)前GPU線程繼續(xù)執(zhí)行。
[0068]S243:如果相應(yīng)比特位為I時,根據(jù)S242中獲取的算法字符,在紋理存儲器中查到位向量掩碼表,獲取一個位向量掩碼值,將位向量掩碼值設(shè)為初始狀態(tài)向量,以算法字符的位置作為起點,在GPU線程的匹配窗口內(nèi)正向依次獲取算法字符,以位并行方式進行向量更新,在向量更新過程中,預(yù)處理后的待匹配數(shù)據(jù)與所述特征字符串后綴進行匹配。
[0069]S244:根據(jù)特征字符串后綴的匹配結(jié)果,將在以位并行方式進行向量更新中獲取的最后的狀態(tài)向量作為初始向量,以距離預(yù)處理后的待匹配數(shù)據(jù)的起始偏移的最短特征字符串前綴長度的位置作為起點,在GPU線程的匹配窗口內(nèi)反向依次獲取算法字符,以位并行方式進行反向向量更新;在反向向量更新中,預(yù)處理后的待匹配數(shù)據(jù)與特征字符串前綴進行匹配。
[0070]在上述步驟S241中,每個GPU線程僅在一個匹配窗口內(nèi)進行特征字符串匹配。匹配窗口長度等于一個最短特征字符串長度加上一個最長特征字符串長度。如果在特征字符串預(yù)處理過程中,通過截取特征子串來生成位向量掩碼表,那么最短特征字符串長度則表示最短子串長度,最長特征字符串長度表示最長子串的長度。相鄰兩個線程處理報文(預(yù)處理后的待匹配數(shù)據(jù))的起始位置的距離僅為一個最短特征字符串長度,因此相鄰線程匹配數(shù)據(jù)的位置相近。
[0071]也就是說,在本發(fā)明中采用任務(wù)并行執(zhí)行方式,相鄰線程匹配相近的數(shù)據(jù),與數(shù)據(jù)并行方式相比,充分利用了 GPU的Cache機制,減少單位緩存的匹配延時,提高匹配效率。同時,將一塊待匹配數(shù)據(jù)緩存劃分成若干有重疊的匹配窗口,利用子串匹配算法的特點,每次都以最短特征字符串所包含的算法字符數(shù)為間隔啟動一個線程,也就是說,相鄰的兩個匹配窗口的起始偏移的間隔是一個最短特征串中所包含的算法字符數(shù),相比每字節(jié)的任務(wù)并行方式,減少了整個匹配過程啟動的線程總數(shù)。
[0072]在GPU特性中,當(dāng)多個線程訪問相近的GPU全局存儲器時,相鄰數(shù)據(jù)是以每128字節(jié)為單位進入LlCache中,因此相鄰的線程訪問位置相近的數(shù)據(jù)會增加Cache的命中,進而提高數(shù)據(jù)訪存的效率。
[0073]在步驟S242中:根據(jù)算法字符在紋理存儲器中查到快速過濾子表的相應(yīng)比特位,如果相應(yīng)比特位值為O,則說明匹配窗口最短特征串長度內(nèi)不會再命中特征字符串,可立即結(jié)束當(dāng)前線程,如果相應(yīng)比特位值非O,則此位置有可能會匹配特征字符串,需要繼續(xù)執(zhí)行。也就說,如果當(dāng)前線程有可能發(fā)生特征字符串匹配,則相應(yīng)的算法字符在快速過濾子表中相應(yīng)的位置一定為I。
[0074]也就是說,步驟S242是為了找出不可能產(chǎn)生命中的GPU線程,讓它提前結(jié)束,一般來說,多數(shù)GPU線程都會提前結(jié)束;其中,快速過濾子表的作用是讓這些GPU線程的內(nèi)存訪問盡量集中,這樣快速過濾子表占用的空間更小。
[0075]在上述步驟S243中,根據(jù)讀入的算法字符在紋理存儲器中查找位向量掩碼表,獲取一個向量掩碼值,該向量掩碼值中所有的置I位都表示一條有可能最終發(fā)生匹配的線索,然后以該向量掩碼值設(shè)置初始狀態(tài)向量,以當(dāng)前讀入算法字符的位置作為起點,在當(dāng)前線程的匹配窗口內(nèi)正向逐個獲取算法字符,以位并行的方式進行向量更新,在進行向量更新的過程中確認(rèn)哪些線索最終會發(fā)生特征字符串后綴匹配。
[0076]在后綴匹配的位向量更新過程中,由于該過程中無須考慮出現(xiàn)新的特征字符串前綴命中,因此與常規(guī)的位向量算法相比,本發(fā)明中在位向量更新過程中無須考慮空字符串命中,空特征字符串是所有特征字符串的前綴。無須考慮空字符串命中,使每個線程的流程更短,出現(xiàn)分支的可能性更低,使整體匹配效率更穩(wěn)定。
[0077]在向量更新過程中,會發(fā)生后綴命中,只需要記錄命中位置,在前向匹配的過程中進行命中確認(rèn)。圖4示出了根據(jù)本發(fā)明實施例的向量更新方法流程。
[0078]如圖4所示,其向量更新方法具體流程如下:
[0079]S410:讀入下一個算法字符,并根據(jù)該算法字符查找位向量掩碼表,獲取向量掩碼值。
[0080]S420:將當(dāng)前狀態(tài)向量值左移一位,通過和上述向量掩碼按位與運算,得到新的狀態(tài)向量。
[0081]S430:如果新的狀態(tài)向量的最高有效位為1,則已經(jīng)匹配了特征字符串的后綴。該最高有效位是通過初始狀態(tài)向量中的某一個置I位,通過不斷左移得到,記錄并最終保留該初始狀態(tài)位向量的相應(yīng)置I位,以用于前向匹配命中確認(rèn)過程。
[0082]S440:將新的狀態(tài)位向量設(shè)置為當(dāng)前狀態(tài)位向量,并返回步驟S310。直至當(dāng)前線程匹配窗口內(nèi)的數(shù)據(jù)都已獲取完畢。在初始狀態(tài)向量中保留所有發(fā)生過后綴命中的活動位,其余全部清O。即在第一次獲取的位向量中,將沒有發(fā)生過后綴命中的位清除。
[0083]在步驟S243中未發(fā)生過后綴命中則立即結(jié)束當(dāng)前線程。如果發(fā)生過后綴命中,則將執(zhí)行步驟S2244。在步驟S244中,將在步驟S243中最終獲取的狀態(tài)向量作為初始向量,以距離起始偏移最短前綴長度的位置作為起點,在當(dāng)前線程的匹配窗口內(nèi)反向逐個獲取字符,以位并行的方式進行反向向量更新,在反向向量更新的過程中,繼續(xù)跟蹤剩余的匹配線索,確認(rèn)這些特征字符串的前綴匹配。圖5示出了根據(jù)本發(fā)明實施例的反向向量更新方法流程。
[0084]如圖5所示,其反向向量更新方法具體流程如下:
[0085]S510:讀入上一個算法字符,并根據(jù)該算法字符查找位向量掩碼表,獲取向量掩碼值;
[0086]S520:將當(dāng)前狀態(tài)向量值右移一位,通過和上述向量掩碼按位與運算,得到新的狀態(tài)向量;
[0087]S530:如果新的狀態(tài)向量的最低有效位為1,則記錄一次匹配的可能,當(dāng)前讀入算法字符位置是匹配字符串的起始位置。
[0088]S540:將新的狀態(tài)位向量設(shè)置為當(dāng)前狀態(tài)位向量,并返回步驟S410。直至當(dāng)前線程匹配窗口內(nèi)的數(shù)據(jù)都已獲取完畢。
[0089]在本發(fā)明的實施例中,GPU單線程將以狀態(tài)向量更新為主線索的線性流程,拆分成若干獨立的并行流程,利于并發(fā)執(zhí)行。
[0090]在GPU匹配階段中,采用了基于過濾的位并行算法,并進行優(yōu)化,使其更適應(yīng)GPU并行計算的場景,同時又能減少狀態(tài)表的空間占用,有利于集中訪存,提高查快速過濾子表過程中的Cache命中率。相比現(xiàn)有的GPU模式匹配技術(shù)方案,本發(fā)明提供的匹配方案匹配效率更聞。
[0091]實驗采用NVIDIA GTX680,待匹配數(shù)據(jù)報文長度2MB。表1示出了實際測得的GPU對數(shù)據(jù)報文的匹配速度,如下表所示:
[0092]
【權(quán)利要求】
1.一種基于GPU計算的字符串匹配方法,包括CPU預(yù)處理階段和GPU匹配階段;其中, 在所述CPU預(yù)處理階段的過程中: 對所述特征字符串進行預(yù)處理;其中,首先構(gòu)建位向量掩碼表,并根據(jù)所述位向量掩碼表生成快速過濾子表;然后將所述位向量掩碼表和所述快速過濾子表拷貝到GPU全局存儲器; 分別在CPU主存和所述GPU全局存儲器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存; 對待匹配數(shù)據(jù)進行預(yù)處理,并將預(yù)處理后的待匹配數(shù)據(jù)從所述CPU主存中的所述待匹配數(shù)據(jù)緩存中復(fù)制到所述GPU全局存儲器中的所述待匹配數(shù)據(jù)緩存中保存; 在所述GPU匹配階段的過程中, 根據(jù)對所述特征字符串進行預(yù)處理所構(gòu)建的位相量掩碼表以及生成的快速過濾子表,采用GPU多線程任務(wù)并行執(zhí)行方式對每個GPU線程中的預(yù)處理后的待匹配數(shù)據(jù)分別與預(yù)處理后的所述特征字符串前綴和所述特征字符串后綴進行匹配; 將匹配成功的待匹配數(shù)據(jù)與相應(yīng)的所述特征字符串逐字進行確認(rèn),并保存在所述結(jié)果緩存中,最后將結(jié)果緩存的數(shù)據(jù)拷貝到所述CPU主存中的所述結(jié)果緩存中。
2.如權(quán)利要求1所述的基于GPU計算的字符串匹配方法,其中, 在所述CPU預(yù)處理階段的過程中, 將拷貝有所述位向量掩碼表和所述快速過濾子表的所述GPU全局存儲器與紋理存儲器綁定; 將保存有所述待匹配數(shù)據(jù)的`GPU全局存儲器與所述紋理存儲器綁定。
3.如權(quán)利要求2所述的基于GPU計算的字符串匹配方法,其中, 在通過GPU多線程任務(wù)并行執(zhí)行方式對預(yù)處理后的待匹配數(shù)據(jù)與所述特征字符串前綴和所述特征字符串后綴分別進行匹配的過程中, 根據(jù)所述每個GPU線程的標(biāo)識確定預(yù)處理后的待匹配數(shù)據(jù)的起始偏移,根據(jù)第一特征字符串前綴的長度和第二特征字符串前綴的長度確定所述GPU線程的匹配窗口 ; 從距離所述預(yù)處理后的待匹配數(shù)據(jù)的起始偏移的第一特征字符串前綴長度的位置上,獲取一個算法字符,根據(jù)所述算法字符在所述紋理存儲器中查到所述快速過濾子表的相應(yīng)比特位,根據(jù)所述相應(yīng)比特位判斷所述GPU線程是否繼續(xù)執(zhí)行;如果所述相應(yīng)比特位為O,結(jié)束所述GPU線程執(zhí)行,如果所述相應(yīng)比特位為1,則所述GPU線程繼續(xù)執(zhí)行; 如果所述相應(yīng)比特位為I時,根據(jù)所述算法字符在所述紋理存儲器中查到所述位向量掩碼表獲取一個位向量掩碼值,將所述位向量掩碼值設(shè)為初始狀態(tài)向量,以所述算法字符的位置作為起點,在所述GPU線程的匹配窗口內(nèi)正向依次獲取所述算法字符,以位并行方式進行向量更新,在所述向量更新過程中,所述預(yù)處理后的待匹配數(shù)據(jù)與所述特征字符串后綴進行匹配; 根據(jù)所述特征字符串后綴的匹配結(jié)果,將在以位并行方式進行向量更新中獲取的最后的狀態(tài)向量作為初始向量,以距離所述預(yù)處理后的待匹配數(shù)據(jù)的起始偏移的第二特征字符串前綴長度的位置作為起點,在所述GPU線程的匹配窗口內(nèi)反向依次獲取算法字符,以位并行方式進行反向向量更新;在所述反向向量更新中,所述預(yù)處理后的待匹配數(shù)據(jù)與所述特征字符串前綴進行匹配。
4.如權(quán)利要求3所述的基于GPU計算的字符串匹配方法,其中,在所述每個GPU線程在一個匹配窗口內(nèi)進行字符串匹配的過程中, 所述匹配窗口的長度等于一個第一特征字符串長度跟一個第二特征字符串長度的和;相鄰兩個所述GPU線程處理預(yù)處理后的待匹配數(shù)據(jù)的起始位置的距離為一個所述第一特征字符串長度。
5.一種基于GPU計算的字符串匹配系統(tǒng),包括CPU預(yù)處理單元、GPU匹配單元和確認(rèn)存儲單元;其中, 所述CPU預(yù)處理單元包括:特征字符串預(yù)處理單元、緩存分配單元和待匹配數(shù)據(jù)預(yù)處理單元; 所述特征字符串預(yù)處理單元,用于對特征字符串進行預(yù)處理;首先構(gòu)建位向量掩碼表,并根據(jù)所述位向量掩碼表生成快速過濾子表;然后將所述位向量掩碼表和所述快速過濾子表拷貝到GPU全局存儲器; 所述緩存分配單元,用于分別在CPU主存和所述GPU全局存儲器上分配待匹配數(shù)據(jù)緩存和結(jié)果緩存; 所述待匹配數(shù)據(jù)預(yù)處理單元,用于對待匹配數(shù)據(jù)進行預(yù)處理,并將預(yù)處理后的待匹配數(shù)據(jù)從所述CPU主存中的所述待匹配數(shù)據(jù)緩存中復(fù)制到所述GPU全局存儲器中的所述待匹配數(shù)據(jù)緩存中保存; 所述GPU匹配單元,用于根據(jù)對所述特征字符串進行預(yù)處理所構(gòu)建的位相量掩碼表以及生成的快速過濾子表,采用GPU多線程任務(wù)并行執(zhí)行方式對每個GPU線程中的預(yù)處理后的待匹配數(shù)據(jù)分別與預(yù)處理后的所述特征字符串前綴和所述特征字符串后綴進行匹配; 所述確認(rèn)存儲單元,用于將匹配成功的預(yù)處理后的待匹配數(shù)據(jù)與相應(yīng)的所述特征字符串逐字進行確認(rèn),并保存在所述結(jié)果緩存中,最后將結(jié)果緩存的數(shù)據(jù)拷貝到所述CPU主存中的所述結(jié)果緩存中。
6.如權(quán)利要求5所述的基于GPU計算的字符串匹配系統(tǒng),其中, 在所述緩存分配單元中,將拷貝有所述位向量掩碼表和所述快速過濾子表的所述GPU全局存儲器與紋理存儲器綁定; 在所述待匹配數(shù)據(jù)預(yù)處理單元中,將保存有所述待匹配數(shù)據(jù)的GPU全局存儲器與所述紋理存儲器綁定。
7.如權(quán)利要求6所述的基于GPU計算的字符串匹配系統(tǒng),其中, 所述GPU匹配單元包括: 匹配窗口確定單元,用于根據(jù)所述每個GPU線程的標(biāo)識確定預(yù)處理后的待匹配數(shù)據(jù)的起始偏移,根據(jù)第一特征字符串前綴的長度和第二特征字符串前綴的長度確定所述GPU線程的匹配窗口; 特征字符串前綴匹配單元,用于從距離所述預(yù)處理后的待匹配數(shù)據(jù)的起始偏移的第一特征字符串前綴長度的位置上,獲取一個算法字符,根據(jù)所述算法字符在所述紋理存儲器中查到所述快速過濾子表的相應(yīng)比特位,根據(jù)所述相應(yīng)比特位判斷所述GPU線程是否繼續(xù)執(zhí)行;如果所述相應(yīng)比特位為O,結(jié)束所述GPU線程執(zhí)行,如果所述相應(yīng)比特位為1,則所述GPU線程繼續(xù)執(zhí)行; 特征字符串后綴匹配單元,用于如果所述相應(yīng)比特位為I時,根據(jù)所述算法字符在所述紋理存儲器中查到所述位向量掩碼表獲取一個位向量掩碼值,將所述位向量掩碼值設(shè)為初始狀態(tài)向量,以所述算法字符的位置作為起點,在所述GPU線程的匹配窗口內(nèi)正向依次獲取所述算法字符,以位并行方式進行向量更新,在所述向量更新過程中,所述預(yù)處理后的待匹配數(shù)據(jù)與所述特征字符串后綴進行匹配; 反向向量特征字符串前綴匹配單元,用于根據(jù)所述特征字符串后綴的匹配結(jié)果,將在以位并行方式進行向量更新中獲取的最后的狀態(tài)向量作為初始向量,以距離所述預(yù)處理后的待匹配數(shù)據(jù)的起始偏移的第二特征字符串前綴長度的位置作為起點,在所述GPU線程的匹配窗口內(nèi)反向依次獲取算法字符,以位并行方式進行反向向量更新;在所述反向向量更新中,所述預(yù)處理后的待匹配數(shù)據(jù)與所述特征字符串前綴進行匹配。
8.如權(quán)利要求7所述的基于GPU計算的字符串匹配方法系統(tǒng),其中, 在匹配窗口確定單元中,所述每個GPU線程在一個匹配窗口內(nèi)進行特征字符串匹配,所述匹配窗口的長度等于一個第一特征字符串長度跟一個第二特征字符串長度的和;相鄰兩個所述GPU線程處理預(yù)處理后的待匹配數(shù)據(jù)的起始位置的距離為一個所述第一特征字符串長度。
【文檔編號】G06F9/38GK103559018SQ201310509249
【公開日】2014年2月5日 申請日期:2013年10月23日 優(yōu)先權(quán)日:2013年10月23日
【發(fā)明者】侯智瀚, 楊梟 申請人:東軟集團股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1