專利名稱:用于向量整數乘加指令的功能單元的制作方法
技術領域:
本發明領域一般地涉及計算機系統,并且尤其涉及用于執行向量乘加指令以及使用邏輯塊的其它指令的處理器體系結構,其中該邏輯塊用于計算向量乘加結果。
背景技術:
兩種類型的處理器體系結構在計算機科學領域中被廣泛認知:“標量”和“向量”。標量處理器被設計成執行對單個數據集進行操作的指令,然而向量處理器被設計成執行對多個數據集進行操作的指令。圖1A和圖1B示出比較示例,展示了標量處理器和向量處理器之間的基本差異。圖1A示出標量AND (與)指令的示例,其中對單個操作數集(A和B)進行與操作(ANDed)以產生單個(或“標量”)結果C (即,AB=C)。相比之下,圖1B示出向量AND指令的示例,其中兩個操作數集A/B和D/E分別被并行地進行與操作以同時產生向量結果C和F(BP, A.AND.B=C 和 D.AND.E=F)。如本領域所公知的,通常輸入操作數和輸出結果兩者均存儲在專用寄存器中。例如,許多指令將具有兩個輸入操作數。因此,兩個不同的輸入寄存器將被用于臨時存儲相應輸入操作數。此外,這些相同指令將產生輸出值,該輸出值將被臨時存儲在第三(結果)寄存器中。在圖1A和圖1B中觀察到相應輸入101a,b和102a,b以及結果寄存器103a,b。顯著地,“標量”對比“向量”特征是容易區分的。S卩,觀察到,圖1A的標量設計的輸入寄存器IOla和102a僅僅保存標量值(分別為A和B)。同樣,還觀察到,圖1A的標量設計的結果寄存器103a僅保存標量值(C)。相比之下,觀察到,圖1B的向量系統的輸入寄存器IOlb和102b保存向量(在寄存器IOlb中保存A、D,以及在寄存器102b中保存B、E)。同樣,還觀察到圖1B的向量系統的結果寄存器103a保存向量值(C、F)。就術語而言,圖1B的向量系統的寄存器101b、102b和103b中的每一個的內容可被整體地稱為“向量”,并且向量內的各個標量值中的每一個可被稱為“元素”。因此,例如,觀察到,寄存器IOlb存儲“向量” A、D,“向量” A、D由“元素” A和“元素” D組成。已知只有標量或SMD乘法操作已在半導體芯片處理器中被實際地實現為單個處理器指令。已知已在半導體芯片處理器中實現的標量或SMD乘法指令包括“乘”指令(MUL)和“乘高”指令(MULH),其中“乘”指令提供兩個整數輸入操作數的乘積的低階位,而“乘高”指令提供標量整數乘法操作的高階位。已知已在半導體處理器芯片中被實現為標量或SMD指令的其它指令包括“前導零計數” CLZ指令、“尾隨零計數”指令CTZ、以及“計數”指令CNT。標量CLZ指令接收標量輸入A并返回在A中最高階I之前的A中O的數量(例如,如果A=1000,則CLZ的結果=0 ;如果A=0100,則CLZ的結果=1 ;如果A=0010,則CLZ的結果=2 ;等等)。標量CTZ指令接收標量輸入A并返回在A中最低階I之后的A中O的數量(例如,如果A=1000,則CTZ的結果=3 ;如果A=OlOO,則CTZ的結果=2 ;如果A=OOlO,則CTZ的結果=1 ;等等)。標量CNT指令接收標量輸入A并返回A中的I的數量(例如,如果A=IOll,則CLZ的結果=3 ;如果A=IOOl,則CLZ的結果=2 ;如果A=OOlO,則CLZ的結果=1 ;等等)。
本發明在附圖中作為示例而非限制地示出,其中類似的附圖標記指示相似的元件,附圖中:圖1a和圖1b不出標量和向量邏輯操作;圖2示出向量乘加功能單元;圖3示出可用于圖2的功能單元200j至200_N中的每一個的電子功能單元的實施例;圖4a示出向量浮點乘加操作;圖4b示出向量整數浮點操作;圖5示出圖3的功能單元的實施例,該功能單元具有用于執行前導零、尾隨零、操作數I計數以及奇偶指令的擴展邏輯;圖6a到圖6d分別示出以下指令的執行:前導零確定、尾隨零確定、操作數I計數以及操作數奇偶確定;圖7示出半導體處理器的示圖;圖8示出計算系統的示圖。
具體實施例方式一些計算機系統可能需要“乘加”操作。乘加操作執行運算(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_l) * (B_l)) +C_l ;標量邏輯單元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還示出,為了實現與SMD操作相對的向量操作,可將掩模層并入到輸出電路206中。向量操作可被視為在以下方面與SIMD操作不同:輸入操作數的尺寸對于向量機是可變的但對于SIMD機是固定的。改變圖2的向量機中的元素數量的能力借助可在輸出206執行的掩模來表示。具體地,可以通過它自身的相應寫邏輯電路(未示出)對每個輸出元素進行寫入。在實施例中,寫邏輯電路可對任何輸出元素位置進行。通過僅對與有效向量操作數元素相對應的那些元素啟用寫邏輯電路,可以處理長度可變的向量。其作用是基本上僅啟用標量功能單元200_1到200_N中與有效向量元素相對應的那些用于操作。此外,掩模使得針對有效元素檢測到的任何算術例外被呈現,同時抑制不活動元素的例外。如以下將要進一步詳細描述的,除計算向量乘加指令之外,功能單元200還能夠計算許多附加向量指令,諸如下列中的一個或多個:i)用于整數操作數的向量乘加高指令(VMADDH),其提供向量乘加運算的高階位;ii)用于整數操作數的向量乘加(VMADDL),其提供向量乘加運算的低階位;iii)向量前導零計數指令(VCLZ),其接收輸入向量C并提供輸出向量作為結果,該輸出向量的元素分別對應于輸入向量C的元素的前導零計數;iv)向量尾隨零計數指令(VCTZ),其接收輸入向量C并提供輸出向量作為結果,該輸出向量的元素分別對應于輸入向量C的元素的尾隨零計數;v)向量計數指令(VCNT),其接收輸入向量C并提供輸出向量作為結果,該輸出向量的各個元素分別對應于輸入向量C的各個元素內的I的計數;以及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指令的操作。如本領域已知的,浮點中的數值的聯接方式采用(符號)*(尾數)*(指數)的形式,其中符號值指示數值是正還是負,尾數值指定數值的“數字”,指數(exponent)值指定數值的階數。VMADD指令可被如下指定((A_符號)(B_符號)(A_尾數)(B_尾數)(A_指數+B_指數))+ (C_符號)(C_尾數)(C_指數)。參見圖3,乘法器301計算(A_符號)(B_符號)(A_尾數)(B_尾數)項作為至少(A_尾數)(B_尾數)的顯式計算。乘積的符號可如下容易地計算出:i)如果A_符號與B_符號具有相同的值則為正;或者ii)如果A_符號與[符號具有不同值則為負。乘積指數塊302通過采用下列中的較大者來確定最終結果的指數的初始計算:i) (A_指數+B_指數);以及ii)C_指數。即,如果C值遠大于A和B的乘積,則C項的階將控制最終結果的階。同樣,如果AB遠大于C,則AB的階將控制最終結果的階。加法器305執行AB+C運算的加法。然而,顯著地,在可按浮點形式執行加法之前,在實施例中,使AB項的指數(S卩,與乘法器301的輸出相關聯的指數)與C項的指數相同。指數差塊303和移位器304用于實現該過程。具體地,指數差塊303取AB項的指數與C項的指數之間的差(即,i) (A_指數+B_指數);以及ii)C_指數之間的差)。這兩項的較小者也被標識(例如,通過分析乘積指數塊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項的指數相同的情形中,不執行移位并且AB項和C項兩者的尾數被未移位地傳遞到加法器305。在實施例中,AB項和C項的符號值也被傳遞到加法器305,使得例如如果C項的符號是負,那么正確地進行有效減法AB - C。在這兩項之間的有效減法(即,當AB項的符號不同于C項的符號時)與這兩項的絕對值大致相等的情況下,加法器305的輸出可能是接近于零的數。因此,加法器305輸出處的尾數值可能在第一個I被觀察到之前具有一串前導
O。在這種情況下,為了產生較高精度的結果,在加法器305輸出處的尾數值的二進制小數點應被移位以產生具有整數作為其第一個值的尾數。例如,如果向加法器提供AB尾數及符號項-5.555566…以及C尾數及符號項+5.555555…,那么加法器305將產生輸出-0.000011...。為了提高最終結果的精度,來自加法器305的結果的二進制小數點應向右移位5位以采用1.111111…的形式。由于二進制小數點向右移位對應于指數值的變化,因此指數值也將需要改變。在該特定示例中,將尾數二進制小數點向右移位5位對應于將指數值減小5。因此,當在加法器305輸出處提供的尾數項具有前導零時,不僅其二進制小數點需要向右移位,而且乘積指數塊303的輸出處的指數項也需要被減小。在此,前導I預感器塊306、歸一化移位器307和指數加法器308被用于完成這些任務。
具體地,前導I預感器306標記加法器輸出中的第一個(最左端)I的位置,并且向歸一化移位器307指示加法器輸出的二進制小數點應向右移位多少,并且向指數加法器308指示來自指數塊302的指數值應被減小多少。在實施例中,加法器輸出的二進制小數點的向右移動實際上是通過將加法器輸出的數字內容向左移動來完成的。在相同的或者其它的實施例中,加法器308理解來自前導I預感器306的值要從乘積指數302輸出值中減去。在實施例中,前導I預感器如下操作。對于被提供給加法器305的這兩個輸入操作數(S卩,AB項的尾數和C項的尾數),前導I預感器306單獨地確定這兩項中的前導I位置并且標記這對前導I位置的最左位位置。例如,如果AB項的尾數是0001100101…并且C項的尾數是0000100000…,那么前導I預感器306將標記第四位位置,因為(AB尾數項的)第四位位置是這兩個操作數中的最左端(或最高階)的前導I。假設該確定是加法器305輸出的前導I位置。在許多情況下,該假設將是正確的并且用于確定由歸一化移位器307執行的加法器輸出移位量以及由加法器308執行的指數減小量。在一些情況下該假設將是錯誤的。在上述示例中提供的這兩個操作數將由加法器相加以產生加法器輸出0010000101…。在假設不正確的情況下,如在本示例中,這兩個操作數的相加導致由前導I預感器所標識的位位置處的進位項(即,由前導I預感器所標識的加法器輸出的位位置是0),因此由前導I預感器所標識的位置的左邊一個位置的位位置是I。如此,在實施例中,在釋放由前導I預感器306標記的假定值之前,其中該假定值作為加法器輸出應被移位的量以及其指數應被減小的量,邏輯電路執行下列中的任一個或兩者作為“檢查”:1)查看由前導I指示器所標識的加法器305輸出的位置是否是O ;ii)查看加法器305輸出中正好位于由前導I指示器所標識的位置左邊的位置是否是I。如果這些條件中的任一個是真,那么正確的答案不是由前導I指示器306所標記的位位置,而是正好位于由前導I指示器所標記的位位置左邊的位位置。在這種情況下,前導I指示器將基本上校正其假設并且向移位器307和加法器308提供正確信息。在此值得注意的是,使用前導I預感器的原因是確定前導I位置的過程有些廣泛并且可能花費一個或多個時鐘周期。同樣,由加法器305執行的加法也有些廣泛并且可能花費一個或多個時鐘周期。如果前導I確定被配置成“跟隨”加法器305,那么將會花費兩個或更多個時鐘周期來確定AB+C的和以及該和的前導I位置。但是,利用圖3所示的體系結構,加法器305的求和以及預感器306的前導I確定很大程度上并行進行,從而與串行方法相比減少了花費的總時鐘周期時間。此外,即使前導I預感器306的結果可能是錯誤的并且因此被檢查,上述“檢查”操作也相對簡單并且用于執行檢查的邏輯端對端相對短,使得檢查操作的時間代價可接受并且因此維持較好的整體解決方案。一旦移位器307已將加法器305的結果移位并且加法器308已減少了指數值(如果任何此類移位和指數減小是可應用的),FMADD指令(AB+C)的“答案”已基本上被確定。執行最終處理以將其答案與期望精度和適當格式聯接。該處理的一部分包括對尾數值進行舍入。在實施例中,指令可指定兩種不同精度中的任一種:單精度或雙精度。在進一步的實施例中,與雙精度值相聯接的位數量是單精度值所聯接的兩倍(或近似兩倍)。在進一步的實施例中,單精度格式是由用于符號的I個位、用于尾數的23個位以及用于指數的8個位所組成的32位,并且雙精度格式是由用于符號的I個位、用于尾數的52個位以及用于指數的11個位所組成的64位。在更進一步的實施例中,在功能單元300內部,利用高達128位的精度計算尾數。在此,乘法器301的輸出寬度被布線成128位以處理兩個64位整數值的整數乘法。同樣,加法器305輸出和移位器307輸出也是128位。如此,在多個實施例中,由功能單元300在內部計算的結果的尾數的位數可超出實際上作為最終結果的尾數提供的位數。因此,舍入操作查看最終提供的尾數之下的任何位是否是I一其被稱為粘著位。在圖3的體系結構中,尾隨零邏輯塊309確定移位器307的輸出中的尾隨零的數量。當與功能單元300的計算中的附加位的數量相比時,該數量指示最終提供的尾數之下的位中是否存在I。如果將尾數向左移位以消除前導O同時移位底部的零,那么需要考慮附加尾隨零的數量(其與前導I塊306所計算的向左移位量相等)。在此,為了正確地計算移位器307的輸出中的尾隨零的數量,尾隨零檢測器309應知曉由前導I預感器306施加的任何移位,因此尾隨零檢測器309也被觀察到從前導I預感器306接收輸入。確定從最低階(最右端)位位置開始并且向左逐位移動至每一個下一高階位位置的零的數量,直至最低有效(最右端)值I的位置。如果尾隨零的數量延伸至或超出(向左)給定精度尾數的最低有效(最右端)位位置,那么最低有效位位置被保持在其當前值(即,不進行上舍入)。否則,即發生上舍入,并且針對可適用精度的尾數的最低有效位位置增加:i)從O到1,或者ii)從I到O并且出現波動至下一較高位位置的進位項。上舍入加法器310用于將值I加到移位器307中的結果尾數的最低有效位位置,以用于可適用的精度。采用加法器310的輸出作為遵循期望精度的最終尾數值。在一實施例中,一直采用加法器310的輸出作為遵循期望精度的最終尾數值,其中如果沒有發生上舍入則將值O有效地加到移位器307輸出,并且如果確實發生上舍入則在最右端位置處將值I加到移位器307輸出以用于給定精度。如圖3所示,粘著位計算邏輯311基于尾隨零檢測邏輯309的輸出和期望精度來確定上舍入是否是必要的,并且上舍入控制邏輯312根據粘著位的確定,在最低有效位位置處將O或I提供到加法器310以用于期望精度(如果沒有上舍入發生則將加入0,如果有上舍入要發生則加入I)。注意,在圖3的實施例中,尾隨零檢測邏輯309對提供到加法器305的操作數進行操作,使得類似于前導I預感器306,其可與加法器305并行地操作。在進一步的實施例中,尾隨零檢測器標識每個操作數中為I的最低有效(最右端)位值,并且標記這兩個操作數中的最低有效位位置,作為確定加法器305輸出中的尾隨零數量的基礎。由前導I預感器所引起的任何移位也可由尾隨零檢測器309來解決。即,對于給定精度,加法器305結果的任何移位將影響在確定它們是否延伸到或超出移位器307輸出的最低有效位之前需要檢測多少個零。注意,用于尾隨零檢測的該方法不需要任何“檢查”(如前導I預感器那樣),因為不可能(從數學方面而言)發生錯誤。以上描述是就VMADD指令的浮點計算而言撰寫的。在整數VMADD指令的情況下,整數操作數被簡單地提供給乘法器301輸入。在此,在支持53位雙精度浮點尾數計算的實施例中,乘法器被設計成處理64位整數乘法。如此,乘法器輸出是128位寬。在64位整數操作的情況下,在一實施例中,用64個零填補C項左側,使得其最低有效位與乘法器301輸出的最低有效位對齊。即,被提供給加法器305的C項操作數具有64位零作為其左半部分以及具有64位C輸入操作數作為其右半部分。由于該實施例支持I雙精度或64位整數以及2單精度或232位整數操作的運算,對于32位整數,這兩個C項中每一個的上半部分(每32位)用零來填補以使得它們變為64位寬。在32位整數操作的情況下,適當地填補了 C項。在一實施例中,通過利用移位器304將C項向右移位,有效地完成了零填補。在進一步的實施例中,對于整數操作,指數差塊303用于根據整數運算精度來指定移位量。即,例如,對于64位整數操作,指數差塊303被配置成將輸入信號發送至移位器304,該信號導致移位器304將C項向右移位64位;以及對于32位操作,指數差塊303被配置成將輸入信號發送至移位器304,該信號導致移位器304將C項向右移位96位。加法器305將乘法器輸出和經移位、經對齊的C項值相加以確定AB+C的整數值。因為AB+C整數值的大小可能超出最終結果的可允許位寬度,因此在一實施例中,加法器305的輸出的高半部分或低半部分由移位器作為最終結果來傳遞。例如,在其中加法器305的輸出是128位寬且應用64位整數操作的實施例中,指令的結果僅可為64位寬但是內部功能單元計算128位整數值。如此,對于整數操作VMADDH和VMADDL存在兩種不同的VMADD指令。VMADDH提供128位加法器輸出的最高有效64位,并且VMADDL提供128位加法器輸出的最低有效64位。在整數VMADD操作的情況下,除了可能向加法器310加入無意義的零之外,不使用乘積指數塊302、前導I預感器307、指數加法器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)。基本上并行地,預測加法器結果的前導I (406)。相對于AB+C的和結果檢查對前導I的預測(407)。基于前導IDE確定,將AB+C的尾數求和的結果移位從而以整數值作為開頭(408)并且調整指令的指數結果(409)。如果必要則執行上舍入(410)并且基于指定精度提供尾數值。參見圖4b,將整數A和B項相乘(411)并且填補C項(412)以與AB乘積對齊。將AB和C整數項相加(413)。如果指令指定高部分則提供AB+C的高部分,或者如果指令指定低部分則提供AB+C的低部分。注意,與VMADDL連續地執行VMADDH并且將結果存儲在分開的位置允許系統保持AB+C的總值。值得重復的是,對功能單元300的上述說明描述了可在向量功能單元中多次例示,使得向量乘加指令(VMADD)被執行的功能單元。圖3的功能單元300還可被增強以執行以下指令中的任何一個或多個的標量分量:i)向量前導零計數指令(VCLZ),其接收輸入向量C并提供輸出向量作為結果,該輸出向量的元素分別對應于輸入向量C的元素的前導零計數;ii)向量尾隨零計數指令(VCTZ),其接收輸入向量C并提供輸出向量作為結果,該輸出向量的元素分別對應于輸入向量C的元素的尾隨零計數;iii)向量計數指令(VCNT),其接收輸入向量C并提供輸出向量作為結果,該輸出向量的各個元素分別對應于輸入向量C的各個元素內的I的計數;以及iv)向量奇偶指令(VPAR),其接收輸入向量C并提供輸出向量作為結果,該輸出向量的各個元素分別對應于輸入向量C的各個兀素的奇偶狀態(奇或偶)。圖5示出增強功能單元500,其包括附加邏輯和邏輯上方的布線以及圖3所示的布線,以執行VCLZ、VCTZ、VCNT和VPAR指令的標量分量。在一實施例中,相對于這些指令,沿著接收AB+C指令的C操作數的數據路徑接收由圖5的功能單元500所處理的向量的元素。應當強調,這僅僅是一種方法,并且從設計者選擇方面而言,可沿著AB+C指令的A、B和C操作數中任何一個的數據路徑來接收VCLZ、VCTZ, VCNT和VPAR指令中任何一種的操作數。為方便起見,未示出用于執行VMADD指令的多個邏輯塊之間的互連。應當理解,此類互連是存在的(例如,如圖3所示)。當然,可利用半導體邏輯電路來實現圖3和圖5兩者所示的任何塊。根據圖5的特定實施例,因為VCLZ、VCTZ, VCNT和VPAR指令中的任何一種的操作數是沿著C操作數的數據路徑接收的,所以操作數由對齊移位器504接收(注意,任何“移位器”可被實現為移位寄存器)。當指令指定VCLZ、VCTZ, VCNT和VPAR指令——與VMADD指令相對——中的任何一種時,對齊移位器忽略來自指數差單元503的任何輸入并且簡單地將C操作數至少提供給用于相應指令的可應用邏輯。即,用于VCLZ指令的邏輯506,用于VCTZ指令的邏輯509,以及用于VCNT指令的邏輯530。此外,對齊移位器504在承載用于VMADD指令的AB項的尾數的數據路徑上提供O的良性值。相對于為所提供的操作數提供前導零計數的VCLZ指令,比較圖5與圖3,注意邏輯506被實現為前導I和前導O預感器邏輯電路(與圖3的前導I預感器邏輯電路相對)。在此,注意操作數中前導O的數量與操作數中前導I的位置有關。具體地,對于位寬度已知的操作數,前導O的數量等于操作數的位寬度與操作數中前導I的位位置之間的差。記住,在一實施例中,前導I預感器306確定用于VMADD指令的AB和C尾數項兩者中的前導I位置并且標記這兩項的最高階(最左端)前導I的位置。在此,因為對齊移位器504被配置成對VLCZ指令的AB項提供值0,所以僅C項的前導I位置(用于VLCZ指令的操作數)被標記。由此,可確定操作數的前導零的數量。注意,如果可應用的位長度被指定或以其它方式已知,則不同的操作數位長度可被容易地處理(例如,32位或64位)。記住,圖3的前導I預感器306被視為“預感器”是因為在某些情況下它的初始答案可能是不正確的。具體地,需要檢查加法器305的輸出。但是,在VCLZ指令的情況下,不會發生這種問題,因為加法器305未被使用。如此,來自邏輯506的“答案”是正確的,無需檢查。前導O計數最后被傳遞到格式化邏輯513以為指令提供適當格式的答案。在一實施例中,前導O計數(類似于用于VMADD指令的前導I計數)被傳遞到指數調整加法器508,指數調整加法器508將其轉發到格式化邏輯513。相對于為輸入操作數提供尾隨零計數的VCTZ指令,操作數C被傳遞到尾隨零確定邏輯509。根據圖3的討論可知,尾隨零確定邏輯309標識每個操作數(AB和C)中值為I的最低有效(最右端)位,并且標記這兩個操作數中的最低有效位位置作為確定加法器305的輸出中的尾隨零數量的基礎。相對于VCTZ指令的操作應用相同操作,另外注意AB項被設置為零使得僅C項(用于VCTZ指令的操作數)控制由邏輯509提供的最終答案。答案被最終路由到格式化邏輯513,格式化邏輯513為指令提供答案(可由諸如指數調整加法器508之類的另一個塊預先處理該答案)。相對于VCNT指令,I計數邏輯520為C操作數中存在的I數量計數,并且答案被最終路由到格式化邏輯513。相對于VPAR指令,奇偶邏輯530確定C操作數的奇偶值(例如,操作數中存在奇數個I還是偶數個I)并且該答案被最終路由到格式化邏輯513,格式化邏輯513為指令提供該答案。圖6a到圖6d示出當圖5的功能單元500的上述操作被并行地執行N次以實現向量操作時圖2的功能單元200的操作。對于VCLZ指令,參見圖6A,接收操作數/元素的輸入向量(601a),確定每一個操作數中的前導O的數量(602a)以及為每一個操作數提供具有前導O計數的輸出向量(603a)。對于VCTZ指令,參見圖6B,接收操作數/元素的輸入向量(601b),確定每一個操作數中的尾隨O數量(602b)以及為每一個操作數提供具有尾隨O計數的輸出向量(603b)。對于VCNT指令,參見圖6C,接收操作數/元素的輸入向量(601c),確定每一個操作數中的I數量(602c)以及為每一個操作數提供具有I計數的輸出向量(603c)。對于VPAR指令,參見圖6D,接收操作數/元素的輸入向量(601d),確定每一個操作數的奇偶性(602d)以及為每一個操作數提供具有奇偶性的輸出向量(603d)。如上所述,以上所討論的功能單元可在半導體處理器的指令執行單元內實現。圖7示出通用處理核700,其被認為是描述了許多不同類型的處理核體系結構,諸如復雜指令集(CISC)、精簡指令集(RISC)以及超長指令字(VLIW)。圖7的通用處理核700包括:1)取出單元703,其(例如從高速緩存和/或存儲器)取出指令;2)解碼單元704,其解碼指令;3)調度單元705,其確定對執行單元706的時序和/或指令發布次序(注意調度器是可選的);4)執行單元706,其執行指令(典型指令執行單元包括分支執行單元、整數算術執行單元(例如ALU)、浮點算術執行單元(例如FPU)以及存儲器訪問執行單元);以及5)回退單元707,其表明指令成功完成。注意,處理核700可以或者可以不采用微代碼708。盡管上述功能單元示出端對端硬連接數據路徑,但是總的來說上述任何/全部處理有可能利用微代碼而不是專用邏輯來實現。在微代碼處理器的情況下,微操作碼通常被存儲在其上構建處理器的半導體芯片內的非易失性機器可讀介質(諸如只讀存儲器(ROM))中并且導致處理器內的執行單元執行由指令調用的期望功能。
具有上述功能的處理器也可被實現到多種計算系統中。圖8示出計算系統(例如計算機)的實施例。圖8的示例性計算系統包括:1) 一個或多個處理器801,其可被設計成包括向量邏輯簡化指令;2)存儲器控制中樞(MCH) 802 ;3)系統存儲器803 (其存在不同類型,諸如DDR RAM、EDO RAM等);4)高速緩存804 ;5) I/O控制中樞(ICH) 805 ;6)圖形處理器806;7)顯示器/屏幕807 (其存在不同類型,諸如陰極射線管(CRT)、平板、薄膜晶體管(TFT)、液晶顯示器(LCD)、DPL等);一個或多個I/O器件808。一個或多個處理器801執行指令以便于執行計算系統實現的任何軟件例程。指令經常涉及對數據執行的某類操作。數據和指令兩者被存儲在系統存儲器803和高速緩存804中。高速緩存804通常被設計成等待時間比系統存儲器803更短。例如,高速緩存804可被集成到與處理器相同的硅芯片上和/或利用較快SRAM單元來構造,同時系統存儲器803可利用較慢DRAM單元來構造。通過趨向于在與系統存儲器803相對的高速緩存804中存儲較頻繁使用的指令和數據,改善了計算系統的整體性能效率。故意使系統存儲器803可用于計算系統內的其它組件。例如,從多個接口(例如,鍵盤和鼠標、打印機端口、局域網端口、調制解調器端口等)接收到計算系統的或從計算系統的內部存儲元件(例如,硬盤驅動器)取回的數據在它們被軟件程序的實現過程中的一個或多個處理器801操作之前經常在系統存儲器803中被臨時性地排隊。類似地,軟件程序所確定的應當通過計算系統接口之一從計算系統發送到外部實體或存儲到內部存儲元件的數據在其被發送或存儲之前經常在系統存儲器903中被臨時性地排隊。ICH805負責確保此類數據在系統存儲器803與其適當的相應計算系統接口(以及內部存儲器件,如果計算系統是這樣設計的話)之間正確地傳遞。MCH802負責管理處理器801、接口以及內部存儲元件之間對于系統存儲器803訪問的多種競爭請求,這些請求可能在時間上彼此緊接地出現。一個或多個I/O器件808同樣被實現在典型計算系統中。I/O器件通常負責將數據傳遞到計算系統(例如,網絡適配器)和/或傳遞來自計算系統的數據;或者,對于大規模非易失性存儲而言,在計算系統內部(例如硬盤驅動器)傳遞數據。ICH805在其自身與所示I/O器件808之間具有雙向點對點鏈路。在上述說明書中,已經參考特定示例性實施例描述了本發明。然而,顯然可對這些實施例作出各種修改和改變,而不背離如所附權利要求所述的本發明的更寬泛精神和范圍。因此,說明書和附圖應被認為是說明性而非限制性意義。
權利要求
1.一種向量功能單元,其中所述向量功能單元被實現在半導體芯片上以執行N維向量操作,所述向量功能單元包括: N個功能單元,所述N個功能單元中的每一個包括邏輯電路,所述邏輯電路用于執行: 第一整數乘加指令,其提供第一整數乘加運算的最高階位而不提供最低階位; 第二整數乘加指令,其提供第二整數乘加運算的最低階位而不提供最高階位;以及 掩模電路,用于允許提供來自所述N個功能單元中的所選單元的輸出結果。
2.如權利要求1所述的向量功能單元,其特征在于,所述N個功能單元中的每一個還包括用于執行浮點乘加指令的邏輯電路。
3.如權利要求1所述的向量功能單元,其特征在于,所述功能單元中的每一個支持32位和64位操作。
4.如權利要求1所述的向量功能單元,其特征在于,所述功能單元中的每一個包括在加法器之前的第一移位寄存器以及在所述加法器之后的第二移位寄存器。
5.如權利要求4所述的向量功能單元,其特征在于,所述加法器的輸出的位寬大于所述第一整數乘法指令和所述第二整數乘法指令中任一個的標量結果的位寬。
6.如權利要求5所述的向量功能單元,其特征在于,所述移位寄存器耦合到計算AB項的指數值和C項的指數值之差的邏輯電路。
7.一種方法,包括: 在半導體芯片上執行向量操作,包括利用在所述半導體芯片上實現的向量功能單元執行第一向量指令以及利用所述向量功能單元執行第二向量指令,所述向量功能單元對元素進行掩模以實現向量操作,所述第一向量指令是提供最高階位而不提供最低階位的第一向量整數乘加指令,所述第二向量指令是提供最低階位而不提供最高階位的第二向量乘加指令。
8.如權利要求7所述的方法,其特征在于,還包括在計算系統的不同存儲位置中存儲所述第一指令的結果并且存儲所述第二指令的結果。
9.如權利要求7所述的方法,其特征在于,所述方法還包括利用所述向量功能單元執行向量浮點乘加指令。
10.如權利要求9所述的方法,其特征在于,還包括對于所述向量整數乘加指令和所述向量浮點乘加指令中的每一個使用相同加法器執行AB項和C項的求和。
11.如權利要求7所述的方法,其特征在于,所述第一向量整數乘加指令的結果提供比所述第二向量整數乘加指令的結果更多的位。
12.如權利要求11所述的方法,其特征在于,所述第一整數乘加指令提供64位,且所述第二向量整數乘加指令提供32位。
13.一種計算系統,包括: 硬盤驅動器;以及 處理器,所述處理器被實現在半導體芯片上以執行N維向量操作,所述處理器包括N個功能單元,所述N個功能單元中的每一個包括邏輯電路,所述邏輯電路用于執行: 第一整數乘加指令,其提供第一整數乘加運算的最高階位而不提供最低階位;以及 第二整數乘加指令,其提供第二整數乘加運算的最低階位而不提供最高階位; 所述處理器還包括用于允許提供來自所述N個功能單元中的所選單元的輸出結果的掩模電路。
14.如權利要求13所述的計算系統,其特征在于,所述N個功能單元中的每一個還包括用于執行浮點乘加指令的邏輯電路。
15.如權利要求13所述的計算系統,其特征在于,所述功能單元中的每一個支持32位和64位操作。
16.如權利要求13所述的計算系統,其特征在于,所述功能單元中的每一個包括在加法器之前的第一移位寄存器以及在所述加法器之后的第二移位寄存器。
17.如權利要求16所述的計算系統,其特征在于,所述加法器的輸出的位寬大于所述第一整數乘法指令和所述第二整數乘法指令中任一個的標量結果的位寬。
18.如權利要求16所述的計算系統,其特征在于,所述移位寄存器耦合到計算AB項的指數值和C項的指數值之差的邏輯電路。
全文摘要
描述了一種向量功能單元,其被實現在半導體芯片上以執行N維向量操作。向量功能單元包括N個功能單元。N個功能單元中的每一個包括邏輯電路,該邏輯電路用于執行提供第一整數乘加運算的最高階位而不提供最低階位的第一整數乘加指令,以及提供第二整數乘加運算的最低階位而不提供最高階位的第二整數乘加指令。
文檔編號G06F9/30GK103119579SQ201180045903
公開日2013年5月22日 申請日期2011年9月23日 優先權日2010年9月24日
發明者J·韋德梅耶, S·薩姆德若拉, R·高利弗 申請人:英特爾公司