一種基于內部前推的浮點融合乘加方法、裝置及處理器的制造方法
【技術領域】
[0001]本發明涉及數字信號處理領域,具體涉及一種基于內部前推的浮點融合乘加方法、裝置及處理器。
【背景技術】
[0002]融合乘加操作(FMA,Fused Multiply-add)是一種一步執行A+BXC類型的浮點乘加操作,是一種常見的算術運算操作,它只進行一次舍入。也就是說,非融合乘加操作先計算B X C的結果,將結果舍入到N個有效位,然后再把結果和A相加,最后再將相加后的結果舍入到N個有效位。而融合乘加操作是以全精度計算A+BXC的值,然后將最終的結果舍入到N個有效位。可見融合乘加操作相比于傳統的通過浮點加法器和浮點乘法器聯合起來進行浮點乘加操作,具有計算速度快、計算精度高等的優點。從而,目前融合乘加器在許多通用處理器中,如ARM、POWER、Itanium等,代替了浮點加法器和浮點乘法器,用于執行浮點加、減、乘、乘加等算術操作。另外,在GPU、DSP等領域,也獲得了非常廣泛的應用。
[0003]目前通常采用的融合乘加方法例如是IBM公司Power 6/7處理器的浮點部件中采用的方法,其工作原理是采用7級流水,如圖1所示,支持第七階段結果到第一階段的數據前推(forwarding),和第六階段結果到第一階段的數據前推。其中第七階段到第一階段:將最終結果前推到下一條指令的操作數部分。第六階段到第一階段:將規格化還未舍入的結果前推到下一條指令的操作數部分。這種前推技術是將運算結果前推到浮點乘加器的入口處,在這種情況下,當出現數據相關的指令時仍舊需要等待幾拍才能執行,容易引起流水線較長時間的阻塞,例如指令1執行操作:A2 =A1+B1XC1,緊隨其后的指令2執行操作:A3=A2+B2XC2,即指令1和指令2發生了讀后寫相關(Read After Write,RAW)采用這種前推技術,從浮點乘加器計算出來的結果被前推到浮點乘加器的入口處,那么指令2仍舊會被阻塞(n-2)拍才可以進入流水線,η為浮點乘加器流水線級數,所以降低了融合乘加操作的執行速度。
【發明內容】
[0004]因此,本發明要解決的技術問題在于克服現有技術中的浮點融合乘加方法阻塞時間長、執行速度低的缺陷。
[0005]為此,本發明的一種基于內部前推的浮點融合乘加方法,包括如下步驟:
[0006]在第一級流水線中執行包括指數加比選操作和陣列乘法操作中的第一部分壓縮操作,所述指數加比選操作包括當不存在第一前推值或第二前推值時,對加運算中加數的指數值、第一積運算中第一因數的指數值和所述第一積運算中第二因數的指數值進行指數加比選操作,產生對階移位操作的第一控制信號,所述第一前推值為對階移位操作產生的中間結果所對應的指數值,所述第二前推值為前導零操作產生的中間結果所對應的指數值,所述陣列乘法操作包括對所述第一因數的尾數值和所述第二因數的尾數值進行陣列乘法操作,分為所述第一部分壓縮操作和第二部分壓縮操作;
[0007]在第二級流水線中執行包括對階移位操作和所述陣列乘法操作中的第二部分壓縮操作,所述對階移位操作包括當不存在第三前推值時,根據所述第一控制信號對所述加數的尾數值進行對階移位操作并前推對階移位操作產生的中間結果所對應的指數值,所述第三前推值為相加操作產生的中間結果;
[0008]在第三級流水線中執行包括前導零操作和相加操作,所述前導零操作包括當不存在第三前推值時,對所述對階移位操作產生的中間結果和所述陣列乘法操作中的第二部分壓縮操作產生的中間結果進行前導零操作并前推前導零操作產生的中間結果所對應的指數值,所述相加操作包括當不存在第三前推值時,對所述對階移位操作產生的中間結果和所述陣列乘法操作中的第二部分壓縮操作產生的中間結果進行相加操作并前推相加操作產生的中間結果;
[0009]在第四級流水線中執行包括第一規格化操作,所述第一規格化操作包括對所述相加操作產生的中間結果進行規格化操作;
[0010]在第五級流水線中執行包括舍入操作,所述舍入操作包括對所述第一規格化操作產生的中間結果進行舍入操作,產生浮點融合乘加結果值并輸出。
[0011]優選地,所述指數加比選操作還包括當存在第一前推值和第二前推值時,對所述第一前推值、所述第二前推值、第二積運算中第三因數的指數值和所述第二積運算中第四因數的指數值進行指數加比選操作,產生對階移位操作的第二控制信號。
[0012]優選地,所述當存在第一前推值和第二前推值時,對所述第一前推值、所述第二前推值、第二積運算中第三因數的指數值和所述第二積運算中第四因數的指數值進行指數加比選操作,產生對階移位操作的第二控制信號的步驟包括:
[0013]當存在第一前推值和第二前推值時,對所述第一前推值、第二積運算中第三因數的指數值和所述第二積運算中第四因數的指數值進行第一次指數加比選操作,產生中間指數值;
[0014]對所述第二前推值和所述中間指數值進行第二次指數加比選操作,產生對階移位操作的第二控制信號。
[0015]優選地,所述對階移位操作還包括當存在第三前推值時,根據所述第二控制信號對所述相加操作產生的中間結果進行對階移位操作并前推對階移位操作產生的中間結果所對應的指數值。
[0016]優選地,在第二級流水線中執行還包括第二規格化操作,所述第二規格化操作包括當存在第三前推值時,對所述相加操作產生的中間結果進行規格化操作。
[0017]優選地,所述前導零操作還包括當存在第三前推值時,對所述第二規格化操作產生的中間結果和所述陣列乘法操作中的第二部分壓縮操作產生的中間結果進行前導零操作并前推前導零操作產生的中間結果所對應的指數值;
[0018]所述相加操作還包括當存在第三前推值時,對所述第二規格化操作產生的中間結果和所述陣列乘法操作中的第二部分壓縮操作產生的中間結果進行相加操作并前推相加操作產生的中間結果。
[0019]本發明的一種基于內部前推的浮點融合乘加裝置,包括:
[0020]第一級單元,包括用于在第一級流水線中執行指數加比選操作的指數加比選單元和用于在第一級流水線中執行陣列乘法操作中的第一部分壓縮操作的第一部分壓縮單元,所述指數加比選單元包括第一指數加比選子單元,用于當不存在第一前推值或第二前推值時,對加運算中加數的指數值、第一積運算中第一因數的指數值和所述第一積運算中第二因數的指數值進行指數加比選操作,產生對階移位操作的第一控制信號,所述第一前推值為對階移位操作產生的中間結果所對應的指數值,所述第二前推值為前導零操作產生的中間結果所對應的指數值,所述陣列乘法操作包括對所述第一因數的尾數值和所述第二因數的尾數值進行陣列乘法操作,分為所述第一部分壓縮操作和第二部分壓縮操作;
[0021]第二級單元,包括用于在第二級流水線中執行對階移位操作的對階移位單元和用于在第二級流水線中執行所述陣列乘法操作中的第二部分壓縮操作的第二部分壓縮單元,所述對階移位單元包括第一對階移位子單元,用于當不存在第三前推值時,根據所述第一控制信號對所述加數的尾數值進行對階移位操作并前推對階移位操作產生的中間結果所對應的指數值,所述第三前推值為相加操作產生的中間結果;
[0022]第三級單元,包括用于在第三級流水線中執行前導零操作的前導零單元和用于在第三級流水線中執行相加操作的相加單元,所述前導零單元包括第一前導零子單元,用于當不存在第三前推值時,對所述對階移位操作產生的中間結果和所述陣列乘法操作中的第二部分壓縮操作產生的中間結果進行前導零操作并前推前導零操作產生的中間結果所對應的指數值,所述相加單元包括第一相加子單元,用于當不存在第三前推值時,對所述對階移位操作產生的中間結果和所述陣列乘法操作中的第二部分壓縮操作產生的中間結果進行相加操作并前推相加操作產生的中間結果;
[0023]第四級單元,包括用于在第四級流水線中執行第一規格化操作的第一規格化單元,所述第一規格化單元包括第一規格化子單元,用于對所述相加操作產生的中間結果進