至少一個處理流水線中的操作數生成的制作方法
【專利摘要】本發明公開了一種至少一個處理流水線中的操作數生成。一種數據處理設備2具有至少一個處理流水線4,所述至少一個處理流水線4具有第一流水線級6、8,第二流水線級10以及第三流水線級12。所述第一流水線級6、8檢測要被處理的指令流是否包括預定指令序列,所述預定指令序列包括用于執行第一和第二操作數生成操作的第一指令和第二指令30、32,其中所述第二操作數生成操作依賴于所述第一操作數生成操作的結果。響應于檢測到這個指令序列,所述第一流水線級6、8生成經修改的指令流,其中至少所述第二指令32被用第三指令70代替以用于執行具有與所述第一和第二操作數生成操作相同的效果的組合操作數生成操作。因為所述第三指令70能夠獨立于所述第一指令30被調度,所以能夠改進所述流水線4的處理性能。
【專利說明】至少一個處理流水線中的操作數生成
【技術領域】
[0001]本發明涉及數據處理領域。更特別地,本發明涉及在處理器的至少一個處理流水線中的操作數(operand)的生成。
【背景技術】
[0002]處理器可以有具有用于處理指令的若干流水線級的處理流水線。用于執行特定操作的指令可能需要特定流水線級來處理該操作。如果需要的操作數不可及時用于使用該操作數的流水線級,則指令可能需要被延遲并且在后一處理周期中發出,這降低了處理性能。本技術尋求解決這個問題,并且通過處理流水線來提高指令的吞吐量。
【發明內容】
[0003]從一個方面來看,本發明提供了一種處理器,其包括:
[0004]被配置為處理指令流的至少一個處理流水線,所述至少一個處理流水線包括第一流水線級、第二流水線級和第三流水線級;其中:
[0005]第一流水線級被配置為檢測指令流是否包括預定指令序列,所述預定指令序列包括用于在第三流水線級執行第一操作數生成操作的第一指令和用于在第二流水線級執行第二操作數生成操作的第二指令,其中第二操作數生成操作依賴于第一操作數生成操作的結果;以及
[0006]響應于檢測到指令流包括所述預定指令序列,第一流水線級被配置為生成經修改的指令流以供由至少一個處理流水線處理,其中至少第二指令被用于執行組合操作數生成操作的第三指令代替以便生成一操作數,其相當于如果第二操作數生成操作在第一操作數生成操作之后被執行則將會被生成的操作數。
[0007]處理流水線可以處理預定指令系列,其中第一指令執行第一操作數生成操作并且第二指令執行依賴于第一操作數生成操作的結果的第二操作數生成操作。這種依賴性限制這些指令能夠被處理時的時序,因為第二指令在其能夠繼續進行第二操作數生成操作之前必須等待第一指令的結果。可能不得不延遲第二指令持續一個或多個周期,從而放慢這些指令的總體處理。
[0008]為了解決這個問題,流水線的第一流水線級檢測要被處理的指令流是否包括預定指令序列。如果預定指令序列被檢測到,則經修改的指令流被生成以供由流水線處理,其中至少第二指令被用第三指令代替以用于執行組合操作數生成操作。組合操作數生成操作具有與如果第二操作數生成操作在第一操作數生成操作之后被執行則將發生的效果相同的效果。因為兩個操作數生成操作的組合現能夠使用一條指令來執行,所以這消除了依賴性問題并且釋放流水線以獨立于第一指令對第三指令進行調度。在許多情況下,這允許第三指令比如果第一和第二指令被流水線以它們原始的形式處理早至少一個周期來被處理。
[0009]如果第一、第二和第三流水線級為使得即在第一流水線級處的指令需要一定數量的處理周期到達第二流水線級并且需要至少該數目的周期到達第三流水線級,則這種技術是特別有用的。因為用于執行第一操作數生成操作的第三流水線級與用于執行第二操作數生成操作的第二流水線級相比是在相同的級處或進一步在流水線下方,所以這使得第一和第二指令難以在背對背處理周期內被調度,因為在第三流水線級中的第一操作數生成操作的結果能夠被及時轉發回到第二流水線級以用于第二操作數生成操作是不太可能的。因此,可能的是,以它們原始的形式處理第一和第二指令將在流水線中引起氣泡(在沒有指令正被流水線級處理時的處理周期),因此通過用經修改的第三指令代替至少第二指令以用于執行組合操作數生成操作來打破依賴性對于避免氣泡并且加速處理是有用的。
[0010]由組合操作數生成操作所生成的或者由第一和第二操作數生成操作所生成的操作數可以是由被流水線處理的指令所使用的任何值。例如,操作數可以是地址。
[0011 ] 在一個示例中,第一操作數生成操作可以用于生成操作數的第一部分并且第二操作數生成操作可以用于生成包括第一部分和第二部分兩者的全操作數。組合操作數生成操作還可以生成包括第一和第二部分兩者的全操作數。當要被生成的操作數大于可用于在單指令的編碼中表示操作數的位的數目時,操作數的這種兩級生成是特別有用的。第三指令能夠在一條指令中生成較大的操作數,因為它是由第一級所生成的內部生成指令,而不是已被程序設計員或編譯器編碼的存儲在存儲器中的指令,因此第三指令不需要遵循針對正被使用的指令集的正常編碼規則。能夠使用控制至少一個流水線執行組合操作數生成操作所必需的任何信息在經修改的指令流中表示第三指令。
[0012]第一操作數生成操作可以包括通過將偏移值加到存儲在諸如寄存器的存儲位置中的基值的至少一部分來生成操作數的第一部分。例如,基值可以是指示要被處理的指令(例如,當前處理的指令或要被處理的下一條指令)的地址的程序計數器,在這種情況下第一操作數生成操作將生成相對于程序計數器已被偏移的地址。
[0013]當表示第二指令應該被用第三指令代替所針對的預定指令序列時第一流水線級不需要檢測第一和第二指令的所有發生。有時,即使存在如上面所提到的第一和第二指令也可能不期望用第三指令代替第二指令。例如,在操作數基于程序計數器的一部分被生成的情況下,如果第一和第二指令對于用于操作數生成的程序計數器的部分具有相同的值則第一流水線級可以檢測預定指令序列。否則,第三指令(其將典型地具有同第二指令相同的地址)能夠將不同的結果給予給第一和第二指令的組合,因為用于第三指令的程序計數器的部分可以不同于第一指令的部分。通過只是在第一和第二指令對于程序計數器的有關部分共享相同的值的時候執行用第三指令代替第二指令,能夠保證正確的結果。
[0014]第一操作數生成操作可以將偏移值加到基值的最高有效部分。在執行這個加法之前可能需要轉移偏移值以便將它與基值的最高有效部分對齊。在程序計數器的情況下,最高有效部分可以表示地址的頁面部分,指示包括正被處理的指令的存儲器的頁面。通過將偏移加到程序計數器的頁面部分,第一操作數生成操作能夠確定地址空間的不同頁面的地址,例如包括要被訪問的文字值的頁面。第一操作數生成操作可以掩蔽基值的最低有效部分,以便在存儲器的頁面內的頁面偏移不由這個操作來確定。第二操作數生成操作然后可以將立即值加到第一操作數生成操作的結果的最低有效部分,以便提供要被訪問的數據值的全存儲器地址。在一些架構中,存儲器地址可以具有比可用于對操作數進行編碼的指令中的編碼空間更大數目的位(例如,32位地址可以用僅具有可用于對操作數進行編碼的21個位的指令來生成)。在這種情況下,使用序列中的第一和第二指令的兩部分地址生成可能是有用的,并且為了提高性能,能夠用使用單指令來生成全存儲器地址的第三指令代替至少第二指令。
[0015]預定序列的第二指令可以使用由第二操作數生成操作所生成的操作數來執行進一步的處理操作。類似地,代替第二指令的第三指令可以執行相同的處理操作。這種處理操作可以包括用于從存儲器加載具有由所生成的操作數所標識的地址的數據值的加載操作、用于將具有由所生成的操作數所標識的地址的數據值存儲到存儲器的存儲操作、諸如使用所生成的操作數的加、減或乘操作的算術操作、以及諸如使用所生成的操作數的與、或、與非或異或操作的邏輯操作中的至少一個。
[0016]替換地,第二指令及其代替第三指令可以簡單地將所生成的操作數存儲到它能夠被另一指令訪問所在的存儲位置(例如寄存器)。因此,第二和第三指令沒有必要執行其它操作以及操作數生成。能夠在流水線的特定實施方式中視需要而定在第二流水線級或第三流水線級中處理在經修改的序列中代替第二指令的第三指令。
[0017]因為第三指令具有與第一和第二指令的第一和第二操作數生成操作的組合相同的效果,所以可以省略來自經修改的流的第一指令以及第二指令,以便第三指令代替預定指令序列的第一和第二指令兩者。
[0018]然而,第二指令可能不是使用第一指令的結果的唯一指令。例如,相同的第一指令可以被其中每個都使用相同部分操作數生成的若干后續指令共享。例如,第一指令可以像上面所討論的那樣生成存儲器中的特定頁面的地址,并且然后與第二指令類似的若干指令可以訪問相同頁面內的不同地址。在這種情況下,即使不需要這個用于執行第三指令,也可能仍然需要完成第一指令。因此,經修改的指令流可以包括第一指令和第三指令兩者,以便在經修改的流中僅第二指令被第三指令代替。流水線可以獨立于第一指令的處理對第三指令的處理進行調度。能夠在相同的周期內或者在連續處理周期內發出第一和第三指令,并且第一指令的結果是否將及時為第三指令做好準備是無關緊要的。
[0019]經修改的指令流為什么可以仍然包括第一指令的另一原因是在一些情況下第一指令可能已經被發出以供在遇到第二指令的時候執行。即使其結果對于代替第二指令的第三指令不是需要的,讓第一指令完成執行也可能是更高效的。
[0020]為了確定第一指令是否應被保持在經修改的流內,第一流水線級可以確定指令流是否包括依賴于第一指令的第一操作數生成操作的結果的第四指令。如果存在使用第一指令的結果的第四指令,則能夠保持第一指令,否則能夠省略第一指令。
[0021]然而,第一流水線級無法訪問整個指令流,或者也許不能肯定地確定是否存在使用第一指令的結果的后續指令。總是將第一指令包括在經修改的指令流中而不管是否存在將使用這個結果的后續指令可能是較簡單的。這在硬件方面可能是更高效的。
[0022]替換地,雖然第一流水線級無法總是能夠確定是否將存在使用第一指令的結果的后續指令,但是可能存在其中保證了不可能存在使用第一操作數生成操作的結果的后續指令的特定情形。例如,在指令流中緊跟第二指令之后的指令能夠重寫第一指令向其寫入第一操作數生成操作的結果的寄存器。在這種情況下,不可能存在取決于第一操作數生成操作的結果的任何另外的指令將是已知的,并且在這種情況下第一指令能夠被用第三指令代替。因此,第一流水線級可以確定后續指令是否可能依賴于第一操作數生成操作的結果,并且如果知道了不可能存在后續依賴指令,則第一指令和第二指令可以被用第三指令代替,然而如果后續指令可能是依賴的,則僅第二指令被代替。
[0023]第一和第二指令在原始的指令流中不需要與彼此相鄰。第一流水線級可以檢測在第一和第二指令之間包括一個或多個中間指令的指令序列作為預定指令序列。為了降低第一流水線級中用于檢測這樣的序列的硬件的復雜度,定義可以在第一和第二指令之間出現的中間指令的最大數目N以便這樣的序列被檢測到是有用的。在實踐中,一旦已發生若干中間指令,則在第一和第二指令之間的依賴性(cbpendency)就變得不太可能,因為更可能的是,第一指令將在第二指令到達第二流水線級之前已完成。通過減少針對第一指令和第二指令的存在而被檢查的序列中的連續指令的數目,能夠降低這種檢測的硬件開銷。
[0024]一些流水線級可以將最大數目N設置為零,以便僅具有彼此相鄰的第一和第二指令的預定指令序列被檢測到。其它系統可以定義非零數目的中間指令。例如,如果N= 2,則第一流水線級可以檢查每一組四條連續指令以檢測它們是否包含如上面所討論的一對第一和第二指令。
[0025]執行預定指令序列的檢測的第一流水線級可以是流水線的任何級。例如,第一流水線級可以是對指令進行解碼的解碼級并且經修改的指令流可以是解碼的指令流,以便當第二指令被解碼時,檢查了它是否跟隨最近的第一指令,并且如果是這樣的話,則第二指令被用解碼的第三指令代替。替換地,第一流水線級可以是發出級,該發出級控制指令被發出以由流水線處理的時序。第一流水線級可是與第二流水線級和第三流水線級中的一個相同的級。
[0026]分別執行第二和第一操作數生成操作的第二和第三流水線級可以位于相同的處理流水線內或不同的流水線內。并且第二和第三流水線級事實上可以是在特定流水線內的相同流水線級。
[0027]雖然能夠在亂序處理器中使用本技術,但是它在有序處理器中是特別有用的。即使發生數據依賴性危害,亂序處理器也能夠通過改變指令按照其被發出以供執行的順序來確保轉發進度。然而,這在有序處理器中是不可能的,在所述有序處理器中指令被按照它們原始的程序順序發出。在有序處理流水線中,如果第一和第二指令被流水線以它們原始的形式處理并且在連續周期內發出,以及第一指令的結果將不可及時用于供在第二流水線級處的第二指令使用,則第二指令將不得不被延遲一個處理周期。由于處理器的有序性質,同時處理另一指令將不是可能的。因此,在流水線中將存在氣泡,這降低處理性能。相比之下,采用本技術,數據依賴性通過用第三指令代替第二指令而被避免,因此對第三指令能夠在其中被發出的周期沒有約束。即使第一指令留在經修改的流中,第三指令也不依賴于第一指令,因此能夠在相同的處理周期內或者在連續周期內發出這些指令。
[0028]從另一方面來看,本發明提供了一種處理器,其包括:
[0029]用于處理指令流的至少一個處理流水線裝置,所述至少一個處理流水線裝置包括用于處理指令的第一、第二和第三流水線級裝置;其中:
[0030]第一流水線級裝置被配置為檢測指令流是否包括預定指令序列,所述預定指令序列包括用于在第三流水線級裝置處執行第一操作數生成操作的第一指令和用于在第二流水線級裝置處執行第二操作數生成操作的第二指令,其中第二操作數生成操作依賴于第一操作數生成操作的結果;以及
[0031]響應于檢測到指令流包括所述預定指令序列,第一流水線級裝置被配置為生成經修改的指令流以供由至少一個處理流水線裝置處理,其中至少第二指令被用用于執行組合操作數生成操作的第三指令代替以便生成一操作數,其相當于如果第二操作數生成操作在第一操作數生成操作之后被執行則將被生成的操作數。
[0032]從另一個方面來看,本發明提供了一種用于包括被配置為處理指令流的至少一個處理流水線的處理器的數據處理方法,所述至少一個處理流水線包括第一流水線級、第二流水線級以及第三流水線級;所述方法包括:
[0033]在第一流水線級處檢測指令流是否包括預定指令序列,所述預定指令序列包括用于在第三流水線級處執行第一操作數生成操作的第一指令和用于在第二流水線級處執行第二操作數生成操作的第二指令,其中第二操作數生成操作依賴于第一操作數生成操作的結果;以及
[0034]響應于檢測到指令流包括所述預定指令序列,第一流水線級生成經修改的指令流以供由至少一個處理流水線處理,其中至少第二指令被用用于執行組合操作數生成操作的第三指令代替以便生成一操作數,其相當于如果第二操作數生成操作在第一操作數生成操作之后被執行則將被生成的操作數。
[0035]從另一方面來看,本發明提供了存儲至少一個計算機程序的計算機可讀存儲媒體,所述至少一個計算機程序當在計算機上被執行時,控制計算機提供與上面所描述的處理器相對應的虛擬機環境。
[0036]從另一方面來看,本發明提供了存儲至少一個計算機程序的計算機可讀存儲媒體,所述至少一個計算機程序當在計算機上被執行時,控制計算機提供用于執行上面所描述的方法的虛擬機環境。
[0037]這些計算機可讀存儲媒體可以是非暫時性的。虛擬機可以由至少一個計算機程序來實現,所述至少一個計算機程序當在計算機上被執行時,控制計算機表現得好像它是具有如上面所討論的一個或多個流水線的處理器,以便即使計算機不具有與處理器相同的硬件和/或架構,在計算機上執行的指令也被執行好像它們在處理器上被執行。虛擬機環境允許本機系統通過運行與非本機代碼被設計所針對的非本機系統相對應的虛擬機來執行非本機代碼。因此,在虛擬機環境中虛擬機程序可以用如上面所討論的第三指令代替至少第二指令。
【專利附圖】
【附圖說明】
[0038]本發明的上述和其它目的、特征以及優點從將被連同附圖一起閱讀的說明性實施例的以下【具體實施方式】將是顯而易見的,在附圖中:
[0039]圖1示出了處理流水線的示例;
[0040]圖2A和2B分別示出了原始的指令流和經修改的指令流;
[0041]圖3示出了第一地址生成操作;
[0042]圖4示出了第二地址生成操作;
[0043]圖5示出了具有與第一和第二地址生成操作的組合相同的結果的組合地址生成操作;
[0044]圖6是示出了圖2A的指令能夠被執行的時序的時序圖;
[0045]圖7是示出了圖2B的指令在準許指令的雙重發出的系統中被執行的時序的時序圖;
[0046]圖8是示出了圖2B的指令在每周期只能發出單個指令的系統中的被執行的時序的時序圖;
[0047]圖9示出了在流水線中處理指令的方法;
[0048]圖10示出了其中存在兩個處理流水線的示例;以及
[0049]圖11示出了本技術的虛擬機實現方式。
【具體實施方式】
[0050]圖1示出了具有處理流水線4的數據處理設備2的一部分的示例。流水線4具有:解碼級6,其用于對從存儲器取出的指令進行解碼;發出級8,其用于發出指令以供由后續級處理;以及第一執行級10、第二執行級12和第三執行級14,其用于響應于執行的指令來執行各種操作。在這個示例中,在解碼級6處的指令需要一個處理周期到達發出級8,并且分別需要兩個、三個以及四個處理周期到達第一、第二以及第三執行級10、12、14。將了解的是,處理器2和流水線4可以包括未在圖1中示出的其它級和元件。
[0051]在這個示例中第一執行級10具有用于從寄存器讀取操作數值的寄存器讀取電路16和用于生成地址的地址生成單元(AGU) 18。第二執行級12包括用于執行算術操作(諸如加、減、乘以及除操作)和邏輯操作(諸如按位與、或、或異或操作)的算術邏輯單元(ALU) 20。第二執行級12同樣包括用于訪問緩存和用于執行加載/存儲操作的數據緩存存取電路22。AGU18是特殊的地址生成單元,其被提供來在流水線4的相對早期的流水線級處執行若干常見地址生成操作以便后續級能夠使用該地址。例如,第二執行級12中的數據緩存存取電路22能夠加載或者存儲具有由第一執行級10中的AGU18所生成的地址的數據值。在流水線的早期級提供AGU18幫助降低存儲器訪問等待時間。其它電路可以位于第一和第二執行級10、12中以及位于第三執行級14和未在圖1示出的后續流水線級中。
[0052]圖2A示出了包括第一指令30和第二指令32的指令序列的示例。第一指令30是用于生成地址的第一部分的ADRP指令。圖3示出了響應于ADRP指令30由第二執行級12中的ALU20執行的第一地址生成操作。ADRP指令30指定目的地寄存器x0和立即值(immediatevalue) #immhi0 ADRP指令30同樣使用存儲在數據處理設備2的程序計數器寄存器中的程序計數器pc。程序計數器pc指示要被處理的指令(例如,當前指令或下一條指令)的地址。程序計數器在ADRP指令30的編碼中未被顯式地標識。如圖3所示,響應于ADRP指令30,ALU20使用與操作將程序計數器值40與掩碼42相組合以生成具有與程序計數器寄存器的對應部分相同的上部46和具有比特位值O的下部48的掩蔽的程序計數器值44。掩碼42被預先確定,從而使得:程序計數器的上部46對應于存儲器頁面的頁面地址,而下部48對應于該頁面內的偏移,該存儲器頁面包括要被處理的指令的地址。ALU20然后將經掩蔽的程序計數器值44加到立即值其通過執行移位操作而與程序計數器的上部46對齊。經掩蔽的程序計數器值44和經移位的立即值50的和被存儲到寄存器xO,并且表示存儲器地址空間的另一頁面的頁面地址52。視需要第一操作數生成操作在另一實施例中能夠由AGU18代替ALU20來執行。
[0053]圖2A的第二指令32是用于將當前存儲在寄存器中的數據值存儲到存儲器內的位置的存儲指令STR。存儲指令32指定存儲要被存儲到存儲器的數據值的源寄存器《1、存儲操作數的第二寄存器xO以及要被加到存儲在寄存器xO中的操作數的立即值以獲得數據值的全地址。寄存器xO與ADRP指令30的目的地寄存器xO相同,因此存儲指令32依賴于ADRP指令30。圖4示出了由AGU18響應于存儲指令32所執行的第二地址生成操作。緊跟ADRP30指令的執行之后,源寄存器xO包含由第一地址生成操作所生成的頁面地址52。響應于存儲指令32,AGU18將立即值#immlo54加到頁面地址52以產生包括頁面地址52和由立即值所表示的頁面偏移54兩者的全地址56。全地址56被數據緩存存取電路22用于后續存儲操作。
[0054]因為存儲指令32的第二地址生成操作需要ADRP指令30的結果,所以處理這些指令對它們能夠被調度時的時序構成約束。圖3的第一地址生成操作在ALU20處被執行,因此這個結果直到ADRP指令到達第二執行級12為止才可用。雖然在圖1的流水線中存在可用的潛在轉發路徑60,但是這些能夠將第一地址生成的結果返回給AGU18直到下一個周期為止是不可能的,因此存儲指令32直到緊跟在ALU20中完成第一地址生成之后的周期為止才能夠被AGU18處理。如圖6所示,這意味著將需要在ADRP指令30之后兩個周期發出存儲指令32以給予足夠時間以便ADRP指令的結果被轉發到第一執行級10以供在處理該存儲指令時使用。因此,氣泡65可能在流水線中發生(在處理周期2中沒有正被第一執行級處理的指令)。在有序處理器中,這種氣泡不能夠通過在存儲指令32之前發出另一指令來填充。因此,在給定時段內能夠處理較少的指令,因此降低了性能。
[0055]為了解決這個問題,解碼級6可以檢查所接收到的指令流以檢測圖2A中所示出的類型的序列,其中用于執行第二操作數生成操作的第二指令32取決于用于執行第一操作數生成操作的第一指令30。第一和第二指令30、32不需要是連續的,并且在第一指令30與第二指令32之間可以存在多一個中間指令。當檢測到這種類型的序列時,解碼級6用圖2B中所示出的經修改的指令序列代替它,其中至少第二指令被用執行組合地址生成操作的經修改的存儲指令STR*70 ( “第三指令”)代替。組合地址生成操作由AGU18來執行以便存儲操作能夠被數據緩存存取電路22在下一個周期內執行。
[0056]如圖5所示,響應于第三指令而執行的組合地址生成操作將程序計數器40與掩碼42相組合并且然后將經掩蔽的程序計數器值44加到其中上部立即值和下部立即值被串級的組合立即值72。經掩蔽的程序計數器值44和組合立即值72的和產生包括頁面地址52和頁面偏移54兩者的全地址56,其與圖4中所示出的第二地址生成的結果相同。因此,組合地址生成操作具有與如果第一和第二地址生成操作已被依次執行則將會發生相同的結果。用于執行組合地址生成的經修改的存儲指令70不再取決于ADRP指令30,因此能夠被調度成在相同的周期內或在連續周期內被執行。如圖7所示,在其中可以每周期發出多條指令的系統中,能夠在相同的周期內發出ADRP指令30和經修改的存儲指令70以提高處理性能。
[0057]替換地,如果流水線每周期僅能夠發出一條指令,則能夠像圖8中所示出的那樣在連續周期內發出ADRP和經修改的存儲指令30、70,這將仍然允許存儲指令70比在圖6中早一個周期被處理。
[0058]雖然ADRP指令30對于針對經修改的存儲指令70生成正確結果來說不再是必要的,但是可以存在需要由ADRP指令30放入寄存器xO的值的后續指令,因此可能仍然有必要執行ADRP指令30。如果知道了不可能存在使用xO中的值的任何另外的指令,例如如果后續指令重寫xO中的值,則ADRP指令30還能夠被用經修改的存儲指令70代替。
[0059]使用地址生成指令30的結果的指令32不必是存儲指令,并且還可能是加載指令或由ALU20使用由第一指令30所生成的值所執行的算術或邏輯指令。由這些指令所生成的操作數可以是任何操作數而不只是地址。可以在流水線的任何級中執行組合操作,所以像上面所討論的那樣使用第一執行級10中的AGU18來執行這個操作不是必要的。并且,在一些實施方式中第一執行級10可以與發出級8組合在單個流水線級中,以便能夠在相同的處理周期內執行在AGU18中的指令發出、寄存器讀取以及地址生成。
[0060]在上面所討論的示例中,解碼級6檢測預定指令序列并且用經修改的指令流代替它,但其還能夠在發出級8處執行。例如,解碼級6或發出級8可以具有帶特定數目N個條目的FIFO(先進先出)緩沖器,并且由該級6、8所接收到的每條指令都可以被寫入FIFO緩沖器,其中來自緩沖器的最舊指令被驅逐以為新的指令讓路。在每個處理周期內,如果FIFO緩沖器包括第一指令30和第二指令32兩者則解碼級6或發出級8可以檢測預定序列,所述第二指令依賴于第一指令30并且對其來說如果這些指令被以它們原始的形式處理則預期第一指令30不會及時為第二指令32產出其結果。FIFO緩沖器中條目的數目J確定能夠在作為預定序列檢測到的第一和第二指令之間發生的中間指令的最大數目(N = J-2)。
[0061]圖9示出了在流水線中處理指令的方法。在步驟100處,第一流水線級(例如,解碼級6或發出級8)檢測要被處理的指令流是否包括預定指令序列,所述預定指令序列包括用于執行第一操作數生成的第一指令和用于執行依賴于第一操作數生成的第二操作數生成的第二指令。如果操作數生成使用程序計數器的一部分,則步驟100還可以檢查第一和第二指令是否對于程序計數器的有關部分具有相同的值,不然的話可以不檢測預定指令序列。如果預定指令序列未被檢測到,則不進行指令代替并且原始的指令被流水線處理。方法然后返回到步驟100以進行后續處理周期。
[0062]如果預定指令序列被檢測到,則在步驟102處確定了第一指令是已經被發出,還是存在,或者可能存在除使用第一指令的結果的第二指令以外的后續指令。如果第一指令已經被發出,則允許指令完成將更加有效,即使其結果不是任何其它指令所需要的。因此,在步驟104處,僅第二指令被提供了相當于依次執行第一和第二操作數生成操作的組合操作數生成操作的經修改的第三指令代替。并且,如果存在或者可能存在除依賴于第一指令的結果的第二指令以外的后續指令,則第一指令應該留在經修改的流中,因此再一次在步驟104處僅第二指令被用第三指令代替。另一方面,如果第一指令仍然尚未被發出,并且不可能存在使用第一操作數生成的結果的后續指令,則在步驟106處,第一和第二指令兩者都被用組合指令代替。在可以代替第一和第二指令兩者的情況下,則這是有用的,因為消除第一指令釋放能夠被用于處理另一指令的流水線中的插槽。然而,在實踐中,用于檢測這種可能性的硬件是復雜的并且總是選取步驟104以便僅第二指令被第三指令代替以及第一指令留在經修改的指令流中是更有效的。方法然后返回到步驟100以進行以下的處理周期。
[0063]雖然圖1示出了具有通過它的多個處理路徑的單個處理流水線,但是如圖10所示提供多個執行流水線120、130也是可能的。提供了被流水線120、130兩者所共享的公共解碼級6和公共發出級8。發出級8取決于在每個流水線中可用的功能性、指令的類型和/或每個流水線120、130的當前處理工作負荷來確定要將指令發出到哪一個流水線120、130。如圖10所示,包括ALU20和AGU18的流水線級可以是在不同的流水線120、130內,但在由這些級所處理的指令之間仍然可能發生數據依賴性問題。因此,在這個實施例中用第三指令70代替第二指令32同樣提供性能改進。
[0064]圖11示出了可以被使用的虛擬機實施方式。雖然較早地描述的實施例在用于操作支持所涉及技術的特定處理硬件的設備和方法方面實現本發明,但是同樣可以提供硬件裝置的所謂的虛擬機實施方式。這些虛擬機實施方式在典型地運行支持虛擬機程序204的主機操作系統202的主機處理器200上運行。典型地,需要強大的處理器來提供以合理的速度執行的虛擬機實施方式,但這樣的方法在特定情況下可能是正當的,諸如當由于兼容性或重用原因期望運行另一處理器本地的代碼時。虛擬機程序204能夠執行應用程序(或操作系統)206以給出與將由程序通過真實硬件裝置的執行所給出的相同結果。因此,可以使用虛擬機程序204從應用程序206內執行上面所描述的程序指令以復制(一個或多個)真實流水線4或120、130的處理。
[0065]雖然已經參考附圖在本文中詳細地描述了本發明的說明性實施例,但是應當理解的是,本發明不限于那些精確的實施例,并且在不背離如由所附權利要求所限定的本發明的范圍和精神的情況下,本領域的技術人員能夠在其中實現各種改變和修改。
【權利要求】
1.一種處理器,包括: 被配置為對指令流進行處理的至少一個處理流水線,所述至少一個處理流水線包括第一流水線級、第二流水線級以及第三流水線級;其中: 所述第一流水線級被配置為檢測所述指令流是否包括預定指令序列,所述預定指令序列包括用于在所述第三流水線級處執行第一操作數生成操作的第一指令和用于在所述第二流水線級處執行第二操作數生成操作的第二指令,其中所述第二操作數生成操作依賴于所述第一操作數生成操作的結果;并且 響應于檢測到所述指令流包括所述預定指令序列,所述第一流水線級被配置為生成經修改的指令流以供由所述至少一個處理流水線處理,在經修改的指令流中,至少所述第二指令被用于執行組合操作數生成操作的第三指令代替以便生成某一操作數,該操作數等于如果所述第二操作數生成操作在所述第一操作數生成操作之后被執行則將被生成的操作數。
2.根據權利要求1所述的處理器,其中所述第一流水線級處的指令需要X個處理周期來到達所述第二流水線級并且需要Y個處理周期來到達所述第三流水線級,其中Y和X是整數并且Y彡X。
3.根據權利要求1和2中任一項所述的處理器,其中所述組合操作數生成操作獨立于所述第一操作數生成操作的結果。
4.根據權利要求1至3中任一項所述的處理器,其中所述操作數包括地址。
5.根據任一前述權利要求所述的處理器,其中所述第一操作數生成操作用于生成所述操作數的第一部分,所述第二操作數生成操作用于生成包括所述第一部分和第二部分的操作數,并且所述組合操作數生成操作用于生成包括所述第一部分和所述第二部分的操作數。
6.根據權利要求5所述的處理器,其中所述操作數包括比在所述指令流的單個指令的指令編碼中能夠被編碼的比特位更多數目的比特位。
7.根據權利要求5和6中任一項所述的處理器,其中所述第一操作數生成操作包括:通過將偏移值添加到存儲在存儲位置中的基值的至少一部分來生成所述操作數的第一部分。
8.根據權利要求7所述的處理器,其中所述操作數包括地址,并且所述基值包括指示要被處理的指令的地址的程序計數器。
9.根據權利要求8所述的處理器,其中所述第一流水線級被配置為:將其中所述第一指令和所述第二指令對于所述程序計數器的所述至少一部分具有相同值的指令序列檢測為所述預定指令序列。
10.根據權利要求8和9中任一項所述的處理器,其中所述基值的至少一部分包括所述基值的最聞有效部分。
11.根據權利要求10所述的處理器,其中所述第一操作數生成操作包括掩蔽所述基值的最低有效部分。
12.根據權利要求10和11中任一項所述的處理器,其中所述第二操作數生成操作包括將立即值加到所述第一操作數生成操作的結果的最低有效部分。
13.根據任一前述權利要求所述的處理器,其中所述第二指令用于使用由所述第二操作數生成操作所生成的操作數來執行處理操作,以及 所述第三指令用于使用由所述組合操作數生成操作所生成的操作數來執行所述處理操作。
14.根據權利要求13所述的處理器,其中所述處理操作包括以下各項中的至少一項: 加載操作; 存儲操作; 算術操作;以及 邏輯操作。
15.根據任一前述權利要求所述的處理器,其中所述經修改的指令流包括所述第一指令和所述第三指令。
16.根據權利要求15所述的處理器,其中所述至少一個處理流水線被配置為獨立于所述第一指令的處理對所述第三指令的處理進行調度。
17.根據權利要求1至14中任一項所述的處理器,其中所述經修改的指令流包括所述第三指令并且不包括所述第一指令。
18.根據任一前述權利要求所述的處理器,其中所述第一流水線級被配置為確定所述指令流是否包括依賴于所述第一指令的第一操作數生成操作的結果的第四指令; 如果所述指令流包括所述第四指令,則所述第一處理級被配置為用所述第三指令代替所述第二指令以生成包括所述第一指令、所述第三指令以及所述第四指令的經修改的指令流;以及 如果所述指令流不包括所述第四指令,則所述第一處理級被配置為用所述第三指令代替所述第一指令和所述第二指令以生成包括所述第三指令而不包括所述第一指令的經修改的指令流。
19.根據權利要求1至17中任一項所述的處理器,其中所述第一流水線級被配置為確定所述指令流的后續指令是否可能依賴于所述第一指令的第一操作數生成操作的結果; 如果后續指令可能依賴于所述第一操作數生成操作的結果,則所述第一處理級被配置為用所述第三指令代替所述第二指令以生成包括所述第一指令和所述第三指令的經修改的指令流;以及 如果沒有后續指令可能依賴于所述第一操作數生成操作的結果,則所述第一處理級被配置為用所述第三指令代替所述第一指令和所述第二指令以生成包括所述第三指令而不包括所述第一指令的經修改的指令流。
20.根據任一前述權利要求所述的處理器,其中所述第一流水線級被配置為檢測在所述第一指令與所述第二指令之間包括最大N個中間指令的指令序列作為所述預定指令序列,其中N是整數并且N彡O。
21.根據權利要求20所述的處理器,其中N> O。
22.根據任一前述權利要求所述的處理器,其中所述第一流水線級包括被配置為對要被所述至少一個處理流水線處理的指令進行解碼的解碼級,并且所述經修改的指令流包括經解碼的指令流。
23.根據權利要求1至21中任一項所述的處理器,其中所述第一流水線級包括被配置為發出指令以供由所述至少一個處理流水線處理的發出級。
24.根據任一前述權利要求所述的處理器,其中所述第二流水線級和所述第三流水線級是同一處理流水線的相應級。
25.根據任一前述權利要求所述的處理器,其中所述第二流水線級和所述第三流水線級是相同的流水線級。
26.根據權利要求1至23中任一項所述的處理器,其中所述第二流水線級和所述第三流水線級是不同處理流水線的級。
27.根據任一前述權利要求所述的處理器,其中所述處理器是有序處理器。
28.根據權利要求27所述的處理器,其中所述指令流具有預定的程序次序;并且 所述至少一個處理流水線包括被配置為發出以與所述預定的程序次序相同的次序進行處理的指令的發出級。
29.—種處理器,其包括: 用于處理指令流的至少一個處理流水線裝置,所述至少一個處理流水線裝置包括用于處理指令的第一流水線級裝置、第二流水線級裝置以及第三流水線級裝置;其中: 所述第一流水線級裝置被配置為檢測所述指令流是否包括預定指令序列,所述預定指令序列包括用于在所述第三流水線級裝置處執行第一操作數生成操作的第一指令和用于在所述第二流水線級裝置處執行第二操作數生成操作的第二指令,其中所述第二操作數生成操作依賴于所述第一操作數生成操作的結果;并且 響應于檢測到所述指令流包括所述預定指令序列,所述第一流水線級裝置被配置為生成經修改的指令流以供由所述至少一個處理流水線裝置處理,在經修改的指令流中,至少所述第二指令被用于執行組合操作數生成操作的第三指令代替以便生成某一操作數,該操作數等于如果所述第二操作數生成操作在所述第一操作數生成操作之后被執行時將被生成的操作數。
30.一種用于處理器的數據處理方法,該處理器包括被配置為對指令流進行處理的至少一個處理流水線,所述至少一個處理流水線包括第一流水線級、第二流水線級、和第三流水線級;所述方法包括: 在所述第一流水線級處,檢測所述指令流是否包括預定指令序列,所述預定指令序列包括用于在所述第三流水線級處執行第一操作數生成操作的第一指令和用于在所述第二流水線級處執行第二操作數生成操作的第二指令,其中所述第二操作數生成操作依賴于所述第一操作數生成操作的結果;以及 響應于檢測到所述指令流包括所述預定指令序列,所述第一流水線級生成經修改的指令流以供由所述至少一個處理流水線處理,其中至少所述第二指令被用于執行組合操作數生成操作的第三指令代替以便生成某操作數,該某操作數等于如果所述第二操作數生成操作在所述第一操作數生成操作之后被執行則將被生成的所述操作數。
31.一種存儲至少一個計算機程序的計算機可讀存儲介質,所述至少一個計算機程序當在計算機上被執行時,控制所述計算機提供與與權利要求1至29中任一項所述的處理器相對應的虛擬機環境。
32.—種存儲至少一個計算機程序的計算機可讀存儲介質,所述至少一個計算機程序當在計算機上被執行時,控制所述計算機提供用于執行權利要求30所述的方法的虛擬機環境。
33.一種在本文中基本參考附圖所描述的處理器。
34.一種在本文中基本參考附圖所描述的數據處理方法。
35.一種在本文中基本參考附圖所描述的計算機可讀存儲介質。
【文檔編號】G06F9/38GK104239001SQ201410256267
【公開日】2014年12月24日 申請日期:2014年6月10日 優先權日:2013年6月10日
【發明者】伊恩·米歇爾·考爾菲爾德, 皮特·理查德·格林哈爾格, 馬克斯·巴特利 申請人:Arm 有限公司