TWI638312B - 暫時分路融合乘積-累加運算 - Google Patents
暫時分路融合乘積-累加運算 Download PDFInfo
- Publication number
- TWI638312B TWI638312B TW104121546A TW104121546A TWI638312B TW I638312 B TWI638312 B TW I638312B TW 104121546 A TW104121546 A TW 104121546A TW 104121546 A TW104121546 A TW 104121546A TW I638312 B TWI638312 B TW I638312B
- Authority
- TW
- Taiwan
- Prior art keywords
- product
- accumulation
- result
- accumulator
- operations
- Prior art date
Links
- 238000009825 accumulation Methods 0.000 claims abstract description 116
- 230000004927 fusion Effects 0.000 claims abstract description 24
- 238000004364 calculation method Methods 0.000 claims abstract description 17
- 238000000034 method Methods 0.000 claims description 78
- 238000003860 storage Methods 0.000 claims description 72
- 239000013598 vector Substances 0.000 claims description 71
- 239000000872 buffer Substances 0.000 claims description 13
- 230000008707 rearrangement Effects 0.000 claims description 9
- 241001442055 Vipera berus Species 0.000 description 128
- 239000000047 product Substances 0.000 description 112
- 238000013461 design Methods 0.000 description 31
- 230000006870 function Effects 0.000 description 26
- 238000010586 diagram Methods 0.000 description 25
- 230000000295 complement effect Effects 0.000 description 18
- 230000008030 elimination Effects 0.000 description 18
- 238000003379 elimination reaction Methods 0.000 description 18
- 238000002347 injection Methods 0.000 description 18
- 239000007924 injection Substances 0.000 description 18
- 238000012546 transfer Methods 0.000 description 16
- 238000010606 normalization Methods 0.000 description 14
- 230000008901 benefit Effects 0.000 description 10
- 238000012937 correction Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 10
- 230000001186 cumulative effect Effects 0.000 description 9
- 238000004458 analytical method Methods 0.000 description 7
- 238000012790 confirmation Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000003672 processing method Methods 0.000 description 5
- 230000004044 response Effects 0.000 description 4
- 230000006872 improvement Effects 0.000 description 3
- 238000012432 intermediate storage Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 230000002411 adverse Effects 0.000 description 2
- 150000001875 compounds Chemical class 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003071 parasitic effect Effects 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 239000013589 supplement Substances 0.000 description 2
- AZFKQCNGMSSWDS-UHFFFAOYSA-N MCPA-thioethyl Chemical compound CCSC(=O)COC1=CC=C(Cl)C=C1C AZFKQCNGMSSWDS-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000000454 anti-cipatory effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 239000013067 intermediate product Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 108090000623 proteins and genes Proteins 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000014616 translation Effects 0.000 description 1
Classifications
-
- 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
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- 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/499—Denomination or exception handling, e.g. rounding or overflow
-
- 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
- G06F7/49915—Mantissa overflow or underflow in handling floating-point numbers
-
- 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49942—Significance control
- G06F7/49947—Rounding
- G06F7/49957—Implementation of IEEE-754 Standard
-
- 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/544—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 for evaluating functions by calculation
-
- 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/544—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 for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- 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/22—Microcontrol or microprogram arrangements
- G06F9/223—Execution means for microinstructions irrespective of the microinstruction function, e.g. decoding of microinstructions and nanoinstructions; timing of microinstructions; programmable logic arrays; delays and fan-out problems
-
- 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/3001—Arithmetic instructions
-
- 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
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
-
- 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 or look ahead
-
- 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 or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
-
- 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
- G06F7/485—Adding; Subtracting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Nonlinear Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Hardware Redundancy (AREA)
Abstract
一種微處理器將A*B+C形式之融合乘積-累加運算分路為可由一乘法器與一加法器執行之第一與第二乘積-累加子運算;其中之第一子運算至少將A與B相乘,且條件地將C累加至部分A與B之乘積、以產生一未捨入非冗餘總和;此未捨入非冗餘總和係於一非限定時間內暫存於由乘法器與加法器共享之記憶體中,以使乘法器與加法器得以執行與該乘積-累加運算無關之其他運算;如果C值尚未加入計算時,第二子運算則條件地將C累加至未捨入非冗餘總和中,並藉此產生一最終捨入結果。
Description
本申請案主張申請日為2014年7月2日之美國專利第62/020,246號臨時申請案“Non-Atomic Split-Path Fused Multiply-Accumulate with Rounding cache”與申請日為2015年6月10日之美國專利第62/173,808號臨時申請案“Non-Atomic Temporally-Split Fused Multiply-Accumulate Apparatus and Operation Using a Calculation Control Indicator Cache and Providing a Split-Path Heuristic for Performing a Fused FMA Operation and Generating a Standard Format Intermediate Result”之國際優先權。該些優先權案之全文併入本案以供參考。
本申請案亦關聯於下列與本申請案同時申請之申請案:VAS.3043,標題為“Temporally Split Fused Multiply-Accumulate Operation”;VAS.3044,標題為“Calculation Control Indicator Cache”;VAS.3045,標題為“Calculation Control Indicator Cache”;VAS.3046,標題為“Standard Format Intermediate Result”;VAS.3047,標題為“Split-Path Heuristic for Performing a Fused FMA Operation”;VAS.3048,標題為“Subdivision of a Fused Compound Arithmetic Operation”;與VAS.2779,標題為“Non-Atomic Split-Path Fused
Multiply-Accumulate”。這些申請案之全文併入本案以供參考。
本發明係有關於一種執行算術運算之微處理器設計,尤其是融合浮點乘積-累加(FMA)運算之微處理器設計。
在現代電腦設計中,從大約1990年起,融合浮點乘積-累加(floating-point multiply-accumulate,FMA)運算就已經成為一個受到商業矚目與學術關注的領域。融合FMA運算是一種算術運算,其形式為±A*B±C,其中,A、B與C是浮點輸入運算元(分別是一個被乘數(multiplicand)、一個乘數(multiplier)、與一個累加數(accumulator)),並且在C累加至A與B的乘積前不存在捨入(rounding)運算。±A*B±C可包含,但不限於,下列例子:(a)A*B+C;(b)A*B-C;(c)-A*B+C;(d)-A*B-C;(e)A*B(即C設為零);與(f)A+C(即B設為1.0)。
在大約1990年,此算術運算即以一原子(atomic)或不可分割(inseparable)運算之形式商業實現於IBM的精簡指令集(RISC)系統/6000。而後續設計進一步最佳化浮點乘積-累加運算。
在其2004年的文獻“Floating-Point Multiply-Add-Fused with Reduced Latency”中,Tomas Lang與Javier D.Bruguera(“Lang et al.”)提出與最佳化FMA設計有關之許多重要課題。這些課題包括,指數差值與累加器移位/對準量之預計算,累加器與相乘陣列之平行對準,必要時使用2’補數累加器(2’s complement accumulator),和向量與進位向量之條件反轉,在最終相加/捨入模組前對於和向量與進位向量之標準化處理,LZA/LOA與標準化移位之重疊運算,進位位元、捨入位元、
保護位元與黏(sticky)位元之分別運算,以及在合一之相加/捨入模組中具有1m寬度之雙總和加法器的使用(其中,m是其中一個運算元的尾數(mantissa)寬度)。
在其2005年的文獻“Floating-Point Fused Multiply-Add:Reduced Latency for Floating-Point Addition”中,Tomas Lang與Javier D.Bruguera(“Lang et al.”)提出利用分離數據路徑(或雙數據路徑)把對準方向從標準化的情況移開,其中,“近(close)”的數據路徑是用以從{2,1,0,-1}有效減去指數差值(此概念在本案詳細說明中會有更進一步的發展與改進),而“遠(far)”的數據路徑則是用來處理其他情況。Lang等人還提出在遠的數據路徑使用雙對準平移器來處理相乘陣列之進位儲存輸出,以及在近的數據路徑使用非常有限對準平移的方法。
在2004年的文獻“Multiple Path IEEE Floating-Point Fused Multiply-Add”中,Peter-Michael Seidel(“Seidel”)提出對於FMA設計之不同改進方法,即使用多個平行運算路徑。Seidel並提出關閉未使用之路徑閘門;從指數差值與有效運算確認多個運算路徑;使用兩個不同運算路徑,其中一個提供給容易產生塊消去(mass cancellation)之小指數差值使用,另一個則是用來處理其他情況;對於具有效減法之小指數差值的情況,在有效乘積運算中插入累加器數值。
在現今隨處可見個人行動運算裝置來提供擴充媒體分發與網路內容存取的情況下,更需要去設計一個之低製作成本、少功耗,但又能以高效能執行指令之FMA邏輯電路。
執行FMA運算之主要方法涉及合一的乘積-累加單元之使用,以執行整個FMA運算,包含對結果進行捨入。大部
分學術提案與商業應用都描述一個單塊的,或是不可切割的功能方塊,其具有將兩個數相乘,將未進行捨入之乘積與一第三運算元、加數或累加器進行相加操作、以及對運算結果進行捨入運算。
另一種替代方案係使用傳統之乘法單元來執行A*B之子運算,然後使用傳統之加法單元來將A與B的乘積與C相加。不過,此傳統分工處理的方法會犧牲運算速度以及在同一個單元內將C與A和B之部分乘積-累加運算所能得到的效能增益。傳統分工處理的方法也涉及兩個捨入運算,因A與B的乘積會進行捨入運算,而後續C與乘積的加總也會進行捨入運算。因此,相較於合一處理的方法,傳統分工處理的方法有時候會產生不同且較不準確的結果。同樣地,因為重複捨入運算的存在,此傳統分工處理的方法無法執行“融合(fused)”FMA運算,而未能符合IEEE 754技術標準關於浮點運算的要求。
因為FMA硬體可同時用於多個運算目的並遵從IEEE 754技術標準,在現代的產品中,電腦設計者往往會選擇利用不可切割的FMA執行單元來完全取代傳統分離之乘積與加法功能方塊。然而,此方法會帶來許多不利影響。
第一,相較於使用獨立的加法與乘法功能單元,FMA硬體的設置成本較高,也較複雜。第二,在執行簡單的加法或乘法運算時,相較於使用獨立的加法與乘法功能單元,使用FMA硬體的延遲較長,且通常會消耗較多能量。第三,對於超純量(superscalar)電腦設計而言,將乘法與加法的功能合併於單一個功能方塊會減少算術指令可發送埠之數量,而削減電腦針對源碼、機械層級或軟體開發平行處理的能力。
前述第三個不利影響可加入更多功能單元來處理,
例如一個獨立的加法功能單元,但這會增加設置成本。基本上,一個額外的加法器(舉例)就是為了在提供不可切割的FMA功能時,維持可接受之指令層級平行處理所需付出的代價,這又會增加整個硬體的設置尺寸,並會增加寄生電容與電阻。隨著半導體製造技術朝向小尺寸發展,寄生電容與電阻會對於算術運算之時間延遲,或稱延遲(latency),有更顯著的影響。此時間延遲有時會被模擬為因為“長導線”而造成之延遲。因此,為了減少實行不可切割的FMA運算對於指令層級平行處理影響所額外設置的功能方塊,在考量所需之晶片尺寸、功耗與算術運算之延遲後,所能提供的改善其實相當有限。
因此,最佳之提案與實施通常會(但不總是)提供正確的運算結果(對應於IEEE之捨入與其他說明),有時提供較高的指令產出(throughput),但顯然需要額外的硬體電路而增加設置成本,並且會需要增加功耗來在複雜的FMA硬體上執行簡單的乘法與加法運算。
現代FMA設計所要達成的目標仍未能完全達成。
本發明之一面向係提供一種微處理器中之方法,用以執行±A*B±C形式之融合乘積-相加運算,其中A、B與C為輸入運算元,且在C累加至A與B之乘積前並不進行捨入運算。此融合乘積-累加運算分路為第一與第二乘積-相加子運算,分別由一或多個指令執行單元執行。在第一乘積-相加子運算中,須先選擇究竟是將A與B之部份乘積-累加至C、或是僅以A與B之部份乘積、再由此產生一未捨入非冗餘總和。在第一與第二乘積-
相加子運算間,此未捨入非冗餘總和係儲存在記憶體中,以使一或多個指令執行單元執行其他與前述乘積-相加運算無關之運算,或者是、抑或是額外地,此未捨入非冗餘總和乃自一第一指令執行單元傳輸至一第二指令執行單元。
在第二乘積-相加子運算中,如果第一乘積-相加子運算在產生未捨入非冗餘總和時未加上C時,則C與未捨入非冗餘總和相加。在此第二乘積-相加子運算中,一最終之捨入結果是由本發明之融合乘積-相加運算產生。
依據本發明之一實施例,一或多個指令執行單元包括一設定以執行第一乘積-相加子運算之乘法器、及一設定以執行第二乘積-相加子運算之加法器。
依據本發明之一實施例,複數個運算控制指標儲存於記憶體中,並/或自一第一指令執行單元傳送至一第二指令執行單元。此運算控制指標用以指示第二乘積-相加子運算中之接續運算該如何進行,其中之一指標指明一具有C之相加運算是否發生在一第一乘積-相加子運算中,而其他一些指標則可使一算術上正確捨入結果自未捨入非冗餘總和中產生。
記憶體設於一或多個指令執行單元外、且由該些指令執行單元共用。記憶體包括一用以儲存未捨入非冗餘總和之結果儲存空間(如一重排緩衝器)、及一用以儲存作為指明第二乘積-相加子運算中之接續運算如何繼續進行之複數個運算控制指標之運算控制指標儲存空間(如一與結果儲存空間不同之關聯快取),結果儲存空間耦接至一供一或多個指令執行單元共用之結果匯流排,運算控制指標儲存空間並未耦接至結果匯流排,且僅為設定為執行第一或第二乘積-相加子運算之執行單元所分享。
前述之架構使得乘積-相加運算可暫時地分路為二不同之子運算,而指令執行單元可於第一與第二乘積-相加子運算執行間、執行其他與此乘積-相加運算無關之運算。
在本發明之另一面向中,係提供一利用上述方法之微處理器,此微處理器包括一或多個設定為執行融合乘積-累加運算之第一與第二乘積-累加子運算之指令執行單元。在第一乘積-累加子運算中,須先選擇究竟是將A與B之部份乘積累加至C、或是僅選擇A與B之部份乘積,再由所選擇以產生一未捨入非冗餘總和;在第二乘積-累加子運算中,如果第一乘積-累加子運算在產生未捨入非冗餘總和並未累加C時,則C將條件式地以未捨入非冗餘總和之方式進行累加,最後再以未捨入非冗餘總和條件式地累加C、用以產生一完整之融合乘積-累加運算之捨入結果。
依據本發明之一實施例,微處理器又可包括一記憶體,其設置於一或多個指令執行單元外,用以儲存由第一乘積-累加子運算產生之未捨入非冗餘總和,其中,記憶體設定為在一未定時間區間內且直至執行第二乘積-累加子運算後、儲存未捨入非冗餘總和,藉此,使一或多個指令執行單元可於第一與第二乘積-累加子運間、先去執行與該乘積-累加運算無關之其他運算。
在本發明之另一面向中,係提供一種微處理器中之方法,用以執行±A*B±C形式之融合乘積-累加運算,其中A、B與C為輸入運算元;其中一第一執行單元被選用以至少計算A與B之乘積,一未捨入非冗餘運算之中間結果向量儲存至一共享記憶體,此記憶體係由複數個執行單元所共享,且/或自第一執行單元傳送至一第二執行單元。第二執行單元被選用以接收來自共享記憶體之未捨入非冗餘中間結果向量,且據以產生±A * B±C之
一最終捨入結果;最後,再儲存此±A * B±C之最終捨入結果。
依據本發明之一實施例,第一執行單元產生一或多個運算控制指標,用以指示第二執行單元中之接續運算該如何進行;其中,第一執行單元產生之運算控制指標,係與至少A與B之乘積運算、以及未捨入非冗餘中間結果向量之產生共存;之後,第二執行單元自記憶體接收一或多個運算控制指標,並使用未捨入非冗餘中間結果向量與運算控制指標產生最終捨入結果。
在本發明之另一實施例中,微處理器自第一執行單元之至少A與B之乘積運算中產生一或多個捨入指標,並將一或多個捨入指標存入共享記憶體;之後,第二執行單元接收來自記憶體之一或多個捨入指標,並使用未捨入非冗餘中間結果向量與一或多個捨入指標產生最終捨入結果。
在本發明之另一面向中,係提供一種方法,用以執行±A*B±C形式之融合乘積-累加運算,其中A、B與C為輸入運算元,此方法乃包括:選用一第一執行單元以計算至少A與B之乘積,並產生一未捨入非冗餘中間結果向量;儲存且/或傳送運算控制指標以指明乘積-累加運算之接續運算該如何進行;選用一第二執行單元以接收中間結果向量與運算控制指標、並依據運算控制指標產生一±A * B±C之最終捨入結果。
依據本發明之一實施例,運算控制指標包括一第一執行單元是否將C、及A與B之乘積進行累加之指標。在本發明之另一實施例中,運算控制指標包括自中間結果向量產生一算術上正確捨入結果之指標。
此方法與裝置可縮減所需之電路、設置成本與複合算術運算之累增功耗。簡單來說,此裝置與方法係將複合算數運
算分成至少二個子運算,由物理上與/或邏輯上各自獨立的硬體單元來執行,而每個硬體單元執行此複合算術運算之一部分。捨入運算或運算控制所需之位元係於此二運算間儲存於一快取內。這些子運算係於不同時間與位置完成,而必要的資料片段會被整合以完成最終捨入運算。
此方法與裝置具有許多值得注意的優點,尤其是針對FMA運算。
第一,此方法與裝置可辨識FMA運算並將其區分為至少二種類型,其中部分運算係以暫時或物理性分割之方式來執行。
第二,此方法與裝置可將來自指令集架構之一不可切割的或一體的FMA指令轉譯或轉換為至少二個子運算。
第三,此方法與裝置容許這些子運算以非不可切割的、或暫時物理性分割之方式來執行,例如在非循序超純量電腦處理器裝置內執行。
第四,FMA運算(例如對應於部分第一類型之FMA運算或部分第二類型之FMA運算)中部分之必須算術運算係於執行第一特定微指令時執行。
第五,此方法與裝置係以一新的方式預先計算FMA之符號資料。
第六,此方法與裝置會儲存中間運算之部分結果,例如儲存於一結果(重命名)暫存器。
第七,此方法與裝置會儲存運算結果之其他部分,例如儲存至稱為捨入快取或運算控制指標快取之其他儲存單元。
第八,此方法與裝置會將所收集到的資料,即中間
結果,以新的標準化儲存格式來儲存。此外,此方法與裝置可能會將儲存格式中間結果轉送至後續特殊類型之第二微指令,而非進行儲存。
第九,此方法與裝置在需要提供所儲存之資料至後續第二微指令時,會存取捨入快取。
第十,因應來自捨入快取之資料,此方法與裝置會選擇性地提供FMA加數至第二微指令或使輸入值歸零。
第十一,此方法與裝置會在執行一第二(或更多)微指令之過程中,使用此儲存格式中間結果作為輸入,來執行第一類型或第二類型之FMA運算中剩下必須執行之算術FMA運算。
第十二,此方法與裝置係將經少量調整之先前技術乘法硬體執行單元與加法硬體執行單元結合,如結合所述之捨入快取與資料轉送網路用以迴避捨入快取。
第十三,此方法與裝置不會讓分配埠無法於算術運算中使用、或是在電腦利用指令平行處理之能力與投資之硬體成本間妥協。
本發明所採用的具體實施例,將藉由以下之實施例及圖式作進一步之說明。
2‧‧‧微指令
15‧‧‧指令快取
20‧‧‧指令轉譯器
24‧‧‧指令管線
25‧‧‧重命名單元與保留站
30‧‧‧重排緩衝器
35‧‧‧架構暫存器
40‧‧‧轉送匯流排
45‧‧‧調整後的乘法單元
50‧‧‧調整後的加法單元
55‧‧‧捨入快取
60‧‧‧其他執行單元
105‧‧‧乘數運算元
110‧‧‧被乘數運算元
115‧‧‧累加數運算元
120‧‧‧乘法加總陣列
125‧‧‧最終加法器
130‧‧‧標準化移位器
135‧‧‧前導位預測與編碼器
140‧‧‧輸入運算元分析器
145‧‧‧未經捨入之標準化加總結果
146‧‧‧結果匯流排
148‧‧‧資料路徑
152‧‧‧運算元匯流排
155‧‧‧重命名暫存器
160‧‧‧運算元調整器
165‧‧‧近路徑
170‧‧‧遠路徑
175‧‧‧捨入位元選擇邏輯
180‧‧‧捨入模組
195‧‧‧輸入埠
200‧‧‧解碼器
215‧‧‧路徑控制邏輯
220‧‧‧累加數對準與射入邏輯
235‧‧‧乘法陣列
240‧‧‧部分乘積加法器
265‧‧‧PNExp產生器
270‧‧‧IRExp產生器
275‧‧‧不足位/溢位偵測器
280‧‧‧中間符號產生器
285‧‧‧結果向量埠
290‧‧‧端迴進位指標產生器
295‧‧‧黏位元產生器
300‧‧‧捨入位元產生器
305‧‧‧捨入位元埠
310‧‧‧輸入埠
315‧‧‧解碼器
330‧‧‧對準與條件邏輯
335‧‧‧指數產生器
340‧‧‧累加模組
345‧‧‧溢位移位邏輯
350‧‧‧加法器捨入位元產生器
365‧‧‧符號產生器
538‧‧‧指令操作碼
544、562‧‧‧被乘數
547、565‧‧‧乘數
541、577‧‧‧目標欄
550、568、583‧‧‧累加數
556、574‧‧‧微指令操作碼
559‧‧‧暫時暫存器
580‧‧‧乘積
第一圖係一微處理器之方塊示意圖,此微處理器具有執行單元與一捨入或運算控制指標快取,並使用二個子運算、一個調整後的乘法器、與一個調整後的加法器來執行FMA運算;第二圖係一示意圖,將一數字空間區分為FMA運算
之五個類型以為例示(但非限定於此);第三圖係一功能方塊圖,描述用以執行FMA運算之調整後的乘法器與調整後的加法器內之邏輯元件;第四圖係一功能方塊圖,顯示本發明一實施例之乘法運算單元之路徑確認邏輯與尾數乘法模組,此乘法運算單元係經適當調整以接收FMA乘數、被乘數與累加數作為輸入運算元;第五圖係一功能方塊圖,顯示第四圖之乘法運算單元之指數結果產生器與捨入指標產生器,此乘法運算單元係經適當調整以產生一儲存格式中間結果;第六圖係一功能方塊圖,顯示經適當調整以接收一儲存格式中間結果與累加數之加法運算單元之一實施例;第七圖係一功能方塊圖,顯示非不可分割之分路FMA運算之一實施例之第一FMA子運算中之一路徑確認部分;第八圖係一功能方塊圖,顯示非不可分割之分路FMA運算之第一FMA子運算中之一乘法與累加部分;第九A與九B圖係一功能方塊圖,顯示非不可分割之分路FMA運算之第一FMA子運算中之一儲存格式中間結果產生部分;第十圖係一功能方塊圖,顯示非不可分割分路FMA運算之第二FMA子運算;以及第十一圖係一示意圖,顯示將融合FMA指令轉譯為第一與第二FMA微指令之一實施例。
微處理器
第一圖係一微處理器之方塊示意圖。此微處理器10具有複數個執行單元45,50,60用以執行FMA運算。此微處理器10包含一指令快取15,一指令轉譯器與/或微碼唯讀記憶體20,一重命名單元與保留站25,複數個執行單元(包含一調整後的乘法器45、一調整後的加法器50與其他執行單元60),一捨入快取55(或是指運算控制指示器儲存空間),架構暫存器35與一重排緩衝器30(包含重命名暫存器)。其他的功能單元(未圖示)可包含一微碼單元;分支預測器;一記憶體子系統,其包含一快取記憶體階層架構(例如階層一之資料快取、階層二之快取)、記憶體排列緩衝器、與記憶體管理單元;資料預擷取單元;與一匯流排介面單元等等。微處理器10具有一非循序執行微架構,可以不依照程式順序發布指令以供執行。進一步來說,架構指令(或微指令)轉譯或轉換出的微指令,可以不依照程式順序發布指令以供執行。微指令之程式順序係相同於轉譯或轉換出這些微指令之相對應架構指令之程式順序。微處理器10並具有一超純量微架構,其能在單一個時鐘週期內發布多個指令至執行單元執行。在一種實施例中,微處理器10可以說是以相容於x86指令集架構之方式提供指令以供執行。
指令快取15儲存由系統記憶體擷取之架構指令。指令轉譯器與/或微碼唯讀記憶體20係將由系統記憶體擷取之架構指令轉譯或轉換為微處理器10之微架構微指令集之微指令。執行單元45,50,60執行這些微指令。這些由架構指令轉譯或轉換出之微指令可實現架構指令。重命名單元25接收微指令並將重排緩衝器之項目依據程式順序分配給微指令、依據所分配之重排緩衝器項目索引更新這些微指令、將各個微指令發送至與將要執行這
些微指令之執行單元相關聯的保留站25、以及為這些微指令執行暫存器重命名與關聯建立。
分類運算
在本發明之一實施例中,FMA運算是依據輸入運算元之指數值的差(由變數ExpDelta表示),以及是否涉及一有效之減法運算來進行分類。第二圖利用一包含有數字線70之數字空間65來顯示ExpDelta的值。在數字線70下方的空間顯示此運算會構成一有效減法運算。在數字線70上方的空間顯示此運算會構成一有效加法運算(亦即不存在有效減法運算)。
指數差,表示為ExpDelta,係乘數與被乘數之輸入指數值的加總,減去任何指數偏移值,再減去加數或減數之輸入指數值。在累加值遠大於偏移調整乘積向量(bias-adjusted product vector)時,計算出的ExpDelta為負。而在累加值遠小於偏移調整乘積向量時,計算出的ExpDelat為正。
有效減法,由變數EffSub表示,係指輸入運算元的符號與所欲執行的運算(例如乘法-加法,或是乘法-減法)之結合,將會有效降低浮點數結果的大小,而非增加。舉例來說,負的被乘數乘上正的乘數(乘積為負)後,加上一個正的加數,就會有效降低結果的大小,而會表示為有效減法(EffSub)。
如第二圖之數字空間65之右側所示,在乘積向量的大小主導運算結果的情況下,累加數會直接用於初始捨入位元或是黏位元之運算。如本文後續將描述的,累加數與乘積尾數之相對對準有利於在計算影響捨入運算之位元前將此二者相加。在第二圖之數字空間65內,這些不存在“有效減法”的情況顯示為“類型2”運算80,而存在“有效減法”的情況顯示為“類型
4”運算90。
如第二圖之數字空間65之左側所示,在累加數的大小主導運算結果,並且累加數之尾數大小係小於或等於所欲產生結果之尾數大小,累加數就不會用於初始捨入位元或是黏位元之運算。在第二圖之數字空間65內,這些不存在“有效減法”的情況顯示為“類型3”運算85,而存在“有效減法”的情況顯示為“類型5”運算95。因為累加數有效對準乘積尾數之左側,所以可獲得在加上累加數之前,先確認黏位元與捨入位元的好處。
區分出ExpDelta位於第二圖之數字線70之右側的情況與ExpDelta位於第二圖之數字線70之左側的情況會有許多優點。舉例來說,傳統FMA利用非常寬的對準移位器-相當於或大於輸入尾數寬度的三倍-來解釋累加數對準於乘數與被乘數之乘積的左側或右側之運算。透過將FMA運算區分為由兩個調整後的執行單元(一個調整後的乘法器45與一個調整後的加法器50)分別執行之兩個子運算,即可利用較小的資料路徑與較小的對準移位器來進行運算。
對於數字線70之右側的運算,累加數的大小會小於中間乘積向量,此情況有利於在調整後的乘法器45內將累加數與乘法器之乘積相加。此運算只需要一個比傳統FMA之資料路徑的寬度還要小上大約一個尾數寬度的資料路徑。因為調整後的乘法器45原本就具有一些內部延遲,累加數會有效地對準加總樹/陣列(summation tree/array),也會簡化標準化與捨入運算。捨入運算將會由調整後的加法器50會在第二FMA子運算中執行。
反之,對於數字線70之左側的運算,累加數會是較大的運算元而不會用於捨入運算。因為累加數不會用於捨入運算
(除了以下提到的特殊狀況),因而可以對乘法器的乘積執行一些初始黏收集(initial sticky collection)、將中間結果儲存至記憶體(例如重排緩衝器與/或快取)、並且可以用調整後的加法器50來進行累加數之加法運算。傳統的捨入邏輯可有效處理累加數對捨入運算之選擇造成影響的特殊狀況,若是存在總數溢位,捨入位元會成為黏位元之其中之一,而總數之最重要位元(least significant bit,LSB)會成為捨入位元。
某些種類的FMA運算-“有效減法”運算中對應於在第二圖之數字空間65下半部之子集合-會使一個或多個最重要位元歸零,傳統上係將此稱為“塊消去(mass cancellation)”。在第二圖中,具有塊消去潛力之運算係表示為“類型1”運算75。此情況需要在捨入運算前執行標準化運算來確認捨入點的位置。標準化向量所涉及之移位運算會產生顯著的時間延遲與/或呼叫前導位預測(leading digit prediction)以供使用。另一方面,不涉及塊消去之FMA運算可以省略前導位預測。
總之,如第二圖所示,FMA運算可依據ExpDelta與EffSub進行分類。第一類之FMA運算75係定義為包含ExpDelta落於{-2,-1,0,+1}之範圍且EffSub為真之運算,這些運算包含那些具有位元塊消去潛力的運算。第二類之FMA運算80係定義為包含ExpDelta大於或等於-1且EffSub為假之運算。第三類之FMA運算85係定義為包含ExpDelta小於或等於-2且EffSub為假之運算。第四類之FMA運算90係定義為包含ExpDelta大於{+1}且EffSub為真之運算。第五類之FMA運算95係定義為包含ExpDelta小於{-2}且EffSub為真之運算。值得注意的是,這些分類之定義僅為例示,FMA運算當可採不同方式進行分類。舉例來說,在另
一實施例中,第二類與第四類可以用同一類表示,相同地,第三類與第五類也可以同一類表示。此外,在其他實施例中,第二圖之數字線70之左部分與右部分之分隔線亦可改變。
融合FMA指令執行元件組
第三圖係顯示一般用以執行FMA運算之融合FMA指令執行元件組100之一實施例。此元件組100包含兩個物理上與/或邏輯上分開之算術邏輯單元,(在一實施例中,即為一調整後的乘法器45與一調整後的加法器50)與共享儲存空間155與55以儲存複數個未經捨入運算之中間結果向量與捨入指標。
各個調整後的乘法器45與調整後的加法器50都是一個指令執行單元,進一步來說,是指令管線24內之一個算術處理單元,用以對機器指令(例如複雜指令集(CISC)微架構內一個指定的指令集或是精簡指令集(RISC)微架構內一個指定的指令集)進行解碼,以及從一組共享的高速記憶體讀取運算元並寫入結果。指令執行單元可被理解為一個邏輯電路的特性集合,用以執行傳送過來之指定機器指令集,而不同於可平行執行(而不僅止於管線化執行)多個機器指令之較大的電路群(如果存在的話)。
更特別的是,調整後的乘法器45與調整後的加法器50係互相分離、不可分割的、能獨立運行的執行單元,能獨立對微碼進行解碼並執行,並提供控制信號至內部的資料路徑。共享高速記憶體可以是一個暫存器檔案或是一組非架構運算暫存器,供微指令交換資料並使其運算結果可為其他執行單元看見。
更特別的是,調整後的乘法器45是一個適當的乘法運算單元,在大部分情況下,就像傳統的乘法運算單元,能執行不屬於FMA運算之一般乘法微指令。不過,此調整後的乘法器
係經適當調整,使能接收FMA乘數105、被乘數110、與累加數115作為其輸入運算元,並產生一儲存格式中間結果150,這在後續段落會有更進一步的描述。相類似地,調整後的加法器50是一個適當的加法運算單元,在大部分情況下,就像傳統的加法運算單元,能執行不屬於FMA運算之一般累加微指令,例如加或減。不過,此調整後的加法器係經適當調整,使能接收儲存格式中間結果150並產生一個正確且經捨入運算之FMA結果。
調整後的乘法器45能夠執行第一階層或部分的融合FMA運算(FMA1子運算)。此調整後的乘法器45包含一輸入運算元分析器140、一乘法加總陣列120、一最終加法器125、一標準化移位器、與一前導位元預測與編碼器135。在執行FMA1子運算時,調整後的乘法器45會產生並輸出一未經捨入運算之標準化加總結果145與複數個捨入位元(或是捨入指標)。相較之下,在執行非融合FMA運算時,調整後的乘法器45會產生一經捨入運算且相容於IEEE標準的結果。
捨入位元與未經捨入運算之標準化加總結果145之最重要位元係依據一儲存格式進行儲存。在一實施例中,未經捨入運算之標準化加總結果145的最重要位元係輸出至一結果匯流排146,以儲存至一尾數寬度等於目標資料格式之尾數寬度的重命名暫存器155。捨入位元輸出至一專用捨入位元或運算控制指標資料路徑、或是位於調整後的乘法器外且不同於結果匯流排146之連接網路148,以儲存至一不同於儲存重命名暫存器155之儲存單元(例如重排緩衝器30)的捨入快取55。這些未經捨入運算之標準化加總結果145之最重要位元,連同捨入位元,係包含一儲存格式中間結果150。
因為重命名暫存器155與捨入快取55屬於可為其他執行單元看見之共享記憶體的一部份,物理上與/或邏輯上獨立於調整後的乘法器45之調整後的加法器50,可以透過運算元匯流排152與捨入位元資料路徑148接收此儲存格式中間結果150,並執行一第二(完成)階層或部分的融合FMA運算(FMA2子運算)。此外,在FMA1子運算與FMA2子運算間亦可執行其他不相關的運算。
調整後的加法器50提供一運算元乘數160,使FMA狀態下之累加運算元歸零,而在FMA狀態下,調整後的乘法器45已完成必要的累加運算。調整後的乘法器50並具有捨入位元選擇邏輯175,從調整後的乘法器45產生之捨入位元、調整後的加法器50內部產生之捨入位元,或是二者的組合,選擇用於捨入模組180以產生最終捨入結果之捨入位元。調整後的加法器並具有一近路徑加總電路165,用以在存在兩個加總運算元之塊消去的情況下對總數進行標準化運算,並具有一遠路徑加總電路170,用以執行最多只需單一位元移位之加總運算以產生總數。如下所述,FMA2子運算可完全由遠路徑加總電路170進行處理。
調整後的乘法器
第四與五圖係詳細顯示調整後的乘法器45之一實施例。第四圖特別顯示調整後的乘法器45之路徑確認邏輯185與尾數乘法模組190。第五圖特別顯示調整後的乘法器45之指數結果產生器260與捨入指標產生器245。
如第四圖所示,路徑確認邏輯185包含一輸入解碼器200、一輸入運算元分析器140、路徑控制邏輯215與一累加數對準與射入邏輯電路220。尾數乘法模組190包含第三圖之乘法
加總陣列120,這在第四圖中係以二個元件顯示,即一乘法陣列235與一部分乘積加法器240。尾數乘法模組190並包含一最終加法器125、一前導位元預測器與編碼器135、與標準化移位器130。
如第五圖所示,指數結果產生器260包含一PNExp產生器265、一IRExp產生器270、與一不足位/溢位偵測器275。捨入指標產生器245包含一中間符號產生器280、一結果向量埠285、一端迴進位指標290、一黏位元產生器295與一捨入位元產生器300。
請參照第四圖,調整後的乘法器45透過一個或多個輸入埠195接收一輸入微指令以及運算元數值。就FMA微指令而言,調整後的乘法器45接收一被乘數運算元A、一乘數運算元B與一累加數運算元C,各個運算元都包含一符號指標或位元、一尾數與一指數。在第四圖與第六圖中,浮點運算元之符號、尾數與指數部分分別以下標S、M與E表示。舉例來說,AS、AM、AE分別代表被乘數之符號位元、被乘數之尾數與被乘數之指數。
解碼器200對輸入微指令進行解碼以產生FMA指標M與二進位數運算符號指標(或位元)PS與OS,M意指接獲FMA微指令。在一實施例中,形式為A*B+C之FMA微指令會產生二進位數零之一正乘法/向量負乘法符號運算子PS與一加/減運算子OS。形式為-A*B+C之負乘積-累加微指令會產生一個二進位數一之運算子PS與一個二進位數零之運算子OS。形式為A*B-C之乘積-相減微指令會產生一個二進位數零之運算子PS與一個二進位數一之運算子OS。形式為-A*B-C之向量負乘積-相減微指令會產生二進位數一之運算子PS與運算子OS。在其他較為簡化之實施例中,調整後的乘法器45並不直接支援向量負微指令與/或減法
微指令,但由微處理器10來支援等效的運算,也就是在調用乘積-累加/相減微指令至調整後的乘法器45前,視情況額外反轉一個或多個運算元或符號指標。
乘法陣列235接收被乘數與乘數之尾數值AM與BM並計算出AM與BM之部分乘積。可以理解的是,當AM或者BM的絕對值為一或零,乘法陣列235所產生之單一個“部分乘積”的值就會是AM與BM之完整乘積。部分乘積係提供至部分乘積加法器240,其提供複數個項目以接收A與B之部分乘積以等待將其加總,而至少一個之部分乘積加法器240之項目用以接收一累加來源值CX。如下所述,在討論完輸入運算元分析器140與累加數對準射入邏輯220後,會對部分乘積加法器240有其他的說明。
輸入運算元分析器140包含一ExpDelta分析子電路210與一EffSub分析子電路205。ExpDelta分析子電路210產生ExpDelta(Exp△)值。在一實施例中,ExpDelta透過將乘數與被乘數之輸入指數值AE與BE加總,減去加數或減數輸入指數值CE,並在存在指數偏移值ExpBias時減去此指數偏移值(如果任一者存在)。在AE、BE與CE是以偏移指數(biased exponent)表示時,例如IEEE754之規範,被乘數A與乘數B之乘積的偏移量將會是累加數C偏移量的兩倍。而導入ExpBias值可對此進行校正。
EffSub分析子電路205分析運算元符號指標AS、BS與CS以及運算元符號指標PS與OS。EffSub分析子電路205產生一“EffSub”值,用以表示FMA運算是否為一有效減法運算。舉例來說,若是對A與B之乘積與C執行運算元特定之加法或減法運算(或是在負向量乘法運算子的情況下,此運算結果的負值)所產生之結果R的絕對值小於(a)A與B之乘積的絕對值或是(b)
C的絕對值,就會是有效減法。若以數學符號表示,若是(|R|<|A*B|)(|R|<|C|),其中R為FMA運算之結果,此FMA運算就會構成有效減法。雖然以FMA運算之結果可以簡化EffSub的描述,不過需理解的是,在EffSub分析子電路205預先確認EffSub時,實際上是透過分析符號指標AS、BS、CS、PS與OS來進行,而不去評估A、B與C之尾數、指數與大小。
路徑控制邏輯215接收由輸入運算元分析器140產生之ExpDelta與EffSub指標,並藉以產生一路徑控制信號,其數值係以變數Z表示。路徑控制邏輯215可控制C的累加運算是否會連同A與B之部分乘積一併在調整後的乘法器45內執行。在一實施例中,路徑控制邏輯215用以產生Z之設定條件係顯示於第二圖中。在一實施例中,對於任何調整後的乘法器45被選用來執行乘積-累加運算之累加部分運算之情況(例如類型1,2與4),Z會是二進位數一,而對於任何ExpDela與EffSub之其他組合(例如類型3與5),Z會是二進位數零。
另外,路徑控制邏輯215也可以透過判斷C所具有一大小,相較於A與B之乘積大小,是否可使C對準於加總樹(summation tree)內,而不需將C之最重要位元移位至A與B之部分乘積加總之加總樹所提供之最重要位元的左側來產生Z。另一個或替代之設定條件可以是,在執行FMA運算時是否具有執行塊消去之潛力。再另一個或替代之設定條件可以是,對A與B之乘積進行C之累加運算所產生之捨入前結果R所需要的位元數,是否少於將C對準A與B之乘積所需要的位元數。由此可知,路徑控制之條件可因應調整後的乘法器45之設計進行改變。
累加數對準射入邏輯220接收路徑控制邏輯215所
產生之Z、ExpDelta分析子電路210所產生之ExpDelta、一移位常數SC、與累加數尾數值CM。在一實施例中,此累加數對準射入邏輯220亦接收CM之位元反相(bitwise negation),即,與加法/減法累加運算子指標OS。在另一實施例中,累加數對準射入邏輯220係在加法/減法累加數指標OS顯示調整後的乘法器45所接收之微指令為乘積-相減微指令時,選擇性地額外反轉CM之值。
相應於所接收之輸入,累加數對準射入邏輯220會產生一數值CX射入部分乘積加法器240。此射入陣列之CX的寬度是2m+1,或可理解為輸入運算元之尾數AM、BM與CM的兩倍寬度額外加上一個位元。
若是M為二進位數零以顯示調整後的乘法器45正在執行一般的乘法運算而非FMA1子運算,多工器230就會將一捨入常數RC,而非CX,射入部分乘積加法器240,藉此,調整後的乘法器45即可以傳統方式產生一捨入後結果。RC的數值部分是由指令顯示之捨入運算的類型所決定(例如:捨入向上(round half up)、捨入相等(round half to even)、捨入遠離零(round half away from zero)),部分是由輸入運算元之位元尺寸(例如32位元與64位元)所決定。在一實施例中,部分乘積加法器240係利用兩個不同的捨入運算常數來計算出兩個總數,並選擇其中較適當的一個。藉此,調整後的乘法器45之IMant輸出就會是一般乘法運算之正確捨入後之尾數結果。
若是M為二進位數一而Z為二進位數零,即表示不需對A與B之乘積執行C的累加運算,在此情況下,就一實施例而言,此累加數對準射入邏輯220會將CX設定為零,而使多工器230將零值射入用以接收CX值之部分乘積加法器240陣列。若是
M為二進位數一且Z為二進位數一,累加數對準射入邏輯220就會將CX右移相等於ExpDelta加上一移位常數SC的量,以產生CX。在一實施例中,移位常數SC等於2,以對應於第二圖,當C的累加運算係執行於調整後的乘法器內,圖中數字空間內最大的ExpDelta負值。隨後,多工器230會將運算結果CX射入部分乘積加法器240。
累加數對準射入邏輯220內並結合有一黏收集器(sticky collector)。累加數CX中任何移位超過部分乘積加法器240加總樹之最不重要位元之部分,係保留於XtraStky位元供捨入運算之用。因為會有多達m個位元移位超過部分乘積加法器240加總樹之最不重要位元,XtraStky位元係作為一寬度m之額外黏位元陣列,用於黏位元S之運算。
回到調整後的乘法器45之加法邏輯,在部分實施方式中,部分乘積加法器240係為一加總樹,而在一實施方式中,係為一個或多個進位儲存加法器。此部分乘積加法器240係根據所提供之部分乘積加總樹之位元欄的進位儲存向量,對一未經捨入之冗餘代表或總數,依據先前技術之乘法執行單元通常會執行之運算方法,來進行累加運算,這包含在部分乘積之累加運算中,對累加數輸入值選擇性進行額外的位元反相與對準運算。
同樣地,部分乘積加法器240所執行的算術運算會受到Z之數值的影響。若是Z=1,部分乘積加法器240就會對於AM與BM的乘積執行CX的連帶累加運算。若是Z=0,部分乘積加法器240就會對AM與BM的乘積執行一基本累加運算。部分乘積加法器240會產生一由一2m位元總數向量與一2m位元進位向量表示之冗餘二進位數總數,作為連帶累加運算或是基本累加運算
之運算結果。
這些進位與總數向量同時轉送至一最終加法器125與一前導位預測器與編碼器135。此最終加法器125可為一進位預看加法器(carry-lookahead adder)或一進位傳播加法器(carry propagate adder),透過將進位與總數向量轉換成寬度為2m+1之正或負的預標準化未捨入非冗餘總數(prenormalized unrounded nonredundant sum)PNMant以完成累加運算程序。最終加法器125並產生一總數符號位元SumSign,來顯示PNMant為正數或負數。
在最終加法器125產生PNMant之同個時間週期,前導位預測器與編碼器135會同步預測需要被消除以標準化PNMant之前導位的數量。相較於傳統對乘積-累加運算分工處理之FMA設計中,因其最終加法器125執行之最終加法運算係於標準化運算後執行而需同時對進位向量與總數向量執行標準化運算,因而必須等待前導位預測之輸出,故本發明之處理方式相較傳統作法實具有優點。在一實施例中,此前導位預測器與編碼器135不是可以適用於正總數的情況,就是可適用於負總數的情況。
在一實施例中,前導位預測只在類型1之運算執行。如前所述,所選擇之前導位預測的方法不是可以適用於正總數就是可以適用於負總數,為熟習浮點運算設計領域者所熟知。
因為前導位預測器與編碼器135具有最多一個位元的誤差,任何可用於校正此誤差之常用技術均可使用,這些技術可設置於標準化移位器130內,或是關聯於標準化移位器130。一個解決方案係提供邏輯來預測此誤差。另一個解決方案係透過確認PNMant之MSB是否已經設定,並相應地選擇PNMant之一額外移位。
標準化移位器130從最終加法器125接收此未捨入非冗餘總數PNMant並產生一原始尾數值GMant。在CX之累加運算是由部分乘積加法器240執行的情況下,GMant會是AM和BM乘積與CX之標準化加總的絕對值。而在其他情況下,GMant會是AM和BM乘積之標準化加總的絕對值。
為了產生GMant,標準化移位器130在SumSgn顯示PNMant為負時對PNMant執行位元反相之運算。對負的PNMant數值執行標準化移位器130的位元反相運算,可產生如下所述之儲存格式中間結果150,並有助於正確的捨入運算。在調整後的乘法器內反轉PNWant,即可產生一正數提供給調整後的加法器,而不需先知會PNWant之數值為負。此處理方式可使累加運算實施起來就像加總運算並以簡化的方式進行捨入運算。
此外,此標準化移位器130會將PNMant左移一個由LDP、EffSub與Z的函數所計算出來的量。值得注意的是,即使沒有發生最重要前導位元之消除,仍需要將PNMant左移零、一或二個位元位置以產生一有用之標準化儲存格式中間結果150,以確保後續之捨入運算可正確進行。此標準化運算係由一個左移所構成,以將算術上最重要位元移動至標準化之最左位置,使能表示於如下所述之儲存格式中間結果150。
相較於傳統之FMA設計,此實施方式具有三個額外的優點。第一,此實施方式不需在部分乘積加法器240內插入額外的進位位元(若因應於EffSub對累加數尾數執行2’補數時有此需求的話)。第二,此實施方式不需提供一大的符號位元偵測器/預測器模組,來檢測並選擇性補足非冗餘部分乘積與累加數加總值之冗餘總數與進位向量表示。第三,此實施方式不需輸入額外
的進位位元來確保部分乘積與累加數加總運算中,選擇性補足之總數與進位向量表示之運算正確。
關於第五圖之指數結果產生器260,PNExp產生器265產生一預標準化指數值PNExp,此數值為被乘數與乘數指數值AE與BE、指數偏移值ExpBias與移位常數SC之函數。在一實施例中,PNExp係以算式SC+AE+BE-ExpBias來計算。
IRExp產生器270使PNExp遞減,作為標準化移位器130執行之尾數標準化運算,以產生一中間結果指數IRExp。此數值為PNExp與前導位預測(leading digit prediction,LDP)之函數。隨後,IRExp係轉送至如下所述之結果向量埠280。
中間符號產生器280產生中間結果符號指標IRSgn,其為EffSub、E、AS、BS與Z的函數。在一實施例中,IRSgn在某些情況下係以被乘數符號位元AS與乘數符號位元BS之邏輯互斥或來計算。不過,若是Z位元為二進位數一顯示累加運算已經執行,EffSub也是二進位數一顯示有效減法,而E位元值為二進位數零顯示沒有等待中的端迴進位(end-around carry),IRSgn就會以被乘數符號位元AS與乘數符號位元BS之邏輯互斥或的反相值(XNOR)來計算。換句話說,中間符號通常是A與B之乘積的符號。當累加數的大小大於A與B之乘積時,A與B之乘積的符號會反轉,乘積-累加運算會是一有效減法運算,而累加運算之完成不需要使用端迴進位(因為累加運算為負)。
中間結果符號指標IRSgn係用於一可用以確認最終符號位元以供具塊消去可能之FMA運算使用之創新方法。不同於傳統之分路FMA實施方式,此實施方式不需要符號預測器,也不需要用以預測符號之大量電路。另外,零結果的符號,或是
具有符號零輸入之運算結果之符號,容易預先計算,來納入例如一捨入模式輸入。
結果向量埠280輸出一儲存格式中間結果向量IRVector,其包含中間結果指數IRExp、中間結果符號IRSgn與中間結果尾數IRMant。在此儲存格式之一實施例中,IRMant包含GMant之最重要m位元,其中m為目標資料類型的寬度。舉例來說,在IEEE雙精確度(double precision)運算中,結果向量埠280輸出IRVeetor作為單一個符號位元、十一個指數位元、與GMant最重要53位元的組合。在儲存格式之另一個實施例中,m等於AM、BM與CM之尾數的寬度。在儲存格式之又一個實施例中,m大於AM、BM與CM之尾數的寬度。
類似於IEEE之標準儲存格式,這些尾數位元中之單一個最重要位元係作為儲存時之一隱含值。IRVector儲存至一共享記憶體,例如重排緩衝器30之重命名暫存器155,藉此,其他指令執行單元就可存取IRVector,且/或IRvector可透過一結果轉送匯流排40轉送至其他指令執行單元。在一實施例中,IRVector儲存至一重命名暫存器155。此外,不同於架構暫存器會對重排緩衝器給予一固定不變之任務分派,中間結果向量係在重排緩衝器內給予一不可預期之任務分派。在另一實施例中,IRVector暫時儲存於將用以儲存FMA運算之最終捨入結果之目標暫存器內。
現在請參照第五圖之捨入指標產生器245,不足位/溢位偵測器275產生不足位指標U1與溢位指標O1,其為IRExp與指數範圍值ExpMin與ExpMax的函數。指數範圍值係與儲存格式中間結果150(下面將有進一步討論)之精確度或目標資料類型有關。若是IRExp小於可代表此FMA運算目標資料類型之
指數值的範圍,或是小於可代表之任何中間儲存空間,例如重命名暫存器,之指數值的範圍,U1位元就會是二進位數一,否則U1位元就會是二進位數零。相反地,若是IRExp大於可代表此FMA運算目標資料類型之指數值的範圍,或是大於可代表之任何中間儲存空間,例如重命名暫存器,之指數值的範圍,O1位元就會是二進位數一,否則O1位元就會是二進位數零。另外,U與O可經編碼以表示四個可能的指數範圍,其中至少一個編碼會表示不足位,而至少一個編碼會表示溢位。
在傳統一般乘法單元之實施方式中,U1與O1位元會報告至例外事件控制邏輯。不過,在執行FMA1子運算時,調整後的乘法器45會輸出U1與O1位元至中間儲存空間以供調整後的加法器50執行。
端迴進位指標產生器290會產生等待中之端迴進位指標E1位元,其為Z、EffSub與SumSgn之函數。若是已確認之Z位元的數值為二進位數一,表示部分乘積加法器240已經執行C的累加運算,已確認之EffSub變數顯示此累加運算造成一有效減法,並且SumSgn顯示所產生之未捨入非冗餘值PNMant為正,E1位元就會是二進位數一。在其他情況下,E1就會是二進位數零。
結果向量埠280儲存GMant之最重要位元作為中間結果向量之中間結果尾數,而黏位元產生器295與捨入位元產生器300會使剩下較不重要之位元(例如超出中間結果尾數之第53個位元之位元)減少至剩下捨入(R1)與黏(S1)位元。黏位元產生器295係產生黏位元S1,其為SumSgn、Z、GMant之最不重要位元、EffSub與XtraStky位元之函數。捨入位元產生器300產生捨入位元R1,其為GMant之最不重要位元之函數。
捨入快取
捨入位元埠305會輸出各個位元U1、O1、E1、S1、R1與Z,藉此,這些位元就可以被其他執行單元(例如調整後的加法器50)使用來產生FMA運算最終之捨入後結果。為了方便說明,這些位元在本文中都表示為捨入位元,即使其中有部分位元會在產生FMA運算最終結果的過程中有其他用途,又即使並非所有的位元都用於捨入運算。舉例來說,在某些實施方式中,O1位元就不會用於捨入運算。這些位元可互換地被指為運算控制指標。舉例來說,位元Z與E,即指出那些後續運算需要執行;位元U與O,即指出這些運算應如何執行。此外,這些位元可表示為運算間歇狀態值(calculation intermission state value),因為他們提供一壓縮格式(compact format)來表示與選擇性地儲存在調整後的乘法器45之FMA1子運算與調整後的加法器50之FMA2子運算間之間歇時間中的運算狀態資訊。
這些位元,無論被稱為捨入位元、運算控制指標、運算狀態指標或其他,連同中間結果向量與累加數值C,除了運算元數值,還提供後續指令執行單元需要之任何事物,以產生算術上正確之最終結果。換句話說,中間結果向量與捨入位元之結合可提供算術上正確表示FMA運算結果所需之任何結果,此運算結果與一具有±A*B±C形式但變為目標資料尺寸之無限精確FMA運算之運算結果係無從辨別。
依據本發明之一實施例,微處理器10係用以將捨入位元儲存至捨入快取55內,並將捨入位元透過轉送匯流排40轉送至其他指令執行單元,此捨入快取55亦可稱為運算控制指標儲存空間。依據本發明之另一實施例,微處理器10並不具有捨入快
取55,而僅將捨入位元透過轉送匯流排40轉送至其他指令執行單元。依據本發明之又一實施例,微處理器10係將捨入位元儲存至捨入快取55內,但不提供轉送匯流排40來將捨入位元直接轉送至其他的指令執行單元。
指令快取55與所儲存之指令位元或運算控制指標係非架構,亦即其非為終端用戶所能看見。相較之下,架構暫存器或架構指標(例如浮點狀態字(floating point status word))則是可以被程式人員看見且指定為架構指令集之一部分的訊號來源。
在此所描述之捨入位元僅為例示,而不同的實施方式會產生不同之捨入位元組。舉例來說,在另一實施例中,調整後的乘法器45亦包含一保護位元產生器以產生一保護位元G1。在另一實施例中,調整後的乘法器亦對一零結果(zero result)之符號執行一預運算,並將其值儲存於捨入快取。若是調整後的加法器50後續運算之結果為零結果,捨入加法器50就會使用此儲存的零結果符號指標來產生最終之帶符號零結果。
依據本發明之另一實施例,捨入快取55係一位於調整後的乘法器45外部之記憶體儲存空間。不過,在另一個不同的實施例中,此捨入快取55係結合於調整後的乘法器55內。
尤其是在一實施例中,此捨入快取55係未經結果匯流排而獨自連接至指令執行單元。有鑑於結果匯流排係用以將結果從指令執行單元傳送至一通用儲存空間,捨入快取55獨自連接至結果匯流排55而未經結果匯流排。此外,運算控制指標儲存空間僅能為用於儲存或載入運算控制指標之指令所存取。藉此,即可透過輸出指令結果之結果匯流排以外之其他機制來存取捨入快取55,舉例來說,可透過捨入快取自身的導線。此外,亦可透過
指令執行單元之輸入運算元埠外之其他機制來存取捨入快取55。
在一實施例中,捨入快取55係一完全關聯(fully associative)之可存取記憶體,其具有之寫入埠的數量係相當於可平行分派之FMA1微指令之最大數量;其具有之讀取埠的數量係相當於可平行分派之FMA2微指令之最大數量;而其深度(項目數量)係關聯於指令排程之容量,與FMA1微指令分派後而在指令排程分派FMA2微指令前所能清空之最長時間週期(以時鐘週期計)。另一實施例係使用較小之捨入快取55,而微處理器10係在捨入快去55內無法取得儲存FMA1微指令之捨入位元結果的空間時,重新執行FMA1微指令。
快取之各個項目係儲存快取資料與相關聯之旗標值(tag value),此旗標值可與用以辨識儲存有儲存格式中間結果向量之重命名暫存器155之旗標值相同。在微處理器10準備(prepare)/拿取(fetch)供第二使用之運算元時,微處理器10係使用重排緩衝器索引(ROB index)來由重命名暫存器155取回所儲存之中間資料,與此相同之索引將會提供至捨入快取55,並提供中間結果150之剩下部分(即運算控制指標)。
其優點在於,本發明之配置給捨入快取55之物理上儲存項目的數量係明顯少於配置給重命名暫存器155之項目數量。重命名暫存器155之數量係進行中(in flight)之微指令數量與需要使非循序微處理器或設計之執行單元飽和所需之暫存器名稱數量的函數。比較起來,捨入快取55所需之項目數量則為進行中之FMA微指令之可能數量的函數。因此,在一未受限之實例中,微處理器之核心可提供六十五個重命名暫存器155,但只提供八個捨入快取55之項目提供給至多八個平行處理之算術運算。
本發明之另一實施例係擴充用以儲存中間結果向量之重命名暫存器155(即擴大重命名暫存器之寬度),以提供額外的位元供捨入快取55使用。此實施例雖非本發明空間利用之最佳者,但亦屬於本發明之範圍內。
捨入位元連同中間結果指標IRVector係包含儲存格式中間結果150。此儲存格式係依據一標準資料格式儲存與/或傳送未捨入標準化加總結果145之最重要位元(即具有默認值之位元),並且將未捨入標準化加總結果145之剩下位元(縮減或未縮減),連同E1、Z、U1與O1位元,進行儲存與/或傳送,因而相較於先前技術具有顯著的優勢。
調整後的加法器
現在請參照第六圖,調整後的加法器50包含一運算元調整器60、對準與條件邏輯330、以及一個與一單一位元溢位移位邏輯345配對之遠路徑累加模組340。此運算元調整器160並包含一指數產生器335、一符號產生器365、一加法器捨入位元產生器350、捨入位元選擇邏輯175與一捨入運算模組180。
值得注意的是,在本發明之一實施例中,調整後的加法器50具有一分路設計而使其透過各自獨立之近運算與遠運算來計算結果,此技術為浮點運算設計之技術人員所習知。近路徑之計算能力需要一個與一多位元標準化移位器(未圖示)配對之近路徑加總模組(未圖示),此等能力未在第六圖中顯現。在一實施例中,運算元C與D之輸入指數值的差值位於{-1,0,+1}內而構成有效減法之一般加總運算會被導向至近路徑16,其他的加法運算則會被導向至遠路徑170。其優點在於,本發明可使調整後的加法器50之所有的FMA2子運算都被導向至遠路徑170。
調整後的加法器50提供一個或多個輸入埠310以接收一個微指令與兩個輸入運算元。第一輸入運算元D係一被減數或一第一加數。第二輸入運算元C係一減數或一第二加數。在浮點運算之實施例中,各個輸入運算元包含一輸入符號、一指數、與一尾數值,分別以下標S、E與M表示。透過解譯微指令,解碼器315係利用信號QS指出此運算究竟為一加法或是一減法運算。透過解譯微指令(或是由微指令指令之一運算元參考),解碼器並可以利用信號M來指出此微指令是否支配一個特定的微操作可使調整後的加法器50執行FMA2子運算。
在調整後的加法器50被賦予執行FMA2子元運算之任務時,調整後的加法器50係接收由調整後的乘法器45先前執行相對應之FMA1子運算所產生之中間結果向量IRVector。因為中間結果向量IRVector之寬度僅為m個位元,調整後的加法器50不需(而在一實施例中,係不會)被調整成可接收或執行多於m個位元之有效位數。因此,相較於以較寬位元數呈現之IRVector,本實施例可以簡化內部資料路徑、累加模組340與調整後的加法器50之其他電路,並使其運作更有效率。此外,因為涉及塊消去之累加運算係由調整後的乘法器45完成,在調整後的加法器50之近/塊消去路徑上不需加入捨入運算邏輯來正確計算出FMA結果。
在一實施例中,調整後的加法器50從重命名暫存器155接收IRVector。在另一實施例中,則是從轉送匯流排40接收IRVector。而在第六圖所示之實施例中,IRVector係被接收為運算元D。此調整後的加法器50接收累加數值C作為另一個運算元。
若是M顯示調整後的加法器50被賦予執行FMA2
子元運算之任務,運算元調整器160就會在Z是二進位數一時,將輸入運算元之一部份設定為等同於二進位數零,以顯示C之累加運算已經由調整後的乘法器45執行。在一實施例中,各個指數、尾數與符號之欄位CE、CM與CS均調整為零。在另一實施例中,只由指數與尾數的欄位CE、CM調整為零,至於符號的欄位CS則維持原樣。藉此,調整後的加法器50即可將加數D加上一帶符號的二進位數零。
一個二進位數一之M位元並通知調整後的加法器50接收由調整後的乘法器45所產生之捨入位元,並將其併入儲存格式中間結果150。
在其他所有情況中,即Z為二進位數零或是M為二進位數零以顯示調整後的加法器50被賦予傳統累加運算之任務,運算元調整器160只會對指數與尾數欄位CE與CM進行傳統浮點加法運算需要之調整。
在一實施例中,運算元調整器160包含一對多工器接收Z的值,而在CM與零之間以及CE與零之間進行選擇。選定之值係在第六圖中以CM*與CE*表示。隨後,對準與條件邏輯330將對準與/或調節此選定值CM*與第一運算尾數DM。
接下來,遠路徑累加模組340將CM*與DM相加。在一實施例中,此累加模組340係一雙加加法器,以提供總數與漸增總數。在一實施例中,此累加模組340係利用1’補數(one’s complement)來執行有效減法。若是此總數會在尾數欄位產生一位元之溢位,溢位移位邏輯345就會條件地將總數移動一個位元,以使結果值完成捨入運算之準備。
指數產生器335利用選定的指數值CE*、第一運算元
指數DE、與由溢位移位邏輯345產生之移位量來產生一最終指數FExp。
符號產生器365依據由第一與第二運算元CS與DS、加/減運算子QS與加總結果符號構成之函數來產生一最終符號FSgn。
在另一實施例中,運算元調整器160係以選擇器邏輯取代。當輸入解碼器顯示加法器正在執行FMA2子運算而Z是二進位數一以顯示C之累加運算已執行,此選擇器邏輯會使第一運算元D直接轉送至捨入運算模組180,但使加總邏輯維持在休眠狀態(quiescent state)。
調整後的加法器50之邏輯係產生一組自己的捨入位元R2、S2、U2、O2與E2。當M顯示調整後的加法器50被賦予執行FMA2子運算之任務時,調整後的加法器50也會接收複數個由執行FMA1子運算之調整後的乘法器45事先產生之捨入位元R1、S1、U1、O1、Z與E1。
在M為二進位數一的情況下,捨入位元選擇邏輯175會確認來自調整後的乘法器45之捨入位元E1、R1與S1、來自調整後的加法器50之捨入位元E2、R2與S2、或是二者之某些混合或組合,將會被加法器之捨入運算模組180用以產生最終之捨入後尾數結果。舉例來說,若是所執行之運算並非FMA2子運算(即M=0),捨入運算模組180就會使用加法器產生之捨入位元E2、R2與S2。另外,若是累加運算係由調整後的乘法器45執行(即M=1且Z=1),並且不存在不足位的情形(即UM=0),就由乘法器產生之捨入位元E1、R1與S1來提供捨入運算模組180產生最終捨入後結果所需之任何物件。
此可變位置之捨入運算模組係作為調整後的加法器50之遠計算功能之部分來設置。而在一實施例中,此捨入運算模組配合由1’補數有效減法所造成之正差值捨入運算,並且還配合由非有效減法之加總運算所造成之正總數捨入運算。此捨入運算模組180以類似於傳統單一加/減單元執行之方式,執行選定之捨入位元RX、黏位元SX,而在有提供的時候也會執行保護位元GX(未圖示)。此捨入運算模組180係由傳統設計進行修改以接收至少一補充輸入,即選定之端迴進位位元EX,而若是由調整後的乘法器45執行1’補數有效減法,即可顯示需要一端迴進位校正。使用選定之RX、SX與EX輸入,捨入運算模組180可正確地對中間結果向量與帶符號零之加總執行捨入運算,以產生正確而符合IEEE標準之結果。此為浮點運算設計之技術領域者所能理解。
如前述,調整後的加法器50需要近路徑165來執行某些類型之傳統累加運算,但不需要近路徑165來執行本文所述之FMA運算。因此,在執行本文所描述之FMA運算類型時,近路徑邏輯165會在FMA運算之過程中維持休眠狀態以降低耗能。
第一與第二FMA子運算
第七至十圖顯示本發明利用一第一FMA子運算(FMA1)與一第二FMA子運算(FMA2)執行一不可分割分路乘積-累加運算之方法之一實施例。其中,FMA2子運算並非臨時性相接於FMA1子運算,也不是物理性上相接於FMA2子運算。
第七圖顯示FMA1子運算之一路徑確認部分。在步驟408中,FMA1子運算確認EffSub變數。當EffSub為二進位數一,即顯示是否累加數運算元與乘數運算元之乘積的累加運算會構成一有效減法。在步驟411中,FMA1子運算選擇性地對累加
數運算元執行位元反相。在步驟414中,FMA1子運算計算ExpDelta。ExpDelta等於乘數與被乘數之指數之加總減去累加數之指數與一指數偏移。ExpDelta不只確認乘數尾數與累加數尾數之相對對準以供加法運算之用,也會配合EffSub變數來確認累加數運算元之累加運算是否將由FMA1子運算執行。
在步驟417中,FMA1子運算確認路徑控制信號Z。當數值為二進位數一,即表示有一個累加數運算元之加總運算,會利用調整後的乘法器45電路,在FMA1子運算中執行。在一實施例中,FMA1子運算在ExpDelta大於或等於負一時,將二進位數一指派給Z,而在ExpSub為一且ExpDelta為負二時,也會將二進位數一指派給Z。其他的實施方式會以不同方式分割ExpDelat與EffSub的數字空間。
第八圖係FMA1子運算之乘法與條件累加部分之方塊示意圖。在步驟420中,FMA1子運算選擇一累加路徑供累加運算元使用。若是Z為二進位數零,如步驟426所示,FMA1子運算就會計算乘數運算元之部分乘積之加總,而不加上累加數運算元。另外,若是Z為二進位數一,如步驟423所示,FMA1子運算會調整選擇性互補累加數尾數之對準值,其調整量為ExpDelta值之函數。就一實施例而言,此調整量等於ExpDelta加上一移位常數。
在步驟426/429中,FMA1子運算執行一第一累加運算,其為(a)乘數和被乘數運算元之部分乘積(即步驟426),或是(b)累加數運算元與乘數和被乘數運算元之部分乘積(即步驟429)之一者。在步驟432中,FMA1子運算條件執行一前導位預測,來預測總數之最重要前導位所需要之消去。前導位預測之運算係
限於類型1之FMA運算75,並且會與步驟429中部分之加總運算平行執行。另外,前導位預測邏輯可連接至步驟426或步驟429以處理其運算結果。
經過步驟426或429,以及步驟432之執行後,FMAI子運算會產生一未經捨入、非冗餘之標準化加總結果145(如步驟435所示)。接下來,FMA1子運算會產生一儲存格式中間結果150(如步驟438所示)。一旦儲存格式中間結果150被儲存或分派至轉送匯流排40,FMA1子運算就會終止,並釋放執行FMA1子運算之資源(例如作為調整後的乘法器45之指令執行單元)給其他與FMA運算無關的運算使用。所屬技術領域者當可理解,此技術亦可同樣適用於可同時透過連續階段執行多個運算之管線乘法器。
第9A與9B圖係詳細說明產生儲存格式中間結果150之程序。在步驟441中,FMA1子運算確認是否因累加數之累加運算構成有效減法,而存在待定之端迴進位校正。若是Z與EffSub均為二進位數一(即類型1之FMA運算75或是類型4之FMA運算90),並且由步驟435所產生之未經捨入非冗餘之結果為正,FMA1子運算就會將二進位數一指派給變數E1。
在步驟444中,FMA1子運算透過對尾數執行位元反相之運算,而產生一原始尾數結果(germinal mantissa result,GMant)。若運算結果為負,就透過移位,將尾數標準化為一標準儲存格式。
在步驟447中,FMA1子運算產生一中間結果符號(IRSgn)。若是E為二進位數零,而Z與EffSub均為二進位數一,IRSgn就會是被乘數與乘數之符號位元之反邏輯互斥或結果。否
則,IRSgn就會是被乘數與乘數之符號位元之邏輯互斥或結果。
在步驟453中,FMA1子運算將SC加上乘數與被乘數之指數值加總,再減去ExpBias,以產生PNExp。
在步驟456中,FMA1子運算透過減少PNExp來處理PNMant之標準化運算,藉以產生中間結果指數值(IRExp)。
在步驟459中,FMA1子運算確認中間不足位(U1)與中間溢位(O1)位元。
在步驟462中,FMA1子運算由原始尾數(GMant)之最重要位元產生一中間結果尾數(IRMant)。
在步驟465中,FMA1子運算將構成中間結果向量IRVector之IRSgn、IRMant與IRExp,儲存至儲存空間,例如一重命名暫存器。
在步驟468中,FMA1子運算會將GMant之LSBs與部分乘積加法器240之移出位元(Xtrastky)縮減至捨入位元(R1)與黏位元(S1)。而在另一實施例中,還包含一保護位元(G1)。
在步驟471中,FMA1子運算將R1、S1、E1、Z、U1與O1位元紀錄於捨入快取55,而在提供有G1位元時,也會一併記錄於捨入快取55。
第十圖係一方塊圖顯示本發明不可分割分路FMA運算之一第二FMA子運算。
在步驟474中,FMA2子運算接收先前儲存在例如重命名暫存器之儲存空間內的中間結果向量IRVector。另外,FMA2子運算亦可由轉送匯流排接收IRVector。
在步驟477中,FMA2子運算接收先前儲存在例如捨入快取55之儲存空間內的捨入位元。另外,FMA2子運算亦可由
轉送匯流排接收捨入位元。
在步驟480中,FMA2子運算接收累加數輸入值。
在決定步驟483中,FMA2子運算檢視步驟474所接收之Z位元。若是Z位元為二進位數一(或真)表示累加數之加總運算已經由FMA1子運算執行,此流程就會前進至步驟486。否則就會前進至步驟489。
在步驟486中,FMA2子運算將累加數輸入值之指數與尾數欄位調整為零。在一實施例中,FMA2子運算並不調整輸入累加數之符號位元。隨後在步驟492中,此FMA2子運算會將計算中間結果指數與一帶符號零運算元之總數。接下來前進至步驟494。
在步驟489中,FMA2子運算計算中間結果指數與累加數之總數。接下來前進至步驟494。
在步驟494中,FMA2子運算利用FMA1子運算產生之Z、U1、O1位元以及FMA2子運算產生之U2與O2位元,從捨入位元E1、E2、R1、R2、S1與S2中,選擇會用來對總數之尾數進行正確捨入運算的捨入位元。
在步驟496中,FMA2子運算利用選定的捨入位元來對總數進行正確的捨入運算。此FMA2子運算在執行尾數捨入程序之同時,選擇性地使IRExp遞增(步驟498)。如此,FMA2子運算即可產生一最終經捨入之結果。
第七至十圖中所描述之部分步驟可不需圖示順序執行。此外,第七至十圖中所描述之部分步驟亦可平行執行。
運算類型之應用
此章節說明前述應用於第二圖之五種不同運算“類
型”之各種變數數值間之功能性關聯,尤其著重於PNMant之運算、符號與標準化處理以及與各個資料類型相關之EffSub、ExpDelta、Z、E與IntSgn之數值。
第一類型(First Type)
如第二圖所示,類型1之FMA運算75之特點在於,此運算涉及一有效減法(因此,EffSub=1),而調整後的乘法器45被選定以執行C之累加運算(因此,Z=1),而C的大小相當接近A和B之乘積(即-2<=ExpDelta<=1)而會造成塊消去之產生。
因為累加運算將會於調整後的乘法器45內執行而造成有效減法(即EffSub=1且Z=1),累加數對準與射入模組220會在將累加數運算元尾數值CM射入部分乘積加法器240前,對累加數運算元尾數值CM造成與/或選擇一位元反相運算。相對於部分乘積,此累加數對準與射入模組220會利用ExpDelta,來對準部分乘積加法器240內之累加數尾數。
隨後,對於未經捨入之非冗餘數值145(即PNMant)的完整加總運算係依照傳統乘法執行單元通常採用之方法來執行,此執行包含部分乘積之加總運算內,額外被選擇性位元求與相對準之累加數輸入值。因而PNMant即可以1’補數之形式,表示乘數與被乘數尾數值以及累加數尾數值間之算數差。
PNMant可為正或負。若是PNMane為正就需要端迴進位,而等待中之端迴進位指標E1就會被指派為二進位數一。若是PNMant為負就不需要端迴進位,而E1就會被指派為二進位數零。E1被指派之值不僅為PNMant之函數,亦為Z與EffSub之值的函數,而在類型1之運算75中,Z與EffSub會是二進位數一。
在部分乘積與累加數輸入加總運算之同時,也會執
行前導位預測來對任何最重要前導位需要之任何消去進行預測。如前述,於本發明一實施例中,此運算係由一與最終加法器125並行之電路,於執行PNMant之加總運算時執行。
如浮點運算設計之技術領域者所能理解,即使沒有發生前導位之相減消去,可能還是需要對PNMant執行一個零、一或二位元位置之標準化運算,利用SC至PNExp來使其對準於所需之儲存格式,以供本發明描述與使用之中間結果150之用。若存在塊消去,顯然就會需要更多的移位運算。同樣地,若是PNMant為負,就會對此數值執行位元反相之運算。對PNMant執行選擇性標準化與位元反相運算係用以產生原始尾數值GMant,其最重要m位元係變成中間結果尾數IRMant。
中間結果符號IRSgn不是被乘數符號位元AS與乘數符號位元BS之邏輯XOR運算結果,就是其邏輯NXOR運算結果,端視E1之數值而定。若是E1為二進位數一,IRSgn會被計算為被乘數符號位元與乘數符號位元之邏輯XOR運算結果。若是E1為二進位數零,IRSgn就會被計算為被乘數符號位元與乘數符號位元之邏輯XOR運算結果。
回到FMA2運算,調整後的加法器50會接收包含路徑控制訊號Z在內之已儲存或轉送之捨入位元,因為Z為1,中間結果向量IRVector需要執行捨入運算,而會對最終之乘積-累加結果產生些微調整。在一實施例中,調整後的加法器50係將中間結果向量IRVector與一零運算元(或是在另一實施例中,一帶符號二進位數零之運算元)加總,而非與所提供之第二運算元,即累加數C,做加總運算。
在最後的執行步驟中,調整後的加法器50會在加總
運算與完成捨入運算前對接收到的IRExp進行調整,以涵蓋較大的數字範圍,例如可涵蓋FMA運算之目標資料類型之不足位與溢位指數範圍。在接收到的數值Z=1位元時,調整後的加法器50會以採取一個使IRExp遞增、而大部分均為傳統方式之方法,利用所接收到的R、S、U、O與E位元來對IRVector執行捨入運算。
第二類型(Second Type)
如第二圖所示,類型2之FMA運算80之特點在於,此運算不涉及有效減法(因此,EffSub=0),調整後的乘法器45係被選定以執行C之累加運算(因此,Z=1),而相較於A和B之乘積,C的大小相當小。
因為此運算不會造成有效減法(即EffSub=0),累加數對準與射入邏輯220就不會在將累加數運算元尾數值CM射入部分乘積加法器240前,對累加數運算元尾數值CM造成與/或選擇一位元反相運算。
累加數對準與射入模組220利用ExpDelta來使累加數尾數對準部分乘積,以將累加數尾數射入部分乘積加法器240。
在此將不會產生負的PNMant。此外,所產生之正的PNMant並非1’補數之減法運算的結果,因而不需端迴進位校正。因此,等待中之端迴進位指標E1就會被指派為二進位數零。
因為並非一有效減法運算,此運算中將不會產生前導位之減法塊消去,因而不需執行前導位預測來預測此等消去。反之,前導位預測則可用以依據SC至PNExp之貢獻程度,來預測所需之0、1、或2位元位置之標準化運算。
如同浮點運算設計之技術領域者所能理解,A和B乘積與C的加總會產生一具有算術顯著性或比重、較乘數與被乘
數之乘積大於一數位位置的溢位情形,因此需要對PNMant執行零、一或二位元位置之標準化運算,來使數值對準用於本發明所描述與利用之中間結果之儲存格式。此標準化運算會產生原始尾數值GMant,而其最重要m位元會成為中間結果尾數IRMant。
預標準化指數PNExp係透過將輸入之乘數與被乘數指數值相加,再減去任何指數偏移值,最後再加上SC=2,此數值係於Z=1之情況下依據最負的ExpDelta而定。如第二圖對於類型2之運算之描述可知,C的大小並不會明顯大於A和B的乘積,因此,所造成之總數會等於或大於所輸入之累加數。
因為此運算並非有效減法(即EffSub=0),中間結果符號IRSgn係視為被乘數符號位元AS與乘數符號位元BS之XOR邏輯運算結果。
回到FMA2運算,調整後的加法器50會接收包含路徑控制信號Z之已儲存或轉送之捨入位元。因為Z是二進位數一,中間結果向量IRVector只需要一些最後處理,主要就是捨入運算,即可產生最終之乘積-累加結果。在一實施例中,此調整後的加法器50係將中間結果向量IRVector與一零運算元(在另一實施例中,可為一帶符號二進位數零運算元)做加總,而非與所提供之第二運算元,即累加數C,做加總運算。
在最後的執行步驟中,調整後的加法器50會對接收到的IRExp進行調整,以涵蓋較大的數字範圍,例如可涵蓋FMA運算之目標資料類型之不足位與溢位指數範圍。此調整後的加法器50會以採取一個使IRExp遞增、而大部分均為傳統方式之方法,來對IRVector執行捨入運算以產生最終之正確結果。
第三類型(Third Type)
如第二圖所示,類型3之FMA運算85之特點在於,此運算不涉及有效減法(因此,EffSub=0),調整後的加法器50被選定以執行C之累加運算(因此,Z=0),而相較於A和B之乘積,C的大小相當大。
因此,EffSub為二進位數零。此外,路徑控制信號Z亦為二進位數零,以顯示累加數運算元之加總運算尚未執行。因為Z與EffSub均為二進位數零,等待中之端迴進位指標E1會被指派為二進位數零。
因為Z是二進位數零,累加數對準與射入邏輯220不會將乘數單元部分乘積加總數內之累加數輸入的尾數進行對準。不過,累加數對準與射入邏輯220會使此對準輸入之算術值為零。
隨後,對於部分乘積與未經捨入之非冗餘數值145之完整加總運算係依照傳統乘法執行單元通常採用之方法來執行,此方法不包含輸入累加數之尾數值。因為此FMA運算類並非有效減法(即EffSub=0),此加總運算將不會產生正的PNMant,並由SumSgn表示。此外,此正值的PNMant並非1’補數減法運算之結果,因而不需要使用端迴進位校正。
因為此運算並非一有效減法運算,此運算中將不會發生前導位之減法塊消去,因而不需執行前導位預測來預測此等消去。
A和B的乘積會在乘數與被乘數之尾數乘積產生一位數位置之算術溢位。因而需要對此正的未經捨入非冗餘值執行零或一位元位置之標準化運算,來使此數值對準本發明所描述或使用之中間結果格式。此標準化運算會產生原始尾數值GMant,
而其最重要m位元會成為中間結果尾數IRMant。
因為事先確認之路徑控制訊號Z為二進位數零,顯示累加運算尚未被執行,此中間結果符號IRSgn就會被視為被乘數符號位元AS與乘數符號位元BS之XOR邏輯運算結果。
回到FMA2運算,調整後的加法器50接收包含Z在內之已儲存或轉送之捨入位元。因為Z為二進位數零,調整後的加法器50會使中間結果向量,即第一運算元,與累加數C,即第二運算元,做加總運算。
在執行此累加運算之前,此調整後的加法器50可調整IRExp以涵蓋較大的數字範圍,例如可涵蓋FMA運算之目標資料類型之不足位與溢位指數範圍。因為此運算是由累加數數值主導運算結果之類型3之運算85,IRExp將會比累加數輸入指數值來的小。
此運算有利於使調整後的加法器50之遠路徑加總運算之二個運算元生效。在遠路徑加總運算中,具有較小指數值之運算元的尾數係於對準程序中向右移位。任何如此移位超過所需捨入位元的尾數位元就會被用於捨入運算。因為累加數會主導運算結果,因而可以不用提供位元給捨入運算,而能簡化必要的捨入運算。
調整後的加法器50會使用由調整後的加法器50所執行之部分運算所產生之G2(如果有的話)、R2、S2與E2(具有二進位數值零)捨入位元,連同R1、S1與E1,來對中間結果與累加數輸入值的總數進行捨入運算,以產生FMA運算之最終經捨入之正確結果,此為熟習浮點運算設計領域技術者所能理解。
第四類型(Fourth Type)
如第二圖所示,類型4之FMA運算90之特點在於,此運算涉及有效減法(因此,EffSub=1),調整後的乘法器45被選定以執行C之累加運算(因此,Z=1),而相較於A和B之乘積,C的大小相當小。
因為累加運算將會於調整後的乘法器45內執行而造成有效減法(即EffSub=1且Z=1),累加數對準與射入模組220會在將累加數運算元尾數值CM射入部分乘積加法器240前,對累加數運算元尾數值CM造成與/或選擇一位元反相運算。相對於部分乘積,此累加數對準與射入模組220會利用ExpDelta,來對準部分乘積加法器240內之累加數尾數。
因為A和B之乘積之大小明顯大於C,此運算中將不會發生前導位之減法塊消去,因而不需執行前導位預測來預測此等消去。
此外,加總程序會產生正的PNMant。因此,待定之端迴進位指標E1會被指派為二進位數一,之後會通知調整後的加法器50還需要對中間結果尾數執行端迴進位校正。
如同浮點運算設計領域具有合理技術者所能理解,PNMant可能需要依據所提供之SC至PNExp,執行零、一或二位元位置之移位或標準化運算,使其對準於本發明所述或使用之中間結果所需的儲存格式。隨後,此標準化運算會選擇性地執行於此未經捨入之非冗餘值,以產生原始尾數值GMant,其最重要著m位元會成為中間結果尾數IRMant。
因為類型4之運算90涉及C之加總運算(即Z=1),而此加總運算會構成有效減法(即EffSub=1),在需要端迴進位(即E1為1)之情況下產生正的PNMant,中間結果符號IRSgn會被視
為被乘數符號位元AS與乘數符號位元BS之XOR邏輯運算結果。
回到FMA2運算,調整後的加法器50接收包含路徑控制信號Z在內之已儲存或轉送之捨入位元。因為Z為1,中間結果向量IRVector只需一些最後處理,主要就是捨入運算,即可產生最終之乘積-累加結果。在一實施例中,此調整後的加法器50係將中間結果向量IRVector與一零運算元(在另一實施例中,可為一帶符號二進位數零運算元)做加總,而非與所提供之第二運算元,即累加數C,做加總運算。
在執行零(或二進位數帶符號零)之累加運算前,調整後的加法器會調整IRExp以涵蓋較大的數字範圍,例如可涵蓋FMA運算之目標資料類型之不足位與溢位指數範圍。
因應儲存格式中間結果150內所接收之E位元二進位數值,此運算需要依據第一微指令執行過程中執行之1’補數有效減法產生端迴進位校正。因此,此E位元係連同儲存格式中間結果150之G1(如果有的話)、R1與S1位元,做為調整後的加法器50執行單元之調整後的捨入邏輯的補充輸入。
隨後,此調整後的捨入邏輯利用G1(如果存在的話)、R1、S1與E1補充輸入來計算中間結果向量與帶符號零之加總的正確捨入,以對類型4之FMA運算產生正確的運算結果。而此技術當為熟習浮點運算設計領域之技術者所能理解。
第五類型(Fifth Type)
如第二圖所示,類型5之FMA運算之特點在於,此運算涉及有效減法(因此,EffSub=1),調整後的加法器50被選定以執行C之累加運算(因此,Z=0),而相較於A和B之乘積,C的大小相當大。
因為累加運算不會於調整後的乘法器45內執行,累加數對準與射入邏輯220不會對準部分乘積加總數內之CX,或是使此對準輸入之算術值為零。此調整後的乘法器45係依據先前技術之乘法執行單元之常用方法來執行部分乘積與PNMant之完整加總運算。
因為已執行C之加總運算,此運算中將不會發生前導位之減法塊消去,因而不需執行前導位預測來預測此等消去。此外,雖然會產生正的PNMant,此數值並非1’補數減法之運算結果。因此,此運算不需要端迴進位校正,而E1會被指派為二進位數零。
如同熟習浮點運算設計領域之技術者所能理解,PNMant可能需要依據所提供之SC至PNExp,執行零、一或二位元位置之移位或標準化運算,使其對準於中間結果150所需的儲存格式。此標準化運算會產生原始尾數值GMant,其最重要m位元會成為中間結果尾數IRMant。
因為類型5之運算不涉及C之加總運算(即Z=0),中間結果符號IRSgn會被視為被乘數符號位元AS與乘數符號位元BS之XOR邏輯運算結果。
回到FMA2運算,調整後的加法器50接收包含Z在內之已儲存或轉送之捨入位元。因為Z為0,中間結果向量IRVector需要與累加數C加總以產生最終之乘積-累加運算結果。
因為類型5之運算係由累加數值主導運算結果,IRExp會小於累加數輸入指數值,此運算有利於使調整後的加法器50之遠路徑加總運算之二個運算元生效。在遠路徑加總運算中,具有較小指數值之運算元的尾數係於對準程序中向右移位,
任何如此移位超過所需捨入位元的尾數位元就會被用於捨入運算。因為累加數會主導運算結果,因而可以不用提供位元給捨入運算,而能簡化必要的捨入運算。
因為由儲存格式中間結果150接收之待執行端迴進位指標E1是二進位數零,因此,FMA1運算沒有留下任何待執行之端迴進位校正。是以,E1位元係連同儲存格式中間結果150之R1與S1位元,以及G1位元(如果存在的話),做為調整後的加法器50執行單元之調整後的捨入位元的補充輸入。
然而,由調整後的加法器50所執行之累加運算可能會另外導致1’補數有效減法之產生。如此,調整後的捨入邏輯即可產生包含端迴進位在內之捨入位元,來計算出中間結果向量與累加器輸入值之加總的正確捨入值,以產生FMA運算之正確結果。而此技術當為熟習浮點運算設計領域之技術者所能理解。
特定微指令
在本發明之另一個面向中,轉譯器與/或微碼唯讀記憶體(ROM)20係用以將FMA指令轉譯或轉換為第一與第二特定微指令,分別由乘法與加法單元執行。舉例來說,第一(或更多)特定微指令可以在一類似於將傳統乘法單元進行最小限度之調整,以符合所述目的之乘法執行單元內執行。而第二(或更多)特定微指令可以在一類似於將傳統家法單元進行最小限度之調整,以符合所述目的之加法執行單元內執行。
第十一圖顯示本發明將融合FMA指令535透過FMA指令轉譯或轉換,產生第一與第二特定微指令553與571之一實施例。就一未受限之範例而言,此融合FMA指令535包含一指令操作碼欄538、一目標欄541、一第一運算元(被乘數)欄544、
一第二運算元(乘數)欄547、與一第三運算元(累加數)欄550。
依據操作碼欄538之指示,此FMA運算可為一乘-加(multiply-add)、一乘-減(multiply-subtract)、一負乘-加(negative multiply-add)、或一負乘-減(negative multiply-subtract)指令。如同存在許多不同類型之FMA指令535,也會存在許多類型之第一特定微指令553,如乘-加、乘-減、負乘-加、或負乘-減微指令。這些類型之特徵,如果有的話,會反映在相關之微指令553之操作碼欄556中。
第一特定微指令553會引導第一至第五類型之FMA運算所需之部分算術運算之實行。依據類型之不同,第一特定微指令553所執行之特殊運算亦有差異。第一特定微指令553係分配給第一執行單元,例如前文所述之調整後的乘法器45。
第二特定微指令571會引導第一至第五類型之FMA運算所需之剩餘算術運算之實行。依據類型之不同,第二特定微指令571所執行之特殊運算亦有差異。在本實施例中,第二特定微指令571係分配給第二執行單元,例如前文所述之調整後的加法器50。為了方便浮點乘-加融合運算或浮點乘-減融合運算之實行,此第二特定微指令571可具有一子類型,例如加或減。
尤其是,此第一特定微指令553會將第一、第二與第三輸入運算元544、547與550,分別特定為被乘數運算元A、乘數運算元B與累加數運算元C。此第一特定微指令還可以特定一目標欄559,指向暫時暫存器。又或者,此目標暫存器559可為隱含者。
第一特定微指令553會引導FMA1子運算執行,即A和B之部分乘積與在某些條件下與C之加總,以產生未經捨入
之儲存格式中間結果150。此第一特定微指令553也會引導變數EffSub與ExpDelta之確認動作,藉以對一組預先確定之EffSub與ExpDelta值,產生指派給Z位元之數值二進位數一。此數值會依序控制許多相關程序。
二進位數一之Z位元指出此對累加數位元之加總運算將會於第一運算中執行,而不須由第二微指令來執行。隨後,此Z位元之指定與ExpDelta會用於使部分乘積加法器240內被選擇性互補累加數尾數進行對準,此部分乘積加法器240係經適當調整使能接收此額外事項。
第一特定微指令553並引導一完整加總運算對此未經捨入之非冗餘值(PNMant)執行。此完整加總運算係依據傳統乘法執行單元之通常方法,但在部分乘積之加總運算中,納入額外之選擇性位元反相、已對準的累加數輸入值CM或。若是PNum為負,此條件就會由信號SumSgn表示。
第一特定微指令553並引導PNMant之移位與位元反相運算,以產生一原始尾數值(GMant),接下來會執行GMant之縮減以產生儲存格式中間結果150之中間結果尾數(IMant)。因此,此中間結果尾數IMant會是此EffSub指定之運算所產生之1’補數算術差之標準化絕對值,但不執行任何端迴進位校正。
第一特定微指令553並引導中間結果指數值之運算。首先依據Z為二進位數一時,ExpDelta之最負值,產生一預標準化指數值(PNExp),其數值係等於被乘數指數AE與乘數指數BE之加總、減去指數偏移值ExpBias、再加上一移位常數SC。然後,從PNExp之數值減去由標準化移位器130執行之尾數標準化運算所佔據的量,以產生中間結果指數值(IRExp)。
第一特定微指令553並引導中間結果符號IRSgn之運算。此中間結果符號IRSgn,連同中間結果尾數IRMant與中間結果指數IRExp,構成儲存格式中間結果150之向量IRVector。
第一特定微指令553並會產生包含Z在內之許多捨入位元。GMant未納入中間結果尾數之最不重要位元會被縮減至由捨入(R)與黏(S)位元表示,而在一實施例中,還包含保護(G)位元。若是部分乘積加法器240已經將C與A和B之乘積累加,並且此運算係一有效減法而產生一正的PNMant值,端迴進位位元E就會配指派為二進位數一,以顯示需要執行端迴進位。此第一特定微指令並會使中間不足位(U)與中間溢位(O)位元被確認。
最後,在一實施例中,第一特定微指令553會使儲存格式中間結果150向量IRVector儲存於記憶體,在另一實施例會使其轉送,而在又一實施例,則會使其同時儲存與轉送。相同地,在一實施例中,第一特定微指令553會使捨入位元儲存於記憶體,在另一實施例中會使其轉送,而在又一實施例中,則會使其同時儲存與轉送。如此可使負責執行第一特定微指令之執行單元,在執行第一FMA微指令後而在執行第二微指令前,執行其他與FMA運算無關之運算。
第二特定微指令571提供一操作碼574並分別特定第一與第二輸入加法器運算元580與583。第二特定微指令571會促使FMA2運算執行。若是C之累加並非由第一特定微指令553造成,此運算還包含C與中間結果尾數之條件累加。第二特定微指令571並會產生FMA運算之最終捨入後結果。
第一累加數運算元580係將第一特定微指令553所產生之乘積作為其數值,第二累加數運算元583係將第一特定微
指令所指定之相同累加數值作為其數值。在一實施例中,第二特定微指令571之源運算元欄580係指向與第一特定微指令553之目標欄599相同之暫存器。第二特定微指令571並特定一目標暫存器577,在一實施例中,此目標暫存器與FMA指令535之目標欄541係為同一個暫存器。
結論
雖然此實施方式係在有效減法時提供1’補數之累加運算,熟習算術或浮點運算設計領域之技術者當可理解,在另一實施方式中,在有效減法時利用本發明之方法來使用2’補數之累加運算。
本發明具有許多優點。本發明相容於IEEE,並提供其他實施方式明顯無法提供之校正給所需之FMA算術結果,尤其是因應IEEE捨入運算之要求。
本發明透過維持可分別取用之乘法器與加法器單元,最大化供指令分配之各自獨立算術功能單元之可用性,而讓電腦處理器在一定實施成本下,可以更充分地開發指令平行處理。換言之,本發明讓最少的硬體達到最大可能性之同步利用,使其能以最快速度完成預期中最頻繁的運算,此處理方式可改善算數運算結果之產出。透過將所需之特定類型的第一與第二(或更多)微指令進行分配,並使其以暫時性與/或物理性各自獨立之方式分別執行,因此,雖然此等用於FMA之第一微指令會被分配至乘法功能單元執行,第二或其他更多無關的微指令則可同時被分配至一個或多個加法功能單元。
同樣地,雖然此等用於FMA之第二微指令會配分配至功能方塊單元,任何需要乘法功能之其他無關的微指令則可同
時被分配至乘法功能單元。
如此,依據所需之整體效能與所需之系統指令平行處理能力,所提供之乘法與加法功能單元的數量可更具彈性。因而相較於一個整體的FMA硬體,可減少每個功能單元之設置成本。電腦系統重排微指令之能力也會提升,而能降低成本與功耗。
相較於其他設計,本發明不需要使用大型或特殊目的之硬體即可減少指令延遲。其他FMA硬體實施之設計都需要使用大型與複雜的電路功能,如先行標準化運算(anticipatory normalization)、先行加法運算、先行符號運算、與複雜之捨入電路。這些複雜元件常常會成為最終設計中關鍵的耗時路徑、會在運算過程中消耗額外的能量、並在物理上會佔據電路設置空間。
本發明不需在大型的FMA硬體內設置特殊旁路電路或模態以減少如先前技術所提供之簡單加法或乘法指令之延遲。
本發明之其他實施方式,可在特殊類型之第一微指令的執行過程,執行或多或少之算術運算,可在特殊類型之第二微指令的執行過程,執行或多或少之算術運算。亦即配置給這些微指令之運算可為不同。如此,其他這些實施方式可對任一/任何需要之獨立運算單元進行或多或少之調整。如此,這些其他實施方式可儲存或多或少之中間結果於捨入快取內,並可將或多或少之中間結果轉送至第二為指令。
其他實施方式中,所述之捨入快取可為可定址暫存器位元、內容可存取記憶體、佇列儲存空間、或對映功能。
其他實施方式可提供多個獨立的硬體或執行單元來執行第一微指令,與/或提供多個獨立的硬體或執行單元來執行第二微指令。同樣地,如果有利的話,這些實施方式也可以提供多
個捨入快取給不同之源碼指令流或資料流、或是多核電腦處理器之各種實施方式。
此實施方式係用於超純量、非循序指令分配,不過其他實施方式亦可用於依序指令分配之情形,例如,透過從指令快取移除以及提供至資料轉送網路之過程,可將指令從所提供之乘法運算單元分配至獨立的加法運算單元。本發明對於FMA運算分類之例示,以及本發明提及之所需最少量硬體調整,在依序指令分配之應用中,亦有其優點。雖然本說明書係將FMA運算區分為五個類型,不過其他劃分方式,無論是較少、較多、與/或使用不同類型,均屬本發明之範疇。
此外,雖然本說明書中已描述不同之調整後的乘法與加法單元以執行FMA運算,在本發明之一實施例中,亦可使用一乘積-累加單元因應第一乘積-累加指令來執行第一乘積-累加子運算,並將其結果係儲存至外部儲存空間,而此乘積-累加單元會再因應第二乘積-累加指令來執行第二乘積-累加子運算。
本發明可用於FAM運算之單指令流多數據(SIMD)實施方式,此等方式有時會被稱為向量指令類型或向量FMA運算。並且此方式會有多個調整後的乘法器之實例與多個調整後的加法器之實例。在一實施例中,本發明使用單一捨入快取來配合一個SIMD應用之需求。而在另一實施例中,則可使用多個捨入快取來配合多個SIMD應用之需求。
雖然本發明係關於需要一乘法運算連同後續加法或累加運算之浮點融合乘法加法運算,不過,本發明所提供之方法亦可用於其他實施方式,尤其是針對某些中間結果使用快取之技術、針對需要兩個以上連鎖(chained)的算術運算之計算、針對不
同算術運算、或以不同順序執行這些算術運算。舉例來說,某些時候可能需要將這些方法應用於其他算術運算之混合(即,涉及兩個以上之算術操作子或三個以上之運算元的算術運算),例如連鎖的乘法-乘法-加法運算或乘法-加法-加法運算,以提升算術準確性或提升運算產出。此外,從其他面向來看,本發明亦可應用於整數算術運算。舉例來說,捨入至特定位元位置之整數運算可區分為第一與第二子運算,其中第一子運算產生一未經捨入之中間結果,而第二子運算由此未經捨入之中間結果產生一經捨入之最終結果。依此,在需要時,其他實施方式可將不同之狀態位元記錄於快取機制內。
本說明書關於捨入位元與其他內部位元之描述係為利於說明本發明之精神,本發明當可用於其他類型之指標,包含捨入運算相關或運算控制相關之變數的不同編碼表現形式。此外,針對說明書中將變數描述為具有“二進位數一”(也就是邏輯一)的許多段落,此描述係包含具有“二進位數零”(也就是邏輯零)之變數的等效布林實施方式,並包含這些變數之其他表示方式。相同地,針對說明書中將變數描述為具有“二進位數零”(也就是邏輯零)的許多段落,此描述係包含具有“二進位數一”(也就是邏輯一)之變數的等效布林實施方式,並包含這些變數之其他表示方式。此外,依據本說明書當可理解,在本文中,累加係包含加法加總與加法差之情形。
此外,依據本說明書當可理解,在本文中,指令係包含架構指令與可由架構指令轉譯或轉換產生之微指令。同樣地,指令執行單元並非僅限於微處理器直接執行架構指令而未預先將其轉譯為微指令之情形。由於微指令亦屬指令之一種類型,
因此,指令執行單元也會包含微處理器先將指令集架構指令轉譯或轉換為微指令,而指令執行單元總是只執行微指令之情形。
在本說明書中,尾數與有效位數之用語可互用。其他如原始結果與中間結果之用語,係為區分在FMA運算之不同階段所產生之結果與表示方式。此外,在本說明書中,儲存格式中間結果之用語係包含一中間結果向量(意指一數的量)與複數個運算控制變數。這些用語不應被僵化或狹隘地解釋,而應依據申請人所表現出來的目的探究其實質,而理解這些用語依據前後文之不同可能指涉不同的事件。
第一與第三至六圖中的功能方塊係可描述為模組、電路、子電路、邏輯、與其他數位邏輯與微處理器設計之技術領域中常用於指稱由線路、電晶體與/或其他執行一個或多個功能之物理結構所構成之數位邏輯用語。本發明亦可涵蓋將說明書所描述功能以不同於說明書所描述之方式分派之其他替代實施方式。
下列參考文獻係納入本案以說明FMA設計之相關概念與並使本案發明能為讀者理解。
參考文獻:
Hokenek, Montoye, Cook, "Second-Generation RISC Floating Point with MultiplyAdd Fused", IEEE Journal Of Solid-State Circuits, Vol 25, No 5, Oct 1990.
Lang, Bruguera, "Floating-Point Multiply-Add-Fused with Reduced Latency", IEEE Trans On Computers, Vol 53, No 8, Aug 2004.
Bruguera, Lang, "Floating-Point Fused Multiply-Add: Reduced Latency for FloatingPoint Addition", Pub TBD - Exact
Title Important.
Vangal, Hoskote, Borkar, Alvanpour, "A 6.2-GFlops Floating-Point MultiplyAccumulator With Conditional Normalization", IEEE Jour. Of Solid-State Circuits, Vol 41, No 10, Oct 2006.
Galal, Horowitz, "Energy-Efficient Floating-Point Unit Design", IEEE Trans On Computers Vol 60, No 7, July 2011.
Srinivasan, Bhudiya, Ramanarayanan, Babu, Jacob, Mathew, Krishnamurthy, Erraguntla, "Split-path Fused Floating Point Multiply Accumulate (FPMAC)", 2013 Symp on Computer Arithmetic (paper).
Srinivasan, Bhudiya, Ramanarayanan, Babu, Jacob, Mathew, Krishnamurthy, Erraguntla, "Split-path Fused Floating Point Multiply Accumulate (FPMAC)", 2014 Symp on Computer Arithmetic, Austin TX, (slides from www.arithsymposium.org).
Srinivasan, Bhudiya, Ramanarayanan, Babu, Jacob, Mathew, Krishnamurthy, Erraguntla, United States Patent 8,577,948 (B2), Nov 5, 2013.
Quach, Flynn, "Suggestions For Implementing A Fast IEEE Multiply-Add-Fused Instruction", (Stanford) Technical Report CSL-TR-91-483 July, 1991.
Seidel, "Multiple Path IEEE Floating-Point Fused Multiply-Add", IEEE 2004.
Huang, Shen, Dai, Wang, "A New Architecture For Multiple-Precision FloatingPoint Multiply-Add Fused Unit Design",
Pub TBD, Nat'l University of Defense Tech, China (after) 2006.
Paidimarri, Cevrero, Brisk, Ienne, "FPGA Implementation of a Single-Precision Floating-Point Multiply-Accumulator with Single-Cycle Accumulation", Pub TBD.
Henry, Elliott, Parks, "X87 Fused Multiply-Add Instruction", United States Patent 7,917,568 (B2), Mar 29, 2011.
Walaa Abd El Aziz Ibrahim, "Binary Floating Point Fused Multiply Add Unit", Thesis Submitted to Cairo University, Giza, Egypt, 2012 (retr from Google).
Quinell, "Floating-Point Fused Multiply-Add Architectures", Dissertation Presented to Univ Texas at Austin, May 2007, (retr from Google).
Author Unknown, "AMD Athlon Processor Floating Point Capability", AMD White Paper Aug 28, 2000.
Cornea, Harrison, Tang, "Intel Itanium Floating-Point Architecture" Pub TBD.
Gerwig, Wetter, Schwarz, Haess, Krygowski, Fleischer, Kroener, "The IBM eServer z990 floating-point unit", IBM Jour Res & Dev Vol 48 No 3/4 May, July 2004.
Wait, "IBM PowerPC 440 FPU with complex-arithmetic extensions", IBM Jour Res & Dev Vol 49 No 2/3 March, May 2005.
Chatterjee, Bachega, et al, "Design and exploitation of a high-performance SIMD floating-point unit for Blue Gene/L", IBM Jour Res & Dev, Vol 49 No 2/3 March, May 2005.
藉由以上具體實施例之詳述,係希望能更加清楚描述本發明之特徵與精神,而並非以上述所揭露的具體實施例來對本發明之範疇加以限制。相反地,其目的是希望能涵蓋各種改變及具相等性的安排於本發明所欲申請之專利範圍的範疇內。
Claims (21)
- 一種微處理器中之方法,用以執行±A*B±C形式之融合乘積-累加運算,其中該A、該B與該C為輸入運算元,且在該C累加至該A與該B之乘積前,並不進行捨入運算,該方法包括:將該融合乘積-累加運算分路為一第一乘積-累加子運算與一第二乘積-累加子運算,由一或多個指令執行單元執行;在該第一乘積-累加子運算中,選擇將該A與該B之部份乘積-累加至該C、或是僅以該A與該B之部份乘積、再由此進行與該C之未捨入非冗餘總和;在該第一與第二乘積-累加子運算間,將該未捨入非冗餘總和儲存至記憶體中,以使一或多個指令執行單元執行其他與該乘積-累加運算無關之運算;其中,該記憶體設置於該一或多個指令執行單元外,並且包含一結果儲存空間用以儲存該未捨入非冗餘總和,以及一與該結果儲存空間不同且用以儲存複數個運算控制指標之運算控制指標儲存空間,該複數個運算控制指標指明該第二乘積-累加子運算中之接續運算該如何進行;在該第二乘積-累加子運算中,如果該第一乘積-累加子運算在產生該未捨入非冗餘總和時是未乘積累加該C時,則該C是以該未捨入非冗餘總和之方式乘積累加;以及在該第二乘積-累加子運算中,產生該融合乘積-累加運算之一最終捨入結果。
- 如申請專利範圍第1項所述之方法,其中,該融合乘積-累加運算係至少由二指令執行單元所執行。
- 如申請專利範圍第1項所述之方法,其中,該結果儲存空間耦接至一結果匯流排,該結果匯流排為該一或多個指令執行單元所共用。
- 如申請專利範圍第1項所述之方法,其中,該結果儲存空間為一重排緩衝器。
- 如申請專利範圍第1項所述之方法,其中,該運算控制指標儲存空間為一快取,其並未耦接至該結果匯流排、且僅為設定以執行該第一或第二乘積-累加子運算之該執行單元所共享。
- 一種微處理器中之方法,用以執行±A*B±C形式之融合乘積-累加運算,其中該A、該B與該C為輸入運算元,且在該C累加至該A與該B之乘積前,並不進行捨入運算,該方法包括;將該融合乘積-累加運算分路為一第一乘積-累加子運算與一第二乘積-累加子運算,由一或多個指令執行單元執行;在該第一乘積-累加子運算中,選擇將該A與該B之部份乘積-累加至該C、或是僅以該A與該B之部份乘積、再由此進行與該C之未捨入非冗餘總和;將該複數個運算控制指標自一第一指令執行單元傳送至一第二指令執行單元;其中,該運算控制指標係指明該第二乘積-累加子運算中之接續運算該如何進行;該運算控制指標係包括一指標,用以指明具有該C之一累加運算是否發生於該第一乘積-累加子運算中;在該第二乘積-累加子運算中,如果該第一乘積-累加子運算在產生該未捨入非冗餘總和時是未乘積累加該C時,則該C是以該未捨入非冗餘總和之方式乘積累加;以及在該第二乘積-累加子運算中,產生該融合乘積-累加運算之一最終捨入結果。
- 如申請專利範圍第6項所述之方法,其中,該運算控制指標包括用以自該未捨入非冗餘總和產生一算術上正確捨入結果之指標。
- 如申請專利範圍第6項所述之方法,更包括在該第一與第二乘積-累加子運算間,利用該一或多個指令執行單元執行其他運算。
- 如申請專利範圍第6項所述之方法,其中,該一或多個指令執行單元包括一設定為執行該第一乘積-累加子運算之乘法器、以及一設定為執行該第二乘積-累加子運算之加法器。
- 如申請專利範圍第1項所述之方法,其中,該一或多個指令執行單元包括一乘積-累加單元,該乘積-累加單元係對應一第一乘積-累加指令而執行該第一乘積-累加子運算、且對應一第二乘積-累加指令而執行該第二乘積-累加子運算。
- 一種可用於執行一具有±A*B±C之形式之融合乘積-累加運算之微處理器,其中,A、B與C為輸入運算元,且在該C累加至該A與該B之乘積前並不進行捨入運算,該微處理器包括:一或多個指令執行單元,設定為執行一融合乘積-累加運算之一第一乘積-累加子運算與一第二乘積-累加子運算;以及一記憶體,設置於該一或多個指令執行單元外、用以儲存由該第一乘積-累加子運算產生之該未捨入非冗餘總和;其中,在該第一乘積-累加子運算,選擇將該A與該B之部份乘積-累加至該C、或是僅以該A與該B之部份乘積、再由該選定產生一未捨入非冗餘總和;其中,在該第二乘積-累加子運算中,如果該第一乘積-累加子運算在產生該未捨入非冗餘總和時是未乘積累加該C時,則該C是條件式地乘積累加至該未捨入非冗餘總和;以及其中,在該第二乘積-累加子運算中,產生該融合乘積-累加運算之一最終捨入結果係由該未捨入非冗餘總和以條件式的方式與該C乘積累加;其中,該記憶體設定為在一未定時間區間內且直至執行該第二乘積-累加子運算後儲存該未捨入非冗餘總和,藉此,使該一或多個指令執行單元可於該第一與第二乘積-累加子運間、先去執行與該乘積-累加運算無關之其他運算。
- 如申請專利範圍第11項所述之微處理器,其中,該一或多個指令執行單元包括至少一第一指令執行單元與一第二指令執行單元。
- 如申請專利範圍第11項所述之微處理器,其中,該記憶體包括一用以儲存該未捨入非冗餘總和之結果儲存空間、以及一與該結果儲存空間不同且用以儲存複數個運算控制指標之運算控制指標儲存空間,該複數個運算控制指標指明該第二乘積-累加子運算中之接續運算該如何進行。
- 如申請專利範圍第11項所述之微處理器,其中,該運算控制指標包括一指標、用以指明具有該C之一累加運算是否發生於該第一乘積-累加子運算中。
- 如申請專利範圍第11項所述之微處理器,其中,該運算控制指標係包括用以自該未捨入非冗餘總和產生一算術上正確捨入結果之指標。
- 如申請專利範圍第11項所述之微處理器,其中,該結果儲存空間耦接至一與一重排緩衝器耦接之結果匯流排,該結果匯流排為該一或多個指令執行單元所共享。
- 如申請專利範圍第11項所述之微處理器,其中,該運算控制指標儲存空間為一快取,其並未耦接至該結果匯流排、且僅為設定以執行該第一或第二乘積-累加子運算之該執行單元所共享。
- 如申請專利範圍第11項所述之微處理器,其中,該一或多個指令執行單元包括一設定為執行該第一乘積-累加子運算之乘法器、以及一設定為執行該第二乘積-累加子運算之加法器。
- 如申請專利範圍第11項所述之微處理器,該一或多個指令執行單元包括一乘積-累加單元,該乘積累-加單元係對應一第一乘積-累加指令示而去執行該第一乘積-累加子運算、且對應一第二乘積-累加指令而去執行該第二乘積-累加子運算。
- 一種微處理器中之方法,可用於執行一具有±A*B±C之形式之融合乘積-累加運算,其中,該A、該B與該C為輸入運算元,該方法包括:選用該微處理器之一第一執行單元、以計算至少該A與該B之乘積、並產生一未捨入非冗餘中間結果向量;該第一執行單元產生一或多個運算控制指標、用以指明該第二執行單元中之接續運算該如何進行;將一未捨入非冗餘運算之中間結果向量傳送至一共享記憶體,該共享記憶體由該複數個執行單元所共享;將該一或多個運算控制指標儲存至該共享記憶體;以及選用該微處理器之一第二執行單元、以接收該未捨入非冗餘結果、以及產生一該±A*B±C之最終捨入結果;其中,該第二執行單元自該共享記憶體接收該未捨入非冗餘中間結果向量與該一或多個運算控制指標、並使用該未捨入結果與該運算控制指標產生該最終捨入結果。
- 一種微處理器中之方法,可用於執行一具有±A*B±C之形式之融合乘積-累加運算,其中,該A、該B與該C為輸入運算元,該方法包括:選用該微處理器之一第一執行單元、以計算至少該A與該B之乘積、並產生一未捨入非冗餘中間結果向量;自該第一執行單元之至少該A與該B之乘積運算中、產生一或多個捨入指標;將一未捨入非冗餘運算之中間結果向量傳送至一共享記憶體,該共享記憶體由該複數個執行單元所共享;其中,該第二執行單元於產生該最終捨入結果前、自該共享記憶體接收該未捨入非冗餘中間結果向量;將該一或多個捨入指標存入該共享記憶體;以及選用該微處理器之一第二執行單元、以接收該未捨入非冗餘結果、以及產生一該±A*B±C之最終捨入結果;其中,該第二執行單元自該記憶體接收該一或多個捨入指標、並使用該未捨入非冗餘中間結果向量與該一或多個捨入指標產生該最終捨入結果。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462020246P | 2014-07-02 | 2014-07-02 | |
US62/020246 | 2014-07-02 | ||
US201562173808P | 2015-06-10 | 2015-06-10 | |
US62/173808 | 2015-06-10 | ||
US14/748,870 US9778908B2 (en) | 2014-07-02 | 2015-06-24 | Temporally split fused multiply-accumulate operation |
US14/748870 | 2015-06-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201617849A TW201617849A (zh) | 2016-05-16 |
TWI638312B true TWI638312B (zh) | 2018-10-11 |
Family
ID=53502534
Family Applications (7)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW104121546A TWI638312B (zh) | 2014-07-02 | 2015-07-02 | 暫時分路融合乘積-累加運算 |
TW104121548A TWI650652B (zh) | 2014-07-02 | 2015-07-02 | 運算控制指標快取 |
TW104121550A TWI608410B (zh) | 2014-07-02 | 2015-07-02 | 標準格式中間結果 |
TW104121547A TWI634437B (zh) | 2014-07-02 | 2015-07-02 | 運算控制指標快取 |
TW104121552A TWI601019B (zh) | 2014-07-02 | 2015-07-02 | 融合複合算術運算之區分 |
TW104121545A TWI605384B (zh) | 2014-07-02 | 2015-07-02 | 非不可分割分路融合乘積-累加之微處理器與方法 |
TW104121551A TWI625671B (zh) | 2014-07-02 | 2015-07-02 | 微處理器與在微處理器中執行之方法 |
Family Applications After (6)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW104121548A TWI650652B (zh) | 2014-07-02 | 2015-07-02 | 運算控制指標快取 |
TW104121550A TWI608410B (zh) | 2014-07-02 | 2015-07-02 | 標準格式中間結果 |
TW104121547A TWI634437B (zh) | 2014-07-02 | 2015-07-02 | 運算控制指標快取 |
TW104121552A TWI601019B (zh) | 2014-07-02 | 2015-07-02 | 融合複合算術運算之區分 |
TW104121545A TWI605384B (zh) | 2014-07-02 | 2015-07-02 | 非不可分割分路融合乘積-累加之微處理器與方法 |
TW104121551A TWI625671B (zh) | 2014-07-02 | 2015-07-02 | 微處理器與在微處理器中執行之方法 |
Country Status (6)
Country | Link |
---|---|
US (7) | US10019229B2 (zh) |
EP (2) | EP2963538B1 (zh) |
JP (2) | JP6684713B2 (zh) |
CN (7) | CN106126189B (zh) |
TW (7) | TWI638312B (zh) |
WO (1) | WO2016003740A1 (zh) |
Families Citing this family (109)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9513906B2 (en) * | 2013-01-23 | 2016-12-06 | International Business Machines Corporation | Vector checksum instruction |
US9606803B2 (en) | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
US11106462B2 (en) * | 2019-05-24 | 2021-08-31 | Texas Instruments Incorporated | Method and apparatus for vector sorting |
US11432990B2 (en) | 2013-08-30 | 2022-09-06 | ISOS Solutions, LLC | Textured apparatus with therapeutic material incorporated therein and methods of manufacturing same |
US20150065928A1 (en) * | 2013-08-30 | 2015-03-05 | ISOS Solutions, LLC | Apparatus for Reducing the Appearance and Effects of Scars |
US11061672B2 (en) | 2015-10-02 | 2021-07-13 | Via Alliance Semiconductor Co., Ltd. | Chained split execution of fused compound arithmetic operations |
US10671347B2 (en) * | 2016-01-28 | 2020-06-02 | International Business Machines Corporation | Stochastic rounding floating-point multiply instruction using entropy from a register |
US10489152B2 (en) | 2016-01-28 | 2019-11-26 | International Business Machines Corporation | Stochastic rounding floating-point add instruction using entropy from a register |
US10282169B2 (en) | 2016-04-06 | 2019-05-07 | Apple Inc. | Floating-point multiply-add with down-conversion |
US10275243B2 (en) | 2016-07-02 | 2019-04-30 | Intel Corporation | Interruptible and restartable matrix multiplication instructions, processors, methods, and systems |
GB2553783B (en) | 2016-09-13 | 2020-11-04 | Advanced Risc Mach Ltd | Vector multiply-add instruction |
US10241757B2 (en) | 2016-09-30 | 2019-03-26 | International Business Machines Corporation | Decimal shift and divide instruction |
US10127015B2 (en) | 2016-09-30 | 2018-11-13 | International Business Machines Corporation | Decimal multiply and shift instruction |
US10078512B2 (en) * | 2016-10-03 | 2018-09-18 | Via Alliance Semiconductor Co., Ltd. | Processing denormal numbers in FMA hardware |
US20180121168A1 (en) * | 2016-10-27 | 2018-05-03 | Altera Corporation | Denormalization in multi-precision floating-point arithmetic circuitry |
CN109376113B (zh) * | 2016-11-03 | 2021-12-14 | 中科寒武纪科技股份有限公司 | Slam运算装置和方法 |
US10140092B2 (en) | 2016-11-04 | 2018-11-27 | Samsung Electronics Co., Ltd. | Closepath fast incremented sum in a three-path fused multiply-add design |
US10216479B2 (en) * | 2016-12-06 | 2019-02-26 | Arm Limited | Apparatus and method for performing arithmetic operations to accumulate floating-point numbers |
US10515302B2 (en) * | 2016-12-08 | 2019-12-24 | Via Alliance Semiconductor Co., Ltd. | Neural network unit with mixed data and weight size computation capability |
KR102649318B1 (ko) * | 2016-12-29 | 2024-03-20 | 삼성전자주식회사 | 상태 회로를 포함하는 메모리 장치와 그것의 동작 방법 |
US10303438B2 (en) * | 2017-01-16 | 2019-05-28 | International Business Machines Corporation | Fused-multiply-add floating-point operations on 128 bit wide operands |
US10452288B2 (en) * | 2017-01-19 | 2019-10-22 | International Business Machines Corporation | Identifying processor attributes based on detecting a guarded storage event |
GB2560159B (en) | 2017-02-23 | 2019-12-25 | Advanced Risc Mach Ltd | Widening arithmetic in a data processing apparatus |
US11360770B2 (en) | 2017-03-20 | 2022-06-14 | Intel Corporation | Systems, methods, and apparatuses for zeroing a matrix |
US10489877B2 (en) | 2017-04-24 | 2019-11-26 | Intel Corporation | Compute optimization mechanism |
US10055383B1 (en) * | 2017-04-28 | 2018-08-21 | Hewlett Packard Enterprise Development Lp | Matrix circuits |
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 |
CN107291420B (zh) | 2017-06-27 | 2020-06-05 | 上海兆芯集成电路有限公司 | 整合算术及逻辑处理的装置 |
CN107315710B (zh) | 2017-06-27 | 2020-09-11 | 上海兆芯集成电路有限公司 | 全精度及部分精度数值的计算方法及装置 |
US11275588B2 (en) | 2017-07-01 | 2022-03-15 | Intel Corporation | Context save with variable save state size |
US10235135B2 (en) | 2017-07-17 | 2019-03-19 | International Business Machines Corporation | Normalization of a product on a datapath |
US10387147B2 (en) | 2017-08-02 | 2019-08-20 | International Business Machines Corporation | Managing an issue queue for fused instructions and paired instructions in a microprocessor |
CN108958801B (zh) | 2017-10-30 | 2021-06-25 | 上海寒武纪信息科技有限公司 | 神经网络处理器及使用处理器执行向量最大值指令的方法 |
CN109783055B (zh) * | 2017-11-10 | 2021-02-12 | 瑞昱半导体股份有限公司 | 浮点数运算电路及方法 |
US10481869B1 (en) * | 2017-11-10 | 2019-11-19 | Apple Inc. | Multi-path fused multiply-add with power control |
US11023235B2 (en) | 2017-12-29 | 2021-06-01 | Intel Corporation | Systems and methods to zero a tile register pair |
US11809869B2 (en) | 2017-12-29 | 2023-11-07 | Intel Corporation | Systems and methods to store a tile register pair to memory |
US11816483B2 (en) | 2017-12-29 | 2023-11-14 | Intel Corporation | Systems, methods, and apparatuses for matrix operations |
US11669326B2 (en) | 2017-12-29 | 2023-06-06 | Intel Corporation | Systems, methods, and apparatuses for dot product operations |
US11789729B2 (en) | 2017-12-29 | 2023-10-17 | Intel Corporation | Systems and methods for computing dot products of nibbles in two tile operands |
US11093247B2 (en) | 2017-12-29 | 2021-08-17 | Intel Corporation | Systems and methods to load a tile register pair |
JP6863907B2 (ja) * | 2018-01-05 | 2021-04-21 | 日本電信電話株式会社 | 演算回路 |
CN108416431B (zh) * | 2018-01-19 | 2021-06-01 | 上海兆芯集成电路有限公司 | 神经网络微处理器与宏指令处理方法 |
CN108364065B (zh) * | 2018-01-19 | 2020-09-11 | 上海兆芯集成电路有限公司 | 采布斯乘法的微处理器 |
CN108363559B (zh) * | 2018-02-13 | 2022-09-27 | 北京旷视科技有限公司 | 神经网络的乘法处理方法、设备和计算机可读介质 |
CN111626413A (zh) * | 2018-03-14 | 2020-09-04 | 上海寒武纪信息科技有限公司 | 一种计算装置及方法 |
US10664287B2 (en) | 2018-03-30 | 2020-05-26 | Intel Corporation | Systems and methods for implementing chained tile operations |
DE102018209901A1 (de) * | 2018-06-19 | 2019-12-19 | Robert Bosch Gmbh | Recheneinheit, Verfahren und Computerprogramm zum Multiplizieren zumindest zweier Multiplikanden |
TWI831804B (zh) | 2018-07-17 | 2024-02-11 | 日商索尼股份有限公司 | 運算裝置、積和運算裝置、積和運算系統及積和運算方法 |
US11093579B2 (en) | 2018-09-05 | 2021-08-17 | Intel Corporation | FP16-S7E8 mixed precision for deep learning and other algorithms |
US12094456B2 (en) | 2018-09-13 | 2024-09-17 | Shanghai Cambricon Information Technology Co., Ltd. | Information processing method and system |
US10970076B2 (en) | 2018-09-14 | 2021-04-06 | Intel Corporation | Systems and methods for performing instructions specifying ternary tile logic operations |
US11579883B2 (en) | 2018-09-14 | 2023-02-14 | Intel Corporation | Systems and methods for performing horizontal tile operations |
US10866786B2 (en) | 2018-09-27 | 2020-12-15 | Intel Corporation | Systems and methods for performing instructions to transpose rectangular tiles |
US10719323B2 (en) | 2018-09-27 | 2020-07-21 | Intel Corporation | Systems and methods for performing matrix compress and decompress instructions |
US10990396B2 (en) | 2018-09-27 | 2021-04-27 | Intel Corporation | Systems for performing instructions to quickly convert and use tiles as 1D vectors |
US10963256B2 (en) | 2018-09-28 | 2021-03-30 | Intel Corporation | Systems and methods for performing instructions to transform matrices into row-interleaved format |
US10929143B2 (en) | 2018-09-28 | 2021-02-23 | Intel Corporation | Method and apparatus for efficient matrix alignment in a systolic array |
US10896043B2 (en) | 2018-09-28 | 2021-01-19 | Intel Corporation | Systems for performing instructions for fast element unpacking into 2-dimensional registers |
US10963246B2 (en) | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
CN111221496B (zh) * | 2018-11-26 | 2023-06-13 | 北京华航无线电测量研究所 | 一种使用fpga实现浮点数据累加的方法 |
CN111260069B (zh) * | 2018-11-30 | 2022-12-09 | 上海寒武纪信息科技有限公司 | 数据处理装置、方法、芯片及电子设备 |
US10929503B2 (en) | 2018-12-21 | 2021-02-23 | Intel Corporation | Apparatus and method for a masked multiply instruction to support neural network pruning operations |
US11886875B2 (en) | 2018-12-26 | 2024-01-30 | Intel Corporation | Systems and methods for performing nibble-sized operations on matrix elements |
US11294671B2 (en) | 2018-12-26 | 2022-04-05 | Intel Corporation | Systems and methods for performing duplicate detection instructions on 2D data |
US20200210517A1 (en) | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods to accelerate multiplication of sparse matrices |
US10922077B2 (en) | 2018-12-29 | 2021-02-16 | Intel Corporation | Apparatuses, methods, and systems for stencil configuration and computation instructions |
US10942985B2 (en) | 2018-12-29 | 2021-03-09 | Intel Corporation | Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions |
US11269630B2 (en) | 2019-03-29 | 2022-03-08 | Intel Corporation | Interleaved pipeline of floating-point adders |
US11016731B2 (en) | 2019-03-29 | 2021-05-25 | Intel Corporation | Using Fuzzy-Jbit location of floating-point multiply-accumulate results |
US10990397B2 (en) | 2019-03-30 | 2021-04-27 | Intel Corporation | Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator |
US11175891B2 (en) | 2019-03-30 | 2021-11-16 | Intel Corporation | Systems and methods to perform floating-point addition with selected rounding |
CN111814093A (zh) * | 2019-04-12 | 2020-10-23 | 杭州中天微系统有限公司 | 一种乘累加指令的处理方法和处理装置 |
US11403097B2 (en) | 2019-06-26 | 2022-08-02 | Intel Corporation | Systems and methods to skip inconsequential matrix operations |
US11334647B2 (en) | 2019-06-29 | 2022-05-17 | Intel Corporation | Apparatuses, methods, and systems for enhanced matrix multiplier architecture |
US10825512B1 (en) | 2019-08-27 | 2020-11-03 | Nxp Usa, Inc. | Memory reads of weight values |
US11934824B2 (en) | 2019-09-05 | 2024-03-19 | Micron Technology, Inc. | Methods for performing processing-in-memory operations, and related memory devices and systems |
US11693657B2 (en) * | 2019-09-05 | 2023-07-04 | Micron Technology, Inc. | Methods for performing fused-multiply-add operations on serially allocated data within a processing-in-memory capable memory device, and related memory devices and systems |
US11829729B2 (en) | 2019-09-05 | 2023-11-28 | Micron Technology, Inc. | Spatiotemporal fused-multiply-add, and related systems, methods and devices |
US11288220B2 (en) * | 2019-10-18 | 2022-03-29 | Achronix Semiconductor Corporation | Cascade communications between FPGA tiles |
US11119772B2 (en) | 2019-12-06 | 2021-09-14 | International Business Machines Corporation | Check pointing of accumulator register results in a microprocessor |
US11714875B2 (en) | 2019-12-28 | 2023-08-01 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
CN116594589B (zh) * | 2019-12-31 | 2024-03-26 | 华为技术有限公司 | 浮点数乘法计算的方法、装置和算术逻辑单元 |
US11182159B2 (en) | 2020-02-26 | 2021-11-23 | Google Llc | Vector reductions using shared scratchpad memory |
CN113391788B (zh) * | 2020-03-11 | 2024-01-26 | 芯立嘉集成电路(杭州)有限公司 | 存储器内算术处理器及存储器内算术处理方法 |
CN113721886B (zh) * | 2020-05-25 | 2024-08-27 | 瑞昱半导体股份有限公司 | 对数计算电路的操作方法及对数计算电路 |
WO2021250689A1 (en) * | 2020-06-12 | 2021-12-16 | Gulzar Singh | Novel hardware accelerator circuit for bit-level operations in a microcontroller |
US11537861B2 (en) | 2020-06-23 | 2022-12-27 | Micron Technology, Inc. | Methods of performing processing-in-memory operations, and related devices and systems |
US11972230B2 (en) | 2020-06-27 | 2024-04-30 | Intel Corporation | Matrix transpose and multiply |
US12112167B2 (en) | 2020-06-27 | 2024-10-08 | Intel Corporation | Matrix data scatter and gather between rows and irregularly spaced memory locations |
TWI746126B (zh) * | 2020-08-25 | 2021-11-11 | 創鑫智慧股份有限公司 | 矩陣乘法裝置及其操作方法 |
US11941395B2 (en) | 2020-09-26 | 2024-03-26 | Intel Corporation | Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions |
US11029920B1 (en) * | 2020-10-21 | 2021-06-08 | Chariot Technologies Lab, Inc. | Execution of a conditional statement by an arithmetic and/or bitwise unit |
US12001887B2 (en) | 2020-12-24 | 2024-06-04 | Intel Corporation | Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator |
US12001385B2 (en) | 2020-12-24 | 2024-06-04 | Intel Corporation | Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator |
WO2022150058A1 (en) * | 2021-01-07 | 2022-07-14 | Groq, Inc. | Numerical precision in digital multiplier circuitry |
US11663004B2 (en) | 2021-02-26 | 2023-05-30 | International Business Machines Corporation | Vector convert hexadecimal floating point to scaled decimal instruction |
US11360769B1 (en) | 2021-02-26 | 2022-06-14 | International Business Machines Corporation | Decimal scale and convert and split to hexadecimal floating point instruction |
US20220405556A1 (en) * | 2021-06-17 | 2022-12-22 | International Business Machines Corporation | Single function to perform combined matrix multiplication and bias add operations |
US11625244B2 (en) * | 2021-06-22 | 2023-04-11 | Intel Corporation | Native support for execution of get exponent, get mantissa, and scale instructions within a graphics processing unit via reuse of fused multiply-add execution unit hardware logic |
US20230004389A1 (en) * | 2021-06-25 | 2023-01-05 | Intel Corporation | Vector processor utilizing massively fused operations |
US20230004523A1 (en) * | 2021-06-30 | 2023-01-05 | Amazon Technologies, Inc. | Systolic array with input reduction to multiple reduced inputs |
US12008369B1 (en) | 2021-08-31 | 2024-06-11 | Apple Inc. | Load instruction fusion |
US20230129750A1 (en) | 2021-10-27 | 2023-04-27 | International Business Machines Corporation | Performing a floating-point multiply-add operation in a computer implemented environment |
US12034844B1 (en) * | 2021-12-06 | 2024-07-09 | Amazon Technologies, Inc. | Techniques for performing compound operations on security modules |
CN116094680B (zh) * | 2023-01-05 | 2024-08-30 | 惠州研控自动化科技有限公司 | 多通道数据传输方法、系统、设备及存储介质 |
CN117149099B (zh) * | 2023-10-31 | 2024-03-12 | 江苏华鲲振宇智能科技有限责任公司 | 一种计算存储分体式服务器系统及控制方法 |
CN118245017B (zh) * | 2023-11-02 | 2024-09-17 | 芯立嘉集成电路(杭州)有限公司 | 存储器内二进位浮点乘法装置及其操作方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW405093B (en) * | 1996-10-16 | 2000-09-11 | Hitachi Ltd | Data processor and data processing system |
US6233672B1 (en) * | 1997-03-06 | 2001-05-15 | Advanced Micro Devices, Inc. | Piping rounding mode bits with floating point instructions to eliminate serialization |
US20110072066A1 (en) * | 2009-09-21 | 2011-03-24 | Arm Limited | Apparatus and method for performing fused multiply add floating point operation |
US20120072703A1 (en) * | 2010-09-20 | 2012-03-22 | Suresh Srinivasan | Split path multiply accumulate unit |
US20120215823A1 (en) * | 2011-02-17 | 2012-08-23 | Arm Limited | Apparatus and method for performing floating point addition |
US20140122555A1 (en) * | 2012-10-31 | 2014-05-01 | Brian Hickmann | Reducing power consumption in a fused multiply-add (fma) unit responsive to input data values |
Family Cites Families (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB1527289A (en) * | 1976-08-17 | 1978-10-04 | Int Computers Ltd | Data processing systems |
US4974198A (en) | 1986-07-16 | 1990-11-27 | Nec Corporation | Vector processing system utilizing firm ware control to prevent delays during processing operations |
JPH01119861A (ja) * | 1987-11-02 | 1989-05-11 | Sharp Corp | ディジタル信号処理用lsi |
JPH04177527A (ja) * | 1990-11-09 | 1992-06-24 | Hitachi Ltd | 演算処理回路 |
US5375078A (en) | 1992-12-15 | 1994-12-20 | International Business Machines Corporation | Arithmetic unit for performing XY+B operation |
US5347481A (en) | 1993-02-01 | 1994-09-13 | Hal Computer Systems, Inc. | Method and apparatus for multiplying denormalized binary floating point numbers without additional delay |
EP0681236B1 (en) | 1994-05-05 | 2000-11-22 | Conexant Systems, Inc. | Space vector data path |
JP2987308B2 (ja) * | 1995-04-28 | 1999-12-06 | 松下電器産業株式会社 | 情報処理装置 |
GB9513115D0 (en) | 1995-06-28 | 1995-08-30 | Biochemie Sa | Organic compounds |
US5867413A (en) * | 1995-10-17 | 1999-02-02 | Hitachi Micro Systems, Inc. | Fast method of floating-point multiplication and accumulation |
US5880983A (en) | 1996-03-25 | 1999-03-09 | International Business Machines Corporation | Floating point split multiply/add system which has infinite precision |
JPH09325953A (ja) * | 1996-06-06 | 1997-12-16 | Hitachi Ltd | プロセッサおよびデータ処理装置 |
KR100291383B1 (ko) * | 1996-11-18 | 2001-09-17 | 윤종용 | 디지털신호처리를위한명령을지원하는모듈계산장치및방법 |
US5880984A (en) * | 1997-01-13 | 1999-03-09 | International Business Machines Corporation | Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments |
US6094668A (en) | 1997-10-23 | 2000-07-25 | Advanced Micro Devices, Inc. | Floating point arithmetic unit including an efficient close data path |
US6611856B1 (en) * | 1999-12-23 | 2003-08-26 | Intel Corporation | Processing multiply-accumulate operations in a single cycle |
US20040098439A1 (en) | 2000-02-22 | 2004-05-20 | Bass Stephen L. | Apparatus and method for sharing overflow/underflow compare hardware in a floating-point multiply-accumulate (FMAC) or floating-point adder (FADD) unit |
US7117372B1 (en) | 2000-11-28 | 2006-10-03 | Xilinx, Inc. | Programmable logic device with decryption and structure for preventing design relocation |
US7080111B2 (en) | 2001-06-04 | 2006-07-18 | Intel Corporation | Floating point multiply accumulator |
US6779013B2 (en) | 2001-06-04 | 2004-08-17 | Intel Corporation | Floating point overflow and sign detection |
US6947962B2 (en) | 2002-01-24 | 2005-09-20 | Intel Corporation | Overflow prediction algorithm and logic for high speed arithmetic units |
EP1512100A2 (en) * | 2002-05-24 | 2005-03-09 | Koninklijke Philips Electronics N.V. | A scalar/vector processor |
US7689641B2 (en) | 2003-06-30 | 2010-03-30 | Intel Corporation | SIMD integer multiply high with round and shift |
GB2411975B (en) | 2003-12-09 | 2006-10-04 | Advanced Risc Mach Ltd | Data processing apparatus and method for performing arithmetic operations in SIMD data processing |
US7433911B2 (en) | 2004-12-21 | 2008-10-07 | Arm Limited | Data processing apparatus and method for performing floating point addition |
US7401107B2 (en) | 2004-12-22 | 2008-07-15 | Arm Limited | Data processing apparatus and method for converting a fixed point number to a floating point number |
US7730117B2 (en) * | 2005-02-09 | 2010-06-01 | International Business Machines Corporation | System and method for a floating point unit with feedback prior to normalization and rounding |
US7461117B2 (en) | 2005-02-11 | 2008-12-02 | International Business Machines Corporation | Floating point unit with fused multiply add and method for calculating a result with a floating point unit |
US20070038693A1 (en) | 2005-08-10 | 2007-02-15 | Christian Jacobi | Method and Processor for Performing a Floating-Point Instruction Within a Processor |
JP4956950B2 (ja) * | 2005-09-29 | 2012-06-20 | ソニー株式会社 | 反射型スクリーン |
US7912887B2 (en) * | 2006-05-10 | 2011-03-22 | Qualcomm Incorporated | Mode-based multiply-add recoding for denormal operands |
US8429384B2 (en) | 2006-07-11 | 2013-04-23 | Harman International Industries, Incorporated | Interleaved hardware multithreading processor architecture |
US9223751B2 (en) * | 2006-09-22 | 2015-12-29 | Intel Corporation | Performing rounding operations responsive to an instruction |
US8321849B2 (en) * | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US8443029B2 (en) | 2007-03-01 | 2013-05-14 | International Business Machines Corporation | Round for reround mode in a decimal floating point instruction |
US7917568B2 (en) | 2007-04-10 | 2011-03-29 | Via Technologies, Inc. | X87 fused multiply-add instruction |
US8037118B2 (en) | 2007-04-10 | 2011-10-11 | Eric Quinnell | Three-path fused multiply-adder circuit |
US8046399B1 (en) | 2008-01-25 | 2011-10-25 | Oracle America, Inc. | Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module |
US20090248769A1 (en) | 2008-03-26 | 2009-10-01 | Teck-Kuen Chua | Multiply and accumulate digital filter operations |
US8046400B2 (en) * | 2008-04-10 | 2011-10-25 | Via Technologies, Inc. | Apparatus and method for optimizing the performance of x87 floating point addition instructions in a microprocessor |
US9507656B2 (en) * | 2009-04-16 | 2016-11-29 | Oracle America, Inc. | Mechanism for handling unfused multiply-accumulate accrued exception bits in a processor |
JP5491071B2 (ja) * | 2009-05-20 | 2014-05-14 | エヌイーシーコンピュータテクノ株式会社 | 命令融合演算装置および命令融合演算方法 |
US8386755B2 (en) | 2009-07-28 | 2013-02-26 | Via Technologies, Inc. | Non-atomic scheduling of micro-operations to perform round instruction |
CN101930354B (zh) * | 2009-07-28 | 2014-03-12 | 威盛电子股份有限公司 | 微处理器及其执行指令的方法 |
CN101825998B (zh) * | 2010-01-22 | 2012-09-05 | 龙芯中科技术有限公司 | 向量复数乘法运算的处理方法及相应的装置 |
US8914430B2 (en) | 2010-09-24 | 2014-12-16 | Intel Corporation | Multiply add functional unit capable of executing scale, round, GETEXP, round, GETMANT, reduce, range and class instructions |
CN101986264B (zh) * | 2010-11-25 | 2013-07-31 | 中国人民解放军国防科学技术大学 | 用于simd向量微处理器的多功能浮点乘加运算装置 |
US8671129B2 (en) | 2011-03-08 | 2014-03-11 | Oracle International Corporation | System and method of bypassing unrounded results in a multiply-add pipeline unit |
US9213523B2 (en) * | 2012-06-29 | 2015-12-15 | Intel Corporation | Double rounded combined floating-point multiply and add |
US8892619B2 (en) * | 2012-07-24 | 2014-11-18 | The Board Of Trustees Of The Leland Stanford Junior University | Floating-point multiply-add unit using cascade design |
US11061672B2 (en) | 2015-10-02 | 2021-07-13 | Via Alliance Semiconductor Co., Ltd. | Chained split execution of fused compound arithmetic operations |
-
2015
- 2015-06-24 CN CN201610726893.7A patent/CN106126189B/zh active Active
- 2015-06-24 CN CN201580003388.3A patent/CN105849690B/zh active Active
- 2015-06-24 CN CN201610722812.6A patent/CN106406810B/zh active Active
- 2015-06-24 CN CN201610722859.2A patent/CN106293610B/zh active Active
- 2015-06-24 CN CN201610726133.6A patent/CN106325811B/zh active Active
- 2015-06-24 US US14/748,924 patent/US10019229B2/en active Active
- 2015-06-24 US US14/748,956 patent/US10019230B2/en active Active
- 2015-06-24 US US14/749,050 patent/US9891886B2/en active Active
- 2015-06-24 US US14/749,002 patent/US9798519B2/en active Active
- 2015-06-24 CN CN201610726151.4A patent/CN106339202B/zh active Active
- 2015-06-24 US US14/748,870 patent/US9778908B2/en active Active
- 2015-06-24 CN CN201610722858.8A patent/CN106325810B/zh active Active
- 2015-06-24 WO PCT/US2015/037508 patent/WO2016003740A1/en active Application Filing
- 2015-06-24 US US14/749,088 patent/US9891887B2/en active Active
- 2015-06-24 JP JP2016538834A patent/JP6684713B2/ja active Active
- 2015-06-24 US US14/748,817 patent/US9778907B2/en active Active
- 2015-07-01 EP EP15174801.9A patent/EP2963538B1/en active Active
- 2015-07-01 EP EP15174805.0A patent/EP2963539B1/en active Active
- 2015-07-02 TW TW104121546A patent/TWI638312B/zh active
- 2015-07-02 TW TW104121548A patent/TWI650652B/zh active
- 2015-07-02 TW TW104121550A patent/TWI608410B/zh active
- 2015-07-02 TW TW104121547A patent/TWI634437B/zh active
- 2015-07-02 TW TW104121552A patent/TWI601019B/zh active
- 2015-07-02 TW TW104121545A patent/TWI605384B/zh active
- 2015-07-02 TW TW104121551A patent/TWI625671B/zh active
- 2015-11-20 JP JP2015227713A patent/JP6207574B2/ja active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW405093B (en) * | 1996-10-16 | 2000-09-11 | Hitachi Ltd | Data processor and data processing system |
US6233672B1 (en) * | 1997-03-06 | 2001-05-15 | Advanced Micro Devices, Inc. | Piping rounding mode bits with floating point instructions to eliminate serialization |
US20110072066A1 (en) * | 2009-09-21 | 2011-03-24 | Arm Limited | Apparatus and method for performing fused multiply add floating point operation |
US20120072703A1 (en) * | 2010-09-20 | 2012-03-22 | Suresh Srinivasan | Split path multiply accumulate unit |
US20120215823A1 (en) * | 2011-02-17 | 2012-08-23 | Arm Limited | Apparatus and method for performing floating point addition |
US20140122555A1 (en) * | 2012-10-31 | 2014-05-01 | Brian Hickmann | Reducing power consumption in a fused multiply-add (fma) unit responsive to input data values |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI638312B (zh) | 暫時分路融合乘積-累加運算 | |
Del Barrio et al. | Ultra-low-power adder stage design for exascale floating point units |