TWI479412B - 操作具有可重新組構之浮點單元的處理器之方法及系統 - Google Patents
操作具有可重新組構之浮點單元的處理器之方法及系統 Download PDFInfo
- Publication number
- TWI479412B TWI479412B TW097106014A TW97106014A TWI479412B TW I479412 B TWI479412 B TW I479412B TW 097106014 A TW097106014 A TW 097106014A TW 97106014 A TW97106014 A TW 97106014A TW I479412 B TWI479412 B TW I479412B
- Authority
- TW
- Taiwan
- Prior art keywords
- processor
- bit
- instruction
- indicator
- floating point
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 16
- 238000007664 blowing Methods 0.000 claims 1
- 238000013461 design Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000013507 mapping Methods 0.000 description 5
- 235000008694 Humulus lupulus Nutrition 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000000605 extraction Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Nonlinear Science (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Description
本發明大體上係關於處理器,且更具體地說,係關於具有可重新組構之浮點單元(reconfigurable floating point unit)的處理器。
眾所皆知的,浮點單元(floating point unit,FPU)係為特別被設計來執行浮點數字上的運算(operation)的處理器系統的一部份。典型的浮點運算包括加法、減法、乘法、除法和平方根。一些處理器系統也可執行許多非代數的(transcendental)功能,例如指數的或三角學的計算,儘管在多數的現代處理器裡,這些是以軟體常式庫來做的。在多數現代一般用途的電腦架構中,FPU包括多重執行單元。在這些架構中,浮點運算通常是獨立於整數運算而被執行且一般是管線化處理(pipeline)。FPU的執行單元可被專門化地分成較簡單的運算(例如加法和乘法)與更複雜的運算(例如除法)。在一些情況中,只有簡單的運算是用硬體來完成的,而更複雜的運算是用模擬的。
眾所皆知的,指令集定義處理器可執行的指令。指令包括算數指令(例如加法與減法)、邏輯指令(例如,AND、OR與NOT指令)、與資料指令(例如,移動、輸入、輸出、載入、與儲存指令)。指令集或指令集架構(ISA)是處理器架構有關程式設計的一部份,包括原始(native)資料型式、指令、暫存器、定址模式、記憶體架構、中斷和異常
處置、與外部輸入/輸出(I/O)。ISA包括運算碼(operational code,opcode)的集合的說明,也就是由特別的中央處理單元(CPU)架構執行的原始命令。眾所皆知的,運算碼是可指定要被執行的運算的機器語言指令的一部份。完整的機器語言指令包括運算碼與通常指定一個或多個運算元,也就是,要在上面執行運算的資料。運算碼運算的運算元可依據CPU架構而包含暫存器、記憶體裡的數值、儲存在堆疊裡的數值、I/O埠、資料匯流排等等。
眾所皆知的,有不同微架構的電腦可分享一般的指令集。舉例來說,來自不同製造商的處理器可執行幾乎相同的指令集版本,例如x86指令集,但是本質上是不同的內部設計。典型的複雜指令集電腦(complex instruction set computer,CISC)有將一個或兩個基本運算(如「加法」和「乘法」)結合到固有的指令的指令以存取記憶體、根據使用來增加暫存器、或解參考(de-reference)儲存在記憶體或暫存器的位置。精簡指令集電腦(reduced instruction-set computer,RISC)犧牲較簡單與較快指令集的執行而換得較低的碼密度(也就是執行給定的任務要更多程式記憶體空間)。RISC指令典型上只執行單一固有的運算,例如兩個暫存器的「加法」或「載入」一個記憶體位置到一個暫存器裡。
許多不同的指令集已經被使用在x86型式處理器好幾年了。舉例來說,矩陣數學延伸(matrix math extension,MMX)指令集是在1997年被引進。一般來說,雖然MMX被設
計來再利用先前CPU設計的現存浮點暫存器,但是正在執行MMX指令的CPU不能同時運作浮點與單指令多資料(single-instruction multiple-data,SIMD)型式的資料。此外,MMX指令集只被設計來運作整數。資料流SIMD延伸(streaming SIMD extension,SSE)指令集是在1999年被引進來增加MMX指令集的功能。SSE指令集加入八個參照到XMM0到XMM7的新的128位元暫存器。每個128位元暫存器可被四個32位元單精度浮點數一起塞入。在SSE指令集中,128位元暫存器在作業系統明確地啟動它們且是作業系統需要維持在那邊的任務交換的附加程式狀態之前是被預設不可用的。因為額外的支援浮點,所以SSE指令集(與SSE指令集的較新版本)比MMX指令集更廣為被使用。
SSE2指令集增加全部運作在先前與SSE一起引進的相同128位元XMM向量暫存器檔案的倍精度(64位元)浮點和8/16/32位元整數資料型式的新算數指令。SSE3指令集增加以數學指令與一些步驟(執行緒(thread))管理指令為目的的少數的數位訊號處理器(DSP)到SSE2指令集中。SSE3指令集增加16個新的運算碼(到SSE3指令集中),其包括排列位元組成為字元、乘16位元定點數字時正確捨入(rounding)且在字元累積指令之內。SSE4指令集加入點乘積(dot product)指令、額外整數指令等等。
根據本發明的多種觀點,揭露一種處理器設計,包括
浮點單元(FPU),該浮點單元(FPU)包含共用控制區域和兩個實質相同的64位元資料路徑,也就是,被使用來執行128位元指令集的浮點指令的上端資料路徑(top data path)和下端資料路徑(bottom data path)。經由例如模式位元(mode bit)的指示器(indicator)來組構控制區域,以執行設定在包含上端和下端資料路徑的128位元資料路徑上或是在下端資料路徑上的128位元指令集。處理器設計適用於具有三個不同組構的處理器晶片,也就是,具有用於最大效能之128位元FPU的處理器晶片、具有用於減低電力消耗之64位元FPU的處理器晶片、或具有用於較低的電力消耗之可動態下放(down-bin)成64位元FPU的128位元FPU的處理器晶片。在可下放的處理器晶片中,下放可依據電力需求而在啟動(boot-up)時或在運作(run-time)時被完成。
處理器設計使用在不同組構間共用的共用控制區域(邏輯)是有益的,該共用控制區域(邏輯)例如為一個或多個前端解碼器、浮點(FP)重命名單元、FP排程單元、FP異常和管線控制單元、和FP收回(retire)單元。在任何情況中,前端解碼器係組構成依照模式位元來分解(crack)128位元指令成為單一128位元原始運算或是兩個64位元運算。許多指令集的單指令多資料(SIMD)性質允許上端資料路徑為下端資料路徑的複製品(duplicate)。如上所提及的,上端和下端資料路徑兩者都有共用控制區域(介面),其允許相同區塊被使用在64位元資料路徑和128位元資料
路徑。對於128位元資料路徑,原始運算被重映射(remap)到兩個64位元半運算(half operation,hop),也就是,被分別提供到上端和下端資料路徑的高半運算(hi hop)和低半運算(lo hop)。對於64位元資料路徑,原始運算被直接轉變成一個64位元半運算(也就是,低半運算(lo hop))。
對於運作在128位元資料上的非SIMD(non-SIMD)指令,旁路(bypass)單元被實行以在上端和下端資料路徑間混洗(shuffle)資料,以至於128位元混洗、填塞(pack)、和取出(unpack)指令可被適當地執行。旁路單元被組構來在相同資料路徑中的資料路徑區塊間(例如在下端FP加法器和下端FP乘法器間)轉送(forward)資料,以及從在上端和下端資料路徑中任一者的暫存器檔案中讀取資料。在此使用的用詞「耦接(coupled)」包括以一個或多個插置(intervening)元件(或單元)來實現的在元件(或單元)間的直接電性連接及在元件(或單元)間的非直接電性連接。
根據本發明的一個觀點,一種運作處理器的方法包括決定處理器的浮點單元(FPU)是要運作在全位元模式(full-bit mode)或是在減少的位元模式(reduced-bit mode)。當指示為全位元模式時,提取的指令被解碼成單一運算,或當指示為減少的位元模式時,提取的指令被解碼成多重運算。舉例來說,全位元模式可為128位元模式,而減少的位元模式可為64位元模式。另一個例子,全位元模式可為256位元模式,而減少的位元模式可為32位元模式。又另一個例子,全位元模式可為128位元模式,而減
少的位元模式可為32位元模式。
根據本發明的另一個觀點,一種處理器包括指示器、解碼器和浮點單元(FPU)。解碼器被耦接到指示器,且係組構成依據指示器來解碼指令成為單一運算或多重運算。FPU被耦接到解碼器,且係組構成依據指示器來開始在一個處理器週期中執行單一運算或在一個或多個處理器週期中執行多重運算。
又根據本揭露的另一個觀點,一種系統包括指示器、處理器、和被耦接到處理器的記憶體子系統。處理器包括解碼器和浮點單元(FPU)。解碼器被耦接到指示器,且係組構成依據指示器來解碼指令成為單一運算或多重運算。FPU被耦接到解碼器,且係組構成依據指示器來開始在一個處理器週期中執行單一運算或在一個或多個處理器週期中執行多重運算。
參照第1圖,顯示包括可重新組構之浮點單元(FPU)的處理器100的相關部分。處理器100包括當作指令快取使用的快取記憶體(快取)102。在一個或多個實施例中,快取102包含一階(L1)變換後備緩衝區(translation look-aside buffer,TLB)、二階(L2)TLB、預解碼(pre-decode)快取和分支預測表。快取102被耦接到匯流排介面單元(BIU)138與L2快取控制器136。被耦接到快取102和指令解碼器106的提取/解碼控制單元104接收到來自可對應於暫存器、熔絲(fuse)等等的指示器110的結構信號(FP128
信號)。FP128信號的邏輯階級決定處理器100運作在128位元模式或64位元模式。雖然在此的討論主要針對處理器是運作在128位元模式或64位元模式,但是可預期的是,本揭露技術同樣可應用到不同的模式,例如256位元模式和128位元模式。提取/解碼控制單元104控制提取來自快取102的指令與控制被指令解碼器106解碼的指令。被解碼的指令從指令解碼器106提供到指令控制單元(ICU)108,其除了別的功能外尚決定被解碼的指令(運算)應該被發送到無順序執行單元112的整數單元111或浮點單元(FPU)113。
整數單元111包括被耦接到執行整數運算的複數個整數執行單元(IEU)116與耦接到為整數運算產生位址的複數個位址產生單元(AGU)118的整數排程器114。IEU 116和AGU 118也被耦接到被耦接到快取134的載入/儲存(load/store,LS)單元132。快取134作用如同資料快取並可執行L1 TLB和L2 TLB。快取134被耦接到BIU 138和L2快取控制器136。FPU 113包括FPU堆疊映射/重命名單元120、FPU排程器122和FPU暫存器檔案124。FPU暫存器檔案124被耦接到三個邏輯管(pipe),也就是,儲存控制(STC)管126、浮點加法(FADD)管128和浮點乘法(FMUL)管130,其中每一個都可以包括有多重級(slage)的一個或多個執行單元。三個邏輯管也被耦接到LS單元132。
參照到第2圖,將進一步描述第1圖的處理器100的浮點單元(FPU)相關部分。如上所提到的,提取/解碼控制單元104(第1
圖)導致一個或多個指令(例如SSE指令)的快取線被從快取102提取出來並被指令解碼器106解碼。在典型的架構中,每個快取列包括多重指令。在一個實施例中,指令解碼器106被組構成每次解碼三個指令。然而可以預期的是,本揭露技術同樣可應用到每次解碼比三個指令多或少的處理器。雖然在此的討論主要針對SSE指令,但是可預期的是,本揭露技術可廣泛地應用到執行例如SSE2、SSE3、SSSE3、SSE4、MMX、3DNOW!TM
等等的任何指令集架構(ISA)。由解碼器106所提供的被解碼的指令(運算)被儲存在位在例如指令控制單元(ICU)108裡的指令佇列208裡。如上所提到的,指示器110指出提取/解碼控制單元104如何組構指令解碼器106來解碼從快取102中提取的指令。
在揭露之實施例中,指示器110提供指出FPU 113如何被組構以及指令從而如何被處理的邏輯信號(FP128信號)。FP128信號被分配到許多不同的邏輯方塊以控制FPU 113如何運算。舉例來說,當FP128信號確立(assert)指示為全位元模式且FPU 113被組構來包括上端和下端兩者資料路徑250和270時,就其本身而論,FPU 113被組構來執行128位元指令的128位元運算。在此情況中,每個128位元指令被解碼成為一個運算。當FP128信號不被確立時則指出為減少的位元模式,且FPU只使用下端資料路徑270,而不管上端和下端資料路徑250和270兩者是否被包括在處理器100裡。當FP128信號未被確立時,則FPU
113被組構來執行64位元運算,且就其本身而論,指令解碼器106分解每個128位元指令成為兩個64位元運算。掃描對準器/微碼引擎(scan aligner/microcode engine,SA/ME)202包括SA 204和ME 206且可舉例來說被包括在ICU 108裡。SA 204被組構從指令佇列(queue)208中拉出指令,如處理器100的運作過程中所需要的。舉例來說,SA 204可從指令佇列208中每次拉出三個指令。應該瞭解的是,在此揭露的技術可廣泛地應用到能夠在每個處理器週期從指令佇列中拉出多於或少於三個指令的處理器中。
如圖所示的,SA 204被組構對每個處理器週期拉出和發送三個快速路徑(fastpath)(也就是非微碼的)指令。在圖示的實施例中,指令為ADDPD、MULPD、和MOVAPD,其分別代表填塞兩次(packed-double)的加法指令、填塞兩次的乘法指令、和填塞兩次的移動指令。假設FP128信號被確立(也就是FPU 113是在128位元模式中),則SA 204的上面多工器205上標示‘1’的輸入被提供在上面多工器205的相關輸出上。在128位元模式中,每次三個128位元指令被發送。另一方面,如果FP128信號沒有被確立(也就是,FPU 113是在64位元模式中),則SA 204的每個上面多工器205上標示‘0’的輸入被提供在上面多工器205的相關輸出上。在此情況中,當128位元指令被分解成為兩個64位元運算時,ADDPD指令的兩個運算(也就是ADDLO和ADDHI)分別被設置在槽0和1。此外,MULPD指令的第一個運算(MULLO)被設置在槽2。
因此,在64位元模式中,對每個處理器週期發送一與二分之一(1.5)個128位元指令。在下一個處理器週期中,MULPD指令的第二個運算(MULHI)被設置在槽0且MOVAPD指令的兩個運算(MOVALO和MOVAHI)分別被設置在槽1和槽2。因此,在64位元模式例子中,ADDLO、ADDHI和MULLO在第一個處理器週期中被發送。MULHI、MOVALO和MOVAHI在接下來的第二個處理器週期中被發送。應該要注意的是,第2圖的多工器205的結構可應用在64位元模式中的第一個處理器週期。簡而言之,在128位元模式中,三個128位元快速路徑指令(例如三個x86 SSE指令)可在每個週期中被發送。同樣地,在64位元模式中,一與二分之一個128位元快速路徑指令(例如1.5個128位元x86 SSE指令)可在每個處理器週期中被發送。
如圖所示的,可包括合適大小唯讀記憶體(ROM)的微碼引擎(ME)206提供用於非快速路徑指令的微碼。ME 206可包括128位元微碼、64位元微碼或分享的微碼(也就是被分享在128位元和64位元指令間的微碼)。指令解碼器106決定指令是快速路徑指令還是需要微碼的指令。當指出是微碼指令時,ME 206提供運算到被包含在SA 204內的三個下面多工器207的輸入。快速路徑信號被從指令解碼器106提供到三個下面多工器207的選擇線。所有三個下面多工器207指向相同的途徑且提供不是快速路徑就是微碼運算。舉例來說,假設來自指令佇列208的下一個指令是複雜指令(例如浮點正弦(FSIN)指令),則在相應到微碼指
令的所有運算已經從ME 206中被拉出之前,沒有其他指令從指令佇列208中被拉出。
在微碼指令的偵測之後,產生指向微碼裡的項目以相應到微碼指令。然後一個或多個運算線被讀出ME 206,直到相應到微碼指令的所有運算都已經被讀到為止。舉例來說,ME 206每個線可包括三個運算。在至少一個實施例中,在相同處理器週期中,快速路徑指令不能被發送成為微碼指令。在此情況,來自SA/ME 202的槽裡的磁泡(bubbles)可能會發生。應該瞭解的是,設計者可藉著執行邏輯以預測微碼的使用與相應到複雜指令的運算數量來減低或消除磁泡。一般說來,微碼指令有多於兩個的關聯運算。在典型的情況,只有兩個運算的指令可如同快速路徑兩倍指令(fastpath double instruction)被執行。在相應到微碼指令的微碼序列的尾端之後,然後下一個指令可從指令佇列208中被拉出。在此時應該瞭解的是,依據可用的資源,運算不被發送。
依照處理器架構,資源可以是槽特有的。舉例來說,整數單元可有只可用在某些槽裡的專用資源。舉例來說,整數單元可包括只出現在槽0上的整數乘法器。在此情況中,微碼編程器(programmer)將須確保整數相乘運算沒被放在槽1或2中。此外,當分享的資源只存在整數部分上時,微碼編程器將須確保資源在需要資源的運算的分配槽裡是可用的。一般說來,不分享整數部分資源的浮點運算可到任何槽。應該瞭解的是,一旦運算到達排程器,運算
可依據可用的資源來被重新安排及無順序地執行。
在一個實施例中,SA/ME 202提供的運算係為x86運算。在SA/ME 202的槽0、1和2上的運算被提供到可被包含在FPU堆疊映射/重命名單元120裡的浮點重命名1(FPRN1)單元212的槽0、1和2。FPRN1單元212除了其他功能之外自分配每個運算到適合的管(例如,管0、管1和管2)。FPRN1單元212包括在每個槽0、1和2上的128位元解碼器214和64位元解碼器216。解碼器214解碼x86運算成為用於128位元運算的執行運算(exop_0、exop_1和exop_2)。同樣地,解碼器216解碼x86運算成為用於64位元運算的執行運算。執行運算有它們自己的壓縮運算碼(運算的碼)空間、暫存器空間、位址空間等等,且可例如為12位元執行運算。FP 128信號依據FPU 113的結構來指出解碼器214和216的哪一個是被選擇的。
如果確立FP128信號,則多工器218選擇解碼器214。如果沒確立FP128信號,則多工器218選擇解碼器216。圖示的執行運算的助記碼(mnemonics)為分別對應到圖示的x86運算ADDPD、MULPD和MOVAPD的FPKADDPD、FPKMULPD和FPKMOVPD。執行運算從FPRN1單元212到浮點重命名2(FPRN2)單元220被提供在每個槽上。FPRN1單元212和FPRN2單元220兩者都可在FPU堆疊映射/重命名單元120中被執行。在FPRN2單元220中,執行運算從邏輯重命名(LRN)空間被映射到實體重命名(PRN)空間。在一個實施例中,FPRN2單元220包括有48項目(0至47)的暫存器檔案。
在此實施例中,在128位元模式中只使用上面32(0至31)項目而在64位元模式中使用所有48個項目。在128位元模式中,每個SSE暫存器只有一個項目(從16到31)。在64位元模式中,每個SSE暫存器有兩個項目(從16至47),如同該等暫存器被看作一半的暫存器。在64位元模式中,所有暫存器指定(disignations)具有低(例如xmm0.lo)指定和高(例如xmm0.hi)指定。低指定對應到項目16至31而高指定對應到項目32至47。
FPRN2單元220連通到可被包括在FPU堆疊映射/重命名單元120裡的浮點收回佇列(FPRQ)單元240,以歸還舊的暫存器到空閒暫存器列表(free register list)並從空閒暫存器列表中接受新的暫存器。FPRQ單元240依據處理器的模式有不是128位元就是64位元槽。舉例來說,如果處理器是在128位元模式中,則3個指令將佔領3個槽。另一方面,如果處理器是在64位元模式,則1.5個指令(例如ADDLO、ADDHI和MULLO)將佔領FPRQ單元240的3個槽。FPRN2單元220的輸出被提供到被組構來例如包括36個項目的浮點單元排程器(FPSC)230。FPSC 230被組構來依據資源可用度以選擇運算。
運算依據相依性(dependency)可被無順序地發給適當的管(也就是在揭露的例子裡的管0、管1或管2)。在揭露的實施例中,三個獨立的運算選擇器(operation picker)(對於每個管有一個運算選擇器)被使用在FPSC 230裡。每個選擇器檢查FPSC 230裡的項目來定位可被發給到關聯的
管的運算。被分配到每個執行運算的管是帶有關聯執行運算地被寫入到FPSC 230裡的一部份資訊。在一個實施例中,如果選擇器找到超過一個的準備好要執行的執行運算,則選擇器選擇最舊的執行運算。FPSC 230可藉由放置最新的運算在佇列的最上端及放置最舊的運算在佇列的最底端以維持期齡順序。被選擇到的運算是被提供到浮點異常管線控制(floating point exception pipeline control,FPEPC)單元242。FPSC 230和FPEPC單元242可被包含在FPU排程器122裡面。
如圖所示的,資料位址從FPSC 230被提供到浮點暫存器檔案124,浮點暫存器檔案124可包括在上端資料路徑250裡的浮點暫存器檔案高(floating point register file high,FPRFHI)252與在下端資料路徑270裡的浮點暫存器檔案低(floating point register file low,FPRFLO)272。依照實施例,可不用提供上端資料路徑250或是提供了而可不被使用到。資料路徑250和270每個都包含浮點暫存器檔案(分別是FPRFHI 252和FPRFLO 272),分享浮點旁路(FPBYP)單元254,包含第一管(包含浮點加(FPA)單元和MMX ALU(MMA)單元),包含第二管(包含浮點乘(FPM)單元、MMX乘法器(MMM)單元和MMX整數乘法器(IMM)單元)與包含第三管(包含儲存控制(STC)單元)。應該要瞭解的是,不同或額外的單元可被提供在管裡。在圖示的實施例中,五個讀取位址(對應到五個資料來源,也就是,兩個是FPA/MMA單元的、兩個是FPM/MMM/IMM單元的與一個
是STC單元的)被提供到可包含FPRFHI 252和FPRFLO 272的浮點暫存器檔案(FPRF)。
FPEPC單元242接收對於每個槽(也就是槽0、1和2)的每個執行運算的N位元(例如12位元)運算碼(與額外控制資訊)。FPEPC單元242包含解碼器(FP128HI)244、解碼器(FP128LO)246與對於每個槽(也就是槽0、1和2)的多工器248。對於128位元指令的執行運算可被分開成為兩個半運算(hop)。在此情況中,執行運算具有關聯的高半運算(hi hop)和低半運算(lo hop)。典型上來說,hi hop與lo hop完全相同。然而,某些執行運算的hi hop與lo hop並不完全相同。當hi hop與lo hop不完全相同時,解碼器244和246運行以分別提供hi hop與lo hop。假設處理器100被組構在64位元模式中,多工器248選擇通過式(feed-through)路徑(也就是,不使用解碼器244和246)。在此情況中,執行運算不被改變地通過且運算被提供到下端資料路徑270,也就是執行的FPALO/MMALO單元276(管0)、FPMLO/MMMLO/IMMLO單元278(管1)與STCLO單元280(管2)。
當處理器100被組構在128位元模式中時,多工器248選擇解碼器246且解碼器244和246被使用在所有的槽上。在此情況中,低半運算(lo hop)被提供到下端資料路徑270,也就是FPALO/MMALO單元276(管0)、FPMLO/MMMLO/IMMLO單元278(管1)與STCLO單元280(管2),而高半運算(hi hop)被提供到上端資料路徑250,也就是執行的
FPAHI/MMAHI單元256(管0)、FPMHI/MMMHI/IMMHI單元258(管1)與STCHI單元260(管2)。
來自可被執行在STC126裡面的STC單元260和280的資料被提供到LS單元132。當FPU暫存器檔案124包含FPRFHI 252和FPRFLO 272時,在LS單元132裡的載入資料經由轉換器262、264、282和284被提供到FPU暫存器檔案124。轉換器262、264、282和284被提供來將載入資料從64位元資料轉換成為例如90位元資料。來自上端資料路徑250裡的管0和管1的適當單元的結果資料分別被多工器266和268來選擇。同樣地,來自下端資料路徑270裡的管0和管1的適當單元的結果資料分別被多工器286和288來選擇。
移動到第3圖,電腦系統300被圖示為包含可包括根據第1、2圖所示的處理器而組構的一個或多個處理器的處理器302。處理器302被耦接到包含應用適當數量的依電性記憶體和非依電性記憶體的記憶體子系統304。處理器也被耦接到例如滑鼠、鍵盤等等的輸入裝置306以及例如液晶顯示器(LCD)的顯示器308。
轉到第4圖,顯示用來決定指令如何被解碼的解碼常式(routine)400。在方塊402常式400被起始,其指向控制轉移到於方塊404,方塊404提取一個或多個指令。接著,在決定方塊406裡決定例如暫存器之指示器是否被確立。如果指示器被確立將控制從方塊406轉移到方塊408,則被提取的指令將當作單一運算來被解碼。在方塊408之
後,控制轉移到常式400結束的方塊412。當在方塊406裡指示器沒有確立時,控制轉移到方塊410,於此被提取的指令將被解碼為多重運算。在方塊410之後,控制轉移到方塊412。
因此,在此已經揭露的技術允許被提取的指令被解碼成為單一運算或多重運算。舉例來說,128位元指令可依據指示器被解碼成為單一128位元運算或兩個64位元運算。
本發明的其他實施例、使用和優點對於熟悉此項技術者在思考過說明書與實行在此揭露的本發明後是顯而易見的。說明書與圖式應該了解為只是示範性質,本發明的範圍將只限制在下列的申請專利範圍與其均等物中。
100‧‧‧處理器
102‧‧‧快取(快取記憶體)
104‧‧‧提取/解碼控制單元
106‧‧‧指令解碼器
108‧‧‧指令控制單元(ICU)
110‧‧‧指示器
111‧‧‧整數單元
112‧‧‧無順序執行單元
113‧‧‧浮點單元(FPU)
114‧‧‧整數排程器
116‧‧‧整數執行單元(IEU)
118‧‧‧位址產生單元(AGU)
120‧‧‧FPU堆疊映射/重命名單元
122‧‧‧FPU排程器
124‧‧‧FPU暫存器檔案
126‧‧‧儲存控制(STC)管
128‧‧‧浮點加法(FADD)管
130‧‧‧浮點乘法(FMUL)管
132‧‧‧載入/儲存(LS)單元
134‧‧‧快取
136‧‧‧L2快取控制器
138‧‧‧匯流排介面單元(BIU)
202‧‧‧掃描對準器/微碼引擎(SA/ME)
204‧‧‧掃描對準器(SA)
205‧‧‧上面多工器
206‧‧‧微碼引擎(ME)
207‧‧‧下面多工器
208‧‧‧指令佇列
212‧‧‧浮點重命名1(FPRN1)單元
214‧‧‧128位元解碼器
216‧‧‧64位元解碼器
218‧‧‧多工器
220‧‧‧浮點重命名2(FPRN2)單元
230‧‧‧浮點單元排程器(FPSC)
240‧‧‧浮點收回佇列(FPRQ)單元
242‧‧‧浮點異常管線控制(FPEPC)單元
244‧‧‧解碼器(FP128HI)
246‧‧‧解碼器(FP128LO)
248‧‧‧多工器
250‧‧‧上端資料路徑
252‧‧‧浮點暫存器檔案高(FPRFHI)
254‧‧‧分享浮點旁路(FPBYP)單元
256‧‧‧FPAHI/MMAHI單元
258‧‧‧FPMHI/MMMHI/IMMHI單元
260‧‧‧STCHI單元
262、264、282、284‧‧‧轉換器
266、268‧‧‧多工器
270‧‧‧下端資料路徑
272‧‧‧浮點暫存器檔案低(FPRFLO)
276‧‧‧FPALO/MMALO單元
278‧‧‧FPMLO/MMMLO/IMMLO單元
280‧‧‧STCLO單元
286、288‧‧‧多工器
300‧‧‧電腦系統
302‧‧‧處理器
304‧‧‧記憶體子系統
306‧‧‧輸入裝置
308‧‧‧顯示器
400‧‧‧解碼常式
402、404、406、408、410、412‧‧‧方塊
藉由參照隨附的圖式,可更佳地瞭解本發明且其許多特性和優點對於那些熟悉此項技術者是明白的。
第1圖為根據本發明的實施例而組構的處理器的相關部分的電性方塊圖。
第2圖為第1圖處理器的浮點單元(FPU)的相關部分的電性方塊圖。
第3圖為包含根據第2圖而組構的處理器的電腦系統的相關部分的電性方塊圖。
第4圖為用於依據指示器來解碼指令的方法的流程圖。
在不同圖式裡使用相同元件符號代表相似或相同的項
目。
400‧‧‧解碼常式
402、404、406、408、410、412‧‧‧方塊
Claims (19)
- 一種用以操作處理器之方法,包括:根據設置在處理器之指示器,決定該處理器的浮點單元(FPU)是要運作在全位元模式或減少的位元模式;提取指令;以及依據該決定,解碼該指令成為單一運算或多重運算。
- 如申請專利範圍第1項之方法,復包括:設定或清除該指示器以選擇該全位元模式。
- 如申請專利範圍第1項之方法,其中,該指示器係由暫存器或熔絲提供。
- 如申請專利範圍第3項之方法,復包括:燒斷該熔絲以選擇該全位元模式或該減少的位元模式。
- 如申請專利範圍第1項之方法,復包括:設定或清除該指示器以選擇該減少的位元模式。
- 如申請專利範圍第1項之方法,其中,該指令係128位元指令,該全位元模式係128位元模式,且該減少的位元模式係64位元模式,以及該決定步驟復包括:決定該處理器是要運作在該128位元模式或該64位元模式。
- 如申請專利範圍第6項之方法,其中,該解碼步驟復包括:依據該決定將該128位元指令解碼成為用於該128 位元模式的一個運算或用於該64位元模式的兩個運算。
- 如申請專利範圍第1項之方法,其中,該單一運算對應於一個128位元運算,而該多重運算對應於兩個64位元運算。
- 一種處理器,包括:指示器;解碼器,係耦接到該指示器,其中,該解碼器組構成依據該指示器來解碼指令成為單一運算或多重運算;以及浮點單元(FPU),係耦接到該解碼器,其中,該浮點單元(FPU)組構成依據該指示器來開始在一個處理器週期中執行該單一運算或在一個或多個處理器週期中執行該多重運算。
- 如申請專利範圍第9項之處理器,其中,該指令係128位元指令,且該解碼器係組構成依據該指示器來解碼該128位元指令成為對應於128位元運算的該單一運算或對應於兩個64位元運算的該多重運算。
- 如申請專利範圍第10項之處理器,其中,該指示器係暫存器或熔絲。
- 如申請專利範圍第9項之處理器,其中,該多重運算包含兩個運算,且該浮點單元(FPU)復包括:下端資料路徑,其中,該下端資料路徑係組構成開始在一個或多個處理器週期中執行該兩個運算兩者。
- 如申請專利範圍第9項之處理器,其中,該浮點單元(FPU)復包括:上端資料路徑,組構成執行該單一運算的第一半;以及下端資料路徑,組構成執行該單一運算的第二半。
- 如申請專利範圍第13項之處理器,復包括:共用控制區域,係耦接到該上端資料路徑和該下端資料路徑。
- 一種用以操作處理器之系統,包括:指示器;處理器,耦接到該指示器,該處理器包括:解碼器,耦接到該指示器,其中,該解碼器係組構成依據該指示器來解碼指令成為單一運算或多重運算;以及浮點單元(FPU),耦接到該解碼器,其中,該浮點單元(FPU)係組構成依據該指示器來開始在一個處理器週期中執行該單一運算或在一個或多個處理器週期中執行該多重運算;以及記憶體子系統,耦接到該處理器。
- 如申請專利範圍第15項之系統,其中,該浮點單元(FPU)復包括:第一資料路徑,包含至少一個第一執行單元,其中,該第一資料路徑係組構成執行與該單一運算有關聯的低半運算(lo hop)或與該指令有關聯的所有的該多 重運算。
- 如申請專利範圍第16項之系統,復包括:第二資料路徑,包含至少一個第二執行單元,其中,該第二資料路徑係組構成執行與該單一運算有關聯的高半運算(hi hop)。
- 如申請專利範圍第17項之系統,復包括:共用控制區域,耦接到且組構成控制該第一和第二資料路徑兩者的運算。
- 如申請專利範圍第15項之系統,其中,該指示器係暫存器或熔絲。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/680,331 US7565513B2 (en) | 2007-02-28 | 2007-02-28 | Processor with power saving reconfigurable floating point unit decoding an instruction to single full bit operation or multiple reduced bit operations |
Publications (2)
Publication Number | Publication Date |
---|---|
TW200842701A TW200842701A (en) | 2008-11-01 |
TWI479412B true TWI479412B (zh) | 2015-04-01 |
Family
ID=39431246
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW097106014A TWI479412B (zh) | 2007-02-28 | 2008-02-21 | 操作具有可重新組構之浮點單元的處理器之方法及系統 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7565513B2 (zh) |
EP (2) | EP2487581B1 (zh) |
KR (1) | KR101473906B1 (zh) |
CN (1) | CN101802779B (zh) |
TW (1) | TWI479412B (zh) |
WO (1) | WO2008106184A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8185495B2 (en) * | 2008-02-01 | 2012-05-22 | Microsoft Corporation | Representation of qualitative object changes in a knowledge based framework for a multi-master synchronization environment |
US20090248919A1 (en) * | 2008-03-25 | 2009-10-01 | Jerzy Szwagrzyk | Method for external fifo acceleration |
US8386807B2 (en) * | 2008-09-30 | 2013-02-26 | Intel Corporation | Power management for processing unit |
KR101687995B1 (ko) | 2010-09-27 | 2016-12-20 | 삼성전자주식회사 | 프로세서 및 그 동작 방법 |
US9176738B2 (en) * | 2011-01-12 | 2015-11-03 | Advanced Micro Devices, Inc. | Method and apparatus for fast decoding and enhancing execution speed of an instruction |
US9128697B1 (en) * | 2011-07-18 | 2015-09-08 | Apple Inc. | Computer numerical storage format with precision type indicator |
CN104137058B (zh) * | 2011-12-23 | 2017-03-22 | 英特尔公司 | 用于十进制浮点数据逻辑提取的方法和装置 |
US10754983B2 (en) * | 2017-03-31 | 2020-08-25 | Interset Software Inc. | Anonymization of sensitive data for use in user interfaces |
US10338919B2 (en) * | 2017-05-08 | 2019-07-02 | Nvidia Corporation | Generalized acceleration of matrix multiply accumulate operations |
DE102018110607A1 (de) | 2017-05-08 | 2018-11-08 | Nvidia Corporation | Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen |
US11544065B2 (en) | 2019-09-27 | 2023-01-03 | Advanced Micro Devices, Inc. | Bit width reconfiguration using a shadow-latch configured register file |
US11599359B2 (en) | 2020-05-18 | 2023-03-07 | Advanced Micro Devices, Inc. | Methods and systems for utilizing a master-shadow physical register file based on verified activation |
US20220365783A1 (en) * | 2021-05-13 | 2022-11-17 | Nvidia Corporation | Matrix multiplication and accumulation operations on compressed matrices |
KR20230090254A (ko) | 2021-12-14 | 2023-06-21 | 서울대학교산학협력단 | 부동 소수점 연산 방법 및 장치 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5631859A (en) * | 1994-10-27 | 1997-05-20 | Hewlett-Packard Company | Floating point arithmetic unit having logic for quad precision arithmetic |
US5889679A (en) * | 1997-07-15 | 1999-03-30 | Integrated Device Technology, Inc. | Fuse array control for smart function enable |
TW200508967A (en) * | 2003-06-12 | 2005-03-01 | Advanced Micro Devices Inc | Method and data processor with reduced stalling due to operand dependencies |
TW200635015A (en) * | 2004-12-17 | 2006-10-01 | Ibm | Changing chip function based on fuse states |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5590365A (en) | 1990-03-30 | 1996-12-31 | Kabushiki Kaisha Toshiba | Pipeline information processing circuit for floating point operations |
US5574928A (en) * | 1993-10-29 | 1996-11-12 | Advanced Micro Devices, Inc. | Mixed integer/floating point processor core for a superscalar microprocessor with a plurality of operand buses for transferring operand segments |
US6230257B1 (en) * | 1998-03-31 | 2001-05-08 | Intel Corporation | Method and apparatus for staggering execution of a single packed data instruction using the same circuit |
US6308252B1 (en) * | 1999-02-04 | 2001-10-23 | Kabushiki Kaisha Toshiba | Processor method and apparatus for performing single operand operation and multiple parallel operand operation |
US6732259B1 (en) | 1999-07-30 | 2004-05-04 | Mips Technologies, Inc. | Processor having a conditional branch extension of an instruction set architecture |
US6857061B1 (en) | 2000-04-07 | 2005-02-15 | Nintendo Co., Ltd. | Method and apparatus for obtaining a scalar value directly from a vector register |
US7346763B2 (en) * | 2004-06-02 | 2008-03-18 | Broadcom Corporation | Processor instruction with repeated execution code |
-
2007
- 2007-02-28 US US11/680,331 patent/US7565513B2/en active Active
-
2008
- 2008-02-21 TW TW097106014A patent/TWI479412B/zh active
- 2008-02-28 CN CN200880012791.2A patent/CN101802779B/zh active Active
- 2008-02-28 KR KR1020097019832A patent/KR101473906B1/ko active IP Right Grant
- 2008-02-28 WO PCT/US2008/002619 patent/WO2008106184A1/en active Application Filing
- 2008-02-28 EP EP12167383.4A patent/EP2487581B1/en active Active
- 2008-02-28 EP EP08726196A patent/EP2118741B1/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5631859A (en) * | 1994-10-27 | 1997-05-20 | Hewlett-Packard Company | Floating point arithmetic unit having logic for quad precision arithmetic |
US5889679A (en) * | 1997-07-15 | 1999-03-30 | Integrated Device Technology, Inc. | Fuse array control for smart function enable |
TW200508967A (en) * | 2003-06-12 | 2005-03-01 | Advanced Micro Devices Inc | Method and data processor with reduced stalling due to operand dependencies |
TW200635015A (en) * | 2004-12-17 | 2006-10-01 | Ibm | Changing chip function based on fuse states |
Non-Patent Citations (1)
Title |
---|
Ahmet Akkas, "A Quadruple Precision and Dual Double Precision Floating-Point Multiplier", Proceedings of the Euromicro Symposium on Digital System Design, 1-6 September, 2003, pages 76-81 * |
Also Published As
Publication number | Publication date |
---|---|
US20080209184A1 (en) | 2008-08-28 |
EP2487581B1 (en) | 2013-07-24 |
CN101802779A (zh) | 2010-08-11 |
EP2118741A1 (en) | 2009-11-18 |
EP2118741B1 (en) | 2012-05-30 |
KR101473906B1 (ko) | 2014-12-17 |
KR20090118985A (ko) | 2009-11-18 |
TW200842701A (en) | 2008-11-01 |
WO2008106184A1 (en) | 2008-09-04 |
EP2487581A1 (en) | 2012-08-15 |
US7565513B2 (en) | 2009-07-21 |
CN101802779B (zh) | 2014-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI479412B (zh) | 操作具有可重新組構之浮點單元的處理器之方法及系統 | |
US5996057A (en) | Data processing system and method of permutation with replication within a vector register file | |
US6334176B1 (en) | Method and apparatus for generating an alignment control vector | |
US6801924B1 (en) | Formatting denormal numbers for processing in a pipelined floating point unit | |
EP2524303B1 (en) | Mapping between registers used by multiple instruction sets | |
US8069340B2 (en) | Microprocessor with microarchitecture for efficiently executing read/modify/write memory operand instructions | |
US5815420A (en) | Microprocessor arithmetic logic unit using multiple number representations | |
EP1261914A1 (en) | Processing architecture having an array bounds check capability | |
US20080209185A1 (en) | Processor with reconfigurable floating point unit | |
US11237833B2 (en) | Multiply-accumulate instruction processing method and apparatus | |
US20200326940A1 (en) | Data loading and storage instruction processing method and device | |
WO2012061416A1 (en) | Methods and apparatus for a read, merge, and write register file | |
US20110047355A1 (en) | Offset Based Register Address Indexing | |
US20100125719A1 (en) | Instruction Target History Based Register Address Indexing | |
US6609191B1 (en) | Method and apparatus for speculative microinstruction pairing | |
KR20230129559A (ko) | 가변길이 명령어들을 사용하는 병렬 디코드 명령어 세트 컴퓨터 아키텍처 | |
CN111813447B (zh) | 一种数据拼接指令的处理方法和处理装置 | |
JPH09212362A (ja) | マイクロプロセッサ | |
US11960897B2 (en) | Apparatus and methods employing a shared read post register file | |
US11544065B2 (en) | Bit width reconfiguration using a shadow-latch configured register file | |
US20220413855A1 (en) | Cache support for indirect loads and indirect stores in graph applications | |
JP2001142694A (ja) | データフィールドのエンコード方法、情報フィールドの拡張方法、及び、コンピュータシステム | |
CN115525337A (zh) | 用于向量紧缩有符号/无符号移位、舍入和饱和的装置和方法 | |
CN116339826A (zh) | 用于四字特定部分的向量紧缩串接和移位的装置和方法 | |
US20120173854A1 (en) | Processor having increased effective physical file size via register mapping |