專利名稱:用于執(zhí)行浮點(diǎn)運(yùn)算的系統(tǒng)、設(shè)備和方法
技術(shù)領(lǐng)域:
一般而言,本發(fā)明涉及在計算設(shè)備的中央處理單元(CPU)中執(zhí)行浮點(diǎn)運(yùn)算,具體來說,涉及用于以每個周期一次的速率更有效地執(zhí)行多個乘加運(yùn)算的改進(jìn)的浮點(diǎn)單元。
背景技術(shù):
當(dāng)今,許多計算密集的應(yīng)用都使用擴(kuò)展精度定點(diǎn)運(yùn)算。這包括諸如在二進(jìn)制和十進(jìn)制之間轉(zhuǎn)換以及諸如Diffie Hellman、DSA、EIGamet以及(最重要的)RSA之類的公鑰算法。特別是,公鑰算法(PKA)加密已經(jīng)成為因特網(wǎng)的基本部分。PKA的最為計算密集的部分是使用非常大的整數(shù)的模取冪;通常是1024位、2048位甚至更大的位。此計算在使用多倍精度算術(shù)的軟件中執(zhí)行。例如,典型的1024位RSA取冪需要大約200,000次64位乘法和兩倍數(shù)量的64位加法。在工作站或個人計算機(jī)上為此所需要的計算時間通常不太大,因?yàn)槊總€安全套接字層(SSL)事務(wù)只進(jìn)行一次。然而,在有許多會話同時進(jìn)行的服務(wù)器上,此計算容易成為可被執(zhí)行的SSL事務(wù)數(shù)量的限制因素。
受讓人International Business Machines,Inc.推出的IBMeServer zSeries(z/OS)上的軟件實(shí)現(xiàn)了用于執(zhí)行此運(yùn)算的64位定點(diǎn)指令。zSeries上的定點(diǎn)乘法相對來說比較慢,64位乘法通常要花20個以上個周期,并且沒有流水線化。另外,也沒有足夠多的定點(diǎn)寄存器來將中間結(jié)果保存在寄存器中。
一個解決方案是實(shí)現(xiàn)專門的加密加速器。利用當(dāng)前技術(shù),需要花多個加速器(通常10個以上)才能提供一個大型機(jī)服務(wù)器所需的性能。當(dāng)前技術(shù)趨勢表明,服務(wù)器性能提高得比加速器性能更快,這樣這種不平衡在未來將繼續(xù)惡化。另外,這些加速器與中央處理單元(CPU)異步地運(yùn)行,如此,為與加速器連接,在CPU中還存在嚴(yán)重的性能開銷。
此外,最新的浮點(diǎn)改進(jìn)成果主要涉及性能(非功能),特別是在應(yīng)用于反向規(guī)范化的操作數(shù)更是如此。在MAA所啟及的應(yīng)用中,反向規(guī)范化的操作數(shù)不會出現(xiàn)。(反向規(guī)范化的操作數(shù)是非常微小的值,而未規(guī)范化的操作數(shù)可以具有正常范圍中的值,但在小數(shù)中具有最左邊的零。)例如,專利號為5,943,249和6,732,134的美國專利描述了用于執(zhí)行浮點(diǎn)運(yùn)算的處理器,然而,它們涉及反向規(guī)范化的操作數(shù),而不是規(guī)范值。專利號為6,256,655和6,904,446的美國專利描述了符合保持結(jié)果的完整性的標(biāo)準(zhǔn)的浮點(diǎn)處理(例如,小數(shù)受到輸入小數(shù)的對齊的影響。)因此,應(yīng)該提供一種改進(jìn)的浮點(diǎn)單元,用于提供對多倍精度定點(diǎn)操作數(shù)的有效處理。
發(fā)明內(nèi)容
因此,本發(fā)明的一個目的是提供處理計算機(jī)系統(tǒng)中的浮點(diǎn)運(yùn)算的改進(jìn)的方法。
本發(fā)明的另一個目的是提供這樣的方法該方法更有效地處理未規(guī)范化浮點(diǎn)數(shù)的處理。
具體來說,本發(fā)明為諸如服務(wù)器之類的計算設(shè)備提供改進(jìn)的浮點(diǎn)單元,用于對多倍精度定點(diǎn)操作數(shù)進(jìn)行有效處理,另外,還提供一組浮點(diǎn)指令。
根據(jù)本發(fā)明的一個方面,對多倍精度定點(diǎn)操作數(shù)的有效處理是基于叫做乘加加(multiply-add-add(MAA))功能的基本構(gòu)件進(jìn)行的。MAA構(gòu)件具有四個輸入操作數(shù)和兩個輸出操作數(shù),所有的都具有相同位數(shù),并可以用算術(shù)式表示為H,L=A*B+C+D。結(jié)果(H,L)分兩個部分返回高階部分(H)和低階部分(L)。
MAA構(gòu)件具有結(jié)果始終適合而沒有信息損失的屬性(沒有進(jìn)位輸出)。MAA構(gòu)件還允許軟件使用進(jìn)位-保存技術(shù),并允許可以被流水線化的并行算法。
根據(jù)本發(fā)明的此方面,輸入操作數(shù)和結(jié)果部分都是相同格式的浮點(diǎn)操作數(shù)。每一個結(jié)果部分都是完整的浮點(diǎn)數(shù),具有符號、指數(shù)和小數(shù),因此每一個都可以用作下一級(其他MAA)的輸入,不需要進(jìn)行轉(zhuǎn)換。
如此,本發(fā)明的一個主要方面是能夠生成由兩部分組成的結(jié)果,兩個部分的格式都與輸入兼容。另一個主要方面是保持結(jié)果的完整性。為保持結(jié)果的完整性所產(chǎn)生的小數(shù)的對齊不能受到輸入小數(shù)的對齊的影響。(對齊受到輸入指數(shù)的影響。);以及結(jié)果指數(shù)必須只是輸入指數(shù)的函數(shù),而不受輸入小數(shù)的對齊的影響。
根據(jù)本發(fā)明的一個方面,提供了一種計算系統(tǒng),該系統(tǒng)具有算術(shù)邏輯單元,該單元用于根據(jù)H,L=A*B+C產(chǎn)生融合乘加運(yùn)算結(jié)果的高階部分(H)和低階部分(L)兩者,其中,A,B是輸入操作數(shù),C是加數(shù),其中,每一部分以與輸入操作數(shù)相同的格式格式化,其中,結(jié)果的對齊不受輸入操作數(shù)的對齊的影響。
根據(jù)本發(fā)明的另一個方面,提供了一種算術(shù)邏輯單元設(shè)備,用于處理計算A×B+C的指令,該指令指出了多個操作數(shù)(A,B),包括加數(shù)(C)。該設(shè)備包括a.乘法器裝置,用于執(zhí)行A和B操作數(shù)的乘法,以獲取中間部分和結(jié)果和部分進(jìn)位結(jié)果;b.進(jìn)位-保存加法器塊,用于接收部分和以及進(jìn)位表達(dá)式,并生成倍寬格式的結(jié)果的顯式值;c.對齊器裝置,用于在并行運(yùn)算中將C操作數(shù)對齊到乘積小數(shù),并生成在乘積范圍之內(nèi)的對齊的加數(shù);以及,d.進(jìn)位-傳遞加法器裝置,用于生成倍寬格式的中間擴(kuò)展結(jié)果;以及,e.用于抑制中間擴(kuò)展結(jié)果的左對齊的裝置,從而,隨后的A×B+C運(yùn)算的輸入操作數(shù)保持右對齊。
根據(jù)本發(fā)明的另一個方面,提供了一種算術(shù)邏輯單元中的處理指令的方法,該指令指出了多個操作數(shù)(A,B),包括加數(shù)(C)。該方法包括a.由算術(shù)邏輯單元接收輸入操作數(shù)A,B和C,所述算術(shù)邏輯單元包括用于執(zhí)行計算A×B+C的指令的硬件結(jié)構(gòu);b.在乘法器塊中執(zhí)行A和B操作數(shù)的乘法,以獲取中間部分和結(jié)果和部分進(jìn)位結(jié)果;c.向進(jìn)位-保存加法器塊輸入所述部分和以及進(jìn)位表達(dá)式,該塊生成倍寬格式的結(jié)果的顯式值;d.在并行運(yùn)算中將C加數(shù)對齊到乘積,并生成對齊的加數(shù);以及,e.在進(jìn)位-傳遞加法器中生成中間擴(kuò)展結(jié)果,該加法器產(chǎn)生倍寬格式的結(jié)果;以及,f.抑制所述中間擴(kuò)展結(jié)果的左對齊,從而,隨后的A×B+C運(yùn)算的輸入操作數(shù)保持右對齊。
通過下面的結(jié)合附圖對本發(fā)明進(jìn)行的詳細(xì)說明,本發(fā)明的目的、特征和優(yōu)點(diǎn)對于那些本領(lǐng)域普通技術(shù)人員將變得顯而易見,其中圖1是根據(jù)本發(fā)明的優(yōu)選實(shí)施例構(gòu)建的浮點(diǎn)執(zhí)行單元的方框圖;以及,圖2描述了根據(jù)本發(fā)明的未規(guī)范化MAA處理的說明性示例。
具體實(shí)施例方式
zSeries機(jī)器的浮點(diǎn)單元能夠以每個周期一次的速率執(zhí)行64位十六進(jìn)制浮點(diǎn)(HFP)MULTIPLY ADD(乘加)。根據(jù)本發(fā)明,定義了一套新的指令,這些指令可以非常小的變化來利用此相同的數(shù)據(jù)流。一個重大變化是消除了最后的規(guī)范化步驟,提供了名為MULTIPLY AND ADD UNNORMALIZED(乘和加未規(guī)范化)和MULTIPLY UNNORMALIZED(乘未規(guī)范化)的新指令。
基本上,模取冪的數(shù)學(xué)被重新表述為“進(jìn)位-保存”方法,該方法允許計算并行地執(zhí)行,如此,在一個內(nèi)循環(huán)中利用硬件的完全流水線,內(nèi)循環(huán)的基本單位是一次乘法和兩次加法(MAA)。這些新指令在5個周期內(nèi)執(zhí)行52位MAA。(定點(diǎn)指令可以在28個周期內(nèi)執(zhí)行64位MAA。)圖1是根據(jù)本發(fā)明構(gòu)建的浮點(diǎn)執(zhí)行單元100的方框圖。如圖1所示,此浮點(diǎn)執(zhí)行單元100包括三個輸入端,用于分別從相應(yīng)的寄存器A 103、B 106和C 109接收輸入操作數(shù)113、116和119。這些源操作數(shù)被表達(dá)為浮點(diǎn)數(shù),并可以具有HFP長度,即,56位小數(shù)。根據(jù)本發(fā)明,浮點(diǎn)執(zhí)行單元100使用這些操作數(shù)來執(zhí)行MULTIPLYAND ADD UNNORMALIZED和MULTIPLY UNNORMALIZED。具體來說,浮點(diǎn)執(zhí)行單元100是提供小數(shù)數(shù)據(jù)流的“融合的乘和加(fused Multiply and Add)”硬件結(jié)構(gòu)。具體來說,此結(jié)構(gòu)100計算(A×B)+C。當(dāng)只有乘法時,C操作數(shù)119被強(qiáng)制為0。
在操作中,在Areg、Breg和Creg中有三種不同的操作數(shù)可用。在乘法器塊123中A操作數(shù)113和B操作數(shù)116的尾數(shù)相乘,以獲取乘積的部分”和”結(jié)果133和部分“進(jìn)位”表達(dá)式136。這些乘積表達(dá)式是進(jìn)位-保存形式,每一個表達(dá)式的寬度為112位。中間部分和結(jié)果和部分進(jìn)位結(jié)果133、136和對齊的加數(shù)小數(shù)139被輸入到進(jìn)位-保存加法器塊143,該塊143生成倍寬格式的結(jié)果值,包括112位。此結(jié)果也是進(jìn)位-保存形式,包括兩個部分結(jié)果144、145,兩者都是該倍寬格式(即,HFP擴(kuò)展)。即,進(jìn)位-保存加法器將三個112位寬操作數(shù)壓縮為兩個。當(dāng)進(jìn)位-保存加法器從3∶2擴(kuò)展到4∶2時,可以添加第四個操作數(shù)。即,如圖1所示,來自寄存器107的D操作數(shù)117可以加到進(jìn)位保存加法器,這使進(jìn)位保存加法器成為進(jìn)位-保存-加法器(4∶2)塊。應(yīng)該理解,進(jìn)位-保存-加法器(3∶2)塊143可以是隨后的主要加法器/增量器級的一部分或前面的乘法器級123的一部分。
在并行運(yùn)算中,通過比較乘積指數(shù)和加數(shù)指數(shù),將C操作數(shù)(加數(shù))119與乘積小數(shù)對齊。這種差別提供了增加的小數(shù)必須移位的對齊移位量(正的或負(fù)的)。這樣做的結(jié)果是112位寬對齊的加數(shù)小數(shù)139。它是在乘積范圍之內(nèi)的擴(kuò)展的C小數(shù)的112位寬窗口。
主加法器塊153生成中間擴(kuò)展結(jié)果160。它是進(jìn)位-傳遞加法器,該加法器提供了倍寬格式的小數(shù)結(jié)果的顯式值(例如,在一個示例中為112位)。如此,可以將112位中間結(jié)果160分裂為兩個被稱為高階部分(H)和低階部分(L)的56位小數(shù),它們可以置于浮點(diǎn)寄存器對中(未顯示)。
對于規(guī)范浮點(diǎn)運(yùn)算,規(guī)范化器塊153將執(zhí)行左移位,以刪除結(jié)果的前導(dǎo)零位。然而,根據(jù)本發(fā)明,此規(guī)范化操作被抑制。由規(guī)范化器153執(zhí)行的基本操作是左移位運(yùn)算。規(guī)范化器獲取如通過從控制塊101接收到的信號150所指出的規(guī)范移位量(Norm-Shift-Amount),該值指出了在加法器輸出中有多少前導(dǎo)零。獨(dú)立于實(shí)際的加法器結(jié)果,通過強(qiáng)制規(guī)范移位量為0來執(zhí)行規(guī)范化的抑制。
舍入器/重格式化器(Rounder/Reformatter)塊再次與指數(shù)和56位小數(shù)生成64位HFP格式。如果需要,舍入是通過截斷進(jìn)行的。如此,選擇高階部分(H)或低階部分(L)結(jié)果。當(dāng)需要這兩種結(jié)果時,則再需要額外的一個周期。
如圖1所進(jìn)一步顯示的,根據(jù)本發(fā)明,控制塊101生成控制小數(shù)數(shù)據(jù)流的信號??刂屏鞯墓δ茈m然與浮點(diǎn)乘和加運(yùn)算類似,但在控制塊101的控制下運(yùn)行,并且當(dāng)在A-Reg,B-Reg and C-Reg中有可用的加數(shù)之后才執(zhí)行的控制流包括1)抑制對輸入操作數(shù)的預(yù)先規(guī)范化(與現(xiàn)有技術(shù)實(shí)現(xiàn)中浮點(diǎn)MAA在輸入操作數(shù)未規(guī)范化時首先規(guī)范化輸入操作數(shù)相反)根據(jù)本發(fā)明,輸入操作數(shù)總是保持原樣;2)根據(jù)下列公式計算結(jié)果指數(shù),所述結(jié)果指數(shù)直接是乘積指數(shù)Exp(Prod)a.Exp(Prod)=Exp(A)+Exp(B)-x′40′b.其中,x′40′在示范實(shí)施例中是一個偏差,然后根據(jù)下列公式執(zhí)行對齊移位量c.SA(Align)=Exp(Prod)-Exp(C)=Exp(A)+Exp(B)-x′40′-Exp(C);3)執(zhí)行乘法、對齊,對乘法器和對齊器輸出執(zhí)行進(jìn)位保存加法,以及執(zhí)行主加法并取回擴(kuò)展結(jié)果;4)suppressing normalization by to通過強(qiáng)制規(guī)范移位量=0來抑制規(guī)范化;以及5)根據(jù)指令,取高階結(jié)果、低階結(jié)果或兩者,并作為結(jié)果以HFP形式寫回。將指數(shù)添加到小數(shù)。
a.MAYH高階結(jié)果b.MAYL低階結(jié)果(Exponents=HighExponent-14或x′E′)c.MAY高階結(jié)果和低階結(jié)果-需要一個額外周期因此,根據(jù)本發(fā)明,控制塊實(shí)現(xiàn)強(qiáng)制0移位量的邏輯,或者,換句話說,抑制規(guī)范化。優(yōu)選情況下,由控制塊101實(shí)現(xiàn)的控制邏輯,設(shè)計起來比較便宜,因?yàn)樗梢院铣?,不像小?shù)數(shù)據(jù)流那樣需要昂貴的人工定制設(shè)計。它沒有數(shù)據(jù)流那樣對時間要求嚴(yán)格,數(shù)據(jù)流限制了周期時間和性能。
此外,小數(shù)數(shù)據(jù)流的實(shí)現(xiàn)被設(shè)計和實(shí)施為允許浮點(diǎn)MULTIPLYAND ADD指令的快速執(zhí)行。對于UNNORM MULTIPLY AND ADD可以不做改變地加以采用。為此,可能實(shí)現(xiàn)每個周期一個指令的流水線性能。對于需要寫擴(kuò)展結(jié)果的指令,需要每個指令兩個周期。
圖2所示為本發(fā)明的示范示例。注意,指數(shù)部分和小數(shù)部分的數(shù)字表示范圍在0到F的十六進(jìn)制數(shù)字。因此,如圖2中所示,根據(jù)HFP定義的為規(guī)范化操作數(shù)值是A-操作數(shù)(乘數(shù)),值為16**(42-40)*0.000101 01000000;B-操作數(shù)(被乘數(shù)),值為16**(43-40)*0.020000 00000003;C-操作數(shù)(加數(shù)),值為16**(41-40)*0.11111111111111;C-操作數(shù)(對齊的加數(shù)),值為16**(45-40)*0.00001111111111 111100 00000000;以及乘積,值為16**(45-40)*0.00000202020000 000303 03000000。乘積指數(shù)按42+43-40=45來計算,其中40是十六進(jìn)制數(shù)字中HFP格式的偏差。在乘積和加數(shù)指數(shù)之間存在指數(shù)差4(45-41),因此,控制器塊啟動4的右移位以對齊C小數(shù)。實(shí)現(xiàn)此運(yùn)算,可以不加修改地使用先前存在的浮點(diǎn)小數(shù)數(shù)據(jù)流。根據(jù)本發(fā)明的未規(guī)范化MAA特定實(shí)現(xiàn)由控制塊單元啟用,執(zhí)行運(yùn)算以便抑制操作數(shù)A,B和C的預(yù)先規(guī)范化,強(qiáng)制結(jié)果指數(shù)為固定乘積指數(shù)Exp(Resutt)=Exp(A)+Exp(B)-偏差(偏差=x′40′);以及通過強(qiáng)制規(guī)范移位量=0來抑制規(guī)范化。
應(yīng)該理解,在本發(fā)明的環(huán)境中負(fù)號處理的實(shí)現(xiàn)方式與當(dāng)前浮點(diǎn)MAA單元中實(shí)現(xiàn)的方式相似。注意,每個操作數(shù)都可以有負(fù)號,在“有效加法”和“有效減法”之間存在差異。對于“有效減法”,C-操作數(shù)被反轉(zhuǎn),并且在主加法器之后使用二進(jìn)制補(bǔ)碼,這樣具有減法的效果。
根據(jù)本發(fā)明,新的HFP指令MULTIPLY UNNORMALlZED和MULTIPLY AND ADD UNNORMALIZED是對實(shí)現(xiàn)HFP指令MULTIPLY AND ADD AND MULTIPLY AND SUBTRACT(“乘和加”和“乘和減”)所需硬件的擴(kuò)展。在參考文獻(xiàn)z/Architecture″Principles of Operation″,SA22-7838-02,Chapter 18,dated June,2003中可以找到關(guān)于HFP指令的更詳細(xì)的內(nèi)容,其全部內(nèi)容在此引用并作為參考。根據(jù)本發(fā)明,定義了12個操作碼,全部操作碼是下列函數(shù)的簡單變換(或子集)tl<-op3*op2+opl其中,源操作數(shù)具有HFP長度(56位小數(shù));乘法和加法運(yùn)算的執(zhí)行不進(jìn)行規(guī)范化處理;中間結(jié)果是HFP擴(kuò)展(被分裂為稱為高階部分和低階部分的兩個56位小數(shù));返回的值放在由字段指定的目標(biāo)位置。
下面將更詳細(xì)地描述指令HFP MULTIPLY UNNORMALIZED第一變換的指令HFP Multiply Unnormalized指令具有如下結(jié)構(gòu)
Mnemonic1R1,R2,R2[RRF]
0 16 20 24 28 31第一變換MYR利用長HFP乘數(shù)和被乘數(shù)(操作數(shù))產(chǎn)生擴(kuò)展的HFP乘積;第二變換MYHR利用長HFP乘數(shù)和被乘數(shù)(操作數(shù))產(chǎn)生擴(kuò)展HFP乘積的高階部分;以及第三變換MYLR利用長HFP乘數(shù)和被乘數(shù)操作數(shù)產(chǎn)生擴(kuò)展HFP乘積的低階部分。
在第二變換中,Multiply Unnormalized指令具有如下結(jié)構(gòu)Mnemonfc2R1,R2,D2(X2,B2) [RXF]
0 812 16 2032 36 40 47第一變換MY利用長HFP乘數(shù)和被乘數(shù)(操作數(shù))產(chǎn)生擴(kuò)展的HFP乘積;第二變換MYH利用長HFP乘數(shù)和被乘數(shù)產(chǎn)生擴(kuò)展HFP乘積的高階部分;以及第三變換MYL利用長HFP乘數(shù)和被乘數(shù)產(chǎn)生擴(kuò)展HFP乘積的低階部分。
在兩種指令中,第二和第三操作數(shù)相乘,形成中間乘積,該乘積又用來形成中間擴(kuò)展結(jié)果。中間擴(kuò)展結(jié)果的全部(或部分)被放在由R1字段指定的浮點(diǎn)寄存器對(或浮點(diǎn)寄存器)中。不會為了消除十六進(jìn)制前導(dǎo)零而規(guī)范化操作數(shù)、中間值和結(jié)果。兩個HFP數(shù)相乘存在于指數(shù)相加和小數(shù)相乘。第二和第三操作數(shù)的指數(shù)部分(characteristics)的和小于64,用作中間乘積高階部分的指數(shù)部分;此值與結(jié)果小數(shù)是否為零無關(guān)。中間乘積的指數(shù)部分被正確維護(hù)并且不環(huán)繞。
中間擴(kuò)展結(jié)果的高階指數(shù)部分被設(shè)置為中間乘積的指數(shù)部分模128。中間擴(kuò)展結(jié)果的低階指數(shù)部分被設(shè)置為比高階指數(shù)部分模128小14。指數(shù)部分的環(huán)繞與結(jié)果小數(shù)是否等于零無關(guān)。在所有情況下,第二和第三操作數(shù)小數(shù)有14個數(shù)位;中間乘積小數(shù)包含28個數(shù)位,并且是操作數(shù)小數(shù)的精確乘積。不對中間乘積小數(shù)進(jìn)行關(guān)于十六進(jìn)制先導(dǎo)零數(shù)位的檢查,中間乘積小數(shù)被用作中間擴(kuò)展結(jié)果的小數(shù)而不進(jìn)行移位。結(jié)果的符號是與操作數(shù)符號互斥,或者是操作數(shù)符號,包括結(jié)果小數(shù)是零的情況。
對于MY和MYR,整個中間擴(kuò)展結(jié)果放在由R1字段指定的浮點(diǎn)寄存器對中。對于MYH和MYHR,中間擴(kuò)展結(jié)果的高階部分被放在由R1字段指定的浮點(diǎn)寄存器中,低階部分被丟棄。對于MYL和MYLR,中間擴(kuò)展結(jié)果的低階部分被放在由R1字段指定的浮點(diǎn)寄存器中,高階部分被丟棄。不識別HFP指數(shù)溢出和HFP指數(shù)下溢異常。中間擴(kuò)展結(jié)果指數(shù)部分環(huán)繞模128,且不報告異常。
MY和MYR的R1字段必須指定有效的浮點(diǎn)寄存器對。否則,將識別說明異常(specification exception)。
應(yīng)該理解HFP MULTIPLY UNNORMALIZED與HFPMULTIPLY的區(qū)別在于以下方面1)不將源操作數(shù)規(guī)范化以消除十六進(jìn)制先導(dǎo)零;2)不對中間乘積小數(shù)進(jìn)行關(guān)于十六進(jìn)制先導(dǎo)零的檢查,不會發(fā)生規(guī)范化操作;3)不識別HFP指數(shù)溢出和HFP指數(shù)下溢;4)不將零小數(shù)強(qiáng)制為真零。
HFP MULTIPLY AND ADD UNNORMALIZED根據(jù)第一變換的指令HFP Multiply And Add Unnormalized指令具有下列結(jié)構(gòu)Mnemonic1R1,R3,R2[RRF]
016 20 242831第一變換MAYR利用長HFP源產(chǎn)生擴(kuò)展HFP結(jié)果;第二變換MAYHR利用長HFP源產(chǎn)生擴(kuò)展HFP結(jié)果的高階部分;以及第三變換MAYLR利用長HFP源產(chǎn)生擴(kuò)展HFP結(jié)果的低階部分。
在第二變換中,Multiply And Add Unnormalized指令具有下列結(jié)構(gòu)
Mnemonic2R1,R2,D2(X2,B2)[RXF] 0 812 16 20 32 36 40 47第一變換MAY利用長HFP源產(chǎn)生擴(kuò)展HFP結(jié)果;第二變換MAYH利用長HFP源產(chǎn)生擴(kuò)展HFP結(jié)果的高階部分;以及第三變換MAYL利用長HFP源產(chǎn)生擴(kuò)展HFP結(jié)果的低階部分。
第二和第三HFP操作數(shù)相乘,形成中間乘積;然后以代數(shù)方式將第一操作數(shù)(加數(shù))加到中間乘積以形成中間和;如果需要,中間和小數(shù)在左部或右部被截斷,以形成中間擴(kuò)展結(jié)果。全部(或部分)中間擴(kuò)展結(jié)果被放在由R1字段指定的浮點(diǎn)寄存器對(或浮點(diǎn)寄存器)中。不會為了消除十六進(jìn)制前導(dǎo)零而規(guī)范化操作數(shù)、中間值和結(jié)果。
與其中第二操作數(shù)在由R1字段(在RRF格式指令中)指定的浮點(diǎn)寄存器中的寄存器到寄存器變換相反,這種指令包括存儲器到寄存器變換,其中第二操作數(shù)在存儲器中,并由X2、B2和D2字段(在RXF格式的指令中)指定。在所有變換中,第三操作數(shù)、被乘數(shù)都在浮點(diǎn)寄存器中,并由指令中的R3字段指定。此外,在所有變換中,目標(biāo)位置由指令中的R1字段指定。對于MULTIPLY AND ADDUNNORMALIZED,R1字段還指定加數(shù)。當(dāng)對于MULTIPLY ANDADD UNNORMALIZED目標(biāo)位置是一個浮點(diǎn)寄存器時,同樣的浮點(diǎn)寄存器同時用作加數(shù)和目標(biāo)。當(dāng)目標(biāo)位置是浮點(diǎn)寄存器對時,R1字段既可以指定浮點(diǎn)寄存器對的低編號寄存器,也可以指定浮點(diǎn)寄存器對的高編號寄存器;因此,第一操作數(shù)可以位于其中放置擴(kuò)展結(jié)果的浮點(diǎn)寄存器對的兩個寄存器中的任意一個中。
MULTIPLY AND ADD UNNORMALIZED運(yùn)算可以概括如下t1←op3*op2+op1兩個HFP數(shù)相乘在于指數(shù)相加和小數(shù)相乘。第二和第三操作數(shù)的指數(shù)部分(characteristics)的和小于64,用作中間乘積高階部分的指數(shù)部分;此值與結(jié)果小數(shù)是否為零無關(guān)。中間乘積的指數(shù)部分被正確維護(hù)并且不環(huán)繞。
在所有情況下,第二和第三操作數(shù)小數(shù)有14個數(shù)位;中間乘積小數(shù)包含28個數(shù)位,并且是操作數(shù)小數(shù)的精確乘積。不對中間乘積小數(shù)進(jìn)行關(guān)于十六進(jìn)制先導(dǎo)零數(shù)位的檢查,中間乘積小數(shù)在后續(xù)加法中使用而不進(jìn)行移位。
在所有情況下,第一操作數(shù)位于由R1字段指定的浮點(diǎn)寄存器中,且第一操作數(shù)有14個數(shù)位。兩個HFP數(shù)字相加在于指數(shù)部分比較、小數(shù)對齊和帶符號的小數(shù)相加。將中間乘積和加數(shù)得指數(shù)部分進(jìn)行比較。如果指數(shù)部分相等,則不需要對齊。如果加數(shù)的指數(shù)部分小于乘積的指數(shù)部分,則通過向右移位將加數(shù)的小數(shù)與乘積小數(shù)對齊,對于每個十六進(jìn)制移位數(shù)字,將加數(shù)的指數(shù)部分增加1。如果加數(shù)的指數(shù)部分大于乘積的指數(shù)部分,則通過向左移位將加數(shù)的小數(shù)與乘積小數(shù)對齊,對于每個十六進(jìn)制移位數(shù)字,將加數(shù)的指數(shù)部分減小1。移位一直繼續(xù)到兩個指數(shù)部分一致為止。所有被移出的十六進(jìn)制數(shù)字都被保存,并參與后續(xù)的加法。
對齊之后,帶符號的小數(shù)以代數(shù)方式相加以形成中間和。中間和的小數(shù)被精確地維護(hù)。不對中間和小數(shù)進(jìn)行關(guān)于十六進(jìn)制先導(dǎo)零數(shù)位的檢查,因而不移位。只有那些與中間乘積小數(shù)的28個十六進(jìn)制數(shù)字對齊的中間和小數(shù)的28個十六進(jìn)制數(shù)字用作中間擴(kuò)展結(jié)果的小數(shù)。
中間擴(kuò)展結(jié)果的高階指數(shù)部分被設(shè)置為中間乘積的指數(shù)部分模128。中間擴(kuò)展結(jié)果的低階指數(shù)部分被設(shè)置為比高階指數(shù)部分模128小14。指數(shù)部分的環(huán)繞與結(jié)果小數(shù)是否等于零無關(guān)。
結(jié)果的符號由代數(shù)規(guī)則確定,除非整個中間和小數(shù)是零,在這種情況中,設(shè)結(jié)果的符號為正。對于MAY和MAYR,整個中間擴(kuò)展結(jié)果放在由R1字段指定的浮點(diǎn)寄存器對中。R1字段既可以指定浮點(diǎn)寄存器對的低編號寄存器,也可以指定浮點(diǎn)寄存器對的高編號寄存器。對于MAYH和MAYHR,中間擴(kuò)展結(jié)果的高階部分被放在由R1字段指定的浮點(diǎn)寄存器中,低階部分被丟棄。
對于MAYL和MAYLR,中間擴(kuò)展結(jié)果的低階部分被放在由R1字段指定的浮點(diǎn)寄存器,高階部分被丟棄。不識別HFP指數(shù)溢出和HFP指數(shù)下溢異常。中間擴(kuò)展結(jié)果指數(shù)部分環(huán)繞模128,且不報告異常。
應(yīng)該理解MULTIPLY AND ADD UNNORMALIZED可以用來在具有任意大小的數(shù)上執(zhí)行多倍精度運(yùn)算。這通過將數(shù)字組織成52位每個的大數(shù)字,且每個大數(shù)字被維護(hù)為HFP長格式的整數(shù)得以實(shí)現(xiàn)。使用數(shù)基252和可以最多容納56位的大數(shù)字來提供一種冗余表示法。這種冗余表示法允許使用“進(jìn)位保存”技術(shù)的乘法和加法,并允許最大化地利用浮點(diǎn)流水線。
此外,通過將乘數(shù)設(shè)置為具有適當(dāng)指數(shù)部分的整數(shù)值1,被乘數(shù)可以按16次冪換算,然后加到加數(shù)。這允許,例如,向左邊將來自乘法一級的“進(jìn)位”加到下一級的“和”。同樣方式,可以換算一級的“和”,以將其從右邊加到該級的“進(jìn)位”。
此外,應(yīng)該理解,在第一回乘-累加中,通過使用MULTIPLYUNNORMALIZED,而不使用MULTIPLY AND ADDUNNORMALIZED,可以避免將累加值清零的步驟。
HFP MULTIPLY AND ADD UNNORMALIZED和HFPMULTIPLY AND ADD的區(qū)別在于以下方面1)不將源操作數(shù)規(guī)范化以消除十六進(jìn)制先導(dǎo)零;2)當(dāng)中間乘積的指數(shù)部分和加數(shù)的指數(shù)部分不同時,總是移位加數(shù);3)在加法之后沒有移位,在中間擴(kuò)展結(jié)果中只保留中間和的最右端的28個數(shù)位;4)可以返回中間擴(kuò)展結(jié)果的低階部分;5)不識別HFP指數(shù)溢出和HFP指數(shù)下溢;6)不將零小數(shù)強(qiáng)制為真零。
優(yōu)選情況下,HFP MULTIPLY UNNORMALIZED和HFPMULTIPLY AND ADD UNNORMALIZED指令可以在IBM Systemz9或IBM eServer_zSeries_(如,zSeries 990(z990,z900)或zSeries 890(z890))systems等)中的任何CPU上運(yùn)行。因此,該解決方案適應(yīng)多種CPU以及CPU性能。本發(fā)明所提出的工具的用途和優(yōu)點(diǎn)包括利用浮點(diǎn)硬件流水線將兩個56位小數(shù)相乘,以產(chǎn)生一個112位中間乘積小數(shù),然后加一個56位加數(shù)小數(shù)以產(chǎn)生112位結(jié)果小數(shù)。期望的等待時間是7個周期,但期望吞吐量是每個周期一個HFP長結(jié)果??梢砸悦總€周期一個指令的速率返回低階部分或高階部分,或者在2個周期中返回完整的112位小數(shù)。這與指令MULTIPLY LOGICAL(MLG)和ADD LOGICAL WITH CARRY(ALCG)形成對照,MLG將兩個64位無符號整數(shù)相乘以形成一個128位無符號乘積,ALCG將兩個64位無符號整數(shù)相加。MLG和ALCG分別花費(fèi)20個周期和2個周期,并且未實(shí)現(xiàn)流水化。
為中間結(jié)果使用16個浮點(diǎn)寄存器(FPR)極大地減少了裝入和存儲操作。例如,如果可以在FPR中維護(hù)結(jié)果,在需要加載和存儲時,基本的乘-累加步驟從每個大數(shù)字5個周期減少到每個大數(shù)字3個周期。這與使用通用寄存器的MLG和ALCG形成對照,因?yàn)槔奂悠骱苌儆袡C(jī)會在寄存器中保留中間結(jié)果。
對HFP長格式的大數(shù)字執(zhí)行計算。HFP長格式具有56位小數(shù),但使用252的數(shù)基。這種冗余表示法允許進(jìn)行較大數(shù)字的乘法和加法,而不會發(fā)生中間溢出。例如,可以將兩個53位值的乘積加到56位中間和,以產(chǎn)生一個52位“和”和一個55位“進(jìn)位”而不會發(fā)生溢出。這種技術(shù)稱為“進(jìn)位保存”,因?yàn)檫M(jìn)位在加法期間不需要始終從左到右行波傳送。使用“進(jìn)位保存”技術(shù)最大化地利用了浮點(diǎn)流水線。因此,與行波傳送進(jìn)位時每個大數(shù)字需要7個周期相比,基本乘-累加步驟是每個大數(shù)字3個周期。
使用HFP格式,包括指數(shù),允許自動換算冗余格式的數(shù)字?;镜某?累加步驟涉及一個乘法和兩個加法。第一個加法包括在乘法中。第二個加法將“進(jìn)位”從一級組合到下一級中,是使用MULTIPLYADD UNNORMALIZED(MAYLR)而不是使用ADDUNNORMALIZED(AWR)執(zhí)行的。這允許換算指數(shù),以便為進(jìn)行加法而正確對齊值。按照預(yù)期,乘加指令可以以每個周期一個指令的速率流水線化,使用MAYLR而不是使用AWR時,涉及的額外的開銷很小。
雖然很明顯這里說明的本發(fā)明較好地適于實(shí)現(xiàn)上面所提的目的,但是可以理解,那些本領(lǐng)域普通技術(shù)人員可以設(shè)計出許多修改和實(shí)施例,只要在本發(fā)明的真實(shí)精神和范圍,所附的權(quán)利要求涵蓋一切這樣的修改和實(shí)施例。
權(quán)利要求
1.一種計算系統(tǒng),該系統(tǒng)具有算術(shù)邏輯單元,該單元用于根據(jù)H,L=A*B+C產(chǎn)生融合乘加運(yùn)算的高階部分(H)和低階部分(L)兩者,其中,A,B是輸入操作數(shù),C是加數(shù),其中,每一部分以與輸入操作數(shù)相同的格式格式化,其中,結(jié)果的對齊不受輸入操作數(shù)的對齊的影響。
2.根據(jù)權(quán)利要求1所述的計算系統(tǒng),其中,輸入操作數(shù)A、B和加數(shù)C是n位值,所述算術(shù)邏輯單元包括流水線裝置,用于將所述兩個n位小數(shù)相乘,以產(chǎn)生2n位中間乘積,并加入n位加數(shù)小數(shù),以縮短的等待時間產(chǎn)生2n位結(jié)果。
3.根據(jù)權(quán)利要求2所述的計算系統(tǒng),其中,通過所述流水線裝置的吞吐量是每個機(jī)器周期一個n位結(jié)果。
4.根據(jù)權(quán)利要求3所述的計算系統(tǒng),其中,可以以每個機(jī)器周期1個的速率返回所述結(jié)果的低階部分或高階部分中的一個。
5.根據(jù)權(quán)利要求3所述的計算系統(tǒng),其中,算術(shù)邏輯單元產(chǎn)生融合的浮點(diǎn)乘加的高階部分和低階部分兩者,其中,在低階部分中留有額外的空間,以便允許在隨后的運(yùn)算中加入進(jìn)位-保存信息。
6.根據(jù)權(quán)利要求3所述的計算系統(tǒng),其中,算術(shù)邏輯單元根據(jù)H,L=A*B+C+D,產(chǎn)生融合的乘加加(MAA)運(yùn)算的高階部分和低階部分兩者,產(chǎn)生HFP長結(jié)果的高階(H)和低階部分(L),其中,A、B、C和D是操作數(shù)。
7.根據(jù)權(quán)利要求6所述的計算系統(tǒng),其中,在一個機(jī)器周期中執(zhí)行MAA運(yùn)算。
8.在算術(shù)邏輯單元中處理指令的方法,該指令指出多個操作數(shù)(A,B),包括加數(shù)(C),所述方法包括由算術(shù)邏輯單元接收輸入操作數(shù)A,B和C,所述算術(shù)邏輯單元包括硬件結(jié)構(gòu),用于執(zhí)行計算A×B+C的指令;在乘法器塊中執(zhí)行A和B操作數(shù)的乘法,以獲取中間部分和結(jié)果和部分進(jìn)位結(jié)果;向進(jìn)位-保存加法器塊輸入所述部分和以及進(jìn)位表達(dá)式,所述進(jìn)位-保存加法器塊生成倍寬格式的結(jié)果的顯式值;在并行運(yùn)算中將C加數(shù)對齊到乘積,并生成對齊的加數(shù);以及,在進(jìn)位-傳遞加法器中生成中間擴(kuò)展結(jié)果,所述進(jìn)位-傳遞加法器產(chǎn)生倍寬格式的結(jié)果;以及,抑制所述中間擴(kuò)展結(jié)果的左對齊,從而,隨后的A×B+C運(yùn)算的輸入操作數(shù)保持右對齊。
9.根據(jù)權(quán)利要求8所述的處理指令的方法,其中,所述指令是HFP MULTIPLY AND ADD指令,其中所述輸入操作數(shù)A、B、C各自具有56位的小數(shù),所述乘積是具有112位小數(shù)的倍寬格式。
10.根據(jù)權(quán)利要求8所述的處理指令的方法,其中,所述指令是HFP MULTIPLY指令,其中,所述輸入操作數(shù)A和B各自具有56位的小數(shù),所述C操作數(shù)為0。
11.根據(jù)權(quán)利要求8所述的處理指令的方法,其中,倍寬格式的所述乘積可以分裂為高階(H)部分和低階(L)部分,以便進(jìn)一步傳遞。
12.根據(jù)權(quán)利要求8所述的處理指令的方法,其中,并行運(yùn)算中所述C加數(shù)的對齊包括將乘積指數(shù)和加數(shù)指數(shù)進(jìn)行比較,并根據(jù)比較的指數(shù),提供增加的小數(shù)必須移位的對齊移位量。
13.根據(jù)權(quán)利要求8所述的處理指令的方法,其中,所述的抑制所述中間擴(kuò)展結(jié)果的左對齊的步驟包括,生成由規(guī)范化單元接收的信號,規(guī)范化單元獨(dú)立于實(shí)際中間擴(kuò)展結(jié)果,將規(guī)范化量移位為0。
14.一種算術(shù)邏輯單元設(shè)備,用于處理計算A×B+C的指令,該指令指出多個操作數(shù)(A,B),包括加數(shù)(C),所述設(shè)備包括乘法器裝置,用于執(zhí)行A和B操作數(shù)的乘法,以獲取中間部分和結(jié)果和部分進(jìn)位結(jié)果;進(jìn)位-保存加法器塊,用于接收所述部分和以及進(jìn)位表達(dá)式,并生成倍寬格式的結(jié)果的顯式值;對齊器裝置,用于在并行運(yùn)算中將C操作數(shù)對齊到乘積小數(shù),并生成在乘積范圍之內(nèi)的對齊的加數(shù);以及,進(jìn)位-傳遞加法器裝置,用于生成倍寬格式的中間擴(kuò)展結(jié)果;以及,用于抑制所述中間擴(kuò)展結(jié)果的左對齊的裝置,從而,隨后的A xB+C運(yùn)算的輸入操作數(shù)保持右對齊。
15.根據(jù)權(quán)利要求14所述的設(shè)備,其中,所述指令是HFPMULTIPLY AND ADD指令,從而,所述輸入操作數(shù)A、B、C各自具有56位的小數(shù),所述乘積是具有112位小數(shù)的倍寬格式。
16.根據(jù)權(quán)利要求14所述的設(shè)備,其中,所述指令是HFPMULTIPLY指令,其中,所述輸入A和B操作數(shù)各自具有56位的小數(shù),所述C操作數(shù)為0。
17.根據(jù)權(quán)利要求14所述的設(shè)備,其中,倍寬格式的所述乘積小數(shù)可以分裂為高階(H)部分和低階(L)部分,以便進(jìn)一步傳遞。
18.根據(jù)權(quán)利要求14所述的設(shè)備,其中,所述對齊器裝置包括用于將乘積指數(shù)和加數(shù)指數(shù)進(jìn)行比較,并根據(jù)比較的指數(shù),提供增加的小數(shù)必須移位的對齊移位量的裝置。
19.根據(jù)權(quán)利要求8所述的設(shè)備,其中,所述的用于抑制所述中間擴(kuò)展結(jié)果的左對齊的裝置包括,用于生成由規(guī)范化單元接收的信號的控制裝置,規(guī)范化單元獨(dú)立于實(shí)際中間擴(kuò)展結(jié)果,將規(guī)范化量移位為0。
20.一種計算系統(tǒng),該系統(tǒng)具有算術(shù)邏輯單元,所述算術(shù)邏輯單元用于根據(jù)H,L=A*B+C+D產(chǎn)生融合乘加運(yùn)算的高階部分(H)和低階部分(L)兩者,其中,A,B是輸入操作數(shù),C和D是加數(shù),其中,每一部分以與輸入操作數(shù)相同的格式格式化,其中,結(jié)果的對齊不受輸入小數(shù)的對齊的影響。
全文摘要
一種用于執(zhí)行浮點(diǎn)運(yùn)算,特別是融合乘加運(yùn)算的設(shè)備和方法。該設(shè)備包括算術(shù)邏輯單元,該單元用于根據(jù)H,L=A*B+C+D產(chǎn)生中間擴(kuò)展結(jié)果的高階部分(H)和低階部分(L)兩者,其中,A,B是輸入操作數(shù),C是加數(shù)。每一H,L部分以與輸入操作數(shù)相同的格式格式化,所產(chǎn)生的小數(shù)的對齊不受輸入的對齊的影響。該設(shè)備包括用于抑制中間擴(kuò)展結(jié)果的左對齊,以便隨后的A*B+C運(yùn)算的輸入操作數(shù)保持右對齊的體系結(jié)構(gòu)。
文檔編號G06F7/48GK1928809SQ20061012819
公開日2007年3月14日 申請日期2006年9月6日 優(yōu)先權(quán)日2005年9月9日
發(fā)明者老羅納德·M·斯密斯, 京特·格維希, 埃里克·M.·施瓦茨 申請人:國際商業(yè)機(jī)器公司