一種無損壓縮系統(tǒng)依賴圖的方法及裝置制造方法
【專利摘要】本發(fā)明的實施例提供一種無損壓縮系統(tǒng)依賴圖的方法及裝置,涉及計算機領域,能夠實現(xiàn)系統(tǒng)依賴圖的無損壓縮,并降低系統(tǒng)依賴圖的規(guī)模,從而降低以系統(tǒng)依賴圖為基礎的切片算法的開銷。其方法為:首先提取程序中所有變量之間的等價關系,而后通過該等價關系將程序中所有變量分為不同的等價類,并根據(jù)這些等價類為系統(tǒng)依賴圖中的節(jié)點設置鍵值,而后根據(jù)系統(tǒng)依賴圖中的節(jié)點的鍵值壓縮系統(tǒng)依賴圖。本發(fā)明實施例用于對系統(tǒng)依賴圖進行壓縮。
【專利說明】一種無損壓縮系統(tǒng)依賴圖的方法及裝置
【技術領域】
[0001]本發(fā)明涉及計算機領域,尤其涉及一種無損壓縮系統(tǒng)依賴圖的方法及裝置。
【背景技術】
[0002]程序靜態(tài)切片是一種重要的程序分析技術,廣泛應用于程序理解、測試、調(diào)試、驗證、維護,能夠幫助程序員提取所關注代碼,降低程序分析、錯誤驗證、維護等領域。目前,主流的切片工具均采用基于系統(tǒng)依賴圖的圖可達算法。
[0003]系統(tǒng)依賴圖(System Dependence Graph, SDG)是一個有向圖,是對程序依賴圖(Program Dependence Graph7PDG)的擴展。以系統(tǒng)依賴圖為基礎的程序切片算法,是通過遍歷系統(tǒng)依賴圖,從中提取出可能影響某個變量在程序中某個位置上的取值的程序代碼。但是現(xiàn)有的切片算法開銷與精度都無法滿足大規(guī)模使用程序的需求。
[0004]因此,為了解決上述問題,現(xiàn)有技術通常采用的技術包括:一、通過提高別名分析精度降低SDG的規(guī)模,因為SDG的規(guī)模不僅決定其自身的計算與存儲的時空開銷,還直接影響切片的效率。其中,別名分析,也稱指針分析,是一種識別程序中可能用兩種以上的方法訪問的存儲位置的靜態(tài)分析技術。別名分析所得出的結果是基于SDG的程序切片技術中用于創(chuàng)建系統(tǒng)依賴圖時所需的輸入之一。二、通過限制切片算法的上下文敏感性(ContextSensitivity)來減少切片算法遍歷SDG的開銷。
[0005]在實現(xiàn)上述降低SDG規(guī)模和減少切片算法的時空開銷的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術中至少存在如下問題:
[0006]提高指針分析的精度雖然可以適度降低SDG的規(guī)模,但高精度的指針分析算法本身不僅需要高昂的時空開銷,也幾乎無助于切片精度的提高。而采用限制切片算法的上下文敏感性來緩解遍歷SDG的開銷,會使切片的精度降低。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的實施例提供一種無損壓縮系統(tǒng)依賴圖的方法及裝置,能夠實現(xiàn)系統(tǒng)依賴圖的無損壓縮,并降低系統(tǒng)依賴圖的規(guī)模,從而降低以系統(tǒng)依賴圖為基礎的切片算法的開銷。
[0008]為達到上述目的,本發(fā)明的實施例采用如下技術方案:
[0009]第一方面,提供一種無損壓縮系統(tǒng)依賴圖的方法,包括:
[0010]根據(jù)別名分析信息獲取程序中所有變量間的等價關系,并根據(jù)所述等價關系將所有變量分為不同的等價類,其中,所述別名分析信息是根據(jù)別名分析算法得到的;
[0011]根據(jù)系統(tǒng)依賴圖中的各個節(jié)點所代表的變量所屬的等價類為所述系統(tǒng)依賴圖中的各個節(jié)點設置鍵值;
[0012]根據(jù)所述系統(tǒng)依賴圖中的各個節(jié)點的鍵值對所述系統(tǒng)依賴圖進行壓縮。
[0013]在第一種可能的實現(xiàn)方式中,結合第一方面,所述根據(jù)別名分析信息獲取程序中所有變量間的等價關系,并根據(jù)所述等價關系將所有變量分為不同的等價類包括:[0014]根據(jù)所述別名分析信息建立從第一變量集合到指向所述變量集合中每個變量的指針集合的冪集的映射f,所述第一變量集合為程序中所有變量的集合;
[0015]根據(jù)所述映射f建立從所述指針集合的冪集到第二變量集合的映射f,,以將所有變量分為不同的等價類;所述第二變量集合為被同一組指針所指向的變量的集合。
[0016]在第二種可能的實現(xiàn)方式中,結合第一方面或第一方面的第一種可能的實現(xiàn)方式,所述根據(jù)所述別名分析信息建立從第一變量集合到指向所述變量集合中每個變量的指針集合的冪集的映射f包括:
[0017]為程序中的每個指針變量建立一個由該指針變量所指向的變量構成的指向集,為所有指向集中出現(xiàn)的每個變量建立一個空集合;
[0018]將每個指針變量添加到該指針變量所指向的變量對應的空集合中,以得到所述映射f。
[0019]在第三種可能的實現(xiàn)方式中,結合第一方面或第一方面的第一種可能的實現(xiàn)方式或第一方面的第二種可能的實現(xiàn)方式,根據(jù)所述映射f建立從所述指針集合的冪集到第二變量集合的映射F',以將所有變量分為不同的等價類包括:
[0020]建立第i個空集合,將所述映射f的定義域中一個變量var,以及所有被映射到f(var)的變量添加到所述第i個空集合中,得到第i個等價類,并對所述第i個等價類設置唯一的編號,并從所述映射f的定義域中刪除添加到所述第i個空集合中的變量,直至映射f的定義域中的變量個數(shù)為O ;其中,i的起始值為I,所述變量var表示映射f的定義域中的任意一個變量。
[0021]在第四種可能的實現(xiàn)方式中,結合第一方面或第一方面的第一種可能的實現(xiàn)方式至第一方面的第三種可能的實現(xiàn)方式,所述根據(jù)系統(tǒng)依賴圖中的各個節(jié)點所代表的變量所屬的等價類為所述系統(tǒng)依賴圖中的各個節(jié)點設置鍵值包括:
[0022]將所述系統(tǒng)依賴圖上的各個節(jié)點所代表的變量所屬的等價類的編號對應設置為所述各個節(jié)點的鍵值。
[0023]在第五種可能的實現(xiàn)方式中,結合第一方面或第一方面的第一種可能的實現(xiàn)方式至第一方面的第四種可能的實現(xiàn)方式,所述根據(jù)所述系統(tǒng)依賴圖中的各個節(jié)點的鍵值對所述系統(tǒng)依賴圖進行壓縮包括:
[0024]若所述系統(tǒng)依賴圖上的任意一個節(jié)點的前驅節(jié)點集合或者后繼節(jié)點集合中的任意兩個節(jié)點擁有相同的鍵值,并且所述任意兩個節(jié)點中有一個是副作用節(jié)點,則將所述任意兩個節(jié)點中的副作用節(jié)點的出入邊依次轉化為所述任意兩個節(jié)點中另外一個節(jié)點的出入邊;
[0025]刪除所述系統(tǒng)依賴圖中所有孤立的節(jié)點;
[0026]合并所述系統(tǒng)依賴圖上具有相同的源點和匯點的有向邊。
[0027]第二方面,提供一種系統(tǒng)依賴圖無損壓縮裝置,包括:
[0028]等價類獲取模塊,用于根據(jù)別名分析信息獲取程序中所有變量間的等價關系,并根據(jù)所述等價關系將所有變量分為不同的等價類,其中,所述別名分析信息是根據(jù)別名分析算法得到的;
[0029]鍵值設置模塊,用于根據(jù)系統(tǒng)依賴圖中的各個節(jié)點所代表的變量所屬的等價類為所述系統(tǒng)依賴圖中的各個節(jié)點設置鍵值;[0030]依賴圖壓縮模塊,用于根據(jù)所述系統(tǒng)依賴圖中的各個節(jié)點的鍵值對所述系統(tǒng)依賴圖進行壓縮。
[0031]在第一種可能的實現(xiàn)方式中,結合第二方面,所述等價類獲取模塊包括:
[0032]映射建立子模塊,用于根據(jù)所述別名分析信息建立從第一變量集合到指向所述變量集合中每個變量的指針集合的冪集的映射f,所述第一變量集合為程序中所有變量的集合;
[0033]等價類獲取子模塊,用于根據(jù)所述映射f建立從所述指針集合的冪集到第二變量集合的映射f,,所述第二變量集合為被同一組指針所指向的變量的集合。
[0034]在第二種可能的實現(xiàn)方式中,結合第二方面或第二方面的第一種可能的實現(xiàn)方式,所述映射建立子模塊具體用于:
[0035]為程序中的每個指針變量建立一個由該指針變量所指向的變量構成的指向集,為所有指向集中出現(xiàn)的每個變量建立一個空集合;
[0036]將每個指針變量添加到該指針變量所指向的變量對應的空集合中,以得到所述映射f。
[0037]在第三種可能的實現(xiàn)方式中,結合第二方面或第二方面的第一種可能的實現(xiàn)方式或第二方面的第二種可能的實現(xiàn)方式,所述等價類獲取子模塊具體用于:
[0038]建立第i個空集合,將所述映射f的定義域中一個變量var,以及所有被映射到f(var)的變量添加到所述第i個空集合中,得到第i個等價類,并對所述第i個等價類設置唯一的編號,并從所述映射f的定義域中刪除添加到所述第i個空集合中的變量,直至映射f的定義域中的變量個數(shù)為O ;其中,i的起始值為I,所述變量var表示映射f的定義域中的任意一個變量。
[0039]在第四種可能的實現(xiàn)方式中,結合第二方面或第二方面的第一種可能的實現(xiàn)方式至第二方面的第三種可能的實現(xiàn)方式,所述鍵值設置模塊具體用于:
[0040]將所述系統(tǒng)依賴圖上的各個節(jié)點所代表的變量所屬的等價類的編號對應設置為所述各個節(jié)點的鍵值。
[0041]在第五種可能的實現(xiàn)方式中,結合第二方面或第二方面的第一種可能的實現(xiàn)方式至第二方面的第四種可能的實現(xiàn)方式,所述依賴圖壓縮模塊包括:
[0042]出入邊轉化子模塊,用于若系統(tǒng)依賴圖上的某個節(jié)點的前驅節(jié)點集合或者后繼節(jié)點集合中的任意兩個節(jié)點擁有相同的鍵值,并且所述任意兩個節(jié)點中有一個是副作用節(jié)點,則將所述任意兩個節(jié)點中的副作用節(jié)點的出入邊依次轉化為所述任意兩個節(jié)點中另外一個節(jié)點的出入邊;
[0043]節(jié)點刪除子模塊,用于刪除系統(tǒng)依賴圖中所有孤立的節(jié)點;
[0044]合并子模塊,用于合并系統(tǒng)依賴圖上具有相同的源點和匯點的有向邊。
[0045]本發(fā)明的實施例提供一種無損壓縮系統(tǒng)依賴圖的方法及裝置,首先提取程序中變量間的等價關系,而后通過該等價關系將程序中變量分為不同的等價類,并根據(jù)這些等價類為系統(tǒng)依賴圖中的節(jié)點設置鍵值,而后根據(jù)系統(tǒng)依賴圖中的節(jié)點的鍵值壓縮系統(tǒng)依賴圖,能夠實現(xiàn)系統(tǒng)依賴圖的無損壓縮,并降低系統(tǒng)依賴圖的規(guī)模,從而降低以系統(tǒng)依賴圖為基礎的切片算法的開銷。【專利附圖】
【附圖說明】
[0046]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0047]圖1為本發(fā)明實施例提供的一種無損壓縮系統(tǒng)依賴圖的方法的流程示意圖;
[0048]圖2為本發(fā)明另一實施例提供的一種無損壓縮系統(tǒng)依賴圖的方法的流程示意圖;
[0049]圖3為本發(fā)明實施例提供的程序片段示意圖;
[0050]圖4為本發(fā)明實施例提供的未經(jīng)壓縮的系統(tǒng)依賴圖;
[0051]圖5為本發(fā)明實施例提供的系統(tǒng)依賴圖壓縮過程示意圖一;
[0052]圖6為本發(fā)明實施例提供的系統(tǒng)依賴圖壓縮過程示意圖二 ;
[0053]圖7為本發(fā)明實施例提供的經(jīng)過壓縮后的系統(tǒng)依賴圖;
[0054]圖8為本發(fā)明實施例提供的一種系統(tǒng)依賴圖無損壓縮裝置的結構示意圖;
[0055]圖9為本發(fā)明實施例提供的另一種系統(tǒng)依賴圖無損壓縮裝置的結構示意圖;
[0056]圖10為本發(fā)明實施例提供的又一種系統(tǒng)依賴圖無損壓縮裝置的結構示意圖;
[0057]圖11為本發(fā)明另一實施例提供的一種系統(tǒng)依賴圖無損壓縮裝置的結構示意圖。
【具體實施方式】
[0058]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0059]本發(fā)明實施例提供一種無損壓縮系統(tǒng)依賴圖的方法,如圖1所示,該方法包括:
[0060]S101、根據(jù)別名分析信息獲取程序中所有變量間的等價關系,并根據(jù)等價關系將所有變量分為不同的等價類,其中,別名分析信息是根據(jù)別名分析算法得到的。
[0061]S102、根據(jù)系統(tǒng)依賴圖中的各個節(jié)點所代表的變量所屬的等價類為系統(tǒng)依賴圖中的各個節(jié)點設置鍵值。
[0062]S103、根據(jù)系統(tǒng)依賴圖中的各個節(jié)點的鍵值對系統(tǒng)依賴圖進行壓縮。
[0063]其中,本發(fā)明中的系統(tǒng)依賴圖節(jié)點之間可以定義為:
[0064]系統(tǒng)依賴圖上兩個節(jié)點U和V等價(記做u?V),當且僅當,除u本身的后向切片夕卜,以來途中任一包含U的切片也必然包含V,反之亦然。
[0065]故假設如果合并了節(jié)點u和V后,得到的系統(tǒng)依賴圖上至少存在一個切片與合并前的系統(tǒng)依賴圖上由相同切片標準得到的切片不同,則合并前的切片一定不同時包括u和V,而合并的前提是U和V等價,這樣就出現(xiàn)了矛盾,故按照等價關系合并后得到的系統(tǒng)依賴圖上的切片精度與合并前一致,這樣也就實現(xiàn)了系統(tǒng)依賴圖的無損壓縮。
[0066]本發(fā)明的實施例提供一種無損壓縮系統(tǒng)依賴圖的方法,首先提取程序中變量間的等價關系,而后通過該等價關系將程序中變量分為不同的等價類,并根據(jù)這些等價類為系統(tǒng)依賴圖中的節(jié)點設置鍵值,而后根據(jù)系統(tǒng)依賴圖中的節(jié)點的鍵值壓縮系統(tǒng)依賴圖,能夠實現(xiàn)系統(tǒng)依賴圖的無損壓縮,并降低系統(tǒng)依賴圖的規(guī)模,從而降低以系統(tǒng)依賴圖為基礎的切片算法的開銷。
[0067]本發(fā)明另一實施例提供一種無損壓縮系統(tǒng)依賴圖的方法,如圖2所示,該方法包括:
[0068]S201、根據(jù)別名分析信息建立從第一變量集合到指向變量集合中每個變量的指針集合的冪集的映射f,第一變量集合為程序中所有變量的集合。其中,別名分析信息是,根據(jù)別名分析算法得到的。
[0069]具體的,可以通過以下步驟實現(xiàn):
[0070]第一步,根據(jù)別名分析算法為程序中的每個指針變量(可以記為ptr)建立一個由該指針變量所指向的變量構成的指向集(可以記為ptr_t0_set),為所有指向集中出現(xiàn)的每個變量建立一個空集合(可以記為Svm);
[0071]第二步,將每個指針變量添加到該指針變量所指向的變量對應的空集合中,以得到映射f。
[0072]示例性的,得到映射f的過程可以通過以下偽碼表示:
[0073]
【權利要求】
1.一種無損壓縮系統(tǒng)依賴圖的方法,其特征在于,包括: 根據(jù)別名分析信息獲取程序中所有變量間的等價關系,并根據(jù)所述等價關系將所有變量分為不同的等價類;其中,所述別名分析信息是根據(jù)別名分析算法得到的; 根據(jù)系統(tǒng)依賴圖中的各個節(jié)點所代表的變量所屬的等價類為所述系統(tǒng)依賴圖中的各個節(jié)點設置鍵值; 根據(jù)所述系統(tǒng)依賴圖中的各個節(jié)點的鍵值對所述系統(tǒng)依賴圖進行壓縮。
2.根據(jù)權利要求1所述的無損壓縮系統(tǒng)依賴圖的方法,其特征在于,所述根據(jù)別名分析信息獲取程序中所有變量間的等價關系,并根據(jù)所述等價關系將所有變量分為不同的等價類包括: 根據(jù)所述別名分析信息建立從第一變量集合到指向所述變量集合中每個變量的指針集合的冪集的映射f,所述第一變量集合為程序中所有變量的集合; 根據(jù)所述映射f建立從所述指針集合的冪集到第二變量集合的映射f,,將所有變量分為不同的等價類;所述第二變量集合為被同一組指針所指向的變量的集合。
3.根據(jù)權利要求2所述的無損壓縮系統(tǒng)依賴圖的方法,其特征在于,所述根據(jù)所述別名分析信息建立從第一變量集合到指向所述變量集合中每個變量的指針集合的冪集的映射f包括: 為程序中的每個指針變量建立一個由該指針變量所指向的變量構成的指向集,為所有指向集中出現(xiàn)的每個變量建立一個空集合; 將每個指針變量添加到該指針變量所指向的變量對應的空集合中,以得到所述映射f。
4.根據(jù)權利要求2所述的無損壓縮系統(tǒng)依賴圖的方法,其特征在于,根據(jù)所述映射f建立從所述指針集合的冪集到第二變量集合的映射f,,將所有變量分為不同的等價類包括: 建立第i個空集合,將所述映射f的定義域中一個變量var,以及所有被映射到f (var)的變量添加到所述第i個空集合中,得到第i個等價類,并對所述第i個等價類設置編號,并從所述映射f的定義域中刪除添加到所述第i個空集合中的變量,直至映射f的定義域中的變量個數(shù)為O ;其中,i的起始值為I,所述變量var表示映射f的定義域中的任意一個變量。
5.根據(jù)權利要求1至4任意一項所述的無損壓縮系統(tǒng)依賴圖的方法,其特征在于,所述根據(jù)系統(tǒng)依賴圖中的各個節(jié)點所代表的變量所屬的等價類為所述系統(tǒng)依賴圖中的各個節(jié)點設置鍵值包括: 將所述系統(tǒng)依賴圖上的各個節(jié)點所代表的變量所屬的等價類的編號對應設置為所述各個節(jié)點的鍵值。
6.根據(jù)權利要求1至5任意一項所述的無損壓縮系統(tǒng)依賴圖的方法,其特征在于,所述根據(jù)所述系統(tǒng)依賴圖中的各個節(jié)點的鍵值對所述系統(tǒng)依賴圖進行壓縮包括: 若所述系統(tǒng)依賴圖上的任意一個節(jié)點的前驅節(jié)點集合或者后繼節(jié)點集合中的任意兩個節(jié)點擁有相同的鍵值,并且所述任意兩個節(jié)點中有一個是副作用節(jié)點,則將所述任意兩個節(jié)點中的副作用節(jié)點的出入邊依次轉化為所述任意兩個節(jié)點中另外一個節(jié)點的出入邊; 刪除所述系統(tǒng)依賴圖中所有孤立的節(jié)點;合并所述系統(tǒng)依賴圖上具有相同的源點和匯點的有向邊。
7.一種系統(tǒng)依賴圖無損壓縮裝置,其特征在于,包括: 等價類獲取模塊,用于根據(jù)別名分析信息獲取程序中所有變量間的等價關系,并根據(jù)所述等價關系將所有變量分為不同的等價類,其中,所述別名分析信息是根據(jù)別名分析算法得到的; 鍵值設置模塊,用于根據(jù)系統(tǒng)依賴圖中的各個節(jié)點所代表的變量所屬的等價類為所述系統(tǒng)依賴圖中的各個節(jié)點設置鍵值; 依賴圖壓縮模塊,用于根據(jù)所述系統(tǒng)依賴圖中的各個節(jié)點的鍵值對所述系統(tǒng)依賴圖進行壓縮。
8.根據(jù)權利要求7所述的系統(tǒng)依賴圖無損壓縮裝置,其特征在于,所述等價類獲取模塊包括: 映射建立子模塊,用于根據(jù)所述別名分析信息建立從第一變量集合到指向所述變量集合中每個變量的指針集合的冪集的映射f,所述第一變量集合為程序中所有變量的集合; 等價類獲取子模塊,用于根據(jù)所述映射f建立從所述指針集合的冪集到第二變量集合的映射f',所述第二變量集合為被同一組指針所指向的變量的集合。
9.根據(jù)權利要求8所述的系統(tǒng)依賴圖無損壓縮裝置,其特征在于,所述映射建立子模塊具體用于: 為程序中的每個指針變量建立一個由該指針變量所指向的變量構成的指向集,為所有指向集中出現(xiàn)的每個變量建立一個空集合; 將每個指針變量添加到該指針變量所指向的變量對應的空集合中,以得到所述映射f。
10.根據(jù)權利要求8所述的系統(tǒng)依賴圖無損壓縮裝置,其特征在于,所述等價類獲取子模塊具體用于: 建立第i個空集合,將所述映射f的定義域中一個變量var,以及所有被映射到f(var)的變量添加到所述第i個空集合中,得到第i個等價類,并對所述第i個等價類設置編號,并從所述映射f的定義域中刪除添加到所述第i個空集合中的變量,直至映射f的定義域中的變量個數(shù)為O ;其中,i的起始值為I,所述變量var表示映射f的定義域中的任意一個變量。
11.根據(jù)權利要求7至10任意一項所述的系統(tǒng)依賴圖無損壓縮裝置,其特征在于,所述鍵值設置模塊具體用于: 將所述系統(tǒng)依賴圖上的各個節(jié)點所代表的變量所屬的等價類的編號對應設置為所述各個節(jié)點的鍵值。
12.根據(jù)權利要求7至11任意一項所述的系統(tǒng)依賴圖無損壓縮裝置,其特征在于,所述依賴圖壓縮模塊包括: 出入邊轉化子模塊,用于若系統(tǒng)依賴圖上的某個節(jié)點的前驅節(jié)點集合或者后繼節(jié)點集合中的任意兩個節(jié)點擁有相同的鍵值,并且所述任意兩個節(jié)點中有一個是副作用節(jié)點,則將所述任意兩個節(jié)點中的副作用節(jié)點的出入邊依次轉化為所述任意兩個節(jié)點中另外一個節(jié)點的出入邊; 節(jié)點刪除子模塊,用于刪除系統(tǒng)依賴圖中所有孤立的節(jié)點; 合并子模塊,用于合 并系統(tǒng)依賴圖上具有相同的源點和匯點的有向邊。
【文檔編號】G06F9/44GK103902273SQ201210584770
【公開日】2014年7月2日 申請日期:2012年12月28日 優(yōu)先權日:2012年12月28日
【發(fā)明者】李豐, 霍瑋, 陳聰明, 衷璐潔, 張兆慶, 馮曉兵 申請人:華為技術有限公司, 中國科學院計算技術研究所