用于提供向量線性內(nèi)插功能的指令和邏輯的制作方法
【專利摘要】指令和邏輯提供向量線性內(nèi)插功能。在一些實施例中,響應(yīng)于一指令,該指令指定來自一組向量寄存器的第一操作數(shù)、每個向量元素的大小、向量元素中的要計算線性內(nèi)插的部分、來自一組向量寄存器的第二操作數(shù)、以及第三操作數(shù),執(zhí)行單元分別從第一、第二和第三操作數(shù)中的相應(yīng)數(shù)據(jù)字段讀取具有向量元素的大小的第一值、第二值和第三值,并將內(nèi)插值計算為第一值乘以第二值的積減去第二值乘以第三值的積再加上第三值。
【專利說明】用于提供向量線性內(nèi)插功能的指令和邏輯
【技術(shù)領(lǐng)域】
[0001]本公開涉及處理邏輯、微處理器以及相關(guān)聯(lián)的指令集體系結(jié)構(gòu)的領(lǐng)域,該指令集體系結(jié)構(gòu)在被處理器或其他處理邏輯所執(zhí)行時運(yùn)行邏輯、數(shù)學(xué)或其他功能性操作。具體而言,本公開涉及用于提供向量線性內(nèi)插功能的指令和邏輯。
【背景技術(shù)】
[0002]目前的諸多處理器通常包括用于提供計算密集型操作但提供高度數(shù)據(jù)并行性的指令,這些指令可通過使用多種數(shù)據(jù)存儲設(shè)備的高效實現(xiàn)來使用,這些數(shù)據(jù)存儲設(shè)備諸如:單指令多數(shù)據(jù)(SIMD)向量寄存器。
[0003]在過去,一些處理器(尤其是圖形處理器)已經(jīng)提供了線性內(nèi)插(通常稱為LERP)原語。線性內(nèi)插是數(shù)字圖形和音頻處理中常用的操作。它通常被定義在兩個點(diǎn)a和b之間并且利用0(零)與(I)之間的分?jǐn)?shù)定義為:a+wx(b-a)。如果線性內(nèi)插根據(jù)其如何定義來實現(xiàn),即先進(jìn)行一個減法操作,然后進(jìn)行一個乘法操作,再進(jìn)行一個加法操作。則該第一線性內(nèi)插操作具有三個連續(xù)的相關(guān)操作。替代地,該線性內(nèi)插操作通常被定義為:aX(l-W)+WXb。因此,該第二線性內(nèi)插操作也具有三個連續(xù)的相關(guān)操作,并且需要又一次乘法。這樣的實現(xiàn)方式會限制例如來自寬或大寬度向量體系結(jié)構(gòu)的原本預(yù)期的性能優(yōu)勢。
[0004]到目前為止,尚未充分探索針對這樣的性能受限問題和瓶頸的潛在解決方案。
【專利附圖】
【附圖說明】
[0005]在附圖的各圖中通過示例而非限制地示出本發(fā)明。
[0006]圖1A是執(zhí)行用于提供向量線性內(nèi)插功能的指令的系統(tǒng)的一個實施例的框圖。
[0007]圖1B是執(zhí)行用于提供向量線性內(nèi)插功能的指令的系統(tǒng)的另一實施例的框圖。
[0008]圖1C是執(zhí)行用于提供向量線性內(nèi)插功能的指令的系統(tǒng)的另一實施例的框圖。
[0009]圖2是執(zhí)行用于提供向量線性內(nèi)插功能的指令的處理器的一個實施例的框圖。
[0010]圖3A示出根據(jù)一個實施例的打包數(shù)據(jù)類型。
[0011]圖3B示出根據(jù)一個實施例的打包數(shù)據(jù)類型。
[0012]圖3C示出根據(jù)一個實施例的打包數(shù)據(jù)類型。
[0013]圖3D示出根據(jù)一個實施例的用于提供向量線性內(nèi)插功能的指令編碼。
[0014]圖3E示出根據(jù)另一實施例的用于提供向量線性內(nèi)插功能的指令編碼。
[0015]圖3F示出根據(jù)另一實施例的用于提供向量線性內(nèi)插功能的指令編碼。
[0016]圖3G示出根據(jù)另一實施例的用于提供向量線性內(nèi)插功能的指令編碼。
[0017]圖3H示出根據(jù)另一實施例的用于提供向量線性內(nèi)插功能的指令編碼。
[0018]圖4A示出用于執(zhí)行提供向量線性內(nèi)插功能的指令的處理器微體系結(jié)構(gòu)的一個實施例的要素。
[0019]圖4B示出用于執(zhí)行提供向量線性內(nèi)插功能的指令的處理器微體系結(jié)構(gòu)的另一實施例的要素。[0020]圖5是用于執(zhí)行提供向量線性內(nèi)插功能的指令的處理器的一個實施例的框圖。
[0021]圖6是用于執(zhí)行提供向量線性內(nèi)插功能的指令的計算機(jī)系統(tǒng)的一個實施例的框圖。
[0022]圖7是用于執(zhí)行提供向量線性內(nèi)插功能的指令的計算機(jī)系統(tǒng)的另一實施例的框圖。
[0023]圖8是用于執(zhí)行提供向量線性內(nèi)插功能的指令的計算機(jī)系統(tǒng)的另一實施例的框圖。
[0024]圖9是用于執(zhí)行提供向量線性內(nèi)插功能的指令的芯片上系統(tǒng)的一個實施例的框圖。
[0025]圖10是用于執(zhí)行提供向量線性內(nèi)插功能的指令的處理器的實施例的框圖。
[0026]圖11是提供向量線性內(nèi)插功能的IP核開發(fā)系統(tǒng)的一個實施例的框圖。
[0027]圖12示出提供向量線性內(nèi)插功能的體系結(jié)構(gòu)仿真系統(tǒng)的一個實施例。
[0028]圖13示出用于轉(zhuǎn)換提供向量線性內(nèi)插功能的指令的系統(tǒng)的一個實施例。
[0029]圖14示出用于提供向量線性內(nèi)插功能的裝置的一個實施例。
[0030]圖15示出用于提供向量線性內(nèi)插功能的裝置的替代實施例。
[0031]圖16示出用于提供向量線性內(nèi)插功能的過程的一個實施例的流程圖。
[0032]圖17示出用于提供向量線性內(nèi)插功能的過程的替代實施例的流程圖。
[0033]圖18示出用于提供向量線性內(nèi)插功能的過程的另一替代實施例的流程圖。
【具體實施方式】
[0034]以下描述公開了用于提供在處理器、計算機(jī)系統(tǒng)或其他處理裝置的內(nèi)部或與處理器、計算機(jī)系統(tǒng)或其他處理裝置相關(guān)聯(lián)的向量線性內(nèi)插功能的指令和處理邏輯。
[0035]指令和邏輯提供向量線性內(nèi)插功能。在一些實施例中,響應(yīng)于一指令,該指令指定來自一組向量寄存器的第一操作數(shù)、每個向量元素的大小、向量元素中的要進(jìn)行線性內(nèi)插計算的部分、來自一組向量寄存器的第二操作數(shù)、以及第三操作數(shù),一執(zhí)行單元分別從第一、第二和第三操作數(shù)中的相應(yīng)數(shù)據(jù)字段讀取具有向量元素的大小的第一值、第二值和第三值,并將內(nèi)插值計算為第一值乘以第二值的積減去第二值乘以第三值的積再加上第三值。
[0036]將理解,在支持并行乘法的實現(xiàn)方式中,可執(zhí)行兩個乘法而無需依賴于另一操作。此外,在支持并行加法和/或減法的實現(xiàn)中,可僅依賴于乘法操作來執(zhí)行加法和減法二者。但是,在支持與乘法運(yùn)算的部分乘積進(jìn)行求和運(yùn)算并行的加法和/或減法的實現(xiàn)中,可在不依賴于任何其他操作的情況下并行地執(zhí)行整個線性內(nèi)插操作。因此,可為線性內(nèi)插操作提供與簡單乘法操作基本相同的等待時間。
[0037]在以下描述中,陳述了諸如處理邏輯、處理器類型、微體系結(jié)構(gòu)狀況、事件、啟用機(jī)制等多種特定細(xì)節(jié),以提供對本發(fā)明實施例的更透徹理解。然而,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)領(lǐng)會,沒有這些具體細(xì)節(jié)也可實踐本發(fā)明。此外,沒有詳細(xì)示出一些公知的結(jié)構(gòu)、電路等等,以避免不必要地模糊本發(fā)明的實施例。
[0038]雖然參照處理器來描述下述的諸個實施例,但其他實施例也適用于其他類型的集成電路和邏輯設(shè)備。本發(fā)明的實施例的類似技術(shù)和教導(dǎo)可應(yīng)用于其它類型的電路或半導(dǎo)體器件,這些其它類型的電路或半導(dǎo)體器件也可受益于更高的流水線吞吐量和提高的性能。本發(fā)明的諸個實施例的教導(dǎo)適用于執(zhí)行數(shù)據(jù)操縱的任何處理器或機(jī)器。然而,本發(fā)明不限于執(zhí)行512位、256位、128位、64位、32位、或16位數(shù)據(jù)運(yùn)算的處理器或機(jī)器,并可適用于執(zhí)行數(shù)據(jù)操縱或管理的任何處理器和機(jī)器。此外,下述描述提供了示例,并且附圖出于示意性目的示出了多個示例。然而,這些示例不應(yīng)該被理解為具有限制性目的,因為它們僅僅旨在提供本發(fā)明的諸個實施例的示例,而并非對本發(fā)明的實施例的所有可能實現(xiàn)方式進(jìn)行窮舉。
[0039]雖然下述的示例描述了在執(zhí)行單元和邏輯電路情況下的指令處理和分配,但本發(fā)明的其他實施例也可通過存儲在機(jī)器可讀有形介質(zhì)上的數(shù)據(jù)或指令來完成,這些數(shù)據(jù)或指令在被機(jī)器執(zhí)行時使得機(jī)器執(zhí)行與本發(fā)明至少一個實施例相一致的功能。在一個實施例中,與本發(fā)明的實施例相關(guān)聯(lián)的功能被具體化在機(jī)器可執(zhí)行指令中。這些指令可用來使通過這些指令編程的通用處理器或?qū)S锰幚砥鲌?zhí)行本發(fā)明的步驟。本發(fā)明的諸個實施例也可以作為計算機(jī)程序產(chǎn)品或軟件來提供,該計算機(jī)程序產(chǎn)品或軟件可包括其上存儲有指令的機(jī)器或計算機(jī)可讀介質(zhì),這些指令可被用來對計算機(jī)(或其他電子設(shè)備)進(jìn)行編程來執(zhí)行根據(jù)本發(fā)明的實施例的一個或多個操作。另選地,本發(fā)明的諸個實施例的這些步驟可由包含用于執(zhí)行這些步驟的固定功能邏輯的專用硬件組件來執(zhí)行,或由經(jīng)編程的計算機(jī)組件以及固定功能硬件組件的任何組合來執(zhí)行。
[0040]可將用于對邏輯進(jìn)行編程以執(zhí)行本發(fā)明的諸個實施例的指令存儲在系統(tǒng)中的存儲器(諸如,DRAM、高速緩存、閃存、或其他存儲器)內(nèi)。進(jìn)一步,可經(jīng)由網(wǎng)絡(luò)或其他計算機(jī)可讀介質(zhì)來分發(fā)指令。因此,計算機(jī)可讀介質(zhì)可包括用于以機(jī)器(諸如,計算機(jī))可讀的格式存儲或發(fā)送信息的任何機(jī)制,但不限于:磁盤、光盤、致密盤只讀存儲器(CD-ROM)、磁光盤、只讀存儲器(ROM)、隨機(jī)存取存儲器(RAM)、可擦除可編程只讀存儲器(EPROM)、電可擦除可編程只讀存儲器(EEPROM)、磁卡或光卡、閃存、或在經(jīng)由互聯(lián)網(wǎng)通過電、光、聲、或其他形式的傳播信號(諸如,載波、紅外信號、數(shù)字信號等)發(fā)送信息中所用的有形機(jī)器可讀存儲器。因此,計算機(jī)可讀介質(zhì)包括用于存儲或發(fā)送機(jī)器(例如,計算機(jī))可讀形式的電子指令或信息的任何類型的有形機(jī)器可讀介質(zhì)。
[0041]設(shè)計會經(jīng)歷多個階段,從創(chuàng)新到模擬到制造。表示設(shè)計的數(shù)據(jù)可用多種方式來表示該設(shè)計。首先,如模擬中將有用的,可使用硬件描述語言或其他功能性描述語言來表示硬件。此外,具有邏輯和/或晶體管門電路的電路級模型可在設(shè)計流程的其他階段產(chǎn)生。此夕卜,大多數(shù)設(shè)計在某些階段都到達(dá)表示硬件模型中多種設(shè)備的物理配置的數(shù)據(jù)水平。在使用常規(guī)半導(dǎo)體制造技術(shù)的情況下,表示硬件模型的數(shù)據(jù)可以是在不同掩模層上對用于生成集成電路的掩模指示不同特征的存在與否的數(shù)據(jù)。在任何的設(shè)計表示中,數(shù)據(jù)可被存儲在任何形式的機(jī)器可讀介質(zhì)中。存儲器或磁/光存儲器(諸如,盤)可以是存儲信息的機(jī)器可讀介質(zhì),這些信息是經(jīng)由光學(xué)或電學(xué)波來發(fā)送的,這些光學(xué)或電學(xué)波被調(diào)制或以其他方式生成以傳送這些信息。當(dāng)發(fā)送指示或承載代碼或設(shè)計的電學(xué)載波時,執(zhí)行電信號的復(fù)制、緩沖或重傳情況時,制作一個新的副本。因此,通信提供商或網(wǎng)絡(luò)提供商會在有形機(jī)器可讀介質(zhì)上至少臨時地存儲具體化本發(fā)明的諸個實施例的技術(shù)的物品(諸如,編碼在載波中的信息)。
[0042]在現(xiàn)代處理器中,多個不同執(zhí)行單元用于處理和執(zhí)行多種代碼和指令。并不是所有指令都被同等地創(chuàng)建,因為其中有一些更快地被完成而另一些需要多個時鐘周期來完成。指令的吞吐量越快,則處理器的總體性能越好。因此,使大量指令盡可能快地執(zhí)行將會是有利的。然而,某些指令具有更大的復(fù)雜度,并需要更多的執(zhí)行時間和處理器資源。例如,存在浮點(diǎn)指令、加載/存儲操作、數(shù)據(jù)移動等等。
[0043]因為更多的計算機(jī)系統(tǒng)被用于互聯(lián)網(wǎng)、文本以及多媒體應(yīng)用,所以逐漸地引進(jìn)更多的處理器支持。在一個實施例中,指令集可與一個或多個計算機(jī)體系結(jié)構(gòu)相關(guān)聯(lián),一個或多個計算機(jī)體系結(jié)構(gòu)包括數(shù)據(jù)類型、指令、寄存器體系結(jié)構(gòu)、尋址模式、存儲器體系結(jié)構(gòu)、中斷和異常處理、外部輸入輸出(I/o)。
[0044]在一個實施例中,指令集體系結(jié)構(gòu)(ISA)可由一個或更多微體系結(jié)構(gòu)來實現(xiàn),微體系結(jié)構(gòu)包括用于實現(xiàn)一個或多個指令集的處理器邏輯和電路。相應(yīng)地,具有不同微體系結(jié)構(gòu)的諸個處理器可共享公共指令集的至少一部分。例如,丨NTELife奔騰四(Pentium4)處理器、丨ntel?酷睿(Core?)處理器、以及來自加利福尼亞州桑尼威爾(Sunnyvale)的超微半導(dǎo)體有限公司(Advanced Micro Devices, Inc.)的諸多處理器執(zhí)行幾乎相同版本的x86指令集(在更新的版本中加入了一些擴(kuò)展),但具有不同的內(nèi)部設(shè)計。類似地,由其他處理器開發(fā)公司(諸如,ARM控股有限公司、MIPS或它們的授權(quán)方或兼容方)所設(shè)計的諸多處理器可共享至少一部分公共指令集,但可包括不同的處理器設(shè)計。例如,ISA的相同寄存器體系結(jié)構(gòu)在不同的微體系結(jié)構(gòu)中可使用新的或公知的技術(shù)以不同方法來實現(xiàn),這些技術(shù)包括專用物理寄存器、使用寄存器重命名機(jī)制(諸如,使用寄存器別名表(RAT)、重排序緩沖器(R0B)、以及引退寄存器組)的一個或多個動態(tài)分配物理寄存器。在一個實施例中,寄存器可包括:可由軟件編程者尋址或不可尋址的一個或多個寄存器、寄存器體系結(jié)構(gòu)、寄存器組、或其他寄存器集合。
[0045]在一個實施例中,指令可包括一個或多個指令格式。在一個實施例中,指令格式可指示多個字段(位的數(shù)目、位的位置等)以特別指定將要被執(zhí)行的操作以及將要被執(zhí)行的操作的操作數(shù)。一些指令格式可進(jìn)一步被指令模板(或子格式)所細(xì)分定義。例如,給定指令格式的指令模板可被定義為具有指令格式字段的不同的子集,和/或被定義為具有不同解釋的給定字段。在一個實施例中,使用指令格式(并且,如果定義過,則以該指令格式的一個給定指令模板)來表示指令,并且該指令指定或指示操作以及該操作將操作的操作數(shù)。
[0046]科學(xué)應(yīng)用、金融應(yīng)用、自動向量化通用應(yīng)用、RMS(識別、挖掘和合成)應(yīng)用以及視覺和多媒體應(yīng)用(諸如,2D/3D圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻處理)可能需要對大量數(shù)據(jù)項執(zhí)行相同的操作。在一個實施例中,單指令多數(shù)據(jù)(SMD)指的是使得處理器在多個數(shù)據(jù)元素上執(zhí)行一操作的一種類型的指令。SMD技術(shù)可被用于處理器中,這些處理器將寄存器中的諸個位(bit)邏輯地劃分成多個固定大小或可變大小的數(shù)據(jù)元素,每個數(shù)據(jù)元素表示單獨(dú)的值。例如,在一個實施例中,64位寄存器中的諸個位可被組織為包含四個單獨(dú)的16位數(shù)據(jù)元素的源操作數(shù),每個數(shù)據(jù)元素表示單獨(dú)的16位值。該數(shù)據(jù)類型可被稱為“打包”數(shù)據(jù)類型或“向量”數(shù)據(jù)類型,并且該數(shù)據(jù)類型的操作數(shù)被稱為打包數(shù)據(jù)操作數(shù)或向量操作數(shù)。在一個實施例中,打包數(shù)據(jù)項或向量可以是存儲在單個寄存器中的打包數(shù)據(jù)元素的序列,并且打包數(shù)據(jù)操作數(shù)或向量操作數(shù)可以是SMD指令(或“打包數(shù)據(jù)指令”或“向量指令”)的源操作數(shù)或目的地操作數(shù)。在一個實施例中,SIMD指令指定了將要對兩個源向量操作數(shù)執(zhí)行的單個向量操作,以生成具有相同或不同大小的、具有相同或不同數(shù)量的數(shù)據(jù)元素的、具有相同或不同數(shù)據(jù)元素次序的目的地向量操作數(shù)(也被稱為結(jié)果向量操作數(shù))。
[0047]諸如由Intel?酷睿(Core?)處理器(具有包括x86、MMX?、流SMD擴(kuò)展(SSE)、SSE2、SSE3、SSE4.1、SSE4.2指令的指令集)、ARM處理器(諸如,ARM Cortex?處理器族,具有包括向量浮點(diǎn)(VFP)和/或NEON指令的指令集)、MIPS處理器(諸如,中國科學(xué)院計算機(jī)技術(shù)研究所(ICT)開發(fā)的龍芯處理器族)所使用的SMD技術(shù)之類的SMD技術(shù)在應(yīng)用性能上帶來了極大的提高(Core?和MMX?是加利福尼亞州圣克拉拉市的英特爾公司的注冊商標(biāo)或商標(biāo))。
[0048]在一個實施例中,目的地寄存器/數(shù)據(jù)和源寄存器/數(shù)據(jù)是表示對應(yīng)數(shù)據(jù)或操作的源和目的地的通用術(shù)語。在一些實施例中,它們可由寄存器、存儲器或具有與所示出的那些名稱或功能不同的名稱或功能的其他存儲區(qū)域所實現(xiàn)。例如,在一個實施例中,“DEST1”可以是臨時存儲寄存器或其他存儲區(qū)域,而“SRC1”和“SRC2”是第一和第二源存儲寄存器或其他存儲區(qū)域,等等。在其他實施例中,SRC和DEST存儲區(qū)域中的兩個或更多區(qū)域可對應(yīng)于相同存儲區(qū)域中的不同數(shù)據(jù)存儲元素(例如,SIMD寄存器)。在一個實施例中,例如通過將對第一和第二源數(shù)據(jù)執(zhí)行的操作的結(jié)果寫回至兩個源寄存器中作為目的地寄存器的那個寄存器,源寄存器中的一個也可以作為目的地寄存器。
[0049]圖1A是根據(jù)本發(fā)明的一個實施例的示例性計算機(jī)系統(tǒng)的框圖,具有包括執(zhí)行單元以執(zhí)行指令的處理器。根據(jù)本發(fā)明,諸如根據(jù)在此所描述的實施例,系統(tǒng)100包括諸如處理器102之類的組件,以采用包括邏輯的執(zhí)行單元來執(zhí)行算法以處理數(shù)據(jù)。系統(tǒng)100代表基于可從美國加利福尼亞州圣克拉拉市的英特爾公司獲得的PENT丨UMli II1、PENTIUMκ 4、XeontMtaniumu、XScaletm / 或 StrongARMtm 微處理器的處理系統(tǒng),不
過也可使用其它系統(tǒng)(包括具有其它微處理器的PC、工程工作站、機(jī)頂盒等)。在一個實施例中,樣本系統(tǒng)100可執(zhí)行可從美國華盛頓州雷蒙德市的微軟公司買到的WINDOWStm操作系統(tǒng)的一個版本,不過也可使用其它操作系統(tǒng)(例如UNIX和Linux)、嵌入式軟件、和/或圖形用戶界面。因此,本發(fā)明的各實施例不限于硬件和軟件的任何具體組合。
[0050]實施例不限于計算機(jī)系統(tǒng)。本發(fā)明的替換實施例可被用于其他設(shè)備,諸如手持式設(shè)備和嵌入式應(yīng)用。手持式設(shè)備的一些示例包括:蜂窩電話、互聯(lián)網(wǎng)協(xié)議設(shè)備、數(shù)碼相機(jī)、個人數(shù)字助理(PDA)、手持式PC。嵌入式應(yīng)用可包括:微控制器、數(shù)字信號處理器(DSP)、芯片上系統(tǒng)、網(wǎng)絡(luò)計算機(jī)(NetPC)、機(jī)頂盒、網(wǎng)絡(luò)中樞、廣域網(wǎng)(WAN)交換機(jī)、或可執(zhí)行參照至少一個實施例的一個或多個指令的任何其他系統(tǒng)。
[0051]圖1A是計算機(jī)系統(tǒng)100的框圖,計算機(jī)系統(tǒng)100被形成為具有處理器102,處理器102包括一個或多個執(zhí)行單元108以執(zhí)行算法,以執(zhí)行根據(jù)本發(fā)明的一個實施例的至少一個指令。參照單處理器桌面或服務(wù)器系統(tǒng)來描述了一個實施例,但替代實施例可被包括在多處理器系統(tǒng)中。系統(tǒng)100是“中樞”系統(tǒng)體系結(jié)構(gòu)的示例。計算機(jī)系統(tǒng)100包括處理器102以處理數(shù)據(jù)信號。處理器102可以是復(fù)雜指令集計算機(jī)(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、實現(xiàn)指令集組合的處理器或任意其它處理器設(shè)備(諸如數(shù)字信號處理器)。處理器102耦合至處理器總線110,處理器總線110可在處理器102和系統(tǒng)100內(nèi)的其他組件之間傳輸數(shù)據(jù)信號。系統(tǒng)100的諸個元素執(zhí)行本領(lǐng)域所熟知的常規(guī)功能。
[0052]在一個實施例中,處理器102包括第一級(LI)內(nèi)部高速緩存存儲器104。取決于體系結(jié)構(gòu),處理器102可具有單個內(nèi)部高速緩存或多級內(nèi)部高速緩存?;蛘?,在另一個實施例中,高速緩存存儲器可位于處理器102的外部。其他實施例也可包括內(nèi)部高速緩存和外部高速緩存的組合,這取決于特定實現(xiàn)和需求。寄存器組106可在多個寄存器(包括整數(shù)寄存器、浮點(diǎn)寄存器、狀態(tài)寄存器、指令指針寄存器)中存儲不同類型的數(shù)據(jù)。
[0053]執(zhí)行單元108 (包括執(zhí)行整數(shù)和浮點(diǎn)操作的邏輯)也位于處理器102中。處理器102還包括微代碼(ucode) R0M,其存儲用于特定宏指令的微代碼。對于一個實施例,執(zhí)行單元108包括處理打包指令集109的邏輯。通過將打包指令集109包括在通用處理器102的指令集內(nèi)并包括相關(guān)的電路以執(zhí)行這些指令,可使用通用處理器102中的打包數(shù)據(jù)來執(zhí)行許多多媒體應(yīng)用所使用的操作。因此,通過將處理器數(shù)據(jù)總線的全帶寬用于對打包數(shù)據(jù)進(jìn)行操作,許多多媒體應(yīng)用可獲得加速,并更為有效率地執(zhí)行。這能減少在處理器數(shù)據(jù)總線上傳輸更小數(shù)據(jù)單元以在一個時間對一個數(shù)據(jù)元素執(zhí)行一個或多個操作的需要。
[0054]執(zhí)行單元108的替換實施例也可被用于微控制器、嵌入式處理器、圖形設(shè)備、DSP以及其他類型的邏輯電路。系統(tǒng)100包括存儲器120。存儲器設(shè)備120可以是動態(tài)隨機(jī)存取存儲器(DRAM)設(shè)備、靜態(tài)隨機(jī)存取存儲器(SRAM)設(shè)備、閃存設(shè)備或其他存儲器設(shè)備。存儲器120可存儲可由處理器102執(zhí)行的指令和/或數(shù)據(jù),數(shù)據(jù)由數(shù)據(jù)信號表示。
[0055]系統(tǒng)邏輯芯片116耦合至處理器總線110和存儲器120。所示實施例中的系統(tǒng)邏輯芯片116是存儲器控制中樞(MCH)。處理器102可經(jīng)由處理器總線110向MCH 116通信。MCH 116提供至存儲器120的高帶寬存儲器路徑118,用于指令和數(shù)據(jù)存儲,以及用于存儲圖形命令、數(shù)據(jù)和紋理。MCH 116用于引導(dǎo)處理器102、存儲器120以及系統(tǒng)100內(nèi)的其他組件之間的數(shù)據(jù)信號,并在處理器總線110、存儲器120和系統(tǒng)1/0122之間橋接數(shù)據(jù)信號。在一些實施例中,系統(tǒng)邏輯芯片116可提供耦合至圖形控制器112的圖形端口。MCH 116通過存儲器接口 118耦合至存儲器120。圖形卡112通過加速圖形端口(AGP)互連114耦合至 MCH 116。
[0056]系統(tǒng)100使用專用中樞接口總線122將MCH 116耦合至I/O控制器中樞(ICH) 130。ICH130經(jīng)由局部I/O總線提供至一些I/O設(shè)備的直接連接。局部I/O總線是高速I/O總線,用于將外圍設(shè)備連接至存儲器120、芯片組以及處理器102。一些示例是音頻控制器、固件中樞(閃存BIOS) 128、無線收發(fā)機(jī)126、數(shù)據(jù)存儲器124、包括用戶輸入和鍵盤接口的傳統(tǒng)I/O控制器、串行擴(kuò)展端口(諸如通用串行總線USB)以及網(wǎng)絡(luò)控制器134。數(shù)據(jù)存儲設(shè)備124可以包括硬盤驅(qū)動器、軟盤驅(qū)動器、⑶-ROM設(shè)備、閃存設(shè)備、或其他大容量存儲設(shè)備。
[0057]對于系統(tǒng)的另一個實施例,根據(jù)一個實施例的指令可被用于芯片上系統(tǒng)。芯片上系統(tǒng)的一個實施例包括處理器和存儲器。用于這樣一個系統(tǒng)的存儲器是閃存存儲器。閃存存儲器可位于與處理器和其他系統(tǒng)組件相同的管芯上。此外,諸如存儲器控制器或圖形控制器之類的其他邏輯塊也可位于芯片上系統(tǒng)上。
[0058]圖1B示出數(shù)據(jù)處理系統(tǒng)140,數(shù)據(jù)處理系統(tǒng)140實現(xiàn)本發(fā)明的一個實施例的原理。本領(lǐng)域的技術(shù)人員將容易理解,在此描述的諸個實施例可用于替代處理系統(tǒng),而不背離本發(fā)明的實施例的范圍。[0059]計算機(jī)系統(tǒng)140包括處理核159,處理核159能執(zhí)行根據(jù)一個實施例的至少一個指令。對于一個實施例,處理核159表示任何類型的體系結(jié)構(gòu)的處理單元,包括但不限于:CISC、RISC或VLIW類型體系結(jié)構(gòu)。處理核159也可適于以一種或多種處理技術(shù)來制造,并且通過充分詳細(xì)地表示在機(jī)器可讀介質(zhì)上可以便于其制造。
[0060]處理核159包括執(zhí)行單兀142、一組寄存器組145以及解碼器144。處理核159也包括對于理解本發(fā)明的實施例不是必需的額外電路(沒有示出)。執(zhí)行單元142用于執(zhí)行處理核159所接收到的指令。除了執(zhí)行典型的處理器指令外,執(zhí)行單元142也能執(zhí)行打包指令集143中的指令,用于對打包數(shù)據(jù)格式執(zhí)行操作。打包指令集143包括用于執(zhí)行本發(fā)明的諸個實施例的指令以及其他打包指令。執(zhí)行單元142通過內(nèi)部總線而耦合至寄存器組145。寄存器組145表示處理核159上的存儲區(qū)域,用于存儲包括數(shù)據(jù)的信息。如前所述的,可以理解,該存儲區(qū)域被用于存儲打包數(shù)據(jù)不是關(guān)鍵。執(zhí)行單元142耦合至解碼器144。解碼器144用于將處理核159所接收到的指令解碼為控制信號和/或微代碼進(jìn)入點(diǎn)。響應(yīng)于這些控制信號和/或微代碼進(jìn)入點(diǎn),執(zhí)行單元142執(zhí)行合適的操作。在一個實施例中,解碼器用于解釋指令的操作碼,操作碼指示應(yīng)當(dāng)對該指令內(nèi)所指示的對應(yīng)數(shù)據(jù)執(zhí)行何種操作。
[0061]處理核159耦合至總線141,用于與多個其他系統(tǒng)設(shè)備進(jìn)行通信,這些系統(tǒng)設(shè)備包括但不限于:例如,同步動態(tài)隨機(jī)存取存儲器(SDRAM)控制器146、靜態(tài)隨機(jī)存取存儲器(SRAM)控制器147、猝發(fā)閃存接口 148、個人計算機(jī)存儲卡國際協(xié)會(PCMCIA)/致密閃存(CF)卡控制器149、液晶顯示器(IXD)控制器150、直接存儲器存取(DMA)控制器151、以及替代的總線主接口 152。在一個實施例中,數(shù)據(jù)處理系統(tǒng)140也包括I/O橋154,用于經(jīng)由I/O總線153與多個I/O設(shè)備進(jìn)行通信。這樣的I/O設(shè)備可包括但不限于:例如,通用異步接收機(jī)/發(fā)射機(jī)(UART) 155、通用串行總線(USB) 156、藍(lán)牙無線UART157、以及I/O擴(kuò)展接口158。
[0062]數(shù)據(jù)處理系統(tǒng)140的一個實施例供移動、網(wǎng)絡(luò)和/或無線通信之用,以及處理核159能執(zhí)行包括向量線性內(nèi)插功能的SMD操作。處理核159可編程有多種音頻、視頻、圖像和通信算法,包括離散變換(諸如Walsh-Hadamard變換、快速傅立葉變換(FFT)、離散余弦變換(DCT)、以及它們相應(yīng)的逆變換)、壓縮/解壓縮技術(shù)(諸如色彩空間變換)、視頻編碼運(yùn)動估計或視頻解碼運(yùn)動補(bǔ)償、以及調(diào)制/解調(diào)(MODEM)功能(諸如脈沖編碼調(diào)制PCM)。
[0063]圖1C示出能夠執(zhí)行用于提供向量線性內(nèi)插功能的指令的數(shù)據(jù)處理系統(tǒng)的另一替代實施例。根據(jù)一個替代實施例,數(shù)據(jù)處理系統(tǒng)160可包括主處理器166、SIMD協(xié)處理器161、高速緩存處理器167以及輸入/輸出系統(tǒng)168。輸入/輸出系統(tǒng)168可選地耦合至無線接口 169。SMD協(xié)處理器161能夠執(zhí)行包括根據(jù)一個實施例的指令的操作。處理核170可適于以一種或多種處理技術(shù)來制造,并且通過充分詳細(xì)地表示在機(jī)器可讀介質(zhì)上可以便于包括處理核170的數(shù)據(jù)處理系統(tǒng)160的全部或一部分的制造。
[0064]對于一個實施例,SMD協(xié)處理器161包括執(zhí)行單元162以及一組寄存器組164。主處理器166的一個實施例包括解碼器165,用于識別指令集163的指令,指令集163包括根據(jù)一個實施例的用于由執(zhí)行單元162所執(zhí)行的指令。對于替換實施例,SIMD協(xié)處理器161也包括解碼器165B的至少一部分以解碼指令集163的指令。處理核170也包括對于理解本發(fā)明的實施例不是必需的額外電路(沒有示出)。
[0065]在操作時,主處理器166執(zhí)行數(shù)據(jù)處理指令流,該數(shù)據(jù)處理指令流控制一般類型的數(shù)據(jù)處理操作,包括與高速緩存167以及輸入/輸出系統(tǒng)168的交互。SMD協(xié)處理器指令嵌入數(shù)據(jù)處理指令流中。主處理器166的解碼器165將這些SMD協(xié)處理器指令識別為應(yīng)當(dāng)由附連的SMD協(xié)處理器161執(zhí)行的類型。因此,主處理器166在協(xié)處理器總線171上發(fā)出這些SMD協(xié)處理器指令(或表示SMD協(xié)處理器指令的控制信號),任何附連的SMD協(xié)處理器從協(xié)處理器總線171接收到這些指令。在該情況中,SMD協(xié)處理器161將接受并執(zhí)行任何接收到的針對該SMD協(xié)處理器的SMD協(xié)處理器指令。
[0066]可經(jīng)由無線接口 169接收數(shù)據(jù)以通過SMD協(xié)處理器指令進(jìn)行處理。對于一個示例,語音通信可以數(shù)字信號的形式被接收到,其將被SMD協(xié)處理器指令所處理,以重新生成表示該語音通信的數(shù)字音頻采樣。.對于另一個示例,壓縮音頻和/或視頻可以數(shù)字位流的形式被接收到,其將被SMD協(xié)處理器指令所處理,以重新生成數(shù)字音頻采樣和/或運(yùn)動視頻巾貞。對于處理核170的一個實施例,主處理器166和SIMD協(xié)處理器161被集成在單個處理核170中,該單個處理核170包括執(zhí)行單元162、一組寄存器組164、以及解碼器165以識別指令集163的指令,指令集163包括根據(jù)一個實施例的指令。
[0067]圖2是包括邏輯電路以執(zhí)行根據(jù)本發(fā)明的一個實施例的指令的處理器200的微體系結(jié)構(gòu)的框圖。在一些實施例中,根據(jù)一個實施例的指令可被實現(xiàn)為對具有字節(jié)大小、字大小、雙字大小、四字大小等并具有諸多數(shù)據(jù)類型(諸如單精度和雙精度整數(shù)和浮點(diǎn)數(shù)據(jù)類型)的數(shù)據(jù)元素執(zhí)行操作。在一個實施例中,有序前端201是處理器200的一部分,其獲取將要被執(zhí)行的指令,并準(zhǔn)備這些指令以在稍后供處理器流水線使用。前端201可包括若干單元。在一個實施例中,指令預(yù)取器226從存儲器獲取指令,并將指令饋送至指令解碼器228,指令解碼器228隨后解碼或解釋指令。例如,在一個實施例中,解碼器將所接收到的指令解碼為機(jī)器可執(zhí)行的被稱為“微指令”或“微操作”(也稱為微操作數(shù)或uop)的一個或多個操作。在其他實施例中,解碼器將指令解析為操作碼和對應(yīng)的數(shù)據(jù)及控制字段,它們被微體系結(jié)構(gòu)用于執(zhí)行根據(jù)一個實施例的操作。在一個實施例中,追蹤高速緩存230接受經(jīng)解碼的微操作,并將它們組裝為程序有序序列或微操作隊列234中的蹤跡,以用于執(zhí)行。當(dāng)追蹤高速緩存230遇到復(fù)雜指令時,微代碼R0M232提供完成操作所需的微操作。
[0068]一些指令被轉(zhuǎn)換為單個微操作,而其他指令需要若干個微操作以完成整個操作。在一個實施例中,如果需要超過四個微操作來完成指令,則解碼器228訪問微代碼ROM 232以進(jìn)行該指令。對于一個實施例,指令可被解碼為少量的微操作以用于在指令解碼器228處進(jìn)行處理。在另一個實施例中,如果需要若干微操作來完成操作,則可將指令存儲在微代碼ROM 232中。追蹤高速緩存230參考進(jìn)入點(diǎn)可編程邏輯陣列(PLA)來確定正確的微指令指針,以從微代碼ROM 232讀取微代碼序列以完成根據(jù)一個實施例的一個或多個指令。在微代碼ROM 232完成對于指令的微操作序列化之后,機(jī)器的前端201恢復(fù)從追蹤高速緩存230獲取微操作。
[0069]指令在無序執(zhí)行引擎203處準(zhǔn)備好用于執(zhí)行。無序執(zhí)行邏輯具有若干個緩沖器,用于將指令流平滑并且重排序,以優(yōu)化指令流進(jìn)入流水線后的性能,并調(diào)度指令流以供執(zhí)行。分配器邏輯分配每個微操作需要的機(jī)器緩沖器和資源,以用于執(zhí)行。寄存器重命名邏輯將諸個邏輯寄存器重命名為寄存器組中的條目。在指令調(diào)度器(存儲器調(diào)度器、快速調(diào)度器202、慢速/通用浮點(diǎn)調(diào)度器204、簡單浮點(diǎn)調(diào)度器206)之前,分配器也將每個微操作的條目分配入兩個微操作隊列中的一個,一個隊列用于存儲器操作,另一個隊列用于非存儲器操作。微操作調(diào)度器202、204、206基于對它們的依賴輸入寄存器操作數(shù)源的準(zhǔn)備就緒以及微操作完成它們的操作所需的執(zhí)行資源的可用性來確定微操作何時準(zhǔn)備好用于執(zhí)行。一個實施例的快速調(diào)度器202可在主時鐘周期的每半個上進(jìn)行調(diào)度,而其他調(diào)度器可僅僅在每個主處理器時鐘周期上調(diào)度一次。調(diào)度器對分配端口進(jìn)行仲裁以調(diào)度微操作以便執(zhí)行。
[0070]寄存器組208、210位于調(diào)度器202、204、206和執(zhí)行塊211中的執(zhí)行單元212、214、216、218、220、222、224之間。也存在單獨(dú)的寄存器組208、210,分別用于整數(shù)和浮點(diǎn)操作。一個實施例的每個寄存器組208、210也包括旁路網(wǎng)絡(luò),旁路網(wǎng)絡(luò)可將剛完成的還沒有被寫入寄存器組的結(jié)果旁路或轉(zhuǎn)發(fā)給新的依賴微操作。整數(shù)寄存器組208和浮點(diǎn)寄存器組210也能夠彼此通信數(shù)據(jù)。對于一個實施例,整數(shù)寄存器組208被劃分為兩個單獨(dú)的寄存器組,一個寄存器組用于低階的32位數(shù)據(jù),第二個寄存器組用于高階的32位數(shù)據(jù)。一個實施例的浮點(diǎn)寄存器組210具有128位寬度的條目,因為浮點(diǎn)指令通常具有從64至128位寬度的操作數(shù)。
[0071]執(zhí)行塊211包含執(zhí)行單元212、214、216、218、220、222、224,指令實際在這些執(zhí)行單元中執(zhí)行。該區(qū)塊包括寄存器組208、210,寄存器組208、210存儲微指令需要執(zhí)行的整數(shù)和浮點(diǎn)數(shù)據(jù)操作數(shù)值。一個實施例的處理器200由多個執(zhí)行單元組成:地址產(chǎn)生單元(AGU) 212、AGU 214、快速 ALU 216、快速 ALU 218、慢速 ALU 220、浮點(diǎn) ALU 222、浮點(diǎn)移動單元224。對于一個實施例,浮點(diǎn)執(zhí)行塊222、224執(zhí)行浮點(diǎn)、MMX、SMD、SSE以及其他操作。一個實施例的浮點(diǎn)ALU 222包括64位/64位浮點(diǎn)除法器,用于執(zhí)行除法、平方根、以及余數(shù)微操作。對于本發(fā)明的諸個實施例,涉及浮點(diǎn)值的指令可使用浮點(diǎn)硬件來處理。在一個實施例中,ALU操作進(jìn)入高速ALU執(zhí)行單元216、218。一個實施例的高速ALU 216、218可執(zhí)行高速操作,有效等待時間為半個時鐘周期。對于一個實施例,大多數(shù)復(fù)雜整數(shù)操作進(jìn)入慢速ALU220,因為慢速ALU 220包括用于長等待時間類型操作的整數(shù)執(zhí)行硬件,諸如,乘法器、移位器、標(biāo)記邏輯和分支處理。存儲器加載/存儲操作由AGU 212、214來執(zhí)行。對于一個實施例,整數(shù)ALU 216、218、220被描述為對64位數(shù)據(jù)操作數(shù)執(zhí)行整數(shù)操作。在替換實施例中,ALU 216、218、220可被實現(xiàn)為支持大范圍的數(shù)據(jù)位,包括16、32、128、256等等。類似地,浮點(diǎn)單元222、224可被實現(xiàn)為支持具有多種寬度的位的操作數(shù)范圍。對于一個實施例而言,浮點(diǎn)單元222、224可協(xié)同SMD和多媒體指令對128位寬打包數(shù)據(jù)運(yùn)算數(shù)進(jìn)行操作。
[0072]在一個實施例中,在父加載完成執(zhí)行之前,微操作調(diào)度器202、204、206就分派依賴操作。因為在處理器200中微操作被投機(jī)地調(diào)度和執(zhí)行,所以處理器200也包括處理存儲器未命中的邏輯。如果數(shù)據(jù)加載在數(shù)據(jù)高速緩存中未命中,則可能存在帶有臨時錯誤數(shù)據(jù)離開調(diào)度器并運(yùn)行在流水線中的依賴操作。重放機(jī)制跟蹤使用錯誤數(shù)據(jù)的指令,并重新執(zhí)行這些指令。僅僅依賴操作需要被重放,而允許獨(dú)立操作完成。處理器的一個實施例的調(diào)度器和重放機(jī)制也被設(shè)計為捕捉提供掩碼寄存器與通用寄存器之間的轉(zhuǎn)換的指令。
[0073]術(shù)語“寄存器”指代被用作為指令的一部分以標(biāo)識操作數(shù)的板上處理器存儲位置。換句話說,寄存器是那些處理器外部(從編程者的角度來看)可用的處理器存儲位置。然而,一實施例的寄存器不限于表示特定類型的電路。相反,一實施例的寄存器能夠存儲并提供數(shù)據(jù),并且能夠執(zhí)行在此所述的功能。在此所述的寄存器可由處理器中的電路使用任何數(shù)量不同技術(shù)來實現(xiàn),諸如,專用物理寄存器、使用寄存器重命名的動態(tài)分配物理寄存器、專用和動態(tài)分配物理寄存器的組合,等等。在一個實施例中,整數(shù)寄存器存儲三十二位整數(shù)數(shù)據(jù)。一個實施例的寄存器組也包含八個多媒體SIMD寄存器,用于打包數(shù)據(jù)。對于以下討論,寄存器應(yīng)被理解為設(shè)計成保存打包數(shù)據(jù)的數(shù)據(jù)寄存器,諸如來自美國加利福尼亞州圣克拉拉市的英特爾公司的啟用了 MMX技術(shù)的微處理器的64位寬MMXtm寄存器(在一些實例中也稱為“mm寄存器)。”這些MMX寄存器(可用在整數(shù)和浮點(diǎn)格式中)可與伴隨SMD和SSE指令的打包數(shù)據(jù)元素一起操作。類似地,涉及SSE2、SSE3、SSE4或更新的技術(shù)(統(tǒng)稱為“SSEx”)的128位寬XMM寄存器也可被用于保持這樣打包數(shù)據(jù)操作數(shù)。在一個實施例中,在存儲打包數(shù)據(jù)和整數(shù)數(shù)據(jù)時,寄存器不需要區(qū)分這兩類數(shù)據(jù)類型。在一個實施例中,整數(shù)和浮點(diǎn)數(shù)據(jù)可被包括在相同的寄存器組中,或被包括在不同的寄存器組中。進(jìn)一步的,在一個實施例中,浮點(diǎn)和整數(shù)數(shù)據(jù)可被存儲在不同的寄存器中,或被存儲在相同的寄存器中。
[0074]在下述附圖的示例中,描述了多個數(shù)據(jù)操作數(shù)。圖3A示出根據(jù)本發(fā)明的一個實施例的多媒體寄存器中的多種打包數(shù)據(jù)類型表示。圖3A示出了打包字節(jié)310、打包字320、打包雙字(dword)330的用于128位寬操作數(shù)的數(shù)據(jù)類型。本示例的打包字節(jié)格式310是128位長,并且包含十六個打包字節(jié)數(shù)據(jù)元素。字節(jié)在此被定義為是8位數(shù)據(jù)。每一個字節(jié)數(shù)據(jù)元素的信息被存儲為:對于字節(jié)O存儲在位7到位0,對于字節(jié)I存儲在位15到位8,對于字節(jié)2存儲在位23到位16,最后對于字節(jié)15存儲在位120到位127。因此,在該寄存器中使用了所有可用的位。該存儲配置提高了處理器的存儲效率。同樣,因為訪問了十六個數(shù)據(jù)元素,所以現(xiàn)在可對十六個數(shù)據(jù)元素并行地執(zhí)行一個操作。
[0075]通常,數(shù)據(jù)元素是單獨(dú)的數(shù)據(jù)片,與具有相同長度的其他數(shù)據(jù)元素一起存儲在單個寄存器或存儲器位置中。在涉及SSEx技術(shù)的打包數(shù)據(jù)序列中,存儲在XMM寄存器中的數(shù)據(jù)元素的數(shù)目是128位除以單個數(shù)據(jù)元素的位長。類似地,在涉及MMX和SSE技術(shù)的打包數(shù)據(jù)序列中,存儲在MMX寄存器中的數(shù)據(jù)元素的數(shù)目是64位除以單個數(shù)據(jù)元素的位長。雖然圖3A中所示的數(shù)據(jù)類型是128位長,但本發(fā)明的諸個實施例也可操作64位寬、256位寬、512位寬或其他大小的操作數(shù)。本示例的打包字格式320是128位長,并且包含八個打包字?jǐn)?shù)據(jù)元素。每個打包字包含十六位的信息。圖3A的打包雙字格式330是128位長,并且包含四個打包雙字?jǐn)?shù)據(jù)元素。每個打包雙字?jǐn)?shù)據(jù)元素包含三十二位信息。打包四字是128位長,并包含兩個打包四字?jǐn)?shù)據(jù)元素。
[0076]圖3B示出了替代的寄存器內(nèi)數(shù)據(jù)存儲格式。每個打包數(shù)據(jù)可包括超過一個獨(dú)立數(shù)據(jù)元素。示出了三個打包數(shù)據(jù)格式:打包半數(shù)據(jù)元素314、打包單數(shù)據(jù)元素342、以及打包雙數(shù)據(jù)元素343。打包半數(shù)據(jù)元素341、打包單數(shù)據(jù)元素342、打包雙數(shù)據(jù)元素343的一個實施例包含定點(diǎn)數(shù)據(jù)元素。對于替代實施例,一個或多個打包半數(shù)據(jù)元素341、打包單數(shù)據(jù)元素342、打包雙數(shù)據(jù)元素343可包含浮點(diǎn)數(shù)據(jù)元素。打包半數(shù)據(jù)元素341的一個替代實施例是一百二十八位長度,包含八個16位數(shù)據(jù)元素。打包單數(shù)據(jù)元素342的一個替代實施例是一百二十八位長度,且包含四個32位數(shù)據(jù)元素。打包雙數(shù)據(jù)元素343的一個實施例是一百二十八位長度,且包含兩個64位數(shù)據(jù)元素??梢岳斫獾氖?,這樣的打包數(shù)據(jù)格式進(jìn)一步可被擴(kuò)展至其他寄存器長度,例如,96位、160位、192位、224位、256位、512位或更長。
[0077]圖3C示出了根據(jù)本發(fā)明的一個實施例的多媒體寄存器中的多種有符號和無符號打包數(shù)據(jù)類型表示。無符號打包字節(jié)表示344示出了 SMD寄存器中的無符號打包字節(jié)的存儲。每一個字節(jié)數(shù)據(jù)元素的信息被存儲為:對于字節(jié)O存儲在位7到位0,對于字節(jié)I存儲在位15到位8,對于字節(jié)2存儲在位23到位16,等等,最后對于字節(jié)15存儲在位120到位127。因此,在該寄存器中使用了所有可用的位。該存儲配置可提高處理器的存儲效率。同樣,因為訪問了十六個數(shù)據(jù)元素,所以可對十六個數(shù)據(jù)元素并行地執(zhí)行一個操作。有符號打包字節(jié)表示345示出了有符號打包字節(jié)的存儲。注意到,每個字節(jié)數(shù)據(jù)元素的第八位是符號指示符。無符號打包字表示346示出了 SMD寄存器中字7到字O如何被存儲。有符號打包字表示347類似于無符號打包字寄存器內(nèi)表示346。注意到,每個字?jǐn)?shù)據(jù)元素的第十六位是符號指示符。無符號打包雙字表示348示出了雙字?jǐn)?shù)據(jù)元素如何存儲。有符號打包雙字表示349類似于無符號打包雙字寄存器內(nèi)表示348。注意到,必要的符號位是每個雙字?jǐn)?shù)據(jù)元素的第三十二位。
[0078]圖3D是與可從美國加利福尼亞州圣克拉拉市的英特爾公司的萬維網(wǎng)intel.com/products/processor/manuals/上獲得的“丨ntel? 64和IA-32英特爾體系結(jié)構(gòu)軟件開發(fā)者手冊組合卷 2A 和 2B:指令集參考 A-Z (Intel Architecture Software Developer’s ManualCombined Volumes2A and2B:1nstruction Set Reference A-Z) ”中描述的運(yùn)算碼格式類型相對應(yīng)的具有32或更多位的操作編碼(操作碼)格式360以及寄存器/存儲器操作數(shù)尋址模式的一個實施例的描述。在一個實施例中,可通過一個或更多個字段361和362來編碼指令。可以標(biāo)識每個指令高達(dá)兩個操作數(shù)位置,包括高達(dá)兩個源操作數(shù)標(biāo)識符364和365。對于一個實施例,目的地操作數(shù)標(biāo)識符366與源操作數(shù)標(biāo)識符364相同,而在其他實施例中它們不相同。對于替代實施例,目的地操作數(shù)標(biāo)識符366與源操作數(shù)標(biāo)識符365相同,而在其他實施例中它們不相同。在一個實施例中,由源操作數(shù)標(biāo)識符364和365所標(biāo)識的源操作數(shù)中的一個被指令的結(jié)果所覆寫,而在其他實施例中,標(biāo)識符364對應(yīng)于源寄存器元素,而標(biāo)識符365對應(yīng)于目的地寄存器元素。對于一個實施例,操作數(shù)標(biāo)識符364和365可被用于標(biāo)識32位或64位的源和目的地操作數(shù)。
[0079]圖3E示出了具有四十個或更多位的另一個替代操作編碼(操作碼)格式370。操作碼格式370對應(yīng)于操作碼格式360,并包括可選的前綴字節(jié)378。根據(jù)一個實施例的指令可通過字段378、371和372中的一個或多個來編碼。通過源操作數(shù)標(biāo)識符374和375以及通過前綴字節(jié)378,可標(biāo)識每個指令中高達(dá)兩個操作數(shù)位置。對于一個實施例,前綴字節(jié)378可被用于標(biāo)識32位或64位的源和目的地操作數(shù)。對于一個實施例,目的地操作數(shù)標(biāo)識符376與源操作數(shù)標(biāo)識符374相同,而在其他實施例中它們不相同。對于替代實施例,目的地操作數(shù)標(biāo)識符376與源操作數(shù)標(biāo)識符375相同,而在其他實施例中它們不相同。在一個實施例中,指令對由操作數(shù)標(biāo)識符374和375所標(biāo)識的一個或多個操作數(shù)進(jìn)行操作,并且由操作數(shù)標(biāo)識符374和375所標(biāo)識的一個或多個操作數(shù)被指令的結(jié)果所覆寫,然而在其他實施例中,由標(biāo)識符374和375所標(biāo)識的操作數(shù)被寫入另一個寄存器中的另一個數(shù)據(jù)元素中。操作碼格式360和370允許由MOD字段363和373以及由可選的比例-變址-基址(scale-1ndex-base)和位移(displacement)字節(jié)所部分指定的寄存器到寄存器尋址、存儲器到寄存器尋址、由存儲器對寄存器尋址、由寄存器對寄存器尋址、直接對寄存器尋址、寄存器至存儲器尋址。
[0080]接下來轉(zhuǎn)到圖3F,在一些替換實施例中,64位(或128位、或256位、或512位或更多)單指令多數(shù)據(jù)(SMD)算術(shù)操作可經(jīng)由協(xié)處理器數(shù)據(jù)處理(CDP)指令來執(zhí)行。操作編碼(操作碼)格式380示出了一個這樣的CDP指令,其具有CDP操作碼字段382和389。對于替代實施例,該類型CDP指令操作可由字段383、384、387和388中的一個或多個來編碼??梢詫γ總€指令標(biāo)識高達(dá)三個操作數(shù)位置,包括高達(dá)兩個源操作數(shù)標(biāo)識符385和390以及一個目的地操作數(shù)標(biāo)識符386。協(xié)處理器的一個實施例可對8、16、32和64位值操作。對于一個實施例,對整數(shù)數(shù)據(jù)元素執(zhí)行指令。在一些實施例中,使用條件字段381,可有條件地執(zhí)行指令。對于一些實施例,源數(shù)據(jù)大小可通過字段383來編碼。Insomeembodiments,Zero (Z), negative (N), carry (C), and overflow (V) detection can be done on S D fields.對于一些指令,飽和類型可通過字段384來編碼。
[0081]現(xiàn)在轉(zhuǎn)到圖3G,其描繪了根據(jù)另一實施例的與可從美國加利福尼亞州圣克拉拉市的英特爾公司的萬維網(wǎng)(www) intel.com/products/processor/manuals/上獲得的 “Intel? 高級向量擴(kuò)展編程參考(Intel? Advanced Vector Extensions ProgrammingReference)中描述的操作碼格式類型相對應(yīng)的用于提供向量線性內(nèi)插功能的另一替代操作編碼(操作碼)格式397。
[0082]原始x86指令集向I字節(jié)操作碼提供多種地址字節(jié)(syllable)格式以及包含在附加字節(jié)中的直接操作數(shù),其中可從第一個“操作碼”字節(jié)中獲知附加字節(jié)的存在。此外,特定字節(jié)值被預(yù)留給操作碼作為修改符(稱為前綴prefix,因為它們被放置在指令之前)。當(dāng)256個操作碼字節(jié)的原始配置(包括這些特殊前綴值)耗盡時,指定單個字節(jié)以跳出(escape)到新的256個操作碼集合。因為添加了向量指令(諸如,SMD),即便通過使用前綴進(jìn)行了擴(kuò)展以后,也需要產(chǎn)生更多的操作碼,并且“兩字節(jié)”操作碼映射也已經(jīng)不夠。為此,將新指令加入附加的映射中,附加的映射使用兩字節(jié)加上可選的前綴作為標(biāo)識符。
[0083]除此外,為了便于在64位模式中實現(xiàn)額外的寄存器,在前綴和操作碼(以及任何的用于確定操作碼所需的跳出字節(jié))之間使用額外的前綴(被稱為“REX”)。在一個實施例中,REX具有4個“有效載荷”位,以指示在64位模式中使用附加的寄存器。在其他實施例中,可具有比4位更少或更多的位。至少一個指令集的通用格式(一般對應(yīng)于格式360和/或格式370)被一般地不出如下:
[0084][prefixes] [rex] escape [escape2] opcode modrm (等等)
[0085]操作碼格式397對應(yīng)于操作碼格式370,并包括可選的VEX前綴字節(jié)391 (在一個實施例中,以十六進(jìn)制的C4或C5開始)以替換大部分的其他公共使用的傳統(tǒng)指令前綴字節(jié)和跳出代碼。例如,以下示出了使用兩個字段來編碼指令的實施例,其可在原始指令中不存在第二跳出代碼時使用。在以下所示的實施例中,傳統(tǒng)跳出由新的跳出值所表示,傳統(tǒng)前綴被完全壓縮為“有效載荷(payload) ”字節(jié)的一部分,傳統(tǒng)前綴被重新申明并可用于未來的擴(kuò)展,并且加入新的特征(諸如,增加的向量長度以及額外的源寄存器區(qū)分符)。
[0086]
【權(quán)利要求】
1.一種處理器,包括: 一個或多個向量寄存器,各自包括用于存儲向量元素的值的第一多個數(shù)據(jù)字段; 解碼級,用于解碼第一指令,所述第一指令指定所述一個或多個向量寄存器中的第一操作數(shù)、向量元素大小、第一多個數(shù)據(jù)字段的部分、所述一個或多個向量寄存器中的第二操作數(shù)、以及第三操作數(shù);以及 執(zhí)行單元,用于,響應(yīng)于經(jīng)解碼的第一指令,并針對所述第一多個數(shù)據(jù)字段的所述部分的每個數(shù)據(jù)字段: 分別從所述第一操作數(shù)、第二操作數(shù)和第三操作數(shù)中的具有所述向量元素大小的相應(yīng)數(shù)據(jù)字段讀取第一值、第二值和第三值;以及 并行地將內(nèi)插值計算為所述第一值乘以所述第二值的積減去所述第二值乘以所述第三值的積再加上所述第三值。
2.如權(quán)利要求1所述的處理器,其特征在于,所述執(zhí)行單元進(jìn)一步用于,響應(yīng)于經(jīng)解碼的第一指令,并針對所述第一多個數(shù)據(jù)字段的所述部分的每個數(shù)據(jù)字段,將每個計算得出的內(nèi)插值分別存儲在由所述第一指令指定的目的地操作數(shù)中的具有所述向量元素大小的相應(yīng)數(shù)據(jù)字段中。
3.如權(quán)利要求1所述的處理器,其特征在于,所述指定的第三操作數(shù)是一個或多個向量寄存器中的一個。
4.如權(quán)利要求1所述的處理器,其特征在于,所述指定的第三操作數(shù)是存儲器位置。
5.如權(quán)利要求1所述的處理器,其特征在于,所述第一指令指定掩碼,所述掩碼標(biāo)識所述第一多個數(shù)據(jù)字段的所述部分,其中從所述源操作數(shù)中的數(shù)據(jù)字段讀取的所述值對應(yīng)于所述源操作數(shù)中未被由所述第一指令所指定的掩碼所掩蔽的向量元素。
6.如權(quán)利要求1所述的處理器,其特征在于,所述向量元素大小是64位。
7.如權(quán)利要求1所述的處理器,其特征在于,所述執(zhí)行單元用于: 分別從所述第一操作數(shù)、第二操作數(shù)和第三操作數(shù)中的具有所述向量元素大小的相應(yīng)數(shù)據(jù)字段讀取第四值、第五值和第六值;以及 與將內(nèi)插值計算為第一值乘以第二值的積減去第二值乘以第三值的積再加上第三值相并行地,將另一內(nèi)插值計算為第四值乘以第五值的積減去第五值乘以第六值的積再加上第六值。
8.如權(quán)利要求7所述的處理器,其特征在于,所述向量元素大小是32位。
9.如權(quán)利要求7所述的處理器,其特征在于,所述向量元素大小是16位。
10.一種機(jī)器實現(xiàn)的方法,包括: 分別從由第一可執(zhí)行指令指定的第一、第二和第三操作數(shù)中的由所述第一可執(zhí)行指令指定的具有所述向量元素大小的相應(yīng)數(shù)據(jù)字段讀取第一、第二和第三值;以及 將第一內(nèi)插值計算為所述第一值乘以所述第二值的積減去所述第二值乘以所述第三值的積再加上所述第三值。
11.如權(quán)利要求10所述的機(jī)器實現(xiàn)的方法,其特征在于,所述向量元素大小是64位。
12.如權(quán)利要求10所述的機(jī)器實現(xiàn)的方法,其特征在于,包括: 分別從所述第一操作數(shù)、第二操作數(shù)和第三操作數(shù)中的具有所述向量元素大小的相應(yīng)數(shù)據(jù)字段讀取第四值、第五值和第六值;以及與計算所述第一內(nèi)插值相并行地,將第二內(nèi)插值計算為所述第四值乘以所述第五值的積減去所述第五值乘以所述第六值的積再加上第六值。
13.如權(quán)利要求12所述的機(jī)器實現(xiàn)的方法,其特征在于,所述向量元素大小是32位。
14.如權(quán)利要求12所述的機(jī)器實現(xiàn)的方法,其特征在于,所述向量元素大小是16位。
15.如權(quán)利要求10所述的機(jī)器實現(xiàn)的方法,其特征在于,所述指定的第三操作數(shù)是一組向量寄存器中的一個。
16.如權(quán)利要求10所述的機(jī)器實現(xiàn)的方法,其特征在于,所述指定的第三操作數(shù)是存儲器位置。
17.如權(quán)利要求10所述的機(jī)器實現(xiàn)的方法,其特征在于,所述第一可執(zhí)行指令指定掩碼,所述掩碼標(biāo)識具有所述向量元素大小的數(shù)據(jù)字段的部分,其中從所述第一操作數(shù)、第二操作數(shù)以及第三操作數(shù)中的相應(yīng)數(shù)據(jù)字段讀取的所述值對應(yīng)于所述第一操作數(shù)、所述第二操作數(shù)以及第三操作數(shù)中未被由所述第一可執(zhí)行指令所指定的掩碼所掩蔽的向量元素。
18.一種裝置,包括: 寄存器/存儲器訪問邏輯,用于分別從由第一可執(zhí)行指令指定的第一、第二和第三操作數(shù)中的由所述第一可執(zhí)行指令所指定的具有向量元素大小的相應(yīng)數(shù)據(jù)字段讀取第一值、第二值和第三值;以及 可分區(qū)的乘法/加法邏輯,用于通過如下方式計算第一內(nèi)插值:首先并行地將所述第一值乘以所述第二值以產(chǎn) 生第一組部分乘積,并將第二值乘以第三值以產(chǎn)生第二組負(fù)的部分乘積,然后將所述第一組部分乘積加上所述第二組負(fù)的部分乘積再加上所述第三值。
19.如權(quán)利要求18所述的裝置,其特征在于,用于將所述第一內(nèi)插值存儲到由所述第一可執(zhí)行指令所指定的目的地操作數(shù)中的具有所述向量元素大小的相應(yīng)數(shù)據(jù)字段。
20.如權(quán)利要求19所述的裝置,其特征在于,由所述第一可執(zhí)行指令所指定的目的地操作數(shù)是與由所述第一可執(zhí)行指令所指定的所述第一操作數(shù)、所述第二操作數(shù)以及所述第三操作數(shù)所不同的向量寄存器。
21.如權(quán)利要求18所述的裝置,其特征在于,所述寄存器/存儲器訪問邏輯用于分別從由所述第一可執(zhí)行指令所指定的所述第一操作數(shù)、所述第二操作數(shù)和所述第三操作數(shù)中的具有所述向量元素大小的相應(yīng)數(shù)據(jù)字段讀取第四值、第五值和第六值;以及 所述可分區(qū)的乘法/加法邏輯用于通過如下方式計算第二內(nèi)插值:并行地將所述第四值乘以所述第五值以產(chǎn)生第三組部分乘積,并將第五值乘以第六值以產(chǎn)生第四組負(fù)的部分乘積,然后將所述第三組部分乘積加上所述第四組負(fù)的部分乘積再加上所述第六值。
22.如權(quán)利要求21所述的裝置,其特征在于,針對所述第三和第六值讀取的相應(yīng)數(shù)據(jù)字段被向上轉(zhuǎn)換成由所述第一可執(zhí)行指令所指定的所述向量元素大小。
23.如權(quán)利要求22所述的裝置,其特征在于,針對所述第三和第六值讀取的相應(yīng)數(shù)據(jù)字段從由所述第一可執(zhí)行指令所指定的所述第三操作數(shù)被廣播。
24.如權(quán)利要求22所述的裝置,其特征在于,針對所述第三和第六值讀取的相應(yīng)數(shù)據(jù)字段從由所述第一可執(zhí)行指令所指定的所述第三操作數(shù)被混合。
25.—種處理系統(tǒng),包括: 存儲器;以及 第一多個處理器,所述第一多個處理器中的每一個包括:一個或多個向量寄存器,各自包括用于存儲向量元素的值的第一多個數(shù)據(jù)字段; 解碼級,用于解碼第一指令,所述第一指令指定所述一個或多個向量寄存器中的第一操作數(shù)、向量元素大小、第一多個數(shù)據(jù)字段的部分、所述一個或多個向量寄存器中的第二操作數(shù)、以及第三操作數(shù); 寄存器/存儲器讀取訪問級,用于分別從所述第一操作數(shù)、第二操作數(shù)和第三操作數(shù)中的具有所述向量元素大小的相應(yīng)數(shù)據(jù)字段讀取第一值、第二值和第三值;以及 執(zhí)行級,用于響應(yīng)于經(jīng)解碼的第一指令,并針對所述第一多個數(shù)據(jù)字段的所述部分的每個數(shù)據(jù)字段,并行地將第一內(nèi)插值計算為所述第一值乘以所述第二值的積減去所述第二值乘以所述第三值的積再加上所述第三值。
26.如權(quán)利要求25所述的處理系統(tǒng),其特征在于,所述向量元素大小是64位。
27.如權(quán)利要求25所述的處理系統(tǒng),其特征在于,所述寄存器/存儲器讀取訪問級用于分別從所述第一操作數(shù)、所述第二操作數(shù)和所述第三操作數(shù)中的具有所述向量元素大小的相應(yīng)數(shù)據(jù)字段讀取第四值、第五值和第六值;以及 針對所述第一多個數(shù)據(jù)字段的所述部分的每對數(shù)據(jù)字段并且與計算所述第一內(nèi)插值相并行地,所述執(zhí)行級將另一內(nèi)插值計算為所述第四值乘以所述第五值的積減去所述第五值乘以所述第六值的積再加上所述第六值。
28.如權(quán)利要求27所述的處理系統(tǒng),其特征在于,針對所述第三和第六值讀取的相應(yīng)數(shù)據(jù)字段被向上轉(zhuǎn)換成由所述第一可執(zhí)行指令所指定的所述向量元素大小。
29.如權(quán)利要求28所述的處理系統(tǒng),其特征在于,所述向量元素大小是32位。
30.如權(quán)利要求28所述的處理系統(tǒng),其特征在于,針對所述第三值和第六值讀取的相應(yīng)數(shù)據(jù)字段從由所述第一可執(zhí)行指令所指定的所述第三操作數(shù)被廣播。
31.如權(quán)利要求28所述的處理系統(tǒng),其特征在于,針對所述第三值和第六值讀取的相應(yīng)數(shù)據(jù)字段從由所述第一可執(zhí)行指令所指定的所述第三操作數(shù)被混合。
【文檔編號】G06F15/80GK104011658SQ201180075531
【公開日】2014年8月27日 申請日期:2011年12月16日 優(yōu)先權(quán)日:2011年12月16日
【發(fā)明者】J·考博爾, A·T·福塞斯, L·K·吳, T·D·弗萊切 申請人:英特爾公司