專利名稱:處理指令分組信息的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理器中的指令分組,更具體而言,涉及用于追蹤指令分組的方法和
>J-U ρ α裝直。
背景技術(shù):
信息技術(shù)的發(fā)展對處理器的執(zhí)行能力提出了越來越高的要求。為了獲得更高的處理能力,處理器從早期的順序執(zhí)行(in order execution)逐漸發(fā)展為目前較多采用的亂序 執(zhí)行(out-of-order execution),或稱 OoOE。在順序執(zhí)行方案中,處理器首先進行指令的預(yù)取和解碼,然后根據(jù)解碼的指令從內(nèi)存中讀取操作數(shù)。如果操作數(shù)目前可用,指令被分發(fā)到適當(dāng)?shù)墓δ軉卧M行執(zhí)行。在執(zhí)行完畢之后,功能單元將執(zhí)行結(jié)果寫回到寄存器文件中。但是,如果在當(dāng)前時鐘周期,一個或多個操作數(shù)不可用(通常因為處理器正從內(nèi)存中預(yù)取這些操作數(shù)),那么處理器就會停下來等待(stall),直到這些操作數(shù)可用。由于順序執(zhí)行方案使得處理器浪費了一些指令時鐘周期進行等待,因此許多高性能處理器大都采用亂序執(zhí)行方案來充分利用這些被浪費的時鐘周期。具體地,在亂序執(zhí)行方案中,首先將指令預(yù)取并排列到一個指令序列中。當(dāng)序列中的指令A(yù)由于操作數(shù)不可用而暫時無法執(zhí)行時,處理器分析接下來的指令B。如果指令B的執(zhí)行不依賴于之前的指令A(yù)的執(zhí)行結(jié)果,那么處理器就會將指令B發(fā)送到適當(dāng)?shù)墓δ軉卧M行執(zhí)行。執(zhí)行的結(jié)果同樣寫入一個隊列,用以恢復(fù)原始指令順序。進一步地,在處理器,尤其是多核處理器,采用亂序執(zhí)行方案的情況下,往往還會結(jié)合指令的分組來并行執(zhí)行多條指令,從而進一步提高處理器執(zhí)行性能。圖I示出處理器進行指令分組和亂序執(zhí)行的示意圖。如圖所示,處理器對指令的處理過程可以分為順序處理部分和亂序處理部分。在順序處理部分中,指令預(yù)取單元預(yù)取多條指令,并將其排成一個隊列。接著,指令解碼和分組單元對預(yù)取的指令進行解碼,并對指令進行分組。一般地,指令的分組依賴于處理器的結(jié)構(gòu)、指令的特征等多種因素。通常來說,如果指令隊列中的連續(xù)的多個指令可以獨立地并行執(zhí)行,那么就有可能將這些指令分為一組,進行后續(xù)的并行執(zhí)行。在對指令進行分組之后,處理進入亂序處理階段。在這個階段中,首先,分組發(fā)射單元將一個指令組中的多條指令分別發(fā)射到適當(dāng)?shù)墓δ軉卧=又?,這些功能單元各自獨立地執(zhí)行接收到的指令,然后將執(zhí)行結(jié)果寫回寄存器文件。一旦一個指令組執(zhí)行完畢,完成單元就會發(fā)出一個指令組完成的信號,并向指令預(yù)取單元返回一個中斷,通知其繼續(xù)進行指令的預(yù)取。在一個具體例子中,假定指令預(yù)取單元最多可以保存8條指令,并將其排成隊列。通過指令解碼和分組單元的分析,指令隊列中的前3條指令都是對操作數(shù)進行加法操作,并且執(zhí)行結(jié)果相互獨立,于是指令解碼和分組單元將這3條指令分為一組,發(fā)送給分組發(fā)射單元。分組發(fā)射單元將這3條指令分別發(fā)送給3個功能單元,例如加法器,同時進行運算。在這組指令均執(zhí)行完畢后,完成單元發(fā)出表示指令組完成的信號,并向指令預(yù)取單元返回一個中斷。接收到這樣的中斷信號,指令預(yù)取單元繼續(xù)預(yù)取3條指令,從而保持指令隊列的長度。指令解碼和分組單元繼續(xù)對隊列中的指令進行分析、解碼和分組,使得指令能夠得到并行執(zhí)行。可以看到,在分組指令的OoOE方案中,指令的分組情況與處理器計算效率有著密切的關(guān)聯(lián)。如果較多的連續(xù)指令能夠分為一組,并行執(zhí)行,那么執(zhí)行效率會得到顯著提高。因此,分析和研究處理器中的指令分組情況對于提高處理器性能很有意義。例如,在編寫程序過程中以及在編譯器后端生成代碼的過程中,如果工程師能夠了解處理器在運行時如何對指令進行分組,以及在執(zhí)行過程中OoOE方案如何作用于特定指令流,那么工程師就有可能對指令進行優(yōu)化,例如進行一定重排,使得重排的指令能夠更有效地利用指令分組方案和OoOE方案,從而更好地利用處理器的計算資源。然而,在現(xiàn)有技術(shù)中,給定一種類型的處理器和一個特定的指令序列,現(xiàn)有方法難以獲知處理器在運行時對指令的分組和執(zhí)行情況,也無法分析和了解如何使得指令流更好地利用OoOE方案來獲得較高的執(zhí)行效率?!ぴ诂F(xiàn)有技術(shù)的一項方案中,提供了一種代碼分析器,該分析器根據(jù)處理器的結(jié)構(gòu)對指令進行靜態(tài)分析,并給出關(guān)于指令分組的一些靜態(tài)信息,例如用不同顏色標(biāo)記不同的指令組。然而,本領(lǐng)域人員可以理解,指令的分組是實時變化的。盡管這樣的代碼分析器能夠給出關(guān)于指令分組的一些靜態(tài)分析,但是不能獲知處理器在運行時的動態(tài)行為。在另一種方案中,提供了一種處理器流水線分析器,當(dāng)指令在處理器模擬器或真實處理器上執(zhí)行時,該分析器捕獲指令的管線信息,并用流水線平面圖示出這樣的流水線信息。圖2示出現(xiàn)有技術(shù)捕獲的流水線信息視圖的例子。由于這樣的流水線分析器并不是針對指令分組分析的目的而專門設(shè)計的,因此如圖所示,得到的平面圖并不能示出在不同管線階段,指令分組隨時間的變化,也無法示出在執(zhí)行過程中哪些指令分組比較流行。因此,希望提供方案,能夠獲知處理器在運行時對指令進行分組的動態(tài)信息,從而更好利用處理器的OoOE,提高執(zhí)行性能。
發(fā)明內(nèi)容
鑒于以上提出的問題,提出本發(fā)明,旨在提供一種處理處理器運行時的指令分組信息的方法和裝置。根據(jù)本發(fā)明第一方面,提供一種處理指令分組信息的方法,包括從緩存器中讀取處理器在運行時分組的機器指令的地址,形成地址文件;分析所述地址文件,獲取所述機器指令的分組信息;將所述地址文件中的所述機器指令轉(zhuǎn)化為可讀指令;以及基于所述機器指令的分組信息和轉(zhuǎn)化的可讀指令,獲得可讀指令的分組信息。根據(jù)本發(fā)明第二方面,提供一種處理指令分組信息的裝置,包括地址讀取單元,配置為從緩存器中讀取處理器在運行時分組的機器指令的地址,形成地址文件;分析單元,配置為分析所述地址文件,獲取所述機器指令的分組信息;指令轉(zhuǎn)化單元,配置為將所述地址文件中的所述機器指令轉(zhuǎn)化為可讀指令;以及信息獲取單元,配置為基于所述機器指令的分組信息和轉(zhuǎn)化的可讀指令,獲得可讀指令的分組信息。利用上述的方法和裝置,可以動態(tài)地獲得處理器在運行時對指令的分組處理情況,并將其表示為用戶可讀的形式,使得用戶可以了解指令的分組信息,從而更好地利用處理器的處理性能。
圖I示出處理器進行指令分組和亂序執(zhí)行的示意圖;圖2示出現(xiàn)有技術(shù)捕獲的流水線信息視圖的例子;圖3示出根據(jù)本發(fā)明一個實施例的獲取指令分組信息的方法的流程圖;圖4示出根據(jù)本發(fā)明一個實施例的處理系統(tǒng)的示意圖;圖5示出根據(jù)本發(fā)明一個實施例的地址表的例子;圖6A示出根據(jù)本發(fā)明一個實施例的機器指令的分組信息的例子;圖6B示出根據(jù)本發(fā)明一個實施例的指令轉(zhuǎn)化表的例子; 圖7A-7B示出根據(jù)本發(fā)明一個實施例的可讀指令的分組信息的例子;圖8A-8C示出根據(jù)本發(fā)明實施例的圖形化的分組信息;圖9示出根據(jù)本發(fā)明一個實施例的裝置的示意框圖;以及圖10示出適于用來實現(xiàn)本發(fā)明實施方式的示例性計算系統(tǒng)的框圖。
具體實施例方式所屬技術(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ā)明的范圍進行限制。圖3示出根據(jù)本發(fā)明一個實施例的獲取指令分組信息的方法的流程圖。如圖3所示,本實施例的方法包含如下步驟在步驟31,從緩存器中讀取處理器在運行時分組的機器指令的地址,形成地址文件;在步驟33,分析所述地址文件,獲取所述機器指令的分組信息;在步驟35,將所述地址文件中的所述機器指令轉(zhuǎn)化為可讀指令;在步驟37,基于所述機器指令的分組信息和轉(zhuǎn)化的可讀指令,獲得可讀指令的分組信息。具體地,在步驟31,從緩存器中讀取分組的指令的地址。這就要求緩存器能夠記錄并存儲處理器在運行時對指令的分組情況。為此,可以對現(xiàn)有技術(shù)的處理系統(tǒng)進行改進,添加具有上述功能的緩存器。圖4示出根據(jù)本發(fā)明一個實施例的處理系統(tǒng)的示意圖。如圖所示,該實施例中的處理系統(tǒng)包含處理器40,性能監(jiān)視器42和緩存器44。處理器40與圖I所示的現(xiàn)有處理器相同,包含順序處理部分和亂序處理部分,用于對指令進行分組執(zhí)行。并且,如前所述,處理器40包含完成單元,每當(dāng)處理器完成一組指令的執(zhí)行,完成單元就會發(fā)出一個指令組完成信號,并向指令預(yù)取單元返回一個中斷,通知其繼續(xù)進行指令的預(yù)取。相應(yīng)地,完成單元中臨時存儲有剛剛執(zhí)行完畢的指令組的信息,例如包括,指令組中指令的個數(shù),指令的地址等。并且,完成單元會在上述中斷信號中包含所述指令組中指令個數(shù)的信息,由此預(yù)取單元才會知道接下來要補充幾個指令到指令隊列中。為了獲得處理器執(zhí)行的指令組的信息,在本實施例中,將性能監(jiān)視器42構(gòu)造為捕獲完成單元發(fā)出的指令組完成信號,并由此向緩存器44發(fā)出更新信號。在該更新信號的觸發(fā)下,緩存器44從完成單元讀取執(zhí)行的指令組的信息,從而記錄分組的指令的地址。具體地,在一個例子中,性能監(jiān)視器42構(gòu)造為在現(xiàn)有的性能監(jiān)視器的基礎(chǔ)上添加計數(shù)器。該計數(shù)器設(shè)置為對捕獲的指令組完成信號的出現(xiàn)次數(shù)進行計數(shù)。每當(dāng)該計數(shù)增加1,性能監(jiān)視器42就向緩存器44發(fā)出一個更新信號。響應(yīng)于接收到的更新信號,緩存器44從處理器40的完成單元讀取所執(zhí)行的指令組的信息。具體地,緩存器44可以從處理器40中獲取到剛剛執(zhí)行完畢的一組指令中的各個指令的地址??梢岳斫?,緩存器44也可以以其他方式被觸發(fā)從而讀取指令組的地址信息。在一個實施例中,性能監(jiān)視器42以其他方式生成上述更新信號,例如直接將捕獲的指令組完成信號轉(zhuǎn)發(fā)給緩存器44作為更新信號而不對信號進行計數(shù)?;蛘?,在另一個實施例中,緩存器44可以直接從完成單元捕獲上述指令組完成信號,在該信號觸發(fā)下從處理器40讀取執(zhí)行的指令組的地址信息。 要注意的是,在這個階段,處理器40所執(zhí)行的指令為機器指令,也就是匯編指令。處理器通常用邏輯地址來標(biāo)記這些指令,因此,緩存器44通過上述方式獲得的地址為機器指令的邏輯地址。為了記錄所獲得的指令地址,在一個實施例中,緩存器44逐一記錄所讀取的指令的邏輯地址,并對同一組的指令進行標(biāo)記。在另一實施例中,緩存器44包含地址寄存器441,用于記錄一個指令組中第一個指令的地址,以及偏移寄存器442,用于記錄上述的指令組中其他指令的地址相對于第一個指令地址的偏移。由于處理器40為隊列中的指令分配的邏輯地址一般是連續(xù)的,因此,基于一個指令組中第一個指令的地址和其他指令相對于第一個指令的偏移,就能夠很容易地獲得指令組中全部指令的地址。因此,采用地址寄存器441和偏移寄存器442的方式,緩存器44可以用較小的緩存空間記錄分組指令的地址信息。基于以上描述的處理系統(tǒng),就可以從緩存器44中讀取分組的機器指令的地址,如圖3中步驟31所示。具體地,所讀取的地址可以包括指令組中首個指令的地址和其他指令相對于首個指令的偏移。在一個實施例中,緩存器44中記錄有多個指令組的地址信息,并響應(yīng)于更新信號,不斷地更新和添加地址信息。此時,在步驟31中,可以定期地從緩存器44中讀取上述多個指令組的地址信息。在另一實施例中,緩存器44響應(yīng)于更新信號,用最新的指令組的地址信息覆蓋原有的地址信息,也就是說,每次只存儲最新的指令組的地址信息。在這種情況下,在步驟31中,同樣地響應(yīng)于上述更新信號,每次從緩存器44中讀取最新指令組的地址信息,并結(jié)合之前讀取的指令地址,從而獲得多個指令組的地址信息。根據(jù)一個實施例,在步驟31,將獲得的多個指令組的地址信息組織成一個地址文件。該地址文件的格式應(yīng)得到后續(xù)用于分析和處理指令地址的工具和應(yīng)用的支持。在一個具體例子中,多個指令組的地址信息被組織為地址表的形式作為地址文件。圖5示出根據(jù)本發(fā)明一個實施例的地址表的例子。在圖5的例子中,示例性地示出了在緩存器存儲的三個指令組的地址信息。在第一個指令組中,第一指令的地址為IA1,其他指令相對于第一指令的偏移為0,1,2,其中O表示第一指令本身;在第二個指令組中,第一指令的地址為IA2,其他指令的偏移為0,I ;在第三個指令組中,第一指令的地址為IA1,其他指令的偏移為O,也就是說,第三指令組僅包含地址為IAl的一個指令。對于從緩存器中獲取到的這些指令信息,可以利用右圖的地址表來記錄每個組的指令地址。如右圖所示,地址表的每一條目,例如每一行,表示一個指令組,其中包括該指令組中首個指令的地址和以二進制形式表示的其他指令相對于首個指令的地址偏移。具體地,在每一行中,0-63位被保留用于記錄一個指令組中第一個指令的完整地址,后面的位用于記錄該指令組中其他指令相對于第一個指令的偏移。在偏移數(shù)目不大于15的情況下,可以用4個位來表示一個偏移。例如,表格第一行記錄了上述第一個指令組的地址信息,其中前64位記錄了其中第一個指令的地址IA1,接下來的12位分別記錄了三個偏移0,1,2的二進制表示0000,0001,
0010。相應(yīng)地,表格第二行和第三行分別記錄了上述的第二個和第三個指令組的指令地址。由此,通過這樣的表格,就可以簡單地用數(shù)字記錄指令的分組情況??梢岳斫?,也可以采用其他格式的地址文件來記錄指令地址信息,例如記錄每個 指令的完整地址,并用特定符號標(biāo)記指令組的開始與結(jié)束,等等。可以理解,本領(lǐng)域技術(shù)人員還可以想到采用更多形式的地址文件,只要這樣的格式與后續(xù)相關(guān)應(yīng)用相一致,能夠得到后續(xù)應(yīng)用的支持。在形成上述地址文件的基礎(chǔ)上,在圖3的步驟33,本實施例的方法對地址文件進行分析,從而獲取機器指令的分組信息。具體地,在一個實施例中,通過分析上述地址文件,可以獲知該地址文件包含的指令組的數(shù)目、每個指令組中指令的數(shù)目及指令地址。進一步地,還可以對地址文件中出現(xiàn)的指令組進行計數(shù)和統(tǒng)計,由此得出各個指令組的出現(xiàn)次數(shù)或出現(xiàn)頻率。圖6A示出根據(jù)本發(fā)明一個實施例的機器指令的分組信息的例子。在該例子中,通過分析地址文件,統(tǒng)計得出了各個指令組的出現(xiàn)次數(shù),其中每個指令組以第一個指令的地址和組內(nèi)其他指令的偏移來標(biāo)記。具體地,第一個指令組僅包含一條指令,出現(xiàn)次數(shù)為2 ;第二個指令組包含地址末位為164的指令以及相對偏移為I的指令共兩條指令,這兩條指令作為一個指令組共出現(xiàn)了 10次?;趫D6A的分組信息,還可以進一步得出更具體的信息,例如各個指令出現(xiàn)的次數(shù)等等。并且,可以理解,步驟33獲得的分組信息并不限于圖6A所示的信息和格式。然而,可以想到,此時的指令仍然是機器指令,并以邏輯地址進行標(biāo)記,如圖6A所示例性示出。通常來說,用戶,例如分析人員和工程師,并不能直接解讀這樣的用邏輯地址標(biāo)記的機器指令,因此僅僅獲得這樣的信息對于了解并利用指令分組來說還遠遠不夠。因此,在圖3的步驟35,本實施例的方法將上述地址文件中的機器指令轉(zhuǎn)化為可讀指令,此處的可讀指令是指程序員、工程師等本領(lǐng)域技術(shù)人員能夠直接解讀的指令。在一個實施例中,可以利用a2n工具和反匯編工具進行指令的轉(zhuǎn)化。a2n(address to name)工具是現(xiàn)有的操作系統(tǒng)中提供的一項工具,用于根據(jù)指令地址找到該指令所對應(yīng)的可執(zhí)行代碼符號,通常是所調(diào)用的函數(shù)名稱。利用a2n工具確定這樣的函數(shù)之后,就可以取出實現(xiàn)該函數(shù)功能的指令流。一般地,這時的指令流是二進制代碼的形式。接著,利用反匯編工具(disassembler)將上述指令流反匯編為用戶能夠理解的可讀指令。由此,綜合利用a2n工具和反匯編工具,就可以將從處理器獲得的機器指令轉(zhuǎn)化為可讀指令。圖6B示出根據(jù)本發(fā)明一個實施例的指令轉(zhuǎn)化表的例子。在圖6B的例子中,對圖6A的分組信息中涉及的指令進行了指令轉(zhuǎn)化,并將轉(zhuǎn)化前后的指令標(biāo)記進行對應(yīng),從而形成轉(zhuǎn)化表。具體地,根據(jù)每個指令的地址,將其轉(zhuǎn)化為可讀指令。出于清楚和簡明的目的,在此用a,b,c,d示意性示出轉(zhuǎn)化的可讀指令。應(yīng)該理解,盡管在圖3的圖示中,在獲取機器指令的分組信息的步驟33之后才執(zhí)行指令轉(zhuǎn)化的步驟35,但是,這樣的執(zhí)行方式僅僅是一種示例。實際上,步驟33和步驟35的執(zhí)行順序并不受到該示例的限制。在一種實施例中,可以先執(zhí)行步驟35來進行指令轉(zhuǎn)化,然后執(zhí)行步驟33來獲得機器指令的分組信息;或者,在另一種實施例中,可以同時執(zhí)行步驟33和35。因此,步驟33和35可以以任意順序執(zhí)行,從而分別對機器指令進行分析和轉(zhuǎn)化?;诓襟E33獲得的機器指令的分組信息和步驟35獲得的轉(zhuǎn)化信息,在圖3的步驟37,通過將上述兩種信息進行綜合,獲得可讀指令的分組信息。具體地,在機器指令的分組信息中,仍然以指令地址來標(biāo)記各個機器指令。而另一方面,步驟35中進行的指令轉(zhuǎn)化給出了指令地址與可讀指令之間的對應(yīng)關(guān)系。根據(jù)這樣的對應(yīng)關(guān)系,將機器指令分組信息中的機器指令替換為可讀指令,即可得到可讀指令的分組信息。例如,在圖6A示例性示出的機器指令分組信息中,每一行示出一個指令組的分組信息,其中包含第一個指令的地址和其他指令的相對偏移。將上述相對偏移分別加上第一個指令的地址即可獲得各個指令的完整地址。將每個指令的地址與圖6B所示的轉(zhuǎn)化表進行對比,即可獲得轉(zhuǎn)化后的可讀指令。用可讀指令替換圖6A中的機器指令地址,即可得到可讀指令的分組信息,如圖7A,7B所示??梢岳斫猓瑘D7A-7B所示為根據(jù)本發(fā)明一個實施例的可讀指令的分組信息的例子,其中圖7A的例子中包含了與指令分組相關(guān)的多種信息,例如指令組的數(shù)目、每個指令組中包含的指令數(shù)目、指令名稱等。在獲得上述分組信息的基礎(chǔ)上,本領(lǐng)域技術(shù)人員還可以進行進一步的分析和統(tǒng)計,從而根據(jù)實際需要得出附加的或更具體的分組信息。例如,可以在圖7A的分組信息的基礎(chǔ)上針對每個單個指令進行統(tǒng)計,獲得該指令單獨出現(xiàn)的次數(shù),在組中出現(xiàn)的次數(shù),以及作為指令組中首個指令出現(xiàn)的次數(shù)等等,如圖7B所示。獲得這樣的附加的或更具體的信息的過程也都屬于本發(fā)明范疇之內(nèi)。由于在步驟31中可以實時地從緩存器讀取處理器的分組指令,因此,由此獲得的 指令分組信息可以是動態(tài)的,從而反映處理器在運行時對指令的分組情況?;谶@樣的指令分組信息,用戶,例如程序員和工程師,就可以清楚地了解處理器對指令的分組處理情況,例如給定特定的指令流,處理器是如何對其進行分組和處理的;哪些指令傾向于形成一個指令組,哪些指令在指令分組中比較流行等等。并且,由于指令分組信息是以可讀指令的形式示出的,因此,用戶可以更容易地解讀這樣的分組信息,并利用這樣的信息來進行代碼優(yōu)化,從而使得編寫或生成的代碼能夠更好地利用處理器的分組規(guī)則。為了更好地示出上述的指令分組信息,在一個實施例中,圖3的方法還包括顯示步驟(未示出),其中將獲得的可讀指令的分組信息以可視化、圖形化的形式示出。圖8A-8C示出根據(jù)本發(fā)明實施例的圖形化的分組信息。在一個實施例中,利用熱度條來示出每個指令的熱度值,其中熱度值正比于指令在指令組中出現(xiàn)的次數(shù)。也就是說,一個指令作為指令組成員的次數(shù)越多,該指令對于指令分組來說越“熱門”,因此熱度值越高。并且,可以在熱度條上用不同顏色或圖案表示不同的熱度值范圍,使得指令熱度的表示更加直觀。圖8A示出根據(jù)圖7B的指令分組信息表示的熱度條,其中示出了指令a,b,c,d的熱度。在一個實施例中,利用統(tǒng)計塊來表示各個指令組的出現(xiàn)情況。圖SB示出根據(jù)圖7A的指令分組信息表示的統(tǒng)計塊視圖。如圖所示,用一個統(tǒng)計塊表示一個指令組,其中統(tǒng)計塊的高度對應(yīng)于構(gòu)成該指令組的指令數(shù)目,統(tǒng)計塊的寬度等于該指令組的出現(xiàn)次數(shù)?;谌绱硕x的高度和寬度,還可以計算每個統(tǒng)計塊的面積,將面積值作為該指令組的流行程度。并且,可以基于計算的流行程度,對統(tǒng)計塊進行排列。具體地,可以按照流行程度從大到小的順序?qū)⒔y(tǒng)計塊從左到右排列。在一個例子中,還可以用不同顏色和/或圖案填充這些統(tǒng)計塊,由此表示不同的流行程度范圍。在一個例子中,可以將圖8A和圖8B的圖示結(jié)合在一起,同時示出單個指令的熱度和指令組的流行程度。在一個實施例中,還可以示出指令分組信息隨時間的變化,如圖SC所示。在圖SC 的視圖中,橫軸表示時間,縱軸表示被執(zhí)行的指令,覆蓋縱軸上若干指令的縱向線段表示特定時刻處理器執(zhí)行的指令組的構(gòu)成。隨著指令分組信息的更新,表示所執(zhí)行的指令組的縱向線段隨時間軸而變化,從而動態(tài)示出處理器對指令的分組情況。在一個例子中,通過選擇特定區(qū)域中的縱向線段,可以示出該線段對應(yīng)的指令組的詳細信息,包括首個指令的地址,其他指令的偏移等等??梢岳斫?,將指令分組信息以可視化、圖形化的形式呈現(xiàn)出來使得分組信息的表示更加直觀,從而有助于用戶的理解和分析。在其他實施例中,本領(lǐng)域技術(shù)人員在本發(fā)明實施例的公開內(nèi)容的教導(dǎo)下,可以想到采用其他的顯示方式,這些顯示方式也在本發(fā)明的發(fā)明構(gòu)思范圍之內(nèi)。因此,本發(fā)明的方法通過讀取處理器在運行時分組的機器指令地址,并對讀取的機器指令進行分析和轉(zhuǎn)化,從而獲得可讀指令的分組信息,并可選地將這樣的分組信息可視化呈現(xiàn)出來。通過這樣的方法,用戶可以了解處理器在運行時對指令的分組情況,從而有可能更好地利用處理器的處理性能?;谕话l(fā)明構(gòu)思,本發(fā)明的實施例還提供了獲取指令分組信息的裝置。圖9示出根據(jù)本發(fā)明一個實施例的裝置的示意框圖。如圖9所示,本實施例的裝置包含如下單元地址讀取單元91,配置為從緩存器中讀取處理器在運行時分組的機器指令的地址,形成地址文件;分析單元93,配置為分析所述地址文件,獲取所述機器指令的分組信息;指令轉(zhuǎn)化單元95,配置為將所述地址文件中的所述機器指令轉(zhuǎn)化為可讀指令;以及信息獲取單元97,配置為基于所述機器指令的分組信息和轉(zhuǎn)化的可讀指令,獲得可讀指令的分組信息。具體地,地址讀取單元91從處理系統(tǒng)的緩存器中讀取分組的指令的地址。所述緩存器可以如圖4所示。基于這樣的緩存器,地址讀取單元91可以讀取各個指令組中的機器指令的地址,包含指令組中首個指令的完整地址和其他指令相對于首個指令的偏移。在獲得多個指令組的地址信息的基礎(chǔ)上,地址讀取單元91可以將這些地址信息組織成一個地址文件,例如地址表。該地址文件的格式應(yīng)得到后續(xù)用于分析和處理指令地址的工具和應(yīng)用的支持。地址表的例子如圖5所示。在形成地址文件的基礎(chǔ)上,分析單元93對地址文件進行分析,從而獲取機器指令的分組信息,包括指令組的數(shù)目、每個指令組中指令的數(shù)目及指令地址等等。進一步地,分析單元93還可以對地址文件中出現(xiàn)的指令組進行統(tǒng)計,由此得出各個指令組的出現(xiàn)次數(shù)或出現(xiàn)頻率。圖6A示出根據(jù)一個實施例的機器指令的分組信息的例子。另一方面,指令轉(zhuǎn)化單元95將上述地址文件中的機器指令轉(zhuǎn)化為可讀指令。具體地,指令轉(zhuǎn)化單元95可以利用a2n工具,根據(jù)指令地址找到該指令所對應(yīng)的可執(zhí)行函數(shù)名稱,并取出該函數(shù)對應(yīng)的指令流,然后利用反匯編工具,將這樣的指令流反匯編為用戶能夠理解的可讀指令。指令轉(zhuǎn)化的例子如圖6B所示。應(yīng)該理解,上述的分析單元93和指令轉(zhuǎn)化單元95可以相互獨立地并行執(zhí)行,而不受執(zhí)行順序的限制?;诜治鰡卧?3獲得的機器指令的分組信息和指令轉(zhuǎn)化單元95獲得的轉(zhuǎn)化信息,信息獲取單元97通過將上述兩種信息進行綜合,獲得可讀指令的分組信息。圖7A-7B示出根據(jù)一個實施例的可讀指令的分組信息的例子。
為了更好地示出獲得的指令分組信息,在一個實施例中,圖9的裝置還包括顯示 單元(未示出),配置為將獲得的可讀指令的分組信息以可視化、圖形化的形式示出。具體地,在一個實施例中,顯示單元可以以熱度條的形式示出單個指令的熱度值,如圖8A所示;在一個實施例中,顯示單元可以利用統(tǒng)計塊來表示各個指令組的出現(xiàn)情況,如圖8B所示;在一個例子中,顯示單元還可以將圖8A和圖SB的圖示結(jié)合在一起進行顯示;在另一個實施例中,顯示單元還可以示出指令分組信息隨時間的變化,如圖SC所示。由于圖9所示裝置的執(zhí)行原理和方式與前述參照圖3進行描述的方法相對應(yīng),因此不再贅述。利用上述的方法和裝置,可以動態(tài)地獲得處理器在運行時對指令的分組處理情況,并將其表示為用戶可讀的形式,使得用戶可以了解指令的分組信息,從而有可能更好地利用處理器的處理性能。圖10示出了適于用來實現(xiàn)本發(fā)明實施方式的示例性計算系統(tǒng)100的框圖。如所示,計算機系統(tǒng)100可以包括CPU(中央處理單元)101、RAM(隨機存取存儲器)102、R0M(只讀存儲器)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)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。雖然以上結(jié)合具體實施例,對本發(fā)明的各個裝置和方法進行了詳細描述,但本發(fā)明并不限于此。本領(lǐng)域普通技術(shù)人員能夠在說明書教導(dǎo)之下對本發(fā)明進行多種變換、替換 和修改而不偏離本發(fā)明的精神和范圍。應(yīng)該理解,所有這樣的變化、替換、修改仍然落入本發(fā)明的保護范圍之內(nèi)。本發(fā)明的保護范圍由所附權(quán)利要求來限定。
權(quán)利要求
1.一種處理指令分組信息的方法,包括 從緩存器中讀取處理器在運行時分組的機器指令的地址,形成地址文件; 分析所述地址文件,獲取所述機器指令的分組信息; 將所述地址文件中的所述機器指令轉(zhuǎn)化為可讀指令;以及 基于所述機器指令的分組信息和轉(zhuǎn)化得到的可讀指令,獲得可讀指令的分組信息。
2.根據(jù)權(quán)利要求I的方法,其中,所述分組的機器指令的地址包括指令組中首個指令的地址和指令組中其他指令相對于該首個指令的地址偏移。
3.根據(jù)權(quán)利要求I或2的方法,其中所述形成地址文件包括,形成地址表形式的地址文件,所述地址表中的一個條目對應(yīng)于一個指令組。
4.根據(jù)權(quán)利要求I的方法,其中分析所述地址文件包括,對所述地址文件中出現(xiàn)的指令組進行統(tǒng)計。
5.根據(jù)權(quán)利要求I的方法,其中將所述地址文件中的所述機器指令轉(zhuǎn)化為可讀指令包括 根據(jù)機器指令地址確定該機器指令所對應(yīng)的可執(zhí)行函數(shù),并取出該函數(shù)對應(yīng)的指令流;以及 將上述指令流進行反匯編,獲得可讀指令。
6.根據(jù)權(quán)利要求I的方法,其中獲得可讀指令的分組信息包括,用轉(zhuǎn)化得到的可讀指令替代所述機器指令的分組信息中的機器指令。
7.根據(jù)權(quán)利要求I的方法,其中所述可讀指令的分組信息包括以下中的至少一項指令組的數(shù)目、指令組中包含的指令數(shù)目、指令組中的可讀指令、特定指令單獨出現(xiàn)的次數(shù)、特定指令在指令組中出現(xiàn)的次數(shù)、特定指令作為指令組中首個指令出現(xiàn)的次數(shù)。
8.根據(jù)權(quán)利要求I的方法,還包括,以圖形化的形式呈現(xiàn)所述可讀指令的分組信息。
9.根據(jù)權(quán)利要求8的方法,其中所述以圖形化的形式呈現(xiàn)所述可讀指令的分組信息包括以下中的至少一項 以熱度條的形式示出單個指令的熱度值; 利用統(tǒng)計塊來表示各個指令組的出現(xiàn)情況;以及 圖示出指令分組信息隨時間的變化。
10.一種處理指令分組信息的裝置,包括 地址讀取單元,配置為從緩存器中讀取處理器在運行時分組的機器指令的地址,形成地址文件; 分析單元,配置為分析所述地址文件,獲取所述機器指令的分組信息; 指令轉(zhuǎn)化單元,配置為將所述地址文件中的所述機器指令轉(zhuǎn)化為可讀指令;以及信息獲取單元,配置為基于所述機器指令的分組信息和轉(zhuǎn)化得到的可讀指令,獲得可讀指令的分組信息。
11.根據(jù)權(quán)利要求10的裝置,其中,所述分組的機器指令的地址包括指令組中首個指令的地址和指令組中其他指令相對于該首個指令的地址偏移。
12.根據(jù)權(quán)利要求10或11的裝置,其中所述地址讀取單元配置為,形成地址表形式的地址文件,所述地址表中的一個條目對應(yīng)于一個指令組。
13.根據(jù)權(quán)利要求10的裝置,其中所述分析單元配置為,對所述地址文件中出現(xiàn)的指令組進行統(tǒng)計。
14.根據(jù)權(quán)利要求10的裝置,其中所述指令轉(zhuǎn)化單元配置為 根據(jù)機器指令地址確定該機器指令所對應(yīng)的可執(zhí)行函數(shù),并取出該函數(shù)對應(yīng)的指令流;以及 將上述指令流進行反匯編,獲得可讀指令。
15.根據(jù)權(quán)利要求10的裝置,其中信息獲取單元配置為,用轉(zhuǎn)化得到的可讀指令替代所述機器指令的分組信息中的機器指令。
16.根據(jù)權(quán)利要求10的裝置,其中所述可讀指令的分組信息包括以下中的至少一項指令組的數(shù)目、指令組中包含的指令數(shù)目、指令組中的可讀指令、特定指令單獨出現(xiàn)的次數(shù)、特定指令在指令組中出現(xiàn)的次數(shù)、特定指令作為指令組中首個指令出現(xiàn)的次數(shù)。
17.根據(jù)權(quán)利要求10的裝置,還包括,顯示單元,配置為以圖形化的形式呈現(xiàn)所述可讀指令的分組信息。
18.根據(jù)權(quán)利要求17的裝置,其中所述顯示單元配置為執(zhí)行以下中的至少一項 以熱度條的形式示出單個指令的熱度值; 利用統(tǒng)計塊來表示各個指令組的出現(xiàn)情況;以及 圖示出指令分組信息隨時間的變化。
全文摘要
本發(fā)明涉及獲取指令分組信息的方法和裝置,所述方法包括從緩存器中讀取處理器在運行時分組的機器指令的地址,形成地址文件;分析所述地址文件,獲取所述機器指令的分組信息;將所述地址文件中的所述機器指令轉(zhuǎn)化為可讀指令;以及基于所述機器指令的分組信息和轉(zhuǎn)化的可讀指令,獲得可讀指令的分組信息。所述裝置與以上方法對應(yīng)。利用上述方法和裝置,可以動態(tài)地獲得處理器在運行時對指令的分組處理情況,從而更好地利用處理器的處理性能。
文檔編號G06F9/30GK102789377SQ201110129608
公開日2012年11月21日 申請日期2011年5月18日 優(yōu)先權(quán)日2011年5月18日
發(fā)明者劉峰, 林鴻昌, 梁祺, 陳沁悅 申請人:國際商業(yè)機器公司