相關(guān)申請
本申請主張申請日為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”的優(yōu)先權(quán)。該些優(yōu)先權(quán)案的全文并入本申請以供參考。
本申請還關(guān)聯(lián)于下列與本申請同時申請的申請:標(biāo)題為“Temporally Split Fused Multiply-Accumulate Operation”的美國第14/748,870號申請;標(biāo)題為“Calculation Control Indicator Cache”的美國第14/748,924號申請;標(biāo)題為“Calculation Control Indicator Cache”的美國第14/748,956號申請;標(biāo)題為“Standard Format Intermediate Result”的美國第14/749,002號申請;標(biāo)題為“Split-Path Heuristic for Performing a Fused FMAOperation”的美國第14/749,050號申請;標(biāo)題為“Subdivision of a Fused Compound Arithmetic Operation”的美國第14/749,088號申請;與標(biāo)題為“Non-Atomic Split-Path Fused Multiply-Accumulate”的美國第14/748,817號申請。這些申請的全文并入本申請以供參考。
技術(shù)領(lǐng)域
本發(fā)明有關(guān)于一種執(zhí)行算術(shù)運(yùn)算的微處理器設(shè)計(jì),尤其是融合浮點(diǎn)乘積-累加(FMA)運(yùn)算的微處理器設(shè)計(jì)。
背景技術(shù):
在現(xiàn)代計(jì)算機(jī)設(shè)計(jì)中,從大約1990年起,融合浮點(diǎn)乘積-累加(floating-point multiply-accumulate,FMA)運(yùn)算就已經(jīng)成為一個受到商業(yè)矚目與學(xué)術(shù)關(guān)注的領(lǐng)域。融合FMA運(yùn)算是一種算術(shù)運(yùn)算,其形式為±A*B±C,其中,A、B與C是浮點(diǎn)輸入運(yùn)算元(分別是一個被乘數(shù)(multiplicand)、一個乘數(shù)(multiplier)、與一個累加數(shù)(accumulator)),并且在C累加至A與B的乘積前不存在舍入(rounding)運(yùn)算?!繟*B±C可包含,但不限于,下列例子:(a)A*B+C;(b)A*B–C;(c)–A*B+C;(d)–A*B–C;(e)A*B(即C設(shè)為零);與(f)A+C(即B設(shè)為1.0)。
在大約1990年,此算術(shù)運(yùn)算即以一原子(atomic)或不可分割(inseparable)運(yùn)算的形式商業(yè)實(shí)現(xiàn)于IBM的精簡指令集(RISC)系統(tǒng)/6000。而后續(xù)設(shè)計(jì)進(jìn)一步最佳化浮點(diǎn)乘積累加運(yùn)算。
在其2004年的文獻(xiàn)“Floating-Point Multiply-Add-Fused with Reduced Latency”中,Tomas Lang與Javier D.Bruguera(“Lang et al.”)提出與最佳化FMA設(shè)計(jì)有關(guān)的許多重要課題。這些課題包括,指數(shù)差值與累加器移位/對準(zhǔn)量的預(yù)計(jì)算,累加器與相乘陣列的平行對準(zhǔn),必要時使用2’補(bǔ)數(shù)累加器(2’s complement accumulator),和向量與進(jìn)位向量的條件反轉(zhuǎn),在最終相加/舍入模組前對于和向量與進(jìn)位向量的標(biāo)準(zhǔn)化處理,LZA/LOA與標(biāo)準(zhǔn)化移位的重迭運(yùn)算,進(jìn)位位、舍入位、保護(hù)位與粘(sticky)位的分別運(yùn)算,以及在合一的相加/舍入模組中具有1m寬度的雙總和加法器的使用(其中,m是其中一個運(yùn)算元的尾數(shù)(mantissa)寬度)。
在其2005年的文獻(xiàn)“Floating-Point Fused Multiply-Add:Reduced Latency for Floating-Point Addition”中,Tomas Lang與Javier D.Bruguera(“Lang et al.”)提出利用分離數(shù)據(jù)路徑(或雙數(shù)據(jù)路徑)把對準(zhǔn)方向從標(biāo)準(zhǔn)化的情況移開,其中,“近(close)”的數(shù)據(jù)路徑是用以從{2,1,0,-1}有效減去指數(shù)差值(此概念在本申請?jiān)敿?xì)說明中會有更進(jìn)一步的發(fā)展與改進(jìn)),而“遠(yuǎn)(far)”的數(shù)據(jù)路徑則是用來處理其他情況。Lang等人還提出在遠(yuǎn)的數(shù)據(jù)路徑使用雙對準(zhǔn)平移器來處理相乘陣列的進(jìn)位儲存輸出,以及在近的數(shù)據(jù)路徑使用非常有限對準(zhǔn)平移的方法。
在2004年的文獻(xiàn)“Multiple Path IEEE Floating-Point Fused Multiply-Add”中,Peter-Michael Seidel(“Seidel”)提出對于FMA設(shè)計(jì)的不同改進(jìn)方法,即使用多個平行運(yùn)算路徑。Seidel并提出關(guān)閉未使用的路徑門;從指數(shù)差值與有效運(yùn)算確認(rèn)多個運(yùn)算路徑;使用兩個不同運(yùn)算路徑,其中一個提供給容易產(chǎn)生塊消去(mass cancellation)的小指數(shù)差值使用,另一個則是用來處理其他情況;對于具有效減法的小指數(shù)差值的情況,在有效乘積運(yùn)算中插入累加器數(shù)值。
在現(xiàn)今隨處可見個人行動運(yùn)算裝置來提供擴(kuò)充媒體分發(fā)與網(wǎng)路內(nèi)容存取的情況下,更需要去設(shè)計(jì)一個的低制作成本、少功耗,但又能以高效能執(zhí)行指令的FMA邏輯電路。
執(zhí)行FMA運(yùn)算的主要方法涉及合一的乘積-累加單元的使用,以執(zhí)行整個FMA運(yùn)算,包含對結(jié)果進(jìn)行舍入。大部分學(xué)術(shù)提案與商業(yè)應(yīng)用都描述一個單塊的,或是不可分割的功能方塊,其具有將兩個數(shù)相乘,將未進(jìn)行舍入的乘積與一第三運(yùn)算元、加數(shù)或累加器進(jìn)行相加操作、以及對運(yùn)算結(jié)果進(jìn)行舍入運(yùn)算。
另一種替代方案使用傳統(tǒng)的乘法單元來執(zhí)行A*B的子運(yùn)算,然后使用傳統(tǒng)的加法單元來將A與B的乘積與C相加。不過,此傳統(tǒng)分工處理的方法會犧牲運(yùn)算速度以及在同一個單元內(nèi)將C與A和B的部分乘積累加運(yùn)算所能得到的效能增益。傳統(tǒng)分工處理的方法也涉及兩個舍入運(yùn)算,因A與B的乘積會進(jìn)行舍入運(yùn)算,而后續(xù)C與乘積的加總也會進(jìn)行舍入運(yùn)算。因此,相較于合一處理的方法,傳統(tǒng)分工處理的方法有時候會產(chǎn)生不同且較不準(zhǔn)確的結(jié)果。同樣地,因?yàn)橹貜?fù)舍入運(yùn)算的存在,此傳統(tǒng)分工處理的方法無法執(zhí)行“融合(fused)”FMA運(yùn)算,而未能符合IEEE 754技術(shù)標(biāo)準(zhǔn)關(guān)于浮點(diǎn)運(yùn)算的要求。
因?yàn)镕MA硬件可同時用于多個運(yùn)算目的并遵從IEEE 754技術(shù)標(biāo)準(zhǔn),在現(xiàn)代的產(chǎn)品中,計(jì)算機(jī)設(shè)計(jì)者往往會選擇利用不可分割的FMA執(zhí)行單元來完全取代傳統(tǒng)分離的乘積與加法功能方塊。然而,此方法會帶來許多不利影響。
第一,相較于使用獨(dú)立的加法與乘法功能單元,F(xiàn)MA硬件的設(shè)置成本較高,也較復(fù)雜。第二,在執(zhí)行簡單的加法或乘法運(yùn)算時,相較于使用獨(dú)立的加法與乘法功能單元,使用FMA硬件的延遲較長,且通常會消耗較多能量。第三,對于超純量(superscalar)計(jì)算機(jī)設(shè)計(jì)而言,將乘法與加法的功能合并于單一個功能方塊會減少算術(shù)指令可發(fā)送端口的數(shù)量,而削減計(jì)算機(jī)針對源碼、機(jī)械層級或軟體開發(fā)平行處理的能力。
前述第三個不利影響可加入更多功能單元來處理,例如一個獨(dú)立的加法功能單元,但這會增加設(shè)置成本?;旧?,一個額外的加法器(舉例)就是為了在提供不可分割的FMA功能時,維持可接受的指令層級平行處理所需付出的代價,這又會增加整個硬件的設(shè)置尺寸,并會增加寄生電容與電阻。隨著半導(dǎo)體制造技術(shù)朝向小尺寸發(fā)展,寄生電容與電阻會對于算術(shù)運(yùn)算的時間延遲,或稱延遲(latency),有更顯著的影響。此時間延遲有時會被模擬為因?yàn)椤伴L導(dǎo)線”而造成的延遲。因此,為了減少實(shí)行不可分割的FMA運(yùn)算對于指令層級平行處理影響所額外設(shè)置的功能方塊,在考量所需的晶片尺寸、功耗與算術(shù)運(yùn)算的延遲后,所能提供的改善其實(shí)相當(dāng)有限。
因此,最佳的提案與實(shí)施通常會(但不總是)提供正確的運(yùn)算結(jié)果(對應(yīng)于IEEE的舍入與其他說明),有時提供較高的指令產(chǎn)出(throughput),但顯然需要額外的硬件電路而增加設(shè)置成本,并且會需要增加功耗來在復(fù)雜的FMA硬件上執(zhí)行簡單的乘法與加法運(yùn)算。
現(xiàn)代FMA設(shè)計(jì)所要達(dá)成的目標(biāo)仍未能完全達(dá)成。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的一方面,提供一種微處理器中的方法,用以執(zhí)行±A*B±C形式的融合乘積-相加運(yùn)算,其中A、B與C為輸入運(yùn)算元,且在C累加至A與B的乘積前并不進(jìn)行舍入運(yùn)算。此融合乘積-累加運(yùn)算分路為分別由一或多個指令執(zhí)行單元執(zhí)行的第一與第二乘積-相加子運(yùn)算。在第一乘積-相加子運(yùn)算中,須先選擇究竟是將A與B的部分乘積-累加至C、或是僅以A與B的部分乘積、再由此產(chǎn)生一未舍入非冗余總和。在第一與第二乘積-相加子運(yùn)算間,此未舍入非冗余總和系儲存在存儲器中,以使一或多個指令執(zhí)行單元執(zhí)行其他與前述乘積-相加運(yùn)算無關(guān)的運(yùn)算,或者是、抑或是額外地,此未舍入非冗余總和乃自一第一指令執(zhí)行單元傳輸至一第二指令執(zhí)行單元。
在第二乘積-相加子運(yùn)算中,如果第一乘積-相加子運(yùn)算在產(chǎn)生未舍入非冗余總和時未加上C時,則C與未舍入非冗余總和相加。在此第二乘積-相加子運(yùn)算中,一最終的舍入結(jié)果是由本發(fā)明的融合乘積-相加運(yùn)算產(chǎn)生。
依據(jù)本發(fā)明的一實(shí)施例,一或多個指令執(zhí)行單元包括一設(shè)定以執(zhí)行第一乘積-相加子運(yùn)算的乘法器、及一設(shè)定以執(zhí)行第二乘積-相加子運(yùn)算的加法器。
依據(jù)本發(fā)明的一實(shí)施例,多個運(yùn)算控制指標(biāo)儲存于存儲器中,并/或自一第一指令執(zhí)行單元傳送至一第二指令執(zhí)行單元。此運(yùn)算控制指標(biāo)用以指示第二乘積-相加子運(yùn)算中的接續(xù)運(yùn)算該如何進(jìn)行,其中的一指標(biāo)指明一具有C的相加運(yùn)算是否發(fā)生在一第一乘積-相加子運(yùn)算中,而其他一些指標(biāo)則可使一算術(shù)上正確舍入結(jié)果自未舍入非冗余總和中產(chǎn)生。
存儲器設(shè)于一或多個指令執(zhí)行單元外、且由該些指令執(zhí)行單元共用。存儲器包括一用以儲存未舍入非冗余總和的結(jié)果儲存空間(如一重排緩沖器)、及一用以儲存作為指明第二乘積-相加子運(yùn)算中的接續(xù)運(yùn)算如何繼續(xù)進(jìn)行的多個運(yùn)算控制指標(biāo)的運(yùn)算控制指標(biāo)儲存空間(如一與結(jié)果儲存空間不同的關(guān)聯(lián)快取),結(jié)果儲存空間耦接至一供一或多個指令執(zhí)行單元共用的結(jié)果總線,運(yùn)算控制指標(biāo)儲存空間并未耦接至結(jié)果總線,且僅為設(shè)定為執(zhí)行第一或第二乘積-相加子運(yùn)算的執(zhí)行單元所分享。
前述的架構(gòu)使得乘積-相加運(yùn)算可暫時地分路為二不同的子運(yùn)算,而指令執(zhí)行單元可于第一與第二乘積-相加子運(yùn)算執(zhí)行間、執(zhí)行其他與此乘積-相加運(yùn)算無關(guān)的運(yùn)算。
在本發(fā)明的另一方面,提供一利用上述方法的微處理器,此微處理器包括一或多個設(shè)定為執(zhí)行融合乘積-累加運(yùn)算的第一與第二乘積-累加子運(yùn)算的指令執(zhí)行單元。在第一乘積-累加子運(yùn)算中,須先選擇究竟是將A與B的部分乘積累加至C、或是僅選擇A與B的部分乘積,再由所選擇以產(chǎn)生一未舍入非冗余總和;在第二乘積-累加子運(yùn)算中,如果第一乘積-累加子運(yùn)算在產(chǎn)生未舍入非冗余總和并未累加C時,則C將條件式地以未舍入非冗余總和的方式進(jìn)行累加,最后再以未舍入非冗余總和條件式地累加C、用以產(chǎn)生一完整的融合乘積-累加運(yùn)算的舍入結(jié)果。
依據(jù)本發(fā)明的一實(shí)施例,微處理器又可包括一存儲器,其設(shè)置于一或多個指令執(zhí)行單元外,用以儲存由第一乘積-累加子運(yùn)算產(chǎn)生的未舍入非冗余總和,其中,存儲器設(shè)定為在一未定時間區(qū)間內(nèi)且直至執(zhí)行第二乘積-累加子運(yùn)算后、儲存未舍入非冗余總和,借此,使一或多個指令執(zhí)行單元可于第一與第二乘積-累加子運(yùn)間、先去執(zhí)行與該乘積-累加運(yùn)算無關(guān)的其他運(yùn)算。
在本發(fā)明的另一方面,提供一種微處理器中的方法,用以執(zhí)行±A*B±C形式的融合乘積-累加運(yùn)算,其中A、B與C為輸入運(yùn)算元;其中一第一執(zhí)行單元被選用以至少計(jì)算A與B的乘積,一未舍入非冗余運(yùn)算的中間結(jié)果向量儲存至一共享存儲器,此存儲器由多個執(zhí)行單元所共享,且/或自第一執(zhí)行單元傳送至一第二執(zhí)行單元。第二執(zhí)行單元被選用以接收來自共享存儲器的未舍入非冗余中間結(jié)果向量,且據(jù)以產(chǎn)生±A*B±C的一最終舍入結(jié)果;最后,再儲存此±A*B±C的最終舍入結(jié)果。
依據(jù)本發(fā)明的一實(shí)施例,第一執(zhí)行單元產(chǎn)生一或多個運(yùn)算控制指標(biāo),用以指示第二執(zhí)行單元中的接續(xù)運(yùn)算該如何進(jìn)行;其中,第一執(zhí)行單元產(chǎn)生的運(yùn)算控制指標(biāo),與至少A與B的乘積運(yùn)算、以及未舍入非冗余中間結(jié)果向量的產(chǎn)生共存;之后,第二執(zhí)行單元自存儲器接收一或多個運(yùn)算控制指標(biāo),并使用未舍入非冗余中間結(jié)果向量與運(yùn)算控制指標(biāo)產(chǎn)生最終舍入結(jié)果。
在本發(fā)明的另一實(shí)施例中,微處理器自第一執(zhí)行單元的至少A與B的乘積運(yùn)算中產(chǎn)生一或多個舍入指標(biāo),并將一或多個舍入指標(biāo)存入共享存儲器;之后,第二執(zhí)行單元接收來自存儲器的一或多個舍入指標(biāo),并使用未舍入非冗余中間結(jié)果向量與一或多個舍入指標(biāo)產(chǎn)生最終舍入結(jié)果。
在本發(fā)明的另一方面,提供一種方法,用以執(zhí)行±A*B±C形式的融合乘積-累加運(yùn)算,其中A、B與C為輸入運(yùn)算元,此方法乃包括:選用一第一執(zhí)行單元以計(jì)算至少A與B的乘積,并產(chǎn)生一未舍入非冗余中間結(jié)果向量;儲存且/或傳送運(yùn)算控制指標(biāo)以指明乘積-累加運(yùn)算的接續(xù)運(yùn)算該如何進(jìn)行;選用一第二執(zhí)行單元以接收中間結(jié)果向量與運(yùn)算控制指標(biāo)、并依據(jù)運(yùn)算控制指標(biāo)產(chǎn)生一±A*B±C的最終舍入結(jié)果。
依據(jù)本發(fā)明的一實(shí)施例,運(yùn)算控制指標(biāo)包括一第一執(zhí)行單元是否將C、及A與B的乘積進(jìn)行累加的指標(biāo)。在本發(fā)明的另一實(shí)施例中,運(yùn)算控制指標(biāo)包括自中間結(jié)果向量產(chǎn)生一算術(shù)上正確舍入結(jié)果的指標(biāo)。
此方法與裝置可縮減所需的電路、設(shè)置成本與復(fù)合算術(shù)運(yùn)算的累增功耗。簡單來說,此裝置與方法是將復(fù)合算數(shù)運(yùn)算分成至少二個子運(yùn)算,由物理上與/或邏輯上各自獨(dú)立的硬件單元來執(zhí)行。每個硬件單元執(zhí)行此復(fù)合算術(shù)運(yùn)算的一部分。舍入運(yùn)算或運(yùn)算控制所需的位于此二運(yùn)算間,儲存于一快取內(nèi)。這些子運(yùn)算于不同時間與位置完成,而必要的數(shù)據(jù)片段會被整合以完成最終舍入運(yùn)算。
此方法與裝置具有許多值得注意的優(yōu)點(diǎn),尤其是針對FMA運(yùn)算。
第一,此方法與裝置可辨識FMA運(yùn)算并將其區(qū)分為至少二種類型,其中部分運(yùn)算以暫時或物理性分割的方式執(zhí)行。
第二,此方法與裝置可將來自指令集架構(gòu)(ISA)的一不可分割的(atomic)或一體的(unified)FMA指令轉(zhuǎn)譯或轉(zhuǎn)換為至少二個子運(yùn)算。
第三,此方法與裝置容許這些子運(yùn)算以非不可分割的、或暫時物理性分割的方式來執(zhí)行,例如在非循序超純量計(jì)算機(jī)處理器裝置內(nèi)執(zhí)行。
第四,F(xiàn)MA運(yùn)算(例如對應(yīng)于部分第一類型的FMA運(yùn)算或部分第二類型的FMA運(yùn)算)中部分的必須算術(shù)運(yùn)算于執(zhí)行第一特定微指令時執(zhí)行。
第五,此方法與裝置以一新的方式預(yù)先計(jì)算FMA的符號數(shù)據(jù)。
第六,此方法與裝置會儲存中間運(yùn)算的部分結(jié)果,例如儲存于一結(jié)果(重命名)暫存器。
第七,此方法與裝置會儲存運(yùn)算結(jié)果的其他部分,例如儲存至稱為舍入快取或運(yùn)算控制指標(biāo)快取的其他儲存單元。
第八,此方法與裝置會將所收集到的數(shù)據(jù),即中間結(jié)果,以新的標(biāo)準(zhǔn)化儲存格式來儲存。此外,此方法與裝置可能會將儲存格式中間結(jié)果轉(zhuǎn)送至后續(xù)特殊類型的第二微指令,而非進(jìn)行儲存。
第九,此方法與裝置在需要提供所儲存的數(shù)據(jù)至后續(xù)第二微指令時,會存取舍入快取。
第十,響應(yīng)來自舍入快取的數(shù)據(jù),此方法與裝置會選擇性地提供FMA加數(shù)至第二微指令或使輸入值歸零。
第十一,此方法與裝置會在執(zhí)行一第二(或更多)微指令的過程中,使用此儲存格式中間結(jié)果作為輸入,來執(zhí)行第一類型或第二類型的FMA運(yùn)算中剩下必須執(zhí)行的算術(shù)FMA運(yùn)算。
第十二,此方法與裝置將經(jīng)少量調(diào)整的現(xiàn)有技術(shù)乘法硬件執(zhí)行單元與加法硬件執(zhí)行單元結(jié)合,如結(jié)合所述的舍入快取與數(shù)據(jù)轉(zhuǎn)送網(wǎng)路用以回避舍入快取。
第十三,此方法與裝置不會讓分配端口無法于算術(shù)運(yùn)算中使用、或是在計(jì)算機(jī)利用指令平行處理的能力與投資的硬件成本間妥協(xié)。
本發(fā)明所采用的具體實(shí)施例,將通過以下的實(shí)施例及圖式作進(jìn)一步的說明。
附圖說明
圖1是一微處理器的方塊示意圖,此微處理器具有執(zhí)行單元與一舍入或運(yùn)算控制指標(biāo)快取,并使用二個子運(yùn)算、一個調(diào)整后的乘法器與一個調(diào)整后的加法器來執(zhí)行FMA運(yùn)算。
圖2是一示意圖,將一數(shù)字空間區(qū)分為FMA運(yùn)算的五個類型以為例示(但非限定于此)。
圖3是一功能方塊圖,描述用以執(zhí)行FMA運(yùn)算的調(diào)整后的乘法器與調(diào)整后的加法器內(nèi)的邏輯元件。
圖4是一功能方塊圖,顯示本發(fā)明一實(shí)施例的乘法運(yùn)算單元的路徑確認(rèn)邏輯與尾數(shù)乘法模組,此乘法運(yùn)算單元經(jīng)適當(dāng)調(diào)整以接收FMA乘數(shù)、被乘數(shù)與累加數(shù)作為輸入運(yùn)算元。
圖5是一功能方塊圖,顯示圖4的乘法運(yùn)算單元的指數(shù)結(jié)果產(chǎn)生器與舍入指標(biāo)產(chǎn)生器,此乘法運(yùn)算單元經(jīng)適當(dāng)調(diào)整以產(chǎn)生一儲存格式中間結(jié)果。
圖6是一功能方塊圖,顯示經(jīng)適當(dāng)調(diào)整以接收一儲存格式中間結(jié)果與累加數(shù)的加法運(yùn)算單元的一實(shí)施例。
圖7是一功能方塊圖,顯示非不可分割的分路FMA運(yùn)算的一實(shí)施例的第一FMA子運(yùn)算中的一路徑確認(rèn)部分。
圖8是一功能方塊圖,顯示非不可分割的分路FMA運(yùn)算的第一FMA子運(yùn)算中的一乘法與累加部分。
圖9A及圖9B是以一功能方塊圖,顯示非不可分割的分路FMA運(yùn)算的第一FMA子運(yùn)算中的一儲存格式中間結(jié)果產(chǎn)生部分。
圖10是一功能方塊圖,顯示非不可分割的分路FMA運(yùn)算的第二FMA子運(yùn)算。
圖11是一示意圖,顯示將融合FMA指令轉(zhuǎn)譯為第一與第二FMA微指令的一實(shí)施例。
具體實(shí)施方式
微處理器
圖1是一微處理器的方塊示意圖。此微處理器10具有多個執(zhí)行單元45,50,60用以執(zhí)行FMA運(yùn)算。此微處理器10包含一指令快取15,一指令轉(zhuǎn)譯器與/或微碼只讀存儲器20,一重命名單元與保留站25,多個執(zhí)行單元(包含一調(diào)整后的乘法器45、一調(diào)整后的加法器50與其他執(zhí)行單元60),一舍入快取55(或是指運(yùn)算控制指示器儲存空間),架構(gòu)暫存器35與一重排緩沖器30(包含重命名暫存器)。其他的功能單元(未圖示)可包含一微碼單元;分支預(yù)測器;一存儲器子系統(tǒng),其包含一快取存儲器階層架構(gòu)(例如階層一的數(shù)據(jù)快取、階層二的快取)、存儲器排列緩沖器、與存儲器管理單元;數(shù)據(jù)預(yù)擷取單元;與一總線接口單元等等。微處理器10具有一非循序執(zhí)行微架構(gòu),可以不依照程序順序發(fā)布指令以供執(zhí)行。進(jìn)一步來說,架構(gòu)指令(或微指令)轉(zhuǎn)譯或轉(zhuǎn)換出的微指令,可以不依照程序順序發(fā)布指令以供執(zhí)行。微指令的程序順序相同于轉(zhuǎn)譯或轉(zhuǎn)換出這些微指令的相對應(yīng)架構(gòu)指令的程序順序。微處理器10并具有一超純量微架構(gòu),其能在單一個時鐘周期內(nèi)發(fā)布多個指令至執(zhí)行單元執(zhí)行。在一種實(shí)施例中,微處理器10可以說是以相容于x86指令集架構(gòu)的方式提供指令以供執(zhí)行。
指令快取15儲存由系統(tǒng)存儲器擷取的架構(gòu)指令。指令轉(zhuǎn)譯器與/或微碼只讀存儲器20將由系統(tǒng)存儲器擷取的架構(gòu)指令轉(zhuǎn)譯或轉(zhuǎn)換為微處理器10的微架構(gòu)微指令集的微指令。執(zhí)行單元45,50,60執(zhí)行這些微指令。這些由架構(gòu)指令轉(zhuǎn)譯或轉(zhuǎn)換出的微指令可實(shí)現(xiàn)架構(gòu)指令。重命名單元25接收微指令并將重排緩沖器的項(xiàng)目依據(jù)程序順序分配給微指令、依據(jù)所分配的重排緩沖器項(xiàng)目索引更新這些微指令、將各個微指令發(fā)送至與將要執(zhí)行這些微指令的執(zhí)行單元相關(guān)聯(lián)的保留站25、以及為這些微指令執(zhí)行暫存器重命名與關(guān)聯(lián)建立。
基于類型的分類運(yùn)算
在本發(fā)明的一實(shí)施例中,F(xiàn)MA運(yùn)算是依據(jù)輸入運(yùn)算元的指數(shù)值的差(由變數(shù)ExpDelta表示),以及是否涉及一有效的減法運(yùn)算來進(jìn)行分類。圖2利用一包含有數(shù)字線70的數(shù)字空間65來顯示ExpDelta的值。在數(shù)字線70下方的空間顯示此運(yùn)算會構(gòu)成一有效減法運(yùn)算。在數(shù)字線70上方的空間顯示此運(yùn)算會構(gòu)成一有效加法運(yùn)算(亦即不存在有效減法運(yùn)算)。
指數(shù)差,表示為ExpDelta,是乘數(shù)與被乘數(shù)的輸入指數(shù)值的加總,減去任何指數(shù)偏移值,再減去加數(shù)或減數(shù)的輸入指數(shù)值。在累加值遠(yuǎn)大于偏移調(diào)整乘積向量(bias-adjusted product vector)時,計(jì)算出的ExpDelta為負(fù)。而在累加值遠(yuǎn)小于偏移調(diào)整乘積向量時,計(jì)算出的ExpDelat為正。
“有效減法”,由變數(shù)EffSub表示,是指輸入運(yùn)算元的符號與所欲執(zhí)行的運(yùn)算(例如乘法-加法,或是乘法-減法)的結(jié)合,將會有效降低浮點(diǎn)數(shù)結(jié)果的大小,而非增加。舉例來說,負(fù)的被乘數(shù)乘上正的乘數(shù)(乘積為負(fù))后,加上一個正的加數(shù),就會有效降低結(jié)果的大小,而會表示為有效減法(EffSub)。
如圖2的數(shù)字空間65的右側(cè)所示,在乘積向量的大小主導(dǎo)運(yùn)算結(jié)果的情況下,累加數(shù)會直接用于初始舍入位(round bits)或是粘位(sticky bits)的運(yùn)算。如本文后續(xù)將描述的,累加數(shù)與乘積尾數(shù)的相對對準(zhǔn)有利于在計(jì)算影響舍入運(yùn)算的位前將此二者相加。在圖2的數(shù)字空間65內(nèi),這些不存在“有效減法”的情況顯示為“類型2”運(yùn)算80,而存在“有效減法”的情況顯示為“類型4”運(yùn)算90。
如圖2的數(shù)字空間65的左側(cè)所示,在累加數(shù)的大小主導(dǎo)運(yùn)算結(jié)果,并且累加數(shù)的尾數(shù)大小小于或等于所欲產(chǎn)生結(jié)果的尾數(shù)大小,累加數(shù)就不會用于初始舍入位或是粘位的運(yùn)算。在圖2的數(shù)字空間65內(nèi),這些不存在“有效減法”的情況顯示為“類型3”運(yùn)算85,而存在“有效減法”的情況顯示為“類型5”運(yùn)算95。因?yàn)槔奂訑?shù)有效對準(zhǔn)乘積尾數(shù)的左側(cè),所以可獲得在加上累加數(shù)之前,先確認(rèn)粘位與舍入位的好處。
區(qū)分出ExpDelta位于圖2的數(shù)字線70的右側(cè)的情況與ExpDelta位于圖2的數(shù)字線70的左側(cè)的情況會有許多優(yōu)點(diǎn)。舉例來說,傳統(tǒng)FMA利用非常寬的對準(zhǔn)移位器-相當(dāng)于或大于輸入尾數(shù)寬度的三倍-來解釋累加數(shù)對準(zhǔn)于乘數(shù)與被乘數(shù)的乘積的左側(cè)或右側(cè)的運(yùn)算。通過將FMA運(yùn)算區(qū)分為由兩個調(diào)整后的執(zhí)行單元(一個調(diào)整后的乘法器45與一個調(diào)整后的加法器50)分別執(zhí)行的兩個子運(yùn)算,即可利用較小的數(shù)據(jù)路徑與較小的對準(zhǔn)移位器來進(jìn)行運(yùn)算。
對于數(shù)字線70的右側(cè)的運(yùn)算,累加數(shù)的大小會小于中間乘積向量,此情況有利于在調(diào)整后的乘法器45內(nèi)將累加數(shù)與乘法器的乘積相加。此運(yùn)算只需要一個比傳統(tǒng)FMA的數(shù)據(jù)路徑的寬度還要小上大約一個尾數(shù)寬度的數(shù)據(jù)路徑。因?yàn)檎{(diào)整后的乘法器45原本就具有一些內(nèi)部延遲,累加數(shù)會有效地對準(zhǔn)加總樹/陣列(summation tree/array),也會簡化標(biāo)準(zhǔn)化與舍入運(yùn)算。舍入運(yùn)算將會由調(diào)整后的加法器50會在第二FMA子運(yùn)算中執(zhí)行。
反之,對于數(shù)字線70的左側(cè)的運(yùn)算,累加數(shù)會是較大的運(yùn)算元而不會用于舍入運(yùn)算。因?yàn)槔奂訑?shù)不會用于舍入運(yùn)算(除了以下提到的特殊狀況),因而可以對乘法器的乘積執(zhí)行一些初始粘收集(initial sticky collection)、將中間結(jié)果儲存至存儲器(例如重排緩沖器與/或快取)、并且可以用調(diào)整后的加法器50來進(jìn)行累加數(shù)的加法運(yùn)算。傳統(tǒng)的舍入邏輯可有效處理累加數(shù)對舍入運(yùn)算的選擇造成影響的特殊狀況,若是存在總數(shù)溢位,舍入位會成為粘位的其中之一,而總數(shù)的最重要位(least significant bit,LSB)會成為舍入位。
某些種類的FMA運(yùn)算-“有效減法”運(yùn)算中對應(yīng)于在圖2的數(shù)字空間65下半部的子集合-會使一個或多個最重要位歸零,傳統(tǒng)上將此稱為“塊消去(mass cancellation)”。在圖2中,具有塊消去潛力的運(yùn)算表示為“類型1”運(yùn)算75。此情況需要在舍入運(yùn)算前執(zhí)行標(biāo)準(zhǔn)化運(yùn)算來確認(rèn)舍入點(diǎn)的位置。標(biāo)準(zhǔn)化向量所涉及的移位運(yùn)算會產(chǎn)生顯著的時間延遲與/或呼叫前導(dǎo)位預(yù)測(leading digit prediction)以供使用。另一方面,不涉及塊消去的FMA運(yùn)算可以省略前導(dǎo)位預(yù)測。
總之,如圖2所示,F(xiàn)MA運(yùn)算可依據(jù)ExpDelta與EffSub進(jìn)行分類。第一類的FMA運(yùn)算75定義為包含ExpDelta落于{-2,-1,0,+1}的范圍且EffSub為真的運(yùn)算,這些運(yùn)算包含那些具有位塊消去潛力的運(yùn)算。第二類的FMA運(yùn)算80是定義為包含ExpDelta大于或等于-1且EffSub為假的運(yùn)算。第三類的FMA運(yùn)算85是定義為包含ExpDelta小于或等于-2且EffSub為假的運(yùn)算。第四類的FMA運(yùn)算90是定義為包含ExpDelta大于{+1}且EffSub為真的運(yùn)算。第五類的FMA運(yùn)算95是定義為包含ExpDelta小于{-2}且EffSub為真的運(yùn)算。值得注意的是,這些分類的定義僅為例示,F(xiàn)MA運(yùn)算當(dāng)可采不同方式進(jìn)行分類。舉例來說,在另一實(shí)施例中,第二類與第四類可以用同一類表示,相同地,第三類與第五類也可以同一類表示。此外,在其他實(shí)施例中,圖2的數(shù)字線70的左部分與右部分的分隔線亦可改變。
融合FMA指令執(zhí)行元件組
圖3是顯示一般用以執(zhí)行FMA運(yùn)算的融合FMA指令執(zhí)行元件組100的一實(shí)施例。此元件組100包含兩個物理上與/或邏輯上分開的算術(shù)邏輯單元,(在一實(shí)施例中,即為一調(diào)整后的乘法器45與一調(diào)整后的加法器50)與共享儲存空間155與55以儲存多個未經(jīng)舍入運(yùn)算的中間結(jié)果向量與舍入指標(biāo)(rounding indicator)。
各個調(diào)整后的乘法器45與調(diào)整后的加法器50都是一個指令執(zhí)行單元,進(jìn)一步來說,是指令管線24內(nèi)的一個算術(shù)處理單元,用以對機(jī)器指令(例如復(fù)雜指令集(CISC)微架構(gòu)內(nèi)一個指定的指令集或是精簡指令集(RISC)微架構(gòu)內(nèi)一個指定的指令集)進(jìn)行解碼,以及從一組共享的高速存儲器讀取運(yùn)算元并寫入結(jié)果。指令執(zhí)行單元可被理解為一個邏輯電路的特性集合,用以執(zhí)行傳送過來的指定機(jī)器指令集,而不同于可平行執(zhí)行(而不僅止于管線化執(zhí)行)多個機(jī)器指令的較大的電路群(如果存在的話)。
更特別的是,調(diào)整后的乘法器45與調(diào)整后的加法器50互相分離、不可分割的、能獨(dú)立運(yùn)行的執(zhí)行單元,能獨(dú)立對微碼進(jìn)行解碼并執(zhí)行,并提供控制信號至內(nèi)部的數(shù)據(jù)路徑。共享高速存儲器可以是一個暫存器檔案或是一組非架構(gòu)運(yùn)算暫存器,供微指令交換數(shù)據(jù)并使其運(yùn)算結(jié)果可為其他執(zhí)行單元看見。
更特別的是,調(diào)整后的乘法器45是一個適當(dāng)?shù)某朔ㄟ\(yùn)算單元,在大部分情況下,就像傳統(tǒng)的乘法運(yùn)算單元,能執(zhí)行不屬于FMA運(yùn)算的一般乘法微指令。不過,此調(diào)整后的乘法器經(jīng)適當(dāng)調(diào)整,使能接收FMA乘數(shù)105、被乘數(shù)110、與累加數(shù)115作為其輸入運(yùn)算元,并產(chǎn)生一儲存格式中間結(jié)果150,這在后續(xù)段落會有更進(jìn)一步的描述。相類似地,調(diào)整后的加法器50是一個適當(dāng)?shù)募臃ㄟ\(yùn)算單元,在大部分情況下,就像傳統(tǒng)的加法運(yùn)算單元,能執(zhí)行不屬于FMA運(yùn)算的一般累加微指令,例如加或減。不過,此調(diào)整后的加法器經(jīng)適當(dāng)調(diào)整,使能接收儲存格式中間結(jié)果150并產(chǎn)生一個正確且經(jīng)舍入運(yùn)算的FMA結(jié)果。
調(diào)整后的乘法器45能夠執(zhí)行第一階層或部分的融合FMA運(yùn)算(FMA1子運(yùn)算)。此調(diào)整后的乘法器45包含一輸入運(yùn)算元分析器140、一乘法加總陣列120、一最終加法器125、一標(biāo)準(zhǔn)化移位器、與一前導(dǎo)位預(yù)測與編碼器135。在執(zhí)行FMA1子運(yùn)算時,調(diào)整后的乘法器45會產(chǎn)生并輸出一未經(jīng)舍入運(yùn)算的標(biāo)準(zhǔn)化加總結(jié)果145與多個舍入位(或是舍入指標(biāo))。相較之下,在執(zhí)行非融合FMA運(yùn)算時,調(diào)整后的乘法器45會產(chǎn)生一經(jīng)舍入運(yùn)算且相容于IEEE標(biāo)準(zhǔn)的結(jié)果。
舍入位與未經(jīng)舍入運(yùn)算的標(biāo)準(zhǔn)化加總結(jié)果145的最重要位依據(jù)一儲存格式進(jìn)行儲存。在一實(shí)施例中,未經(jīng)舍入運(yùn)算的標(biāo)準(zhǔn)化加總結(jié)果145的最重要位輸出至一結(jié)果總線146,以儲存至一尾數(shù)寬度等于目標(biāo)數(shù)據(jù)格式的尾數(shù)寬度的重命名暫存器155。舍入位輸出至一專用舍入位或運(yùn)算控制指標(biāo)數(shù)據(jù)路徑、或是位于調(diào)整后的乘法器外且不同于結(jié)果總線146的連接網(wǎng)路148,以儲存至一不同于儲存重命名暫存器155的儲存單元(例如重排緩沖器30)的舍入快取55。這些未經(jīng)舍入運(yùn)算的標(biāo)準(zhǔn)化加總結(jié)果145的最重要位,連同舍入位,包含一儲存格式中間結(jié)果150。
因?yàn)橹孛麜捍嫫?55與舍入快取55屬于可為其他執(zhí)行單元看見的共享存儲器的一部分,物理上與/或邏輯上獨(dú)立于調(diào)整后的乘法器45的調(diào)整后的加法器50,可以通過運(yùn)算元總線152與舍入位數(shù)據(jù)路徑148接收此儲存格式中間結(jié)果150,并執(zhí)行一第二(完成)階層或部分的融合FMA運(yùn)算(FMA2子運(yùn)算)。此外,在FMA1子運(yùn)算與FMA2子運(yùn)算間亦可執(zhí)行其他不相關(guān)的運(yùn)算。
調(diào)整后的加法器50提供一運(yùn)算元乘數(shù)160,使FMA狀態(tài)下的累加運(yùn)算元?dú)w零,而在FMA狀態(tài)下,調(diào)整后的乘法器45已完成必要的累加運(yùn)算。調(diào)整后的乘法器50并具有舍入位選擇邏輯175,從調(diào)整后的乘法器45產(chǎn)生的舍入位、調(diào)整后的加法器50內(nèi)部產(chǎn)生的舍入位,或是二者的組合,選擇用于舍入模組180以產(chǎn)生最終舍入結(jié)果的舍入位。調(diào)整后的加法器并具有一近路徑加總電路165,用以在存在兩個加總運(yùn)算元的塊消去的情況下對總數(shù)進(jìn)行標(biāo)準(zhǔn)化運(yùn)算,并具有一遠(yuǎn)路徑加總電路170,用以執(zhí)行最多只需單一位移位的加總運(yùn)算以產(chǎn)生總數(shù)。如下所述,F(xiàn)MA2子運(yùn)算可完全由遠(yuǎn)路徑加總電路170進(jìn)行處理。
調(diào)整后的乘法器
圖4和5是詳細(xì)顯示調(diào)整后的乘法器45的一實(shí)施例。圖4特別顯示調(diào)整后的乘法器45的路徑確認(rèn)邏輯185與尾數(shù)乘法模組190。圖5特別顯示調(diào)整后的乘法器45的指數(shù)結(jié)果產(chǎn)生器260與舍入指標(biāo)產(chǎn)生器245。
如圖4所示,路徑確認(rèn)邏輯185包含一輸入解碼器200、一輸入運(yùn)算元分析器140、路徑控制邏輯215與一累加數(shù)對準(zhǔn)與射入邏輯電路220。尾數(shù)乘法模組190包含圖3的乘法加總陣列120,這在圖4中以二個元件顯示,即一乘法陣列235與一部分乘積加法器240。尾數(shù)乘法模組190并包含一最終加法器125、一前導(dǎo)位預(yù)測器與編碼器135、與標(biāo)準(zhǔn)化移位器130。
如圖5所示,指數(shù)結(jié)果產(chǎn)生器260包含一PNExp產(chǎn)生器265、一IRExp產(chǎn)生器270、與一不足位/溢位偵測器275。舍入指標(biāo)產(chǎn)生器245包含一中間符號產(chǎn)生器280、一結(jié)果向量端口285、一端回進(jìn)位指標(biāo)290、一粘位產(chǎn)生器295與一舍入位產(chǎn)生器300。
請參照圖4,調(diào)整后的乘法器45通過一個或多個輸入端口195接收一輸入微指令以及運(yùn)算元數(shù)值。就FMA微指令而言,調(diào)整后的乘法器45接收一被乘數(shù)運(yùn)算元A、一乘數(shù)運(yùn)算元B與一累加數(shù)運(yùn)算元C,各個運(yùn)算元都包含一符號指標(biāo)或位、一尾數(shù)與一指數(shù)。在圖4與圖6中,浮點(diǎn)運(yùn)算元的符號、尾數(shù)與指數(shù)部分分別以下標(biāo)S、M與E表示。舉例來說,AS、AM、AE分別代表被乘數(shù)的符號位、被乘數(shù)的尾數(shù)與被乘數(shù)的指數(shù)。
解碼器200對輸入微指令進(jìn)行解碼以產(chǎn)生FMA指標(biāo)M與二進(jìn)位數(shù)運(yùn)算符號指標(biāo)(或位)PS與OS,M意指接獲FMA微指令。在一實(shí)施例中,形式為A*B+C的FMA微指令會產(chǎn)生二進(jìn)位數(shù)零的一正乘法/向量負(fù)乘法符號運(yùn)算子PS與一加/減運(yùn)算子OS。形式為-A*B+C的負(fù)乘積-累加微指令會產(chǎn)生一個二進(jìn)位數(shù)一的運(yùn)算子PS與一個二進(jìn)位數(shù)零的運(yùn)算子OS。形式為A*B-C的乘積-相減微指令會產(chǎn)生一個二進(jìn)位數(shù)零的運(yùn)算子PS與一個二進(jìn)位數(shù)一的運(yùn)算子OS。形式為-A*B-C的向量負(fù)乘積-相減微指令會產(chǎn)生二進(jìn)位數(shù)一的運(yùn)算子PS與運(yùn)算子OS。在其他較為簡化的實(shí)施例中,調(diào)整后的乘法器45并不直接支援向量負(fù)微指令與/或減法微指令,但由微處理器10來支援等效的運(yùn)算,也就是在調(diào)用乘積-累加/相減微指令至調(diào)整后的乘法器45前,視情況額外反轉(zhuǎn)一個或多個運(yùn)算元或符號指標(biāo)。
乘法陣列235接收被乘數(shù)與乘數(shù)的尾數(shù)值A(chǔ)M與BM并計(jì)算出AM與BM的部分乘積??梢岳斫獾氖?,當(dāng)AM或者BM的絕對值為一或零,乘法陣列235所產(chǎn)生的單一個“部分乘積”的值就會是AM與BM的完整乘積。部分乘積提供至部分乘積加法器240,其提供多個項(xiàng)目以接收A與B的部分乘積以等待將其加總,而至少一個的部分乘積加法器240的項(xiàng)目用以接收一累加來源值CX。如下所述,在討論完輸入運(yùn)算元分析器140與累加數(shù)對準(zhǔn)射入邏輯220后,會對部分乘積加法器240有其他的說明。
輸入運(yùn)算元分析器140包含一ExpDelta分析子電路210與一EffSub分析子電路205。ExpDelta分析子電路210產(chǎn)生ExpDelta(ExpΔ)值。在一實(shí)施例中,ExpDelta通過將乘數(shù)與被乘數(shù)的輸入指數(shù)值A(chǔ)E與BE加總,減去加數(shù)或減數(shù)輸入指數(shù)值CE,并在存在指數(shù)偏移值ExpBias時減去此指數(shù)偏移值(如果任一者存在)。在AE、BE與CE是以偏移指數(shù)(biased exponent)表示時,例如IEEE754的規(guī)范,被乘數(shù)A與乘數(shù)B的乘積的偏移量將會是累加數(shù)C偏移量的兩倍。而導(dǎo)入ExpBias值可對此進(jìn)行校正。
EffSub分析子電路205分析運(yùn)算元符號指標(biāo)AS、BS與CS以及運(yùn)算元符號指標(biāo)PS與OS。EffSub分析子電路205產(chǎn)生一“EffSub”值,用以表示FMA運(yùn)算是否為一有效減法運(yùn)算。舉例來說,若是對A與B的乘積與C執(zhí)行運(yùn)算元特定的加法或減法運(yùn)算(或是在負(fù)向量乘法運(yùn)算子的情況下,此運(yùn)算結(jié)果的負(fù)值)所產(chǎn)生的結(jié)果R的絕對值小于(a)A與B的乘積的絕對值或是(b)C的絕對值,就會是有效減法。若以數(shù)學(xué)符號表示,若是(|R|<|A*B|)∨(|R|<|C|),其中R為FMA運(yùn)算的結(jié)果,此FMA運(yùn)算就會構(gòu)成有效減法。雖然以FMA運(yùn)算的結(jié)果可以簡化EffSub的描述,不過需理解的是,在EffSub分析子電路205預(yù)先確認(rèn)EffSub時,實(shí)際上是通過分析符號指標(biāo)AS、BS、CS、PS與OS來進(jìn)行,而不去評估A、B與C的尾數(shù)、指數(shù)與大小。
路徑控制邏輯215接收由輸入運(yùn)算元分析器140產(chǎn)生的ExpDelta與EffSub指標(biāo),并借以產(chǎn)生一路徑控制信號,其數(shù)值以變數(shù)Z表示。路徑控制邏輯215可控制C的累加運(yùn)算是否會連同A與B的部分乘積一并在調(diào)整后的乘法器45內(nèi)執(zhí)行。在一實(shí)施例中,路徑控制邏輯215用以產(chǎn)生Z的設(shè)定條件顯示于圖2中。在一實(shí)施例中,對于任何調(diào)整后的乘法器45被選用來執(zhí)行乘積-累加運(yùn)算的累加部分運(yùn)算的情況合(例如類型1,2與4),Z會是二進(jìn)位數(shù)一,而對于任何ExpDela與EffSub的其他組合(例如類型3與5),Z會是二進(jìn)位數(shù)零。
另外,路徑控制邏輯215也可以通過判斷C所具有一大小,相較于A與B的乘積大小,是否可使C對準(zhǔn)于加總樹(summation tree)內(nèi),而不需將C的最重要位移位至A與B的部分乘積加總的加總樹所提供的最重要位的左側(cè)來產(chǎn)生Z。另一個或替代的設(shè)定條件可以是,在執(zhí)行FMA運(yùn)算時是否具有執(zhí)行塊消去的潛力。再另一個或替代的設(shè)定條件可以是,對A與B的乘積進(jìn)行C的累加運(yùn)算所產(chǎn)生的舍入前結(jié)果R所需要的位數(shù),是否少于將C對準(zhǔn)A與B的乘積所需要的位數(shù)。由此可知,路徑控制的條件可響應(yīng)調(diào)整后的乘法器45的設(shè)計(jì)進(jìn)行改變。
累加數(shù)對準(zhǔn)射入邏輯220接收路徑控制邏輯215所產(chǎn)生的Z、ExpDelta分析子電路210所產(chǎn)生的ExpDelta、一移位常數(shù)SC、與累加數(shù)尾數(shù)值CM。在一實(shí)施例中,此累加數(shù)對準(zhǔn)射入邏輯220亦接收CM的位反相(bitwise negation),即與加法/減法累加運(yùn)算子指標(biāo)OS。在另一實(shí)施例中,累加數(shù)對準(zhǔn)射入邏輯220在加法/減法累加數(shù)指標(biāo)OS顯示調(diào)整后的乘法器45所接收的微指令為乘積-相減微指令時,選擇性地額外反轉(zhuǎn)CM的值。
相應(yīng)于所接收的輸入,累加數(shù)對準(zhǔn)射入邏輯220會產(chǎn)生一數(shù)值CX射入部分乘積加法器240。此射入陣列的CX的寬度是2m+1,或可理解為輸入運(yùn)算元的尾數(shù)AM、BM與CM的兩倍寬度額外加上一個位。
若是M為二進(jìn)位數(shù)零以顯示調(diào)整后的乘法器45正在執(zhí)行一般的乘法運(yùn)算而非FMA1子運(yùn)算,多工器230就會將一舍入常數(shù)RC,而非CX,射入部分乘積加法器240,借此,調(diào)整后的乘法器45即可以傳統(tǒng)方式產(chǎn)生一舍入后結(jié)果。RC的數(shù)值部分是由指令顯示的舍入運(yùn)算的類型所決定(例如:舍入向上(round half up)、舍入相等(round half to even)、舍入遠(yuǎn)離零(round half away from zero)),部分是由輸入運(yùn)算元的位尺寸(例如32位與64位)所決定。在一實(shí)施例中,部分乘積加法器240利用兩個不同的舍入運(yùn)算常數(shù)來計(jì)算出兩個總數(shù),并選擇其中較適當(dāng)?shù)囊粋€。借此,調(diào)整后的乘法器45的IMant輸出就會是一般乘法運(yùn)算的正確舍入后的尾數(shù)結(jié)果。
若是M為二進(jìn)位數(shù)一而Z為二進(jìn)位數(shù)零,即表示不需對A與B的乘積執(zhí)行C的累加運(yùn)算,在此情況下,就一實(shí)施例而言,此累加數(shù)對準(zhǔn)射入邏輯220會將CX設(shè)定為零,而使多工器230將零值射入用以接收CX值的部分乘積加法器240陣列。若是M為二進(jìn)位數(shù)一且Z為二進(jìn)位數(shù)一,累加數(shù)對準(zhǔn)射入邏輯220就會將CX右移相等于ExpDelta加上一移位常數(shù)SC的量,以產(chǎn)生CX。在一實(shí)施例中,移位常數(shù)SC等于2,以對應(yīng)于圖2,當(dāng)C的累加運(yùn)算執(zhí)行于調(diào)整后的乘法器內(nèi),圖中數(shù)字空間內(nèi)最大的ExpDelta負(fù)值。隨后,多工器230會將運(yùn)算結(jié)果CX射入部分乘積加法器240。
累加數(shù)對準(zhǔn)射入邏輯220內(nèi)并結(jié)合有一粘收集器(sticky collector)。累加數(shù)CX中任何移位超過部分乘積加法器240加總樹的最不重要位的部分,保留于XtraStky位供舍入運(yùn)算之用。因?yàn)闀卸噙_(dá)m個位移位超過部分乘積加法器240加總樹的最不重要位,XtraStky位作為一寬度m的額外粘位陣列,用于粘位S的運(yùn)算。
回到調(diào)整后的乘法器45的加法邏輯,在部分實(shí)施方式中,部分乘積加法器240為一加總樹,而在一實(shí)施方式中,為一個或多個進(jìn)位儲存加法器。此部分乘積加法器240根據(jù)所提供的部分乘積加總樹的位欄的進(jìn)位儲存向量,對一未經(jīng)舍入的冗余代表或總數(shù),依據(jù)現(xiàn)有技術(shù)的乘法執(zhí)行單元通常會執(zhí)行的運(yùn)算方法,來進(jìn)行累加運(yùn)算,這包含在部分乘積的累加運(yùn)算中,對累加數(shù)輸入值選擇性進(jìn)行額外的位反相與對準(zhǔn)運(yùn)算。
同樣地,部分乘積加法器240所執(zhí)行的算術(shù)運(yùn)算會受到Z的數(shù)值的影響。若是Z=1,部分乘積加法器240就會對于AM與BM的乘積執(zhí)行CX的連帶累加運(yùn)算(joint accumulation)。若是Z=0,部分乘積加法器240就會對AM與BM的乘積執(zhí)行一基本累加運(yùn)算。部分乘積加法器240會產(chǎn)生一由一2m位總數(shù)向量與一2m位進(jìn)位向量表示的冗余二進(jìn)位數(shù)總數(shù),作為連帶累加運(yùn)算或是基本累加運(yùn)算的運(yùn)算結(jié)果。
這些進(jìn)位與總數(shù)向量同時轉(zhuǎn)送至一最終加法器125與一前導(dǎo)位預(yù)測器與編碼器135。此最終加法器125可為一進(jìn)位預(yù)看加法器(carry-lookahead adder)或一進(jìn)位傳播加法器(carry propagate adder),通過將進(jìn)位與總數(shù)向量轉(zhuǎn)換成寬度為2m+1的正或負(fù)的預(yù)標(biāo)準(zhǔn)化未舍入非冗余總數(shù)(prenormalized unrounded nonredundant sum)PNMant以完成累加運(yùn)算程序。最終加法器125并產(chǎn)生一總數(shù)符號位SumSign,來顯示PNMant為正數(shù)或負(fù)數(shù)。
在最終加法器125產(chǎn)生PNMant的同個時間周期,前導(dǎo)位預(yù)測器與編碼器135會同步預(yù)測需要被消除以標(biāo)準(zhǔn)化PNMant的前導(dǎo)位的數(shù)量。相較于傳統(tǒng)對乘積-累加運(yùn)算分工處理的FMA設(shè)計(jì)中,因其最終加法器125執(zhí)行的最終加法運(yùn)算是于標(biāo)準(zhǔn)化運(yùn)算后執(zhí)行而需同時對進(jìn)位向量與總數(shù)向量執(zhí)行標(biāo)準(zhǔn)化運(yùn)算,因而必須等待前導(dǎo)位預(yù)測的輸出,故本發(fā)明的處理方式相較傳統(tǒng)作法實(shí)具有優(yōu)點(diǎn)。在一實(shí)施例中,此前導(dǎo)位預(yù)測器與編碼器135不是可以適用于正總數(shù)的情況,就是可適用于負(fù)總數(shù)的情況。
在一實(shí)施例中,前導(dǎo)位預(yù)測只在類型1的運(yùn)算執(zhí)行。如前所述,所選擇的前導(dǎo)位預(yù)測的方法不是可以適用于正總數(shù)就是可以適用于負(fù)總數(shù),為熟習(xí)浮點(diǎn)運(yùn)算設(shè)計(jì)領(lǐng)域者所熟知。
因?yàn)榍皩?dǎo)位預(yù)測器與編碼器135具有最多一個位的誤差,任何可用于校正此誤差的常用技術(shù)均可使用,這些技術(shù)可設(shè)置于標(biāo)準(zhǔn)化移位器130內(nèi),或是關(guān)聯(lián)于標(biāo)準(zhǔn)化移位器130。一個解決方案提供邏輯來預(yù)測此誤差。另一個解決方案通過確認(rèn)PNMant的MSB是否已經(jīng)設(shè)定,并相應(yīng)地選擇PNMant的一額外移位。
標(biāo)準(zhǔn)化移位器130從最終加法器125接收此未舍入非冗余總數(shù)PNMant并產(chǎn)生一原始尾數(shù)值GMant。在CX的累加運(yùn)算是由部分乘積加法器240執(zhí)行的情況下,GMant會是AM和BM乘積與CX的標(biāo)準(zhǔn)化加總的絕對值。而在其他情況下,GMant會是AM和BM乘積的標(biāo)準(zhǔn)化加總的絕對值。
為了產(chǎn)生GMant,標(biāo)準(zhǔn)化移位器130在SumSgn顯示PNMant為負(fù)時對PNMant執(zhí)行位反相的運(yùn)算。對負(fù)的PNMant數(shù)值執(zhí)行標(biāo)準(zhǔn)化移位器130的位反相運(yùn)算,可產(chǎn)生如下所述的儲存格式中間結(jié)果150,并有助于正確的舍入運(yùn)算。在調(diào)整后的乘法器內(nèi)反轉(zhuǎn)PNWant,即可產(chǎn)生一正數(shù)提供給調(diào)整后的加法器,而不需先知會PNWant的數(shù)值為負(fù)。此處理方式可使累加運(yùn)算實(shí)施起來就像加總運(yùn)算并以簡化的方式進(jìn)行舍入運(yùn)算。
此外,此標(biāo)準(zhǔn)化移位器130會將PNMant左移一個由LDP、EffSub與Z的函數(shù)所計(jì)算出來的量。值得注意的是,即使沒有發(fā)生最重要前導(dǎo)位的消除,仍需要將PNMant左移零、一或二個位位置以產(chǎn)生一有用的標(biāo)準(zhǔn)化儲存格式中間結(jié)果150,以確保后續(xù)的舍入運(yùn)算可正確進(jìn)行。此標(biāo)準(zhǔn)化運(yùn)算由一個左移所構(gòu)成,以將算術(shù)上最重要位移動至標(biāo)準(zhǔn)化的最左位置,使能表示于如下所述的儲存格式中間結(jié)果150。
相較于傳統(tǒng)的FMA設(shè)計(jì),此實(shí)施方式具有三個額外的優(yōu)點(diǎn)。第一,此實(shí)施方式不需在部分乘積加法器240內(nèi)插入額外的進(jìn)位位(若響應(yīng)于EffSub對累加數(shù)尾數(shù)執(zhí)行2’補(bǔ)數(shù)時有此需求的話)。第二,此實(shí)施方式不需提供一大的符號位偵測器/預(yù)測器模組,來檢測并選擇性補(bǔ)足非冗余部分乘積與累加數(shù)加總值的冗余總數(shù)與進(jìn)位向量表示。第三,此實(shí)施方式不需輸入額外的進(jìn)位位來確保部分乘積與累加數(shù)加總運(yùn)算中,選擇性補(bǔ)足的總數(shù)與進(jìn)位向量表示的運(yùn)算正確。
關(guān)于圖5的指數(shù)結(jié)果產(chǎn)生器260,PNExp產(chǎn)生器265產(chǎn)生一預(yù)標(biāo)準(zhǔn)化指數(shù)值PNExp,此數(shù)值為被乘數(shù)與乘數(shù)指數(shù)值A(chǔ)E與BE、指數(shù)偏移值ExpBias與移位常數(shù)SC的函數(shù)。在一實(shí)施例中,PNExp以算式SC+AE+BE-ExpBias來計(jì)算。
IRExp產(chǎn)生器270使PNExp遞減,作為標(biāo)準(zhǔn)化移位器130執(zhí)行的尾數(shù)標(biāo)準(zhǔn)化運(yùn)算,以產(chǎn)生一中間結(jié)果指數(shù)IRExp。此數(shù)值為PNExp與前導(dǎo)位預(yù)測(leading digit prediction,LDP)的函數(shù)。隨后,IRExp轉(zhuǎn)送至如下所述的結(jié)果向量端口280。
中間符號產(chǎn)生器280產(chǎn)生中間結(jié)果符號指標(biāo)IRSgn,其為EffSub、E、AS、BS與Z的函數(shù)。在一實(shí)施例中,IRSgn在某些情況下以被乘數(shù)符號位AS與乘數(shù)符號位BS的邏輯互斥或來計(jì)算。不過,若是Z位為二進(jìn)位數(shù)一顯示累加運(yùn)算已經(jīng)執(zhí)行,EffSub也是二進(jìn)位數(shù)一顯示有效減法,而E位值為二進(jìn)位數(shù)零顯示沒有等待中的端回進(jìn)位(end-around carry),IRSgn就會以被乘數(shù)符號位AS與乘數(shù)符號位BS的邏輯互斥或的反相值(XNOR)來計(jì)算。換句話說,中間符號通常是A與B的乘積的符號。當(dāng)累加數(shù)的大小大于A與B的乘積時,A與B的乘積的符號會反轉(zhuǎn),乘積-累加運(yùn)算會是一有效減法運(yùn)算,而累加運(yùn)算的完成不需要使用端回進(jìn)位(因?yàn)槔奂舆\(yùn)算為負(fù))。
中間結(jié)果符號指標(biāo)IRSgn用于一可用以確認(rèn)最終符號位以供具塊消去可能的FMA運(yùn)算使用的創(chuàng)新方法。不同于傳統(tǒng)的分路FMA實(shí)施方式,此實(shí)施方式不需要符號預(yù)測器,也不需要用以預(yù)測符號的大量電路。另外,零結(jié)果的符號,或是具有符號零輸入的運(yùn)算結(jié)果的符號,容易預(yù)先計(jì)算,來納入例如一舍入模式輸入。
結(jié)果向量端口280輸出一儲存格式中間結(jié)果向量IRVector,其包含中間結(jié)果指數(shù)IRExp、中間結(jié)果符號IRSgn與中間結(jié)果尾數(shù)IRMant。在此儲存格式的一實(shí)施例中,IRMant包含GMant的最重要m位,其中m為目標(biāo)數(shù)據(jù)類型的寬度。舉例來說,在IEEE雙精確度(double precision)運(yùn)算中,結(jié)果向量端口280輸出IRVector作為單一個符號位、十一個指數(shù)位、與GMant最重要53位的組合。在儲存格式的另一個實(shí)施例中,m等于AM、BM與CM的尾數(shù)的寬度。在儲存格式的又一個實(shí)施例中,m大于AM、BM與CM的尾數(shù)的寬度。
類似于IEEE的標(biāo)準(zhǔn)儲存格式,這些尾數(shù)位中的單一個最重要位作為儲存時的一隱含值。IRVector儲存至一共享存儲器,例如重排緩沖器30的重命名暫存器155,借此,其他指令執(zhí)行單元就可存取IRVector,且/或IRvector可通過一結(jié)果轉(zhuǎn)送總線(forwarding bus)40轉(zhuǎn)送至其他指令執(zhí)行單元。在一實(shí)施例中,IRVector儲存至一重命名暫存器155。此外,不同于架構(gòu)暫存器會對重排緩沖器給予一固定不變的任務(wù)分派,中間結(jié)果是向量在重排緩沖器內(nèi)給予一不可預(yù)期的任務(wù)分派。在另一實(shí)施例中,IRVector暫時儲存于將用以儲存FMA運(yùn)算的最終舍入結(jié)果的目標(biāo)暫存器內(nèi)。
現(xiàn)在請參照圖5的舍入指標(biāo)產(chǎn)生器245,不足位/溢位偵測器275產(chǎn)生不足位指標(biāo)U1與溢位指標(biāo)O1,其為IRExp與指數(shù)范圍值ExpMin與ExpMax的函數(shù)。指數(shù)范圍值是與儲存格式中間結(jié)果150(下面將有進(jìn)一步討論)的精確度或目標(biāo)數(shù)據(jù)類型有關(guān)。若是IRExp小于可代表此FMA運(yùn)算目標(biāo)數(shù)據(jù)類型的指數(shù)值的范圍,或是小于可代表的任何中間儲存空間,例如重命名暫存器,的指數(shù)值的范圍,U1位就會是二進(jìn)位數(shù)一,否則U1位就會是二進(jìn)位數(shù)零。相反地,若是IRExp大于可代表此FMA運(yùn)算目標(biāo)數(shù)據(jù)類型的指數(shù)值的范圍,或是大于可代表的任何中間儲存空間,例如重命名暫存器,的指數(shù)值的范圍,O1位就會是二進(jìn)位數(shù)一,否則O1位就會是二進(jìn)位數(shù)零。另外,U與O可經(jīng)編碼以表示四個可能的指數(shù)范圍,其中至少一個編碼會表示不足位,而至少一個編碼會表示溢位。
在傳統(tǒng)一般乘法單元的實(shí)施方式中,U1與O1位會報(bào)告至例外事件控制邏輯。不過,在執(zhí)行FMA1子運(yùn)算時,調(diào)整后的乘法器45會輸出U1與O1位至中間儲存空間以供調(diào)整后的加法器50執(zhí)行。
端回進(jìn)位指標(biāo)產(chǎn)生器290會產(chǎn)生等待中的端回進(jìn)位指標(biāo)E1位,其為Z、EffSub與SumSgn的函數(shù)。若是已確認(rèn)的Z位的數(shù)值為二進(jìn)位數(shù)一,表示部分乘積加法器240已經(jīng)執(zhí)行C的累加運(yùn)算,已確認(rèn)的EffSub變數(shù)顯示此累加運(yùn)算造成一有效減法,并且SumSgn顯示所產(chǎn)生的未舍入非冗余值PNMant為正,E1位就會是二進(jìn)位數(shù)一。在其他情況下,E1就會是二進(jìn)位數(shù)零。
結(jié)果向量端口280儲存GMant的最重要位作為中間結(jié)果向量的中間結(jié)果尾數(shù),而粘位產(chǎn)生器295與舍入位產(chǎn)生器300會使剩下較不重要的位(例如超出中間結(jié)果尾數(shù)的第53個位的位)減少至剩下舍入(R1)與粘(S1)位。粘位產(chǎn)生器295產(chǎn)生粘位S1,其為SumSgn、Z、GMant的最不重要位、EffSub與XtraStky位的函數(shù)。舍入位產(chǎn)生器300產(chǎn)生舍入位R1,其為GMant的最不重要位的函數(shù)。
舍入快取
舍入位端口305會輸出各個位U1、O1、E1、S1、R1與Z,借此,這些位就可以被其他執(zhí)行單元(例如調(diào)整后的加法器50)使用來產(chǎn)生FMA運(yùn)算最終的舍入后結(jié)果。為了方便說明,這些位在本文中都表示為舍入位,即使其中有部分位會在產(chǎn)生FMA運(yùn)算最終結(jié)果的過程中有其他用途,又即使并非所有的位都用于舍入運(yùn)算。舉例來說,在某些實(shí)施方式中,O1位就不會用于舍入運(yùn)算。這些位可互換地被指為運(yùn)算控制指標(biāo)。舉例來說,位Z與E,即指出那些后續(xù)運(yùn)算需要執(zhí)行;位U與O,即指出這些運(yùn)算應(yīng)如何執(zhí)行。此外,這些位可表示為運(yùn)算間歇狀態(tài)值(calculation intermission state value),因?yàn)樗麄兲峁┮粔嚎s格式(compact format)來表示與選擇性地儲存在調(diào)整后的乘法器45的FMA1子運(yùn)算與調(diào)整后的加法器50的FMA2子運(yùn)算間的間歇時間中的運(yùn)算狀態(tài)信息。
這些位,無論被稱為舍入位、運(yùn)算控制指標(biāo)、運(yùn)算狀態(tài)指標(biāo)或其他,連同中間結(jié)果向量與累加數(shù)值C,除了運(yùn)算元數(shù)值,還提供后續(xù)指令執(zhí)行單元需要的任何事物,以產(chǎn)生算術(shù)上正確的最終結(jié)果。換句話說,中間結(jié)果向量與舍入位的結(jié)合可提供算術(shù)上正確表示FMA運(yùn)算結(jié)果所需的任何結(jié)果,此運(yùn)算結(jié)果與一具有±A*B±C形式但變?yōu)槟繕?biāo)數(shù)據(jù)尺寸的無限精確FMA運(yùn)算的運(yùn)算結(jié)果無從辨別。
依據(jù)本發(fā)明的一實(shí)施例,微處理器10用以將舍入位儲存至舍入快取55內(nèi),并將舍入位通過轉(zhuǎn)送總線40轉(zhuǎn)送至其他指令執(zhí)行單元,此舍入快取55亦可稱為運(yùn)算控制指標(biāo)儲存空間。依據(jù)本發(fā)明的另一實(shí)施例,微處理器10并不具有舍入快取55,而僅將舍入位通過轉(zhuǎn)送總線40轉(zhuǎn)送至其他指令執(zhí)行單元。依據(jù)本發(fā)明的又一實(shí)施例,微處理器10將舍入位儲存至舍入快取55內(nèi),但不提供轉(zhuǎn)送總線40來將舍入位直接轉(zhuǎn)送至其他的指令執(zhí)行單元。
指令快取55與所儲存的指令位或運(yùn)算控制指標(biāo)為非架構(gòu),亦即其非為終端用戶所能看見。相較之下,架構(gòu)暫存器或架構(gòu)指標(biāo)(例如浮點(diǎn)狀態(tài)字(floating point status word))則是可以被程序人員看見且指定為架構(gòu)指令集的一部分的信號來源。
在此所描述的舍入位僅為例示,而不同的實(shí)施方式會產(chǎn)生不同的舍入位組。舉例來說,在另一實(shí)施例中,調(diào)整后的乘法器45亦包含一保護(hù)位產(chǎn)生器以產(chǎn)生一保護(hù)位G1。在另一實(shí)施例中,調(diào)整后的乘法器亦對一零結(jié)果(zero result)的符號執(zhí)行一預(yù)運(yùn)算,并將其值儲存于舍入快取。若是調(diào)整后的加法器50后續(xù)運(yùn)算的結(jié)果為零結(jié)果,舍入加法器50就會使用此儲存的零結(jié)果符號指標(biāo)來產(chǎn)生最終的帶符號零結(jié)果。
依據(jù)本發(fā)明的另一實(shí)施例,舍入快取55是一位于調(diào)整后的乘法器45外部的存儲器儲存空間。不過,在另一個不同的實(shí)施例中,此舍入快取55結(jié)合于調(diào)整后的乘法器55內(nèi)。
尤其是在一實(shí)施例中,此舍入快取55未經(jīng)結(jié)果總線而獨(dú)自連接至指令執(zhí)行單元。有鑒于結(jié)果總線用以將結(jié)果從指令執(zhí)行單元傳送至一通用儲存空間,舍入快取55獨(dú)自連接至結(jié)果總線55而未經(jīng)結(jié)果總線。此外,運(yùn)算控制指標(biāo)儲存空間僅能為用于儲存或載入運(yùn)算控制指標(biāo)的指令所存取。借此,即可通過輸出指令結(jié)果的結(jié)果總線以外的其他機(jī)制來存取舍入快取55,舉例來說,可通過舍入快取自身的導(dǎo)線。此外,亦可通過指令執(zhí)行單元的輸入運(yùn)算元端口外的其他機(jī)制來存取舍入快取55。
在一實(shí)施例中,舍入快取55是一完全關(guān)聯(lián)(fully associative)的可存取存儲器,其具有的寫入端口的數(shù)量相當(dāng)于可平行分派的FMA1微指令的最大數(shù)量;其具有的讀取端口的數(shù)量相當(dāng)于可平行分派的FMA2微指令的最大數(shù)量;而其深度(項(xiàng)目數(shù)量)關(guān)聯(lián)于指令排程的容量,與FMA1微指令分派后而在指令排程分派FMA2微指令前所能清空的最長時間周期(以時鐘周期計(jì))。另一實(shí)施例使用較小的舍入快取55,而微處理器10在舍入快去55內(nèi)無法取得儲存FMA1微指令的舍入位結(jié)果的空間時,重新執(zhí)行FMA1微指令。
快取的各個項(xiàng)目儲存快取數(shù)據(jù)與相關(guān)聯(lián)的旗標(biāo)值(tag value),此旗標(biāo)值可與用以辨識儲存有儲存格式中間結(jié)果向量的重命名暫存器155的旗標(biāo)值相同。在微處理器10準(zhǔn)備(prepare)/拿取(fetch)供第二使用的運(yùn)算元時,微處理器10使用重排緩沖器索引(ROB index)來由重命名暫存器155取回所儲存的中間數(shù)據(jù),與此相同的索引將會提供至舍入快取55,并提供中間結(jié)果150的剩下部分(即運(yùn)算控制指標(biāo))。
其優(yōu)點(diǎn)在于,本發(fā)明的配置給舍入快取55的物理上儲存項(xiàng)目的數(shù)量明顯少于配置給重命名暫存器155的項(xiàng)目數(shù)量。重命名暫存器155的數(shù)量是進(jìn)行中(in flight)的微指令數(shù)量與需要使非循序微處理器或設(shè)計(jì)的執(zhí)行單元飽和所需的暫存器名稱數(shù)量的函數(shù)。比較起來,舍入快取55所需的項(xiàng)目數(shù)量則為進(jìn)行中的FMA微指令的可能數(shù)量的函數(shù)。因此,在一未受限的實(shí)例中,微處理器的核可提供六十五個重命名暫存器155,但只提供八個舍入快取55的項(xiàng)目提供給至多八個平行處理的算術(shù)運(yùn)算。
本發(fā)明的另一實(shí)施例擴(kuò)充用以儲存中間結(jié)果向量的重命名暫存器155(即擴(kuò)大重命名暫存器的寬度),以提供額外的位供舍入快取55使用。此實(shí)施例雖非本發(fā)明空間利用的最佳者,但亦屬于本發(fā)明的范圍內(nèi)。
舍入位連同中間結(jié)果指標(biāo)IRVector包含儲存格式中間結(jié)果150。此儲存格式依據(jù)一標(biāo)準(zhǔn)數(shù)據(jù)格式儲存與/或傳送未舍入標(biāo)準(zhǔn)化加總結(jié)果145的最重要位(即具有默認(rèn)值的位),并且將未舍入標(biāo)準(zhǔn)化加總結(jié)果145的剩下位(縮減或未縮減),連同E1、Z、U1與O1位,進(jìn)行儲存與/或傳送,因而相較于現(xiàn)有技術(shù)具有顯著的優(yōu)勢。
調(diào)整后的加法器
現(xiàn)在請參照圖6,調(diào)整后的加法器50包含一運(yùn)算元調(diào)整器60、對準(zhǔn)與條件邏輯330、以及一個與一單一位溢位移位邏輯345配對的遠(yuǎn)路徑累加模組340。此運(yùn)算元調(diào)整器160并包含一指數(shù)產(chǎn)生器335、一符號產(chǎn)生器365、一加法器舍入位產(chǎn)生器350、舍入位選擇邏輯175與一舍入運(yùn)算模組180。
值得注意的是,在本發(fā)明的一實(shí)施例中,調(diào)整后的加法器50具有一分路設(shè)計(jì)而使其通過各自獨(dú)立的近運(yùn)算與遠(yuǎn)運(yùn)算來計(jì)算結(jié)果,此技術(shù)為浮點(diǎn)運(yùn)算設(shè)計(jì)的技術(shù)人員所已知。近路徑的計(jì)算能力需要一個與一多位標(biāo)準(zhǔn)化移位器(未圖示)配對的近路徑加總模組(未圖示),此等能力未在圖6中顯現(xiàn)。在一實(shí)施例中,運(yùn)算元C與D的輸入指數(shù)值的差值位于{-1,0,+1}內(nèi)而構(gòu)成有效減法的一般加總運(yùn)算會被導(dǎo)向至近路徑16,其他的加法運(yùn)算則會被導(dǎo)向至遠(yuǎn)路徑170。其優(yōu)點(diǎn)在于,本發(fā)明可使調(diào)整后的加法器50的所有的FMA2子運(yùn)算都被導(dǎo)向至遠(yuǎn)路徑170。
調(diào)整后的加法器50提供一個或多個輸入端口310以接收一個微指令與兩個輸入運(yùn)算元。第一輸入運(yùn)算元D是一被減數(shù)或一第一加數(shù)。第二輸入運(yùn)算元C是一減數(shù)或一第二加數(shù)。在浮點(diǎn)運(yùn)算的實(shí)施例中,各個輸入運(yùn)算元包含一輸入符號、一指數(shù)、與一尾數(shù)值,分別以下標(biāo)S、E與M表示。通過解譯微指令,解碼器315利用信號QS指出此運(yùn)算究竟為一加法或是一減法運(yùn)算。通過解譯微指令(或是由微指令指令的一運(yùn)算元參考),解碼器并可以利用信號M來指出此微指令是否支配一個特定的微操作可使調(diào)整后的加法器50執(zhí)行FMA2子運(yùn)算。
在調(diào)整后的加法器50被賦予執(zhí)行FMA2子元運(yùn)算的任務(wù)時,調(diào)整后的加法器50接收由調(diào)整后的乘法器45先前執(zhí)行相對應(yīng)的FMA1子運(yùn)算所產(chǎn)生的中間結(jié)果向量IRVector。因?yàn)橹虚g結(jié)果向量IRVector的寬度僅為m個位,調(diào)整后的加法器50不需(而在一實(shí)施例中,不會)被調(diào)整成可接收或執(zhí)行多于m個位的有效位數(shù)。因此,相較于以較寬位數(shù)呈現(xiàn)的IRVector,本實(shí)施例可以簡化內(nèi)部數(shù)據(jù)路徑、累加模組340與調(diào)整后的加法器50的其他電路,并使其運(yùn)作更有效率。此外,因?yàn)樯婕皦K消去的累加運(yùn)算由調(diào)整后的乘法器45完成,在調(diào)整后的加法器50的近/塊消去路徑上不需加入舍入運(yùn)算邏輯來正確計(jì)算出FMA結(jié)果。
在一實(shí)施例中,調(diào)整后的加法器50從重命名暫存器155接收IRVector。在另一實(shí)施例中,則是從轉(zhuǎn)送總線40接收IRVector。而在圖6所示的實(shí)施例中,IRVector被接收為運(yùn)算元D。此調(diào)整后的加法器50接收累加數(shù)值C作為另一個運(yùn)算元。
若是M顯示調(diào)整后的加法器50被賦予執(zhí)行FMA2子元運(yùn)算的任務(wù),運(yùn)算元調(diào)整器160就會在Z是二進(jìn)位數(shù)一時,將輸入運(yùn)算元的一部分設(shè)定為等同于二進(jìn)位數(shù)零,以顯示C的累加運(yùn)算已經(jīng)由調(diào)整后的乘法器45執(zhí)行。在一實(shí)施例中,各個指數(shù)、尾數(shù)與符號的欄位CE、CM與CS均調(diào)整為零。在另一實(shí)施例中,只由指數(shù)與尾數(shù)的欄位CE、CM調(diào)整為零,至于符號的欄位CS則維持原樣。借此,調(diào)整后的加法器50即可將加數(shù)D加上一帶符號的二進(jìn)位數(shù)零。
一個二進(jìn)位數(shù)一的M位并通知調(diào)整后的加法器50接收由調(diào)整后的乘法器45所產(chǎn)生的舍入位,并將其并入儲存格式中間結(jié)果150。
在其他所有情況中,即Z為二進(jìn)位數(shù)零或是M為二進(jìn)位數(shù)零以顯示調(diào)整后的加法器50被賦予傳統(tǒng)累加運(yùn)算的任務(wù),運(yùn)算元調(diào)整器160只會對指數(shù)與尾數(shù)欄位CE與CM進(jìn)行傳統(tǒng)浮點(diǎn)加法運(yùn)算需要的調(diào)整。
在一實(shí)施例中,運(yùn)算元調(diào)整器160包含一對多工器接收Z的值,而在CM與零之間以及CE與零之間進(jìn)行選擇。選定的值在圖6中以CM*與CE*表示。隨后,對準(zhǔn)與條件邏輯330將對準(zhǔn)與/或調(diào)節(jié)此選定值CM*與第一運(yùn)算尾數(shù)DM。
接下來,遠(yuǎn)路徑累加模組340將CM*與DM相加。在一實(shí)施例中,此累加模組340為一雙加加法器,以提供總數(shù)與漸增總數(shù)。在一實(shí)施例中,此累加模組340利用1’補(bǔ)數(shù)(one’s complement)來執(zhí)行有效減法。若是此總數(shù)會在尾數(shù)欄位產(chǎn)生一位的溢位,溢位移位邏輯345就會條件地將總數(shù)移動一個位,以使結(jié)果值完成舍入運(yùn)算的準(zhǔn)備。
指數(shù)產(chǎn)生器335利用選定的指數(shù)值CE*、第一運(yùn)算元指數(shù)DE、與由溢位移位邏輯345產(chǎn)生的移位量來產(chǎn)生一最終指數(shù)FExp。
符號產(chǎn)生器365依據(jù)由第一與第二運(yùn)算元CS與DS、加/減運(yùn)算子QS與加總結(jié)果符號構(gòu)成的函數(shù)來產(chǎn)生一最終符號FSgn。
在另一實(shí)施例中,運(yùn)算元調(diào)整器160以選擇器邏輯取代。當(dāng)輸入解碼器顯示加法器正在執(zhí)行FMA2子運(yùn)算而Z是二進(jìn)位數(shù)一以顯示C的累加運(yùn)算已執(zhí)行,此選擇器邏輯會使第一運(yùn)算元D直接轉(zhuǎn)送至舍入運(yùn)算模組180,但使加總邏輯維持在休眠狀態(tài)(quiescent state)。
調(diào)整后的加法器50的邏輯產(chǎn)生一組自己的舍入位R2、S2、U2、O2與E2。當(dāng)M顯示調(diào)整后的加法器50被賦予執(zhí)行FMA2子運(yùn)算的任務(wù)時,調(diào)整后的加法器50也會接收多個由執(zhí)行FMA1子運(yùn)算的調(diào)整后的乘法器45事先產(chǎn)生的舍入位R1、S1、U1、O1、Z與E1。
在M為二進(jìn)位數(shù)一的情況下,舍入位選擇邏輯175會確認(rèn)來自調(diào)整后的乘法器45的舍入位E1、R1與S1、來自調(diào)整后的加法器50的舍入位E2、R2與S2、或是二者的某些混合或組合,將會被加法器的舍入運(yùn)算模組180用以產(chǎn)生最終的舍入后尾數(shù)結(jié)果。舉例來說,若是所執(zhí)行的運(yùn)算并非FMA2子運(yùn)算(即M=0),舍入運(yùn)算模組180就會使用加法器產(chǎn)生的舍入位E2、R2與S2。另外,若是累加運(yùn)算由調(diào)整后的乘法器45執(zhí)行(即M=1且Z=1),并且不存在不足位的情形(即UM=0),就由乘法器產(chǎn)生的舍入位E1、R1與S1來提供舍入運(yùn)算模組180產(chǎn)生最終舍入后結(jié)果所需的任何物件。
此可變位置的舍入運(yùn)算模組作為調(diào)整后的加法器50的遠(yuǎn)計(jì)算功能的部分來設(shè)置。而在一實(shí)施例中,此舍入運(yùn)算模組配合由1’補(bǔ)數(shù)有效減法所造成的正差值舍入運(yùn)算,并且還配合由非有效減法的加總運(yùn)算所造成的正總數(shù)舍入運(yùn)算。此舍入運(yùn)算模組180以類似于傳統(tǒng)單一加/減單元執(zhí)行的方式,執(zhí)行選定的舍入位RX、黏位SX,而在有提供的時候也會執(zhí)行保護(hù)位GX(未圖示)。此舍入運(yùn)算模組180由傳統(tǒng)設(shè)計(jì)進(jìn)行修改以接收至少一補(bǔ)充輸入,即選定的端回進(jìn)位位EX,而若是由調(diào)整后的乘法器45執(zhí)行1’補(bǔ)數(shù)有效減法,即可顯示需要一端回進(jìn)位校正。使用選定的RX、SX與EX輸入,舍入運(yùn)算模組180可正確地對中間結(jié)果向量與帶符號零的加總執(zhí)行舍入運(yùn)算,以產(chǎn)生正確而符合IEEE標(biāo)準(zhǔn)的結(jié)果。此為浮點(diǎn)運(yùn)算設(shè)計(jì)的技術(shù)領(lǐng)域人員所能理解。
如前述,調(diào)整后的加法器50需要近路徑165來執(zhí)行某些類型的傳統(tǒng)累加運(yùn)算,但不需要近路徑165來執(zhí)行本文所述的FMA運(yùn)算。因此,在執(zhí)行本文所描述的FMA運(yùn)算類型時,近路徑邏輯165會在FMA運(yùn)算的過程中維持休眠狀態(tài)以降低耗能。
第一與第二FMA子運(yùn)算
圖7至10顯示本發(fā)明利用一第一FMA子運(yùn)算(FMA1)與一第二FMA子運(yùn)算(FMA2)執(zhí)行一不可分割分路乘積-累加運(yùn)算的方法的一實(shí)施例。其中,F(xiàn)MA2子運(yùn)算并非臨時性相接于FMA1子運(yùn)算,也不是物理性上相接于FMA2子運(yùn)算。
圖7顯示FMA1子運(yùn)算的一路徑確認(rèn)部分。在步驟408中,F(xiàn)MA1子運(yùn)算確認(rèn)EffSub變數(shù)。當(dāng)EffSub為二進(jìn)位數(shù)一,即顯示是否累加數(shù)運(yùn)算元與乘數(shù)運(yùn)算元的乘積的累加運(yùn)算會構(gòu)成一有效減法。在步驟411中,F(xiàn)MA1子運(yùn)算選擇性地對累加數(shù)運(yùn)算元執(zhí)行位反相的運(yùn)算。在步驟414中,F(xiàn)MA1子運(yùn)算計(jì)算ExpDelta。ExpDelta等于乘數(shù)與被乘數(shù)的指數(shù)的加總減去累加數(shù)的指數(shù)與一指數(shù)偏移。ExpDelta不只確認(rèn)乘數(shù)尾數(shù)與累加數(shù)尾數(shù)的相對對準(zhǔn)以供加法運(yùn)算之用,也會配合EffSub變數(shù)來確認(rèn)累加數(shù)運(yùn)算元的累加運(yùn)算是否將由FMA1子運(yùn)算執(zhí)行。
在步驟417中,F(xiàn)MA1子運(yùn)算確認(rèn)路徑控制信號Z。當(dāng)數(shù)值為二進(jìn)位數(shù)一,即表示有一個累加數(shù)運(yùn)算元的加總運(yùn)算,會利用調(diào)整后的乘法器45電路,在FMA1子運(yùn)算中執(zhí)行。在一實(shí)施例中,F(xiàn)MA1子運(yùn)算在ExpDelta大于或等于負(fù)一時,將二進(jìn)位數(shù)一指派給Z,而在ExpSub為一且ExpDelta為負(fù)二時,也會將二進(jìn)位數(shù)一指派給Z。其他的實(shí)施方式會以不同方式分割ExpDelat與EffSub的數(shù)字空間。
圖8是FMA1子運(yùn)算的乘法與條件累加部分的方塊示意圖。在步驟420中,F(xiàn)MA1子運(yùn)算選擇一累加路徑供累加運(yùn)算元使用。若是Z為二進(jìn)位數(shù)零,如步驟426所示,F(xiàn)MA1子運(yùn)算就會計(jì)算乘數(shù)運(yùn)算元的部分乘積的加總,而不加上累加數(shù)運(yùn)算元。另外,若是Z為二進(jìn)位數(shù)一,如步驟423所示,F(xiàn)MA1子運(yùn)算會調(diào)整選擇性互補(bǔ)累加數(shù)尾數(shù)的對準(zhǔn)值,其調(diào)整量為ExpDelta值的函數(shù)。就一實(shí)施例而言,此調(diào)整量等于ExpDelta加上一移位常數(shù)。
在步驟426/429中,F(xiàn)MA1子運(yùn)算執(zhí)行一第一累加運(yùn)算,其為(a)乘數(shù)和被乘數(shù)運(yùn)算元的部分乘積(即步驟426),或是(b)累加數(shù)運(yùn)算元與乘數(shù)和被乘數(shù)運(yùn)算元的部分乘積(即步驟429)。在步驟432中,F(xiàn)MA1子運(yùn)算條件執(zhí)行一前導(dǎo)位預(yù)測,來預(yù)測總數(shù)的最重要前導(dǎo)位所需要的消去。前導(dǎo)位預(yù)測的運(yùn)算限于類型1的FMA運(yùn)算75,并且會與步驟429中部分的加總運(yùn)算平行執(zhí)行。另外,前導(dǎo)位預(yù)測邏輯可連接至步驟426或步驟429以處理其運(yùn)算結(jié)果。
經(jīng)過步驟426或429,以及步驟432的執(zhí)行后,F(xiàn)MA1子運(yùn)算會產(chǎn)生一未經(jīng)舍入、非冗余的標(biāo)準(zhǔn)化加總結(jié)果145(如步驟435所示)。接下來,F(xiàn)MA1子運(yùn)算會產(chǎn)生一儲存格式中間結(jié)果150(如步驟438所示)。一旦儲存格式中間結(jié)果150被儲存或分派至轉(zhuǎn)送總線40,F(xiàn)MA1子運(yùn)算就會終止,并釋放執(zhí)行FMA1子運(yùn)算的資源(例如作為調(diào)整后的乘法器45的指令執(zhí)行單元)給其他與FMA運(yùn)算無關(guān)的運(yùn)算使用。所屬技術(shù)領(lǐng)域人員當(dāng)可理解,此技術(shù)亦可同樣適用于可同時通過連續(xù)階段執(zhí)行多個運(yùn)算的管線乘法器。
圖9A與9B詳細(xì)說明產(chǎn)生儲存格式中間結(jié)果150的程序。在步驟441中,F(xiàn)MA1子運(yùn)算確認(rèn)是否因累加數(shù)的累加運(yùn)算構(gòu)成有效減法,而存在待定的端回進(jìn)位校正。若是Z與EffSub均為二進(jìn)位數(shù)一(即類型1的FMA運(yùn)算75或是類型4的FMA運(yùn)算90),并且由步驟435所產(chǎn)生的未經(jīng)舍入非冗余的結(jié)果為正,F(xiàn)MA1子運(yùn)算就會將二進(jìn)位數(shù)一指派給變數(shù)E1。
在步驟444中,F(xiàn)MA1子運(yùn)算通過對尾數(shù)執(zhí)行位反相的運(yùn)算,而產(chǎn)生一原始尾數(shù)結(jié)果(germinal mantissa result,GMant)。若運(yùn)算結(jié)果為負(fù),就通過移位,將尾數(shù)標(biāo)準(zhǔn)化為一標(biāo)準(zhǔn)儲存格式。
在步驟447中,F(xiàn)MA1子運(yùn)算產(chǎn)生一中間結(jié)果符號位(IRSgn)。若是E為二進(jìn)位數(shù)零,而Z與EffSub均為二進(jìn)位數(shù)一,IRSgn就會是被乘數(shù)與乘數(shù)的符號位的反邏輯互斥或結(jié)果。否則,IRSgn就會是被乘數(shù)與乘數(shù)的符號位的邏輯互斥或結(jié)果。
在步驟453中,F(xiàn)MA1子運(yùn)算將SC加上乘數(shù)與被乘數(shù)的指數(shù)值加總,再減去ExpBias,以產(chǎn)生PNExp。
在步驟456中,F(xiàn)MA1子運(yùn)算通過減少PNExp來處理PNMant的標(biāo)準(zhǔn)化運(yùn)算,借以產(chǎn)生中間結(jié)果指數(shù)值(IRExp)。
在步驟459中,F(xiàn)MA1子運(yùn)算確認(rèn)中間不足位(U1)與中間溢位(O1)位。
在步驟462中,F(xiàn)MA1子運(yùn)算由原始尾數(shù)(GMant)的最重要位產(chǎn)生一中間結(jié)果尾數(shù)(IRMant)。
在步驟465中,F(xiàn)MA1子運(yùn)算將構(gòu)成中間結(jié)果向量IRVector的IRSgn、IRMant與IRExp,儲存至儲存空間,例如一重命名暫存器。
在步驟468中,F(xiàn)MA1子運(yùn)算會將GMant的LSBS與部分乘積加法器240的移出位(Xtrastky)縮減至舍入位(R1)與粘位(S1)。而在另一實(shí)施例中,還包含一保護(hù)位(G1)。
在步驟471中,F(xiàn)MA1子運(yùn)算將R1、S1、E1、Z、U1與O1位紀(jì)錄于舍入快取55,而在提供有G1位時,也會一并記錄于舍入快取55。
圖10是一方塊圖顯示本發(fā)明不可分割分路FMA運(yùn)算的一第二FMA子運(yùn)算。
在步驟474中,F(xiàn)MA2子運(yùn)算接收先前儲存在例如重命名暫存器的儲存空間內(nèi)的中間結(jié)果向量IRVector。另外,F(xiàn)MA2子運(yùn)算亦可由轉(zhuǎn)送總線接收IRVector。
在步驟477中,F(xiàn)MA2子運(yùn)算接收先前儲存在例如舍入快取55的儲存空間內(nèi)的舍入位。另外,F(xiàn)MA2子運(yùn)算亦可由轉(zhuǎn)送總線接收舍入位。
在步驟480中,F(xiàn)MA2子運(yùn)算接收累加數(shù)輸入值。
在決定步驟483中,F(xiàn)MA2子運(yùn)算檢視步驟474所接收的Z位。若是Z位為二進(jìn)位數(shù)一(或真)表示累加數(shù)的加總運(yùn)算已經(jīng)由FMA1子運(yùn)算執(zhí)行,此流程就會前進(jìn)至步驟486。否則就會前進(jìn)至步驟489。
在步驟486中,F(xiàn)MA2子運(yùn)算將累加數(shù)輸入值的指數(shù)與尾數(shù)欄位調(diào)整為零。在一實(shí)施例中,F(xiàn)MA2子運(yùn)算并不調(diào)整輸入累加數(shù)的符號位。隨后在步驟492中,此FMA2子運(yùn)算會將計(jì)算中間結(jié)果指數(shù)與一帶符號零運(yùn)算元的總數(shù)。接下來前進(jìn)至步驟494。
在步驟489中,F(xiàn)MA2子運(yùn)算計(jì)算中間結(jié)果指數(shù)與累加數(shù)的總數(shù)。接下來前進(jìn)至步驟494。
在步驟494中,F(xiàn)MA2子運(yùn)算利用FMA1子運(yùn)算產(chǎn)生的Z、U1、O1位以及FMA2子運(yùn)算產(chǎn)生的U2與O2位,從舍入位E1、E2、R1、R2、S1與S2中,選擇會用來對總數(shù)的尾數(shù)進(jìn)行正確舍入運(yùn)算的舍入位。
在步驟496中,F(xiàn)MA2子運(yùn)算利用選定的舍入位來對總數(shù)進(jìn)行正確的舍入運(yùn)算。此FMA2子運(yùn)算在執(zhí)行尾數(shù)舍入程序的同時,選擇性地使IRExp遞增(步驟498)。如此,F(xiàn)MA2子運(yùn)算即可產(chǎn)生一最終經(jīng)舍入的結(jié)果。
圖7至10中所描述的部分步驟可不需圖示順序執(zhí)行。此外,第七至十圖中所描述的部分步驟亦可平行執(zhí)行。
運(yùn)算類型的應(yīng)用
此章節(jié)說明前述應(yīng)用于圖2的五種不同運(yùn)算“類型”的各種變數(shù)數(shù)值間的功能性關(guān)聯(lián),尤其著重于PNMant的運(yùn)算、符號與標(biāo)準(zhǔn)化處理以及與各個數(shù)據(jù)類型相關(guān)的EffSub、ExpDelta、Z、E與IntSgn的數(shù)值。
第一類型
如圖2所示,類型1的FMA運(yùn)算75的特點(diǎn)在于,此運(yùn)算涉及一有效減法(因此,EffSub=1),而調(diào)整后的乘法器45被選定以執(zhí)行C的累加運(yùn)算(因此,Z=1),而C的大小相當(dāng)接近A和B的乘積(即-2<=ExpDelta<=1)而會造成塊消去的產(chǎn)生。
因?yàn)槔奂舆\(yùn)算將會于調(diào)整后的乘法器45內(nèi)執(zhí)行而造成有效減法(即EffSub=1且Z=1),累加數(shù)對準(zhǔn)與射入模組220會在將累加數(shù)運(yùn)算元尾數(shù)值CM射入部分乘積加法器240前,對累加數(shù)運(yùn)算元尾數(shù)值CM造成與/或選擇一位反相運(yùn)算。相對于部分乘積,此累加數(shù)對準(zhǔn)與射入模組220會利用ExpDelta,來對準(zhǔn)部分乘積加法器240內(nèi)的累加數(shù)尾數(shù)。
隨后,對于未經(jīng)舍入的非冗余數(shù)值145(即PNMant)的完整加總運(yùn)算依照傳統(tǒng)乘法執(zhí)行單元通常采用的方法來執(zhí)行,此執(zhí)行包含部分乘積的加總運(yùn)算內(nèi),額外被選擇性位求與相對準(zhǔn)的累加數(shù)輸入值。因而PNMant即可以1’補(bǔ)數(shù)的形式,表示乘數(shù)與被乘數(shù)尾數(shù)值以及累加數(shù)尾數(shù)值間的算數(shù)差。
PNMant可為正或負(fù)。若是PNMane為正就需要端回進(jìn)位,而等待中的端回進(jìn)位指標(biāo)E1就會被指派為二進(jìn)位數(shù)一。若是PNMant為負(fù)就不需要端回進(jìn)位,而E1就會被指派為二進(jìn)位數(shù)零。E1被指派的值不僅為PNMant的函數(shù),亦為Z與EffSub的值的函數(shù),而在類型1的運(yùn)算75中,Z與EffSub會是二進(jìn)位數(shù)一。
在部分乘積與累加數(shù)輸入加總運(yùn)算的同時,也會執(zhí)行前導(dǎo)位預(yù)測來對任何最重要前導(dǎo)位需要的任何消去進(jìn)行預(yù)測。如前述,于本發(fā)明一實(shí)施例中,此運(yùn)算由一與最終加法器125并行的電路,于執(zhí)行PNMant的加總運(yùn)算時執(zhí)行。
如浮點(diǎn)運(yùn)算設(shè)計(jì)的技術(shù)領(lǐng)域人員所能理解,即使沒有發(fā)生前導(dǎo)位的相減消去,可能還是需要對PNMant執(zhí)行一個零、一或二位位置的標(biāo)準(zhǔn)化運(yùn)算,利用SC至PNExp來使其對準(zhǔn)于所需的儲存格式,以供本發(fā)明描述與使用的中間結(jié)果150之用。若存在塊消去,顯然就會需要更多的移位運(yùn)算。同樣地,若是PNMant為負(fù),就會對此數(shù)值執(zhí)行位反相的運(yùn)算。對PNMant執(zhí)行選擇性標(biāo)準(zhǔn)化與位反相運(yùn)算用以產(chǎn)生原始尾數(shù)值GMant,其最重要m位變成中間結(jié)果尾數(shù)IRMant。
中間結(jié)果符號IRSgn不是被乘數(shù)符號位AS與乘數(shù)符號位BS的邏輯XOR運(yùn)算結(jié)果,就是其邏輯NXOR運(yùn)算結(jié)果,端視E1的數(shù)值而定。若是E1為二進(jìn)位數(shù)一,IRSgn會被計(jì)算為被乘數(shù)符號位與乘數(shù)符號位的邏輯XOR運(yùn)算結(jié)果。若是E1為二進(jìn)位數(shù)零,IRSgn就會被計(jì)算為被乘數(shù)符號位與乘數(shù)符號位的邏輯XOR運(yùn)算結(jié)果。
回到FMA2運(yùn)算,調(diào)整后的加法器50會接收包含路徑控制信號Z在內(nèi)的已儲存或轉(zhuǎn)送的舍入位,因?yàn)閆為1,中間結(jié)果向量IRVector需要執(zhí)行舍入運(yùn)算,而會對最終的乘積-累加結(jié)果產(chǎn)生些微調(diào)整。在一實(shí)施例中,調(diào)整后的加法器50將中間結(jié)果向量IRVector與一零運(yùn)算元(或是在另一實(shí)施例中,一帶符號二進(jìn)位數(shù)零的運(yùn)算元)加總,而非與所提供的第二運(yùn)算元,即累加數(shù)C,做加總運(yùn)算。
在最后的執(zhí)行步驟中,調(diào)整后的加法器50會在加總運(yùn)算與完成舍入運(yùn)算前對接收到的IRExp進(jìn)行調(diào)整,以涵蓋較大的數(shù)字范圍,例如可涵蓋FMA運(yùn)算的目標(biāo)數(shù)據(jù)類型的不足位與溢位指數(shù)范圍。在接收到的數(shù)值Z=1位時,調(diào)整后的加法器50會以采取一個使IRExp遞增、而大部分均為傳統(tǒng)方式的方法,利用所接收到的R、S、U、O與E位來對IRVector執(zhí)行舍入運(yùn)算。
第二類型
如圖2所示,類型2的FMA運(yùn)算80的特點(diǎn)在于,此運(yùn)算不涉及有效減法(因此,EffSub=0),調(diào)整后的乘法器45被選定以執(zhí)行C的累加運(yùn)算(因此,Z=1),而相較于A和B的乘積,C的大小相當(dāng)小。
因?yàn)榇诉\(yùn)算不會造成有效減法(即EffSub=0),累加數(shù)對準(zhǔn)與射入邏輯220就不會在將累加數(shù)運(yùn)算元尾數(shù)值CM射入部分乘積加法器240前,對累加數(shù)運(yùn)算元尾數(shù)值CM造成與/或選擇一位反相運(yùn)算。
累加數(shù)對準(zhǔn)與射入模組220利用ExpDelta來使累加數(shù)尾數(shù)對準(zhǔn)部分乘積,以將累加數(shù)尾數(shù)射入部分乘積加法器240。
在此將不會產(chǎn)生負(fù)的PNMant。此外,所產(chǎn)生的正的PNMant并非1’補(bǔ)數(shù)的減法運(yùn)算的結(jié)果,因而不需端回進(jìn)位校正。因此,等待中的端回進(jìn)位指標(biāo)E1就會被指派為二進(jìn)位數(shù)零。
因?yàn)椴⒎且挥行p法運(yùn)算,此運(yùn)算中將不會產(chǎn)生前導(dǎo)位的減法塊消去,因而不需執(zhí)行前導(dǎo)位預(yù)測來預(yù)測此等消去。反之,前導(dǎo)位預(yù)測則可用以依據(jù)SC至PNExp的貢獻(xiàn)程度,來預(yù)測所需的0、1、或2位位置的標(biāo)準(zhǔn)化運(yùn)算。
如同浮點(diǎn)運(yùn)算設(shè)計(jì)的技術(shù)領(lǐng)域人員所能理解,A和B乘積與C的加總會產(chǎn)生一具有算術(shù)顯著性或比重、較乘數(shù)與被乘數(shù)的乘積大于一數(shù)位位置的溢位情形,因此需要對PNMant執(zhí)行零、一或二位位置的標(biāo)準(zhǔn)化運(yùn)算,來使數(shù)值對準(zhǔn)用于本發(fā)明所描述與利用的中間結(jié)果的儲存格式。此標(biāo)準(zhǔn)化運(yùn)算會產(chǎn)生原始尾數(shù)值GMant,而其最重要m位會成為中間結(jié)果尾數(shù)IRMant。
預(yù)標(biāo)準(zhǔn)化指數(shù)PNExp通過將輸入的乘數(shù)與被乘數(shù)指數(shù)值相加,再減去任何指數(shù)偏移值,最后再加上SC=2,此數(shù)值于Z=1的情況合下依據(jù)最負(fù)的ExpDelta而定。如圖2對于類型2的運(yùn)算的描述可知,C的大小并不會明顯大于A和B的乘積,因此,所造成的總數(shù)會等于或大于所輸入的累加數(shù)。
因?yàn)榇诉\(yùn)算并非有效減法(即EffSub=0),中間結(jié)果符號IRSgn視為被乘數(shù)符號位AS與乘數(shù)符號位BS的XOR邏輯運(yùn)算結(jié)果。
回到FMA2運(yùn)算,調(diào)整后的加法器50會接收包含路徑控制信號Z的已儲存或轉(zhuǎn)送的舍入位。因?yàn)閆是二進(jìn)位數(shù)一,中間結(jié)果向量IRVector只需要一些最后處理,主要就是舍入運(yùn)算,即可產(chǎn)生最終的乘積-累加結(jié)果。在一實(shí)施例中,此調(diào)整后的加法器50將中間結(jié)果向量IRVector與一零運(yùn)算元(在另一實(shí)施例中,可為一帶符號二進(jìn)位數(shù)零運(yùn)算元)做加總,而非與所提供的第二運(yùn)算元,即累加數(shù)C,做加總運(yùn)算。
在最后的執(zhí)行步驟中,調(diào)整后的加法器50會對接收到的IRExp進(jìn)行調(diào)整,以涵蓋較大的數(shù)字范圍,例如可涵蓋FMA運(yùn)算的目標(biāo)數(shù)據(jù)類型的不足位與溢位指數(shù)范圍。此調(diào)整后的加法器50會以采取一個使IRExp遞增、而大部分均為傳統(tǒng)方式的方法,來對IRVector執(zhí)行舍入運(yùn)算以產(chǎn)生最終的正確結(jié)果。
第三類型
如圖2所示,類型3的FMA運(yùn)算85的特點(diǎn)在于,此運(yùn)算不涉及有效減法(因此,EffSub=0),調(diào)整后的加法器50被選定以執(zhí)行C的累加運(yùn)算(因此,Z=0),而相較于A和B的乘積,C的大小相當(dāng)大。
因此,EffSub為二進(jìn)位數(shù)零。此外,路徑控制信號Z亦為二進(jìn)位數(shù)零,以顯示累加數(shù)運(yùn)算元的加總運(yùn)算尚未執(zhí)行。因?yàn)閆與EffSub均為二進(jìn)位數(shù)零,等待中的端回進(jìn)位指標(biāo)E1會被指派為二進(jìn)位數(shù)零。
因?yàn)閆是二進(jìn)位數(shù)零,累加數(shù)對準(zhǔn)與射入邏輯220不會將乘數(shù)單元部分乘積加總數(shù)內(nèi)的累加數(shù)輸入的尾數(shù)進(jìn)行對準(zhǔn)。不過,累加數(shù)對準(zhǔn)與射入邏輯220會使此對準(zhǔn)輸入的算術(shù)值為零。
隨后,對于部分乘積與未經(jīng)舍入的非冗余數(shù)值145的完整加總運(yùn)算依照傳統(tǒng)乘法執(zhí)行單元通常采用的方法來執(zhí)行,此方法不包含輸入累加數(shù)的尾數(shù)值。因?yàn)榇薋MA運(yùn)算類并非有效減法(即EffSub=0),此加總運(yùn)算將不會產(chǎn)生正的PNMant,并由SumSgn表示。此外,此正值的PNMant并非1’補(bǔ)數(shù)減法運(yùn)算的結(jié)果,因而不需要使用端回進(jìn)位校正。
因?yàn)榇诉\(yùn)算并非一有效減法運(yùn)算,此運(yùn)算中將不會發(fā)生前導(dǎo)位的減法塊消去,因而不需執(zhí)行前導(dǎo)位預(yù)測來預(yù)測此等消去。
A和B的乘積會在乘數(shù)與被乘數(shù)的尾數(shù)乘積產(chǎn)生一位數(shù)位置的算術(shù)溢位。因而需要對此正的未經(jīng)舍入非冗余值執(zhí)行零或一位位置的標(biāo)準(zhǔn)化運(yùn)算,來使此數(shù)值對準(zhǔn)本發(fā)明所描述或使用的中間結(jié)果格式。此標(biāo)準(zhǔn)化運(yùn)算會產(chǎn)生原始尾數(shù)值GMant,而其最重要m位會成為中間結(jié)果尾數(shù)IRMant。
因?yàn)槭孪却_認(rèn)的路徑控制信號Z為二進(jìn)位數(shù)零,顯示累加運(yùn)算尚未被執(zhí)行,此中間結(jié)果符號IRSgn就會被視為被乘數(shù)符號位AS與乘數(shù)符號位BS的XOR邏輯運(yùn)算結(jié)果。
回到FMA2運(yùn)算,調(diào)整后的加法器50接收包含Z在內(nèi)的已儲存或轉(zhuǎn)送的舍入位。因?yàn)閆為二進(jìn)位數(shù)零,調(diào)整后的加法器50會使中間結(jié)果向量,即第一運(yùn)算元,與累加數(shù)C,即第二運(yùn)算元,做加總運(yùn)算。
在執(zhí)行此累加運(yùn)算之前,此調(diào)整后的加法器50可調(diào)整IRExp以涵蓋較大的數(shù)字范圍,例如可涵蓋FMA運(yùn)算的目標(biāo)數(shù)據(jù)類型的不足位與溢位指數(shù)范圍。因?yàn)榇诉\(yùn)算是由累加數(shù)數(shù)值主導(dǎo)運(yùn)算結(jié)果的類型3的運(yùn)算85,IRExp將會比累加數(shù)輸入指數(shù)值來的小。
此運(yùn)算有利于使調(diào)整后的加法器50的遠(yuǎn)路徑加總運(yùn)算的二個運(yùn)算元生效。在遠(yuǎn)路徑加總運(yùn)算中,具有較小指數(shù)值的運(yùn)算元的尾數(shù)于對準(zhǔn)程序中向右移位。任何如此移位超過所需舍入位的尾數(shù)位就會被用于舍入運(yùn)算。因?yàn)槔奂訑?shù)會主導(dǎo)運(yùn)算結(jié)果,因而可以不用提供位給舍入運(yùn)算,而能簡化必要的舍入運(yùn)算。
調(diào)整后的加法器50會使用由調(diào)整后的加法器50所執(zhí)行的部分運(yùn)算所產(chǎn)生的G2(如果有的話)、R2、S2與E2(具有二進(jìn)位數(shù)值零)舍入位,連同R1、S1與E1,來對中間結(jié)果與累加數(shù)輸入值的總數(shù)進(jìn)行舍入運(yùn)算,以產(chǎn)生FMA運(yùn)算的最終經(jīng)舍入的正確結(jié)果,此為熟習(xí)浮點(diǎn)運(yùn)算設(shè)計(jì)領(lǐng)域技術(shù)人員所能理解。
第四類型
如圖2所示,類型4的FMA運(yùn)算90的特點(diǎn)在于,此運(yùn)算涉及有效減法(因此,EffSub=1),調(diào)整后的乘法器45被選定以執(zhí)行C的累加運(yùn)算(因此,Z=1),而相較于A和B的乘積,C的大小相當(dāng)小。
因?yàn)槔奂舆\(yùn)算將會于調(diào)整后的乘法器45內(nèi)執(zhí)行而造成有效減法(即EffSub=1且Z=1),累加數(shù)對準(zhǔn)與射入模組220會在將累加數(shù)運(yùn)算元尾數(shù)值CM射入部分乘積加法器240前,對累加數(shù)運(yùn)算元尾數(shù)值CM造成與/或選擇一位反相運(yùn)算。相對于部分乘積,此累加數(shù)對準(zhǔn)與射入模組220會利用ExpDelta,來對準(zhǔn)部分乘積加法器240內(nèi)的累加數(shù)尾數(shù)。
因?yàn)锳和B的乘積的大小明顯大于C,此運(yùn)算中將不會發(fā)生前導(dǎo)位的減法塊消去,因而不需執(zhí)行前導(dǎo)位預(yù)測來預(yù)測此等消去。
此外,加總程序會產(chǎn)生正的PNMant。因此,待定的端回進(jìn)位指標(biāo)E1會被指派為二進(jìn)位數(shù)一,之后會通知調(diào)整后的加法器50還需要對中間結(jié)果尾數(shù)執(zhí)行端回進(jìn)位校正。
如同浮點(diǎn)運(yùn)算設(shè)計(jì)領(lǐng)域具有合理技術(shù)人員所能理解,PNMant可能需要依據(jù)所提供的SC至PNExp,執(zhí)行零、一或二位位置的移位或標(biāo)準(zhǔn)化運(yùn)算,使其對準(zhǔn)于本發(fā)明所述或使用的中間結(jié)果所需的儲存格式。隨后,此標(biāo)準(zhǔn)化運(yùn)算會選擇性地執(zhí)行于此未經(jīng)舍入的非冗余值,以產(chǎn)生原始尾數(shù)值GMant,其最重要著m位會成為中間結(jié)果尾數(shù)IRMant。
因?yàn)轭愋?的運(yùn)算90涉及C的加總運(yùn)算(即Z=1),而此加總運(yùn)算會構(gòu)成有效減法(即EffSub=1),在需要端回進(jìn)位(即E1為1)的情況合下產(chǎn)生正的PNMant,中間結(jié)果符號IRSgn會被視為被乘數(shù)符號位AS與乘數(shù)符號位BS的XOR邏輯運(yùn)算結(jié)果。
回到FMA2運(yùn)算,調(diào)整后的加法器50接收包含路徑控制信號Z在內(nèi)的已儲存或轉(zhuǎn)送的舍入位。因?yàn)閆為1,中間結(jié)果向量IRVector只需一些最后處理,主要就是舍入運(yùn)算,即可產(chǎn)生最終的乘積-累加結(jié)果。在一實(shí)施例中,此調(diào)整后的加法器50將中間結(jié)果向量IRVector與一零運(yùn)算元(在另一實(shí)施例中,可為一帶符號二進(jìn)位數(shù)零運(yùn)算元)做加總,而非與所提供的第二運(yùn)算元,即累加數(shù)C,做加總運(yùn)算。
在執(zhí)行零(或二進(jìn)位數(shù)帶符號零)的累加運(yùn)算前,調(diào)整后的加法器會調(diào)整IRExp以涵蓋較大的數(shù)字范圍,例如可涵蓋FMA運(yùn)算的目標(biāo)數(shù)據(jù)類型的不足位與溢位指數(shù)范圍。
響應(yīng)儲存格式中間結(jié)果150內(nèi)所接收的E位二進(jìn)位數(shù)值,此運(yùn)算需要依據(jù)第一微指令執(zhí)行過程中執(zhí)行的1’補(bǔ)數(shù)有效減法產(chǎn)生端回進(jìn)位校正。因此,此E位連同儲存格式中間結(jié)果150的G1(如果有的話)、R1與S1位,做為調(diào)整后的加法器50執(zhí)行單元的調(diào)整后的舍入邏輯的補(bǔ)充輸入。
隨后,此調(diào)整后的舍入邏輯利用G1(如果存在的話)、R1、S1與E1補(bǔ)充輸入來計(jì)算中間結(jié)果向量與帶符號零的加總的正確舍入,以對類型4的FMA運(yùn)算產(chǎn)生正確的運(yùn)算結(jié)果。而此技術(shù)當(dāng)為熟習(xí)浮點(diǎn)運(yùn)算設(shè)計(jì)領(lǐng)域的技術(shù)人員所能理解。
第五類型
如圖2所示,類型5的FMA運(yùn)算的特點(diǎn)在于,此運(yùn)算涉及有效減法(因此,EffSub=1),調(diào)整后的加法器50被選定以執(zhí)行C的累加運(yùn)算(因此,Z=0),而相較于A和B的乘積,C的大小相當(dāng)大。
因?yàn)槔奂舆\(yùn)算不會于調(diào)整后的乘法器45內(nèi)執(zhí)行,累加數(shù)對準(zhǔn)與射入邏輯220不會對準(zhǔn)部分乘積加總數(shù)內(nèi)的CX,或是使此對準(zhǔn)輸入的算術(shù)值為零。此調(diào)整后的乘法器45依據(jù)現(xiàn)有技術(shù)的乘法執(zhí)行單元的常用方法來執(zhí)行部分乘積與PNMant的完整加總運(yùn)算。
因?yàn)橐褕?zhí)行C的加總運(yùn)算,此運(yùn)算中將不會發(fā)生前導(dǎo)位的減法塊消去,因而不需執(zhí)行前導(dǎo)位預(yù)測來預(yù)測此等消去。此外,雖然會產(chǎn)生正的PNMant,此數(shù)值并非1’補(bǔ)數(shù)減法的運(yùn)算結(jié)果。因此,此運(yùn)算不需要端回進(jìn)位校正,而E1會被指派為二進(jìn)位數(shù)零。
如同熟習(xí)浮點(diǎn)運(yùn)算設(shè)計(jì)領(lǐng)域的技術(shù)人員所能理解,PNMant可能需要依據(jù)所提供的SC至PNExp,執(zhí)行零、一或二位位置的移位或標(biāo)準(zhǔn)化運(yùn)算,使其對準(zhǔn)于中間結(jié)果150所需的儲存格式。此標(biāo)準(zhǔn)化運(yùn)算會產(chǎn)生原始尾數(shù)值GMant,其最重要m位會成為中間結(jié)果尾數(shù)IRMant。
因?yàn)轭愋?的運(yùn)算不涉及C的加總運(yùn)算(即Z=0),中間結(jié)果符號IRSgn會被視為被乘數(shù)符號位AS與乘數(shù)符號位BS的XOR邏輯運(yùn)算結(jié)果。
回到FMA2運(yùn)算,調(diào)整后的加法器50接收包含Z在內(nèi)的已儲存或轉(zhuǎn)送的舍入位。因?yàn)閆為0,中間結(jié)果向量IRVector需要與累加數(shù)C加總以產(chǎn)生最終的乘積-累加運(yùn)算結(jié)果。
因?yàn)轭愋?的運(yùn)算由累加數(shù)值主導(dǎo)運(yùn)算結(jié)果,IRExp會小于累加數(shù)輸入指數(shù)值,此運(yùn)算有利于使調(diào)整后的加法器50的遠(yuǎn)路徑加總運(yùn)算的二個運(yùn)算元生效。在遠(yuǎn)路徑加總運(yùn)算中,具有較小指數(shù)值的運(yùn)算元的尾數(shù)于對準(zhǔn)程序中向右移位,任何如此移位超過所需舍入位的尾數(shù)位就會被用于舍入運(yùn)算。因?yàn)槔奂訑?shù)會主導(dǎo)運(yùn)算結(jié)果,因而可以不用提供位給舍入運(yùn)算,而能簡化必要的舍入運(yùn)算。
因?yàn)橛蓛Υ娓袷街虚g結(jié)果150接收的待執(zhí)行端回進(jìn)位指標(biāo)E1是二進(jìn)位數(shù)零,因此,F(xiàn)MA1運(yùn)算沒有留下任何待執(zhí)行的端回進(jìn)位校正。是以,E1位連同儲存格式中間結(jié)果150的R1與S1位,以及G1位(如果存在的話),做為調(diào)整后的加法器50執(zhí)行單元的調(diào)整后的舍入位的補(bǔ)充輸入。
然而,由調(diào)整后的加法器50所執(zhí)行的累加運(yùn)算可能會另外導(dǎo)致1’補(bǔ)數(shù)有效減法的產(chǎn)生。如此,調(diào)整后的舍入邏輯即可產(chǎn)生包含端回進(jìn)位在內(nèi)的舍入位,來計(jì)算出中間結(jié)果向量與累加器輸入值的加總的正確舍入值,以產(chǎn)生FMA運(yùn)算的正確結(jié)果。而此技術(shù)當(dāng)為熟習(xí)浮點(diǎn)運(yùn)算設(shè)計(jì)領(lǐng)域的技術(shù)人員所能理解。
特定微指令
在本發(fā)明的另一個面向中,轉(zhuǎn)譯器與/或微碼只讀存儲器(ROM)20用以將FMA指令轉(zhuǎn)譯或轉(zhuǎn)換為第一與第二特定微指令,分別由乘法與加法單元執(zhí)行。舉例來說,第一(或更多)特定微指令可以在一類似于將傳統(tǒng)乘法單元進(jìn)行最小限度的調(diào)整,以符合所述目的的乘法執(zhí)行單元內(nèi)執(zhí)行。而第二(或更多)特定微指令可以在一類似于將傳統(tǒng)家法單元進(jìn)行最小限度的調(diào)整,以符合所述目的的加法執(zhí)行單元內(nèi)執(zhí)行。
圖11顯示本發(fā)明將融合FMA指令535通過FMA指令轉(zhuǎn)譯或轉(zhuǎn)換,產(chǎn)生第一與第二特定微指令553與571的一實(shí)施例。就一未受限的范例而言,此融合FMA指令535包含一指令操作碼欄538、一目標(biāo)欄541、一第一運(yùn)算元(被乘數(shù))欄544、一第二運(yùn)算元(乘數(shù))欄547、與一第三運(yùn)算元(累加數(shù))欄550。
依據(jù)操作碼欄538的指示,此FMA運(yùn)算可為一乘-加(multiply-add)、一乘-減(multiply-subtract)、一負(fù)乘-加(negative multiply-add)、或一負(fù)乘-減(negative multiply-subtract)指令。如同存在許多不同類型的FMA指令535,也會存在許多類型的第一特定微指令553,如乘-加、乘-減、負(fù)乘-加、或負(fù)乘-減微指令。這些類型的特征,如果有的話,會反映在相關(guān)的微指令553的操作碼欄556中。
第一特定微指令553會引導(dǎo)第一至第五類型的FMA運(yùn)算所需的部分算術(shù)運(yùn)算的實(shí)行。依據(jù)類型的不同,第一特定微指令553所執(zhí)行的特殊運(yùn)算亦有差異。第一特定微指令553分配給第一執(zhí)行單元,例如前文所述的調(diào)整后的乘法器45。
第二特定微指令571會引導(dǎo)第一至第五類型的FMA運(yùn)算所需的剩余算術(shù)運(yùn)算的實(shí)行。依據(jù)類型的不同,第二特定微指令571所執(zhí)行的特殊運(yùn)算亦有差異。在本實(shí)施例中,第二特定微指令571分配給第二執(zhí)行單元,例如前文所述的調(diào)整后的加法器50。為了方便浮點(diǎn)乘-加融合運(yùn)算或浮點(diǎn)乘-減融合運(yùn)算的實(shí)行,此第二特定微指令571可具有一子類型,例如加或減。
尤其是,此第一特定微指令553會將第一、第二與第三輸入運(yùn)算元544、547與550,分別特定為被乘數(shù)運(yùn)算元A、乘數(shù)運(yùn)算元B與累加數(shù)運(yùn)算元C。此第一特定微指令還可以特定一目標(biāo)欄559,指向暫時暫存器。又或者,此目標(biāo)暫存器559可為隱含者。
第一特定微指令553會引導(dǎo)FMA1子運(yùn)算執(zhí)行,即A和B的部分乘積與在某些條件下與C的加總,以產(chǎn)生未經(jīng)舍入的儲存格式中間結(jié)果150。此第一特定微指令553也會引導(dǎo)變數(shù)EffSub與ExpDelta的確認(rèn)動作,借以對一組預(yù)先確定的EffSub與ExpDelta值,產(chǎn)生指派給Z位的數(shù)值二進(jìn)位數(shù)一。此數(shù)值會依序控制許多相關(guān)程序。
二進(jìn)位數(shù)一的Z位指出此對累加數(shù)位的加總運(yùn)算將會于第一運(yùn)算中執(zhí)行,而不須由第二微指令來執(zhí)行。隨后,此Z位的指定與ExpDelta會用于使部分乘積加法器240內(nèi)被選擇性互補(bǔ)累加數(shù)尾數(shù)進(jìn)行對準(zhǔn),此部分乘積加法器240經(jīng)適當(dāng)調(diào)整使能接收此額外事項(xiàng)。
第一特定微指令553并引導(dǎo)一完整加總運(yùn)算對此未經(jīng)舍入的非冗余值(PNMant)執(zhí)行。此完整加總運(yùn)算依據(jù)傳統(tǒng)乘法執(zhí)行單元的通常方法,但在部分乘積的加總運(yùn)算中,納入額外的選擇性位反相、已對準(zhǔn)的累加數(shù)輸入值CM或。若是PNum為負(fù),此條件就會由信號SumSgn表示。
第一特定微指令553并引導(dǎo)PNMant的移位與位反相運(yùn)算,以產(chǎn)生一原始尾數(shù)值(GMant),接下來會執(zhí)行GMant的縮減以產(chǎn)生儲存格式中間結(jié)果150的中間結(jié)果尾數(shù)(IMant)。因此,此中間結(jié)果尾數(shù)IMant會是此EffSub指定的運(yùn)算所產(chǎn)生的1’補(bǔ)數(shù)算術(shù)差的標(biāo)準(zhǔn)化絕對值,但不執(zhí)行任何端回進(jìn)位校正。
第一特定微指令553并引導(dǎo)中間結(jié)果指數(shù)值的運(yùn)算。首先依據(jù)Z為二進(jìn)位數(shù)一時,ExpDelta的最負(fù)值,產(chǎn)生一預(yù)標(biāo)準(zhǔn)化指數(shù)值(PNExp),其數(shù)值等于被乘數(shù)指數(shù)AE與乘數(shù)指數(shù)BE的加總、減去指數(shù)偏移值ExpBias、再加上一移位常數(shù)SC。然后,從PNExp的數(shù)值減去由標(biāo)準(zhǔn)化移位器130執(zhí)行的尾數(shù)標(biāo)準(zhǔn)化運(yùn)算所占據(jù)的量,以產(chǎn)生中間結(jié)果指數(shù)值(IRExp)。
第一特定微指令553并引導(dǎo)中間結(jié)果符號IRSgn的運(yùn)算。此中間結(jié)果符號IRSgn,連同中間結(jié)果尾數(shù)IRMant與中間結(jié)果指數(shù)IRExp,構(gòu)成儲存格式中間結(jié)果150的向量IRVector。
第一特定微指令553并會產(chǎn)生包含Z在內(nèi)的許多舍入位。GMant未納入中間結(jié)果尾數(shù)的最不重要位會被縮減至由舍入(R)與粘(S)位表示,而在一實(shí)施例中,還包含保護(hù)(G)位。若是部分乘積加法器240已經(jīng)將C與A和B的乘積累加,并且此運(yùn)算是產(chǎn)生一正的PNMant值的一有效減法而,端回進(jìn)位(end-around-carry bit)E就會被指派為二進(jìn)位數(shù)一,以顯示需要執(zhí)行端回進(jìn)位。此第一特定微指令并會使中間不足位(U)與中間溢位(O)位被確認(rèn)。
最后,在一實(shí)施例中,第一特定微指令553會使儲存格式中間結(jié)果150向量IRVector儲存于存儲器,在另一實(shí)施例會使其轉(zhuǎn)送,而在又一實(shí)施例,則會使其同時儲存與轉(zhuǎn)送。相同地,在一實(shí)施例中,第一特定微指令553會使舍入位儲存于存儲器,在另一實(shí)施例中會使其轉(zhuǎn)送,而在又一實(shí)施例中,則會使其同時儲存與轉(zhuǎn)送。如此可使負(fù)責(zé)執(zhí)行第一特定微指令的執(zhí)行單元,在執(zhí)行第一FMA微指令后而在執(zhí)行第二微指令前,執(zhí)行其他與FMA運(yùn)算無關(guān)的運(yùn)算。
第二特定微指令571提供一操作碼574并分別特定第一與第二輸入加法器運(yùn)算元580與583。第二特定微指令571會促使FMA2運(yùn)算執(zhí)行。若是C的累加并非由第一特定微指令553造成,此運(yùn)算還包含C與中間結(jié)果尾數(shù)的條件累加。第二特定微指令571并會產(chǎn)生FMA運(yùn)算的最終舍入后結(jié)果。
第一累加數(shù)運(yùn)算元580將第一特定微指令553所產(chǎn)生的乘積作為其數(shù)值,第二累加數(shù)運(yùn)算元583將第一特定微指令所指定的相同累加數(shù)值作為其數(shù)值。在一實(shí)施例中,第二特定微指令571的源運(yùn)算元欄580指向與第一特定微指令553的目標(biāo)欄599相同的暫存器。第二特定微指令571并特定一目標(biāo)暫存器577,在一實(shí)施例中,此目標(biāo)暫存器與FMA指令535的目標(biāo)欄541為同一個暫存器。
結(jié)論
雖然此實(shí)施方式在有效減法時提供1’補(bǔ)數(shù)的累加運(yùn)算,熟習(xí)算術(shù)或浮點(diǎn)運(yùn)算設(shè)計(jì)領(lǐng)域的技術(shù)人員當(dāng)可理解,在另一實(shí)施方式中,在有效減法時利用本發(fā)明的方法來使用2’補(bǔ)數(shù)的累加運(yùn)算。
本發(fā)明具有許多優(yōu)點(diǎn)。本發(fā)明相容于IEEE,并提供其他實(shí)施方式明顯無法提供的校正給所需的FMA算術(shù)結(jié)果,尤其是響應(yīng)IEEE舍入運(yùn)算的要求。
本發(fā)明通過維持可分別取用的乘法器與加法器單元,最大化供指令分配的各自獨(dú)立算術(shù)功能單元的可用性,而讓計(jì)算機(jī)處理器在一定實(shí)施成本下,可以更充分地開發(fā)指令平行處理。換言之,本發(fā)明讓最少的硬件達(dá)到最大可能性的同步利用,使其能以最快速度完成預(yù)期中最頻繁的運(yùn)算,此處理方式可改善算數(shù)運(yùn)算結(jié)果的產(chǎn)出。通過將所需的特定類型的第一與第二(或更多)微指令進(jìn)行分配,并使其以暫時性與/或物理性各自獨(dú)立的方式分別執(zhí)行,因此,雖然此等用于FMA的第一微指令會被分配至乘法功能單元執(zhí)行,第二或其他更多無關(guān)的微指令則可同時被分配至一個或多個加法功能單元。
同樣地,雖然此等用于FMA的第二微指令會配分配至功能方塊單元,任何需要乘法功能的其他無關(guān)的微指令則可同時被分配至乘法功能單元。
如此,依據(jù)所需的整體效能與所需的系統(tǒng)指令平行處理能力,所提供的乘法與加法功能單元的數(shù)量可更具彈性。因而相較于一個整體的FMA硬件,可減少每個功能單元的設(shè)置成本。計(jì)算機(jī)系統(tǒng)重排微指令的能力也會提升,而能降低成本與功耗。
相較于其他設(shè)計(jì),本發(fā)明不需要使用大型或特殊目的的硬件即可減少指令延遲。其他FMA硬件實(shí)施的設(shè)計(jì)都需要使用大型與復(fù)雜的電路功能,如先行標(biāo)準(zhǔn)化運(yùn)算(anticipatory normalization)、先行加法運(yùn)算、先行符號運(yùn)算、與復(fù)雜的舍入電路。這些復(fù)雜元件常常會成為最終設(shè)計(jì)中關(guān)鍵的耗時路徑、會在運(yùn)算過程中消耗額外的能量、并在物理上會占據(jù)電路設(shè)置空間。
本發(fā)明不需在大型的FMA硬件內(nèi)設(shè)置特殊旁路電路或模態(tài)以減少如現(xiàn)有技術(shù)所提供的簡單加法或乘法指令的延遲。
本發(fā)明的其他實(shí)施方式,可在特殊類型的第一微指令的執(zhí)行過程,執(zhí)行或多或少的算術(shù)運(yùn)算,可在特殊類型的第二微指令的執(zhí)行過程,執(zhí)行或多或少的算術(shù)運(yùn)算。亦即配置給這些微指令的運(yùn)算可為不同。如此,其他這些實(shí)施方式可對任一/任何需要的獨(dú)立運(yùn)算單元進(jìn)行或多或少的調(diào)整。如此,這些其他實(shí)施方式可儲存或多或少的中間結(jié)果于舍入快取內(nèi),并可將或多或少的中間結(jié)果轉(zhuǎn)送至第二為指令。
其他實(shí)施方式中,所述的舍入快取可為可定址暫存器位、內(nèi)容可存取存儲器、佇列儲存空間、或?qū)τ彻δ堋?/p>
其他實(shí)施方式可提供多個獨(dú)立的硬件或執(zhí)行單元來執(zhí)行第一微指令,與/或提供多個獨(dú)立的硬件或執(zhí)行單元來執(zhí)行第二微指令。同樣地,如果有利的話,這些實(shí)施方式也可以提供多個舍入快取給不同的源碼指令流或數(shù)據(jù)流、或是多核計(jì)算機(jī)處理器的各種實(shí)施方式。
此實(shí)施方式用于超純量、非循序指令分配,不過其他實(shí)施方式亦可用于依序指令分配的情形,例如,通過從指令快取移除以及提供至數(shù)據(jù)轉(zhuǎn)送網(wǎng)路的過程,可將指令從所提供的乘法運(yùn)算單元分配至獨(dú)立的加法運(yùn)算單元。本發(fā)明對于FMA運(yùn)算分類的例示,以及本發(fā)明提及的所需最少量硬件調(diào)整,在依序指令分配的應(yīng)用中,亦有其優(yōu)點(diǎn)。雖然本說明書將FMA運(yùn)算區(qū)分為五個類型,不過其他劃分方式,無論是較少、較多、與/或使用不同類型,均屬本發(fā)明的范疇。
此外,雖然本說明書中已描述不同的調(diào)整后的乘法與加法單元以執(zhí)行FMA運(yùn)算,在本發(fā)明的一實(shí)施例中,亦可使用一乘積-累加單元響應(yīng)第一乘積-累加指令來執(zhí)行第一乘積-累加子運(yùn)算,并將其結(jié)果儲存至外部儲存空間,而此乘積-累加單元會再響應(yīng)第二乘積-累加指令來執(zhí)行第二乘積-累加子運(yùn)算。
本發(fā)明可用于FAM運(yùn)算的單指令流多數(shù)據(jù)(SIMD)實(shí)施方式,此等方式有時會被稱為向量指令類型或向量FMA運(yùn)算。并且此方式會有多個調(diào)整后的乘法器的實(shí)例與多個調(diào)整后的加法器的實(shí)例。在一實(shí)施例中,本發(fā)明使用單一舍入快取來配合一個SIMD應(yīng)用的需求。而在另一實(shí)施例中,則可使用多個舍入快取來配合多個SIMD應(yīng)用的需求。
雖然本發(fā)明關(guān)于需要一乘法運(yùn)算連同后續(xù)加法或累加運(yùn)算的浮點(diǎn)融合乘法加法運(yùn)算,不過,本發(fā)明所提供的方法亦可用于其他實(shí)施方式,尤其是針對某些中間結(jié)果使用快取的技術(shù)、針對需要兩個以上連鎖(chained)的算術(shù)運(yùn)算的計(jì)算、針對不同算術(shù)運(yùn)算、或以不同順序執(zhí)行這些算術(shù)運(yùn)算。舉例來說,某些時候可能需要將這些方法應(yīng)用于其他算術(shù)運(yùn)算的混合(即,涉及兩個以上的算術(shù)操作子或三個以上的運(yùn)算元的算術(shù)運(yùn)算),例如連鎖的乘法-乘法-加法運(yùn)算或乘法-加法-加法運(yùn)算,以提升算術(shù)準(zhǔn)確性或提升運(yùn)算產(chǎn)出。此外,從其他面向來看,本發(fā)明亦可應(yīng)用于整數(shù)算術(shù)運(yùn)算。舉例來說,舍入至特定位位置的整數(shù)運(yùn)算可區(qū)分為第一與第二子運(yùn)算,其中第一子運(yùn)算產(chǎn)生一未經(jīng)舍入的中間結(jié)果,而第二子運(yùn)算由此未經(jīng)舍入的中間結(jié)果產(chǎn)生一經(jīng)舍入的最終結(jié)果。依此,在需要時,其他實(shí)施方式可將不同的狀態(tài)位記錄于快取機(jī)制內(nèi)。
本說明書關(guān)于舍入位與其他內(nèi)部位的描述為利于說明本發(fā)明的精神,本發(fā)明當(dāng)可用于其他類型的指標(biāo),包含舍入運(yùn)算相關(guān)或運(yùn)算控制相關(guān)的變數(shù)的不同編碼表現(xiàn)形式。此外,針對說明書中將變數(shù)描述為具有“二進(jìn)位數(shù)一"(也就是邏輯一)的許多段落,此描述包含具有“二進(jìn)位數(shù)零”(也就是邏輯零)的變數(shù)的等效布林實(shí)施方式,并包含這些變數(shù)的其他表示方式。相同地,針對說明書中將變數(shù)描述為具有“二進(jìn)位數(shù)零"(也就是邏輯零)的許多段落,此描述包含具有“二進(jìn)位數(shù)一”(也就是邏輯一)的變數(shù)的等效布林實(shí)施方式,并包含這些變數(shù)的其他表示方式。此外,依據(jù)本說明書當(dāng)可理解,在本文中,累加包含加法加總與加法差的情形。
此外,依據(jù)本說明書當(dāng)可理解,在本文中,指令包含架構(gòu)指令與可由架構(gòu)指令轉(zhuǎn)譯或轉(zhuǎn)換產(chǎn)生的微指令。同樣地,指令執(zhí)行單元并非僅限于微處理器直接執(zhí)行架構(gòu)指令而未預(yù)先將其轉(zhuǎn)譯為微指令的情形。由于微指令亦屬指令的一種類型,因此,指令執(zhí)行單元也會包含微處理器先將指令集架構(gòu)指令轉(zhuǎn)譯或轉(zhuǎn)換為微指令,而指令執(zhí)行單元總是只執(zhí)行微指令的情形。
在本說明書中,尾數(shù)與有效位數(shù)的用語可互用。其他如原始結(jié)果與中間結(jié)果的用語,為區(qū)分在FMA運(yùn)算的不同階段所產(chǎn)生的結(jié)果與表示方式。此外,在本說明書中,儲存格式中間結(jié)果的用語包含一中間結(jié)果向量(意指一數(shù)的量)與多個運(yùn)算控制變數(shù)。這些用語不應(yīng)被僵化或狹隘地解釋,而應(yīng)依據(jù)申請人所表現(xiàn)出來的目的探究其實(shí)質(zhì),而理解這些用語依據(jù)前后文的不同可能指涉不同的事件。
圖1、3-6中的功能方塊可描述為模組、電路、子電路、邏輯、與其他數(shù)位邏輯與微處理器設(shè)計(jì)的技術(shù)領(lǐng)域中常用于指稱由線路、電晶體與/或其他執(zhí)行一個或多個功能的物理結(jié)構(gòu)所構(gòu)成的數(shù)字邏輯用語。本發(fā)明亦可涵蓋將說明書所描述功能以不同于說明書所描述的方式分派的其他替代實(shí)施方式。
下列參考文獻(xiàn)納入本申請以說明FMA設(shè)計(jì)的相關(guān)概念與并使本申請發(fā)明能為讀者理解。
參考文獻(xiàn):
Hokenek,Montoye,Cook,"Second-Generation RISC Floating Point with MultiplyAdd Fused",IEEE Journal Of Solid-State Circuits,Vol 25,No 5,Oct1990.
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,"A6.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 AFast IEEE Multiply-Add-Fused Instruction",(Stanford)Technical Report CSL-TR-91-483July,1991.
Seidel,"Multiple Path IEEE Floating-Point Fused Multiply-Add",IEEE2004.
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,"FPGAImplementation 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,July2004.
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/3March,May 2005.