亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

處理器中的有效并行浮點異常處理的制作方法

文檔序號:6578189閱讀:354來源:國知局

專利名稱::處理器中的有效并行浮點異常處理的制作方法
技術(shù)領(lǐng)域
:本公開文本總體上涉及微處理器領(lǐng)域。具體的,本公開文本涉及用于處理執(zhí)行單指令多數(shù)據(jù)流(SIMD)指令的處理器中的浮點異常的有效技術(shù)。
背景技術(shù)
:用于浮點運算的IEEE(電氣和電子工程師學(xué)會)標(biāo)準(zhǔn)(正EE754)規(guī)定了如何表示單精度(32位)、雙精度(64位)、單擴展精度(》43位,但不常用)和雙擴展精度(》79位,常常以80位來實施)的浮點數(shù)(包括負零、非規(guī)格化數(shù)(denormal)、無窮大以及NaN,NaN表示"非數(shù)字"),以及應(yīng)如何對它們執(zhí)行運算。這個標(biāo)準(zhǔn)僅需要32位的值;其它的是可任選的。它還規(guī)定了四種舍入(round)模式和5種異常(包括何時出現(xiàn)異常,以及當(dāng)它們出現(xiàn)時會發(fā)生什么)。將指數(shù)偏移("—1,其中e是指數(shù)字段所使用的位數(shù)。例如,單精度數(shù)具有8-位指數(shù),因此單精度數(shù)的指數(shù)是以27-1=127加上該指數(shù)的方式來存儲的,也稱為"偏移127"。規(guī)格化單精度指數(shù)的范圍在-126到127之間。指數(shù)128被保留以供正或負無窮大使用。指數(shù)-127(全零)被保留以供正或負零使用(或者用于非規(guī)格化數(shù),但在非規(guī)格化數(shù)的情況下,所用的偏移是(2"2,即使用126而不是127,因為假定尾數(shù)的最高有效位是0,而不是l)。在表l中示出了單精度浮點表示的一些示例。表l:單精度浮點表示示例類型符號expexp+偏移指數(shù)小數(shù)00或1127000000000000000000000000000000010270111111100000000000000000000000<table>tableseeoriginaldocumentpage8</column></row><table>規(guī)格化浮點數(shù)具有v-sx2exm的值,其中,s、e和m定義為符號位為0時,s=+1(正數(shù)和+0)符號位為1時,s--l(負數(shù)和-0)e=指;教-偏移(即,以偏移加上指數(shù)的方式來存儲該指數(shù))w=l./rac//owC二遂虔O(就是說,尾數(shù)或有效數(shù)字(significand)是這樣的隱含的前導(dǎo)位值1,隨后是小數(shù)點,隨后是小數(shù)(戶Mto")的二進制位)。因此,l^m<2。非規(guī)格化數(shù)(也稱為反規(guī)格化(denormalized)數(shù)或次規(guī)格化(subnormal)數(shù))是(絕對值)小于最小的規(guī)格化數(shù)但仍不為0的數(shù)。非規(guī)格化數(shù)的產(chǎn)生有時稱為逐級下溢(gradualunderflow),因為它允許在結(jié)果較小時,計算緩慢地降低精度。在Intel8087浮點協(xié)處理器中實現(xiàn)了非規(guī)格化數(shù),同時撰寫了IEEE754標(biāo)準(zhǔn)。這個實現(xiàn)表明可以在實際實施中支持非規(guī)格化數(shù)。在規(guī)格化浮點表示中,假定尾數(shù)中的前導(dǎo)二進制數(shù)字等于1。由于已知它等于l,在一些浮點表示中,可以省略尾數(shù)的前導(dǎo)二進制數(shù)字,并相應(yīng)地調(diào)整指數(shù)值。非規(guī)格化數(shù)值是那些不能以規(guī)格化形式來表示的值(即具有最小的可能指數(shù),并且其帶有非零的尾數(shù))。浮點單元(FTU)的一些實現(xiàn)方式在硬件中不直接支持非規(guī)格化數(shù),而是轉(zhuǎn)移到某些種類的軟件或微代碼支持。盡管這對于用戶而言可能是透明的,但它會導(dǎo)致產(chǎn)生或使用非規(guī)格化數(shù)的計算比對規(guī)格化數(shù)進行類似計算慢得多?,F(xiàn)代處理器還可以具有用于對浮點數(shù)執(zhí)行單指令多數(shù)據(jù)(SIMD)運算的指令。當(dāng)這些SIMD運算產(chǎn)生或使用非規(guī)格化數(shù)時,會觸發(fā)異常,以便在微代碼的幫助下在軟件或硬件中處理該運算。在硬件中支持非規(guī)格化數(shù)的一個方式是通過更寬的內(nèi)部表示,其具有足夠的精度來簡單地將非規(guī)格化數(shù)作為較小的規(guī)格化數(shù)來處理。例如,如果觸發(fā)了包含單精度非規(guī)格化數(shù)的異常,則微代碼會將單精度操作數(shù)轉(zhuǎn)換為規(guī)格化雙精度操作數(shù),并在更寬的表示上重新執(zhí)行該運算,隨后對結(jié)果進行反規(guī)格化,并將它們轉(zhuǎn)換回單精度。類似地,可以將雙精度非規(guī)格化數(shù)作為雙擴展精度規(guī)格化數(shù)來處理。一個缺陷在于,產(chǎn)生或使用非規(guī)格化數(shù)的計算仍會比對規(guī)格化數(shù)進行類似計算慢得多。到目前為止,還沒有充分地研究出用于在執(zhí)行SIMD指令的處理器中處理浮點異常的更有效的技術(shù)。在附圖的各個圖中作為示例而非限制來圖示說明本發(fā)明。圖1示出了用于存儲標(biāo)量(scalar)正EE浮點數(shù)和分組(packed)IEEE浮點數(shù)的示例性存儲格式。圖2示出了系統(tǒng)的一個實施例,其包括執(zhí)行SIMD浮點指令并使用用于處理SIMD浮點異常的有效技術(shù)的處理器。圖3示出了執(zhí)行SIMD浮點指令并使用用于處理SIMD浮點異常的有效技術(shù)的處理器的一個實施例。圖4示出了一個裝置的可替換實施例,用于有效地處理在執(zhí)行單指令多數(shù)據(jù)(SIMD)指令的處理器中的浮點異常。圖5a-b示出了用于存儲分組浮點數(shù)的內(nèi)部表示的示例性存儲格式。圖6示出了用于處理在SIMD浮點加法器中的某些數(shù)值異常的處理的一個實施例的流程圖。圖7示出了用于處理在SIMD浮點乘法器中的某些常見異常的處理的9一個實施例的流程圖。圖8示出了用于處理在執(zhí)行SIMD浮點指令的處理器中的數(shù)值異常的處理的一個替換實施例的流程圖。具體實施例方式公開了用于處理在執(zhí)行單指令多數(shù)據(jù)(SIMD)指令的處理器中的浮點異常的方法和裝置。在一個實施例中,為SIMD浮點運算識別數(shù)值異常,啟動一對SIMD微運算(micro-operation),以便為SIMD浮點運算產(chǎn)生分組結(jié)果的兩個分組局部結(jié)果??梢岳斫庠谝韵鹿_文本的上下文中的數(shù)值異常包括通過識別非規(guī)格化輸入值,或者通過識別有可能作為結(jié)果產(chǎn)生非規(guī)格化輸出值的下溢條件而觸發(fā)的至少一個異常,并且隨后可以要求微代碼輔助。啟動SIMD反規(guī)格化微運算,以便合并這兩個分組局部結(jié)果,并且對所合并的分組局部結(jié)果中的一個或多個元素執(zhí)行反規(guī)格化,以便為SIMD浮點運算產(chǎn)生具有一個或多個非規(guī)格化元素的分組結(jié)果??梢栽O(shè)定標(biāo)志,并將其與分組局部結(jié)果和/或分組結(jié)果一起進行存儲,以便標(biāo)識所述非規(guī)格化元素。在一個實施例中,當(dāng)SIMD浮點運算是乘法(或除法、平方根或變換)時,啟動SIMD規(guī)格化微運算,以便在該SIMD浮點運算之前產(chǎn)生規(guī)格化的偽內(nèi)部浮點表示。這種偽內(nèi)部浮點表示可以與規(guī)格化分組浮點操作數(shù)存儲在相同的寄存器中,其中設(shè)定標(biāo)志來表示非規(guī)格化元素的哪一個相應(yīng)的偽內(nèi)部浮點表示需要被轉(zhuǎn)換為非規(guī)格化元素的實際內(nèi)部浮點表示。在非規(guī)格化元素的這種偽內(nèi)部浮點表示中,可以對尾數(shù)執(zhí)行規(guī)格化,并且可以以這樣的方式來存儲指數(shù)即,使得易于將它們恢復(fù)為實際內(nèi)部浮點表示的更寬指數(shù)。例如,如果從非規(guī)格化數(shù)的指數(shù)中減去尾數(shù)的前導(dǎo)O的數(shù)量(以實際內(nèi)部浮點表示的更寬指數(shù)格式進行偏移),則較高位會是恒定的(例如,10),并且因此可以從偽內(nèi)部浮點表示得出并易于恢復(fù)較高位。因此,這種技術(shù)可以用于透明地處理SIMD浮點異常,同時不必轉(zhuǎn)換為標(biāo)量運算并且僅需執(zhí)行少量的額外微運算??梢愿鶕?jù)以下教導(dǎo)來實現(xiàn)本發(fā)明的這些及其它實施例,并且顯然,可以在不背離本發(fā)明的廣泛的精神與范圍的情況下,對以下教導(dǎo)做出各種修改和改變。因此,說明書和附圖應(yīng)認為是示例性而不是限制性的意義,本發(fā)明僅依據(jù)權(quán)利要求及其等價物來度量。在以下描述中,為了解釋的原因,闡述了許多具體細節(jié),以便提供對本發(fā)明透徹的理解。然而,本領(lǐng)域普通技術(shù)人員會意識到這些具體細節(jié)并非是實現(xiàn)本發(fā)明的一些實施例所必需的。在其它情況下,沒有詳細闡明公知的電氣結(jié)構(gòu)和電路,以便不模糊對本發(fā)明的實施例的理解。隨著越來越多的計算機系統(tǒng)用于互聯(lián)網(wǎng)和多媒體應(yīng)用,隨著時間的過去己經(jīng)開發(fā)出了額外的處理器支持。例如,單指令、多數(shù)據(jù)(SIMD)整數(shù)/浮點指令和流式SIMD擴展(SSE)是減少了執(zhí)行特定程序任務(wù)所需的指令總數(shù)的指令。這些指令可以通過對多個數(shù)據(jù)元素進行并行操作,來加速軟件性能。結(jié)果,可以在包括視頻、語音和圖像/照片處理的寬泛范圍的應(yīng)用中實現(xiàn)性能的提高。SIMD指令在微處理器及相似類型的邏輯電路中的實現(xiàn)常常包括多個問題。而且,SIMD運算的復(fù)雜性常常導(dǎo)致需要額外的電路來準(zhǔn)確地處理和操作數(shù)據(jù)。圖l示出了一些示例性存儲格式101-105,其用于存儲標(biāo)量浮點數(shù)和分組IEEE浮點數(shù)。單精度格式101包括32位符號位lll、8個指數(shù)位112和23個有效數(shù)字或尾數(shù)位113。雙精度格式102包括64位符號位121、11個指數(shù)位122和52個有效數(shù)字或尾數(shù)位123。雙擴展精度格式103包括80位符號位131、15個指數(shù)位132和64個有效數(shù)字或尾數(shù)位133。在IEEE浮點數(shù)的每一個存儲格式中,有效數(shù)字或尾數(shù)112、122和132還可以包括隱含最高有效位J,其假定為等于l。因此,例如,如果雙精度格式102的52-位的尾數(shù)存儲十六進制值23456789ABCDE,所表示的十六進制值就是1.23456789ABCDE,其中小數(shù)點在隱含位J后面。指數(shù)偏移了(2""-1,其中e是指數(shù)字段所使用的位數(shù)。因此,單精度格式101的8-位的指數(shù)被偏移了127,雙精度格式102的11-位的指數(shù)被偏移了1023。分組單精度格式104包括128位,每一個32-位的部分141-144都存儲具有單精度格式101的單精度浮點數(shù)。分組雙精度格式105也包括128位,每一個64-位的部分151-152都存儲具有雙精度格式102的雙精度浮點數(shù)。本領(lǐng)域中公知的,分組單精度格式104和分組雙精度格式105可以用于執(zhí)行SIMD浮點運算。會意識到,盡管將分組單精度格式104和分組雙精度格式105顯示為包括128位,但本發(fā)明不限于此。具體地,本發(fā)明的實施例可以包括用于執(zhí)行SIMD浮點運算的、包含有256位或512位數(shù)據(jù)或者更多位數(shù)據(jù)的多種格式的分組單精度浮點數(shù)和分組雙精度浮點數(shù)。當(dāng)這些SIMD浮點運算產(chǎn)生或使用非規(guī)格化數(shù)時,可以觸發(fā)異常(有可能被屏蔽),以便以軟件或硬件和/或在微代碼輔助下處理該運算。在一些現(xiàn)有處理器中,處理這種異??梢园▽⒎纸M浮點數(shù)轉(zhuǎn)換為更寬表示的標(biāo)量浮點數(shù),并作為標(biāo)量運算對該更寬表示重新執(zhí)行運算,隨后按照需要對結(jié)果進行反規(guī)格化,并將它們轉(zhuǎn)換回分組浮點數(shù)。如上指出的,處理這種產(chǎn)生或使用非規(guī)格化數(shù)的計算會比對規(guī)格化數(shù)執(zhí)行類似計算慢得多,尤其是在分組浮點數(shù)的格式會包括256位或512位或者更多位數(shù)據(jù)的情況下。因此,就需要本文公開的更有效的技術(shù)來處理在執(zhí)行SIMD指令的處理器中的浮點異常。圖2示出了系統(tǒng)200的一個實施例,該系統(tǒng)200包括處理器300,其執(zhí)行SIMD浮點指令并使用用于處理SIMD浮點異常的更有效的技術(shù)。例如在本文所述實施例中,根據(jù)本發(fā)明,系統(tǒng)200包括諸如處理器300的組件,處理器300利用包含邏輯的執(zhí)行單元來執(zhí)行用于執(zhí)行SIMD浮點運算的算法。系統(tǒng)200代表了基于可以從加利福尼亞SantaClara的Intel公司獲得的PENTIUMIII,PENTIUM4,Celeron,XEON,ITANIUM,CENTRINO,COREDuo,CORE2Duo和/或CORETM2Quad微處理器的處理系統(tǒng),盡管也可以使用其它系統(tǒng)(包括具有其它微處理器的PC、工程工作站、機頂盒等)。在一個實施例中,示例系統(tǒng)200可以執(zhí)行可從Redmond,Wash.的Microsoft公司獲得的WINDOWStm操作系統(tǒng)的某個版本,盡管也可以使用其它操作系統(tǒng)(例如MACOSXLEOPARD操作系統(tǒng)、UNIX和域Li皿x)、嵌入式軟件、和/或圖形用戶接口。因此,本發(fā)明不限于硬件電路和軟件的任何特定組合。處理器300包括一個或多個執(zhí)行單元203,用以根據(jù)本發(fā)明對分組浮點數(shù)據(jù)執(zhí)行SIMD指令。在單處理器臺式機或服務(wù)器系統(tǒng)的環(huán)境下描述本實施例,但可替換的實施例可以包括在多處理器系統(tǒng)中。系統(tǒng)200的一個實施例是中心(hub)架構(gòu)的示例。計算機系統(tǒng)200包括處理器300,用以處理數(shù)據(jù)信號。處理器300可以是例如復(fù)雜指令集計算機(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、執(zhí)行多個指令集的組合的處理器,或者諸如數(shù)字處理器之類的任何其它處理器設(shè)備。處理器300耦合到處理器總線210,處理器總線210能夠在處理器300與系統(tǒng)200中的其它組件之間傳輸數(shù)據(jù)信號。系統(tǒng)200的元件執(zhí)行它們傳統(tǒng)的功能,這是熟悉本領(lǐng)域的人員公知的。在一個實施例中,處理器300包括1級(L1)內(nèi)部高速緩沖存儲器207。根據(jù)架構(gòu),處理器300可以具有單級內(nèi)部高速緩存或多級內(nèi)部高速緩存??商鎿Q地,在另一個實施例中,高速緩沖存儲器可以位于處理器300之外。其它實施例還可以包括內(nèi)部高速緩存和外部高速緩存兩者的組合,這取決于具體實現(xiàn)方式及需要。寄存器文件(Registerfile)208可以在多種寄存器中存儲不同類型的數(shù)據(jù),這些寄存器包括SIMD寄存器和/或標(biāo)量寄存器、整數(shù)寄存器、浮點寄存器、狀態(tài)寄存器和指令指針寄存器。包含用以執(zhí)行整數(shù)和浮點運算的邏輯的執(zhí)行單元203也位于處理器300中。處理器300還包括微代碼(ucode)ROM,其存儲特定宏指令的微代碼和/或用于在微代碼的輔助下以硬件處理異常操作。對于該實施例,執(zhí)行單元203包括用以處理分組指令集209的邏輯,其中分組指令集209包括SIMD浮點指令。通過將分組指令集209包括在通用處理器300的指令集中,連同用以執(zhí)行所述指令的相關(guān)電路一起,可以用分組數(shù)據(jù)在通用處理器300中執(zhí)行由許多多媒體應(yīng)用所使用的運算。因此,通過使用處理器數(shù)據(jù)總線的完全寬度來對分組數(shù)據(jù)執(zhí)行運算,可以加速并更有效地執(zhí)行許多多媒體應(yīng)用。這可以消除為了執(zhí)行一個或多個運算而通過處理器的數(shù)據(jù)總線傳遞更小單位的數(shù)據(jù)(一次傳遞一個數(shù)據(jù)元素)的需要。執(zhí)行單元203的替換實施例還可以用于微控制器、嵌入式處理器、圖形設(shè)備、DSP及其它類型的邏輯電路中。系統(tǒng)200包括存儲器220。存儲器220可以是動態(tài)隨機存取存儲器(DRAM)設(shè)備、靜態(tài)隨機存取存儲器(SRAM)設(shè)備、閃存存儲器設(shè)備或其它存儲器設(shè)備。存儲器220可以存儲由可由處理器300執(zhí)行的數(shù)據(jù)信號所表示的指令和/或數(shù)據(jù)。系統(tǒng)邏輯芯片力6耦合到處理器總線210和存儲器220。在示出的實施例中的系統(tǒng)邏輯芯片216是存儲器控制中心(MCH)。處理器300可以經(jīng)由處理器總線210與MCH216通信。MCH216向存儲器220提供高帶寬的存13儲器通路218,用于指令和數(shù)據(jù)的存儲,并用于圖形命令、數(shù)據(jù)和紋理的存儲。MCH216用于導(dǎo)引在處理器300、存儲器220及系統(tǒng)200中其它組件之間的數(shù)據(jù)信號,并用于橋接在處理器總線210、存儲器220和系統(tǒng)I/O222之間的數(shù)據(jù)信號。在一些實施例中,系統(tǒng)邏輯芯片216可以提供用于耦合到圖形控制器212上的圖形端口。MCH216通過存儲器接口218耦合到存儲器220。圖形卡212通過加速圖形端口(AGP)互連214耦合到MCH216。系統(tǒng)200的一些實施例使用專用中心接口總線222來將MCH216耦合到I/O控制中心(ICH)230。ICH230經(jīng)由本地I/O總線向一些I/O設(shè)備提供直接連接。本地1/0總線是用于將外圍設(shè)備連接到存儲器220、芯片組和處理器300的高速I/O總線。一些示例是音頻控制器、固件中心(閃存BIOS)228、無線收發(fā)機226、數(shù)據(jù)存儲器224、包含用戶輸入和鍵盤接口的傳統(tǒng)I/O控制器、諸如通用串行總線(USB)的串行擴展端口、和網(wǎng)絡(luò)控制器234。數(shù)據(jù)存儲設(shè)備224可以包括硬盤驅(qū)動器、軟盤驅(qū)動器、CD-ROM設(shè)備、閃存存儲器設(shè)備,或其它大容量存儲設(shè)備。在系統(tǒng)200的一些實施例中,MCH216和ICH230可以集成到單個系統(tǒng)邏輯芯片201中。在一些替換實施例中,MCH216可以直接集成到處理器300中,用于指導(dǎo)處理器300對存儲器220的訪問。對于系統(tǒng)200的另一個實施例,處理器300可以直接集成到芯片上系統(tǒng)中。芯片上系統(tǒng)的一個實施例包括處理器300和存儲器220。用于一個這種系統(tǒng)的存儲器220是閃存存儲器。閃存存儲器220可以與處理器300及其它系統(tǒng)組件位于同一管芯(die)上。另外,諸如存儲器控制器或圖形控制器之類的其它邏輯塊也可以位于芯片上系統(tǒng)中。圖3示出了處理器300的一個實施例,該處理器300執(zhí)行SIMD浮點指令,并使用用于處理SIMD浮點異常的有效技術(shù)。按順序的前端(in-orderfrontend)301是處理器300中的用于讀取要執(zhí)行的宏指令并將它們準(zhǔn)備好以便在處理器流水線中使用的部分。這個實施例的前端301包括幾個單元。指令預(yù)取器326從存儲器220和/或從I-高速緩存327讀取宏指令,并將它們輸入到指令譯碼器328,指令譯碼器328依次將它們譯碼為機器知道如何執(zhí)行的、稱為微指令或微運算(也稱為微-op或uop)的原語(primitive)。微-op高速緩存330取得譯碼的微-op,并存儲它們以便將來重新執(zhí)行而不進行譯碼。微-op高速緩存330的一些實施例可以包括追蹤高速緩存(tracecache),它將微-op組合為按程序順序的序列,或者追蹤用于執(zhí)行的微-op隊列334。對于一些實施例,當(dāng)譯碼器328或者當(dāng)微-op高速緩存330的'追蹤高速緩存遇到復(fù)雜的宏指令時,微代碼ROM344可以提供完成該操作所需的微-op。許多宏指令可以轉(zhuǎn)換為單個微-op,但其他宏指令需要幾個微-op來完成整個操作。在一個實施例中,如果需要多于4個微-op來完成宏指令,則譯碼器328就訪問微代碼ROM344,以提供執(zhí)行該宏指令所需的微-op。對于一個實施例,浮點運算的異常可以編碼到微代碼ROM344中的少量微-op中,并由其來處理,以便以能夠提供對執(zhí)行SIMD浮點指令的處理器300中的異常情況(例如非規(guī)格化數(shù))的支持的方式來重新執(zhí)行浮點運算。一些SIMD及其他多媒體類型的指令被認為是復(fù)雜指令。大多數(shù)與浮點相關(guān)的指令也是復(fù)雜指令。如此,當(dāng)指令譯碼器328遇到復(fù)雜宏指令時,就訪問微代碼ROM344的適當(dāng)位置,以獲得用于該宏指令的微代碼序列。將執(zhí)行該宏指令所需的各種微-op傳輸?shù)絹y序執(zhí)行引擎303,用于在適當(dāng)?shù)恼麛?shù)執(zhí)行單元和浮點執(zhí)行單元中執(zhí)行。亂序執(zhí)行引擎303是在其中準(zhǔn)備微指令以便執(zhí)行的場所。亂序執(zhí)行邏輯具有多個緩沖器,用以在微指令穿過流水線行進并被調(diào)度以執(zhí)行時,平滑并重新排序微指令流來優(yōu)化性能。分配器重命名器邏輯333分配每一個微-op的執(zhí)行所需的機器緩沖器和資源,并將邏輯寄存器重命名到寄存器文件的條目上。分配器重命名器邏輯333的一個實施例還為多個隊列中的每一個微-op分配條目,這些隊列可以包括用于存儲器操作的存儲器隊列331、用于整數(shù)運算或定點運算的整數(shù)隊列332和用于浮點運算的浮點隊列336。依據(jù)這些隊列(例如分別是331、332和336),由存儲器調(diào)度器321、整數(shù)調(diào)度器302和浮點調(diào)度器306調(diào)度微-op,以便分別由讀/寫單元311、整數(shù)執(zhí)行單元312和浮點執(zhí)行單元316執(zhí)行。微-op調(diào)度器3M、302和306基于它們相關(guān)的輸入寄存器操作數(shù)源準(zhǔn)備就緒和微-op完成其操作所需的執(zhí)行資源的可用性,來確定微-op何時準(zhǔn)備好執(zhí)行。會意識到,執(zhí)行單元311、312和316中的每一個或任何一個都可以具有用于執(zhí)行標(biāo)量或SIMD運算的相同的執(zhí)行單元。15寄存器文件旁路(bypass)網(wǎng)絡(luò)308位于調(diào)度器321、302和306與執(zhí)行單元311、312和316之間。在寄存器文件旁路網(wǎng)絡(luò)308的一些實施例中,可以存在用于整數(shù)運算和浮點運算的單獨的寄存器文件。這種實施例的每一個寄存器文件還可以包括這樣的旁路網(wǎng)絡(luò),即該旁路網(wǎng)絡(luò)可以將剛剛完成的、還沒有寫入到寄存器文件中的結(jié)果旁路或轉(zhuǎn)發(fā)給新的相關(guān)微-op,并且還能夠彼此傳送數(shù)據(jù)。可替換地,可以統(tǒng)一寄存器文件旁路網(wǎng)絡(luò)308的多個實施例。寄存器文件旁路網(wǎng)絡(luò)308的一個替換實施例具有用于存儲分組源操作數(shù)和目標(biāo)操作數(shù)的至少256位寬的寄存器條目,這些操作數(shù)包括用于SIMD浮點運算的分組浮點源操作數(shù)和分組浮點結(jié)果。微-op調(diào)度器321、302和306的一些實施例可以在父負載完成執(zhí)行之前分派相關(guān)操作。由于在處理器300中推測性地調(diào)度并執(zhí)行微-op,處理器300還包括用以處理存儲器未命中的邏輯。如果在數(shù)據(jù)高速緩存中未命中數(shù)據(jù)負載,在流水線中就會存在暫停(inflight)的相關(guān)操作,其使調(diào)度器具有暫時的不正確數(shù)據(jù)。重放機制可以追蹤并重新執(zhí)行使用不正確數(shù)據(jù)的指令。只需要重放相關(guān)操作,可以允許完成獨立的操作。當(dāng)已經(jīng)完成了微-op的執(zhí)4亍時,由重排序退役(retire)邏輯310以順序程序的次序使它們退役。浮點執(zhí)行單元316的一個實施例包括異常電路346,用以識別SIMD浮點運算的異常,其包括例如數(shù)值異常。響應(yīng)于數(shù)值異常,可以位于微代碼ROM344中的微代碼異常處理機(handler),或一些專用的有限狀態(tài)機(例如在異常電路346中)利用微代碼ROM344來啟動用于遇到異常的該SIMD浮點運算的SIMD微運算序列。在一個實施例中,SIMD微運算為SIMD浮點運算產(chǎn)生分組結(jié)果的兩個分組局部結(jié)果。SIMD反規(guī)格化微運算合并這兩個分組局部結(jié)果,并且對所合并的分組局部結(jié)果中的一個或多個元素執(zhí)行反規(guī)格化,以便為具有一個或多個非規(guī)格化元素的該SIMD浮點運算產(chǎn)生分組結(jié)果??梢栽O(shè)定標(biāo)志并將其與分組局部結(jié)果一起進行存儲,用以標(biāo)識在一個或多個元素中的非規(guī)格化結(jié)果,在此情況下,對于一些實施例,在反規(guī)格化微運算之前可能需要對分組局部結(jié)果中的一個執(zhí)行規(guī)格化。在微代碼異常處理機的一個實施例中,當(dāng)SIMD浮點運算是乘法時,還可以利用微代碼ROM344來啟動SIMD規(guī)格化微運算,以便產(chǎn)生規(guī)格化的偽內(nèi)部浮點表示作為用于該SIMD浮點運算的SIMD微運算序列的一部分。可以設(shè)定標(biāo)志并將其與分組結(jié)果一起進行存儲,用以標(biāo)識以規(guī)格化的偽內(nèi)部浮點表示所表示的非規(guī)格化結(jié)果。對于這個實施例,當(dāng)SIMD浮點運算是加法時,SIMD規(guī)格化微運算不是必需的,因為SIMD浮點加法器能夠接受包含非規(guī)格化數(shù)值的分組操作數(shù)作為SIMD浮點加法的輸入。在一些實施例中,可以設(shè)定標(biāo)志并將其與規(guī)格化的偽內(nèi)部浮點表示一起進行存儲,用以標(biāo)識非規(guī)格化元素,并能夠依據(jù)規(guī)格化的偽內(nèi)部浮點表示來重建實際的內(nèi)部浮點表示。因此,如上所述的微代碼輔助機制可以利用微代碼344來透明地處理SIMD浮點異常。圖4示出了用于有效地處理執(zhí)行單指令多數(shù)據(jù)(SIMD)指令的處理器中的浮點異常的裝置460的一個替換實施例。裝置460包括寄存器文件旁路網(wǎng)絡(luò)308,其可操作地與浮點執(zhí)行單元316耦合。SIMD浮點執(zhí)行單元316的一個實施例包括SIMD浮點加法器單元(FAU)400和SIMD浮點乘法單元(FMU)420。包括SIMDFAU400和/或SIMDFMU420的實施例還可以包括SIMD浮點規(guī)格化單元(FNU)410和SIMD浮點反規(guī)格化單元(FDU)430。SIMDFAU400包括浮點加法器401、402、…408,其可以包括能夠使用用于單精度浮點值的內(nèi)部浮點表示來執(zhí)行單精度加法的多個浮點加法器,和能夠使用用于雙精度浮點值的內(nèi)部浮點表示來執(zhí)行雙精度加法的多個浮點加法器。在SIMDFAU400的一個實施例中,浮點加法器401、402、…408中每隔一個的浮點加法器能夠執(zhí)行單精度加法和雙精度加法兩者。在SIMDFAU400的一個替換實施例中,可以分割和/或組合浮點加法器401、402、…408,來分別執(zhí)行單精度加法和/或雙精度加法。浮點加法器401、402、…408的實施例包括對齊(alignment)電路,用以將浮點操作數(shù)元素的尾數(shù)對齊;以及加法器電路,用于將浮點操作數(shù)元素的尾數(shù)相加。SIMDFAU400還包括分別與浮點加法器401、402、…408耦合的異常電路441、442、…448。異常電路441、442、…448的一些實施例包括非規(guī)格化檢測電路,用以檢測用于SIMD浮點加法運算的分組操作數(shù)的非規(guī)格化元素;以及異常產(chǎn)生電路,用以識別包含非規(guī)格化結(jié)果的、SIMD浮點加法運算的異常結(jié)果。異常電路441、442、…448的實施例還可以可操作地與微代碼ROM344耦合,用以響應(yīng)于所識別的異常結(jié)果,啟動微-op序列來重新執(zhí)行SIMD浮點加法運算。在SIMDFAU400的一些實施例中,如果相應(yīng)的第二個元素不是非規(guī)格化的,則浮點加法器401、402、…408的對齊電路可以按照未偏移的指數(shù)差(即,不是經(jīng)偏移的指數(shù)差)將非規(guī)格化的第一個元素的尾數(shù)與該相應(yīng)的第二個元素的尾數(shù)對齊,但在第一個元素和第二個元素都是非規(guī)格化的情況下保持對齊狀態(tài)不變。在這些實施例中,如果所得到的和數(shù)可以表示為該SIMD浮點加法運算的分組結(jié)果中的規(guī)格化結(jié)果元素,則浮點加法器401、402、…408還可以(例如通過FNU410)舍入并重新規(guī)格化所得到的和數(shù)。如果確定結(jié)果不能表示為該SIMD浮點加法運算的分組結(jié)果中的規(guī)格化結(jié)果元素,則浮點加法器401、402、…408的(或者規(guī)格化器411、412、…418的)實施例還可以設(shè)定標(biāo)志,該標(biāo)志用以將加法結(jié)果標(biāo)識為分組結(jié)果中的非規(guī)格化元素。寄存器文件旁路網(wǎng)絡(luò)308的實施例還包括結(jié)果存儲電路,用以存儲SIMD浮點運算的分組結(jié)果,并用以存儲將結(jié)果元素標(biāo)識為分組結(jié)果中的非規(guī)格化元素的任何標(biāo)志。SIMDFNU410包括浮點規(guī)格化器411、412、…418,其可以包括能夠使用用于單精度浮點值的內(nèi)部浮點表示來執(zhí)行單精度規(guī)格化的多個浮點規(guī)格化器,和能夠使用用于雙精度浮點值的內(nèi)部浮點表示來執(zhí)行雙精度規(guī)格化的多個浮點規(guī)格化器。在SIMDFNU410的一個實施例中,浮點規(guī)格化器411、412、…418中每隔一個的浮點規(guī)格化器能夠執(zhí)行單精度規(guī)格化和雙精度規(guī)格化兩者。在SIMDFNU410的一個替換實施例中,可以分割和/或組合浮點規(guī)格化器411、412、…418,來分別執(zhí)行單精度規(guī)格化和/或雙精度規(guī)格化。浮點規(guī)格化器411、412、…418的實施例還可以包括尾數(shù)舍入電路,用以執(zhí)行并行的單精度和/或雙精度舍入和規(guī)格化。浮點規(guī)格化器411、412、…418的一些實施例還能夠在對分組操作數(shù)的偽內(nèi)部浮點表示的規(guī)格化中使用常數(shù)值(例如,10)。SIMDFMU420包括浮點乘法器421、422、…428,其可以包括能夠使用用于單精度浮點值的內(nèi)部浮點表示來執(zhí)行單精度乘法的多個浮點乘法器,和能夠使用用于雙精度浮點值的內(nèi)部浮點表示來執(zhí)行雙精度乘法的多個浮點乘法器。在SIMDFMU420的一個實施例中,浮點乘法器421、422、…18428中的每隔一個浮點乘法器能夠執(zhí)行單精度乘法和雙精度乘法兩者。在SIMDFMU420的一個替換實施例中,可以分割和/或組合浮點乘法器421、422、…428,來分別執(zhí)行單精度乘法和/或雙精度乘法。SIMDFMU420還可以包括分別與浮點乘法器421、422、…428耦合的異常電路451、452、."458。異常電路451、452、…458的一些實施例包括非規(guī)格化檢測電路,用以檢測SIMD浮點乘法運算的分組操作數(shù)中的非規(guī)格化元素;以及異常產(chǎn)生電路,用以識別包含非規(guī)格化結(jié)果的、SIMD浮點乘法運算的異常結(jié)果。異常電路451、452、…458的實施例還可以可操作地與微代碼ROM344耦合,以便響應(yīng)于檢測到的分組操作數(shù)中的非規(guī)格化元素,或者響應(yīng)于所識別的異常結(jié)果,啟動微-op序列來重新執(zhí)行SIMD浮點乘法運算。浮點乘法器421、422、…428的實施例可以包括指數(shù)比較器電路和預(yù)測器,用以基于比較,對異常操作數(shù)元素的一些常見結(jié)果(例如0、最小可表示的非規(guī)格化數(shù)、或可任選的無窮大)做出預(yù)測,并將這種預(yù)測的結(jié)果存儲為該乘法的結(jié)果,從而避免了異常。相反地,當(dāng)不能預(yù)測異常操作數(shù)元素的乘法的這種常見結(jié)果時,可以對接收到的操作數(shù)執(zhí)行乘法,并且可以根據(jù)本文所述的可替換的技術(shù)(例如處理801中的)來處理所出現(xiàn)的任何異常。SIMDFDU430包括浮點反規(guī)格化器431、432、…438,其可以包括能夠使用用于單精度浮點值的內(nèi)部浮點表示來執(zhí)行單精度反規(guī)格化的多個浮點反規(guī)格化器,和能夠使用用于雙精度浮點值的內(nèi)部浮點表示來執(zhí)行雙精度反規(guī)格化的多個浮點反規(guī)格化器。在SIMDFDU430的一個實施例中,浮點反規(guī)格化器431、432、…438中每隔一個的浮點反規(guī)格化器都能夠執(zhí)行單精度反規(guī)格化和雙精度反規(guī)格化兩者。在SIMDFDU430的一個替換實施例中,可以分割和/或組合浮點反規(guī)格化器431、432、…438,來分別執(zhí)行單精度反規(guī)格化和/或雙精度反規(guī)格化。浮點反規(guī)格化器431、432、…438的實施例還可以包括尾數(shù)舍入電路,用以執(zhí)行并行的單精度和/或雙精度舍入和反規(guī)格化。浮點反規(guī)格化器431、432、…438的一些實施例還能夠在分組局部結(jié)果對的反規(guī)格化中使用恒定的非規(guī)格化指數(shù)值(例如-126或-1022)。SIMDFNU410的實施例可操作來產(chǎn)生具有規(guī)格化和/或非規(guī)格化成分浮點元素的分組操作數(shù)的偽內(nèi)部浮點表示。SIMDFAU400和SIMDFMU420的實施例可在規(guī)格化模式下操作,以產(chǎn)生具有規(guī)格化成分浮點元素的單一分組結(jié)果,并且可在數(shù)值異常處理模式下操作,以產(chǎn)生具有規(guī)格化和/或非規(guī)格化成分浮點元素的分組結(jié)果的兩個分組局部結(jié)果。在數(shù)值異常處理模式的一個實施例中,可以將階段一的分組局部結(jié)果與階段二的分組局部結(jié)果(同時地或者以任意時間順序分別地)存儲到寄存器文件的分開的存儲單元中,以構(gòu)成兩個分組局部結(jié)果。微代碼ROM344的實施例還可以包括用以向SIMDFAU400和SIMDFMU420指明它們是在數(shù)值異常處理模式的階段一中執(zhí)行還是在數(shù)值異常處理模式的階段二中執(zhí)行的微-op。SIMDFDU430的實施例可操作來接收具有規(guī)格化和/或非規(guī)格化成分浮點元素的分組結(jié)果的這兩個分組局部結(jié)果,并產(chǎn)生具有規(guī)格化和/或非規(guī)格化成分浮點元素的單一分組結(jié)果。圖5a示出了用于存儲分組浮點數(shù)的內(nèi)部表示的示例性存儲格式501和502。用一對單精度浮點數(shù)來圖示說明格式501和格式502,但會意識到格式501和格式502僅僅代表了典型的較寬分組浮點操作數(shù)(例如,代表了具有4個單精度元素或者2個雙精度元素的分組操作數(shù),或者代表了具有8個單精度元素或4個雙精度元素的分組操作數(shù))。格式501表示用于SIMD浮點運算的分組單精度目標(biāo)操作數(shù)的(在SIMD寄存器文件中,諸如在寄存器文件旁路網(wǎng)絡(luò)308中)一對分組局部結(jié)果的示例。格式501包括一對單精度元素,每一個單精度元素都包括39位第一元素包括一個符號位(S511)、IO個指數(shù)位(Ex519和Exp8512)、和28個尾數(shù)位(0515、一個明確位(explicitbit)J516、Mant23513和GRS517);第二元素包括一個符號位(S521)、10個指數(shù)位(Ex529和Exp8522)、和28個尾數(shù)位(O525、一個明確位J526、Mant23523和GRS527)。格式501包括一對標(biāo)志位IMDN514和524,用以分別標(biāo)識第一元素和/或第二元素是否是非規(guī)格化元素。在格式501的一個實施例中,這對單精度元素的成分存儲在兩個分組數(shù)據(jù)寄存器中第一分組數(shù)據(jù)寄存器包括該對標(biāo)志位IMDN514和524、符號位S521(例如位63)、指數(shù)位Exp8522(例如位62—55)、尾數(shù)位Mant23523(例如位54—32)、符號位S511(例如位31)、指數(shù)位Exp8512(例如位30—23)、尾數(shù)位Mant23513(例如位22—0);第二分組數(shù)據(jù)寄存器包括兩個最高有效尾數(shù)位0525和J526(例如位63和59)、指數(shù)位Ex529(例如位62—61)、三個最低有效尾數(shù)位GRS527(例如位42—40)、兩個最高有效尾數(shù)位0515和J516(例如位34-33)、指數(shù)位Ex519(例如位32一31)和三個最低有效尾數(shù)位GRS517(例如位6—4)。會意識到,分組元素的成分作為一對分組局部結(jié)果存儲在這兩個分組數(shù)據(jù)寄存器中的具體位置可以由設(shè)計者來選擇,以便有利于將分組元素的成分從這對分組局部結(jié)果復(fù)用到浮點運算單元(例如SIMDFAU400和/或用于反規(guī)格化的SIMDFDU430)的內(nèi)部浮點表示中。格式502表示用于SIMD浮點運算的分組源操作數(shù)的(在諸如FAU400的浮點運算單元中的)內(nèi)部浮點表示的示例。類似于格式501,格式502包括一對單精度元素的內(nèi)部表示,每一個單精度元素都包括39位第一元素包括一個符號位(S511)、10個指數(shù)位(Ex519和Exp8512)、和28個尾數(shù)位(0515、J516、Mant23513和GRS517);第二元素包括一個符號位(S521)、10個指數(shù)位(Ex529和Exp8522)、和28個尾數(shù)位(O525、J526、Mant23523和GRS527)。在格式502的一個實施例中,浮點運算單元的內(nèi)部浮點表示存儲分開的指數(shù)用于第一元素的Ex519和Exp8512(例如位9一0),和用于第二元素的Ex529和Exp8522(例如位9一0)。在格式502的這個實施例中,可以將這兩個元素的尾數(shù)存儲為分組尾數(shù)具有O515(例如位67)、J516(例如位66)、Mant23513(例如位65—43)和GRS517(例如位42—40)的第一尾數(shù);和具有0525(例如位31)、J526(例如位30)、Mant23523(例如位29—7)和GRS527(例如位6—4)的第二尾數(shù);每一個元素的最低有效位中都填充了0(例如位39—32和位3—0)。圖5b示出了用于存儲分組浮點數(shù)的內(nèi)部表示的示例性存儲格式503和504。用一個雙精度浮點數(shù)來圖示說明格式503和格式504,但會意識到格式503和格式504僅僅代表了典型的較寬分組浮點操作數(shù)(例如,代表了具有4個單精度元素或者2個雙精度元素的分組操作數(shù),或者代表了具有8個單精度元素或4個雙精度元素的分組操作數(shù))。格式503表示用于SIMD浮點運算的分組操作數(shù)的雙精度目標(biāo)操作數(shù)元素的(在SIMD寄存器文件中,諸如在寄存器文件旁路網(wǎng)絡(luò)308中)一對分組局部結(jié)果的示例。格式503包括包含71位或更多位的雙精度元素的一對分組局部結(jié)果,其包括一個符號位(S531)、13個或更多個指數(shù)位(Ex539和Expll532)、和57個尾數(shù)位(O535、一個明確位J536、Mant52533和GRS537)。格式503包括與每一個雙精度元素相關(guān)聯(lián)的標(biāo)志位IMDN534,用于標(biāo)識該元素是否是非規(guī)格化元素。會意識到,分組元素的成分作為一對分組局部結(jié)果存儲在這兩個分組數(shù)據(jù)寄存器中的具體位置可以由設(shè)計者來選擇,以便有利于將分組元素的成分從這對分組局部結(jié)果復(fù)用到浮點運算單元的內(nèi)部浮點表示中。格式504表示用于SIMD浮點運算的分組操作數(shù)的分組源操作數(shù)元素的(在諸如FAU400的浮點運算單元中的)內(nèi)部浮點表示的示例。類似于格式503,格式504包括包含71位或更多位的雙精度元素的內(nèi)部表示,其包括一個符號位(S531)、13個或更多個指數(shù)位(Ex539和Exp11532)、和57個尾數(shù)位(O535、J536、Mant52533和GRS537)。在格式504的一個實施例中,浮點運算單元的內(nèi)部浮點表示為每一個元素存儲分開的指數(shù)Ex539和Expl1532(例如位16—0)。在格式504的這個實施例中,分組元素的尾數(shù)可以存儲為分組尾數(shù),第一個尾數(shù)具有0535(例如位67)、J536(例如位66)、Mant52533(例如位65—14)和GRS537(例如位14_11),每一個尾數(shù)的最低有效位中都填充了0(例如位10—0)。會意識到,使用內(nèi)部存儲格式501—504,可以將分組浮點數(shù)據(jù)存儲在固定大小的寄存器中,同時可以在不必轉(zhuǎn)換為標(biāo)量運算并且僅需要執(zhí)行少量額外的微運算的情況下,明晰地處理SIMD浮點異常。還會意識到,格式501、502、503和/或504的實施例中,可以隱含地表示一些位(例如0525、J526、0535和/或J536)。圖6示出了處理601的一個實施例的流程圖,處理601用于處理SIMD浮點加法器中的特定數(shù)值異常。由處理塊來執(zhí)行處理601及本文公開的其他處理,其中處理塊可以包括專用硬件,或者可以由通用機器或由專用機器或由二者的組合執(zhí)行的軟件或固件操作代碼。處理601的一些實施例及本文公開的其他處理體現(xiàn)為機器可執(zhí)行指令或狀態(tài)轉(zhuǎn)換。指令或狀態(tài)轉(zhuǎn)換可以用于使得以該指令或狀態(tài)轉(zhuǎn)換編程的通用處理器或?qū)S锰幚砥鲌?zhí)行本發(fā)明的各個步驟??梢宰鳛橛嬎銠C程序產(chǎn)品或軟件或微代碼補丁(patch)來提供本發(fā)明,其可以包括在其上存儲了指令或狀態(tài)轉(zhuǎn)換的機器或計算機可讀介質(zhì),上述指令或狀態(tài)轉(zhuǎn)換可以用于編程計算機(或其他電子設(shè)備)來執(zhí)行根據(jù)本發(fā)明的處理。這種軟件可以存儲在系統(tǒng)的存儲器中或者存儲在網(wǎng)絡(luò)服務(wù)器上。類似地,可以經(jīng)由網(wǎng)絡(luò)或借助于其它計算機可讀介質(zhì)來分發(fā)所述代碼。因此,機器可讀介質(zhì)可以包括用于以機器(例如計算機)可讀的形式存儲或傳輸信息的任何機制,但不限于軟盤、光盤、緊致盤只讀存儲器(CD-ROM)和磁光盤、只讀存儲器(ROM)、隨機存取存儲器(RAM)、可擦除可編程只讀存儲器(EPROM)、電可擦除可編程只讀存儲器(EEPROM)、磁卡或光卡、閃存存儲器、通過互聯(lián)網(wǎng)的傳輸、電、光、聲或其它形式的傳播信號。在處理塊611開始,在SIMDFAU的浮點加法器電路之一中接收用于SIMD浮點加法運算的分組操作數(shù)中的非規(guī)格化操作數(shù)元素。在處理塊612,確定用于該SIMD浮點加法運算的第二分組操作數(shù)中的相應(yīng)的第二操作數(shù)元素是否也是非規(guī)格化的。在一個實施例中,可以由非規(guī)格化檢測電路(例如電路441-448中的一個)來檢測非規(guī)格化操作數(shù)元素和可能的相應(yīng)的第二操作數(shù)元素。如果這個相應(yīng)的第二操作數(shù)元素不是非規(guī)格化的,那么就將該非規(guī)格化操作數(shù)元素和相應(yīng)的第二操作數(shù)元素輸入到處理塊613中的對齊電路中,在對齊電路中,按照未偏移指數(shù)差,將非規(guī)格化操作數(shù)元素的尾數(shù)與相應(yīng)的第二操作數(shù)元素的尾數(shù)對齊。否則,如果相應(yīng)的第二操作數(shù)元素也是非規(guī)格化的,那么該非規(guī)格化操作數(shù)元素的尾數(shù)已經(jīng)與相應(yīng)的第二操作數(shù)元素的尾數(shù)對齊,從而處理直接前進到處理塊614,在處理塊614中,由浮點加法器電路將這兩個尾數(shù)相加。在處理塊615,確定該加法的結(jié)果是否可以表示為該SIMD浮點加法運算的分組結(jié)果中的規(guī)格化浮點結(jié)果元素。如果是,就在處理塊616中對所得到的和數(shù)執(zhí)行規(guī)格化。否則,就僅在處理塊617中簡單地對所得到的和數(shù)進行舍入,并在處理塊618中進行重新規(guī)格化(例如如果O等于1,就右移1位),并且當(dāng)在處理塊619中存儲該SIMD浮點加法運算的分組結(jié)果時,可以將非規(guī)格化結(jié)果存儲為分組結(jié)果中的元素。會意識到,如果在處理塊615確定所得到的和數(shù)不能表示為規(guī)格化浮點結(jié)果元素,那么存儲該SIMD浮點加法運算的分組結(jié)果的結(jié)果存儲電路還可以存儲一個標(biāo)志,該標(biāo)志將所得到的和數(shù)標(biāo)識為該分組結(jié)果中的非規(guī)格化結(jié)果元素。會意識到,處理601的實施例可以在無需(例如來自微代碼的)額外輔助的情況下,處理SIMD執(zhí)行單元(例如SIMD浮點執(zhí)行單元316)中SIMD浮點運算中的諸如非規(guī)格化數(shù)之類的常見異常輸入。圖7示出了處理701的一個實施例的流程圖,處理701用于處理SIMD浮點乘法器中某些常見(屏蔽的)異常。在處理塊711,在SIMDFMU的浮點乘法器電路之一中接收SIMD浮點乘法運算的分組操作數(shù)中的異常操作數(shù)元素。在處理塊712,比較相應(yīng)操作數(shù)元素的指數(shù)。在處理塊7B,基于這個比較,做出對于異常操作數(shù)元素的乘法的一些常見結(jié)果的預(yù)測。在處理塊714,如果結(jié)果被預(yù)測為0,處理就前進到處理塊717,在處理塊717中存儲預(yù)測值0作為結(jié)果。否則,處理就繼續(xù)在處理塊715中進行,在處理塊715中,如果結(jié)果被預(yù)測為是最小可表示的非規(guī)格化數(shù),則處理就前進到處理塊717,在處理塊717中存儲所預(yù)測的最小可表示的非規(guī)格化值作為結(jié)果。否則,處理就可選地在處理塊716中進行,在處理塊716中,如果結(jié)果被預(yù)測為是無窮大,處理就前進到處理塊717,在處理塊717中存儲所預(yù)測的無窮大值作為結(jié)果。否則,在處理塊718,對接收到的操作數(shù)執(zhí)行乘法,并根據(jù)本文所述的可替換技術(shù)(例如在處理801中的)來處理出現(xiàn)的任何異常。會意識到,處理701的實施例可以在無需額外的輔助(例如來自微代碼的)的情況下,預(yù)測并處理SIMD執(zhí)行單元(例如SIMD浮點執(zhí)行單元316)中的SIMD浮點運算的常見異常結(jié)果。在這種經(jīng)常出現(xiàn)的情況中,基本上可以消除或減小用于處理異常情況的損耗??商鎿Q地,在剩余的情況中,可以在不轉(zhuǎn)換為標(biāo)量運算并且僅需要執(zhí)行少量額外的微代碼的情況下,可以使用這些技術(shù)來處理SIMD浮點異常。圖8示出了處理801的可替換實施例的流程圖,處理801用于處理執(zhí)行SIMD浮點指令的處理器中非規(guī)格化浮點異常。在處理塊811,為SIMD浮點運算識別數(shù)值異常。響應(yīng)于該數(shù)值異常,在必要時,在處理塊812啟動一個或多個可選的規(guī)格化微運算。對于處理801的一個實施例,如果要由SIMD浮點乘法器至少部分地執(zhí)行SIMD浮點運算(例如,乘法、除法、平方根、或從單精度轉(zhuǎn)換為雙精度),就啟動規(guī)格化微運算。作為規(guī)格化微運算的結(jié)果,可以將分組操作數(shù)存儲為該SIMD浮點運算的包含非規(guī)格化數(shù)的原始分組操作數(shù)的規(guī)格化的偽內(nèi)部浮點表示。對于處理801的一個實施例,如果要由SIMD浮點加法器執(zhí)行SIMD浮點運算(例如,加法/減法、或從雙精度轉(zhuǎn)換為單精度),就無需該規(guī)格化微運算,因為SIMD浮點加法器能夠接受包含非規(guī)格化數(shù)的操作數(shù)作為輸入。在處理塊813,啟動第一SIMD微運算,用以為SIMD浮點運算產(chǎn)生第一分組局部結(jié)果,并啟動第二SIMD微運算,用以為SIMD浮點運算產(chǎn)生第二分組局部結(jié)果。會意識到,在處理801的一些實施例中,可以以任意順序執(zhí)行第一SIMD微運算和第二SIMD微運算,只要它們產(chǎn)生為SIMD浮點運算的分組結(jié)果而存儲的一對分組局部結(jié)果。在處理塊814,啟動SIMD反規(guī)格化微運算,用以合并這對分組局部結(jié)果,并且如果需要,則對所合并的分組局部結(jié)果中的任何元素執(zhí)行反規(guī)格化,以便產(chǎn)生具有相應(yīng)非規(guī)格化元素的分組結(jié)果。對于SIMDFAU400的一些實施例,合并這對分組局部結(jié)果還可以包括在數(shù)值異常處理模式的階段一中規(guī)格化分組局部結(jié)果。在處理塊815,計算異常標(biāo)志(例如IMDN514和524或534),以便標(biāo)識分組結(jié)果中的非規(guī)格化元素。在處理塊816,作為結(jié)果,將這些異常標(biāo)志與該SIMD浮點運算的分組結(jié)果一起進行存儲。會意識到,處理801的實施例提供了可以用于處理SIMD浮點異常的有效技術(shù),其中所述SIMD浮點異常產(chǎn)生了非規(guī)格化數(shù)并需要重新執(zhí)行??梢栽诓晦D(zhuǎn)換為標(biāo)量運算并且僅需要執(zhí)行少量額外的微運算的情況下,透明地并行處理這種異常。以上描述旨在說明本發(fā)明的優(yōu)選實施例。依據(jù)以上的論述,明顯的是,在快速增長并且不易預(yù)見到進一步發(fā)展的這個
技術(shù)領(lǐng)域
中,本領(lǐng)域技術(shù)人員在不背離在所附權(quán)利要求及其等價物的范圍內(nèi)的本發(fā)明的原理的情況下,可以在配置和細節(jié)中修改本發(fā)明。2權(quán)利要求1、一種用于處理執(zhí)行單指令多數(shù)據(jù)(SIMD)指令的處理器中的浮點異常的方法,所述方法包括識別SIMD浮點運算的數(shù)值異常;啟動第一SIMD微運算,以便為所述SIMD浮點運算產(chǎn)生第一分組局部結(jié)果;啟動第二SIMD微運算,以便為所述SIMD浮點運算產(chǎn)生第二分組局部結(jié)果;啟動SIMD反規(guī)格化微運算,以便合并所述第一分組局部結(jié)果和所述第二分組局部結(jié)果,并且對所合并的第一和第二分組局部結(jié)果中的第一元素執(zhí)行反規(guī)格化,以便產(chǎn)生具有非規(guī)格化元素的第三分組結(jié)果;為所述SIMD浮點運算存儲所述第三分組結(jié)果;以及設(shè)定用于標(biāo)識在所述第一分組局部結(jié)果中的、所述第三分組結(jié)果的所述非規(guī)格化元素的標(biāo)志。2、如權(quán)利要求1所述的方法,還包括為所述SIMD浮點運算啟動對于所述第一分組局部結(jié)果的SIMD規(guī)格化微運算。3、如權(quán)利要求l所述的方法,其中,用于為所述SIMD浮點運算產(chǎn)生所述第一分組局部結(jié)果和所述第二分組局部結(jié)果的一組一個或多個分組源操作數(shù)以其原始表示寬度進行存儲。4、如權(quán)利要求1所述的方法,還包括如果要由SIMD浮點乘法器至少部分地執(zhí)行所述SIMD浮點運算,就啟動SIMD規(guī)格化微運算。5、如權(quán)利要求3所述的方法,其中,所述SIMD規(guī)格化微運算將第二元素規(guī)格化為所述SIMD浮點運算的分組操作數(shù)的偽內(nèi)部浮點表示,所述第二元素對應(yīng)于所述SIMD浮點運算的所述分組操作數(shù)中的非規(guī)格化元素。6、如權(quán)利要求5所述的方法,其中,將一標(biāo)志與所述SIMD浮點運算的分組操作數(shù)的所述偽內(nèi)部浮點表示一起進行存儲,該標(biāo)志用于將所述第二元素標(biāo)識為對應(yīng)于所述非規(guī)格化元素。7、一種制造產(chǎn)品,包括機器可訪問介質(zhì),包括用于為SIMD浮點運算處理數(shù)值異常的數(shù)據(jù)和指令,以使得所述數(shù)據(jù)和指令當(dāng)由機器訪問時,使得所述機器啟動第一SIMD微運算,以便為所述SIMD浮點運算產(chǎn)生第一分組局部結(jié)果;啟動第二SIMD微運算,以便為所述SIMD浮點運算產(chǎn)生第二分組局部結(jié)果;啟動SIMD反規(guī)格化微運算,以便合并所述第一分組局部結(jié)果和所述第二分組局部結(jié)果,并且對所合并的第一和第二分組局部結(jié)果中的第一元素執(zhí)行反規(guī)格化,以便產(chǎn)生具有非規(guī)格化元素的第三分組結(jié)果;為所述SIMD浮點運算存儲所述第三分組結(jié)果;以及設(shè)定用于標(biāo)識在所述第一分組局部結(jié)果中的、所述第三分組結(jié)果的所述非規(guī)格化元素的標(biāo)志。8、如權(quán)利要求7所述的制造產(chǎn)品,所述機器可訪問介質(zhì)包括數(shù)據(jù)和指令,所述數(shù)據(jù)和指令當(dāng)由機器訪問時,使得所述機器為所述SIMD浮點運算啟動對于所述第一分組局部結(jié)果的SIMD規(guī)格化微運算。9、如權(quán)利要求7所述的制造產(chǎn)品,其中,用于為所述SIMD浮點運算產(chǎn)生所述第一分組局部結(jié)果和所述第二分組局部結(jié)果的一組一個或多個分組源操作數(shù)以其原始表示寬度進行存儲。10、如權(quán)利要求7所述的制造產(chǎn)品,所述機器可訪問介質(zhì)包括數(shù)據(jù)和指令,所述數(shù)據(jù)和指令當(dāng)由所述機器訪問時,^^得所述機器如果要由SIMD浮點乘法器至少部分地執(zhí)行所述SIMD浮點運算,就啟動SIMD規(guī)格化微運算。11、如權(quán)利要求10所述的制造產(chǎn)品,其中,所述SIMD規(guī)格化微運算將第二元素規(guī)格化為所述SIMD浮點運算的分組操作數(shù)的偽內(nèi)部浮點表示,所述第二元素對應(yīng)于所述SIMD浮點運算的所述分組操作數(shù)中的非規(guī)格化元素。12、如權(quán)利要求ll所述的制造產(chǎn)品,其中,將一標(biāo)志與所述SIMD浮點運算的分組操作數(shù)的所述偽內(nèi)部浮點表示一起進行存儲,該標(biāo)志用于將所述第二元素標(biāo)識為對應(yīng)于所述非規(guī)格化元素。13、一種用于執(zhí)行SIMD浮點加法運算的裝置,所述裝置包括第一非規(guī)格化檢測電路,用以檢測用于所述SIMD浮點加法運算的第一分組操作數(shù)中的非規(guī)格化的第一元素;第二非規(guī)格化檢測電路,用以檢測用于所述SIMD浮點加法運算的第二分組操作數(shù)中的相應(yīng)的第二元素是否也是非規(guī)格化的;對齊電路,用以如果所述相應(yīng)的第二元素不是非規(guī)格化的,則按照未偏移指數(shù)差,將所述非規(guī)格化的第一元素的尾數(shù)與所述相應(yīng)的第二元素的尾數(shù)對齊;加法器電路,用以將所述第一元素的尾數(shù)與所述第二元素的尾數(shù)相加,并且如果確定所得到的和數(shù)能夠表示為所述SIMD浮點加法運算的分組結(jié)果中的規(guī)格化結(jié)果元素,則規(guī)格化所得到的和數(shù);以及結(jié)果存儲電路,用以存儲所述SIMD浮點加法運算的所述分組結(jié)果,并且如果確定所得到的和數(shù)不能表示為所述SIMD浮點加法運算的所述分組結(jié)果中的規(guī)格化結(jié)果元素,則存儲用于將所述相加的結(jié)果標(biāo)識為所述分組結(jié)果中的非規(guī)格化結(jié)果元素的標(biāo)志。14、如權(quán)利要求13所述的裝置,具有數(shù)值異常處理模式,其中,為所述SIMD浮點加法運算存儲第一分組局部結(jié)果和第二分組局部結(jié)果。15、如權(quán)利要求13所述的裝置,包括規(guī)格化電路,用以對為所述SIMD浮點加法運算所存儲的所述第一分組局部結(jié)果進行規(guī)格化。16、一種處理器,包括寄存器文件,用以為SIMD浮點運算存儲多個分組浮點操作數(shù)和多個分組浮點結(jié)果;異常產(chǎn)生電路,用以識別第一SIMD浮點運算的數(shù)值異常;微代碼異常處理機,響應(yīng)于所述數(shù)值異常,啟動第一SIMD微運算,以便為所述SIMD浮點運算產(chǎn)生第一分組結(jié)果;所述微代碼異常處理機,還響應(yīng)于所述數(shù)值異常,啟動第二SIMD微運算,以便為所述SIMD浮點運算產(chǎn)生第二分組結(jié)果;所述微代碼異常處理機,還響應(yīng)于所述數(shù)值異常,啟動SIMD反規(guī)格化微運算,以便合并所述第一分組結(jié)果和所述第二分組結(jié)果,對所合并的第一和第二分組結(jié)果中的元素執(zhí)行反規(guī)格化,產(chǎn)生具有該被反規(guī)格化的元素的第三分組結(jié)果,為所述SIMD浮點運算存儲所述第三分組結(jié)果,以及設(shè)定用于標(biāo)識在所述第一分組結(jié)果中的、所述第三分組結(jié)果的該被反規(guī)格化的第一元素的標(biāo)志。17、如權(quán)利要求16所述的處理器,其中,所述第一分組結(jié)果和所述第二分組結(jié)果包括一對分組局部結(jié)果,所述分組局部結(jié)果具有加法指數(shù)位和尾數(shù)位,所述加法指數(shù)位和尾數(shù)位支持產(chǎn)生或使用具有非規(guī)格化元素的分組數(shù)據(jù)的SIMD浮點運算。18、如權(quán)利要求16所述的處理器,還包括SIMD浮點加法單元,用以檢測用于SIMD浮點加法運算的第一分組操作數(shù)中的非規(guī)格化的第一元素;檢測用于所述SIMD浮點加法運算的第二分組操作數(shù)中的相應(yīng)的第二元素是否也是非規(guī)格化的;如果所述相應(yīng)的第二元素不是非規(guī)格化的,則按照未偏移指數(shù)差,將所述非規(guī)格化的第一元素的尾數(shù)與所述相應(yīng)第二元素的尾數(shù)對齊;將所述第一元素的尾數(shù)與所述第二元素的尾數(shù)相加,并且如果確定所述相加的結(jié)果能夠表示所述SIMD浮點加法運算的分組結(jié)果中的規(guī)格化結(jié)果元素,則規(guī)格化所述相加的結(jié)果;存儲所述SMD浮點加法運算的所述分組結(jié)果;以及如果確定所述相加的結(jié)果能夠表示規(guī)格化結(jié)果元素,則設(shè)定用于將所述相加的結(jié)果標(biāo)識為所述分組結(jié)果中的規(guī)格化結(jié)果元素的標(biāo)志。19、如權(quán)利要求16所述的處理器,所述微代碼異常處理機還響應(yīng)于所述數(shù)值異常,在要由SIMD浮點乘法器至少部分地執(zhí)行所述SIMD浮點運算的情況下,啟動SIMD規(guī)格化微運算。20、如權(quán)利要求19所述的處理器,其中,所述SIMD規(guī)格化微運算的所述分組結(jié)果以其原始表示寬度進行存儲。21、如權(quán)利要求19所述的處理器,其中,所述SIMD規(guī)格化微運算將第一元素規(guī)格化為所述SIMD浮點運算的分組操作數(shù)的偽內(nèi)部浮點表示,所述第一元素對應(yīng)于所述SIMD浮點運算的所述分組操作數(shù)中的非規(guī)格化元素。22、如權(quán)利要求21所述的處理器,其中,將一標(biāo)志與所述SIMD浮點運算的所述分組操作數(shù)的所述偽內(nèi)部浮點表示一起進行存儲,該標(biāo)志用于將所述第一元素標(biāo)識為對應(yīng)于所述非規(guī)格化元素。全文摘要公開了用于處理執(zhí)行單指令多數(shù)據(jù)(SIMD)指令的處理器中的浮點異常的方法和裝置。在一個實施例中,為SIMD浮點運算識別數(shù)值異常,啟動SIMD微運算,以便為所述SIMD浮點運算產(chǎn)生分組結(jié)果的兩個分組局部結(jié)果。啟動SIMD反規(guī)格化微運算,以便合并這兩個分組局部結(jié)果,并對所合并的分組局部結(jié)果中的一個或多個元素執(zhí)行反規(guī)格化,以便為SIMD浮點運算產(chǎn)生具有一個或多個非規(guī)格化元素的分組結(jié)果。設(shè)定標(biāo)志,并將其與分組局部結(jié)果一起進行存儲,用以標(biāo)識非規(guī)格元素。在一個實施例中,在SIMD浮點運算使用乘法時,啟動SIMD規(guī)格化微運算,以便在該SIMD浮點運算之前,產(chǎn)生規(guī)格化的偽內(nèi)部浮點表示。文檔編號G06F15/80GK101620589SQ20091013964公開日2010年1月6日申請日期2009年6月30日優(yōu)先權(quán)日2008年6月30日發(fā)明者A·格拉德斯坦,G·普里布什,G·貝爾,S·芬克爾斯坦,T·龐斯,Z·斯佩貝爾申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1