對應于多個微操作的復雜程序指令的譯碼的制作方法
【技術領域】
[0001]本技術涉及數(shù)據(jù)處理領域。更具體地,本技術涉及在支持并行處理線程的數(shù)據(jù)處理裝置中對程序指令進行譯碼以生成微操作。
【背景技術】
[0002]一些指令集包括一些與將由處理電路執(zhí)行的多個微操作相對應的復雜程序指令,每個微操作表示與程序指令相關的操作的一部分。因此,指令譯碼器可對程序指令進行譯碼以生成將由處理電路執(zhí)行的微操作。
[0003]一些處理裝置支持多個并行處理線程。分離的獲取單元可被提供用于各自線程以觸發(fā)獲取微操作到處理電路中。共享指令譯碼器可被提供用于生成各自的獲取單元所需的微操作。典型指令譯碼器將復雜程序指令作為單一的實體進行譯碼,從而使得:響應于來自獲取單元中的一個的、對復雜程序指令進行譯碼的請求,指令譯碼器然后將在連續(xù)周期中生成與該復雜程序指令相對應的所有微操作。但是,這在共享指令譯碼器在多個對應于處理線程的獲取單元之間共享的系統(tǒng)中可能有問題。如果獲取單元中的一個在獲取對應于復雜程序指令的微操作時中途停滯,則不能接受對同一復雜程序指令的進一步的微操作,則共享譯碼器也將停滯,因為其要保證完成所有對復雜程序指令的微操作。這就阻止了其他獲取單元從指令譯碼器接收經譯碼的微操作,直到第一獲取單元的停滯被解決,即使那些其他獲取單元本可以接受微操作。這導致處理性能降低。本技術需求解決這一問題。
【發(fā)明內容】
[0004]從一個方面看,本發(fā)明提供了一種數(shù)據(jù)處理裝置,包括:
[0005]處理電路,該處理電路被配置為并行處理多個處理線程;
[0006]共享指令譯碼器,該共享指令譯碼器被配置為對程序指令進行譯碼以生成要由處理電路處理的微操作,程序指令包括與多個微操作相對應的至少一個復雜程序指令;以及
[0007]多個獲取單元,該多個獲取單元被配置為獲取由共享指令譯碼器生成的微操作以用于由處理電路進行處理,每個獲取單元與多個線程中的至少一個相關聯(lián);
[0008]其中共享指令譯碼器被配置為:響應于由多個獲取單元中的一個觸發(fā)的譯碼請求,生成每個微操作;以及
[0009]共享指令譯碼器被配置為:響應于分離的譯碼請求,個體地生成復雜程序指令的多個微操作,每個分離的譯碼請求標識了復雜程序指令的哪個微操作將由共享指令譯碼器響應于譯碼請求而生成。
[0010]本技術的指令譯碼器響應于由獲取單元觸發(fā)的分離的譯碼請求,個體地生成復雜程序指令的微操作。每個譯碼請求可標識將響應于譯碼請求而生成的復雜程序指令的特定微操作。因此,不是如在先前的系統(tǒng)中那樣響應于單個請求而生成所有微操作,在依次的每個譯碼請求之后,指令譯碼器可譯碼復雜程序指令中所請求的微操作,然后在譯碼另一微操作之前,等待進一步的譯碼請求。通過要求每個微操作被個體地請求,這允許共享指令譯碼器在為復雜程序指令生成微操作的中途切換正被譯碼的指令。因此,即使一個獲取單元在只生成了復雜程序指令所需的微操作的一部分之后停滯,譯碼器也能夠切換到生成由另一獲取單元請求的微操作,然后當請求這些微操作的獲取單元去停滯時,返回到生成第一程序指令的剩余微操作。這就減少了指令譯碼器不活動的周期數(shù)量,因此總體上提升了數(shù)據(jù)處理裝置的處理性能。
[0011]在一些示例中,將由處理電路進行處理的每個線程可具有它自己的用于獲取將為該線程執(zhí)行的微操作的獲取單元。在其他示例中,獲取單元中的至少一個可在多個線程之間共享。
[0012]在一些示例中,每個獲取單元可直接向用于處理的處理電路發(fā)送所獲取的微操作。另一方面,微操作隊列可被提供,每個隊列對應于獲取單元中的一個,因此由獲取單元獲取的微操作在相應的隊列中被排成隊列。排成隊列的微操作然后可被發(fā)出,用于由處理電路進行處理。如果提供了微操作隊列,那么當隊列中有可用空間時,獲取單元例如可請求下一個微操作。
[0013]獲取單元可以不同方式觸發(fā)譯碼請求。在一些示例中,由指令譯碼器生成的微操作可被直接傳遞給相應的獲取單元。在這種情況下,獲取單元可生成標識了將被譯碼和獲取以用于由處理電路進行處理的選定的微操作的譯碼請求。響應于來自獲取單元的譯碼請求,指令譯碼器可生成選定的微操作并將其發(fā)送給獲取單元。
[0014]在其他示例中,獲取單元可間接觸發(fā)譯碼請求并且不必自己生成譯碼請求。例如,微操作緩存可被提供用于存儲由共享指令譯碼器生成的微操作。通常,同一微操作在同一線程或不同線程中可被多次需求,因此通過緩存由譯碼器生成的微操作能夠提升能源效率,因為這避免了譯碼器重復生成同一微操作的需求。如果提供了微操作緩存,那么獲取電路可向微操作緩存提供獲取請求,以請求從緩存獲取選定的微操作,如果選定的微操作不在緩存中,則微操作緩存可向指令譯碼器觸發(fā)譯碼請求。如果選定的微操作已經在緩存中,則不必觸發(fā)譯碼請求。由微操作緩存觸發(fā)的譯碼請求可直接傳遞給指令譯碼器,或間接通過存儲了將被譯碼的程序指令的另一電路元件(例如,更高級別緩存)。
[0015]微操作緩存每個處理周期支持的請求數(shù)量比共享指令譯碼器每個處理周期支持的譯碼請求的數(shù)量大。這意味著緩存能夠向獲取單元提供明顯指令獲取帶寬,該明顯指令獲取帶寬比共享指令譯碼器能夠支持的帶寬大。這尤其適用于當存在于單個共享指令譯碼器相對應的多個獲取單元時。在共享指令譯碼器每個處理周期能夠支持兩個或更多譯碼請求從而多個微操作能夠在同一周期中生成的實施例中,該兩個或更多譯碼請求可為對應于完全不同的程序指令的微操作,或同一程序指令的不同微操作。但是,即使在多個微操作在同一周期中生成的實施例中,每個微操作仍然可響應于分離的譯碼請求而生成。
[0016]共享指令譯碼器不但生成微操作自身,還可生成相應的指示所生成的微操作是否是相應的指令的最后一個微操作的控制標志。獲取單元可維護用于標識下一個將被獲取的微操作的程序計數(shù)器和微程序計數(shù)器,程序計數(shù)器指示對應于下一個將被獲取的微操作的程序指令,且微程序計數(shù)器指示該指令的哪個微操作是下一個將被獲取的微操作。當獲取單元接收到所獲取的微操作時,控制標志允許獲取單元確定是否遞增微程序計數(shù)器或程序計數(shù)器。如果所獲取的微操作的控制標志指示所獲取的微操作不是最后一個微操作,則遞增微程序計數(shù)器以指示同一指令的下一個微操作應當在接下來被獲取。另一方面,如果控制標志指示所獲取的微操作是最后一個微操作,則遞增程序計數(shù)器以指示下一個程序指令。當遞增程序計數(shù)器時,微程序計數(shù)器也被重置以指示將為下一個程序指令獲取的第一個微操作。通過在微操作被譯碼時采用指令譯碼器生成控制標志,獲取單元不必記錄多少個微操作對應于每個程序指令,或是否存在將為同一指令接收的任何進一步的微操作。這簡化了獲取單元的配置。
[0017]該裝置可具有存儲了先前由共享指令譯碼器譯碼的一個或多個程序指令的指令緩沖器。由于復雜程序指令的每個微操作響應于分離的請求而被個體地譯碼,因此同一程序指令可能被多個連續(xù)的處理周期所需要以使譯碼器為該指令生成所有微操作。通過在指令緩沖器中存儲一個或多個近期被譯碼的程序指令,能夠提升性能和能源效率,因為這降低了同一指令需要被多次從更高級別指令數(shù)據(jù)存儲設備(例如,指令緩存或存儲器)獲取的可能性。當接收針對指定程序指令的譯碼請求時,譯碼器可檢查該指令是否在指令緩沖器中,并且如果是,則從指令緩沖器獲取指定程序指令。如果該指定程序指令不在指令緩沖器中,那么譯碼器可從指令緩存或存儲器獲取該指定程序指令。通常,緩沖器可存儲一個或多個最近被譯碼的程序指令,但是緩沖器可替換為具有更復雜的用于確定哪個程序指令應被緩沖及哪個應被驅逐出緩沖器的驅逐方案。此外,雖然緩沖器可以存儲多于一個的指令,但在很多情況下,使用只具有單個程序指令的容量的緩沖器可獲得顯著的性能提升,且這會比更大的緩沖器在硬件中更有效的實現(xiàn)。在緩沖器只存儲一個指令且最近被譯碼的指令置于緩沖器中、然后當下一個指令被譯碼時被下一個指令覆蓋的實施例中,指令譯碼器能夠通過檢查當前譯碼請求的程序計數(shù)器是否與先前的譯碼請求的程序計數(shù)器相同,來確定所需指令是否在緩沖器中。另一方面,如果譯碼器每個周期支持多個譯碼請求,則提供能夠保存多個指令的緩存是適用的,在這種情況下,需要將程序計數(shù)器與和每個指令一同存儲在緩沖器中的地址標簽進行匹配。
[0018]處理電路可以不同方式并行處理線程。在一些情況下,處理電路可具有多個處理單元,每個處理單元能夠處理線程中的至少一個。另一方面,其他實施例可采用一組公用硬件執(zhí)行線程的時分復用,例如,當處理電路執(zhí)行線程時,每個線程具有已分配的時隙。因此,對于處理電路而言,不必在任何時候實際并行執(zhí)行多個操作——通過時分復用,線程同時處于活動狀態(tài)但一次處理一個是足夠的。
[0019]在一些情況下,對于線程中的至少一個,處理電路可并行同步執(zhí)行同一區(qū)塊的微操作的多個實例,對每個實例用不同操作數(shù)。這種方法有時被稱為同時多線程(SIMT)。該方法尤其適用于處理同一組微操作需要在多組數(shù)據(jù)值上執(zhí)行的情況,這種情況尤其常見于例如圖形處理中。為支持該方法,處理電路可具有一組用于執(zhí)行微操作的每個實例的并行算術單元,算術單元由公用控制單元采用共享程序計數(shù)器和微程序計數(shù)器來控制。在一些情況下,可存在多個并行SMT組,每個SMT組用不同操作數(shù)值并行處理給定線程