TWI547868B - 用於向量前導零、向量尾隨零、向量運算元1計數及向量奇偶性計算之功能單元 - Google Patents
用於向量前導零、向量尾隨零、向量運算元1計數及向量奇偶性計算之功能單元 Download PDFInfo
- Publication number
- TWI547868B TWI547868B TW100133946A TW100133946A TWI547868B TW I547868 B TWI547868 B TW I547868B TW 100133946 A TW100133946 A TW 100133946A TW 100133946 A TW100133946 A TW 100133946A TW I547868 B TWI547868 B TW I547868B
- Authority
- TW
- Taiwan
- Prior art keywords
- vector
- instruction
- operand
- functional unit
- logic
- Prior art date
Links
- 239000013598 vector Substances 0.000 title claims description 173
- 239000004065 semiconductor Substances 0.000 claims description 15
- 238000000034 method Methods 0.000 claims description 12
- 230000001568 sexual effect Effects 0.000 claims 1
- 239000000047 product Substances 0.000 description 12
- 238000007792 addition Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000002457 bidirectional effect Effects 0.000 description 1
- 239000006227 byproduct Substances 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000010409 thin film Substances 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
-
- 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
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string 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/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
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 Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
- Detection And Correction Of Errors (AREA)
- Advance Control (AREA)
Description
一般言之,本發明與電腦系統有關,且更明確地說,與用來實施向量乘加指令及使用用來計算向量乘加指令結果之邏輯方塊之其它指令的處理器架構有關。
在電腦科學的領域中,處理器架構被廣泛地公認為“純量”與“向量”兩大類型。純量處理器被設計用來執行對單組資料實施操作的指令,而向量處理器被設計用來執行對多組資料實施操作的指令。圖1A與1B呈現的比較例用來說明純量處理器與向量處理器之間的基本差異。
圖1A顯示純量AND指令的例子,其中,單運算元組A與B被AND在一起,產生了單一(或“純量”)結果C(即,AB=C)。反之,圖1B顯示向量AND指令的例子,其中,兩個運算元組A/B與D/E分別地被平行AND在一起而同時產生向量結果C、F(即A.AND.B=C與D.AND.E=F)。
如熟知的習知技術,典型上,輸入的運算元與輸出的結果都被儲存在專屬的暫存器中。例如,很多指令具有2個輸入運算元。因此,將會使用2個分開的輸入暫存器來分別暫時儲存輸入運算元。此外,這些相同的指令將產生一輸出值,其將暫時儲存在第三(結果)暫存器中。如圖1A與1B中所見,個別的輸入暫存器101a、101b與102a、102b與結果暫存器103a、103b。須注意,“純量”對“向量”之特徵很容易辨別。
亦即,圖1A中所見之純量設計的輸入暫存器101a與102a僅保持純量值(分別為A與B)。同樣地,圖1A中亦見到純量設計的結果暫存器103a也僅保持純量值(C)。反之,圖1B中所見之向量系統的輸入暫存器101b與102b保持向量(A,D在暫存器101b中,及B,E在暫存器102b中)。同樣地,圖1B中亦見到向量系統的結果暫存器103b也保持向量值(C,F)。按照術語,圖1B之向量系統之每一個暫存器101b、102b、與103b的內容,可統稱為“向量”,且向量中之個別純量值的每一個都可稱為“元素”。因此,例如,所見的暫存器101b儲存“向量”A,D,其是由“元素”A與“元素”D所組成。
如吾人所熟知,實際上以半導體晶片處理器實施的單處理器指令僅純量或SIMD乘法運算。習知以半導體晶片處理器來實施的純量或SIMD乘法指令包括“乘法(multiply)”指令(MUL),其提供兩整數輸入運算元之乘積的低階位元,以及“乘法高(multiply high)”指令(MULH),其提供純量整數乘法運算的高階位元。
吾人熟知已在半導體晶片處理器中當成純量或SIMD指令來實施的其它指令包括“計數前導零”CLZ指令、“計數尾隨零”指令CTZ、以及“計數”指令CNT。純量CLZ指令接受純量輸入A,並回傳在A中位於最高階1之前方的0數量(例如,如果A=1000,則結果是CLZ=0;如果A=0100,則結果是CLZ=1;如果A=0010,則結果是CLZ=2;等)。純量CTZ指令接受純量輸入A,並回傳在A中位於最低階1之後方的0數量(例如,如果A=1000,則結果是CTZ=3;如果A=0100,則結果是CTZ=2;如果A=0010,則結果是CTZ=1;等)。純量CNT指令接受純量輸入A,並回傳A中1的數量(例如,如果A=1011,則結果是CLZ=3;如果A=1001,則結果是CLZ=2;如果A=0010,則結果是CLZ=1;等)。
某些電腦系統會要求“乘加”運算。乘加運算實行(A*B)+C計算,其中A、B、與C每一個都是輸入運算元。圖2顯示能實施向量乘加指令(VMADD)之向量處理功能單元200的高階架構視圖。如圖2中所見,功能單元包括N個純量邏輯單元200_1至200_N,每一個單元對各自的輸入向量的元素實施純量乘加運算。在此,輸入暫存器203保持輸入向量A=A_1,A_2,...A_N;輸入暫存器204保持輸入向量B=B_1,B_2,...B_N;及輸入暫存器205保持輸入向量C=C_1,C_2,...C_N。純量邏輯單元200_1實施((A_1)*(B_1))+C_1的計算;純量邏輯單元200_2實施((A_2)*(B_2))+C_2的計算;...;以及,純量邏輯單元200_N實施((A_N)*(B_N))+C_N的計算。在實施例中,每一個純量邏輯單元支援32位元運算元運算模式與64位元運算元運算模式。由邏輯單元200_1至200_N所產生的各個結果202_1至202_N,對應於由向量功能單元200所提供之輸出向量的各個元素,其被儲存在輸出暫存器中。
圖2亦顯示為了產生與SIMD運算相對的向量運算,要在輸出電路206中加入遮罩層。向量運算與SIMD運算的區別,就意義上來說,輸入之運算元的維度,對向量機而言為變數,但對SIMD機則為固定。改變圖2之向量機中元素之數量的能力,係藉由可在輸出206處所實施的遮罩來呈現。更明確地說,每一個輸出元素可用其自已各自的寫入邏輯電路(未顯示)來寫入。在實施例中,寫入邏輯電路可寫到任何的輸出元素位置。藉由僅為這些對應於有效向量運算元元素的元素致能寫入邏輯電路,即可處理可變長度向量。本質上,此具有僅致能那些對應於有效向量元素之純量功能單元200_1至200_N之操作的效果。此外,遮罩能夠為要被呈現的有效元素偵測任何的算術例外,同時,為停用的元素抑制例外。
如下文中進一步詳細的描述,除了計算向量乘加指令,功能單元200也能夠計算若干其它的向量指令,諸如以下的一或更多個指令:i)用於整數運算元的向量乘加高指令((vector multiply add high instruction),VMADDH),其提供向量乘加計算的較高階位元;ii)用於整數運算元的向量乘加指令VMADDL),其提供向量乘加計算的較低階位元;iii)向量計數前導零指令(VCLZ),其接受輸入向量C,並提供做為結果的輸出向量,輸出向量的元素分別對應於輸入向量C之元素的前導零計數;iv)向量計數尾隨零指令(VCTZ),其接受輸入向量C,並提供做為結果的輸出向量,輸出向量的元素分別對應於輸入向量C之元素的尾隨零計數;v)向量計數指令(VCNT),其接受輸入向量C,並提供做為結果的輸出向量,輸出向量的各個元素分別對應於輸入向量C之各個元素內之1的計數;及,vi)向量奇偶性指令(VPAR),其接受輸入向量C,並提供做為結果的輸出向量,輸出向量的各個元素分別對應於輸入向量C之各個元素的奇偶性狀態(奇或偶)。與VMADD指令一樣,以上所列舉的每一個指令,係藉由向量輸入A、B、及C之各個輸入運算元元素的純量執行來完成。在另些實施例中,再次如以下更詳細的描述,藉由功能單元200所執行的任何/所有指令,都是對浮點及整數運算元做運算。
圖3顯示圖2之其中一個純量邏輯單元的實施例。如目前所描述,純量邏輯單元有能力對輸入向量A、B、及C之各個元素實施純量運算來支援前述的VMADD、VMADDH、VMADDL、VCLZ、VTLZ、VCNT、及VPAR任何指令。
現描述當輸入向量A、B、C之元素及輸出向量R之元素都被指定為浮點形式時,VMADD指令的運算。如習知技術,在浮點中之數值採(符號)*(尾數)*(指數)之形式的連接方式,其中,符號(sign)值指示該數值為正或負,尾數(mantissa)的值指定該值的“數字”,指數(exponent)值指定該值的量級。於是,VMADD指令可表示如下((A_sgn)(B_sgn)(A_mantissa)(B_mantissa)(A_exponent+B_exponent))+(C_sgn)(C_mantissa)(C_exponent)。
現請參考圖3,乘法器301計算(A_sgn)(B_sgn)(A_mantissa)(B_mantissa)項至少如同(A_mantissa)(B_mantissa)的顯式計算。乘積的符號可以很容易地計算如:i)如果A_sgn與B_sgn具有相同的值,則符號為正;或ii)如果A_sgn與B_sgn具有不同的值,則符號為負。乘積指數方塊302藉由取i)(A_exponent+B_exponent);與ii)C_exponent之較大者來為最終結果決定指數的初始計算。亦即,如果C值遠大於A與B的乘積,則C項的量級將控制最終結果的量級。同樣地,如果AB遠大於C,則AB的量級將控制最終結果的量級。
加法器305實施AB+C計算的加法。不過,須注意,在實施例中,在實施浮點形式的加法之前,要先使AB項的指數(亦即,與乘法器301之輸出相關的指數)與C項的指數相同。指數差方塊303與移位器304用來實行此項處理。更明確地說,指數差方塊303取AB項之指數與C項之指數間的差(即,i)(A_exponent+B_exponent);與ii)C_exponent間之差)。也識別兩項中較小者(例如,藉由分析乘積指數方塊302的輸出)。兩項中較小者之尾數之二進制點的位置,亦即,無論AB乘積項或C項之指數項何者較小,其尾數之二進制點的位置“向左”移位若干個位元位置,其移位量對應於藉由指數差方塊303所決定之兩項間的指數差。經移位的項與另一未經移位的項被傳送到加法器305。
如例所示,如果AB乘積項對應於5.5555E8且C項對應於2.2222E6,則C項之尾數(2.2222)的二進制點位置,要藉由移位器304向左移兩個位置(0.02222),以便加法器305能將兩個具有相同指數值的數字之尾數正確地相加。在本例中,加法器305將5.5555E8與0.02222E8正確地相加。因此,在實施例中,移位器304耦接於指數差方塊303的輸出,用來決定要施加於AB項與C項其中之一之尾數之二進制點位置的正確移位量。在另一實施例中,AB項與C項其中之一之尾數的二進制點位置被移位,而另一則不移位。接著,經移位之尾數值與未經移位之尾數值被呈現給加法器305。當然,在指數差方塊303決定AB項與C項之指數相同的情況中則不實施移位,且傳送給加法器305之AB項與C項兩者的尾數都不移位。
在實施例中,例如,AB項與C項的符號值也被傳送到加法器305,使得如果C項的符號為負,則正確地實施實際的減法AB-C。在兩項間為實際之減法(即,當AB項的符號與C項的符號不同時)且兩項的絕對值近似相等的情況中,加法器305的輸出為一個接近0的數字。在此,於加法器305輸出處所見之尾數的值,係在第一個1之前有前導0的串。在此情況,為了產生較高精確度的結果,加法器305所輸出之尾數之值的二進制點應被移位,以產生第一個值為整數的尾數。
例如,如果呈現給加法器的AB尾數與符號項為-5.555566...,及C之尾數與符號項為+5.555555...,則加法器305將產生-0.000011...的輸出。為了提高最終結果的精確度,來自加法器305之結果的二進制點應向右移位5個位置,以取得1.111111...的形式。由於二進制點向右移位對應於指數值改變,因此指數值也需要改變。在此特定的例中,尾數的二進制點向右移動5個位置,對應於指數值要減少5。因此,當加法器305之輸出所提供的尾數項中具有前導零時,不僅它的二進制點需要向右移位,乘積指數方塊302所輸出的指數項也需要減少。在此,這些工作係使用前導1預測器方塊306、正常化移位器307、及指數加法器308來完成。
更明確地說,前導1預測器306以旗標標出加法器之輸出中第一個(最左)1的位置,並指示正常化移位器307應將加法器的輸出向右移位多少個二進制點,並指示指數加法器308應將來自乘積指數方塊302的指數值減去多少。在實施例中,加法器之輸出的二進制點向右移動,實際上是藉由將加法器輸出的數值內容向左移動來達成。在相同或其它實施例中,加法器308了解,來自前導1預測器306的值,是要從乘積指數方塊302所輸出的值中減去。
在實施例中,前導1預測器的操作如下。前導1預測器306分別決定提供給加法器305之兩個輸入運算元(即AB項的尾數與C項的尾數)中之前導1的位置,並以旗標標出前導1位置對之最左位元的位置。例如,如果AB項之尾數為0001100101...及C項之尾數為0000100000....,則前導1預測器306將以旗標標出第四個位元的位置,因為(AB尾數項之)第四個位元的位置為這兩個運算元之中最左(最高階)的前導1。接著,將此決定假設為加法器305之輸出的前導1位置。在很多情況中,此為正確的假設,並用它來決定由正常化移位器307所實施之加法器之輸出的移位量,及由加法器308所實施的指數減少量。
在某些情況中,此假設並不正確。前例中所提供之兩運算元經由加法器相加而產生0010000101....的加法器輸出。如目前的例子,在該假設不正確的情況中,兩運算元的相加,導致被前導1預測器所識別之運算元位置處的進位項(即,由前導1預測器所識別之加法器之輸出的位元位置為0),且因此,被前導1預測器所識別之位置向左一個位元位置才是1。如此,在實施例中,在釋出藉由前導1指示器306所標示的假設值做為加法器之輸出所應移位並減少其指數的量之前,邏輯電路實施以下其一或兩者「檢查」:i)檢查被前導1指示器所識別的加法器305之輸出的位置是否為0;ii)檢查被前導1指示器所識別的加法器305之輸出的位置的左鄰位置是否為1。如果這兩條件皆為真,則正確的答案不是被前導1指示器306所標記的位元位置,而是前導1指示器所標記之位元位置向左一個位元的位置。在此情況,本質上,前導1指示器將修正它的假設,並提供正確的資訊給移位器307與加法器308。
在此值得注意的是,使用前導1預測器的原因是決定前導1之位置的處理多少包含廣泛且可能消耗一或更多個時脈週期。同樣地,由加法器305所實施的加法也多少包含廣泛且可能消耗一或更多個時脈週期。如果前導1之決定被組態成“跟隨”加法器305,則用來決定AB+C之和與該和之前導1位置的時間會消耗兩或更多個時脈週期。不過,以圖3中所見的架構,加法器305之求和與預測器306之前導1的決定大部分係平行完成,與串聯的方法相較,因而縮短了所消耗的總時脈週期時間。此外,即使前導1預測器306的結果可能錯誤且因此被檢查,但上述的“檢查”操作較為簡單,且用來實行檢查之邏輯的端點-到-端點也較短,使得檢查操作在時間上的損失可被接受,且因此保持較佳的整體解決方案。
一旦移位器307將加法器305的結果移位並減少加法器308指數值(如果有任何可實施的這類移位及減少指數),則FMADD指令(AB+C)的“答案”本質上即被決定。實施最後的處理係以所想要的精確度與適當的格式來連接它的答案。其中部分的處理包括捨入尾數的值。在實施例中,指令可指定單或雙兩個不同層級的精確度。在另一實施例中,雙精確度值係連接單精確度值所連接之位元數量兩倍(或近似兩倍)的位元數量。在另一實施例中,單精確度格式係由1位元之符號、23位元之尾數、與8位元之指數所組成的32位元,以及,雙精確度格式係由1位元之符號、52位元之尾數、與11位元之指數所組成的64位元。在又一實施例中,在功能單元300內部,尾數可計算至128位元的精確度。在此,乘法器301的輸出寬度被接線成為128位元,以處理兩個64位元整數值的整數乘法。同樣地,加法器305的輸出與移位器307的輸出也是128位元。
就此而論,在各不同的實施例中,功能單元300為結果之尾數做內部計算的位元數量,可以超過用來實際呈現為最終答案之尾數的位元數量。因此,捨入操作視是否有比最終呈現之尾數低的任何位元為1-此稱為固著位元,在圖3的架構中,尾隨零邏輯方塊309決定移位器307之輸出中之尾隨零的數量。當與功能單元300所計算之額外位元的數量相較時,此數字指示在比最終呈現之尾數低的位元中是否有1。在移位位於底部的零時如果尾數被向左移以消除前導零,則額外的尾隨零的數量需列入考慮,其等於前導1方塊306所計算的左移量。在此,為了正確計算移位器307之輸出中之尾隨零的數量,尾隨零偵測器309應知道前導1預測器306所加諸的任何移位,因此,尾隨零偵測器309也觀察接受來自前導1預測器306的輸入。
從最低階(最右)位元位置開始,向左逐位元移動到每下一個較高階的位元位置,一直到1之最低有效(最右)值之位置為止,以決定零的數量。對於給定的精確度而言,如果尾隨零的數量一直延伸到或超過(向左)尾數的最低有效(最右)位元位置,則最低有效位元位置被保留在它的呈現值中(即不發生無條件進入)。否則,即發生無條件進入,且對於適用的精確度之尾數的最低有效位元位置增加為:i)從0到1,或,ii)從1到0,並出現進位項,其波動到下一個較高的位元位置。
無條件進入加法器310為適用的精確度將1的值加到移位器307中之結果尾數的最低有效位元位置。取加法器310的輸出做為具有所想要之精確度的最終尾數值。在實施例中,始終是取加法器310的輸出做為具有所想要之精確度的最終尾數值,其中,如果沒有發生無條件進入,則0的值被有效地加到移位器307的輸出,及如果發生無條件進入,則為給定的精確度將1的值加到移位器307之輸出的最右邊位置。如在圖3中所見,固著位元計算邏輯311根據尾隨零偵測邏輯309的輸出及所想要的精確度來決定是否需要無條件進入,且無條件進入控制邏輯312依據所決定的固著位元為所想要的精確度在最低有效位元位置提供0或1給加法器310(如果沒有發生無條件進入,則加入0,如果有發生無條件進入,則加入1)。
須注意,在圖3的實施例中,如同前導1預測器306,尾隨零偵測邏輯309亦是對提供給加法器305的運算元操作,使得其可與加法器305平行操作。在另一實施例中,尾隨零偵測器識別每一個運算元中之1的最低有效(最右側)位元值,並以旗標標出這兩個運算元中之最低有效位元位置,做為決定加法器305之輸出中之尾隨零之數量的依據。尾隨零偵測器309亦考慮前導1預測器所導致的任何移位。亦即,對於指定的精確度,在決定零的數量是否延伸到或超過移位器307輸出的最低有效位元之前,加法器305之結果的任何移位將會影響有多少零需要被偵測。須注意,由於用於偵測尾隨零的此方法沒有錯誤的可能性(就數學上來說),因此不需要任何的“檢查”(比如前導1預測器306所需的檢查)。
以上之撰述乃是考慮VMADD指令的浮點計算。在整數VMADD指令的情況中,整數運算元單純地提供給乘法器301的輸入。在此,在支援53b雙精確度浮點尾數計算的實施例中,乘法器被設計用來處理64b整數乘法。就此而論,乘法器輸出的寬度為128位元。在64位元整數運算的情況中,在實施例中,C項的左側被填以64個零,以使它的最低有效位元位置與乘法器301之輸出的最低有效位元對齊。亦即,提供給加法器305之C項運算元的左半邊為64位元的零,其右半邊則為64位元的C輸入運算元。由於實施例支援1個雙精確度或64b整數的計算及2個單精確度或2個32b整數運算,對於32b整數,2個C項(每一個32b)之每一個的上半被填以零,以使它們有64b的寬度。在32位元整數運算的情況中,C項被適當地充填。在實施例中,藉由以移位器304將C項向右移位即能有效地完成零的填充。在另一實施例中,對於整數運算,使用指數差方塊303依據整數計算所要的精確度來指定移位的量。亦即,例如,對於64位元整數運算,指數差方塊303被組態成發送輸入信號給移位器304,以致使移位器304將C項向右移位64個位元;以及,對於32位元運算,指數差方塊303被組態成發送輸入信號給移位器304,以致使移位器304將C項向右移位96個位元。
加法器305將乘法器的輸出與經移位、對齊的C項值相加,以決定AB+C的整數值。由於AB+C之整數值的大小可能超過最終結果之可容許的位元寬度,在實施例中,加法器305之輸出的上半或下半被移位器307當成最終結果來傳送。例如,在加法器305的輸出為128位元寬並施加64位元之整數運算的實施例中,指令的結果可以僅64位元寬,然而內部功能單元計算128位元的整數值。就此而論,現有2個不同的VMADD指令供整數運算使用,即VMADDH與VMADDL。VMADDH提供128位元之加法器輸出中的64個最高有效位元,及VMADDL提供128位元之加法器輸出中的64個最低有效位元。在整數VMADD運算的情況中,除了可能在加法器310中加入無關緊要的零之外,不會使用到乘積指數方塊302、前導1預測器306、指數加法器308、尾隨零偵測器309、固著位元邏輯311、及無條件進入控制邏輯312。
圖4a顯示前述功能單元之浮點VMADD運算的實施例,以及圖4b顯示前述功能單元之整數運算VMADDL/H運算的實施例。參考圖4a,運算元A與B各自的尾數值相乘401。接下來,以平行方式決定AB項與C項之指數值間的差402,並採用AB項與C項之指數最大值者做為結果的初始指數403。根據所決定之AB項與C項之指數間的差,將具有較小指數之項的尾數移位404到與具有較大指數之項的的尾數對齊。接著,將經對齊之AB項與C項的尾數相加405。接下來,以平行方式進行加法器結果之前導1的預測406。對照AB+C的相加結果檢查前導1的預測407。根據所決定的前導1,將AB+C之尾數和的結果移位到以整數值為前導408,並為指令調整指數結果409。如有需要則實施無條件進入410,並根據指定的精確度提供尾數值。
現參考圖4b,整數A與B相乘411,並填充C項412以與AB的乘積對齊。AB與C的整數項相加413。如果指令指定高部分,則提供AB+C的高部分,如果指令指定低部分,則提供AB+C的低部分。須注意,執行VMADDH後接著執行VMADDL,並將結果儲存在分開的處所,允許系統保有AB+C的總值。
值得重複以上功能單元300之描述來描述在向量功能單元中可被樣例化多次的功能單元,以使向量乘加指令(VMADD)可被實施。
可增強圖3的功能單元300來實施以下一或更多個指令的純量分量:i)向量計數前導零指令(VCLZ),其接受輸入向量C,並提供做為結果的輸出向量,其元素分別對應於輸入向量C之元素的前導零計數;ii)向量計數尾隨零指令(VCTZ),其接受輸入向量C,並提供做為結果的輸出向量,其元素分別對應於輸入向量C之元素的尾隨零計數;iii)向量計數指令(VCNT),其接受輸入向量C,並提供做為結果的輸出向量,其各個元素分別對應於輸入向量C之各個元素內之1的計數;及,iv)向量奇偶性指令(VPAR),其接受輸入向量C,並提供做為結果的輸出向量,其各個元素分別對應於輸入向量C之各個元素的奇偶性狀態(奇或偶)。
圖5顯示經增強的功能單元500,其包括以上圖3中所見之邏輯與接線額外的邏輯與接線,用來實施VCLZ、VCTZ、VCNT、及VPAR指令純量分量。在實施例中,關於這些指令,由圖5之功能單元500所處理之向量的元素,係沿著接收AB+C指令之C運算元的資料路來接收。須強調,這僅是一方法,任何VCLZ、VCTZ、VCNT、及VPAR指令,都可按照設計者的選擇,沿著AB+C指令之A、B、與C運算元的任一資料路徑來接收運算元。為了方便,用於執行VMADD指令之各不同邏輯方塊間的互連並未顯示。須瞭解,這些互連係存在(例如圖3中所見)。當然,圖3及5中所見的任何方塊都可用半導體邏輯電路來實施。
按照圖5之特定的實施例,由於任何VCLZ、VCTZ、VCNT、及VPAR指令係沿著C運算元的資料路徑來接收運算元,因此,本實施例係由對齊移位器504來接收運算元(須注意,任何的“移位器”都可實施為移位暫存器)。當指令指定任何的VCLZ、VCTZ、VCNT、及VPAR指令時-相對照於VMADD指令-對齊移位器忽略及來自指數差單位元503的任何輸入,並單純地為各個指令提送C運算元給至少適合的邏輯。亦即,邏輯506用於VCLZ指令、邏輯509用於VCTZ指令、邏輯530用於VCNT指令。此外,對齊移位器504在傳送AB項之尾數的資料路徑上為VMADD指令提供良性的零值。
關於VCLZ指令,圖5與圖3相較,其為所呈現的運算元提供前導零計數,須注意,邏輯506係以前導1與前導零預測器邏輯電路(相對照於圖3之前導1預測器邏輯電路306)來實施。在此,須注意,運算元中之前導零的數量與運算元中之前導1的位置相關。更明確地說,對於已知位元寬度的運算元來說,前導零的數量等於運算元之位元寬度與運算元中前導1之位元位置間的差。回想前導1預測器306的實施例中,其為VMADD指令之AB與C的尾數項決定前導1的位置,並在這兩項之最高階(最左)前導1的位置標示以旗標。在此,由於對齊移位器504被組態成為VCLZ指令的AB項提供零值,因此,僅C項(VCLZ指令的運算元)之前導1的位置會被標示。由此,運算元之前導零的數量即可被決定。須注意,提供指定或已知之適用的位元長度,不同的運算元位元長度(例如,32位元或64位元)可很容易處理。
回想圖3的前導1預測器306,將其視為“預測器”的原因是在某些情況之下,它的初始答案可能不正確。更明確地說,必須檢查加法器305的輸出。不過,在VCLZ指令的情況中,此問題不會發生,因為不使用加法器305。這此而論,來自邏輯506的“答案”是正確的,且不需要檢查。接著,前導零計數最終被傳送給格式化邏輯513,為該指令提供適當格式的答案。在實施例中,前導零計數(如同為VMADD指令所做的前導1計數)被傳送給指數調整加法器508,其將前導零計數向前送到格式化邏輯513。
關於VCTZ指令,其提供輸入運算元的尾隨零計數,運算元C被傳送給尾隨零決定邏輯509。回憶圖3的討論,尾隨零決定邏輯309識別每一運算元(AB與C)中1的最低有效(最右)位元值,並以旗標標示出兩個運算元間最低有效位元的位置,做為決定加法器305之輸出中尾隨零數量的依據。關於VCTZ指令的運算,也可應用相同的操作,注意加上將AB項設置定為零,使得僅由C項(VCTZ指令的運算元)來控制藉由邏輯509所提供的最終答案。該答案最終被路由到格式化邏輯513,其提供該指令的答案(該答案可能事先經由其它方塊的處理,諸如指數調整加法器508)。
關於VCNT指令,1計數邏輯520用來計數存在於C項中之1的數量,且答案最終被路由到格式化邏輯513。關於VPAR指令,奇偶性邏輯530決定C運算元的奇偶性值(例如,在運算元中有奇或偶數個1),且答案最終被路由到格式化邏輯513,其提供該指令的答案。
圖6a至6d顯示,當以上所描述圖5之功能單元500的操作平行實施N次以實行向量運算時,圖2之功能單元200的操作。關於VCLZ指令,參考圖6A,601a接受運算元/元素的輸入向量,602a決定每一運算元中前導零的數量,及603a為每一個運算元呈現具有前導零計數的輸出向量。關於VCTZ指令,參考圖6B,601b接受運算元/元素的輸入向量,602b決定每一運算元中前導零的數量,及603b為每一個運算元呈現具有前導零計數的輸出向量。關於VCNT指令,參考圖6C,601c接受運算元/元素的輸入向量,602c決定每一運算元中前導1的數量,及603c為每一個運算元呈現具有1計數的輸出向量。關於VPAR指令,參考圖6D,601d接受運算元/元素的輸入向量,602d決定每一運算元的奇偶性,及603d為每一個運算元呈現具有奇偶性的輸出向量。
如前文之討論,以上所討論的功能單元可在半導體處理器的指令執行單元內實施。
圖7顯示一般的處理核心700,亦即很多不同類型的處理核心架構,諸如複雜指令集(Complex lnstruction Set;CISC)、精簡指令集(Reduced lnstruction Set;RISC)、及超長指令字元(Very Long lnstruction Word;VLIW)。圖7的一般處理核心700包括:1)提取單元703,其提取指令(例如從快取記憶體及/或記憶體);2)解碼單元704,其將指令解碼;3)排程單元705,其決定時序及/或指令發送給執行單元706的順序(須注意,排程器為選用的);4)執行單元706,其執行指令(典型的指令執行單元包括分支執行單元、整數算術執行單元(例如ALU)、浮點算術執行單元(例如FPU)、及記憶體存取執行單元);以及5)退休單元707,其指示成功地完成指令。須注意,處理核心700可使用或不使用微碼708。
雖然以上描述的功能單元顯示端點到端點的硬線資料路徑,其也可全部用微碼來實施以上所描述的處理分析而不使用專用邏輯。在微碼處理器的情況中,典型上,微指令係儲存在其上建構有處理器之半導體晶片內的非揮發性機器可讀取媒體(諸如唯讀記憶體(ROM))中,並致使處理器內的執行單元執行藉由指令所呼叫出所想要的功能。
具有上述功能性的處理器也可在各種不同的計算系統中實施。圖8顯示計算系統(例如電腦)的實施例。圖8之例示性的計算系統包括:1)一或更多個處理器801,其被設計成包括有向量邏輯精簡指令;2)記憶體控制集線器(memory control hub;MCH)802;3)系統記憶體803(現有之各不同類型的記憶體,諸如DDR RMA、EDO RAM等);4)快取記憶體804;5)輸入/輸出控制集線器(I/O control hub;ICH)805;6)圖形處理器806;7)顯示器/螢幕807(現有之各不同類型的顯示器,諸如陰極射線管(CRT)、平面顯示器、薄膜電晶體(TFT)、液晶顯示器(LCD)、DPL等)一或更多個輸入/輸出裝置808。
為了實行計算系統實施的無論何種軟體常式,一或更多個處理器801執行指令。該等指令經常包括對於資料所實行的某些運算。這些資料與指令係儲存在系統記憶體803與快取記憶體804中。典型上,快取記憶體804被設計成具有比系統記憶體803短的潛時。例如,快取記憶體804可被整合在與處理器同一矽晶片上,及/或以較快的SRAM單元來建構,而系統記憶體803可用較慢的DRMA單元來建構。藉由傾向將經常用到的指令及資料儲存在快取記憶體804而非系統記憶體803中,將可增進計算系統的整體性能效率。
在計算系統內,系統記憶體803係特意用來供其它組件使用。例如,在軟體程式的實施中,從各不同介面(例如,鍵盤與滑鼠、印表機埠、區域網路(LAN)埠、數據機埠等)接收而進到計算系統的資料,或從電腦系統之內部儲存元件(例如硬式磁碟機)擷取的資料,在它們被一或更多個處理器801操作之前,通常被暫時佇列到系統記憶體803中。同樣地,軟體程式決定應從計算系統經由其中一個計算系統介面傳送到外部實體的資料,或要被儲存到內部儲存元件的資料,在其被傳送或儲存之前,通常被暫時佇列在系統記憶體803中。
ICH 805負責確保這類資料在系統記憶體803與適當之對應的計算系統介面(及內部儲存裝置,如果計算系統係按此設計)間被正確地傳遞。MCH 802負責為系統記憶體803管理各式各樣彼此競爭之請求在(各)處理器801、各介面、及各內部儲存元件間做存取,這些存取在時間上一個緊接著一個發生。
在典型的計算系統中也實施一或更多個I/O裝置808,I/O裝置通常負責將資料傳送入及/或傳送出計算系統(例如網路轉接器);或負責計算系統內的大型非揮發性儲存器(例如,硬式磁碟機)。ICH 805具有其本身與被觀看之I/O裝置808兩者間的雙向點對點鏈結。
在前述的說明書中,已參考關於本發明的特定例示性實施例描述了本發明。不過,很明顯,可對其做各種的修改與改變,不會偏離所附申請專利範圍中所陳述之本發明較寬廣的精神與範圍。因此,應將本說明書與圖式視為說明而非限制之意。
101a...純量輸入暫存器
102a...純量輸入暫存器
103a...純量結果暫存器
101b...向量輸入暫存器
102b...向量輸入暫存器
103b...純量結果暫存器
200...向量處理功能單元
203...輸入暫存器
204...輸入暫存器
205...輸入暫存器
206...輸出電路
300...功能單元
301...乘法器
302...乘積指數方塊
303...指數差方塊
304...移位器
305...加法器
306...前導1預測器方塊
307...正常化移位器
308...指數加法器
309...尾隨零偵測器
310...無條件進入加法器
311...固著位元計算邏輯
312...無條件進入控制邏輯
313...格式化邏輯
500...功能單元
504...對齊移位器
505...加法器
506...前導1與前導零預測器
508...指數調整加法器
509...尾隨零決定邏輯
513...格式化邏輯
520...1計數邏輯
530...奇偶性邏輯
700...一般處理核心
703...提取單元
704...解碼單元
705...排程單元
706...執行單元
707...退休單元
708...微碼
801...處理器
802...記憶體控制集線器
803...系統記憶體
804...快取記憶體
805...輸入/輸出控制集線器
806...圖形處理器
807...顯示器/螢幕
808...輸入/輸出裝置
本發明藉由例子說明,且非限制於附圖中的圖式,其中,相同的參考編號指示類似的元件,其中:
圖1a與1b顯示純量與向量邏輯運算;
圖2顯示向量乘加指令功能單元;
圖3顯示可用於圖2之每一個功能單元200_1至200_N之電子功能單元的實施例;
圖4a顯示向量浮點乘加運算;
圖4b顯示向量整數浮點運算;
圖5顯示圖3之功能單元與延伸邏輯的實施例,以用來實施前導零、尾隨零、運算元1計數及奇偶性指令;
圖6a至6d分別顯示以下各個指令之執行:前導零決定、尾隨零決定、運算元1計數及運算元奇偶性決定;
圖7顯示半導體處理器的圖;
圖8顯示計算系統的圖。
200...向量處理功能單元
203...輸入暫存器
204...輸入暫存器
205...輸入暫存器
206...輸出電路
Claims (24)
- 一種在半導體上實施的向量功能單元,用以執行N維的向量運算,包含:N個功能單元,該N個功能單元每一個包含邏輯電路,用以:對個別的A、B、及C運算元執行乘加指令;對第一個個別的運算元執行前導零指令;對第二個個別的運算元執行尾隨零指令;以及對第三個個別的運算元執行奇偶性指令,其中,該N個功能單元用於決定平行輸入向量的該等運算元的每一運算元的奇偶性狀態,以及輸出具有該等運算元的每一運算元的該奇偶性狀態的向量。
- 如申請專利範圍第1項的向量功能單元,其中,該N個功能單元每一個進一步包含邏輯電路用以執行:對第四個個別運算元執行1計數指令。
- 如申請專利範圍第1項的向量功能單元,其中,該N個功能單元每一個為微編碼。
- 如申請專利範圍第1項的向量功能單元,其中,被用來為該乘加指令執行邏輯計算的邏輯電路,也用來為該前導零指令執行邏輯計算。
- 一種方法,包含:對半導體晶片執行向量運算,包括以對該半導體晶片實施的向量功能單元來執行第一向量指令;以該向量功能單元來執行第二向量指令,該第一向量 指令係向量乘加指令,該第二向量指令係向量前導零計數指令;以該功能單元來執行第三向量指令,該第三向量指令係向量尾隨零計數指令;以及以該功能單元執行第四向量指令,該第四向量指令係向量奇偶性指令,用於決定平行輸入向量的該等運算元的每一運算元的奇偶性狀態,以及輸出具有該等運算元的每一運算元的該奇偶性狀態的向量。
- 如申請專利範圍第5項的方法,進一步包含以該功能單元來執行第五向量指令,該第五向量指令係1計數指令。
- 如申請專利範圍第5項的方法,進一步包含以用來為該第二向量指令執行邏輯計算之相同的邏輯電路來為該第一向量指令執行邏輯計算。
- 如申請專利範圍第7項的方法,其中,為該第一向量指令所做的該邏輯計算包括前導1的決定。
- 一種計算系統,包含:顯示器;對半導體晶片實施的處理器,該處理器包括用來執行N維向量運算的向量功能單元,該向量功能單元包含:N個功能單元,該N個功能單元每一個包含邏輯電路,用以執行:對個別的A、B、及C運算元執行乘加指令;對第一個個別的運算元執行前導零指令; 對第二個個別的運算元執行尾隨零指令;以及對第三個個別的運算元執行奇偶性指令,其中,該N個功能單元用於決定平行輸入向量的該等運算元的每一運算元的奇偶性狀態,以及輸出具有該等運算元的每一運算元的該奇偶性狀態的向量。
- 如申請專利範圍第9項的計算系統,其中,該N個功能單元每一個進一步包含邏輯電路用以執行:對第四個個別的運算元執行1計數指令。
- 如申請專利範圍第9項的計算系統,其中,該N個功能單元每一個為微編碼。
- 如申請專利範圍第9項的計算系統,其中,被用來為該乘加指令執行邏輯計算的邏輯電路,也被用來為該前導零指令執行邏輯計算。
- 一種在半導體上實施的向量功能單元,用以執行N維的向量運算,包含:N個功能單元,該N個功能單元每一個包含邏輯電路,用以:對個別的A、B、及C運算元執行乘加指令;對第一個個別的運算元執行前導零指令;對第二個個別的運算元執行尾隨零指令;以及對第三個個別運算元執行1計數指令,其中,該N個功能單元用於決定平行輸入向量的該等運算元的每一運算元的1計數,以及輸出具有該等運算元的每一運算元的該1計數的向量。
- 如申請專利範圍第13項的向量功能單元,其中,該N個功能單元每一個進一步包含邏輯電路用以執行:對第四個個別的運算元執行奇偶性指令。
- 如申請專利範圍第13項的向量功能單元,其中,該N個功能單元每一個為微編碼。
- 如申請專利範圍第13項的向量功能單元,其中,被用來為該乘加指令執行邏輯計算的邏輯電路,也用來為該前導零指令執行邏輯計算。
- 一種方法,包含:對半導體晶片執行向量運算,包括以對該半導體晶片實施的向量功能單元來執行第一向量指令;以該向量功能單元來執行第二向量指令,該第一向量指令係向量乘加指令,該第二向量指令係向量前導零計數指令;以該功能單元來執行第三向量指令,該第三向量指令係向量尾隨零計數指令;以及以該功能單元執行第四向量指令,該第四向量指令係1計數指令,用於決定平行輸入向量的該等運算元的每一運算元的1計數,以及輸出具有該等運算元的每一運算元的該1計數的向量。
- 如申請專利範圍第17項的方法,進一步包含以該功能單元來執行第五向量指令,該第五向量指令係向量奇偶性指令。
- 如申請專利範圍第17項的方法,進一步包含以 用來為該第二向量指令執行邏輯計算之相同的邏輯電路來為該第一向量指令執行邏輯計算。
- 如申請專利範圍第17項的方法,其中,為該第一向量指令所做的該邏輯計算包括前導1的決定。
- 一種計算系統,包含:顯示器;對半導體晶片實施的處理器,該處理器包括用來執行N維向量運算的向量功能單元,該向量功能單元包含:N個功能單元,該N個功能單元每一個包含邏輯電路,用以執行:對個別的A、B、及C運算元執行乘加指令;對第一個個別的運算元執行前導零指令;對第二個個別的運算元執行尾隨零指令;以及對第三個個別運算元執行1計數指令,其中,該N個功能單元用於決定平行輸入向量的該等運算元的每一運算元的1計數,以及輸出具有該等運算元的每一運算元的該1計數的向量。
- 如申請專利範圍第21項的計算系統,其中,該N個功能單元每一個進一步包含邏輯電路用以執行:對第四個個別的運算元執行奇偶性指令。
- 如申請專利範圍第21項的計算系統,其中,該N個功能單元每一個為微編碼。
- 如申請專利範圍第21項的計算系統,其中,被用來為該乘加指令執行邏輯計算的邏輯電路,也被用來為 該前導零指令執行邏輯計算。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/890,457 US9092213B2 (en) | 2010-09-24 | 2010-09-24 | Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201229888A TW201229888A (en) | 2012-07-16 |
TWI547868B true TWI547868B (zh) | 2016-09-01 |
Family
ID=45871878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW100133946A TWI547868B (zh) | 2010-09-24 | 2011-09-21 | 用於向量前導零、向量尾隨零、向量運算元1計數及向量奇偶性計算之功能單元 |
Country Status (9)
Country | Link |
---|---|
US (1) | US9092213B2 (zh) |
JP (1) | JP5636110B2 (zh) |
KR (1) | KR101517762B1 (zh) |
CN (2) | CN106126194A (zh) |
BR (1) | BR112013008616A2 (zh) |
DE (1) | DE112011103195T5 (zh) |
GB (1) | GB2497455B (zh) |
TW (1) | TWI547868B (zh) |
WO (1) | WO2012040539A2 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8667042B2 (en) * | 2010-09-24 | 2014-03-04 | Intel Corporation | Functional unit for vector integer multiply add instruction |
WO2012134532A1 (en) | 2011-04-01 | 2012-10-04 | Intel Corporation | Vector friendly instruction format and execution thereof |
CN104011670B (zh) | 2011-12-22 | 2016-12-28 | 英特尔公司 | 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令 |
US9372692B2 (en) * | 2012-12-29 | 2016-06-21 | Intel Corporation | Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality |
US9323531B2 (en) | 2013-03-15 | 2016-04-26 | Intel Corporation | Systems, apparatuses, and methods for determining a trailing least significant masking bit of a writemask register |
US11544214B2 (en) * | 2015-02-02 | 2023-01-03 | Optimum Semiconductor Technologies, Inc. | Monolithic vector processor configured to operate on variable length vectors using a vector length register |
US10387150B2 (en) * | 2015-06-24 | 2019-08-20 | International Business Machines Corporation | Instructions to count contiguous register elements having a specific value in a selected location |
JP6616608B2 (ja) * | 2015-07-16 | 2019-12-04 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
GB2553783B (en) * | 2016-09-13 | 2020-11-04 | Advanced Risc Mach Ltd | Vector multiply-add instruction |
US11436010B2 (en) | 2017-06-30 | 2022-09-06 | Intel Corporation | Method and apparatus for vectorizing indirect update loops |
US10628295B2 (en) | 2017-12-26 | 2020-04-21 | Samsung Electronics Co., Ltd. | Computing mechanisms using lookup tables stored on memory |
JP6540841B1 (ja) | 2018-02-27 | 2019-07-10 | 富士通株式会社 | 演算処理装置、情報処理装置、情報処理方法、およびプログラム |
CN112639722A (zh) * | 2018-09-27 | 2021-04-09 | 英特尔公司 | 加速矩阵乘法的装置和方法 |
CN110221808B (zh) * | 2019-06-03 | 2020-10-09 | 深圳芯英科技有限公司 | 向量乘加运算的预处理方法、乘加器及计算机可读介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5341319A (en) * | 1993-02-10 | 1994-08-23 | Digital Equipment Corporation | Method and apparatus for controlling a rounding operation in a floating point multiplier circuit |
TW200627811A (en) * | 2004-09-15 | 2006-08-01 | Koninkl Philips Electronics Nv | A coder and a method of coding for codes having a constraint of r=2 |
TW200719215A (en) * | 2005-06-28 | 2007-05-16 | Qualcomm Inc | System and method of counting leading zeros and counting leading ones in a digital signal processor |
CN1983162A (zh) * | 2005-09-28 | 2007-06-20 | 英特尔公司 | 具有扩展函数的混合模式浮点流水线 |
Family Cites Families (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4852048A (en) * | 1985-12-12 | 1989-07-25 | Itt Corporation | Single instruction multiple data (SIMD) cellular array processing apparatus employing a common bus where a first number of bits manifest a first bus portion and a second number of bits manifest a second bus portion |
US4849923A (en) | 1986-06-27 | 1989-07-18 | Digital Equipment Corporation | Apparatus and method for execution of floating point operations |
US4852039A (en) | 1987-06-19 | 1989-07-25 | Digital Equipment Corporation | Apparatus and method for accelerating floating point addition and subtraction operations by accelerating the effective subtraction procedure |
US5317527A (en) | 1993-02-10 | 1994-05-31 | Digital Equipment Corporation | Leading one/zero bit detector for floating point operation |
US5784305A (en) | 1995-05-01 | 1998-07-21 | Nec Corporation | Multiply-adder unit |
US6058465A (en) | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
US5928316A (en) | 1996-11-18 | 1999-07-27 | Samsung Electronics Co., Ltd. | Fused floating-point multiply-and-accumulate unit with carry correction |
KR100291383B1 (ko) | 1996-11-18 | 2001-09-17 | 윤종용 | 디지털신호처리를위한명령을지원하는모듈계산장치및방법 |
US5993051A (en) * | 1996-11-18 | 1999-11-30 | Samsung Electronics Co., Ltd. | Combined leading one and leading zero anticipator |
US6401194B1 (en) | 1997-01-28 | 2002-06-04 | Samsung Electronics Co., Ltd. | Execution unit for processing a data stream independently and in parallel |
US5991531A (en) | 1997-02-24 | 1999-11-23 | Samsung Electronics Co., Ltd. | Scalable width vector processor architecture for efficient emulation |
US6256655B1 (en) * | 1998-09-14 | 2001-07-03 | Silicon Graphics, Inc. | Method and system for performing floating point operations in unnormalized format using a floating point accumulator |
US6578059B1 (en) | 1998-10-10 | 2003-06-10 | Institute For The Development Of Emerging Architectures, L.L.C. | Methods and apparatus for controlling exponent range in floating-point calculations |
US6292886B1 (en) | 1998-10-12 | 2001-09-18 | Intel Corporation | Scalar hardware for performing SIMD operations |
US6378067B1 (en) | 1998-10-12 | 2002-04-23 | Idea Corporation | Exception reporting architecture for SIMD-FP instructions |
US6321327B1 (en) | 1998-12-30 | 2001-11-20 | Intel Corporation | Method for setting a bit associated with each component of packed floating-pint operand that is normalized in SIMD operations |
US6480872B1 (en) | 1999-01-21 | 2002-11-12 | Sandcraft, Inc. | Floating-point and integer multiply-add and multiply-accumulate |
US6360241B1 (en) | 1999-02-01 | 2002-03-19 | Compaq Information Technologies Goup, L.P. | Computer method and apparatus for division and square root operations using signed digit |
US6732135B1 (en) | 1999-02-01 | 2004-05-04 | Hewlett-Packard Development Company, L.P. | Method and apparatus for accumulating partial quotients in a digital processor |
US6366942B1 (en) | 1999-02-01 | 2002-04-02 | Compaq Information Technologies Group Lp | Method and apparatus for rounding floating point results in a digital processing system |
US6324638B1 (en) | 1999-03-31 | 2001-11-27 | International Business Machines Corporation | Processor having vector processing capability and method for executing a vector instruction in a processor |
US7127483B2 (en) | 2001-12-26 | 2006-10-24 | Hewlett-Packard Development Company, L.P. | Method and system of a microprocessor subtraction-division floating point divider |
US8090928B2 (en) | 2002-06-28 | 2012-01-03 | Intellectual Ventures I Llc | Methods and apparatus for processing scalar and vector instructions |
US7831804B2 (en) | 2004-06-22 | 2010-11-09 | St Microelectronics S.R.L. | Multidimensional processor architecture |
US7225323B2 (en) | 2004-11-10 | 2007-05-29 | Nvidia Corporation | Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines |
US20060179092A1 (en) * | 2005-02-10 | 2006-08-10 | Schmookler Martin S | System and method for executing fixed point divide operations using a floating point multiply-add pipeline |
US7543119B2 (en) | 2005-02-10 | 2009-06-02 | Richard Edward Hessel | Vector processor |
JP2006227939A (ja) | 2005-02-17 | 2006-08-31 | Matsushita Electric Ind Co Ltd | 演算装置 |
US20070198815A1 (en) | 2005-08-11 | 2007-08-23 | Coresonic Ab | Programmable digital signal processor having a clustered SIMD microarchitecture including a complex short multiplier and an independent vector load unit |
US7912887B2 (en) * | 2006-05-10 | 2011-03-22 | Qualcomm Incorporated | Mode-based multiply-add recoding for denormal operands |
US20090063608A1 (en) | 2007-09-04 | 2009-03-05 | Eric Oliver Mejdrich | Full Vector Width Cross Product Using Recirculation for Area Optimization |
US20090106526A1 (en) | 2007-10-22 | 2009-04-23 | David Arnold Luick | Scalar Float Register Overlay on Vector Register File for Efficient Register Allocation and Scalar Float and Vector Register Sharing |
US7809925B2 (en) | 2007-12-07 | 2010-10-05 | International Business Machines Corporation | Processing unit incorporating vectorizable execution unit |
US7945764B2 (en) | 2008-01-11 | 2011-05-17 | International Business Machines Corporation | Processing unit incorporating multirate execution unit |
US8356160B2 (en) | 2008-01-15 | 2013-01-15 | International Business Machines Corporation | Pipelined multiple operand minimum and maximum function |
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 |
US8139061B2 (en) | 2008-08-01 | 2012-03-20 | International Business Machines Corporation | Floating point execution unit for calculating a one minus dot product value in a single pass |
US8244783B2 (en) * | 2008-09-11 | 2012-08-14 | International Business Machines Corporation | Normalizer shift prediction for log estimate instructions |
US8281111B2 (en) * | 2008-09-23 | 2012-10-02 | Qualcomm Incorporated | System and method to execute a linear feedback-shift instruction |
US8326904B2 (en) * | 2009-01-27 | 2012-12-04 | International Business Machines Corporation | Trigonometric summation vector execution unit |
US8555034B2 (en) | 2009-12-15 | 2013-10-08 | Oracle America, Inc. | Execution of variable width vector processing instructions |
US8606840B2 (en) | 2010-03-17 | 2013-12-10 | Oracle International Corporation | Apparatus and method for floating-point fused multiply add |
US8629867B2 (en) | 2010-06-04 | 2014-01-14 | International Business Machines Corporation | Performing vector multiplication |
US20110320765A1 (en) | 2010-06-28 | 2011-12-29 | International Business Machines Corporation | Variable width vector instruction processor |
US8676871B2 (en) | 2010-09-24 | 2014-03-18 | Intel Corporation | Functional unit capable of executing approximations of functions |
-
2010
- 2010-09-24 US US12/890,457 patent/US9092213B2/en not_active Expired - Fee Related
-
2011
- 2011-09-21 TW TW100133946A patent/TWI547868B/zh not_active IP Right Cessation
- 2011-09-23 GB GB1303912.8A patent/GB2497455B/en active Active
- 2011-09-23 WO PCT/US2011/052889 patent/WO2012040539A2/en active Application Filing
- 2011-09-23 DE DE112011103195T patent/DE112011103195T5/de not_active Withdrawn
- 2011-09-23 KR KR1020137008221A patent/KR101517762B1/ko active IP Right Grant
- 2011-09-23 CN CN201610423937.9A patent/CN106126194A/zh active Pending
- 2011-09-23 JP JP2013530340A patent/JP5636110B2/ja active Active
- 2011-09-23 CN CN201180045389.6A patent/CN103119578B/zh not_active Expired - Fee Related
- 2011-09-23 BR BR112013008616A patent/BR112013008616A2/pt not_active IP Right Cessation
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5341319A (en) * | 1993-02-10 | 1994-08-23 | Digital Equipment Corporation | Method and apparatus for controlling a rounding operation in a floating point multiplier circuit |
TW200627811A (en) * | 2004-09-15 | 2006-08-01 | Koninkl Philips Electronics Nv | A coder and a method of coding for codes having a constraint of r=2 |
TW200719215A (en) * | 2005-06-28 | 2007-05-16 | Qualcomm Inc | System and method of counting leading zeros and counting leading ones in a digital signal processor |
CN1983162A (zh) * | 2005-09-28 | 2007-06-20 | 英特尔公司 | 具有扩展函数的混合模式浮点流水线 |
Also Published As
Publication number | Publication date |
---|---|
US9092213B2 (en) | 2015-07-28 |
US20120079253A1 (en) | 2012-03-29 |
WO2012040539A3 (en) | 2012-07-05 |
JP2013543173A (ja) | 2013-11-28 |
CN106126194A (zh) | 2016-11-16 |
BR112013008616A2 (pt) | 2016-06-14 |
DE112011103195T5 (de) | 2013-06-27 |
CN103119578A (zh) | 2013-05-22 |
KR20130062352A (ko) | 2013-06-12 |
GB2497455A (en) | 2013-06-12 |
WO2012040539A2 (en) | 2012-03-29 |
JP5636110B2 (ja) | 2014-12-03 |
TW201229888A (en) | 2012-07-16 |
GB201303912D0 (en) | 2013-04-17 |
KR101517762B1 (ko) | 2015-05-06 |
CN103119578B (zh) | 2016-08-03 |
GB2497455B (en) | 2017-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI547868B (zh) | 用於向量前導零、向量尾隨零、向量運算元1計數及向量奇偶性計算之功能單元 | |
JP6248328B2 (ja) | ベクトル機能ユニット、方法、およびコンピューティングシステム | |
US10649733B2 (en) | Multiply add functional unit capable of executing scale, round, getexp, round, getmant, reduce, range and class instructions | |
US10402168B2 (en) | Low energy consumption mantissa multiplication for floating point multiply-add operations | |
US7720900B2 (en) | Fused multiply add split for multiple precision arithmetic | |
US8577948B2 (en) | Split path multiply accumulate unit | |
US8676871B2 (en) | Functional unit capable of executing approximations of functions | |
US9952829B2 (en) | Binary fused multiply-add floating-point calculations | |
US10416962B2 (en) | Decimal and binary floating point arithmetic calculations | |
CN106528044B (zh) | 处理器、指令执行方法和计算系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |