專利名稱:提供關(guān)聯(lián)關(guān)系并執(zhí)行代碼優(yōu)化的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機執(zhí)行性能的優(yōu)化,更具體而言,涉及跨物理平臺進行的性能優(yōu)化。
背景技術(shù):
信息技術(shù)的發(fā)展對計算機的執(zhí)行性能提出了越來越高的要求。實踐中,執(zhí)行性能不僅依賴于計算機的物理平臺,還取決于軟件應(yīng)用在執(zhí)行時對物理平臺的利用效率。如果軟件和硬件之間具有良好的協(xié)同性(synergy),也就是,軟件應(yīng)用能夠充分地利用物理平臺的執(zhí)行能力,才會獲得比較高的執(zhí)行性能。 為了提高執(zhí)行性能,在開發(fā)和運行軟件應(yīng)用時,往往需要對軟件應(yīng)用進行優(yōu)化,使其更好地適配于硬件平臺。具體地,在軟件代碼執(zhí)行過程中,處理器會對指令的執(zhí)行情況進行采樣和記錄,形成性能采樣數(shù)據(jù)。該性能采樣數(shù)據(jù)可以反映出指令執(zhí)行時發(fā)生的與硬件性能相關(guān)的行為和事件。通過分析這樣的性能采樣數(shù)據(jù),可以獲知特定指令在特定硬件平臺上的執(zhí)行狀況。基于獲得的執(zhí)行狀況,就可以對指令代碼進行優(yōu)化,消除引起性能缺陷的事件,從而提聞執(zhí)行性能。具體而言,現(xiàn)有的多種處理器單元都可以提供硬件信號來指示出硬件性能事件。為了獲取這些性能事件,可以在硬件平臺上設(shè)置性能監(jiān)視單元,該監(jiān)視單元包含多種專用的硬件性能計數(shù)器,每個計數(shù)器通過轉(zhuǎn)換器連接到一個硬件信號。OS內(nèi)核中運行的采樣器可以對這些計數(shù)器進行采樣,上述采樣可以周期性地進行或由性能監(jiān)視器的溢出異常來觸發(fā)。采樣日志可以存儲在內(nèi)存緩沖之中,最后寫入一個文檔,由此形成性能采樣數(shù)據(jù)。典型地,根據(jù)不同的硬件結(jié)構(gòu),在處理器中可能發(fā)生幾十甚至上千種不同的硬件性能事件。這樣的事件例如包括,指令高速緩存不命中(ICacheMiss),數(shù)據(jù)高速緩存不命中(DCacheMiss), TLB不命中(TLBMiss),指令流水線中止(Stall),流水線等待(Recycle),等等。事件的類型主要依賴于處理器的物理結(jié)構(gòu)。這些事件會改變處理器的狀態(tài),是影響執(zhí)行性能的重要因素。圖I示出一個典型的性能采樣數(shù)據(jù)的例子。在圖I的例子中,性能采樣數(shù)據(jù)被安排為一個表格,表格的每個條目,例如每行,示出一個指令的執(zhí)行情況,包括指令的信息和與該指令相關(guān)的性能事件統(tǒng)計。指令的信息包括,例如,指令的模塊名稱(Mod),指令地址(Addr),(跳轉(zhuǎn)指令的)目標地址(TargetAddr),指令操作碼(Opcode),操作數(shù)(Operand),采樣數(shù)(ticks)等;與該指令相關(guān)的性能事件統(tǒng)計包括發(fā)生如上所述的ICacheMiss,DCacheMiss, TLBMiss, Stall, Recycle等事件的采樣信息。可以理解,根據(jù)物理平臺的結(jié)構(gòu)和性能監(jiān)視單元的配置,性能采樣數(shù)據(jù)可以包含更多的或不同的性能事件。一般地,所記錄的至少一部分性能事件與指令執(zhí)行時的性能缺陷有關(guān)。例如,圖I中記錄的各種高速緩沖不命中(CacheMiss)事件會使得處理器不能直接從高速緩沖中讀取數(shù)據(jù),流水線的Stall和Recycle事件會使得指令流的執(zhí)行暫時地掛起或等待,等等。這些事件的發(fā)生都會使得處理器的執(zhí)行速度和效率降低,引起性能缺陷,因此可以將這類事件稱為性能缺陷事件。
因此,通過分析以上的性能采樣數(shù)據(jù),獲得與性能缺陷相關(guān)的指令信息,就有可能克服這些缺陷,從而對代碼進行優(yōu)化,提高處理器的執(zhí)行性能。圖2示出現(xiàn)有技術(shù)中進行代碼優(yōu)化的示意圖。如圖所示,在同一物理平臺上提供有優(yōu)化器和執(zhí)行單元。各種代碼,包括軟件應(yīng)用的源代碼、中間代碼或轉(zhuǎn)化之后的二進制代碼,首先被輸入到優(yōu)化器中。如果代碼是首次執(zhí)行,那么優(yōu)化器直接將代碼轉(zhuǎn)送到執(zhí)行單元。在執(zhí)行單元執(zhí)行這些代碼的過程中,如上所述,性能監(jiān)視單元會生成與代碼執(zhí)行相關(guān)的性能采樣數(shù)據(jù)。一旦獲得這樣的性能采樣數(shù)據(jù),優(yōu)化器就可以通過分析性能采樣數(shù)據(jù)而獲得與性能缺陷相關(guān)的事件?;谛阅苋毕菔录?,優(yōu)化器可以對代碼進行調(diào)整和優(yōu)化,來試圖消除或減小性能缺陷事件。接著,優(yōu)化器將經(jīng)過優(yōu)化的代碼再次傳送到執(zhí)行單元進行執(zhí)行,從而再次生成性能采樣數(shù)據(jù)。通過再次分析性能采樣數(shù)據(jù),優(yōu)化器再次對代碼進行優(yōu)化,進一步去除性能缺陷。于是,經(jīng)過這樣的反復(fù)執(zhí)行和調(diào)整,可以使得軟件應(yīng)用的代碼更好地適合于執(zhí)行平臺。
在圖2所示的優(yōu)化過程中,代碼的優(yōu)化是基于對性能采樣數(shù)據(jù)的分析,而性能采樣數(shù)據(jù)是基于該代碼在特定平臺上的執(zhí)行而生成的,因此,必須要在目標物理平臺上首先對代碼進行執(zhí)行才可能對其進行優(yōu)化,執(zhí)行和優(yōu)化須在同一物理平臺上進行。然而,在實踐中,軟件應(yīng)用的開發(fā)通常由技術(shù)人員在開發(fā)平臺上進行,而其執(zhí)行則通常在客戶的硬件平臺上進行。由于執(zhí)行軟件應(yīng)用的硬件平臺的物理特征各種各樣,要針對每一硬件平臺進行代碼優(yōu)化就需要在各種平臺上進行代碼執(zhí)行,這必然產(chǎn)生非常昂貴的優(yōu)化成本。另一方面,性能采樣數(shù)據(jù)能夠反映出物理平臺上執(zhí)行的指令信息,因此,由開發(fā)人員在客戶的硬件平臺上執(zhí)行代碼優(yōu)化的方式有可能帶來安全方面的隱患,例如泄漏源代碼信息,或者泄漏客戶方面的機密信息。因此,現(xiàn)有的性能優(yōu)化方案在多方面存在不足。
發(fā)明內(nèi)容
鑒于以上提出的問題,本發(fā)明提出一種跨平臺進行性能優(yōu)化的方案,旨在克服現(xiàn)有技術(shù)中存在的至少一項問題。具體地,根據(jù)本發(fā)明第一方面,提出一種提供關(guān)聯(lián)關(guān)系的方法,包括獲取與第一代碼的執(zhí)行相關(guān)的性能采樣數(shù)據(jù),該性能采樣數(shù)據(jù)包括與所述第一代碼對應(yīng)的指令的信息和與所述指令對應(yīng)的性能缺陷事件的信息;根據(jù)所述性能采樣數(shù)據(jù),構(gòu)建至少一個指令序列,并確定所述至少一個指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系;以及,將所述關(guān)聯(lián)關(guān)系提供給其他物理平臺,以供在該其他物理平臺上基于所述關(guān)聯(lián)關(guān)系執(zhí)行第二代碼的優(yōu)化。根據(jù)本發(fā)明第二方面,提出一種執(zhí)行代碼優(yōu)化的方法,包括獲取如第一方面所提供的關(guān)聯(lián)關(guān)系;根據(jù)所述關(guān)聯(lián)關(guān)系,確定第~■代碼對應(yīng)的性能缺陷事件;以及基于確定的性能缺陷事件,優(yōu)化第二代碼。根據(jù)本發(fā)明第三方面,提出一種提供關(guān)聯(lián)關(guān)系的裝置,包括采樣數(shù)據(jù)獲取單元,配置為獲取與第一代碼的執(zhí)行相關(guān)的性能采樣數(shù)據(jù),該性能采樣數(shù)據(jù)包括與所述第一代碼對應(yīng)的指令的信息和與所述指令對應(yīng)的性能缺陷事件的信息;關(guān)聯(lián)關(guān)系確定單元,配置為根據(jù)所述性能采樣數(shù)據(jù),構(gòu)建至少一個指令序列,并確定所述至少一個指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系;以及,關(guān)聯(lián)關(guān)系提供單元,配置為將所述關(guān)聯(lián)關(guān)系提供給其他物理平臺,以供在該其他物理平臺上基于所述關(guān)聯(lián)關(guān)系執(zhí)行第二代碼的優(yōu)化。根據(jù)本發(fā)明第四方面,提出一種執(zhí)行代碼優(yōu)化的裝置,包括關(guān)聯(lián)關(guān)系獲取單元,配置為獲取如第三方面的裝置所提供的關(guān)聯(lián)關(guān)系;缺陷確定單元,配置為根據(jù)所述關(guān)聯(lián)關(guān)系,確定第二代碼對應(yīng)的性能缺陷事件;以及代碼優(yōu)化單元,配置為基于確定的性能缺陷事件,優(yōu)化第二代碼利用本發(fā)明的方法和裝置,可以基于在目標物理平臺上生成的指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系,在開發(fā)平臺上對開發(fā)代碼進行優(yōu)化,使其更好地適合于目標平臺,從而實現(xiàn)跨平臺的性能優(yōu)化,并使得優(yōu)化過程更加便利高效。
圖I示出一個典型的性能采樣數(shù)據(jù)的例子;圖2示出現(xiàn)有技術(shù)中進行代碼優(yōu)化的示意圖;圖3示出根據(jù)本發(fā)明一個實施例的提供關(guān)聯(lián)關(guān)系的方法的流程圖;·
圖4示出根據(jù)本發(fā)明一個實施例的執(zhí)行代碼優(yōu)化的方法的流程圖;圖5A示出根據(jù)本發(fā)明一個實施例的確定關(guān)聯(lián)關(guān)系的子步驟;圖5B示出根據(jù)本發(fā)明另一實施例的確定關(guān)聯(lián)關(guān)系的子步驟;圖6示出根據(jù)本發(fā)明一個實施例對指令序列進行激烈和編碼的例子;圖7示出根據(jù)本發(fā)明一個實施例的關(guān)聯(lián)關(guān)系的示意圖;圖8示出根據(jù)本發(fā)明一個實施例的確定性能缺陷事件的子步驟;圖9A示出根據(jù)本發(fā)明一個實施例的提供關(guān)聯(lián)關(guān)系的裝置的示意框圖;圖9B示出根據(jù)本發(fā)明一個實施例的執(zhí)行代碼優(yōu)化的裝置的示意框圖;圖10示出適于用來實現(xiàn)本發(fā)明實施方式的示例性計算系統(tǒng)100的框圖。
具體實施例方式下面對本發(fā)明的具體實施方式
進行詳細描述。所屬技術(shù)領(lǐng)域的技術(shù)人員知道,本發(fā)明的多個方面可以體現(xiàn)為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本發(fā)明的多個方面可以具體實現(xiàn)為以下形式,即,可以是完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等)、或者本文一般稱為“電路”、“模塊”或“系統(tǒng)”的軟件部分與硬件部分的組合。此外,本發(fā)明的多個方面還可以采取體現(xiàn)在一個或多個計算機可讀介質(zhì)中的計算機程序產(chǎn)品的形式,該計算機可讀介質(zhì)中包含計算機可用的程序碼。可以使用一個或多個計算機可讀的介質(zhì)的任何組合。計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)或者計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)例如可以是一但不限于——電的、磁的、光的、電磁的、紅外線的、或半導(dǎo)體的系統(tǒng)、裝置、器件或任何以上的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括以下有一個或多個導(dǎo)線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任何合適的組合。在本文件的語境中,計算機可讀存儲介質(zhì)可以是任何包含或存儲程序的有形的介質(zhì),該程序被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。計算機可讀的信號介質(zhì)可包括在基帶中或者作為載波一部分傳播的、其中體現(xiàn)計算機可讀的程序碼的傳播的數(shù)據(jù)信號。這種傳播的信號可以采用多種形式,包括——但不限于一電磁信號、光信號或任何以上合適的組合。計算機可讀的信號介質(zhì)可以是并非為計算機可讀存儲介質(zhì)、但是能發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序的任何計算機可讀介質(zhì)。計算機可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括一但不限于——無線、電線、光纜、RF等等,或者任何合 適的上述組合。用于執(zhí)行本發(fā)明的操作的計算機程序碼,可以以一種或多種程序設(shè)計語言的任何組合來編寫,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言-諸如Java、Smalltalk、C++之類,還包括常規(guī)的過程式程序設(shè)計語言-諸如“C”程序設(shè)計語言或類似的程序設(shè)計語言。程序碼可以完全地在用戶的計算上執(zhí)行、部分地在用戶的計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶的計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務(wù)器上執(zhí)行。在后一種情形中,遠程計算機可以通過任何種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)-連接到用戶的計算機,或者,可以(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng))連接到外部計算機。以下參照按照本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明的多個方面。要明白的是,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,使得通過計算機或其它可編程數(shù)據(jù)處理裝置執(zhí)行的這些指令,產(chǎn)生實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。也可以把這些計算機程序指令存儲在能指令計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質(zhì)中,這樣,存儲在計算機可讀介質(zhì)中的指令產(chǎn)生一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instruction means)的制造品。也可以把計算機程序指令加載到計算機或其它可編程數(shù)據(jù)處理裝置上,使得在計算機或其它可編程數(shù)據(jù)處理裝置上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而在計算機或其它可編程裝置上執(zhí)行的指令就提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。下面參照附圖,結(jié)合具體實施例對本發(fā)明進行描述。這樣的描述僅僅出于說明目的,而不意圖對本發(fā)明的范圍進行限制。在本發(fā)明的多個實施例中,通過分析目標物理平臺的性能采樣數(shù)據(jù),來獲得指令序列與性能缺陷之間的關(guān)聯(lián)關(guān)系,接著,在開發(fā)平臺上利用獲得的關(guān)聯(lián)關(guān)系來優(yōu)化代碼,從而實現(xiàn)跨平臺的性能優(yōu)化。如前所述,性能采樣數(shù)據(jù)可以反映出指令執(zhí)行時發(fā)生的與硬件性能相關(guān)的行為和事件,其緊密地依賴于物理平臺的硬件特征和該物理平臺上執(zhí)行的代碼。也就是說,性能采樣數(shù)據(jù)同時體現(xiàn)了物理平臺的硬件特征和執(zhí)行的代碼特征。這也正是現(xiàn)有技術(shù)中必須先執(zhí)行代碼、產(chǎn)生對應(yīng)的性能采樣數(shù)據(jù),才能根據(jù)該采樣數(shù)據(jù)優(yōu)化代碼的原因。然而,在本發(fā)明的實施例中,通過分析性能采樣數(shù)據(jù),從中發(fā)掘出與指令序列和性能缺陷事件相關(guān)的統(tǒng)計規(guī)律,而獲得指令序列和性能缺陷之間的關(guān)聯(lián)關(guān)系,這樣的關(guān)聯(lián)關(guān)系僅僅反映出物理平臺的硬件特征,而與所執(zhí)行的代碼無關(guān)?;谶@樣的關(guān)聯(lián)關(guān)系,就可以在開發(fā)平臺上進行代碼優(yōu)化,使得優(yōu)化的代碼更好地適合于目標物理平臺,從而實現(xiàn)跨平臺的性能優(yōu)化。下面結(jié)合附圖和例子具體描述本發(fā)明的實施例。根據(jù)本發(fā)明的實施例,跨平臺進行性能優(yōu)化的過程可以劃分為兩個階段,S卩,在第一物理平臺(例如目標物理平臺)上執(zhí)行的提供關(guān)聯(lián)關(guān)系的方法,以及在第二物理平臺(例如開發(fā)物理平臺)上執(zhí)行的基于關(guān)聯(lián)關(guān)系進行代碼優(yōu)化的方法。圖3示出根據(jù)本發(fā)明一個實施例的提供關(guān)聯(lián)關(guān)系的方法的流程圖。該流程圖中的步驟可在第一物理平臺上執(zhí)行。具體地,如圖所示,在步驟30,獲取與第一代碼的執(zhí)行相關(guān)的性能采樣數(shù)據(jù),該性能采樣數(shù)據(jù)包括與所述第一代碼對應(yīng)的指令的信息和與所述指令對應(yīng)的性能缺陷事件的信息;在步驟32,根據(jù)所述性能采樣數(shù)據(jù),構(gòu)建指令序列,并確定指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系;以及,在步驟34,將所述關(guān)聯(lián)關(guān)系提供給其他物理平臺,以供在該其他物理平臺上基于所述關(guān)聯(lián)關(guān)系執(zhí)行第二代碼的優(yōu)化。 基于如此提供的關(guān)聯(lián)關(guān)系,就可以進行代碼優(yōu)化,從而提高執(zhí)行性能。圖4示出根據(jù)本發(fā)明一個實施例的執(zhí)行代碼優(yōu)化的方法的流程圖。該流程圖中的步驟可在第二物理平臺上執(zhí)行。具體地,如圖4所示,在步驟40,獲取如圖3方法所提供的關(guān)聯(lián)關(guān)系;在步驟42,根據(jù)所述關(guān)聯(lián)關(guān)系,確定第二代碼對應(yīng)的性能缺陷事件;以及在步驟44,基于確定的性能缺陷事件,優(yōu)化第二代碼,從而優(yōu)化第二代碼在第一物理平臺上的執(zhí)行性能。以下結(jié)合具體例子描述以上實施例的各個步驟。首先,在步驟30,在第一物理平臺上獲取與第一代碼的執(zhí)行相關(guān)的性能采樣數(shù)據(jù)。第一物理平臺可以是性能優(yōu)化所針對的目標物理平臺;第一代碼可以是第一物理平臺上執(zhí)行的任意代碼,包括各種軟件、應(yīng)用、程序的源代碼、中間代碼、二進制代碼等。如前所述,現(xiàn)有的多種物理平臺都提供有性能監(jiān)視單元,用于對處理器產(chǎn)生的指示出硬件性能事件的信號進行采集和計數(shù)。同時,OS內(nèi)核中運行的采樣器可以對上述計數(shù)進行采樣。在一個實施例中,為了獲取性能采樣數(shù)據(jù),在步驟30中,在處理器執(zhí)行第一代碼期間,直接從上述采樣器實時地讀取采樣結(jié)果,將采樣結(jié)果進行匯聚和整理,從而獲得性能采樣數(shù)據(jù)。在另外的執(zhí)行方式中,采樣器會周期性地生成采樣日志,并將其存儲在內(nèi)存緩沖之中,或者進一步地將采樣日志從內(nèi)存緩沖中讀出,寫入一個文檔,并將其存儲在硬盤特定位置。在此情況下,在步驟30中,可以直接從內(nèi)存緩沖或硬盤的特定位置讀取采樣日志,將該采樣日志形成為性能采樣數(shù)據(jù)。如前所述,性能采樣數(shù)據(jù)一般地包含有指令信息和相關(guān)的性能事件。相應(yīng)地,通過以上的步驟30獲得的性能采樣數(shù)據(jù)會包括第一代碼執(zhí)行期間對應(yīng)的指令,以及這些指令所導(dǎo)致的性能事件,包括性能缺陷事件。具體地,所獲得的性能采樣數(shù)據(jù)可以如圖I的例子所示。然而,本領(lǐng)域技術(shù)人員可以理解,性能采樣數(shù)據(jù)的內(nèi)容依賴于物理平臺的結(jié)構(gòu)、物理平臺上執(zhí)行的指令代碼、性能監(jiān)視單元和采樣器的配置等多種因素。隨著這些因素的不同,步驟30中獲取的性能采樣數(shù)據(jù)相對于圖I的示例可以包含更多的和/或不同的指令信息和性能事件。接著,基于獲得的性能采樣數(shù)據(jù),在步驟32中對這些采樣數(shù)據(jù)進行分析,從中構(gòu)建指令序列,并發(fā)掘出指令序列導(dǎo)致性能缺陷的規(guī)律,也就是,確定出指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系,使得這樣的關(guān)聯(lián)關(guān)系反映出第一物理平臺的硬件特征而與其上執(zhí)行的代碼(例如,第一代碼)無關(guān)。上述關(guān)聯(lián)關(guān)系的分析和確定可以通過多種方式來實現(xiàn)。具體地,圖5A示出根據(jù)本發(fā)明一個實施例的獲取上述關(guān)聯(lián)關(guān)系的步驟,也就是圖3中步驟32的子步驟。在該實施例中,通過統(tǒng)計指令序列的出現(xiàn)次數(shù)和性能事件的出現(xiàn)次數(shù)來獲得兩者之間的關(guān)聯(lián)關(guān)系。具體地,如圖所示,在步驟3211中,根據(jù)性能采樣數(shù)據(jù)構(gòu)建指令序列。如上所述,性能采樣數(shù)據(jù)一般按照指令的執(zhí)行順序記錄了所執(zhí)行的各個指令的信息,包括指令地址、操作碼等等,如圖I所示。對于沒有按照一般順序執(zhí)行的跳轉(zhuǎn)指令,性能采樣數(shù)據(jù)會記錄該指令的源地址和目標地址。因此,沿著性能采樣數(shù)據(jù)的記錄順序進行回溯,必要時按照源地址和目標地址進行跳轉(zhuǎn),就可以獲得指令的執(zhí)行路徑。根據(jù)這樣的執(zhí)行路徑,就可以獲得連續(xù)執(zhí)行的多個指令,由此構(gòu)建出由多個連續(xù)指令所構(gòu)成的指令序列。在一個例子中,指令序列以指令的操作內(nèi)容,更具體地,操作碼進行識別。例如,圖I的性能采樣數(shù)據(jù)中連續(xù)出現(xiàn)的L (load,加載),MVC (move,移動),XC (or,或運算)和ST (Store,存儲)就可以認為是一條指令序列。接著,在步驟3212中,統(tǒng)計各個指令序列在性能采樣數(shù)據(jù)中的出現(xiàn)次數(shù)。然后,在步驟3213,統(tǒng)計各個指令序列對應(yīng)的性能缺陷事件的出現(xiàn)次數(shù)。最后,在步驟3214,基于以上統(tǒng)計出的出現(xiàn)次數(shù)的比例,確定指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系。具體地,在該步驟中,可以確定出各個性能缺陷事件的出現(xiàn)次數(shù)相對于指令序·列的出現(xiàn)次數(shù)的比例,并將得到的比例與預(yù)定閾值相比較,根據(jù)比較結(jié)果確定指令序列與性能缺陷之間的關(guān)聯(lián)關(guān)系。例如,對于上述的L-MVC-XC-ST指令序列,假定在步驟3212中發(fā)現(xiàn),該指令序列在性能采樣數(shù)據(jù)中共出現(xiàn)了 100次。然后,在步驟3213中,通過核查性能采樣數(shù)據(jù)發(fā)現(xiàn),在執(zhí)行該序列中最后一條指令ST時,85次發(fā)生了 TLBMiss事件,5次出現(xiàn)了流水線Stall狀態(tài),2次出現(xiàn)了 ICacheMiss事件。那么,在步驟3214中可以確定,在執(zhí)行該指令序列時,有85 %的比例出現(xiàn)了 TLBMiss事件。假定預(yù)先設(shè)定的閾值比例為80 %,那么就可以確定,上述指令序列與TLBMiss這樣的性能缺陷事件之間存在關(guān)聯(lián)關(guān)系。在一個實施例中,還可以進一步引入關(guān)聯(lián)度來表征關(guān)聯(lián)關(guān)系的緊密程度。具體地,可以將上述出現(xiàn)次數(shù)的比例作為關(guān)聯(lián)度的值。可見,圖5A的實施例通過直接統(tǒng)計指令序列和性能缺陷事件的出現(xiàn)次數(shù)來確定其關(guān)聯(lián)關(guān)系。在許多情況下,指令序列的數(shù)目極為龐大(尤其是在不限制序列長度的情況下),使得上述統(tǒng)計步驟的計算效率不夠理想。因此,根據(jù)實際的計算資源,可以采用不同方式來實施步驟32,獲取上述關(guān)聯(lián)關(guān)系。在一個實施例中,在圖5A的統(tǒng)計各個指令序列的出現(xiàn)次數(shù)的步驟3212之后,根據(jù)上述出現(xiàn)次數(shù)選擇出頻繁出現(xiàn)的指令序列。所述頻繁出現(xiàn)的指令序列可以是出現(xiàn)次數(shù)超過特定閾值的指令序列。然后,在步驟3213,僅僅統(tǒng)計頻繁出現(xiàn)的指令序列所對應(yīng)的性能缺陷事件。這樣,忽略掉出現(xiàn)頻率不夠高,因而不太具有代表性的指令序列,節(jié)省一部分統(tǒng)計計
笪
ο在另一個實施例中,基于單個指令的性能事件來對指令序列進行初步篩選。具體地,對于性能采樣數(shù)據(jù)中的每個單獨的指令,獲得執(zhí)行該指令時出現(xiàn)的性能缺陷事件采樣次數(shù)相對于該指令的采樣次數(shù)的比例。如果該比例高于一預(yù)先設(shè)定的閾值,就把該指令作為可能導(dǎo)致性能缺陷事件的指令序列的結(jié)束指令。相應(yīng)地,從該指令開始,沿著指令執(zhí)行路徑向前追溯一定數(shù)目的步數(shù),從而得到候選的指令序列。例如,對于圖I中的第6行的指令MVC來說,該指令的采樣次數(shù)為14次,其中5次出現(xiàn)了 Recycle事件。假定這一比例高于預(yù)先設(shè)定的閾值,那么就可以認定,以MVC結(jié)尾的指令序列是有可能導(dǎo)致Recycle事件的序列。相應(yīng)地,從該MVC出發(fā),沿指令執(zhí)行路徑向前回溯就可以得到候選的可能導(dǎo)致Recycle的指令序列。另一方面,如果某個指令出現(xiàn)某種性能缺陷事件的比例低于上述閾值,就可以認為,該指令不太可能是導(dǎo)致該種性能缺陷事件的指令序列的結(jié)束指令,因而不必以該指令為起點進行回溯。由此,僅獲取那些有可能導(dǎo)致性能缺陷事件的候選指令序列,從而節(jié)省一部分統(tǒng)計和計算。對于獲取的候選指令序列,可以與圖5A實施例類似地對其進行統(tǒng)計計數(shù),從而最終確定指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系。可以理解,本領(lǐng)域技術(shù)人員可以根據(jù)實際需要將以上幾種實施例相結(jié)合,產(chǎn)生更多變體,來獲得指令序列和性能缺陷事件之間的關(guān)聯(lián)關(guān)系。替代地,與直接統(tǒng)計指令序列和性能缺陷事件的出現(xiàn)次數(shù)的方式不同地,在本發(fā)明另一實施例中,基于信息熵對指令序列進行聚類和分析,從而獲得指令序列與性能缺陷事件之間的關(guān)聯(lián)。圖5B示出根據(jù)該實施例的確定關(guān)聯(lián)關(guān)系的步驟。如圖5B所示,在該實施例中,獲取關(guān)聯(lián)關(guān)系的步驟包括步驟3221,構(gòu)建指令序列;步驟3222,選擇出現(xiàn)頻率較高的指令序列;步驟3223,基于信息熵對指令序列進行聚類和編碼;步驟3224,結(jié)合性能事件的統(tǒng)計選擇有辨識度的聚類;步驟3225,對選擇的聚類進行進一步劃分;在步驟3226,判斷此時的聚類是否達到預(yù)定條件,在沒有達到預(yù)定條件的情況下再次執(zhí)行步驟3222-3225,直到達到預(yù)定的條件。下面具體描述上述各個步驟。 在步驟3221中,從性能采樣數(shù)據(jù)中獲得指令執(zhí)行路徑,根據(jù)指令執(zhí)行路徑獲得多個指令序列。該步驟與圖5A的步驟3211相類似,不再贅述。接著,在步驟3222,選擇出現(xiàn)頻率較高的指令序列。具體地,可以將指令序列的出現(xiàn)次數(shù)與預(yù)定閾值相比較,選擇出那些出現(xiàn)次數(shù)超過閾值的指令序列;或者,可以將指令序列的出現(xiàn)次數(shù)進行排序,按照出現(xiàn)次數(shù)從高到低的順序選擇出特定數(shù)目的指令序列;還可以采用其他方式選擇出現(xiàn)頻率高的指令序列。接著,在步驟3223,基于信息熵對選擇出的指令序列進行聚類和編碼。信息熵是參考熱力學(xué)中熵的概念而對信息的確定性、混亂度做出的度量。一般來說,一個系統(tǒng)越是混舌L其中變量的不確定性越大,信息熵就越大;反之,一個系統(tǒng)越是有序,信息熵就越低?,F(xiàn)有技術(shù)中已經(jīng)提出了多種方法在數(shù)學(xué)上對信息熵進行近似和估計?;跀?shù)學(xué)上估計的信息熵,可以對指令序列進行聚類,使得聚類之后指令序列所構(gòu)成的系統(tǒng)的信息熵最小,也就是信息量最大。接著,對指令序列的聚類進行“編碼”,也就是用不同代碼來表示不同的類,從而便于后續(xù)的分析。在一個簡單的例子中,基于指令序列中第一個指令是否為L或MVC,結(jié)束指令是否為ST對指令序列進行聚類。具體地,如果指令序列的第一個指令為L或MVC,將該指令序列的首指令特征標注為I,否則為O ;如果結(jié)束指令為ST,將該指令序列的結(jié)束指令標注為I,否則為O。同時,如果指令序列的結(jié)束指令處的Stall事件的比例超過20%,則將Stall事件標注為Y,否則為N。由此,可以獲得圖6所示的表格??梢钥吹剑ㄟ^將指令序列進行聚類和編碼,更容易示出并發(fā)掘出指令序列的規(guī)律。接著,在步驟3224,結(jié)合性能事件的統(tǒng)計選擇有辨識度的聚類。具體地,統(tǒng)計以代碼進行標注的聚類與性能事件之間的關(guān)聯(lián)度,選擇出關(guān)聯(lián)度較大的聚類。仍以圖6的表格為例,可以看到,標注為H的聚類出現(xiàn)了 8次,其中6次Stall事件的標注為Y。這時,可選擇該聚類進行進一步分析,而不考慮其他聚類??梢岳斫?,由于對指令序列進行了聚類和編碼,我們損失了一部分的指令序列信息。例如,由于將所有首指令為L或MVC,結(jié)束指令為ST的指令序列都標注為1-1,我們損失了該聚類的其他特征。為此,在步驟3225,我們對選擇的序列聚類進行進一步劃分,恢復(fù)部分損失信息。例如,對步驟3224選擇的聚類1-1,將其進行進一步劃分,將首指令為L的指令序列分為一組,將首指令為MVC的指令分為另一組。對于每一組指令序列,在步驟3226,判斷該組指令序列是否達到預(yù)定條件,在沒有達到預(yù)定條件的情況下重復(fù)步驟3222-3224,再次進行聚類和選擇,直到達到預(yù)定條件為止。上述的預(yù)定條件可以根據(jù)計算資源、所需精度等因素而進行設(shè)定,可以包括,例如每組中的指令序列的數(shù)量小于特定閾值、指令序列與性能事件的關(guān)聯(lián)度達到特定閾值,等等。由此,通過先聚類再劃分的方式,逐步從數(shù)量巨大的指令序列中提取出有辨識度的信息,獲得指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系。盡管以上結(jié)合具體例子描述了幾種構(gòu)建指令序列,并確定指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系的實施例,但是,本 領(lǐng)域技術(shù)人員可以理解,以上實施例僅僅是示例性而非限制性的。在以上示例的基礎(chǔ)上,本領(lǐng)域技術(shù)人員能夠做出進一步的修改和變體,利用類似的或其他的方式提取出指令序列和性能事件之間的關(guān)聯(lián)關(guān)系。這樣的修改和變體也應(yīng)包含在本發(fā)明范疇之內(nèi)。圖7示出根據(jù)本發(fā)明一個實施例獲取的關(guān)聯(lián)關(guān)系的示意圖。在圖7的例子中,關(guān)聯(lián)關(guān)系以表格的形式示出。在該表格中,每一條目示出一個指令序列與一項性能缺陷事件之間的關(guān)聯(lián)。例如,根據(jù)表格的第一行,指令序列{BNORC,(LTGR或LH),BERC}與性能缺陷事件Stall相關(guān)聯(lián),這意味著,連續(xù)執(zhí)行這一指令序列會導(dǎo)致流水線出現(xiàn)Stall狀態(tài)。在進一步的實施例中,還可以示出指令序列與性能缺陷事件之間的關(guān)聯(lián)度,也就是,執(zhí)行該指令序列會導(dǎo)致出現(xiàn)性能缺陷的概率。可以理解,關(guān)聯(lián)關(guān)系也可以通過其他格式來存儲和顯示,而不限于圖7的示例。對比圖I所示的性能采樣數(shù)據(jù)和圖7示例的關(guān)聯(lián)關(guān)系可以看到,性能采樣數(shù)據(jù)中直接示出了各個指令的信息(例如,指令地址、執(zhí)行次序、操作碼、操作數(shù),采樣數(shù)等),因此,通過性能采樣數(shù)據(jù)可以獲得指令執(zhí)行路徑,進一步地,有可能通過解讀指令執(zhí)行路徑(例如,利用反匯編工具)來獲得物理平臺上執(zhí)行的代碼信息,例如前述的第一代碼的信息。然而,關(guān)聯(lián)關(guān)系示出的是指令序列與性能缺陷事件之間的關(guān)聯(lián),該關(guān)聯(lián)是基于指令序列與各種性能事件的統(tǒng)計而獲得的,其中并不涉及各個指令的具體執(zhí)行信息。因此,通過指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系,并不能獲知物理平臺上執(zhí)行的代碼的信息。也就是說,上述關(guān)聯(lián)關(guān)系僅與物理平臺的特征相關(guān),而與其上執(zhí)行的代碼無關(guān),因而不會泄露代碼信息。另一方面,在許多情況下,性能缺陷事件的發(fā)生并不是僅由單個指令的執(zhí)行所導(dǎo)致,而是連續(xù)執(zhí)行多個指令的結(jié)果。因此,發(fā)掘出連續(xù)執(zhí)行的多個指令所構(gòu)成的指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系能更本質(zhì)地反映出產(chǎn)生性能缺陷的規(guī)律,也更好地反映出物理平臺的特征。鑒于以上所述的關(guān)聯(lián)關(guān)系的特點,上述關(guān)聯(lián)關(guān)系非常適合作為針對物理平臺進行代碼優(yōu)化的參考準則。因此,接著,在步驟34,將這樣的關(guān)聯(lián)關(guān)系提供給其他物理平臺,以供在該其他物理平臺上基于所述關(guān)聯(lián)關(guān)系執(zhí)行第二代碼的優(yōu)化,所述第二代碼可以不同于步驟30中的第一代碼。具體地,在一個實施例中,可以將以上確定的關(guān)聯(lián)關(guān)系存儲在本地,并賦予特定的其他物理平臺對該關(guān)聯(lián)關(guān)系文件的訪問權(quán)限。或者,在另一實施例中,在步驟34,可以將確定的關(guān)聯(lián)關(guān)系直接發(fā)送到上述其他物理平臺。在又一實施例中,還可以將確定的關(guān)聯(lián)關(guān)系傳輸?shù)揭粋€關(guān)聯(lián)關(guān)系共享平臺,使得其他物理平臺可以到這個共享平臺獲取關(guān)聯(lián)關(guān)系。在第一物理平臺根據(jù)圖3的方法提供關(guān)聯(lián)關(guān)系的基礎(chǔ)上,可以在其他物理平臺,例如第二物理平臺上獲取所述關(guān)聯(lián)關(guān)系,并利用該關(guān)聯(lián)關(guān)系進行代碼優(yōu)化,從而實現(xiàn)跨平臺的性能優(yōu)化,如圖4的步驟所示。具體地,在步驟40,在第二物理平臺獲取上述關(guān)聯(lián)關(guān)系。在一個實施例中,所提供的關(guān)聯(lián)關(guān)系存儲在第一物理平臺上。這時,在步驟40中,通過第二物理平臺直接向第一物理平臺發(fā)出請求,請求讀取產(chǎn)生的關(guān)聯(lián)關(guān)系。在獲得第一物理平臺的授權(quán)響應(yīng)之后,第二物理平臺就可以從第一物理平臺讀取針對第一物理平臺產(chǎn)生的關(guān)聯(lián)關(guān)系。在另一實施例中,來自第一物理平臺的關(guān)聯(lián)關(guān)系存儲在關(guān)聯(lián)關(guān)系共享平臺上,并添加有第一物理平臺的標 簽。在此情況下,在步驟40中,第二物理平臺從共享平臺讀取針對第一物理平臺的關(guān)聯(lián)關(guān)系O可以理解,關(guān)聯(lián)關(guān)系在各個物理平臺之間的傳遞可以通過各種已知的和未來有可能采用的通信方式實現(xiàn),包括利用無線、有線、光纜、RF等等各種介質(zhì),通過FTP,HTTP,POP3,SMTP等各種協(xié)議進行的傳輸。在第二物理平臺獲取了針對第一物理平臺產(chǎn)生的關(guān)聯(lián)關(guān)系的基礎(chǔ)上,就可以在第二物理平臺上進行針對第一物理平臺的代碼優(yōu)化。具體地,在步驟42,根據(jù)所述關(guān)聯(lián)關(guān)系,確定第二代碼對應(yīng)的性能缺陷事件;以及在步驟44,基于確定的性能缺陷事件,優(yōu)化第二代碼,從而消除或減小第二代碼可能引起的性能缺陷事件。上述第二代碼是有待在第一物理平臺上執(zhí)行的代碼,也是有待進行優(yōu)化的代碼。圖8示出根據(jù)本發(fā)明一個實施例的步驟42的子步驟,也就是確定性能缺陷事件的具體步驟。具體地,如圖8所示,為了確定第二代碼對應(yīng)的性能缺陷事件,首先在步驟421,掃描第二代碼,生成與第二代碼對應(yīng)的指令序列。接著,在步驟422,將生成的指令序列與獲得的關(guān)聯(lián)關(guān)系進行匹配,也就是,在獲得的關(guān)聯(lián)關(guān)系中查找是否存在對應(yīng)的指令序列。如果找到匹配的指令序列,那么在步驟423中,根據(jù)指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系,確定匹配的指令序列所對應(yīng)的性能缺陷事件??梢岳斫猓襟E423中確定的性能缺陷事件是假定當(dāng)前的第二代碼在第一物理平臺上執(zhí)行的情況下有可能出現(xiàn)的性能缺陷事件?;谌缟洗_定或預(yù)測的性能缺陷,在圖4的步驟44中,對第二代碼進行優(yōu)化,以消除和/或減少性能缺陷事件,從而優(yōu)化第二代碼在第一物理平臺上的執(zhí)行性能。步驟44的代碼優(yōu)化方式可以利用現(xiàn)有技術(shù)中通常采用的優(yōu)化方式。例如,在一個實施例中,可以適當(dāng)調(diào)整第二代碼的執(zhí)行順序,從而減少可能導(dǎo)致性能缺陷事件的指令序列。例如,第二代碼包含指令序列A,用于對多個操作數(shù)進行連續(xù)操作,但是該指令序列容易引起Stall事件。此時,如果指令序列A后面存在與時序不太相關(guān)的單獨指令B,那么可以將指令B提前并插入在指令序列A中間,來打斷有可能引起缺陷的序列A。在另個實施例中,通過添加附加代碼進行代碼優(yōu)化。對于ICacheMiss, DCacheMiss, TLBMiss等高速緩存不命中事件,可以在掃描到導(dǎo)致這些事件的指令序列時,在這些指令之前添加一些額外的指令代碼。這些額外的指令代碼用于通知處理器將接下來可能使用的操作數(shù)、指令數(shù)據(jù)等預(yù)取到高速緩存中,由此避免在執(zhí)行接下來的指令序列時出現(xiàn)高速緩存不命中事件。此外,本領(lǐng)域技術(shù)人員可以根據(jù)需要,對第二代碼進行其他形式的修改和優(yōu)化,從而使得第二代碼能夠在第一物理平臺上聞效執(zhí)行。由此,根據(jù)圖4的實施例的方法,基于關(guān)聯(lián)關(guān)系對第二代碼進行了優(yōu)化,提高了第二代碼在第一物理平臺上的執(zhí)行性能。在以上描述的實施例中,首先在第一物理平臺獲取指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系,然后在第二平臺上基于上述關(guān)聯(lián)關(guān)系來優(yōu)化第二代碼,從而實現(xiàn)跨平臺的性能優(yōu)化。如前所述,指令序列和性能缺陷事件之間的關(guān)聯(lián)關(guān)系不涉及具體指令和代碼,因此不會泄露第一平臺上執(zhí)行的代碼信息,將這樣的關(guān)聯(lián)關(guān)系傳遞到第二物理平臺也不會產(chǎn)生安全方面的風(fēng)險。同時,上述關(guān)聯(lián)關(guān)系更本質(zhì)地反映出第一物理平臺的硬件特征,因此,以關(guān)聯(lián)關(guān)系為基礎(chǔ)對有待執(zhí)行的代碼進行優(yōu)化能夠取得較好的優(yōu)化效果。如此,如果技術(shù)人員想要針對目標平臺優(yōu)化所開發(fā)的軟件應(yīng)用,他不必像現(xiàn)有技術(shù)那樣在目標平臺執(zhí)行該軟件應(yīng)用,而是可以直接在自己的開發(fā)平臺上對軟件應(yīng)用的代碼進行優(yōu)化,從而使得性能優(yōu)化的過程更加便利和高效。 基于同一發(fā)明構(gòu)思,本發(fā)明還提供了執(zhí)行性能優(yōu)化的系統(tǒng),該系統(tǒng)包括位于第一物理平臺上的提供關(guān)聯(lián)關(guān)系的裝置和位于第二物理平臺上的執(zhí)行代碼優(yōu)化的裝置。圖9A示出根據(jù)本發(fā)明一個實施例的提供關(guān)聯(lián)關(guān)系的裝置的示意框圖。如圖9A所示,本實施例的提供關(guān)聯(lián)關(guān)系的裝置包括采樣數(shù)據(jù)獲取單元911,配置為獲取與第一代碼的執(zhí)行相關(guān)的性能采樣數(shù)據(jù),該性能采樣數(shù)據(jù)包括與所述第一代碼對應(yīng)的指令的信息和與所述指令對應(yīng)的性能缺陷事件的信息;關(guān)聯(lián)關(guān)系確定單元912,配置為根據(jù)所述性能采樣數(shù)據(jù),構(gòu)建至少一個指令序列,并確定所述至少一個指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系;以及關(guān)聯(lián)關(guān)系提供單元913,配置為將所述關(guān)聯(lián)關(guān)系提供給其他物理平臺,以供在該其他物理平臺上基于所述關(guān)聯(lián)關(guān)系執(zhí)行第二代碼的優(yōu)化。圖9B示出根據(jù)本發(fā)明一個實施例的執(zhí)行代碼優(yōu)化的裝置的示意框圖。如圖9B所示,本實施例的執(zhí)行代碼優(yōu)化的裝置包括關(guān)聯(lián)關(guān)系獲取單元921,配置為獲取圖9A的裝置所提供的關(guān)聯(lián)關(guān)系;缺陷確定單元922,配置為根據(jù)所述關(guān)聯(lián)關(guān)系,確定第二代碼對應(yīng)的性能缺陷事件;以及代碼優(yōu)化單元923,配置為基于確定的性能缺陷事件,優(yōu)化第二代碼。具體地,采樣數(shù)據(jù)獲取單元911從第一物理平臺的性能監(jiān)視器獲取執(zhí)行第一代碼時記錄的性能采樣數(shù)據(jù)。所獲得的性能采樣數(shù)據(jù)可以如圖I的例子所示,還可以包含更多的和/或不同的指令信息和性能事件。基于獲得的性能采樣數(shù)據(jù),關(guān)聯(lián)關(guān)系確定單元912對這些數(shù)據(jù)進行分析,從中構(gòu)建指令序列,并發(fā)掘出指令序列導(dǎo)致性能缺陷的規(guī)律,也就是,確定出指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系。在一個實施例中,關(guān)聯(lián)關(guān)系確定單元912通過統(tǒng)計指令序列的出現(xiàn)次數(shù)和性能事件的出現(xiàn)次數(shù)來獲得兩者之間的關(guān)聯(lián)關(guān)系。在另一實施例中,關(guān)聯(lián)關(guān)系確定單元912進一步地對指令序列進行篩選,從而節(jié)省一部分統(tǒng)計計算。在又一實施例中,關(guān)聯(lián)關(guān)系確定單元912基于信息熵對指令序列進行聚類和分析,從而獲得指令序列與性能缺陷事件之間的關(guān)聯(lián)。所獲得的關(guān)聯(lián)關(guān)系可以如圖7所示例,也可以通過其他格式來存儲和顯示。進一步地,關(guān)聯(lián)關(guān)系提供單元913通過多種方式將上述關(guān)聯(lián)關(guān)系提供給其他物理平臺,例如第二物理平臺,以供在該其他物理平臺上基于關(guān)聯(lián)關(guān)系執(zhí)行代碼優(yōu)化。在此基礎(chǔ)上,第二物理平臺中的關(guān)聯(lián)關(guān)系獲取單元921通過各種通信方式讀取上述關(guān)聯(lián)關(guān)系。然后,缺陷確定單元922將第二代碼對應(yīng)的指令與所述關(guān)聯(lián)關(guān)系進行對比和匹配,確定第二代碼對應(yīng)的性能缺陷事件。于是,代碼優(yōu)化單元923可以基于確定的性能缺陷事件,優(yōu)化第二代碼,消除或減小第二代碼可能引起的性能缺陷事件,從而優(yōu)化第二代碼在第一物理平臺上的執(zhí)行性能。對于以上各個單元的具體執(zhí)行方式,可以參照之前結(jié)合方法流程和具體例子進行的詳細描述,在此不再贅述。以上所述的性能優(yōu)化方法和系統(tǒng)可以利用計算系統(tǒng)來實現(xiàn)。圖10示出了適于用來實現(xiàn)本發(fā)明實施方式的示例性計算系統(tǒng)100的框圖。如所示,計算機系統(tǒng)100可以包括〇卩^中央處理單元)101、狀1(隨機存取存儲器)102、1 01(只讀存儲器)103、系統(tǒng)總線104、硬盤控制器105、鍵盤控制器106、串行接口控制器107、并行接口控制器108、顯示控制器109、硬盤110、鍵盤111、串行外部設(shè)備112、并行外部設(shè)備113和顯示器114。在這些設(shè)備中,與系統(tǒng)總線104耦合的有CPU 10URAM 102, ROM 103、硬盤控制器105、鍵盤控制器106、串行控制器107、并行控制器108和顯示控制器109。硬盤110與硬盤控制器105耦合,鍵盤111與鍵盤控制器106耦合,串行外部設(shè)備112與串行接口控制器107耦合,并行外部設(shè)備113與并行接口控制器108耦合,以及顯示器114與顯示控制器109耦合。應(yīng)當(dāng)理解,圖·10所述的結(jié)構(gòu)框圖僅僅為了示例的目的而示出的,而不是對本發(fā)明范圍的限制。在某些情況下,可以根據(jù)具體情況而增加或者減少某些設(shè)備。附圖中的流程圖和框圖,圖示了按照本發(fā)明各種實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實現(xiàn)中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。雖然以上結(jié)合具體實施例,對本發(fā)明的方法、系統(tǒng)以及各個單元進行了詳細描述,但本發(fā)明并不限于此。本領(lǐng)域普通技術(shù)人員能夠在說明書教導(dǎo)之下對本發(fā)明進行多種變換、替換和修改而不偏離本發(fā)明的精神和范圍。應(yīng)該理解,所有這樣的變化、替換、修改仍然落入本發(fā)明的保護范圍之內(nèi)。本發(fā)明的保護范圍由所附權(quán)利要求來限定。
權(quán)利要求
1.一種提供關(guān)聯(lián)關(guān)系以供代碼優(yōu)化的方法,包括 獲取與第一代碼的執(zhí)行相關(guān)的性能采樣數(shù)據(jù),該性能采樣數(shù)據(jù)包括與所述第一代碼對應(yīng)的指令的信息和與所述指令對應(yīng)的性能缺陷事件的信息; 根據(jù)所述性能采樣數(shù)據(jù),構(gòu)建至少一個指令序列,并確定所述至少一個指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系;以及 將所述關(guān)聯(lián)關(guān)系提供給其他物理平臺,以供在該其他物理平臺上基于所述關(guān)聯(lián)關(guān)系執(zhí)行第二代碼的優(yōu)化。
2.如權(quán)利要求I所述的方法,其中所述性能采樣數(shù)據(jù)基于執(zhí)行第一代碼時產(chǎn)生的采樣日志而形成。
3.如權(quán)利要求I所述的方法,其中所述確定至少一個指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系包括 統(tǒng)計所述至少一個指令序列的出現(xiàn)次數(shù); 統(tǒng)計所述至少一個指令序列對應(yīng)的性能缺陷事件的出現(xiàn)次數(shù);以及基于以上統(tǒng)計的指令序列的出現(xiàn)次數(shù)和性能缺陷事件的出現(xiàn)次數(shù)的比例,確定至少一個指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系。
4.如權(quán)利要求3所述的方法,還包括:根據(jù)所述至少一個指令序列的出現(xiàn)次數(shù)選擇出頻繁出現(xiàn)的指令序列,并且所述統(tǒng)計至少一個指令序列對應(yīng)的性能缺陷事件的出現(xiàn)次數(shù)具體為,僅僅統(tǒng)計所述頻繁出現(xiàn)的指令序列所對應(yīng)的性能缺陷事件的出現(xiàn)次數(shù)。
5.如權(quán)利要求I所述的方法,其中所述確定至少一個指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系包括 選擇出現(xiàn)頻率較高的指令序列; 基于信息熵對指令序列進行聚類; 結(jié)合性能缺陷事件的統(tǒng)計選擇有辨識度的聚類;以及 對選擇的序列聚類進行進一步劃分,直到達到預(yù)定的條件。
6.如權(quán)利要求5所述的方法,其中所述預(yù)定的條件包括以下中的至少一項所劃分的組中的指令序列的數(shù)量小于第一特定閾值、指令序列與性能缺陷事件的關(guān)聯(lián)度達到第二特定閾值。
7.一種執(zhí)行代碼優(yōu)化的方法,包括 獲取根據(jù)權(quán)利要求1-6中任一方法所提供的關(guān)聯(lián)關(guān)系;以及 根據(jù)所述關(guān)聯(lián)關(guān)系,確定第二代碼對應(yīng)的性能缺陷事件; 基于確定的性能缺陷事件,優(yōu)化第二代碼。
8.如權(quán)利要求7所述的方法,其中所述獲取關(guān)聯(lián)關(guān)系包括經(jīng)由關(guān)聯(lián)關(guān)系共享平臺獲取所述關(guān)聯(lián)關(guān)系。
9.如權(quán)利要求7所述的方法,其中確定第二代碼對應(yīng)的性能缺陷事件包括 掃描第二代碼,生成與第二代碼對應(yīng)的指令序列; 將生成的指令序列與獲得的關(guān)聯(lián)關(guān)系進行匹配; 根據(jù)所述關(guān)聯(lián)關(guān)系,確定匹配的指令序列所對應(yīng)的性能缺陷事件。
10.如權(quán)利要求7所述的方法,其中所述優(yōu)化第二代碼包括通過以下方式中的至少一項來消除或減少性能缺陷事件調(diào)整第二代碼的執(zhí)行順序; 向第二代碼添加額外的指令代碼。
11.一種提供關(guān)聯(lián)關(guān)系以供代碼優(yōu)化的裝置,包括 采樣數(shù)據(jù)獲取單元,配置為獲取與第一代碼的執(zhí)行相關(guān)的性能采樣數(shù)據(jù),該性能采樣數(shù)據(jù)包括與所述第一代碼對應(yīng)的指令的信息和與所述指令對應(yīng)的性能缺陷事件的信息;關(guān)聯(lián)關(guān)系確定單元,配置為根據(jù)所述性能采樣數(shù)據(jù),構(gòu)建至少一個指令序列,并確定所述至少一個指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系;以及 關(guān)聯(lián)關(guān)系提供單元,配置為將所述關(guān)聯(lián)關(guān)系提供給其他物理平臺,以供在該其他物理平臺上基于所述關(guān)聯(lián)關(guān)系執(zhí)行第二代碼的優(yōu)化。
12.如權(quán)利要求11所述的裝置,其中所述性能采樣數(shù)據(jù)基于執(zhí)行第一代碼時產(chǎn)生的采樣日志而形成。
13.如權(quán)利要求11所述的裝置,其中所述關(guān)聯(lián)關(guān)系確定單元配置為 統(tǒng)計所述至少一個指令序列的出現(xiàn)次數(shù); 統(tǒng)計所述至少一個指令序列對應(yīng)的性能缺陷事件的出現(xiàn)次數(shù);以及基于以上統(tǒng)計的指令序列的出現(xiàn)次數(shù)和性能缺陷事件的出現(xiàn)次數(shù)的比例,確定至少一個指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系。
14.如權(quán)利要求13所述的裝置,其中所述關(guān)聯(lián)關(guān)系確定單元還配置為根據(jù)所述至少一個指令序列的出現(xiàn)次數(shù)選擇出頻繁出現(xiàn)的指令序列,并且所述統(tǒng)計至少一個指令序列對應(yīng)的性能缺陷事件的出現(xiàn)次數(shù)具體為,僅僅統(tǒng)計所述頻繁出現(xiàn)的指令序列所對應(yīng)的性能缺陷事件的出現(xiàn)次數(shù)。
15.如權(quán)利要求11所述的裝置,其中所述關(guān)聯(lián)關(guān)系確定單元配置為 選擇出現(xiàn)頻率較高的指令序列; 基于信息熵對指令序列進行聚類; 結(jié)合性能缺陷事件的統(tǒng)計選擇有辨識度的聚類;以及 對選擇的序列聚類進行進一步劃分,直到達到預(yù)定的條件。
16.如權(quán)利要求15所述的裝置,其中所述預(yù)定的條件包括以下中的至少一項所劃分的組中的指令序列的數(shù)量小于第一特定閾值、指令序列與性能缺陷事件的關(guān)聯(lián)度達到第二特定閾值。
17.一種執(zhí)行代碼優(yōu)化的裝置,包括 關(guān)聯(lián)關(guān)系獲取單元,配置為獲取如權(quán)利要求11-16中任一項所述的裝置所提供的關(guān)聯(lián)關(guān)系;以及 缺陷確定單元,配置為根據(jù)所述關(guān)聯(lián)關(guān)系,確定第二代碼對應(yīng)的性能缺陷事件;以及 代碼優(yōu)化單元,配置為基于確定的性能缺陷事件,優(yōu)化第二代碼。
18.如權(quán)利要求17所述的裝置,其中所述關(guān)聯(lián)關(guān)系獲取單元配置為經(jīng)由關(guān)聯(lián)關(guān)系共享平臺獲取所述關(guān)聯(lián)關(guān)系。
19.如權(quán)利要求17所述的方法,其中所述缺陷確定單元配置為 掃描第二代碼,生成與第二代碼對應(yīng)的指令序列; 將生成的指令序列與獲得的關(guān)聯(lián)關(guān)系進行匹配; 根據(jù)所述關(guān)聯(lián)關(guān)系,確定匹配的指令序列所對應(yīng)的性能缺陷事件。
20.如權(quán)利要求17所述的方法,其中所述代碼優(yōu)化單元配置為通過以下方式中的至少一項來消除或減少性能缺陷事件 調(diào)整第二代碼的執(zhí)行順序; 向第二代碼添加額外的指令代碼。
全文摘要
本發(fā)明提供了執(zhí)行性能優(yōu)化的方法和系統(tǒng),所述方法包括在第一物理平臺上獲取與第一代碼的執(zhí)行相關(guān)的性能采樣數(shù)據(jù),根據(jù)所述性能采樣數(shù)據(jù)確定指令序列與性能缺陷事件之間的關(guān)聯(lián)關(guān)系,以及將所述關(guān)聯(lián)關(guān)系提供給其他物理平臺。在第二物理平臺上可以獲取所述關(guān)聯(lián)關(guān)系,并利用所述關(guān)聯(lián)關(guān)系優(yōu)化第二代碼,從而優(yōu)化第二代碼在第一物理平臺上的執(zhí)行性能。本發(fā)明提供的裝置與上述方法對應(yīng)。利用本發(fā)明的方法和裝置,可以基于在目標物理平臺上生成關(guān)聯(lián)關(guān)系,在開發(fā)平臺上對開發(fā)代碼進行優(yōu)化,從而實現(xiàn)跨平臺的性能優(yōu)化,并使得優(yōu)化過程更加便利高效。
文檔編號G06F9/45GK102955712SQ20111025235
公開日2013年3月6日 申請日期2011年8月30日 優(yōu)先權(quán)日2011年8月30日
發(fā)明者鄒嘉, 范偉, 侯銳, M·沃斯特, 王艷琦, 孫正雅 申請人:國際商業(yè)機器公司