一種高性能單機(jī)多核并行模型檢測(cè)方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種高性能單機(jī)多核并行模型檢測(cè)方法。本方法為:1)創(chuàng)建待檢測(cè)系統(tǒng)模型與待測(cè)屬性的組合狀態(tài)空間中的初始節(jié)點(diǎn);2)狀態(tài)空間生成器將該初始節(jié)點(diǎn)映射成Ligra計(jì)算圖中的一個(gè)頂點(diǎn),然后逐步生成該初始節(jié)點(diǎn)的后繼節(jié)點(diǎn),初始節(jié)點(diǎn)及已生成的后繼節(jié)點(diǎn)構(gòu)成一狀態(tài)空間;其中,該初始節(jié)點(diǎn)為第1級(jí)節(jié)點(diǎn),第i級(jí)節(jié)點(diǎn)包含N層第i+1級(jí)后繼節(jié)點(diǎn),每一層后繼節(jié)點(diǎn)包含多個(gè)節(jié)點(diǎn),每次屬于同一級(jí)節(jié)點(diǎn)的后繼節(jié)點(diǎn)全部生成之后,將當(dāng)前狀態(tài)空間映射成一Ligra計(jì)算圖,然后調(diào)用可接收環(huán)檢測(cè)器檢測(cè)該Ligra計(jì)算圖中是否有可接收環(huán),如果有則停止模型檢測(cè)。該方法具有性能高、可擴(kuò)展性好等特點(diǎn)。
【專(zhuān)利說(shuō)明】
-種高性能單機(jī)多核并行模型檢測(cè)方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明屬于軟件工程、形式化方法與并行計(jì)算領(lǐng)域,具體設(shè)及一種在單機(jī)多核環(huán) 境下高性能并行線性時(shí)序邏輯模型檢測(cè)方法。
【背景技術(shù)】
[0002] 模型檢測(cè)(Model Checking)是一種很重要的自動(dòng)驗(yàn)證技術(shù)。它最早由Clarke和 Emerson在1981年分別提出的,主要通過(guò)顯式狀態(tài)捜索或隱式不動(dòng)點(diǎn)計(jì)算來(lái)驗(yàn)證有窮狀態(tài) 并發(fā)系統(tǒng)的模態(tài)/命題性質(zhì)。模型檢測(cè)近年來(lái)被用于很多安全關(guān)鍵系統(tǒng)、通信協(xié)議、控制系 統(tǒng)、安全認(rèn)證協(xié)議等方面的分析與驗(yàn)證中。模型檢測(cè)器用來(lái)對(duì)硬件、軟件系統(tǒng)的安全性與活 性進(jìn)行全面檢測(cè),保證系統(tǒng)在任何情況下都滿(mǎn)足設(shè)計(jì)中的安全特性。
[0003] 線性時(shí)序(時(shí)態(tài))邏輯是一種能夠表達(dá)原子命題的時(shí)態(tài)特性的邏輯公式,于1977年 被提出,并廣泛用于有限狀態(tài)系統(tǒng)的行為描述。由于針對(duì)線性時(shí)序邏輯的模型檢測(cè)技術(shù)一 般需要窮舉系統(tǒng)中的所有狀態(tài)(有限狀態(tài)),所W模型檢測(cè)的關(guān)鍵問(wèn)題是解決狀態(tài)空間的組 合爆炸問(wèn)題。通常一個(gè)軟硬件系統(tǒng)由多個(gè)功能模塊所組成,不同模塊有不同的操作行為,他 們W同步或異步的方式運(yùn)行。假設(shè)系統(tǒng)有n個(gè)模塊,每個(gè)模塊有m個(gè)狀態(tài),那么檢測(cè)該系統(tǒng), 就需要對(duì)其mn個(gè)狀態(tài)進(jìn)行檢測(cè)。所W即使一個(gè)很小的系統(tǒng),都可能擁有超出計(jì)算機(jī)能夠處 理的狀態(tài)空間。目前的模型檢測(cè)系統(tǒng)主要受組合爆炸問(wèn)題的制約,只能用于小型或者中型 的系統(tǒng)(狀態(tài)空間一般小于1。
[0004] 目前國(guó)內(nèi)外所構(gòu)建的針對(duì)線性時(shí)序邏輯的模型檢測(cè)系統(tǒng)可W分為如下=類(lèi):利用 符號(hào)描述與高層抽象等優(yōu)化方法在單CPU機(jī)上構(gòu)建的模型檢測(cè)系統(tǒng);利用分布式計(jì)算集群 環(huán)境和分布式內(nèi)存模型檢測(cè)系統(tǒng);利用單機(jī)多核并行處理來(lái)緩解組合爆炸問(wèn)題。第一類(lèi)方 法一般需要提出比較復(fù)雜的高層抽象方法與數(shù)學(xué)推導(dǎo)公式,實(shí)現(xiàn)與應(yīng)用起來(lái)需要很多復(fù)雜 的背景知識(shí),后兩者的共性都是并行處理來(lái)提升算法的速度與可擴(kuò)展性。利用分布式計(jì)算 集群的分布式模型檢測(cè)的算法與工具,能夠充分利用多臺(tái)計(jì)算機(jī)內(nèi)存和計(jì)算資源將大規(guī)模 的模型檢測(cè)問(wèn)題壓縮到幾個(gè)小時(shí)或者是幾天之內(nèi)處理完,但是分布式模型檢測(cè)工具中機(jī)器 之間的通信開(kāi)銷(xiāo)很大,成為分布式模型檢測(cè)工具性能提升的瓶頸。近來(lái)硬件性能越來(lái)越強(qiáng), 單機(jī)內(nèi)存能夠達(dá)到TB級(jí)別,因此基于單機(jī)多核共享內(nèi)存的模型檢測(cè)工具,由于很低的通信 開(kāi)銷(xiāo)而變得更快,性能更高。盡管基于共享內(nèi)存的單機(jī)多核計(jì)算能夠提升計(jì)算效率,但是利 用現(xiàn)存的單機(jī)多核并行線性時(shí)序邏輯模型檢測(cè)器,例如Divine等,需要多線程來(lái)處理整個(gè) 狀態(tài)空間,為了減少線程之間的競(jìng)爭(zhēng),通常需要將整個(gè)狀態(tài)空間切分給各個(gè)線程,運(yùn)樣減少 了競(jìng)爭(zhēng)但引入的切分開(kāi)銷(xiāo)很大,從而導(dǎo)致性能不高。
[0005] Ligra(具體請(qǐng)參閱化Un J,Blelloch G E.Ligra = A Lightweight Graph Processing Framework for Shared Memory.Acm Sigplan Notices ,2013,48(8):135- 146.)是一種基于共享內(nèi)存的輕量級(jí)圖計(jì)算框架,他的特點(diǎn)是利用已封裝好底層計(jì)算細(xì)節(jié) 的高層編程接口實(shí)現(xiàn)對(duì)大規(guī)模圖進(jìn)行高效、高可擴(kuò)展計(jì)算。基于Ligra能夠?qū)崿F(xiàn)按照遍歷過(guò) 程中產(chǎn)生到狀態(tài)子集的稠密稀疏特性來(lái)動(dòng)態(tài)的選擇遍歷方式,也能夠?qū)γ枯啽闅v產(chǎn)生的頂 點(diǎn)子集動(dòng)態(tài)均衡的分配給線程處理,從而使線程的并行度更高。本發(fā)明是利用Ligra計(jì)算框 架設(shè)計(jì)的。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明提出一種高性能單機(jī)多核并行模型檢測(cè)方法,該方法具有性能高、可擴(kuò)展 性好等特點(diǎn)。
[0007] 該方法的輸入為模型和與待檢測(cè)的屬性,W純廣度優(yōu)先捜索的方法檢測(cè)軟件的所 有可達(dá)狀態(tài)是否滿(mǎn)足待檢測(cè)的屬性,方法具體包括:從初始節(jié)點(diǎn)開(kāi)始生成狀態(tài)空間,-把狀 態(tài)空間映射成計(jì)算圖;然后在此計(jì)算圖中利用每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的全局狀態(tài)進(jìn)行可接收環(huán)檢 如果存在可接收環(huán),證明系統(tǒng)違反屬性,否則證明了系統(tǒng)滿(mǎn)足該屬性;在檢測(cè)的過(guò)程中, 根據(jù)計(jì)算圖的稠密稀疏特性來(lái)動(dòng)態(tài)選擇捜索方式,降低,提升系統(tǒng)的從而使同步開(kāi)銷(xiāo)性能。 利用本發(fā)明,無(wú)須關(guān)注底層計(jì)算細(xì)節(jié),即可實(shí)現(xiàn)高性能的模型檢測(cè)器。
[0008] 該方法利用純廣度優(yōu)先捜索的方式對(duì)模型進(jìn)行檢測(cè),主要特征為在檢測(cè)過(guò)程中根 據(jù)每輪產(chǎn)生的狀態(tài)子集的稠密稀疏特性選擇不同的更新操作,從而減小同步開(kāi)銷(xiāo)。本發(fā)明 的輸入為若干個(gè)由待驗(yàn)證系統(tǒng)轉(zhuǎn)換成的標(biāo)識(shí)遷移系統(tǒng)化abeling Transition System, LTS),表示待檢測(cè)系統(tǒng)行為模型(M);-個(gè)由線性時(shí)序邏輯(^Linear Temporal Logic ,LTL) 屬性取非(~)轉(zhuǎn)換成的Buchi自動(dòng)機(jī)。為了驗(yàn)證模型是否滿(mǎn)足該輸入屬性,需要遍歷所有可 達(dá)狀態(tài),并在可達(dá)圖中檢測(cè)是否存在可接收環(huán),如果存在那么模型不滿(mǎn)足屬性,否則滿(mǎn)足。 本發(fā)明首先創(chuàng)建待檢測(cè)系統(tǒng)模型與待測(cè)屬性的組合狀態(tài)空間中的初始節(jié)點(diǎn),把該初始節(jié)點(diǎn) 映射成Ligra計(jì)算圖中的一個(gè)頂點(diǎn)。然后逐步生成該節(jié)點(diǎn)的后繼節(jié)點(diǎn),在生成的過(guò)程中判斷 是否該模型違反待測(cè)屬性。節(jié)點(diǎn)的具體行為由狀態(tài)空間生成器,可接收環(huán)檢測(cè)器所定義。本 發(fā)明的總體框架如圖1所示,首先將待驗(yàn)證系統(tǒng)和待驗(yàn)證屬性經(jīng)過(guò)①和②轉(zhuǎn)換成對(duì)應(yīng)的LTS 和BucM自動(dòng)機(jī),然后由狀態(tài)生成器從初始節(jié)點(diǎn)生成后繼節(jié)點(diǎn),迭代生成狀態(tài)空間(初始節(jié) 點(diǎn)及已生成的后繼節(jié)點(diǎn)構(gòu)成一狀態(tài)空間,該初始節(jié)點(diǎn)為第1級(jí)節(jié)點(diǎn),第i級(jí)節(jié)點(diǎn)包含N層第i+ 1級(jí)后繼節(jié)點(diǎn),每一層后繼節(jié)點(diǎn)包含多個(gè)節(jié)點(diǎn));每次屬于同一級(jí)節(jié)點(diǎn)的后繼節(jié)點(diǎn)全部生成 之后,將當(dāng)前狀態(tài)空間映射成一Ligra計(jì)算圖,繼而調(diào)用可接收環(huán)檢測(cè)器,在已生成的狀態(tài) 空間中檢測(cè)模型是否滿(mǎn)足當(dāng)前待驗(yàn)證屬性,若滿(mǎn)足條件1,證明滿(mǎn)足當(dāng)前待驗(yàn)證屬性,否則 為條件2,則違反當(dāng)前待驗(yàn)證屬性。
[0009] 條件1:當(dāng)節(jié)點(diǎn)全部生成并且沒(méi)有查到可接受環(huán)時(shí),可W證明模型滿(mǎn)足屬性;
[0010] 條件2:查找到可接收環(huán)時(shí),證明模型違反屬性。
[0011] ①:轉(zhuǎn)換成標(biāo)識(shí)遷移系統(tǒng);②:取非后轉(zhuǎn)換成Buchi自動(dòng)機(jī)。
[0012] 本發(fā)明中的單機(jī)多核并行模型檢測(cè)器運(yùn)行方式如下,首先讀入待檢測(cè)系統(tǒng)的狀態(tài) 遷移系統(tǒng)M(LTS)模型與取非后的屬性Buchi自動(dòng)機(jī),創(chuàng)建初始節(jié)點(diǎn)放入共享內(nèi)存中,然后把 整個(gè)計(jì)算步驟分成若干次超步(Superstep)迭代進(jìn)行的,每一個(gè)超步又被分成兩個(gè)子步驟: 狀態(tài)生成、可接收環(huán)檢測(cè),在每次超步計(jì)算完成后,要判斷程序所有的處理步驟是否完成, 如果完成,那么退出系統(tǒng),否則,進(jìn)行下一輪超步。在每個(gè)超步的計(jì)算過(guò)程中,首先調(diào)用狀態(tài) 生成器按廣度優(yōu)先的方式來(lái)按層生成狀態(tài)空間,然后將此狀態(tài)空間(全部層對(duì)應(yīng)的狀態(tài)空 間,狀態(tài)空間是逐步變大的)映射到圖中,最后判斷此圖是否違反屬性,如果不違反那么進(jìn) 行下一個(gè)超步處理,否則直接結(jié)束運(yùn)行。為了實(shí)現(xiàn)模型檢測(cè)的功能,在每個(gè)超步中需生成N (N為用戶(hù)可調(diào)整的一常數(shù))層狀態(tài)空間,對(duì)于每個(gè)節(jié)點(diǎn)都將調(diào)用狀態(tài)空間生成器創(chuàng)建其直 接后繼節(jié)點(diǎn),從而依次生成狀態(tài)空間(廣度優(yōu)先捜索方式),并將全部的已生成的狀態(tài)空間 映射成Ligra計(jì)算圖,然后在此圖中調(diào)用可接收環(huán)檢測(cè)器來(lái)檢測(cè)是否有可接收環(huán),一旦檢測(cè) 出可接收環(huán),則停止?fàn)顟B(tài)空間生成器與可接收環(huán)檢測(cè)器結(jié)束系統(tǒng),否則系統(tǒng)將會(huì)在狀態(tài)空 間生成器與可接收環(huán)檢測(cè)器執(zhí)行完成后結(jié)束(即遍歷所有可達(dá)狀態(tài))。本系統(tǒng)的計(jì)算框架如 圖2所示。
[0013] Ligra是單機(jī)多核環(huán)境下輕量級(jí)圖數(shù)據(jù)處理框架,在處理圖的廣度優(yōu)先遍歷問(wèn)題 時(shí)能夠根據(jù)遍歷過(guò)程中產(chǎn)生的頂點(diǎn)子集的稠密性來(lái)動(dòng)態(tài)的調(diào)整遍歷方式,減小同步開(kāi)銷(xiāo)從 而保證遍歷的高效性。本發(fā)明使用Ligra完成圖遍歷的函數(shù)與結(jié)構(gòu)體如下:
[0014] l、vedexSubset結(jié)構(gòu)體,表示計(jì)算過(guò)程中產(chǎn)生的頂點(diǎn)子集。為了保證動(dòng)態(tài)給線程 分配頂點(diǎn),在計(jì)算過(guò)程中要求每輪處理一個(gè)頂點(diǎn)子集。
[0015] 2、EDGEMAP (G :graph,U:ve;rtexSubset,F: (ve;rtex,vertex)-〉bool): vedexSubset函數(shù),返回值為頂點(diǎn)子集,G表示狀態(tài)空間映射之后的計(jì)算圖,U表示傳入的頂 點(diǎn)子集,F(xiàn)為遍歷過(guò)程中能夠根據(jù)頂點(diǎn)子集的稠密度來(lái)選擇按邊遍歷還是按頂點(diǎn)遍歷。此處 稠密度的度量方法是U的所有出邊累加和D(density),大于闊值Uhreshold=M/a,其中M為 整個(gè)圖的邊個(gè)數(shù),a為給定常數(shù))為稠密,小于闊值為稀疏。U為稠密時(shí)按照頂點(diǎn)遍歷,如果按 邊來(lái)遍歷U所連的頂點(diǎn)集將產(chǎn)生很多競(jìng)爭(zhēng),需要的同步開(kāi)銷(xiāo)大,如果按照頂點(diǎn)遍歷則沒(méi)有競(jìng) 爭(zhēng)的產(chǎn)生。另外U的稠密度為稀疏時(shí),按邊遍歷產(chǎn)生競(jìng)爭(zhēng)的概率很小,因此選擇按邊遍歷。所 W運(yùn)種動(dòng)態(tài)的根據(jù)頂點(diǎn)子集的稠密性遍歷可W減少競(jìng)爭(zhēng),降低同步開(kāi)銷(xiāo)。另外在使用此接 口時(shí),需要實(shí)現(xiàn)UPDATE接口,UPDATE用來(lái)更新遍歷到的頂點(diǎn)的狀態(tài)(遍歷過(guò),未遍歷過(guò))。
[0016] 本發(fā)明中的主要全局變量和全局函數(shù)設(shè)計(jì)如下:
[0017] 全局變量;
[0018] UVisit:類(lèi)型為數(shù)組,用于標(biāo)識(shí)可接收環(huán)檢測(cè)器在檢測(cè)時(shí)節(jié)點(diǎn)的訪問(wèn)狀態(tài)標(biāo)識(shí)。
[0019] 2、isAcceptCycle:標(biāo)識(shí)在檢測(cè)環(huán)的過(guò)程中是否發(fā)現(xiàn)可接收環(huán)。
[0020] 3、State:類(lèi)型為數(shù)組,表示每個(gè)節(jié)點(diǎn)的狀態(tài)。
[0021] 4、G:表示當(dāng)前生成的整個(gè)狀態(tài)空間。
[0022] 全局函數(shù):
[0023] 1、Compute0 :主函數(shù),每個(gè)超步都會(huì)被調(diào)用一次。
[0024] 2、GetSuccessors〇 :通過(guò)組合LTS與Buchi自動(dòng)機(jī)獲取節(jié)點(diǎn)的直接后繼。
[0025] 3、AddVedex(v):在狀態(tài)中增加一個(gè)新節(jié)點(diǎn)。
[00%] 3、StateSpaceGenerator0 :狀態(tài)空間生成函數(shù),每輪生成N層狀態(tài)空間。
[0027] 4、4(3(3邱1:切(316〇616(31:〇1'〇:可接收環(huán)檢測(cè)函數(shù),在生成的狀態(tài)空間查找是否有可 接收環(huán)存在。
[00%] 5、UDPATE():更新函數(shù),在可接收環(huán)檢測(cè)器中調(diào)用,用于完成全局變量Visit的更 新。
[0029] 本發(fā)明的主計(jì)算方法ComputeO的具體計(jì)算步驟如下:
[0030] 1、根據(jù)用戶(hù)設(shè)置N(默認(rèn)N = 3)狀態(tài)空間生成器生成N層狀態(tài)空間,如果有新?tīng)顟B(tài)生 成進(jìn)入步驟2,否則結(jié)束該超步。
[0031] 2、將已經(jīng)生成的狀態(tài)空間轉(zhuǎn)換成Ligra的計(jì)算圖,使用可接收環(huán)檢測(cè)器在Ligra的 計(jì)算圖中檢測(cè)可接收環(huán),通過(guò)標(biāo)記訪問(wèn)狀態(tài)的全局變量,判斷是否已經(jīng)檢測(cè)出模型不滿(mǎn)足 屬性,如果是,則結(jié)束運(yùn)行。否則調(diào)到1繼續(xù)往下執(zhí)行。
[0032] 本發(fā)明設(shè)計(jì)的狀態(tài)空間生成器的任務(wù)是通過(guò)組合LTS與BucM自動(dòng)機(jī)生成節(jié)點(diǎn)的 直接后繼節(jié)點(diǎn)集合,在下個(gè)超步中,加入到計(jì)算過(guò)程中。在此過(guò)程中需要判斷該節(jié)點(diǎn)是否存 在后繼,如果不存在,需要報(bào)告死鎖錯(cuò)誤,如果存在,那么判斷此后繼節(jié)點(diǎn)是否已經(jīng)在狀態(tài) 空間里,如果在,那么當(dāng)前節(jié)點(diǎn)和后繼節(jié)點(diǎn)組成的邊為回邊(回邊是邊的源節(jié)點(diǎn)的層數(shù)大于 等于目的節(jié)點(diǎn)的層數(shù)),也就確定有存在可接收環(huán)的可能性,否則不可能存在可接收環(huán)(數(shù) 學(xué)理論為,環(huán)的必要條件是存在至少一條回邊),然后將此回邊的的初始點(diǎn)加入到回邊集合 bis中,W便在可接收環(huán)檢測(cè)器發(fā)起檢測(cè)。狀態(tài)空間生成器(StateSpaceGenerator)的具體 偽代碼如下:
[0033] 輸入:1、初始節(jié)點(diǎn)集initStateSet(最開(kāi)始為只有一個(gè)初始節(jié)點(diǎn),N層生成結(jié)束會(huì) 產(chǎn)生新的初始節(jié)點(diǎn)集);
[0034] 2、每個(gè)超步生成的層數(shù)N;
[0035] 3、狀態(tài)空間G;
[0036] 4、當(dāng)前的狀態(tài)空間是否有可接收狀態(tài)hasAccState(最開(kāi)始為false,表示沒(méi)有可 接受狀態(tài))。
[0037] 輸出:1、狀態(tài)空間G;
[0038] 2、新的初始節(jié)點(diǎn)集initStateSet,用于下一個(gè)超步繼續(xù)生成后繼節(jié)點(diǎn);
[0039] 3、回邊集合bis,供可接收環(huán)檢測(cè)器發(fā)起檢測(cè);
[0040] 4、當(dāng)前的狀態(tài)空間是否有可接收狀態(tài)hasAccState。
[0041 ] 遍歷i從巧IJN;
[0042] 新的初始節(jié)點(diǎn)集newInitS化teSet初始化為空;
[0043] 對(duì)于每一個(gè)屬于初始節(jié)點(diǎn)集initStateSet的節(jié)點(diǎn)W命名為V)做循環(huán);
[0044] 獲取節(jié)點(diǎn)V的的后繼節(jié)點(diǎn)集合Vsucc;
[0045] 如果Vsucc為空集那么報(bào)告死鎖;
[0046] 否則對(duì)于每一個(gè)在后繼節(jié)點(diǎn)集Vsucc中的后繼節(jié)點(diǎn)S做循環(huán);
[0047] 如果S是新的節(jié)點(diǎn):
[004引將節(jié)點(diǎn)S添加到狀態(tài)空間G中,并將S加入到newinits化teSet中;
[0049] 如果S的狀態(tài)為可接收狀態(tài),那么將hasAccState置true;
[0050] 否則將節(jié)點(diǎn)S添加到回邊集bis中(V與S組成的邊構(gòu)成回邊);
[0化1] 結(jié)束對(duì)Vsucc的循環(huán);
[0化2] 結(jié)束循環(huán)對(duì)initStateSet的循環(huán);
[0053]將 newInitSl:ateSet 的狀態(tài)賦給 initStateSet;
[0化4]結(jié)束循環(huán)。
[0化5]返回bis、initStateSet、hasAccSl:ate和G。
[0056]本發(fā)明設(shè)計(jì)的可接收環(huán)檢測(cè)器的任務(wù)是通過(guò)已生成的狀態(tài)空間中是否包含可接 收環(huán)。需要滿(mǎn)足兩個(gè)條件來(lái)確定路徑中存在可接收環(huán):1、該次可接收環(huán)檢測(cè)會(huì)再次遍歷到 回邊的初始節(jié)點(diǎn),2,遍歷到回邊初始節(jié)點(diǎn)的路徑上至少存在一個(gè)可接收狀態(tài)。運(yùn)里有一個(gè) 優(yōu)化,當(dāng)狀態(tài)生成器的輸出hasAccState為true時(shí)表示狀態(tài)空間中存在可接收狀態(tài),此時(shí)才 發(fā)起可接收環(huán)檢測(cè),因?yàn)闆](méi)有可接收狀態(tài)就不可能存在可接收環(huán)。
[0057]為了在查環(huán)的過(guò)程中查可接收狀態(tài),需要為每個(gè)頂點(diǎn)設(shè)置一個(gè)訪問(wèn)狀態(tài)標(biāo)識(shí) Visit,Visit是一個(gè)數(shù)組它表示的是從初始頂點(diǎn)到當(dāng)前頂點(diǎn)是否存在路徑,W及此路徑中 是否存在可接收狀態(tài)。Visit有=個(gè)取值-1,0,1.即如果頂點(diǎn)V沒(méi)有被訪問(wèn)過(guò),訪問(wèn)標(biāo)志為- 1;如果被訪問(wèn)過(guò)但是祖先頂點(diǎn)和自己中沒(méi)有可接收狀態(tài),訪問(wèn)標(biāo)志為0;如果自己或者祖先 頂點(diǎn)中有可接收狀態(tài),訪問(wèn)標(biāo)志為1。簡(jiǎn)而言之,Visit[v]為1時(shí)表示S到V的路徑中存在可接 收狀態(tài),為0時(shí)表示路徑中不存在可接收狀態(tài),為-1時(shí)表示還沒(méi)有訪問(wèn)到V。因此在查環(huán)的過(guò) 程中,從回邊的起始點(diǎn)出發(fā)遍歷再次找到自己,并且在找到自己的路徑上存在可接收狀態(tài), 則找到可接收環(huán)。
[005引本發(fā)明中可接收環(huán)檢測(cè)器(AcceptCycleDetector)的具體偽代碼如下:
[0059] 輸入:1、GL,由狀態(tài)空間G映射而成的計(jì)算圖;
[0060] 2、bls,回邊集合;
[0061 ] 3、hasAccState,當(dāng)前狀態(tài)空間是否有可接收狀態(tài)。
[0062] 輸出:是否有可接收環(huán)產(chǎn)生。
[0063] 如果當(dāng)前狀態(tài)空間是否有可接收狀態(tài),那么
[0064] 對(duì)回邊集bis中的每條回邊的初始點(diǎn)T循環(huán)(bis為在狀態(tài)空間生成器中產(chǎn)生的回 邊,回邊為可接收環(huán)的一必要條件,因此對(duì)每個(gè)回邊發(fā)起可接收環(huán)探測(cè))。
[0065] 將GL中每個(gè)頂點(diǎn)對(duì)應(yīng)的訪問(wèn)狀態(tài)標(biāo)識(shí)Visit初始化為-1 (表示未訪問(wèn)過(guò))。
[0066] 設(shè)置T的訪問(wèn)狀態(tài)標(biāo)識(shí)Visit[T],若T為可接收狀態(tài)則為1,否則為0;
[0067] 生成即將遍歷的狀態(tài)子集Frontier并將T放入其中。
[0068] 如果Frontier的大小不為0進(jìn)入下面循環(huán)(廣度優(yōu)先遍歷)。
[0069] 調(diào)用抓GEMAP根據(jù)狀態(tài)子集Frontier的稠密度完成Visit的更新,在Visit的更新 過(guò)程檢測(cè)可接收環(huán),并產(chǎn)生新的狀態(tài)子集化ontier返回,同時(shí)返回是否存在可接收環(huán)。
[0070] 如果發(fā)現(xiàn)可接收環(huán),報(bào)告出來(lái)并結(jié)束檢測(cè)。
[0071] 結(jié)束廣度優(yōu)先遍歷的循環(huán)。
[0072] 結(jié)束對(duì)回邊集的循環(huán)。
[007引本發(fā)明中可接收環(huán)檢測(cè)器利用抓GEMAP完成對(duì)到的訪問(wèn)狀態(tài)標(biāo)記Visit的更新,具 體的更新方式(UPDATE(s,d),s為一條邊的初始點(diǎn),d為目的點(diǎn))如下:
[0074] 說(shuō)明:S在當(dāng)前遍歷到的狀態(tài)子集的點(diǎn),UPDATE完成對(duì)Visit的更新、決定d是否加 入到下一個(gè)狀態(tài)子集中W及判斷是否有可接受環(huán)產(chǎn)生。
[0075] 如果d未被訪問(wèn)過(guò),那么將d加入到下一個(gè)狀態(tài)子集。
[0076] 在d未被訪問(wèn)的條件下,如果到達(dá)d的路徑上有可接收狀態(tài)或者d本身就是可接收 狀態(tài)將Visit[d]置1,否則置0(其意義見(jiàn)上文)。
[0077] 如果d被訪問(wèn)過(guò),判斷到達(dá)d的路徑上存在可接收狀態(tài)并且d為最初發(fā)起廣度優(yōu)先 遍歷的點(diǎn)T,那么發(fā)現(xiàn)可接受環(huán),退出程序。
[0078] 在d被訪問(wèn)過(guò)的條件下,在到達(dá)S的路徑上存在可接收狀態(tài)并且到d上沒(méi)有,那么將 Visit[d]置1,同時(shí)將d加入到下一個(gè)狀態(tài)子集中。
[0079] 本發(fā)明設(shè)計(jì)的單機(jī)并行模型檢測(cè)算法中,狀態(tài)生成器、可接收環(huán)檢測(cè)器均采用廣 度優(yōu)先捜索的方式,該方式能夠提升并行度,保證算法的性能。在可接收環(huán)檢測(cè)時(shí),發(fā)起廣 度優(yōu)先捜索,根據(jù)遍歷過(guò)程中的狀態(tài)子集的稠密度動(dòng)態(tài)選擇遍歷方式,很大程度上降低了 同步開(kāi)銷(xiāo),提高檢測(cè)效率。另外,本發(fā)明在每個(gè)超步只生成部分狀態(tài)空間,在模型不滿(mǎn)足屬 性的情況下可W直接中止運(yùn)行,不生成全部的狀態(tài)空間,提前完成完成檢測(cè),大大提升了檢 測(cè)的效率。
[0080] 本發(fā)明的優(yōu)點(diǎn)和積極效果如下:
[0081] 1、與現(xiàn)有的單機(jī)并行線性時(shí)序邏輯模型檢測(cè)器相比,本方法根據(jù)遍歷過(guò)程中的產(chǎn) 生的狀態(tài)子集的稠密度來(lái)選擇遍歷方式,很大程度上降低了同步開(kāi)銷(xiāo),提高檢測(cè)效率。并且 我們對(duì)狀態(tài)子集中的狀態(tài)動(dòng)態(tài)均衡分配給線程并行處理,提高了并行度。大幅提高了性能 和可擴(kuò)展性。
[0082] 2、與現(xiàn)有的單機(jī)并行線性時(shí)序邏輯模型檢測(cè)器相比,本方法的主要組成部分,狀 態(tài)空間生成器、可接收環(huán)檢測(cè)器都是基于廣度優(yōu)先捜索方式的,能夠最大化線程的并行度, 使得構(gòu)建的模型檢測(cè)器擁有高擴(kuò)展性,高性能。
[0083] 3、與現(xiàn)有的單機(jī)并行線性時(shí)序邏輯模型檢測(cè)器相比,本方法能夠通過(guò)圖計(jì)算框架 的高層編程接口實(shí)現(xiàn),在實(shí)現(xiàn)的過(guò)程中,無(wú)須考慮過(guò)多的底層實(shí)現(xiàn)細(xì)節(jié),比線程如何分配任 務(wù),如何同步等等,所W通過(guò)本方法可W很容易地構(gòu)建適合特定應(yīng)用領(lǐng)域的模型檢測(cè)器。
【附圖說(shuō)明】
[0084] 圖1本方法的總體結(jié)構(gòu)圖。
[0085] 圖2本方法的計(jì)算框架圖。
[0086] 圖3單個(gè)哲學(xué)家的行為圖。
[0087] 圖4利用本方法構(gòu)建的模型檢測(cè)的時(shí)間和可擴(kuò)展性分析曲線;
[008引(a) 15個(gè)哲學(xué)家在屬性0上的運(yùn)行時(shí)間;(b) 15個(gè)哲學(xué)家在屬性0上的加速比;
[0089] (c)15個(gè)哲學(xué)家在屬性1上的運(yùn)行時(shí)間;(d)15個(gè)哲學(xué)家在屬性0上的加速比。
【具體實(shí)施方式】
[0090] 為了使本技術(shù)領(lǐng)域的人員更好的理解本發(fā)明,下面給出具體實(shí)施例對(duì)本發(fā)明作進(jìn) 一步的詳細(xì)說(shuō)明。
[0091] 本實(shí)例針對(duì)模型檢測(cè)領(lǐng)域經(jīng)典的驗(yàn)證模型,哲學(xué)家吃飯問(wèn)題進(jìn)行驗(yàn)證。哲學(xué)家吃 飯問(wèn)題就是一桌共有若干(模型參數(shù))個(gè)哲學(xué)家,運(yùn)些哲學(xué)家每?jī)蓚€(gè)人之間都放有一只俟 子,他們可W拿起左右的俟子,但是只有當(dāng)同時(shí)拿起兩只俟子時(shí),才可W進(jìn)餐,進(jìn)餐完畢后, 依次放下左右的俟子。每個(gè)哲學(xué)家的行為建模成標(biāo)識(shí)轉(zhuǎn)移系統(tǒng),如圖3所示。
[0092] 本實(shí)例中,將會(huì)針對(duì)若干個(gè)哲學(xué)家,驗(yàn)證一系列屬性,具體的驗(yàn)證問(wèn)題與屬性如表 1所示。經(jīng)過(guò)本專(zhuān)利方法,通過(guò)開(kāi)源軟件Ligra的接口之上,即可實(shí)現(xiàn)高性能性線性時(shí)序邏輯 模型檢測(cè)器,對(duì)實(shí)例中的問(wèn)題進(jìn)行驗(yàn)證,記錄在單機(jī)中,所記錄得到的創(chuàng)建節(jié)點(diǎn)數(shù),回邊個(gè) 數(shù),超步數(shù)等統(tǒng)計(jì)結(jié)果如表2所示。此外,為了說(shuō)明本專(zhuān)利所構(gòu)建系統(tǒng)的性能,在不同哲學(xué)家 個(gè)數(shù)下重復(fù)進(jìn)行20次實(shí)驗(yàn),并把平均運(yùn)行時(shí)間結(jié)果進(jìn)行記錄,計(jì)算得到系統(tǒng)加速比和運(yùn)行 時(shí)間曲線,如圖4所示,該結(jié)果說(shuō)明了系統(tǒng)的高性能和高可擴(kuò)展性。
[0093] 表 1
[0094]
LUW/」 巧官刃說(shuō)巧目的公升J本發(fā)巧的具體買(mǎi)砸例和附圏,具目的巧十巧助埋鮮本發(fā)巧 的內(nèi)容并據(jù)W實(shí)施,但是本領(lǐng)域的技術(shù)人員可W理解:在不脫離本發(fā)明及所附的權(quán)利要求 的精神和范圍內(nèi),各種替換、變化和修改都是可能的。本發(fā)明不應(yīng)局限于本說(shuō)明書(shū)最佳實(shí)施 例和附圖所公開(kāi)的內(nèi)容,本發(fā)明要求保護(hù)的范圍W權(quán)利要求書(shū)界定的范圍為準(zhǔn)。
【主權(quán)項(xiàng)】
1. 一種高性能單機(jī)多核并行模型檢測(cè)方法,其步驟為: 1) 創(chuàng)建待檢測(cè)系統(tǒng)模型與待測(cè)屬性的組合狀態(tài)空間中的初始節(jié)點(diǎn); 2) 狀態(tài)空間生成器將該初始節(jié)點(diǎn)映射成Ligra計(jì)算圖中的一個(gè)頂點(diǎn),然后逐步生成該 初始節(jié)點(diǎn)的后繼節(jié)點(diǎn),初始節(jié)點(diǎn)及已生成的后繼節(jié)點(diǎn)構(gòu)成一狀態(tài)空間;其中,該初始節(jié)點(diǎn)為 第1級(jí)節(jié)點(diǎn),第i級(jí)節(jié)點(diǎn)包含N層第i+Ι級(jí)后繼節(jié)點(diǎn),每一層后繼節(jié)點(diǎn)包含多個(gè)節(jié)點(diǎn),每次屬于 同一級(jí)節(jié)點(diǎn)的后繼節(jié)點(diǎn)全部生成之后,將當(dāng)前狀態(tài)空間映射成一Ligra計(jì)算圖,然后調(diào)用可 接收環(huán)檢測(cè)器檢測(cè)該Ligra計(jì)算圖中是否有可接收環(huán),如果有則停止模型檢測(cè)。2. 如權(quán)利要求1所述的方法,其特征在于,步驟1)中,首先將待檢測(cè)系統(tǒng)模型轉(zhuǎn)換成標(biāo) 識(shí)迀移系統(tǒng),將待測(cè)屬性轉(zhuǎn)換成對(duì)應(yīng)的Buchi自動(dòng)機(jī),然后創(chuàng)建該初始節(jié)點(diǎn)。3. 如權(quán)利要求1或2所述的方法,其特征在于,步驟2)中,該狀態(tài)空間生成器首先判斷待 生成后繼節(jié)點(diǎn)的節(jié)點(diǎn)是否存在后繼,如果不存在,則停止模型檢測(cè);如果存在,則生成該節(jié) 點(diǎn)的后繼節(jié)點(diǎn)并判斷該后繼節(jié)點(diǎn)是否已經(jīng)在當(dāng)前的狀態(tài)空間里,如果在,則將該節(jié)點(diǎn)及其 后繼節(jié)點(diǎn)構(gòu)成的回邊對(duì)應(yīng)的初始點(diǎn)加入到回邊集合中,然后調(diào)用可接收環(huán)檢測(cè)器根據(jù)該回 邊集合檢測(cè)當(dāng)前Ligra計(jì)算圖中是否有可接收環(huán)。4. 如權(quán)利要求3所述的方法,其特征在于,對(duì)Ligra計(jì)算圖中的每個(gè)頂點(diǎn)設(shè)置一訪問(wèn)狀 態(tài)標(biāo)識(shí)Visit;Visit是一個(gè)數(shù)組,表示從初始頂點(diǎn)到當(dāng)前頂點(diǎn)是否存在路徑以及路徑中是 否存在可接收狀態(tài),可接收環(huán)檢測(cè)器從反向邊的起始點(diǎn)出發(fā)遍歷再次找到該起始點(diǎn),并且 在到達(dá)自己的路徑上存在可接收狀態(tài),則判斷存在可接收環(huán)。5. 如權(quán)利要求1所述的方法,其特征在于,步驟2)中,采用超步迭代的方法生成每一節(jié) 點(diǎn)的N層后繼節(jié)點(diǎn);其中,對(duì)于每一超步:首先調(diào)用狀態(tài)空間生成器按廣度優(yōu)先的方式來(lái)按 層生成后繼節(jié)點(diǎn),然后將生成的后繼節(jié)點(diǎn)映射到Ligra計(jì)算圖中,最后判斷該Ligra計(jì)算圖 是否違反該待測(cè)屬性,如果不違反則進(jìn)行下一超步處理,否則結(jié)束運(yùn)行。
【文檔編號(hào)】G06F11/36GK105955883SQ201610270109
【公開(kāi)日】2016年9月21日
【申請(qǐng)日】2016年4月27日
【發(fā)明人】張營(yíng)飛, 謝淼, 張珩, 楊秋松
【申請(qǐng)人】中國(guó)科學(xué)院軟件研究所