一種收集方法及裝置制造方法
【專利摘要】本發(fā)明實施例公開了一種收集方法,包括:構(gòu)建程序中每個過程的控制流圖和數(shù)據(jù)流圖,識別每個過程的變量訪問語句,收集每個過程中的變量訪問語句的程序局部性信息;構(gòu)建程序的調(diào)用流圖,根據(jù)所述調(diào)用流圖對所述程序進行遍歷,收集各個變量訪問語句的訪問順序和親和性關(guān)系。本發(fā)明實施例還公開了一種收集裝置。采用本發(fā)明,可收集到程序準確的訪存信息,且對程序的執(zhí)行干擾較小。
【專利說明】一種收集方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機【技術(shù)領(lǐng)域】,尤其涉及一種收集方法及裝置。
【背景技術(shù)】
[0002]隨著半導體工藝的發(fā)展,在過去的40多年中,芯片單位面積晶體管數(shù)量按照摩爾定律揭示的規(guī)律,以指數(shù)級速度增長。持續(xù)增長的晶體管數(shù)量使處理器架構(gòu)師能夠設(shè)計更多、更復雜的組件,提高處理器性能。統(tǒng)計數(shù)據(jù)表明,處理器性能在1980年至1986年間,大約每年增長25%,1986年至2004年,每年增長52%,2004年至今,每年增長20%。在過去的30年中,處理器性能的增長超過了 10000倍。相比較而言,內(nèi)存性能增長緩慢。1980年至今,內(nèi)存性能每年增長速度大約為7%。在過去的30年,內(nèi)存性能增長不足10倍,嚴重滯后于處理器的性能。并且由于增長速度的差異依舊存在并保持相對穩(wěn)定,內(nèi)存和處理器之間的性能差距仍將持續(xù)增大。因此內(nèi)存已經(jīng)成為計算機系統(tǒng)整體性能的瓶頸之一。
[0003]現(xiàn)代計算機系統(tǒng)廣泛采用緩存技術(shù)緩解處理器和內(nèi)存之間的性能差異。緩存能夠有效緩解處理器對內(nèi)存數(shù)據(jù)迫切需求的原理在于,程序訪問數(shù)據(jù)的模式并不是隨機的。在一段時間中,程序傾向于集中訪問全體數(shù)據(jù)中的一小部分,這一特性被稱為程序的局部性。程序的局部性包含兩個方面特性,時間局部性和空間局部性,具體地,時間局部性即在某一時刻,如果內(nèi)存中的某一位置被程序訪問到,那么同一位置在不久的將來很可能被程序再次訪問到。數(shù)據(jù)訪問序列對同一內(nèi)存位置具有訪問上的時間鄰近性。時間局部性對于緩存的意義在于,當前使用到的數(shù)據(jù)應(yīng)當從內(nèi)存復制到緩存中。當該數(shù)據(jù)下次被訪問時,處理器可以自緩存中快速獲得數(shù)據(jù),避免向內(nèi)存發(fā)出請求??臻g局部性即在某一時刻,如果內(nèi)存中的某一位置被程序訪問到,那么與該內(nèi)存位置臨近的位置在不久的將來很可能被程序訪問到。空間上鄰近的數(shù)據(jù)往往總是同時被使用??臻g局部性對緩存的意義在于,與當前使用到的數(shù)據(jù)鄰近的數(shù)據(jù)應(yīng)當從內(nèi)存復制到緩存中。當這些數(shù)據(jù)被訪問時,處理器可以自緩存中快速獲得數(shù)據(jù),避免向內(nèi) 存發(fā)出請求。因此通過分析程序的時間局部性和空間局部性,可以有效發(fā)現(xiàn)程序中影響程序訪存性能的瓶頸,幫助優(yōu)化程序性能,提高程序效率。
[0004]在現(xiàn)有技術(shù)中,目前獲取程序的訪問局部性,主要通過動態(tài)插樁技術(shù)獲取。該方法主要是在程序內(nèi)部插入用戶代碼,然后在程序運行時定期中斷程序的執(zhí)行,獲取程序的訪存?目息,包括各級緩存訪問缺失率、內(nèi)存帶寬利用率等。但是由于所有?目息都需要動態(tài)獲取,收集過程的開銷很大;且每次收集時,需要中斷程序的執(zhí)行,導致程序的執(zhí)行時間變長甚至程序行為發(fā)生變化,因此收集的程序訪存行為和真實程序的訪存行為可能存在差異。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例所要解決的技術(shù)問題在于,提供一種收集方法及裝置。以解決收集程序的局部性信息結(jié)果不準確且收集過程中開銷大的問題。
[0006]為了解決上述技術(shù)問題,本發(fā)明實施例第一方面提供了一種收集方法,包括:
[0007]構(gòu)建程序中每個過程的控制流圖和數(shù)據(jù)流圖,識別每個過程的變量訪問語句,收集每個過程中的變量訪問語句的程序局部性信息;
[0008]構(gòu)建程序的調(diào)用流圖,根據(jù)所述調(diào)用流圖對所述程序進行遍歷,收集各個變量訪問語句的訪問順序和親和性關(guān)系。
[0009]在第一方面的第一種可能的實現(xiàn)方式中,在所述各個變量訪問語句插樁函數(shù),以便在所述程序運行時收集所述各個變量訪問語句的訪問頻率;
[0010]以預設(shè)頻率讀取所述程序的函數(shù)棧,輸出所述程序每次執(zhí)行時的函數(shù)調(diào)用路徑;
[0011]對所述函數(shù)調(diào)用路徑進行排序,獲取所述程序的關(guān)鍵路徑;
[0012]采用處理器計數(shù)器技術(shù),收集按照各個變量訪問語句訪問順序生成的路徑上的訪
存信息。
[0013]結(jié)合第一方面或結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,在構(gòu)建程序的調(diào)用流圖,根據(jù)所述調(diào)用流圖對所述程序進行遍歷之后,還包括:
[0014]將所述每個過程中的變量訪問語句的程序局部性信息傳輸至所有過程。
[0015]結(jié)合第一方面或結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述變量訪問語句包括全局變量訪問語句、預先標記的變量訪問語句或堆內(nèi)存訪問語句。
[0016]在第一方面的第四種可能的實現(xiàn)方式中,所述根據(jù)所述調(diào)用流圖對所述程序進行遍歷,包括:
[0017]根據(jù)所述調(diào)用流圖對所述程序進行自頂向下或自底向上的遍歷。
[0018]相應(yīng)地,本發(fā)明實施例第二方面還提供了一種收集裝置,包括:
[0019]構(gòu)建單元,用于構(gòu)建程序中每個過程的控制流圖和數(shù)據(jù)流圖以及構(gòu)建程序的調(diào)用流圖;
[0020]識別單元,用于識別每個過程的變量訪問語句;
[0021]收集單元,用于收集每個過程中的變量訪問語句的程序局部性信息,以及根據(jù)所述調(diào)用流圖對所述程序進行遍歷,收集各個變量訪問語句的訪問順序和親和性關(guān)系。
[0022]在第二方面的第一種可能的實現(xiàn)方式中,還包括:
[0023]插樁單元,用于在所述各個變量訪問語句插樁函數(shù),以便在所述程序運行時收集所述各個變量訪問語句的訪問頻率;
[0024]路徑獲取單元,用于以預設(shè)頻率讀取所述程序的函數(shù)棧,輸出所述程序每次執(zhí)行時的函數(shù)調(diào)用路徑,對所述函數(shù)調(diào)用路徑進行排序,獲取所述程序的關(guān)鍵路徑;
[0025]動態(tài)采集單元,用于采用處理器計數(shù)器技術(shù),收集按照各個變量訪問語句訪問順序生成的路徑上的訪存信息。
[0026]結(jié)合第二方面或結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述收集單元還用于將所述每個過程中的變量訪問語句的程序局部性信息傳輸至所有過程。
[0027]結(jié)合第二方面或結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述變量訪問語句包括全局變量訪問語句、預先標記的變量訪問語句或堆內(nèi)存訪問語句。
[0028]在第二方面的第四種可能的實現(xiàn)方式中,所述收集單元根據(jù)所述調(diào)用流圖對所述程序進行遍歷,包括:[0029]所述收集單元根據(jù)所述調(diào)用流圖對所述程序進行自頂向下或自底向上的遍歷。
[0030]實施本發(fā)明實施例,具有如下有益效果:
[0031]通過在靜態(tài)時分析程序中過程內(nèi)變量訪問語句的親和性信息,以及分析過程間各個變量訪問語句的訪問順序,從而獲取變量訪問語句的親和性信息,結(jié)果準確,且對程序動態(tài)執(zhí)行造成影響很小,為調(diào)整程序的數(shù)據(jù)訪問順序,優(yōu)化程序的訪存模式提供了指導,利于提聞程序的緩存命中率,提升程序的性能。
【專利附圖】
【附圖說明】
[0032]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0033]圖1是本發(fā)明收集方法的第一實施例的流程示意圖;
[0034]圖2是本發(fā)明收集方法的第二實施例的流程示意圖;
[0035]圖3是本發(fā)明收集裝置的第一實施例的組成示意圖;
[0036]圖4是本發(fā)明收集裝置的第二實施例的組成示意圖。
【具體實施方式】
[0037]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0038]請參照圖1,為本發(fā)明收集方法的第一實施例的流程示意圖,在本實施例中,所述方法包括以下步驟:
[0039]S101,構(gòu)建程序中每個過程的控制流圖和數(shù)據(jù)流圖,識別每個過程的變量訪問語句,收集每個過程中的變量訪問語句的程序局部性信息。
[0040]具體地,此步驟可在編譯器的過程內(nèi)分析階段進行,其中,所述變量訪問語句可以是全局變量訪問語句、由人為預先標記的變量訪問語句或者堆內(nèi)存訪問語句。
[0041]根據(jù)過程為單位進行變量訪問語句的程序局部性信息收集,其中可包括變量訪問語句的時間局部性信息和空間局部性信息。
[0042]S102,構(gòu)建程序的調(diào)用流圖,根據(jù)所述調(diào)用流圖對所述程序進行遍歷,收集各個變量訪問語句的訪問順序。
[0043]在對每個過程內(nèi)的情況進行分析之后,可在編譯器的過程間分析階段,根據(jù)所述調(diào)用流圖對所述程序進行自頂向下或自底向上的遍歷。
[0044]優(yōu)選地,可將所述每個過程中的變量訪問語句的程序局部性信息傳輸至所有過程,以便收集到更加準確的過程間的程序局部性信息。
[0045]尤其對于堆內(nèi)存而言,可按照程序訪問的順序,輸出堆內(nèi)存訪問語句的親和性信息以便收集所述堆內(nèi)存訪問語句的程序局部性信息。
[0046]在本實施例中,通過在靜態(tài)時分析程序中過程內(nèi)變量訪問語句的親和性信息,以及分析過程間各個變量訪問語句的訪問順序,從而獲取變量訪問語句的親和性信息,結(jié)果準確,且對程序動態(tài)執(zhí)行造成影響很小,為調(diào)整程序的數(shù)據(jù)訪問順序,優(yōu)化程序的訪存模式提供了指導,利于提高程序的緩存命中率,提升程序的性能。
[0047]請參照圖2,為本發(fā)明收集方法的第二實施例的流程示意圖,在本實施例中,所述方法包括以下步驟:
[0048]S201,構(gòu)建程序中每個過程的控制流圖和數(shù)據(jù)流圖,識別每個過程的變量訪問語句,收集每個過程中的變量訪問語句的程序局部性信息。
[0049]S202,構(gòu)建程序的調(diào)用流圖,根據(jù)所述調(diào)用流圖對所述程序進行遍歷,收集各個變量訪問語句的訪問順序。
[0050]S203,在所述各個變量訪問語句插樁函數(shù)。
[0051]S204,在所述程序運行時收集所述各個變量訪問語句的訪問頻率。
[0052]S205,以預設(shè)頻率讀取所述程序的函數(shù)棧,輸出所述程序每次執(zhí)行時的函數(shù)調(diào)用路徑,對所述函數(shù)調(diào)用路徑進行排序,獲取所述程序的關(guān)鍵路徑。
[0053]具體地,所述預設(shè)頻率可以通過用戶態(tài)定時器來配置。
[0054]其中,在對所述函數(shù)調(diào)用路徑進行排序時,可以根據(jù)函數(shù)調(diào)用路徑的時間先后順序進行排序,也可以根據(jù)函數(shù)調(diào)用路徑的訪問頻率進行排序。
[0055]S206,采用處理器計數(shù)器技術(shù),收集所述按照各個變量訪問語句訪問順序生成的路徑上的訪存信息。
[0056]此處訪存信息可以包括緩存訪問缺失率、浮點指令個數(shù)、內(nèi)存帶寬利用率等信息。
[0057]需要說明的是,步驟S204-S206可以并列同時進行,當然,也可以單獨依次進行。例如,當S205和S206并列同時進行時,可以收集按照各個變量訪問語句訪問順序生成的路徑上的訪存信息,再結(jié)合獲取到的關(guān)鍵路徑,將關(guān)鍵路徑與按照各個變量訪問語句訪問順序生成的路徑進行比對,即可以獲取到關(guān)鍵路徑的訪存信息;而當S205和S206單獨依次進行時,當然也可以在獲取到所述程序的關(guān)鍵路徑之后,可以對關(guān)鍵路徑上的緩存訪問缺失率、浮點指令個數(shù)、內(nèi)存帶寬利用率等訪存信息進行收集以便確定最終緩存的內(nèi)容或補充緩存缺失的內(nèi)容,最終提升程序的性能。
[0058]在本實施例中,通過步驟S201-S202的靜態(tài)分析,可以獲知程序中過程內(nèi)以及過程間的變量訪問語句的程序局部性信息,類似由單獨的點擴展到點與點組成的線及網(wǎng)絡(luò);再結(jié)合步驟S203-S206的動態(tài)分析,可以獲知程序執(zhí)行過程中變量訪問語句的訪問頻率信息,類似由點與點之間的單次連接的線與網(wǎng)絡(luò)擴展為點與點之間的多次連接的線與網(wǎng)絡(luò);從而提聞程序的緩存命中率,提聞程序的整體性能。
[0059]請參照圖3,為本發(fā)明收集裝置的第一實施例的組成示意圖,在本實施例中,所述裝置包括:
[0060]構(gòu)建單元100,用于構(gòu)建程序中每個過程的控制流圖和數(shù)據(jù)流圖以及構(gòu)建程序的調(diào)用流圖;
[0061]識別單元200,用于識別每個過程的變量訪問語句;
[0062]收集單元300,用于收集每個過程中的變量訪問語句的程序局部性信息,以及根據(jù)所述調(diào)用流圖對所述程序進行遍歷,收集各個變量訪問語句的訪問順序。
[0063]優(yōu)選地,所述收集單元300還用于將所述每個過程中的變量訪問語句的程序局部性信息傳輸至所有過程。
[0064]其中,所述變量訪問語句包括全局變量訪問語句、預先標記的變量訪問語句或堆內(nèi)存訪問語句。
[0065]所述收集單元300根據(jù)所述調(diào)用流圖對所述程序進行遍歷,包括:
[0066]所述收集單元300根據(jù)所述調(diào)用流圖對所述程序進行自頂向下或自底向上的遍歷。
[0067]請參照圖4,為本發(fā)明收集裝置的第二實施例的組成示意圖,在本實施例中,所述裝置包括:
[0068]構(gòu)建單元100,用于構(gòu)建程序中每個過程的控制流圖和數(shù)據(jù)流圖以及構(gòu)建程序的調(diào)用流圖;
[0069]識別單元200,用于識別每個過程的變量訪問語句;
[0070]收集單元300,用于收集每個過程中的變量訪問語句的程序局部性信息,以及根據(jù)所述調(diào)用流圖對所述程序進行遍歷,收集各個變量訪問語句的訪問順序。
[0071]插樁單元400,用于在所述各個變量訪問語句插樁函數(shù),以便在所述程序運行時收集所述各個變量訪問語句的訪問頻率;
[0072]路徑獲取單元500,用于以預設(shè)頻率讀取所述程序的函數(shù)棧,輸出所述程序每次執(zhí)行時的函數(shù)調(diào)用路徑,對所述函數(shù)調(diào)用路徑進行排序,獲取所述程序的關(guān)鍵路徑;
[0073]動態(tài)采集單元600,用于采用處理器計數(shù)器技術(shù),收集按照各個變量訪問語句訪問順序生成的路徑上的訪存信息。
[0074]其中,處理器計數(shù)器可以集成在所述動態(tài)采集單元600內(nèi),也可以獨立設(shè)置,由所述動態(tài)采集單元600控制處理器計數(shù)器工作以便收集按照各個變量訪問語句訪問順序生成的路徑上的訪存信息。當然,所述動態(tài)采集單元600也可以與所述路徑獲取單元500相連,在所述路徑獲取單元500獲取到關(guān)鍵路徑后,直接收集所述關(guān)鍵路徑的訪存信息即可。
[0075]優(yōu)選地,所述收集單元300還用于將所述每個過程中的變量訪問語句的程序局部性信息傳輸至所有過程。
[0076]其中,所述變量訪問語句包括全局變量訪問語句、預先標記的變量訪問語句或堆內(nèi)存訪問語句。
[0077]所述收集單元300根據(jù)所述調(diào)用流圖對所述程序進行遍歷,包括:
[0078]所述收集單元300根據(jù)所述調(diào)用流圖對所述程序進行自頂向下或自底向上的遍歷。
[0079]需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其它實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
[0080]通過上述實施例的描述,本發(fā)明具有以下優(yōu)點:
[0081]通過在靜態(tài)時分析程序中過程內(nèi)變量訪問語句的親和性信息,以及分析過程間各個變量訪問語句的訪問順序,從而獲取變量訪問語句的親和性信息,結(jié)果準確,且對程序動態(tài)執(zhí)行造成影響很小,為調(diào)整程序的數(shù)據(jù)訪問順序,優(yōu)化程序的訪存模式提供了指導,利于提聞程序的緩存命中率,提升程序的性能。[0082]本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,簡稱ROM)或隨機存儲記憶體(RandomAccess Memory,簡稱 RAM)等。
[0083]以上所揭露的僅為本發(fā)明較佳實施例而已,當然不能以此來限定本發(fā)明之權(quán)利范圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
【權(quán)利要求】
1.一種收集方法,其特征在于,包括:構(gòu)建程序中每個過程的控制流圖和數(shù)據(jù)流圖,識別每個過程的變量訪問語句,收集每個過程中的變量訪問語句的程序局部性信息;構(gòu)建程序的調(diào)用流圖,根據(jù)所述調(diào)用流圖對所述程序進行遍歷,收集各個變量訪問語句的訪問順序和親和性關(guān)系。
2.如權(quán)利要求1所述的方法,其特征在于,還包括:在所述各個變量訪問語句插樁函數(shù),以便在所述程序運行時收集所述各個變量訪問語句的訪問頻率; 以預設(shè)頻率讀取所述程序的函數(shù)棧,輸出所述程序每次執(zhí)行時的函數(shù)調(diào)用路徑;對所述函數(shù)調(diào)用路徑進行排序,獲取所述程序的關(guān)鍵路徑;采用處理器計數(shù)器技術(shù),收集按照各個變量訪問語句訪問順序生成的路徑上的訪存信肩、Ο
3.如權(quán)利要求1或2所述的方法,其特征在于,在構(gòu)建程序的調(diào)用流圖,根據(jù)所述調(diào)用流圖對所述程序進行遍歷之后,還包括:將所述每個過程中的變量訪問語句的程序局部性信息傳輸至所有過程。
4.如權(quán)利要求所述1或2所述的方法,其特征在于,所述變量訪問語句包括全局變量訪問語句、預先標記的變量訪問語句或堆內(nèi)存訪問語句。
5.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述調(diào)用流圖對所述程序進行遍歷,包括:根據(jù)所述調(diào)用流圖對所述程序進行自頂向下或自底向上的遍歷。
6.一種收集裝置,其特征在于,包括:構(gòu)建單元,用于構(gòu)建程序中每個過程的控制流圖和數(shù)據(jù)流圖以及構(gòu)建程序的調(diào)用流圖;識別單元,用于識別每個過程的變量訪問語句;收集單元,用于收集每個過程中的變量訪問語句的程序局部性信息,以及根據(jù)所述調(diào)用流圖對所述程序進行遍歷,收集各個變量訪問語句的訪問順序和親和性關(guān)系。
7.如權(quán)利要求6所述的收集裝置,其特征在于,還包括:插樁單元,用于在所述各個變量訪問語句插樁函數(shù),以便在所述程序運行時收集所述各個變量訪問語句的訪問頻率;路徑獲取單元,用于以預設(shè)頻率讀取所述程序的函數(shù)棧,輸出所述程序每次執(zhí)行時的函數(shù)調(diào)用路徑,對所述函數(shù)調(diào)用路徑進行排序,獲取所述程序的關(guān)鍵路徑;動態(tài)采集單元,用于采用處理器計數(shù)器技術(shù),收集按照各個變量訪問語句訪問順序生成的路徑上的訪存信息。
8.如權(quán)利要求6或7所述的收集裝置,其特征在于,所述收集單元還用于將所述每個過程中的變量訪問語句的程序局部性信息傳輸至所有過程。
9.如權(quán)利要求6或7所述的收集裝置,其特征在于,所述變量訪問語句包括全局變量訪問語句、預先標記的變量訪問語句或堆內(nèi)存訪問語句。
10.如權(quán)利要求所述的,其特征在于,所述收集單元根據(jù)所述調(diào)用流圖對所述程序進行遍歷,包括:所述收集單元根據(jù)所述調(diào)用流圖對所述程序進行自頂向下或自底向上的遍歷。
【文檔編號】G06F9/48GK103729244SQ201310695010
【公開日】2014年4月16日 申請日期:2013年12月17日 優(yōu)先權(quán)日:2013年12月17日
【發(fā)明者】謝江帆, 張建華, 李繼忠, 翟季冬 申請人:華為技術(shù)有限公司