亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

跟蹤指令的控制流程的制作方法

文檔序號:12664230閱讀:264來源:國知局
跟蹤指令的控制流程的制作方法與工藝

技術(shù)領域

此處所描述的各實施例一般涉及處理設備,更具體而言,涉及跟蹤指令的控制流程。

背景

當應用的指令由處理設備(例如,處理器)執(zhí)行時,許多應用(例如,程序)表現(xiàn)出階段行為。隨著應用的執(zhí)行在指令的不同的區(qū)域和/或塊之間移動,處理設備可以具有不同的行為特征。例如,某一指令塊可以包含不相關的指令,并可以允許多個指令同時執(zhí)行。在另一個示例中,某一指令塊可以更經(jīng)常地使用處理設備的某些組件(例如,可以更經(jīng)常地使用算術(shù)邏輯單元和/或存儲器寄存器)。

附圖簡述

通過下面給出的詳細描述以及本發(fā)明的各實施例的各個附圖,將可更加完全地理解本發(fā)明。然而,附圖不應該被理解為將本發(fā)明限制于特定實施例,而只是為了說明和理解的目的。

圖1是根據(jù)本發(fā)明的一個實施例的包括控制流程模塊以及用于跟蹤應用中的指令的執(zhí)行的控制流程的跟蹤模塊的系統(tǒng)體系結(jié)構(gòu)的框圖。

圖2是示出了根據(jù)本發(fā)明的一個實施例的用于跟蹤應用中的指令的執(zhí)行的控制流程的示例控制流程數(shù)據(jù)的表。

圖3是示出了根據(jù)本發(fā)明的另一實施例的用于跟蹤應用中的指令的執(zhí)行的控制流程的示例控制流程數(shù)據(jù)的表。

圖4是示出了根據(jù)一個實施例的指令塊中的指令向一個或多個執(zhí)行單元的示例分配的框圖。

圖5是示出了根據(jù)本發(fā)明的再一個實施例的用于跟蹤應用中的指令的執(zhí)行的控制流程的示例控制流程數(shù)據(jù)的表。

圖6是示出了根據(jù)本發(fā)明的實施例的生成控制流程數(shù)據(jù)的控制流程模塊的框圖。

圖7是示出了根據(jù)本發(fā)明的實施例的跟蹤執(zhí)行指令和/或修改處理模塊所使用的資源的跟蹤模塊的框圖。

圖8是根據(jù)本發(fā)明的一個實施例的跟蹤指令的控制流程的方法的流程圖。

圖9是根據(jù)本發(fā)明的另一實施例的跟蹤指令的控制流程的方法的流程圖。

圖10是根據(jù)本發(fā)明的實施例的芯片上系統(tǒng)(SoC)的框圖。

圖11是根據(jù)本發(fā)明的芯片上系統(tǒng)(SoC)設計的實施例的框圖。

圖12示出了計算機系統(tǒng)的示例形式的機器的示意圖,在該計算機系統(tǒng)內(nèi),可以執(zhí)行用于使機器執(zhí)行此處所討論的方法中的任何一個或多個的一組指令。

圖13是根據(jù)一個實現(xiàn)的計算機系統(tǒng)的框圖。

圖14是示出了通過圖14的處理設備1400來實現(xiàn)的有序流水線和寄存器重命名級、無序發(fā)布/執(zhí)行流水線的框圖。

圖15是示出了根據(jù)本發(fā)明的至少一個實施例的要包括在處理器中的有序體系結(jié)構(gòu)核和寄存器重命名邏輯、無序發(fā)布/執(zhí)行邏輯的框圖。

圖16根據(jù)本發(fā)明的一個實施例的包括執(zhí)行指令的邏輯電路的處理器200的微型體系結(jié)構(gòu)的框圖。

具體實施方式

如上文所討論的,當應用的指令由處理設備執(zhí)行時,許多應用(例如,程序)表現(xiàn)出階段行為。分析指令的區(qū)域或塊可以使處理設備提高和/或優(yōu)化指令的每一個單個區(qū)域或塊的性能和/或功率使用。標識指令的區(qū)域或塊的一種可能的硬件解決方案將是提供對應于階段-過渡的指令地址的按內(nèi)容尋址的存儲器(CAM)。當處理設備執(zhí)行每一指令時,處理設備可以訪問CAM以判斷是否正在進入/退出新代碼區(qū)域以及是否需要激活優(yōu)化。然而,一旦CAM的大小超出幾個條目,CAM就功率消耗而言效率低。另外,編程器和/或編譯器可以將額外的指令插入到應用本身中(例如,在編譯時),以輸出關于應用的哪一個指令當前正在執(zhí)行的信息。然而,這可能會減慢應用的執(zhí)行,并可能添加大量開銷。

本發(fā)明的各實施例可以跟蹤應用中的指令的控制流程,并基于應用中的指令的控制流程,執(zhí)行處理設備的一次或多次優(yōu)化。在一個實施例中,生成控制流程數(shù)據(jù)以指示應用中的指令塊的控制流程??刂屏鞒虜?shù)據(jù)可以包括指示是否可以對不同的指令塊執(zhí)行優(yōu)化的注釋。也可以使用控制流程數(shù)據(jù)來跟蹤指令的執(zhí)行,以判斷指令塊中的指令是否分配給處理器的線程、進程和/或執(zhí)行核,并判斷在所述指令的執(zhí)行過程中是否發(fā)生了錯誤。處理設備和/或耦合到處理設備的跟蹤模塊可以跟蹤指令的執(zhí)行和/或基于控制流程數(shù)據(jù)來優(yōu)化處理設備的操作。在一個實施例中,控制流程數(shù)據(jù)可以使用表來表示,該表可以使處理設備和/或跟蹤模塊來有效率地索引到表中的單個位置或條目。

雖然可以參考特定集成電路(諸如在計算平臺或微處理器中)來描述下列實施例,但其他實施例也適用于其他類型的集成電路和邏輯設備??梢詫⒋颂幩枋龅母鲗嵤├念愃频募夹g(shù)和原理應用于其他類型的電路或半導體器件。例如,所公開的各實施例不僅限于臺式計算機系統(tǒng)或UltrabooksTM。也可以用于諸如手持式設備、平板、其他薄的筆記本、芯片上系統(tǒng)(SOC)設備以及嵌入式應用之類的其他設備中。手持式設備的某些示例包括蜂窩電話、網(wǎng)際協(xié)議設備、數(shù)碼相機、個人數(shù)字助理(PDA)以及手持式PC。嵌入式應用通常包括微控制器、數(shù)字信號處理器(DSP)、芯片上系統(tǒng)、網(wǎng)絡計算機(NetPC)、機頂盒、網(wǎng)絡集線器、廣域網(wǎng)(WAN)交換機,或能夠執(zhí)行下面教導的功能和操作的任何其他系統(tǒng)。

雖然將參考處理器來描述下列各實施例,但是,其他實施例也適用于其他類型的集成電路和邏輯設備??梢詫⒈景l(fā)明的各實施例的類似的技術(shù)和原理應用于可以得益于較高流水線吞吐量和改善的性能的其他類型的電路或半導體器件。本發(fā)明的各實施例的原理適用于執(zhí)行數(shù)據(jù)操縱的任何處理器或機器。然而,本發(fā)明不僅限于執(zhí)行512比特、256比特、128比特、64比特、32比特或16比特數(shù)據(jù)操作的處理器或機器,并可以應用于其中執(zhí)行對數(shù)據(jù)的操縱或管理的任何處理器和機器。另外,下列描述提供了示例,出于說明的目的,各個附圖示出了各種示例。然而,這些示例不應該以限制的意義來解釋,因為它們只是為了提供本發(fā)明的各實施例的示例,而并非提供本發(fā)明的各實施例的所有可能的實現(xiàn)的詳盡清單。

圖1是根據(jù)本發(fā)明的一個實施例的系統(tǒng)體系結(jié)構(gòu)100的框圖,該系統(tǒng)體系結(jié)構(gòu)100包括控制流程模塊140以及用于跟蹤應用中的指令的執(zhí)行的控制流程的跟蹤模塊150。該系統(tǒng)體系結(jié)構(gòu)還包括應用110、編譯器120、二進制分析器130、運行時配置文件135、控制流程數(shù)據(jù)145,以及處理模塊160。

應用110可以是程序、軟件模塊、軟件組件,和/或可以由處理模塊160執(zhí)行的其他軟件元件。應用110可以包括多個指令。指令可以包括使處理模塊160執(zhí)行諸如但不僅限于讀取數(shù)據(jù)、寫入數(shù)據(jù)、處理數(shù)據(jù)、形成數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)、變換數(shù)據(jù)等等之類的活動的程序代碼。例如,應用110可以是包括使處理模塊160執(zhí)行媒體播放器以播放媒體項(諸如數(shù)字視頻、數(shù)字音樂)或使處理模塊160執(zhí)行web瀏覽器的指令的二進制文件和/或可執(zhí)行文件。應用110中的指令可以被分成指令塊(例如,指令系列或組),諸如指令塊115A到115X。

指令塊115A到115X可以包括各種不同的指令(例如,程序指令)。例如,指令塊115A到115X可以包括ADD指令(以添加兩個或更多值)、MULT指令(乘以兩個或更多值)、XOR(異-或)指令(對兩個或更多值進行異-或運算)、AND(與)指令(對兩個或更多值執(zhí)行逐比特與運算)、存儲指令(將值存儲在諸如寄存器之類的存儲器位置)、JUMP(轉(zhuǎn)移)指令(將指令的執(zhí)行流程定向到特定指令)、BRANCH(分支)指令(基于一個或多個條件,等等,將指令的執(zhí)行流程定向到特定指令)。在一個實施例中,指令塊115A到115X可以是基本塊。基本塊可以是具有一個入口點(例如,基本塊中的一個指令是JUMP和/或BRANCH指令的目的地)和一個出口點(例如,最后一個指令可以是到不同的基本塊的JUMP或BRANCH指令)的指令的組(例如,塊)。

處理模塊160可以執(zhí)行應用110的指令。指令可以包括使處理模塊160執(zhí)行諸如,但不僅限于,讀取數(shù)據(jù)、寫入數(shù)據(jù)、處理數(shù)據(jù)、制定數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)、變換數(shù)據(jù)等等之類的活動的程序代碼。作為一個說明性示例,處理模塊160可以包括復雜指令集計算機(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、多核處理器、多線程處理器、超低電壓處理器、嵌入式處理器、實現(xiàn)指令集的組合的處理器和/或任何其他處理器設備,諸如例如數(shù)字信號處理器。處理模塊160可以是諸如位于加利福尼亞州圣克拉拉市的英特爾公司所提供的CoreTM i3、i5、i7、2Duo以及Quad、XeonTM、ItaniumTM、XScaleTM、或StrongARMTM之類的通用處理器??闪磉x地,處理模塊160可以來自另一公司,諸如ARM Holdings,Ltd,MIPS,等等。處理模塊160可以是專用的處理器,諸如,例如,網(wǎng)絡或通信處理器、壓縮引擎、圖形處理器、協(xié)處理器、嵌入式處理器、專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、數(shù)字信號處理器(DSP)等等。處理模塊160可以在一個或多個芯片上實現(xiàn)。處理模塊160可以是一個或多個襯底的一部分和/或可以使用若干種處理技術(shù)(諸如,例如,BiCMOS、CMOS,或NMOS)中的任何一種在一個或多個襯底上實現(xiàn)。

在一個實施例中,當指令塊115A到115X中的一個或多個由處理模塊160執(zhí)行時,處理模塊160可以表現(xiàn)出不同的行為、特征,可以更加經(jīng)常地使用處理模塊160的某些組件(例如,處理模塊160內(nèi)的某些電路),和/或可以以某種方式起作用。例如,指令塊115A可以包括執(zhí)行算術(shù)和/或邏輯函數(shù)(諸如XOR、ADD、MULT等等)的各種指令(例如,程序指令)。當與其他指令塊相比時,當執(zhí)行指令塊115A中的指令時,處理模塊160可以更多地使用算術(shù)和邏輯單元(ALU)。在另一個示例中,指令塊115B可以包括不相關的指令(例如,不取決于指令塊115B中的其他指令的指令)。不相關的指令可以允許多個指令同時由處理模塊160執(zhí)行。在一個實施例中,指令級并行性(ILP)可以是處理模塊160可以同時執(zhí)行多少指令的度量。由于指令塊115中的指令確實不相關(例如,指令不依賴于其他指令的結(jié)果),因此指令塊115B可以比其他指令塊允許較高量的ILP。

在一個實施例中,編譯器120可以基于源代碼來生成應用110。源代碼可以是使用某些人類可讀的語言(例如,諸如JAVA、C++、C、C#等等之類的編程語言)編寫的一個或多個計算機指令。編譯器120可以是可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等等)、軟件(諸如在處理設備上運行的指令)、固件或其組合的任何處理邏輯,該處理邏輯可以在有或者沒有額外的鏈接處理的情況下生成由處理模塊160執(zhí)行的指令(例如,二進制代碼、目標代碼、程序指令等等)。在另一個實施例中,編譯器120可以是即時(JIT)編譯器。JIT編譯器可以是從源代碼生成字節(jié)代碼的編譯器。字節(jié)代碼可以是由虛擬機轉(zhuǎn)換和/或解釋為可以由處理模塊160來執(zhí)行的指令(例如,二進制代碼、目標代碼、程序指令等等)的中間表示。由JIT編譯器所生成的字節(jié)代碼可以在不同的計算機體系結(jié)構(gòu)之間可移植。與每一個不同的計算機體系結(jié)構(gòu)相關聯(lián)的虛擬機都可以將字節(jié)代碼轉(zhuǎn)換為和/或解釋為計算機體系結(jié)構(gòu)所使用的指令。

在一個實施例中,二進制分析器130可以是可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等等)、軟件(諸如在處理設備上運行的指令)、固件或其組合的處理邏輯,該處理邏輯可以在應用110被處理模塊160執(zhí)行時(例如,當指令和/或指令塊115A到115X被執(zhí)行時)分析應用110。二進制分析器130可以標識應用110中的BRANCH和/或JUMP指令,可以標識BRANCH和/或JUMP指令的目的地,可以標識指令塊115A到115X中的指令的類型(例如,訪問存儲器或寄存器的指令、算術(shù)或邏輯運算指令等等),可以標識應用110中的指令所使用的存儲器位置(例如,寄存器)等等。二進制分析器130還可以標識應用110中的指令塊115A到115X(例如,基本塊)。例如,二進制分析器130可以將應用110的多個指令組合為指令塊115C。在一個實施例中,二進制分析器130可以從處理模塊接收關于應用110的指令的執(zhí)行的數(shù)據(jù)。二進制分析器130可以在運行時配置文件135中記錄和/或存儲關于應用110的指令的執(zhí)行的數(shù)據(jù)。運行時配置文件135可以包括諸如BRANCH和/或JUMP指令的位置、采用BRANCH指令的每一路徑的次數(shù),指令所使用的和/或被指令訪問的存儲器位置,指令的類型等等之類的數(shù)據(jù)。在一個實施例中,運行時配置文件135可以是指示應用110的指令曾如何被執(zhí)行的數(shù)據(jù)和/或應用110的指令所使用的資源(例如,存儲器寄存器、處理模塊160的電路和/或組件)。運行時配置文件還可以包括指示指令、操作、函數(shù)和/或其他動作需要多長時間來執(zhí)行的數(shù)據(jù)。例如,運行時配置文件135可以包括指示處理模塊160需要花費多長時間來執(zhí)行特定指令和/或指令塊的數(shù)據(jù)。運行時配置文件135還可以被稱為跟蹤或指令跟蹤。

在一個實施例中,控制流程模塊140可以為應用110生成控制流程數(shù)據(jù)145??刂屏鞒棠K140可以是可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等等)、軟件(諸如在處理設備上運行的指令)、固件或其組合的處理邏輯??刂屏鞒虜?shù)據(jù)145可以包括諸如指令塊115A到115X的標識符、目的地標識符(例如,第一指令塊可以分支到和/或跳轉(zhuǎn)到的一個或多個指令塊的標識符)、和/或指令塊115A到115X中的一個或多個的注釋之類的數(shù)據(jù)和/或信息。下面結(jié)合圖2、3以及5比較詳細地討論了控制流程數(shù)據(jù)145??刂屏鞒棠K140可以分析由編譯器120所生成的應用110以生成控制流程數(shù)據(jù)145??刂屏鞒棠K140可以從應用110中的指令來標識指令塊(例如,指令塊115A到115X)。例如,編譯器120可以將應用110的多個指令組合為指令塊115D??刂屏鞒棠K140還可以標識BRANCH和/或JUMP指令的目的地指令塊。例如,指令塊115A可以包括取決于是否滿足與BRANCH指令相關聯(lián)的條件而移動到指令塊115B或指令塊115D的BRANCH指令。

在一個實施例中,控制流程模塊140可以將間接BRANCH指令轉(zhuǎn)換為一系列COMPARE指令和JUMP指令。間接BRANCH指令可以是指定地址位于哪里而并非指定要執(zhí)行的下一指令的地址的指令??刂屏鞒棠K140可以為間接BRANCH的每一個目標生成一對COMPARE和JUMP指令。例如,如果間接BRANCH指令具有第一目標和第二目標,則控制流程模塊可以生成第一COMPARE指令和第一JUMP指令,該第一COMPARE指令判斷下一指令地址是否等于第一目標,以及如果第一目標等于下一指令地址則執(zhí)行第一JUMP指令;該控制流程模塊并且可以生成第二COMPARE指令和第二JUMP指令,該第二COMPARE指令判斷下一指令地址是否等于第二目標的,以及如果第二目標等于下一指令地址則執(zhí)行第二JUMP指令。優(yōu)化可以用于返回(return),返回是一種形式的間接BRANCH。對于返回,編譯器120可能知道返回將控制轉(zhuǎn)移到其對應的調(diào)用之后的指令。除控制流程表之外,還可以通過維護調(diào)用/返回塊的層疊,來發(fā)現(xiàn)返回指令的目標指令。

在一個實施例中,控制流程模塊140可以為指令塊115A到115X中的一個或多個生成注釋。注釋可以被包括在控制流程數(shù)據(jù)145中。注釋可以包括可以被用來跟蹤應用110中的指令的執(zhí)行、可以被用來修改處理模塊160所使用的資源、可以被用來使處理模塊160更有效率地操作和/或可以被用來優(yōu)化處理模塊160的操作的數(shù)據(jù)。例如,注釋可以包括諸如在指令塊中可能的ILP的量之類的信息。在另一個示例中,注釋可以包括諸如指令塊中的指令的數(shù)量之類的信息。此信息可以被用來標識硬錯誤(例如,諸如寄存器之類的存儲器中的物理或硬件錯誤)和/或軟錯誤(例如,可能改變指令和/或數(shù)據(jù)值的信號或數(shù)據(jù)中的錯誤)。

在一個實施例中,當生成控制流程數(shù)據(jù)145時,控制流程模塊140可以與編譯器120進行通信(例如,向其傳輸數(shù)據(jù)和/或從其接收數(shù)據(jù))。例如,當編譯器120編譯源代碼以生成應用110的指令時,編譯器120可以向控制流程模塊140提供指令,并且控制流程模塊140可以分析指令以生成控制流程數(shù)據(jù)145。在另一個實施例中,可以包括控制流程模塊140,作為編譯器120的組件和/或作為編譯器120的一部分。例如,控制流程模塊140可以是當編譯器120生成應用110的指令時編譯器120所使用的軟件模塊和/或組件。編譯器120可以在編譯器120生成應用110的指令(例如,生成應用110)的同時或大約同時生成控制流程數(shù)據(jù)145。

在一個實施例中,當生成控制流程數(shù)據(jù)145時,控制流程模塊140可以與二進制分析器130進行通信(例如,向其傳輸數(shù)據(jù)和/或從其接收數(shù)據(jù))。例如,二進制分析器可以生成運行時配置文件135,并可以向控制流程模塊140提供運行時配置文件135。控制流程模塊140可以分析運行時配置文件135以生成控制流程數(shù)據(jù)145。在另一個實施例中,可以包括控制流程模塊140,作為二進制分析器的組件和/或作為二進制分析器的一部分。例如,二進制分析器130可以在二進制分析器130生成運行時配置文件135的同時或大約同時生成控制流程數(shù)據(jù)145。

在一個實施例中,跟蹤模塊150可以跟蹤應用110中的一個或多個指令的執(zhí)行,可以允許處理模塊160更有效率地操作,和/或可以使用控制流程數(shù)據(jù)145來優(yōu)化處理模塊的操作。跟蹤模塊150可以是可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等等)、軟件(諸如在處理設備上運行的指令)、固件或其組合的處理邏輯。例如,跟蹤模塊150可以是以硬件實現(xiàn)的有限狀態(tài)機。有限狀態(tài)機包括可編程邏輯器件、可編程邏輯控制器、邏輯門、觸發(fā)器和/或繼電器。有限狀態(tài)機還可以包括存儲狀態(tài)變量的一個或多個存儲器和/或寄存器。有限狀態(tài)機還可以包括組合邏輯的判斷是否應該發(fā)生狀態(tài)轉(zhuǎn)換的一個或多個塊,以及組合邏輯的確定有限狀態(tài)機的輸出的一個或多個塊。在一個實施例中,跟蹤模塊150可以是處理模塊160的一部分。例如,跟蹤模塊150可以是處理模塊160內(nèi)的電路。

在一個實施例中,跟蹤模塊150可以修改處理模塊160所使用的資源,和/或可以基于控制流程數(shù)據(jù)145來優(yōu)化處理模塊160的操作。例如,跟蹤模塊150可以確定指令塊115A具有低ILP。處理模塊160可以包括多個執(zhí)行核(例如,四個執(zhí)行核、八個執(zhí)行核等等),跟蹤模塊150可以指示處理模塊160停用、斷電和/或避免使用某些執(zhí)行核,以減少處理模塊160所使用的電量。在另一個示例中,跟蹤模塊150可以確定指令塊(例如,指令塊115C)主要包括算術(shù)和邏輯運算指令(例如,ADD、XOR等等)。跟蹤模塊150可以指示處理模塊160準備好對于即將來臨的指令塊中的指令執(zhí)行算術(shù)和邏輯操作的電路、組件和/或模塊。

在一個實施例中,跟蹤模塊150可以判斷對處理模塊160所使用的資源的修改是否對處理模塊160的操作具有效果。例如,跟蹤模塊150可以判斷使處理模塊160中的一個或多個組件斷電或停用是否使計算設備節(jié)省電能(例如,使用較少的能量或電池電量)。在另一個示例中,跟蹤模塊150可以判斷準備好處理模塊160的即將來臨的指令塊所使用的電路、組件和/或模塊是否提高應用110中的指令的執(zhí)行的速度。在一個實施例中,如果跟蹤模塊150確定對處理模塊160所使用的資源的修改對處理模塊160的操作沒有效果,則跟蹤模塊150可以更新控制流程數(shù)據(jù)145,以指示不應該執(zhí)行對資源的修改(例如,指示不應該執(zhí)行優(yōu)化)。例如,跟蹤模塊150可以刪除注釋(該注釋可以包括表示優(yōu)化的數(shù)據(jù)),或可以向注釋中添加指示不應該執(zhí)行對資源的修改的數(shù)據(jù)。

在另一個實施例中,跟蹤模塊150可以使用控制流程數(shù)據(jù)145來跟蹤應用110中的指令的執(zhí)行。例如,處理模塊160可以確定處理模塊160正在執(zhí)行指令塊115A,指令塊115A包括十二個指令。如果處理模塊160在執(zhí)行少于十二個指令之后轉(zhuǎn)移到在另一指令塊(例如,指令塊115D)中執(zhí)行指令,則跟蹤模塊可以確定發(fā)生了錯誤(例如,硬錯誤和/或軟錯誤),因為在執(zhí)行來自其他指令塊的指令之前,執(zhí)行了少于十二個指令。跟蹤模塊150可以發(fā)送或產(chǎn)生錯誤標記,處理模塊160可以基于錯誤標記來執(zhí)行額外的操作(例如,可以結(jié)束應用110的指令的執(zhí)行)。在另一個示例中,處理模塊160可以使用不同的進程、線程和/或執(zhí)行核來執(zhí)行指令塊中的指令。當處理模塊160執(zhí)行來自指令塊的指令時,處理模塊160可以將指令分配到進程、線程和/或執(zhí)行核。跟蹤模塊150可以向控制流程數(shù)據(jù)145添加注釋和/或更新注釋,以指示將指令塊中的指令分配到哪一個進程、線程和/或執(zhí)行核。

在一個實施例中,編譯器120、二進制分析器130、控制流程模塊140以及跟蹤模塊150中的一個或多個可以駐留在處理模塊160所駐留的同一個計算設備中。例如,編譯器120、跟蹤模塊150以及處理模塊160可以駐留在同一個計算設備上。在另一個示例中,二進制分析器130、控制流程模塊140以及跟蹤模塊150可以駐留在處理模塊160所駐留的同一個計算設備中。計算設備的示例可以包括但不僅限于諸如蜂窩式手持終端(例如,蜂窩電話)或智能電話之類的移動通信設備、諸如平板電腦、上網(wǎng)本、筆記本電腦、膝上型計算機之類的移動計算設備、臺式計算機、服務器計算機等等。

圖2是示出了根據(jù)本發(fā)明的一實施例的用于跟蹤應用中的指令的執(zhí)行的控制流程的示例控制流程數(shù)據(jù)的表290。如上文所討論的,跟蹤模塊可以使用表290(例如,控制流程數(shù)據(jù))來修改處理模塊(例如,處理器)所使用的資源,以允許處理模塊更有效率地操作,和/或優(yōu)化處理模塊的操作。雖然以表(例如,表290)的形式示出了控制流程數(shù)據(jù),但是,應該理解,控制流程數(shù)據(jù)可以使用各種其他數(shù)據(jù)結(jié)構(gòu)和/或表示來表示。例如,控制流程數(shù)據(jù)可以使用圖、樹、列表等等來表示。

表290包括四列。第一列標記為“當前塊”,并包括六個不同的指令塊(例如,基本塊)的標識符(例如,塊標識符)?;仡^參考圖1,指令塊115A可以使用標識符“1”來標記,指令塊115B可以使用標識符“2”來標記,指令塊115C可以使用標識符“3”來標記,等等。應該理解,在其他實施例中,標識符可以是可以被用來標識指令塊(例如,基本塊)的任何字母數(shù)字值、字符串、數(shù)字和/或其他值。第二列標記為“不采用”,并包括當不采用BRANCH指令時目的地指令塊的標識符。例如,指令塊“1”中的最后一個指令可以是BRANCH指令,在執(zhí)行過程中,可能不滿足BRANCH指令的條件。當不滿足BRANCH指令的條件時,處理模塊可以轉(zhuǎn)移和/或前進到指令塊“6”中的指令。在一個實施例中,表290可以指示,指令塊不包括帶有條件的BRANCH指令。例如,指令塊“3”對于“不采用”列,具有值“N/A(不適用)”。這可以指示,指令塊“3”中的最后一個指令是無條件BRANCH或JUMP指令。第三列標記為“采用”,并包括當采用BRANCH指令時目的地指令塊的標識符。例如,指令塊“1”中的最后一個指令可以是BRANCH指令,在執(zhí)行過程中,可能滿足BRANCH指令的條件。當滿足了BRANCH指令的條件時,處理模塊可以轉(zhuǎn)移和/或前進到指令塊“2”中的指令。第四列被標記為“注釋”,并包括“當前塊”列中標識的指令塊的一個或多個注釋。

表290的每一行都包括:當前指令塊的標識符(例如,包含當前正在執(zhí)行的指令的指令塊的標識符);在不采用BRANCH指令時的目的地指令塊的第一標識符;在采用BRANCH指令的時的目的地指令塊的第二標識符;以及當前塊(例如,當前指令塊或當前基本塊)的注釋。例如,表290的第一行指示,如果在指令塊“1”末尾處不采用BRANCH指令,則指令塊“1”將轉(zhuǎn)移到指令塊“6”,如果在指令塊“2”的末尾處采用BRANCH指令,則將轉(zhuǎn)移到指令塊“2”。表的第一行還包括注釋“TAKEN:2-WIDE(采用:2-寬度)”。此注釋可以指示當處理模塊執(zhí)行來自指令塊“2”的指令時可能的ILP的量或級別。例如,注釋“TAKEN:2-WIDE”可以指示,當執(zhí)行來自指令塊“2”的指令時,處理模塊能夠同時執(zhí)行多達兩個指令。跟蹤模塊可以基于指令塊“1”的注釋,指示處理模塊來使用兩個執(zhí)行核并使其他執(zhí)行核斷電。在另一個示例中,表290的第五行的注釋“Not-Taken:4-WIDE(未采用:4-寬度)”可以指示,當執(zhí)行來自指令塊“6”的指令時,處理模塊能夠同時執(zhí)行四個指令。跟蹤模塊可以基于指令塊5的注釋,指示處理模塊使用四個執(zhí)行核。在其他實施例中,指令塊的注釋可以包括任何字母數(shù)字值、文本值和/或數(shù)字值。

在一個實施例中,表290使跟蹤模塊通過索引到表290中的單個條目和/或位置,來跟蹤指令塊的執(zhí)行。這可使跟蹤模塊比使用CAM(將需要查詢整個CAM)更有效率地操作,以跟蹤指令塊的執(zhí)行。

圖3是示出了根據(jù)本發(fā)明的另一實施例的用于跟蹤應用中的指令的執(zhí)行的控制流程的示例控制流程數(shù)據(jù)的表300。如上文所討論的,跟蹤模塊可以使用表300(例如,控制流程數(shù)據(jù))來跟蹤由處理模塊執(zhí)行的指令。雖然以表(例如,表300)的形式示出了控制流程數(shù)據(jù),但是,應該理解,控制流程數(shù)據(jù)可以使用各種其他數(shù)據(jù)結(jié)構(gòu)和/或表示來表示。例如,控制流程數(shù)據(jù)可以使用圖、樹、列表等等來表示。

表300包括四列。第一列標記為“當前塊”,并包括六個不同的指令塊(例如,基本塊)的標識符(例如,塊標識符)。第二列標記為“不采用”,并包括當不采用BRANCH指令時目的地指令塊的標識符。在一個實施例中,表300可以指示,指令塊不包括帶有條件的BRANCH指令。例如,指令塊“4”具有對于“不采用”列的值“N/A”,這可以表示指令塊“4”中的最后一個指令是無條件BRANCH或JUMP指令。第三列標記為“采用”,并包括當采用BRANCH指令時目的地指令塊的標識符。在其他實施例中,標識符可以是可以被用作標識指令塊(例如,基本塊)的標識符的任何字母數(shù)字值、字符串、數(shù)字和/或其他值。第四列被標記為“注釋”,并包括“當前塊”列中標識的指令塊的一個或多個注釋。

表300的每一行都包括:當前指令塊的標識符(例如,包含當前正在執(zhí)行的指令的指令塊的標識符);在不采用BRANCH指令時的目的地指令塊的第一標識符;在采用BRANCH指令時的目的地指令塊的第二標識符;以及當前塊(例如,當前指令塊或當前基本塊)的注釋。例如,表300的第二行指示,如果在指令塊“4”末尾處不采用BRANCH指令,則指令塊“2”將轉(zhuǎn)移到指令塊“3”,如果在指令塊“3”的末尾處采用BRANCH指令,將轉(zhuǎn)移到指令塊“2”。表的第二行還包括注釋“指令計數(shù):3”。注釋可以表示,指令塊“2”包括三個指令。基于該注釋,跟蹤模塊可以跟蹤指令塊中的指令的執(zhí)行以判斷是否發(fā)生了軟錯誤和/或硬錯誤。例如,跟蹤模塊可以確定,發(fā)生了軟錯誤,因為當執(zhí)行指令塊“2”時處理模塊執(zhí)行少于三個指令。在其他實施例中,指令塊的注釋可以包括任何字母數(shù)字值、文本值和/或數(shù)字值,以表示指令塊中的指令的數(shù)量。

在一個實施例中,表300使跟蹤模塊通過索引到表300中的單個條目和/或位置,來跟蹤指令塊的執(zhí)行。這可使跟蹤模塊比使用CAM(將需要查詢整個CAM)更有效率地操作,以跟蹤指令塊的執(zhí)行。

圖4是示出了根據(jù)一實施例的將指令塊中的指令向一個或多個執(zhí)行單元的示例分配400的框圖。分配400包括指令塊405、線程分配410以及線程分配415。指令塊405包括XOR指令,接下來是AND指令,接下來是SHIFT指令,接下來是OR指令,接下來是MULT指令,接下來是AND指令,接下來是SHIFT指令,接下來是BRANCH指令。如上文所討論的,指令塊(例如,指令塊405)中的單個指令可以被分配給不同的執(zhí)行單元(例如,不同的線程和/或不同的進程)或處理器的不同的執(zhí)行核。例如,可以將指令塊405中的各個指令分配給一個或多個線程。在另一個示例中,可以將指令塊405中的各個指令分配給一個或多個進程。在另一個示例中,可以將指令塊405中的各個指令分配給不同的執(zhí)行核(例如,圖10中所示出的核1002A和圖11中所示出的核1106和1107)。

如圖4所示,可以將指令塊405中的指令分配給一個或多個線程(例如,執(zhí)行單元)。線程分配410可指示指令是否將由第一線程來執(zhí)行,而線程分配415可以指示指令是否將由第二線程來執(zhí)行。“1”值表示線程將執(zhí)行指令,“0”值表示線程將不會執(zhí)行指令。例如,XOR指令被分配到第一線程,MULT指令被分配到第二線程,而OR指令被分配到第一線程和第二線程兩者。

圖5是示出了根據(jù)本發(fā)明的再一個實施例的用于跟蹤應用中的指令的執(zhí)行的控制流程的示例控制流程數(shù)據(jù)的表500。如上文所討論的,跟蹤模塊可以使用表500(例如,控制流程數(shù)據(jù))來跟蹤由處理模塊執(zhí)行的指令。雖然以表(例如,表500)的形式示出了控制流程數(shù)據(jù),但是,應該理解,控制流程數(shù)據(jù)可以使用各種其他數(shù)據(jù)結(jié)構(gòu)和/或表示來表示。例如,控制流程數(shù)據(jù)可以使用圖、樹、列表等等來表示。

表500包括四列。第一列標記為“當前塊”,并包括六個不同的指令塊(例如,基本塊)的標識符(例如,塊標識符)。第二列標記為“不采用”,并包括當不采用BRANCH指令時目的地指令塊的標識符。在一個實施例中,表500可以指示,指令塊不包括帶有條件的BRANCH指令。例如,指令塊“4”具有“未采用”列的值“N/A”,可以表示,指令塊“4”中的最后一個指令是無條件BRANCH或JUMP指令。第三列標記為“采用”,并包括當采用BRANCH指令時目的地指令塊的標識符。在其他實施例中,標識符可以是可以被用作標識指令塊(例如,基本塊)的標識符的任何字母數(shù)字值、字符串、數(shù)字和/或其他值。第四列被標記為“注釋”,并包括“當前塊”列中標識的指令塊的一個或多個注釋。

表500的每一行都包括:當前指令塊的標識符(例如,包含當前正在執(zhí)行的指令的指令塊的標識符);在不采用BRANCH指令時的目的地指令塊的第一標識符;在采用BRANCH指令時的目的地指令塊的第二標識符;以及當前塊(例如,當前指令塊或當前基本塊)的注釋。例如,表500的第一行指示,如果在指令塊“1”末尾處不采用BRANCH指令,則指令塊“1”將轉(zhuǎn)移到指令塊“6”,如果在指令塊“1”的末尾處采用BRANCH指令,將轉(zhuǎn)移到指令塊“2”。表500的第一行還包括注釋“T0:11010101/T1:01111010”。指令塊“1”的注釋可以表示是否將來自指令塊“1”的指令分配給第一線程T0、第二線程T1或兩者?;仡^參考圖4,指令塊“1”可以包括指令塊405中所示出的八個指令。注釋“T0:11010101/T1:01111010”表示,將指令塊“1”(例如,指令塊405)中的第一、第二、第四、第六以及第八指令分配給線程T0,而將指令塊“1”中的第二、第三、第四、第五以及第七指令分配給線程T1。

在一個實施例中,表500允許跟蹤模塊通過索引到表500中的單個條目和/或位置,來跟蹤指令塊的執(zhí)行。這可使跟蹤模塊比使用CAM(將需要查詢整個CAM)更有效率地操作,以跟蹤指令塊的執(zhí)行。

圖6是示出了根據(jù)本發(fā)明的一實施例的生成控制流程數(shù)據(jù)的控制流程模塊140的框圖??刂屏鞒棠K140包括指令模塊605、注釋模塊610以及配置文件模塊615。控制流程模塊140可以是可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等等)、軟件(諸如在處理設備上運行的指令)、固件或其組合的處理邏輯。在控制流程模塊140中可包括更多或更少組件,而不失一般性。例如,兩個模塊可以合并成單個模塊,或一個模塊可以被分成兩個或更多模塊。在一個實施例中,控制流程模塊140可以生成控制流程數(shù)據(jù)(如上文結(jié)合圖1,2,3,以及5所討論)。

在一個實施例中,指令模塊605可以分析應用(由編譯器所生成的)。指令模塊605可以標識應用中的指令中的指令塊(例如,基本塊)。指令模塊605還可以標識應用的指令塊中的BRANCH和/或JUMP指令的目的地指令塊。指令模塊605在生成控制流程數(shù)據(jù)145時,可以與編譯器進行通信(例如,向其傳輸數(shù)據(jù)和/或從其接收數(shù)據(jù))。例如,當編譯器編譯源代碼以生成應用時,編譯器可以向指令模塊605提供指令,并且指令模塊605可以分析指令以生成控制流程數(shù)據(jù)。

在一個實施例中,配置文件模塊615可以與二進制分析器進行通信(例如,向其傳輸數(shù)據(jù)和/或從其接收數(shù)據(jù))。例如,二進制分析器可以生成運行時配置文件,并可以向配置文件模塊615提供運行時配置文件。配置文件模塊615可以基于運行時配置文件來標識應用中的指令中的指令塊(例如,基本塊)。配置文件模塊615還可以基于運行時配置文件來標識應用的指令塊中的BRANCH和/或JUMP指令的目的地指令塊。配置文件模塊615可以分析運行時配置文件來生成控制流程數(shù)據(jù)。

在一個實施例中,注釋模塊610可以為指令中的一個或多個生成注釋。注釋可以被包括在控制流程數(shù)據(jù)中。注釋可以包括可以被用來跟蹤應用中的指令的執(zhí)行的數(shù)據(jù),如上文所示以及結(jié)合圖3-5所討論的。注釋還可以包括可以被用來修改處理模塊所使用的資源以使處理模塊更有效率地操作、和/或可以被用來優(yōu)化處理模塊的操作的數(shù)據(jù)。例如,注釋可以包括諸如在指令塊中可能的ILP的量之類的信息。在另一個示例中,注釋還可以包括有關指令塊可以使用處理設備的哪些類型的組件和/或單元的信息。這可以允許處理模塊準備好指令所使用的組件和/或單元。

圖7是示出了根據(jù)本發(fā)明的一實施例的跟蹤指令的執(zhí)行和/或修改處理模塊所使用的資源的跟蹤模塊150的框圖。跟蹤模塊150可以是可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等等)、軟件(諸如在處理設備上運行的指令)、固件或其組合的處理邏輯。在一個實施例中,跟蹤模塊150可以跟蹤應用中的一個或多個指令的執(zhí)行,可以使處理模塊更有效率地操作和/或可以優(yōu)化處理模塊的操作。跟蹤模塊150可以是可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等等)、軟件(諸如在處理設備上運行的指令)、固件或其組合的處理邏輯。在跟蹤模塊150中可包括更多或更少組件,而不失一般性。例如,兩個模塊可以合并成單個模塊,或一個模塊可以被分成兩個或更多模塊。

在一個實施例中,目的地模塊705可以確定正在在處理模塊上執(zhí)行的當前指令塊的目的地指令塊。例如,目的地模塊705可以與處理模塊進行通信,以確定BRANCH指令的結(jié)果。在另一個示例中,目的地模塊705可以確定JUMP指令的目的地。

在一個實施例中,處理設備工具715可以修改處理模塊160所使用的資源,和/或可以基于控制流程數(shù)據(jù)145來優(yōu)化處理模塊160的操作。例如,處理設備工具715可以指示處理模塊去停用、斷電和/或避免使用某些執(zhí)行核,以減少處理模塊所使用的電量。在另一個示例中,處理設備工具715可以指示處理模塊160準備好即將來臨的指令塊中的指令所使用的電路、組件和/或模塊。在一個實施例中,處理設備工具715可以判斷對處理模塊160所使用的資源的修改是否對處理模塊的操作具有效果。如果處理設備工具715確定對處理模塊所使用的資源的修改對處理模塊的操作沒有效果,則處理設備工具715可以更新控制流程數(shù)據(jù),以指示不應該執(zhí)行對資源的修改。

在另一個實施例中,處理設備工具715可以使用控制流程數(shù)據(jù)來跟蹤應用中的指令的執(zhí)行。例如,處理設備工具715可以確定處理模塊正在執(zhí)行包括十個指令的指令塊。如果處理模塊在執(zhí)行少于十二個指令之后轉(zhuǎn)移到另一指令,則跟蹤模塊可以確定發(fā)生了錯誤(例如,硬錯誤和/或軟錯誤)。在另一個示例中,處理模塊可以使用不同的進程、線程和/或執(zhí)行核來執(zhí)行指令塊中的指令。當處理模塊執(zhí)行來自指令塊的指令時,處理模塊可以將指令分配到進程、線程和/或執(zhí)行核。處理設備工具715可以向控制流程數(shù)據(jù)添加注釋和/或更新注釋,以指示將指令塊中的指令分配到哪一個進程、線程和/或執(zhí)行核。

圖8是示出了根據(jù)一實施例的跟蹤指令的執(zhí)行的方法800的流程圖。方法800可以通過可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等等)、軟件(諸如在處理設備上運行的指令)、固件或其組合的處理邏輯來執(zhí)行。在一個實施例中,方法800可以通過控制流程模塊140和跟蹤模塊150中的一個或多個來執(zhí)行,如圖1,6,以及7所示。

參考圖8,方法800從框805開始,在那里,方法800生成控制流程數(shù)據(jù)(例如,生成如圖2,4,以及5所示的表)。在一個實施例中,當編譯應用的源代碼時,方法800可以生成控制流程數(shù)據(jù)。在另一個實施例中,當運行應用時,方法800可以生成控制流程數(shù)據(jù)。例如,當指令由處理模塊執(zhí)行時,方法800可以分析應用的指令。在又一實施例中,方法800可以基于運行時配置文件來生成控制流程數(shù)據(jù)。在框810,方法800確定當前執(zhí)行的指令塊的目的地標識符。例如,回頭參考圖2,當前執(zhí)行的指令塊可以是指令塊“1”,方法800可以確定指令塊“1”將分支或轉(zhuǎn)移到指令塊“2”。方法800標識與當前執(zhí)行的指令塊相關聯(lián)的注釋(在框815)。在框820,方法800基于控制流程數(shù)據(jù)修改處理模塊所使用的資源和/或跟蹤指令的執(zhí)行。例如,方法800可以停用處理模塊中的組件和/或電路。在另一個示例中,方法800可以跟蹤其中被分配有指令的線程、進程和/或執(zhí)行核。在另一個示例中,方法800可以跟蹤指令塊(例如,基本塊)中的指令的數(shù)量。在框820之后,方法800結(jié)束。

圖9是示出了根據(jù)另一實施例的跟蹤指令的執(zhí)行的方法900的流程圖。方法900可以通過可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等等)、軟件(諸如在處理設備上運行的指令)、固件或其組合的處理邏輯來執(zhí)行。在一個實施例中,方法900可以通過控制流程模塊140和跟蹤模塊150中的一個或多個來執(zhí)行,如圖1,6,以及7所示。

參考圖9,方法900從框905開始,在那里,方法900確定當前執(zhí)行的指令塊的目的地標識符。例如,回頭參考圖2,當前執(zhí)行的指令塊可以是指令塊“5”,方法800可以確定指令塊“5”將分支或轉(zhuǎn)移到指令塊“6”。方法900標識與當前執(zhí)行的指令塊相關聯(lián)的注釋(在框910)。在框915,方法900基于控制流程數(shù)據(jù)修改處理模塊所使用的資源和/或跟蹤指令的執(zhí)行。例如,方法900可以停用處理模塊中的組件和/或電路。在另一個示例中,方法900可以跟蹤其中被分配有指令的線程、進程和/或執(zhí)行核。在另一個示例中,方法900可以跟蹤指令塊(例如,基本塊)中的指令的數(shù)量。

在框920,方法900可以判斷修改處理模塊所使用的資源是否有用(例如,修改處理模塊所使用的資源是否影響處理模塊如何操作)。例如,方法900可以判斷停用處理模塊中的一個或多個電路是否節(jié)省電能。在另一個示例中,方法900可以判斷準備好處理模塊的某些組件和/或電路為即將來臨的指令塊中的指令作準備是否加快指令的執(zhí)行。如果修改資源有用,則方法900結(jié)束。如果修改資源沒有用,則方法900前進到框925,在那里,方法900更新注釋以指示不應該修改資源。例如,方法900可以刪除注釋,或可以向注釋添加數(shù)據(jù),指示不應該修改資源。在框925之后,方法900結(jié)束。

圖10是根據(jù)本發(fā)明的實施例的SoC 1000的框圖。虛線框是比較先進的SoC上的可選的特征。在圖10中,互連單元1012耦合到:包括一組一個或多個核1002A-N和共享高速緩存器單元1006的應用處理器1020;系統(tǒng)代理單元1010;總線控制器單元1016;集成存儲器控制器單元1014;一組或一個或多個媒體處理器1018,可以包括集成的圖形邏輯1008、用于提供靜止和/或視頻攝像機功能的圖像處理器1024、用于提供硬件音頻加速的音頻處理器1026、以及用于提供視頻編碼/解碼加速的視頻處理器1028;靜態(tài)隨機存取存儲器(SRAM)單元1030;直接存儲器訪問(DMA)單元1032;以及,用于耦合到一個或多個外部顯示器的顯示單元1040。

存儲器層次結(jié)構(gòu)包括核內(nèi)的一級或多級高速緩存,一組或一個或多個共享高速緩存器單元1006,以及耦合到集成的存儲器控制器單元1014組的外部存儲器(未示出)。共享高速緩存器單元1006組可以包括一個或多個中級高速緩存,諸如2級(L2)、3級(L3)、4級(L4),或其他級別的高速緩存、末級高速緩存(LLC)和/或其組合。

在某些實施例中,核1002A-N中的一個或多個能夠進行多線程處理。

系統(tǒng)代理1010包括用于協(xié)調(diào)和操作核1002A-N的那些組件。系統(tǒng)代理單元1010可以包括,例如,電源控制單元(PCU)和顯示單元。PCU可以是或包括調(diào)節(jié)核1002A-N和集成的圖形邏輯10010的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動一個或多個從外部連接的顯示器。

就體系結(jié)構(gòu)和/或指令集而言,核1002A-N可以是同質(zhì)的或異構(gòu)的。例如,核1002A-N中的某些可以是有序的,而其他的是無序的。作為另一個示例,核1002A-N中的兩個或更多可以能夠執(zhí)行相同的指令集,而其他的可以能夠只執(zhí)行該指令集的子集或不同的指令集。

應用處理器1020可以是諸如位于加利福尼亞州圣克拉拉市的英特爾公司所提供的CoreTM i3、i5、i7、2Duo以及Quad、XeonTM、ItaniumTM、XScaleTM、或StrongARMTM之類的通用處理器。另選地,應用處理器1020可以來自另一公司,諸如ARM Holdings,Ltd,MIPS,等等。應用處理器1020可以是專用的處理器,諸如例如網(wǎng)絡或通信處理器、壓縮引擎、圖形處理器、協(xié)處理器、嵌入式處理器等等。應用處理器1020可以在一個或多個芯片上實現(xiàn)。應用處理器1020可以是一個或多個襯底的一部分和/或可以使用若干種處理技術(shù)(諸如,例如,BiCMOS、CMOS,或NMOS)中的任何一種在一個或多個襯底上實現(xiàn)。

圖11是根據(jù)本發(fā)明的芯片上系統(tǒng)(SoC)設計的實施例的框圖。作為特定說明性示例,SOC 1100被包括在用戶設備(UE)中。在一個實施例中,UE是指被最終用戶用來進行通信的任何設備,諸如手持式電話、智能電話、平板電腦、超薄型的筆記本、帶有寬帶適配器的筆記本或任何其他類似的通信設備。UE常常連接到基站或節(jié)點,該基站或節(jié)點潛在地本質(zhì)上對應于GSM網(wǎng)絡中的移動站(MS)。

這里,SOC 1100包括2個核——1106和1107。核1106和1107可以符合指令集體系結(jié)構(gòu),諸如基于Architecture CoreTM的處理器、Advanced Micro Devices,Inc.(AMD)處理器、基于MIPS的處理器、基于ARM或其顧客的處理器設計,以及它們的被許可方或采用者。核1106和1107耦合到與總線接口單元1109和L2高速緩存1110相關聯(lián)的高速緩存控件1107,以與系統(tǒng)1100的其他部分進行通信。互連1110包括芯片內(nèi)互連,諸如IOSF、AMBA,或上文所討論的其他互連,它們潛在地實現(xiàn)所描述的公開的一個或多個方面。

接口1110提供到其他組件的通信信道,其他組件諸如與SIM卡連接的用戶標識模塊(SIM)1130、保存供核1106和1107執(zhí)行以初始化和引導SOC 1100的引導代碼的引導ROM 1135、與外部存儲器(例如,DRAM 1160)連接的SDRAM控制器1140、與非易失性存儲器(例如,閃存1165)連接的閃存控制器1145、與外圍設備連接的外圍控制器1150(例如,串行外圍接口)、顯示和接收輸入(允許觸摸的輸入)的視頻編解碼器1120和視頻接口1125、用于執(zhí)行圖形相關的計算的GPU 1115等等。這些接口中的任何一種可以包括此處所描述的本發(fā)明的各方面。

另外,系統(tǒng)1100示出了用于通信的外圍設備,諸如藍牙模塊1170、3G調(diào)制解調(diào)器1175、GPS 1180以及Wi-Fi 1185。請注意,如上所述,UE包括用于通信的無線裝置。結(jié)果,這些外圍通信模塊不是都需要的。然而,在UE中,包括了某種形式的用于外部通信的無線裝置。

圖12示出了計算機系統(tǒng)1200的示例形式的機器的示意圖,在該計算機系統(tǒng)1200內(nèi),可以執(zhí)行用于使機器執(zhí)行此處所討論的方法中的任何一個或多個的一組指令。在替換實施例中,機器可以連接(例如,聯(lián)網(wǎng))到LAN、內(nèi)聯(lián)網(wǎng)、外部網(wǎng)或因特網(wǎng)中的其他機器。機器可以在客戶機-服務器網(wǎng)絡環(huán)境中作為服務器或客戶機設備,或在對等(或分布式)網(wǎng)絡環(huán)境中作為對等機器來操作。機器可以是個人計算機(PC)、平板PC、機頂盒(STB)、個人數(shù)字助理(PDA)、蜂窩電話、web設備、服務器、網(wǎng)絡路由器、交換機或橋接器,或執(zhí)行指定要由該機器所采取的動作的一組指令(連續(xù)的或以別的方式)的任何機器。進一步地,盡管只示出了單個機器,但是,術(shù)語“機器”也應該被視為包括分別地或聯(lián)合地執(zhí)行一組(或多組)指令以執(zhí)行此處所討論的方法中的任何一個或多個的機器的任何集合。

計算機系統(tǒng)1200包括處理設備1202、主存儲器1204(例如,只讀存儲器(ROM)、閃存、動態(tài)隨機存取存儲器(DRAM)(諸如同步DRAM(SDRAM)或Rambus DRAM(RDRAM)等等)、靜態(tài)存儲器1206(例如,閃存、靜態(tài)隨機存取存儲器(SRAM),等等),以及數(shù)據(jù)存儲設備1218,它們通過總線1230相互進行通信。

處理設備1202表示諸如微處理器、中央處理單元等等之類的一個或多個通用處理設備。更具體而言,處理設備可以是復雜指令集計算(CISC)微處理器、精簡指令集計算機(RISC)微處理器、超長指令字(VLIW)微處理器、或?qū)崿F(xiàn)其他指令集的處理器、或?qū)崿F(xiàn)指令集的組合的處理器。處理設備1202還可以是一個或多個專用的處理設備,諸如專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、數(shù)字信號處理器(DSP)、網(wǎng)絡處理器等等。在一個實施例中,處理設備1202可以包括一個或多個處理核。處理設備1202被配置成執(zhí)行用于執(zhí)行此處所討論的操作的指令1226。

計算機系統(tǒng)1200還可以包括以通信方式耦合到網(wǎng)絡1220的網(wǎng)絡接口設備1208。計算機系統(tǒng)1200還可以包括視頻顯示單元1210(例如,液晶顯示器(LCD)或陰極射線管(CRT))、字母數(shù)字輸入設備1212(例如,鍵盤)、光標控制設備1214(例如,鼠標)、信號生成設備1216(例如,揚聲器),或其他外圍設備。此外,計算機系統(tǒng)1200還可以包括圖形處理單元1222、視頻處理單元1228以及音頻處理單元1232。在另一個實施例中,計算機系統(tǒng)1200可以包括芯片組(未示出),芯片組是指被設計為與處理設備1202一起協(xié)作并控制處理設備1202和外部設備之間的通信的一組集成電路或芯片。例如,芯片組可以是主板上的一組芯片,該組芯片將處理設備1202鏈接到非常高速度的設備(諸如主存儲器1204和圖形控制器),以及將處理設備1202鏈接到較低速度的外圍設備的外圍總線(諸如USB、PCI或ISA總線)。

數(shù)據(jù)存儲設備1218可以包括計算機可讀取的存儲介質(zhì)1224,在其上面存儲了實現(xiàn)此處所描述的功能的方法中的任何一個或多個的指令1226。指令1226還可以在由計算機系統(tǒng)1200執(zhí)行過程中完全地或至少部分地駐留在主存儲器1204內(nèi)和/或在處理設備1202內(nèi);主存儲器1204和處理設備1202還構(gòu)成計算機可讀取存儲介質(zhì)。

計算機可讀取存儲介質(zhì)1224也可以被用來使用諸如參考圖1、6以及7所描述的控制流程模塊140和/或跟蹤模塊150來存儲指令1226和/或包含調(diào)用上面的應用的方法的軟件庫。盡管計算機可讀取存儲介質(zhì)1224在一示例實施例中被示為單個介質(zhì),但是術(shù)語“計算機可讀取存儲介質(zhì)”應該被視為包括存儲一個或多個指令集的單個介質(zhì)或多個介質(zhì)(例如,集中式或分布式數(shù)據(jù)庫,和/或相關聯(lián)的高速緩存和服務器)。術(shù)語“計算機可讀取存儲介質(zhì)”還應該被視為包括能夠存儲、編碼或攜帶由機器執(zhí)行的一組指令并且使機器執(zhí)行各實施例的方法中的任何一個或多個的任何介質(zhì)。術(shù)語“計算機可讀取存儲介質(zhì)”應該相應地被視為包括但不局限于固態(tài)存儲器以及光學和磁性介質(zhì)。

圖13是根據(jù)一個實現(xiàn)的多處理器系統(tǒng)1300的框圖。如圖13所示,多處理器系統(tǒng)1300是點對點互連系統(tǒng),并包括通過點對點互連1350耦合的第一處理器1370和第二處理器1380。處理器1370和1380中的每一個都可以是圖6的處理設備602的某種版本。如圖13所示,處理器1370和1380中的每一個都可以是多核處理器,包括第一和第二處理器核(即,處理器核1374a和1374b,處理器核1384a和1384b),雖然潛在地更多核可以存在于處理器中。處理器核還可以被稱為執(zhí)行核。每一個處理器都可以包括根據(jù)本發(fā)明的實施例的混合型寫入模式邏輯。在一個實施例中,處理器1370和1380中的一個或多個可以執(zhí)行控制流程模塊(例如,圖1中所示出的控制流程模塊140)。在另一個實施例中,跟蹤模塊(例如,圖1中所示出的跟蹤模塊150)可以被包括在處理器1370和1380中的一個或多個之中,或者也可以是處理器1370和1380中的一個或多個的一部分。

盡管示為帶有兩個處理器1370、1380,但是,可以理解,本發(fā)明的范圍不僅限于此。在其他實現(xiàn)中,一個或多個額外的處理器可以存在于給定處理器中。

處理器1370和1380被示為分別包括集成存儲器控制器單元1372和1382。處理器1370還包括點對點(P-P)接口1376和1378,作為其總線控制器單元的一部分;類似地,第二處理器1380包括P-P接口1386和1388。處理器1370、1380可以使用P-P接口電路1378、1388通過點對點(P-P)接口1350來交換信息。如圖13所示,IMC 1372和1382將處理器耦合到相應的存儲器,即存儲器1332和存儲器1334,它們可以是本地連接到相應的處理器的主存儲器的一部分。在一個實施例中,控制流程數(shù)據(jù)(例如,圖2、3以及5中所示出的表200、300以及500)可以存儲在存儲器1332和1334中的一個或多個中。

處理器1370、1380中的每一個都可以使用點對點的接口電路1376、1394、1386以及1398通過各個P-P接口1352,1354與芯片組1390交換信息。芯片組1390還可以通過高性能的圖形接口1339與高性能的圖形電路1338交換信息。

共享高速緩存器(未示出)可以被包括在任一處理器中或者兩個處理器的外面,通過P-P互連與處理器相連接,以便處理器中的任何一個或兩者的本地緩存信息可以存儲在共享高速緩存器中(如果處理器被置于低功率模式下)。

芯片組1390可以通過接口1396耦合到第一總線1316。在一個實施例中,第一總線1316可以是外圍組件互連(PCI)總線,或諸如PCI Express總線之類的總線,或另一第三代I/O互連總線,雖然本發(fā)明的范圍不僅限于此。

如圖13所示,各種I/O設備1314可以耦合到第一總線1316,以及將第一總線1316耦合到第二總線1320的總線橋接器1318。在一個實施例中,第二總線1320可以是低管腳數(shù)(LPC)總線。在一個實施例中,各種設備可以耦合到第二總線1320,包括例如鍵盤和/或鼠標1322、通信設備1327和存儲單元1328(諸如磁盤驅(qū)動器或可以包括指令/代碼和數(shù)據(jù)1330的其他大容量存儲設備)。進一步地,音頻I/O 1324可以耦合到第二總線1320。請注意,其他體系結(jié)構(gòu)也是可以的。例如,代替圖13的點對點體系結(jié)構(gòu),系統(tǒng)可以實現(xiàn)多點分支總線或其他這樣的體系結(jié)構(gòu)。

圖14是示出了通過圖14的處理設備1400來實現(xiàn)的有序流水線和寄存器重命名級、無序發(fā)布/執(zhí)行流水線的框圖。圖14是示出了根據(jù)本發(fā)明的至少一個實施例的要包括在處理器中的有序體系結(jié)構(gòu)核和寄存器重命名邏輯,無序發(fā)布/執(zhí)行邏輯的框圖。圖14中的實線框示出了有序流水線,而虛線框示出了寄存器重命名、無序發(fā)布/執(zhí)行流水線。類似地,圖14中的實線框示出了有序體系結(jié)構(gòu)邏輯,而虛線框示出了寄存器重命名邏輯和無序發(fā)布/執(zhí)行邏輯。在圖14中,處理器流水線1400包括獲取級1402、長度解碼級1404、解碼級1406、分配級1408、重命名級1410、調(diào)度(也稱為分派或發(fā)布)級1412、寄存器讀取/存儲器讀取級1414、執(zhí)行級1416、寫回/存儲器寫入級1418、異常處理級1422以及提交級1424。

圖15是示出了根據(jù)本發(fā)明的至少一個實施例的要包括在處理器中的有序體系結(jié)構(gòu)核和寄存器重命名邏輯、無序發(fā)布/執(zhí)行邏輯的框圖。在圖15中,箭頭表示兩個或更多單元之間的耦合,箭頭的方向指示那些單元之間的數(shù)據(jù)流動的方向。圖15示出了處理器核1590,包括耦合到執(zhí)行引擎單元1550的前端單元1530,前端單元1530和執(zhí)行引擎單元1550兩者都耦合到存儲器單元1570。在一個實施例中,控制流程數(shù)據(jù)(例如,圖2、3以及5中所示出的表200、300以及500)可以存儲在存儲器單元1570中。

核1590可以是精簡指令集計算(RISC)核、復雜指令集計算(CISC)核、超長指令字(VLIW)核或混合型或替代核類型。作為另一種選項,核1590可以是專用的核,諸如例如網(wǎng)絡或通信核、壓縮引擎、圖形核等等。在一個實施例中,核1590可以執(zhí)行控制流程模塊(例如,圖1中所示出的控制流程模塊140)。在另一個實施例中,跟蹤模塊(例如,圖1中所示出的跟蹤模塊150)可以被包括在核1590中,或者也可以是核1590的一部分。例如,跟蹤模塊可以是前端單元1530和/或執(zhí)行引擎單元1550的一部分。

前端單元1530包括耦合到指令高速緩存單元1534的分支預測單元1532,指令高速緩存單元1534耦合到指令轉(zhuǎn)換后備緩沖器(TLB)1536,指令轉(zhuǎn)換后備緩沖器1536耦合到指令獲取單元1538,指令獲取單元1538耦合到解碼單元1540。解碼單元或解碼器可以解碼指令,并生成一個或多個微操作、微代碼入口點、微指令,其他指令或其他控制信號作為輸出,它們從原始指令解碼而來、或以別的方式反映原始指令、或從原始指令中導出。解碼器可以使用各種不同的機制來實現(xiàn)。合適的機制的示例包括但不僅限于查找表、硬件實現(xiàn)、可編程邏輯陣列(PLA)、微代碼只讀存儲器(ROM)等等。指令高速緩存單元1534進一步耦合到存儲器單元1570中的2級(L2)高速緩存單元1576。解碼單元1540耦合到執(zhí)行引擎單元1550中的重命名/分配器單元1552。

執(zhí)行引擎單元1550包括耦合到隱退單元1554的重命名/分配器單元1552和一組一個或多個調(diào)度器單元1556。調(diào)度器單元1556表示任意數(shù)量的不同的調(diào)度器,包括預留站、中心指令窗口等等。調(diào)度器單元1556耦合到物理寄存器文件單元1558。物理寄存器文件單元1558中的每一個都表示一個或多個物理寄存器文件,其中不同的文件存儲一種或多種不同的數(shù)據(jù)類型,諸如標量整數(shù)、標量浮點、打包整數(shù)、打包浮點、向量整數(shù)、向量浮點等等、狀態(tài)(例如,是要被執(zhí)行的下一指令的地址的指令指針)等等。物理寄存器文件單元1558與隱退單元1554重疊,以示出可以實現(xiàn)寄存器重命名和無序執(zhí)行的各種方式(例如,使用重新排序緩沖器和隱退寄存器文件,使用未來的文件,歷史緩沖器,以及隱退寄存器文件;使用寄存器映射和寄存器池;等等)。一般而言,體系結(jié)構(gòu)寄存器從處理器的外部或從編程器的角度可見。寄存器不僅限于任何已知的特定類型的電路。各種不同類型的寄存器都是合適的,只要它們能夠存儲和提供如此處所描述的數(shù)據(jù)。合適的寄存器的示例包括但不僅限于專用物理寄存器、使用寄存器重命名的動態(tài)地分配的物理寄存器、專用和動態(tài)地分配的物理寄存器的組合,等等。隱退單元1554和物理寄存器文件單元1558耦合到執(zhí)行群集1560。執(zhí)行群集1560包括一組一個或多個執(zhí)行單元162和一組一個或多個存儲器訪問單元1564。執(zhí)行單元1562可以對各種類型的數(shù)據(jù)(例如,標量浮點、打包整數(shù)、打包浮點、向量整數(shù)、向量浮點)執(zhí)行各種操作(例如,位移、加法、減法、乘法)。盡管一些實施例可以包括專用于特定功能或功能組的若干個執(zhí)行單元,但是,其他實施例可以只包括一個執(zhí)行單元或所有都執(zhí)行所有功能的多個執(zhí)行單元。調(diào)度器單元1556、物理寄存器文件單元1558,以及執(zhí)行群集1560被示為可能是多個,因為某些實施例對于某些類型的數(shù)據(jù)/操作創(chuàng)建單獨的流水線(例如,標量整數(shù)流水線、標量浮點/打包整數(shù)/打包浮點/向量整數(shù)/向量浮點流水線和/或存儲器訪問流水線,每一個流水線都具有它們自己的調(diào)度器單元、物理寄存器文件單元和/或執(zhí)行群集——并且在單獨的存儲器訪問流水線的情況下,實現(xiàn)了其中只有此流水線的執(zhí)行群集具有存儲器訪問單元1564的某些實施例)。還應該理解,在使用單獨的流水線的場合,這些流水線中的一個或多個可以是無序發(fā)布/執(zhí)行,其余的是有序的。

存儲器訪問單元組1564耦合到存儲器單元1570,該存儲器單元1570包括耦合到數(shù)據(jù)高速緩存單元1574的數(shù)據(jù)TLB單元1572,該數(shù)據(jù)高速緩存單元1574耦合到2級(L2)高速緩存單元1576。在一個示例性實施例中,存儲器訪問單元1564可以包括加載單元、存儲地址單元以及存儲數(shù)據(jù)單元,其中每一個都耦合到存儲器單元1570中的數(shù)據(jù)TLB單元1572。L2高速緩存單元1576耦合到一個或多個其他級別的高速緩存,最終耦合到主存儲器。

作為示例,示例性寄存器重命名、無序發(fā)布/執(zhí)行核體系結(jié)構(gòu)可以按如下方式實現(xiàn)流水線1400:1)指令獲取1538執(zhí)行獲取和長度解碼級1402以及1404;2)解碼單元1540執(zhí)行解碼級1406;3)重命名/分配器單元1552執(zhí)行分配級1408和重命名級1410;4)調(diào)度器單元1556執(zhí)行調(diào)度級1412;5)物理寄存器文件單元1558和存儲器單元1570執(zhí)行寄存器讀取/存儲器讀取級1414;執(zhí)行群集1560執(zhí)行“執(zhí)行級1416”;6)存儲器單元1570和物理寄存器文件單元1558執(zhí)行寫回/存儲器寫入級1418;7)各種單元都可以涉及異常處理級1422;以及,8)隱退單元1554和物理寄存器文件單元1558執(zhí)行提交級1424。

核1590可以支持一個或多個指令集(例如,x86指令集(帶有已添加較新的版本的某些擴展);位于美國加州Sunnyvale的MIPS Technologies的MIPS指令集;位于美國加州Sunnyvale的ARM Holdings的ARM指令集(帶有諸如NEON之類的可選的額外的擴展)。

應該理解,核可以支持多線程(執(zhí)行操作或線程的兩個或更多并行組),并可以以各種方式達到這一目的,包括時間切片多線程、同時的多線程(其中,單個物理核為物理核同時正在多線程處理的每一個線程提供一種邏輯核),或其組合(例如,時間切片獲取和解碼和此后的同時的多線程處理,諸如按照Hyperthreading技術(shù))。

盡管在無序執(zhí)行的上下文中描述寄存器重命名,但是,應該理解,寄存器重命名可以用于有序體系結(jié)構(gòu)中。盡管處理器的所示出的實施例還包括單獨的指令和數(shù)據(jù)高速緩存單元1534/1574和共享的L2高速緩存單元1576,但是替代實施例對于指令和數(shù)據(jù)兩者可以具有單個內(nèi)部高速緩存,諸如例如1級(L1)內(nèi)部高速緩存或多級內(nèi)部高速緩存。在某些實施例中,系統(tǒng)可以包括內(nèi)部高速緩存和核和/或處理器外部的外部高速緩存的組合??闪磉x地,全部高速緩存都可以位于核和/或處理器外部。

圖16根據(jù)本發(fā)明的一個實施例的包括執(zhí)行指令的邏輯電路的處理器200的微型體系結(jié)構(gòu)的框圖。在某些實施例中,根據(jù)一個實施例的指令可被實現(xiàn)為對具有字節(jié)、字、雙字、四倍字等等的大小以及諸如單個和雙精度整數(shù)和浮點數(shù)據(jù)類型之類的數(shù)據(jù)類型的數(shù)據(jù)元素進行操作。在一個實施例中,處理器200可以執(zhí)行控制流程模塊(例如,圖1中所示出的控制流程模塊140)。在一個實施例中,處理器200還可以包括跟蹤模塊(例如,圖1中所示出的跟蹤模塊150)。例如,跟蹤模塊可以是前端201和/或無序引擎203的一部分。在一個實施例中,有序前端201是獲取要被執(zhí)行的指令并將它們準備好以供稍后在處理器流水線中使用的處理器200的一部分。前端201可以包括多個單元。在一個實施例中,指令預取器226從存儲器中獲取指令,并將它們饋送到指令解碼器228,該指令解碼器228又解碼或解釋它們。例如,在一個實施例中,解碼器將接收到的指令解碼為機器可以執(zhí)行的一個或多個叫做“微指令”或“微操作”(也稱為微操作或uop)的操作。在其他實施例中,解碼器將指令解析為微型體系結(jié)構(gòu)用來執(zhí)行根據(jù)一個實施例的操作的操作碼和對應的數(shù)據(jù)和控制字段。在一個實施例中,跟蹤高速緩存230獲取已解碼的uops,并將它們組裝為程序有序序列或uop隊列234中的跟蹤(trace)以供執(zhí)行。當跟蹤高速緩存230遇到復雜指令時,微代碼ROM 232提供完成操作所需的uops。

某些指令被轉(zhuǎn)換為單個微操作,而其他指令需要多個微操作才能完成完全操作。在一個實施例中,如果需要四個以上的微操作才能完成指令,則解碼器228訪問微代碼ROM 232來執(zhí)行指令。對于一個實施例,指令可以被解碼為少量的微操作,用于在指令解碼器228處進行處理。在另一個實施例中,指令可以存儲在微代碼ROM 232內(nèi),以防需要若干個微操作才能完成。跟蹤高速緩存230引用入口點可編程邏輯陣列(PLA)來確定用于從微代碼ROM 232中讀取微代碼序列的正確的微指令指針,以完成根據(jù)一個實施例的一個或多個指令。在微代碼ROM 232完成排序指令的微操作之后,機器的前端201恢復從跟蹤高速緩存230獲取微操作。

無序執(zhí)行引擎203是準備指令以供執(zhí)行的地方。無序執(zhí)行邏輯具有多個緩沖器,以平緩和重新排序指令的流,以在它們走下流水線并被調(diào)度供執(zhí)行時優(yōu)化性能。分配器邏輯分配每一個uop需要的以便執(zhí)行的機器緩沖器和資源。寄存器重命名邏輯將邏輯寄存器重命名為寄存器文件中的條目。分配器還在指令調(diào)度器——存儲器調(diào)度器、快速調(diào)度器202、慢/一般浮點調(diào)度器204以及簡單浮點調(diào)度器206——的前面,為兩個uop隊列中的一個中的每一個uop分配條目,一個用于存儲器操作,一個用于非存儲器操作。uop調(diào)度器202、204、206基于它們的依賴的輸入寄存器操作數(shù)源的就緒狀態(tài)以及uops完成它們的操作所需的執(zhí)行資源的可用性,來確定uop何時準備執(zhí)行。一個實施例的快速調(diào)度器202可以在主時鐘周期的每一半調(diào)度,而其他調(diào)度器只能每個主處理器時鐘周期調(diào)度一次。調(diào)度器仲裁分派端口,來調(diào)度uops供執(zhí)行。

寄存器文件208、210位于調(diào)度器202,204,206和執(zhí)行塊211中的執(zhí)行單元212,214,216,218,220,222,224之間。對于整數(shù)和浮點運算,分別有單獨的寄存器文件208,210。一個實施例的每一個寄存器文件208,210還包括旁路網(wǎng)絡,該旁路網(wǎng)絡可以將還沒有被寫入到寄存器文件中的剛剛完成的結(jié)果旁路或轉(zhuǎn)發(fā)到新的依賴的uops。整數(shù)寄存器文件208和浮點寄存器文件210還能夠與其他文件進行數(shù)據(jù)交換。對于一個實施例,整數(shù)寄存器文件208被拆分成兩個單獨的寄存器文件,一個寄存器文件用于低階32比特的數(shù)據(jù),第二寄存器文件用于高階32比特的數(shù)據(jù)。一個實施例的浮點寄存器文件210具有128比特寬的條目,因為浮點指令通常具有寬度從64到128比特的操作數(shù)。

執(zhí)行塊211包含其中實際執(zhí)行指令的執(zhí)行單元212,214,216,218,220,222,224。此部分包括寄存器文件208,210,這些寄存器文件208,210存儲執(zhí)行微指令所需的整數(shù)和浮點數(shù)據(jù)操作數(shù)值。一個實施例的處理器200包括若干個執(zhí)行單元:地址生成單元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮點ALU 222、浮點移動單元224。對于一個實施例,浮點執(zhí)行塊222、224執(zhí)行浮點、MMX、SIMD,以及SSE或其他操作。一個實施例的浮點ALU 222包括64比特x 64比特浮點除法器,以執(zhí)行除法、平方根以及剩余微操作。對于本發(fā)明的各實施例,可以利用浮點硬件來處理涉及浮點值的指令。在一個實施例中,ALU運算進入高速ALU執(zhí)行單元216、218。一個實施例的快速ALU 216、218可以執(zhí)行快速的操作,帶有一半時鐘周期的有效延遲。對于一個實施例,大多數(shù)復雜的整數(shù)操作進入慢速ALU 220,因為慢速ALU 220包括用于長延遲類型的操作的整數(shù)執(zhí)行硬件,諸如乘法器、移位器、標記邏輯以及分支處理。存儲器加載/存儲操作是由AGU 212、214執(zhí)行的。對于一個實施例,整數(shù)ALU 216、218、220是在對64比特數(shù)據(jù)操作數(shù)執(zhí)行整數(shù)操作的上下文中描述的。在替代實施例中,ALU 216,218,220,可被實現(xiàn)為支持各種數(shù)據(jù)比特,包括16,32,128,256,等等。類似地,浮點單元222、224可被實現(xiàn)為支持具有各種寬度的比特的操作數(shù)的范圍。對于一個實施例,浮點單元222、224可以結(jié)合SIMD和多媒體指令,對128比特寬的打包數(shù)據(jù)操作數(shù)進行操作。

在一個實施例中,uops調(diào)度器202,204,206在父加載完成執(zhí)行之前,分派依賴的操作。由于uops是在處理器200中投機性地調(diào)度和執(zhí)行的,因此,處理器200還包括處理存儲器未命中的邏輯。如果數(shù)據(jù)加載在數(shù)據(jù)緩存中未命中,則在流水線中可能會有帶有臨時不正確的數(shù)據(jù)的離開調(diào)度器的正在運行的依賴的操作。重播機制跟蹤并重新執(zhí)行使用不正確的數(shù)據(jù)的指令。只有依賴的操作需要被重播,而獨立的操作被允許完成。處理器的一個實施例的調(diào)度器和重播機制還被設計為捕捉用于文本字符串比較操作的指令序列。

術(shù)語“寄存器”可以表示被用作標識操作數(shù)的指令的一部分的板上的處理器存儲器位置。換言之,寄存器可以是從處理器外部可使用的那些處理器存儲器位置(從編程器的角度來看)。然而,實施例的寄存器在特定類型的電路的意義上不應該受限制。相反,實施例的寄存器能夠存儲和提供數(shù)據(jù),并執(zhí)行此處所描述的功能。此處所描述的寄存器可以通過處理器內(nèi)的電路使用任意數(shù)量的不同的技術(shù)來實現(xiàn),諸如專用物理寄存器、使用寄存器重命名的動態(tài)地分配的物理寄存器、專用和動態(tài)地分配的物理寄存器的組合等等。在一個實施例中,整數(shù)寄存器存儲32比特整型數(shù)據(jù)。一個實施例的寄存器文件還包含用于打包數(shù)據(jù)的八個多媒體SIMD寄存器。對于下面的討論,寄存器被理解為是被設計為保存打包數(shù)據(jù)的數(shù)據(jù)寄存器,諸如利用加利福尼亞州圣克拉拉市的英特爾公司的MMX技術(shù)實現(xiàn)的微處理器中的64比特寬MMXTM寄存器(在某些情況下,也簡稱為“mm”寄存器)。以整數(shù)和浮點形式存在的這些MMX寄存器可以與伴隨SIMD和SSE指令的打包的數(shù)據(jù)元件一起操作。類似地,也可以使用涉及SSE2、SSE3、SSE4或以外的(一般地稱為“SSEx”)技術(shù)的128比特寬的XMM寄存器來保存這樣的打包的數(shù)據(jù)操作數(shù)。在一個實施例中,在存儲打包的數(shù)據(jù)和整型數(shù)據(jù)時,寄存器不需要區(qū)分兩種數(shù)據(jù)類型。在一個實施例中,整數(shù)和浮點包含在同一個寄存器文件或者不同的寄存器文件中。此外,在一個實施例中,浮點和整型數(shù)據(jù)可以存儲在不同的寄存器中或相同寄存器中。

下列示例涉及進一步的實施例。

示例1是一種裝置,具有:存儲器模塊,用于存儲控制流程數(shù)據(jù),控制流程數(shù)據(jù)包括指令塊的多個塊標識符、指令塊中的一個或多個指令塊的目的地標識符、以及指令塊的注釋;以及處理器,通信地耦合到存儲器模塊。處理器被配置成接收控制流程數(shù)據(jù),基于控制流程數(shù)據(jù)來確定當前指令塊的目的地標識符,基于控制流程數(shù)據(jù)標識與當前指令塊相關聯(lián)的注釋,以及基于注釋或目的地標識符中的一個或多個執(zhí)行修改處理器所使用的資源的操作或跟蹤指令塊的執(zhí)行的操作中的至少一項操作。

示例2可以可任選地擴展示例1的主題。在示例2中,處理器進一步被配置成在包括所述指令塊的應用的編譯時或運行時中的一項或多項過程中生成所述控制流程數(shù)據(jù)。

示例3可以可任選地擴展示例1和2中的任何一個的主題。在示例3中,處理器進一步被配置成獲取包括指令塊的應用的運行時配置文件;以及基于所述運行時配置文件生成所述控制流程數(shù)據(jù)。

示例4可以可任選地擴展示例1-3中的任何一個的主題。在示例4中,控制流程數(shù)據(jù)包括表、列表、圖或樹中的一項或多項。

示例5可以可任選地擴展示例1-4中的任何一個的主題。在示例5中,處理器通過基于注釋檢測存儲器中的硬錯誤或在執(zhí)行指令塊時的軟錯誤中的一個或多個來跟蹤指令塊的執(zhí)行,其中注釋指示當前指令塊內(nèi)的指令的數(shù)量。

示例6可以可任選地擴展示例1-5中的任何一個的主題。在示例6中,處理器通過基于注釋來減少處理器所使用的組件的數(shù)量,來修改處理器所使用的資源。

示例7可以可任選地擴展示例1-6中的任何一個的主題。在示例7中,處理器通過標識其中被分配有來自當前指令的指令的線程、進程或執(zhí)行核中的一個或多個,并利用標識其中被分配有來自當前指令的指令的線程、進程或執(zhí)行核中的一個或多個的數(shù)據(jù)來更新注釋,來跟蹤指令塊的執(zhí)行。

示例8可以可任選地擴展示例1-7中的任何一個的主題。在示例8中,生成控制流程數(shù)據(jù)包括將間接分支指令轉(zhuǎn)換為比較指令或轉(zhuǎn)移指令中的一個或多個。

示例9可以可任選地擴展示例1-8中的任何一個的主題。在示例8中,處理器進一步被配置成判斷修改處理器所使用的資源是否影響處理器的操作,以及在修改資源不影響處理器的所述操作時,,更新注釋以指示處理器所使用的資源不應該被優(yōu)化。

示例10可以可任選地擴展示例1-9中的任何一個的主題。在示例10中,處理器進一步被配置成基于控制流程數(shù)據(jù)來確定第二當前指令塊的第二目的地標識符,基于控制流程數(shù)據(jù)標識與第二當前指令塊相關聯(lián)的第二注釋,以及,基于第二注釋或第二目的地標識符中的一個或多個執(zhí)行修改處理器所使用的資源或跟蹤指令塊的執(zhí)行中的一項或多項。

示例11是一種方法,包括:接收控制流程數(shù)據(jù),該控制流程數(shù)據(jù)包括指令塊的多個塊標識符、指令塊中的一個或多個指令塊的目的地標識符、以及指令塊的注釋;基于控制流程數(shù)據(jù),確定當前指令塊的目的地標識符;基于控制流程數(shù)據(jù),標識與當前指令塊相關聯(lián)的注釋;以及,基于注釋或目的地標識符中的一個或多個,執(zhí)行修改處理器所使用的資源或跟蹤指令塊的執(zhí)行中的至少一項。

示例12可以可任選地擴展示例12的主題。在示例12中,方法還包括在包括所述指令塊的應用的編譯時或運行時中的一項或多項過程中生成所述控制流程數(shù)據(jù)。

示例13可以可任選地擴展示例11-12中的任何一個的主題。在示例13中,方法還包括獲取包括指令塊的應用的運行時配置文件,以及基于所述運行時配置文件生成所述控制流程數(shù)據(jù)。

示例14可以可任選地擴展示例11-13中的任何一個的主題。在示例14中,控制流程數(shù)據(jù)包括表、列表、圖或樹中的一項或多項。

示例15可以可任選地擴展示例11-14中的任何一個的主題。在示例15中,跟蹤指令塊的執(zhí)行包括基于注釋檢測存儲器中的硬錯誤或在執(zhí)行指令塊時的軟錯誤中的一個或多個,其中注釋指示當前指令塊內(nèi)的指令的數(shù)量。

示例16可以可任選地擴展示例11-15中的任何一個的主題。在示例16中,修改處理器所使用的資源包括基于注釋來減少處理器所使用的組件的數(shù)量。

示例17可以可任選地擴展示例11-16中的任何一個的主題。在示例17中,跟蹤指令塊的執(zhí)行包括標識其中被分配有當前指令的指令的線程、進程或執(zhí)行核中的一個或多個,以及利用標識其中被分配有當前指令的指令的線程、進程或執(zhí)行核中的一個或多個的數(shù)據(jù)來更新注釋。

示例18可以可任選地擴展示例11-17中的任何一個的主題。在示例18中,生成控制流程數(shù)據(jù)包括將間接分支指令轉(zhuǎn)換為比較指令或轉(zhuǎn)移指令中的一個或多個。

示例19可以可任選地擴展示例11-18中的任何一個的主題。在示例19中,方法還包括判斷修改處理器所使用的資源是否影響處理器的操作,以及當修改資源不影響處理器的所述操作時,更新注釋以指示處理器所使用的資源不應該被優(yōu)化。

示例20可以可任選地擴展示例11-19中的任何一個的主題。在示例20中,方法還包括基于控制流程數(shù)據(jù)來確定第二當前指令塊的第二目的地標識符,基于控制流程數(shù)據(jù)標識與第二當前指令塊相關聯(lián)的第二注釋,以及基于第二注釋或第二目的地標識符中的一個或多個,執(zhí)行修改處理器所使用的資源或跟蹤指令塊的執(zhí)行中的一項或多項。

示例21是一種包含數(shù)據(jù)的非瞬態(tài)的機器可讀存儲介質(zhì),所述數(shù)據(jù)在被處理器訪問時,使所述處理器執(zhí)行包括下列各項的操作:接收控制流程數(shù)據(jù),該控制流程數(shù)據(jù)包括指令塊的多個塊標識符、指令塊中的一個或多個指令塊的目的地標識符、以及指令塊的注釋;基于控制流程數(shù)據(jù)確定當前指令塊的目的地標識符;基于控制流程數(shù)據(jù)標識與當前指令塊相關聯(lián)的注釋;以及,基于注釋或目的地標識符中的至少一項,執(zhí)行修改處理器所使用的資源或跟蹤指令塊的執(zhí)行中的至少一項。

示例22可以可任選地擴展示例21的主題。在示例22中,操作還包括在包括所述指令塊的應用的編譯時或運行時中的一項或多項過程中生成所述控制流程數(shù)據(jù)。

示例23可以可任選地擴展示例20-22中的任何一個的主題。在示例23中,操作還包括獲取包括指令塊的應用的運行時配置文件,以及基于所述運行時配置文件生成所述控制流程數(shù)據(jù)。

示例24可以可任選地擴展示例20-23中的任何一個的主題。在示例24中,控制流程數(shù)據(jù)包括表、列表、圖或樹中的一項或多項。

示例25可以可任選地擴展示例20-24中的任何一個的主題。在示例25中,跟蹤指令塊的執(zhí)行包括基于注釋檢測存儲器中的硬錯誤或在執(zhí)行指令塊時的軟錯誤中的一個或多個,其中注釋指示當前指令塊內(nèi)的指令的數(shù)量。

示例26可以可任選地擴展示例20-25中的任何一個的主題。在示例26中,修改處理器所使用的資源包括基于注釋來減少處理器所使用的組件的數(shù)量。

示例27可以可任選地擴展示例20-26中的任何一個的主題。在示例27中,跟蹤指令塊的執(zhí)行包括標識其中被分配有來自當前指令的指令的線程、進程或執(zhí)行核中的一個或多個,以及利用標識其中被分配有當前指令的線程、進程或執(zhí)行核中的一個或多個的數(shù)據(jù)來更新注釋。

示例28可以可任選地擴展示例20-27中的任何一個的主題。在示例28中,生成控制流程數(shù)據(jù)包括將間接分支指令轉(zhuǎn)換為比較指令或轉(zhuǎn)移指令中的一個或多個。

示例29可以可任選地擴展示例20-28中的任何一個的主題。在示例29中,操作還包括判斷修改處理器所使用的資源是否影響處理器的操作,以及在修改資源不影響處理器的所述操作時,更新注釋以指示處理器所使用的資源不應該被優(yōu)化。

示例30可以可任選地擴展示例20-29中的任何一個的主題。在示例30中,操作還包括基于控制流程數(shù)據(jù)來確定第二當前指令塊的第二目的地標識符,基于控制流程數(shù)據(jù)標識與第二當前指令塊相關聯(lián)的第二注釋,以及基于第二注釋或第二目的地標識符中的一個或多個,執(zhí)行修改處理器所使用的資源或跟蹤指令塊的執(zhí)行中的一項或多項。

示例31是一種裝置,包括:用于存儲控制流程數(shù)據(jù),該控制流程數(shù)據(jù)包括指令的塊的多個塊標識符、指令的一個或多個塊的目的地標識符、以及指令的塊的注釋;用于接收控制流程數(shù)據(jù)的裝置;用于基于控制流程數(shù)據(jù)確定當前指令塊的目的地標識符的裝置;用于基于控制流程數(shù)據(jù)標識與當前指令塊相關聯(lián)的注釋的裝置;以及,用于基于第二注釋或第二目的地標識符中的至少一個,執(zhí)行修改處理器所使用的資源或跟蹤指令塊的執(zhí)行中的至少一項的裝置。

示例32可以可任選地擴展示例31的主題。在示例32中,如示例31所述的設備還包括用于在包括指令塊的應用的編譯時或運行時中的一項或多項過程中,生成控制流程數(shù)據(jù)的裝置。

示例33可以可任選地擴展示例31-32中的任何一個的主題。在示例33中,設備還包括用于獲取包括指令塊的應用的運行時配置文件的裝置,以及用于基于運行時配置文件生成控制流程數(shù)據(jù)的裝置。

示例34可以可任選地擴展示例31-33中的任何一個的主題。在示例34中,控制流程數(shù)據(jù)包括表、列表、圖或樹中的一項或多項。

示例35可以可任選地擴展示例31-34中的任何一個的主題。在示例35中,跟蹤指令塊的執(zhí)行包括基于注釋檢測存儲器中的硬錯誤或在執(zhí)行指令塊時的軟錯誤中的一個或多個,其中注釋指示當前指令塊內(nèi)的指令的數(shù)量。

示例36可以可任選地擴展示例31-35中的任何一個的主題。在示例36中,修改處理器所使用的資源包括基于注釋來減少處理器所使用的組件的數(shù)量。

示例37可以可任選地擴展示例31-36中的任何一個的主題。在示例37中,跟蹤指令塊的執(zhí)行包括標識其中被分配有來自當前指令的指令的線程、進程或執(zhí)行核中的一個或多個,以及利用標識其中被分配有該指令的線程、進程或執(zhí)行核中的一個或多個的數(shù)據(jù)來更新注釋。

示例38可以可任選地擴展示例31-37中的任何一個的主題。在示例38中,生成控制流程數(shù)據(jù)包括將間接分支指令轉(zhuǎn)換為比較指令或轉(zhuǎn)移指令中的一個或多個。

示例39可以可任選地擴展示例31-38中的任何一個的主題。在示例39中,設備還包括用于判斷修改處理器所使用的資源是否影響處理器的操作的裝置,以及用于在修改資源不影響處理器的操作時,更新注釋以指示處理器所使用的資源不應該被優(yōu)化的裝置。

示例40可以可任選地擴展示例31-39中的任何一個的主題。在示例40中,設備還包括:用于基于控制流程數(shù)據(jù)來確定第二當前指令塊的第二目的地標識符的裝置;用于基于控制流程數(shù)據(jù)標識與第二當前指令塊相關聯(lián)的第二注釋的裝置;以及用于基于第二注釋或第二目的地標識符中的一個或多個,執(zhí)行修改處理器所使用的資源或跟蹤指令塊的執(zhí)行中的一項或多項的裝置。

在上面的描述中,闡述了很多細節(jié)。然而,對那些精通本技術(shù)的人顯而易見的是,可以在沒有這些具體細節(jié)的情況下實施各實施例。在某些情況下,以框圖形式,而不是詳細地示出已知的結(jié)構(gòu)和設備,以便不至于使描述變得模糊。

詳細描述的某些部分以算法、和對計算機存儲器內(nèi)的數(shù)據(jù)位的操作的符號表示法的形式存在。這些算法描述和表示法是那些精通數(shù)據(jù)處理技術(shù)的人所使用的最有效地將他們的工作的實質(zhì)傳遞到精通技術(shù)的其他人的手段。算法,這里一般是指導致所希望的結(jié)果的操作的獨立的序列。操作是那些需要對物理量進行物理操縱的操作。盡管不是必然,但通常這些量呈現(xiàn)電的和/或磁性信號的形式,這些信號能夠被存儲、傳輸、組合、比較以及以別的方式操縱。已經(jīng)證明,有時,主要由于共同的用途原因,將這些信號稱為比特、值、元素、符號、字符、術(shù)語、數(shù)字等等比較方便。此處所描述的塊可以是硬件、軟件、固件或其組合。

然而,應該記住,所有這些和/或類似的術(shù)語將與適當?shù)奈锢砹筷P聯(lián),僅僅是應用于這些量的方便的標記。除非特別聲明,從上文的討論中顯而易見地看出,應該理解,在整個本說明書中,利用諸如“接收”、“標識”、“確定”、“執(zhí)行”、“跟蹤”、“修改”、“獲取”、“生成”、“檢測”“減少”、“更新”、“轉(zhuǎn)換”等等之類的的術(shù)語的討論指代計算機系統(tǒng)和/或類似的電子計算設備的動作和/或進程,它們操縱和/或轉(zhuǎn)換表示為計算機系統(tǒng)的寄存器和存儲器內(nèi)的物理(例如,電子)量的數(shù)據(jù),將這些數(shù)據(jù)轉(zhuǎn)換為類似地表示為計算機系統(tǒng)存儲器或寄存器和/或其他這樣的信息存儲器、傳輸和/或顯示設備內(nèi)的物理量的其他數(shù)據(jù)。

在此可使用詞語“示例”或“示例性”意指用作示例、實例或說明。本文中被描述為“示例”或“示例性”的任何方面或設計不一定被解釋為優(yōu)選于或更優(yōu)于其他方面或設計。相反,使用詞語“示例”或“示例性”旨在以具體的方式呈現(xiàn)各個概念。如本申請中所使用的,術(shù)語“或”意指包括性“或”而非互斥性“或”。即,除非另有指定或從上下文可以明確,“X包括A或B”意指任何自然的包括性排列。即,如果X包括A;X包括B;或X包括A和B兩者,則在任何以上情況下,都滿足“X包括A或B?!贝送?,本申請中和所附權(quán)利要求書所使用的冠詞“一”和“一個”一般應解釋為“一個或多個”,除非另有指定或從上下文將明確是指單數(shù)形式。此外,術(shù)語“實施例”或“一個實施例”或“實現(xiàn)”或“一個實現(xiàn)”不旨在意指同一個實施例或?qū)崿F(xiàn),除非這樣描述。此外,如此處所使用的術(shù)語“第一”、“第二”、“第三”、“第四”等等旨在用作區(qū)別不同的元件的標記,可以不一定具有根據(jù)它們的數(shù)字表示的序數(shù)含義。

此處所描述的各實施例還可以涉及用于執(zhí)行此處的操作的裝置。可以為所需的用途專門地設計此裝置,也可以包括由存儲在計算機中的計算機程序有選擇地激活和/或重新配置的通用計算機。這樣的計算機程序可以存儲在非瞬態(tài)的計算機可讀取存儲介質(zhì)上,諸如,但不僅限于,任何類型的磁(光)盤,包括軟盤、光盤、CD-ROM,以及磁性光盤、只讀存儲器(ROM)、隨機存取存儲器(RAM)、EPROM、EEPROM、磁卡或光卡,閃存,或適于存儲電子指令的任何類型的介質(zhì)。術(shù)語“計算機可讀取存儲介質(zhì)”應該被視為包括存儲一個或多個指令集的單個介質(zhì)或多個介質(zhì)(例如,集中式或分布式數(shù)據(jù)庫和/或相關聯(lián)的緩存和服務器)。術(shù)語“計算機可讀介質(zhì)”還應該被視為包括能夠存儲、編碼或攜帶由機器執(zhí)行的一組指令并且使機器執(zhí)行各實施例的方法中的任何一個或多個的任何介質(zhì)。術(shù)語“計算機可讀取存儲介質(zhì)”相應地應該被視為包括,但不局限于,固態(tài)存儲器、光學介質(zhì)、磁性介質(zhì)、能夠存儲由機器執(zhí)行的一組指令并且使機器執(zhí)行各實施例的方法中的任何一個或多個的任何介質(zhì)。

此處呈現(xiàn)的算法和/或顯示不固有地涉及任何特定計算機或其他設備。各種通用系統(tǒng)可以與根據(jù)此處的原理編寫的程序一起使用,或者構(gòu)建更加專門的設備來執(zhí)行操作也是比較方便的。根據(jù)下面的描述,這些系統(tǒng)中的各種系統(tǒng)的所需的結(jié)構(gòu)將變得顯而易見。另外,沒有參考任何特定編程語言來描述各實施例。應該理解,可以使用各種編程語言來實現(xiàn)此處所描述的各實施例的各實施例的原理。

上面的描述闡述了諸如特定系統(tǒng)、組件、方法等等的示例之類的很多具體細節(jié),以便提供對多個實施例的更全面的理解。然而,對本領域普通技術(shù)人員顯而易見的是,可以在沒有這些具體細節(jié)的情況下實施至少一些實施例。在其他情況下,沒有詳細示出或以簡單框圖格式來呈現(xiàn)已知的組件或方法,以便避免對各實施例造成不必要的模糊。如此,上文闡述的具體細節(jié)只是示例性的。特定實現(xiàn)可能不同于這些示例性細節(jié),仍在各實施例的范圍內(nèi)。

可以理解,上文的描述只是說明性的,而不是限制性的。在閱讀和理解上面的描述之后,許多其他實施例對本領域的技術(shù)人員是顯而易見的。各實施例的范圍完全由所附權(quán)利要求書以及這些權(quán)利要求被賦予的等效技術(shù)方案的完整范圍來確定。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1