用於提供向量分散操作和聚集操作功能的指令和邏輯的製作方法
2023-05-27 22:44:51

技術領域
本公開涉及處理邏輯、微處理器以及相關的指令集體系結構的領域,這些指令集體系結構在被處理器或其他處理邏輯所執行時運行邏輯、數學或其他功能性操作。具體而言,本公開涉及用於提供向量分散操作和/或聚集操作功能的指令和邏輯。
背景技術:
目前的諸多處理器通常包括用於提供計算密集型操作但提供高度數據並行性的指令,這些指令可通過使用多種數據存儲設備的高效實現來使用,這些數據存儲設備諸如:單指令多數據(SIMD)向量寄存器。
將應用或軟體代碼向量化可包括使該應用在特定系統或指令集體系結構(諸如例如寬或大寬度向量體系結構)上編譯、安裝和/或運行。對於一些應用,由於向量寬度增加(例如用於諸如三維(3D)圖像渲染之類的操作),存儲器訪問可能是複雜的、不一致的或不連續的。用於向量化進程的存儲器可能被存儲在不連續或不鄰近的存儲器位置中。多種體系結構可能需要額外的指令,這些額外的指令最小化了指令吞吐量,並顯著增加在執行任何算術操作之前對寄存器中的數據進行排序所需的時鐘周期的數量。
用於改善存儲器訪問和對去往和來自更寬向量的數據進行排序的機制可包括實現聚集和分散操作,以針對來自其他非本地和/或不連續的存儲器位置的數據產生本地連續的存儲器訪問。聚集操作可從存儲裝置中的一組不連續或隨機的存儲器位置收集數據,並將不同的數據組合到打包結構中。分散操作可將打包結構中的元素散開至一組不連續或隨機的存儲器位置。這些存儲器位置中的一些可能未被高速緩存,或已經被移出物理存儲器的分頁。
如果聚集操作由於頁面錯誤或一些其他原因而中斷,在一些體系結構下,機器的狀態可能未保存,從而需要重複整個聚集操作,而不是在聚集操作中斷的位置處重新開始。由於在任一聚集操作上可能需要多次存儲器訪問,所以可能需要許多時鐘周期來完成,任何後續的依賴算術操作必須等待該聚集操作完成。這樣的延遲代表瓶頸,該瓶頸會限制例如從寬或大寬度向量體系結構原本預期的性能優勢。
到目前為止,尚未充分探索針對這樣的性能受限問題和瓶頸的潛在解決方案。
附圖說明
在附圖的各圖中通過示例而非限制地示出本發明。
圖1A是執行用於提供向量分散操作和/或聚集操作功能的指令的系統的一個實施例的框圖。
圖1B是執行用於提供向量分散操作和/或聚集操作功能的指令的系統的另一實施例的框圖。
圖1C是執行用於提供向量分散操作和/或聚集操作功能的指令的系統的另一實施例的框圖。
圖2是執行用於提供向量分散操作和/或聚集操作功能的指令的處理器的一個實施例的框圖。
圖3A示出根據一個實施例的打包數據類型。
圖3B示出根據一個實施例的打包數據類型。
圖3C示出根據一個實施例的打包數據類型。
圖3D示出根據一個實施例的編碼成用於提供向量分散操作和/或聚集操作功能的指令。
圖3E示出根據另一實施例的編碼成用於提供向量分散操作和/或聚集操作功能的指令。
圖3F示出根據另一實施例的編碼成用於提供向量分散操作和/或聚集操作功能的指令。
圖3G示出根據另一實施例的編碼成用於提供向量分散操作和/或聚集操作功能的指令。
圖3H示出根據另一實施例的編碼成用於提供向量分散操作和/或聚集操作功能的指令。
圖4A示出用於執行提供向量分散操作和/或聚集操作功能的指令的處理器微體系結構的一個實施例的要素。
圖4B示出用於執行提供向量分散操作和/或聚集操作功能的指令的處理器微體系結構的另一實施例的要素。
圖5是用於執行提供向量分散操作和/或聚集操作功能的指令的處理器的一個實施例的框圖。
圖6是用於執行提供向量分散操作和/或聚集操作功能的指令的計算機系統的一個實施例的框圖。
圖7是用於執行提供向量分散操作和/或聚集操作功能的指令的計算機系統的另一實施例的框圖。
圖8是用於執行提供向量分散操作和/或聚集操作功能的指令的計算機系統的另一實施例的框圖。
圖9是用於執行提供向量分散操作和/或聚集操作功能的指令的晶片上系統的一個實施例的框圖。
圖10是用於執行提供向量分散操作和/或聚集操作功能的指令的處理器的實施例的框圖。
圖11是提供向量分散操作和/或聚集操作功能的IP核開發系統的一個實施例的框圖。
圖12示出提供向量分散操作和/或聚集操作功能的體系結構仿真系統的一個實施例。
圖13示出用於轉換提供向量分散操作和/或聚集操作功能的指令的系統的一個實施例。
圖14示出用於提供向量聚集操作功能的過程的一個實施例的流程圖。
圖15示出用於提供向量聚集操作功能的過程的另一實施例的流程圖。
圖16示出用於提供向量分散操作功能的過程的一個實施例的流程圖。
圖17示出用於提供向量分散操作功能的過程的另一實施例的流程圖。
具體實施方式
下文描述了位於處理器、計算機系統或其他處理設備之內或與處理器、計算機系統或其他處理設備相關聯的用於提供向量分散操作和/或聚集操作功能的指令和處理邏輯。
在一些實施例中,響應於指定例如聚集和第二操作、目的地寄存器、操作數寄存器以及存儲器地址的指令,執行單元讀取掩碼寄存器中的值,其中掩碼寄存器中的欄位對應於存儲器中的數據元素的索引寄存器中的偏移量索引。第一掩碼值指示該元素尚未從存儲器中被聚集,而第二值指示該元素無需被聚集或已經被聚集。對於具有第一值的每個數據元素,將該數據元素從存儲器聚集到相應的目的地寄存器位置中,並且將掩碼寄存器中的相應值改成第二值。當所有的掩碼寄存器欄位具有第二值時,利用目的地和操作數寄存器中的相應數據來執行第二操作以產生結果。在一些替代實施例中,響應於指定例如分散和第一操作、目的地寄存器、操作數寄存器以及存儲器地址的指令,執行單元可在使用或不使用掩碼寄存器的情況下執行第一操作,並且掩碼值可用來指示所得的元素是否已被分散至存儲器,或者指示該元素無需被分散至存儲器或已經被分散至存儲器。
在以下描述中,陳述了諸如處理邏輯、處理器類型、微體系結構狀況、事件、啟用機制等多種特定細節,以提供對本發明實施例的更透徹理解。然而,本領域技術人員應當領會,沒有這些具體細節也可實踐本發明。此外,沒有詳細示出一些公知的結構、電路等等,以避免不必要地模糊本發明的實施例。
雖然下述的諸個實施例參照處理器來描述,但其他實施例也適用於其他類型的集成電路和邏輯設備。本發明的實施例的類似技術和教導可應用於其它類型的電路或半導體器件,這些其它類型的電路或半導體器件也可受益於更高的流水線吞吐量和提高的性能。本發明的諸個實施例的教示適用於執行數據操縱的任何處理器或機器。然而,本發明不限於執行512位、256位、128位、64位、32位、或16位數據運算的處理器或機器,並適用於執行數據操縱或管理的任何處理器和機器。此外,下述描述提供了示例,並且附圖出於示意性目的示出了多個示例。然而,這些示例不應該被理解為具有限制性目的,因為它們僅僅旨在提供本發明的諸個實施例的示例,而並非對本發明的實施例的所有可能實現方式進行窮舉。
雖然下述的示例描述了在執行單元和邏輯電路情況下的指令處理和分配,但本發明的其他實施例也可通過存儲在機器可讀有形介質上的數據和/或指令來完成,這些數據和/或指令在被機器執行時使得機器執行與本發明至少一個實施例相一致的功能。在一個實施例中,與本發明的實施例相關聯的功能被具體化在機器可執行指令中。這些指令可用來使通過這些指令編程的通用處理器或專用處理器執行本發明的步驟。本發明的諸個實施例也可以作為電腦程式產品或軟體來提供,該電腦程式產品或軟體可包括其上存儲有指令的機器或計算機可讀介質,這些指令可被用來對計算機(或其他電子設備)進行編程來執行根據本發明的實施例的一個或多個操作。另選地,本發明的諸個實施例的這些步驟可由包含用於執行這些步驟的固定功能邏輯的專用硬體組件來執行,或由經編程的計算機組件以及固定功能硬體組件的任何組合來執行。
被用於對邏輯進行編程以執行本發明的諸個實施例的指令可被存儲在系統中的存儲器(諸如,DRAM、高速緩存、快閃記憶體、或其他存儲器)內。進一步的,指令可經由網絡或其他計算機可讀介質來分發。因此,計算機可讀介質可包括用於以機器(諸如,計算機)可讀的格式存儲或發送信息的任何機制,但不限於:磁碟、光碟、緻密盤只讀存儲器(CD-ROM)、磁光碟、只讀存儲器(ROM)、隨機存取存儲器(RAM)、可擦除可編程只讀存儲器(EPROM)、電可擦除可編程只讀存儲器(EEPROM)、磁卡或光卡、快閃記憶體、或在經由網際網路通過電、光、聲、或其他形式的傳播信號(諸如,載波、紅外信號、數位訊號等)發送信息中所用的有形機器可讀存儲器。因此,計算機可讀介質包括用於存儲或發送機器(例如,計算機)可讀形式的電子指令或信息的任何類型的有形機器可讀介質。
設計會經歷多個級,從創新到模擬到製造。表示設計的數據可用多種方式來表示該設計。首先,如模擬中將有用的,可使用硬體描述語言或其他功能性描述語言來表示硬體。此外,具有邏輯和/或電晶體門電路的電路級模型可在設計流程的其他級產生。此外,大多數設計在某些級都達到表示硬體模型中多種設備的物理配置的數據水平。在使用常規半導體製造技術的情況下,表示硬體模型的數據可以是在不同掩模層上對用於生成集成電路的掩模指示不同特徵的存在與否的數據。在任何的設計表示中,數據可被存儲在任何形式的機器可讀介質中。存儲器或磁/光存儲器(諸如,盤)可以是存儲信息的機器可讀介質,這些信息是經由光學或電學波來發送的,這些光學或電學波被調製或以其他方式生成以傳送這些信息。當發送指示或承載代碼或設計的電學載波時,執行電信號的複製、緩衝或重傳情況時,製作一個新的副本。因此,通信提供商或網絡提供商會在有形機器可讀介質上至少臨時地存儲具體化本發明的諸個實施例的技術的物品(諸如,編碼在載波中的信息)。
在現代處理器中,多個不同執行單元被用於處理和執行多種代碼和指令。並不是所有指令都被同等地創建,因為其中有一些更快地被完成而另一些需要多個時鐘周期來完成。指令的吞吐量越快,則處理器的總體性能越好。因此,使大量指令儘可能快地執行將會是有利的。然而,某些指令具有更大的複雜度,並需要更多的執行時間和處理器資源。例如,存在浮點指令、加載/存儲操作、數據移動等等。
因為更多的計算機系統被用於網際網路、文本以及多媒體應用,所以逐漸地引進更多的處理器支持。在一個實施例中,指令集可與一個或多個計算機體系結構相關聯,一個或多個計算機體系結構包括數據類型、指令、寄存器體系結構、尋址模式、存儲器體系結構、中斷和異常處理、外部輸入輸出(I/O)。
在一個實施例中,指令集體系結構(ISA)可由一個或更多微體系結構來執行,微體系結構包括用於實現一個或多個指令集的處理器邏輯和電路。相應地,具有不同微體系結構的諸個處理器可共享公共指令集的至少一部分。例如,奔騰四(Pentium 4)處理器、酷睿(CoreTM)處理器、以及來自加利福尼亞州桑尼威爾(Sunnyvale)的超微半導體有限公司(Advanced Micro Devices,Inc.)的諸多處理器執行幾乎相同版本的x86指令集(在更新的版本中加入了一些擴展),但具有不同的內部設計。類似地,由其他處理器開發公司(諸如,ARM控股有限公司、MIPS或它們的授權方或兼容方)所設計的諸多處理器可共享至少一部分公共指令集,但可包括不同的處理器設計。例如,ISA的相同寄存器體系結構在不同的微體系結構中可使用新的或已知的技術以不同方法來實現,包括專用物理寄存器、使用寄存器重命名機制(諸如,使用寄存器別名表RAT、重排序緩衝器ROB、以及隱退寄存器組)的一個或多個動態分配物理寄存器。在一個實施例中,寄存器可包括:可由軟體編程者尋址或不可尋址的一個或多個寄存器、寄存器體系結構、寄存器組、或其他寄存器集合。
在一個實施例中,指令可包括一個或多個指令格式。在一個實施例中,指令格式可指示多個欄位(位的數目、位的位置等)以特別指定將要被執行的操作以及將要被執行的操作的操作數。一些指令格式可進一步被指令模板(或子格式)所細分定義。例如,給定指令格式的指令模板可被定義為具有指令格式欄位的不同的子集,和/或被定義為具有不同解釋的給定欄位。在一個實施例中,使用指令格式(並且,如果定義過,則以該指令格式的一個給定指令模板)來表示指令,並且該指令指定或指示操作以及該操作將操作的操作數。
科學應用、金融應用、自動向量化通用應用、RMS(識別、挖掘和合成)應用以及視覺和多媒體應用(諸如,2D/3D圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻處理)可能需要對大量數據項執行相同的操作。在一個實施例中,單指令多數據(SIMD)指的是使得處理器在多個數據元素上執行一操作的一種類型的指令。SIMD技術可被用於處理器中,這些處理器將寄存器中的諸個位(bit)邏輯地劃分入多個固定大小或可變大小的數據元素,每個數據元素表示單獨的值。例如,在一個實施例中,64位寄存器中的諸個位可被組織為包含四個單獨的16位數據元素的源操作數,每個數據元素表示單獨的16位值。該數據類型可被稱為「打包」數據類型或「向量」數據類型,並且該數據類型的操作數被稱為打包數據操作數或向量操作數。在一個實施例中,打包數據項或向量可以是存儲在單個寄存器中的打包數據元素的序列,並且打包數據操作數或向量操作數可以是SIMD指令(或「打包數據指令」或「向量指令」)的源操作數或目的地操作數。在一個實施例中,SIMD指令指定了將要對兩個源向量操作數執行的單個向量操作,以生成具有相同或不同大小的、具有相同或不同數量的數據元素的、具有相同或不同數據元素次序的目的地向量操作數(也被稱為結果向量操作數)。
諸如由酷睿(CoreTM)處理器(具有包括x86、MMXTM、流SIMD擴展(SSE)、SSE2、SSE3、SSE4.1、SSE4.2指令的指令集)、ARM處理器(諸如,ARM處理器族,具有包括向量浮點(VFP)和/或NEON指令的指令集)、MIPS處理器(諸如,中國科學院計算機技術研究所(ICT)開發的龍芯處理器族)所使用的SIMD技術之類的SIMD技術在應用性能上帶來了極大的提高(CoreTM和MMXTM是加利福尼亞州聖克拉拉市的英特爾公司的註冊商標或商標)。
在一個實施例中,目的地寄存器/數據和源寄存器/數據是表示對應數據或操作的源和目的地的通用術語。在一些實施例中,它們可由寄存器、存儲器或具有與所示出的那些名稱或功能不同的名稱或功能的其他存儲區域所實現。例如,在一個實施例中,「DEST1」可以是臨時存儲寄存器或其他存儲區域,而「SRC1」和「SRC2」是第一和第二源存儲寄存器或其他存儲區域,等等。在其他實施例中,SRC和DEST存儲區域中的兩個或更多區域可對應於相同存儲區域中的不同數據存儲元素(例如,SIMD寄存器)。在一個實施例中,例如通過將對第一和第二源數據執行的操作的結果寫回至兩個源寄存器中作為目的地寄存器的那個寄存器,源寄存器中的一個也可以作為目的地寄存器。
圖1A是根據本發明的一個實施例的示例性計算機系統的框圖,該計算機系統被形成為具有包括執行單元以執行指令的處理器。根據本發明,諸如根據在此所描述的實施例,系統100包括諸如處理器102之類的組件,以採用包括邏輯的執行單元來執行算法以處理數據。系統100代表基於可從美國加利福尼亞州聖克拉拉市的英特爾公司獲得的III、Xeontm、XScaletm和/或StrongARMtm微處理器的處理系統,不過也可使用其它系統(包括具有其它微處理器的PC、工程工作站、機頂盒等)。在一個實施例中,樣本系統100可執行可從美國華盛頓州雷蒙德市的微軟公司買到的WINDOWStm作業系統的一個版本,不過也可使用其它作業系統(例如UNIX和Linux)、嵌入式軟體、和/或圖形用戶界面。因此,本發明的各實施例不限於硬體和軟體的任何具體組合。
實施例不限於計算機系統。本發明的替換實施例可被用於其他設備,諸如手持式設備和嵌入式應用。手持式設備的一些示例包括:蜂窩電話、網際網路協議設備、數位相機、個人數字助理(PDA)、手持式PC。嵌入式應用可包括:微控制器、數位訊號處理器(DSP)、晶片上系統、網絡計算機(NetPC)、機頂盒、網絡中樞、廣域網(WAN)交換機、或可執行參照至少一個實施例的一個或多個指令的任何其他系統。
圖1A是計算機系統100的框圖,計算機系統100被形成為具有處理器102,處理器102包括一個或多個執行單元108以執行算法,以執行根據本發明的一個實施例的至少一個指令。參照單處理器桌面或伺服器系統來描述了一個實施例,但替代實施例可被包括在多處理器系統中。系統100是「中樞」系統體系結構的示例。計算機系統100包括處理器102以處理數據信號。處理器102可以是複雜指令集計算機(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、實現指令集組合的處理器或任意其它處理器設備(諸如數位訊號處理器)。處理器102耦合至處理器總線110,處理器總線110可在處理器102和系統100內的其他組件之間傳輸數據信號。系統100的諸個元素執行本領域所熟知的常規功能。
在一個實施例中,處理器102包括第一級(L1)內部高速緩存存儲器104。取決於體系結構,處理器102可具有單個內部高速緩存或多級內部高速緩存。或者,在另一個實施例中,高速緩存存儲器可位於處理器102的外部。其他實施例也可包括內部高速緩存和外部高速緩存的組合,這取決於特定實現和需求。寄存器組106可在多個寄存器(包括整數寄存器、浮點寄存器、狀態寄存器、指令指針寄存器)中存儲不同類型的數據。
執行單元108(包括執行整數和浮點操作的邏輯)也位於處理器102中。處理器102還包括微代碼(ucode)ROM,其存儲用於特定宏指令的微代碼。對於一個實施例,執行單元108包括處理打包指令集109的邏輯。通過將打包指令集109包括在通用處理器102的指令集內並包括相關的電路以執行這些指令,可使用通用處理器102中的打包數據來執行許多多媒體應用所使用的操作。因此,通過將處理器數據總線的全帶寬用於對打包數據進行操作,許多多媒體應用可獲得加速,並更為有效率地執行。這能減少在處理器數據總線上傳輸更小數據單元以在一個時間對一個數據元素執行一個或多個操作的需要。
執行單元108的替換實施例也可被用於微控制器、嵌入式處理器、圖形設備、DSP以及其他類型的邏輯電路。系統100包括存儲器120。存儲器設備120可以是動態隨機存取存儲器(DRAM)設備、靜態隨機存取存儲器(SRAM)設備、快閃記憶體設備或其他存儲器設備。存儲器120可存儲可由處理器102執行的指令和/或數據,數據由數據信號表示。
系統邏輯晶片116耦合至處理器總線110和存儲器120。在所示出的實施例中的系統邏輯晶片116是存儲器控制器中樞(MCH)。處理器102可經由處理器總線110與MCH 116通信。MCH 116提供至存儲器120的高帶寬存儲器路徑118,用於指令和數據存儲,以及用於存儲圖形命令、數據和文本。MCH 116用於引導處理器102、存儲器120以及系統100內的其他組件之間的數據信號,並在處理器總線110、存儲器120和系統I/O 122之間橋接數據信號。在一些實施例中,系統邏輯晶片116可提供耦合至圖形控制器112的圖形埠。MCH 116經由存儲器接口118耦合至存儲器120。圖形卡112通過加速圖形埠(AGP)互連114耦合至MCH 116。
系統100使用外圍設備中樞接口總線122以將MCH 116耦合至I/O控制器中樞(ICH)130。ICH 130經由局部I/O總線提供至一些I/O設備的直接連接。局部I/O總線是高速I/O總線,用於將外圍設備連接至存儲器120、晶片組以及處理器102。一些示例是音頻控制器、固件中樞(快閃記憶體BIOS)128、無線收發機126、數據存儲器124、包括用戶輸入和鍵盤接口的傳統I/O控制器、串行擴展埠(諸如通用串行總線USB)以及網絡控制器134。數據存儲設備124可以包括硬碟驅動器、軟盤驅動器、CD-ROM設備、快閃記憶體設備、或其他大容量存儲設備。
對於系統的另一個實施例,根據一個實施例的指令可被用於晶片上系統。晶片上系統的一個實施例包括處理器和存儲器。用於這樣一個系統的存儲器是快閃記憶體存儲器。快閃記憶體存儲器可位於與處理器和其他系統組件相同的管芯上。此外,諸如存儲器控制器或圖形控制器之類的其他邏輯塊也可位於晶片上系統上。
圖1B示出數據處理系統140,數據處理系統140實現本發明的一個實施例的原理。本領域的技術人員將容易理解,在此描述的諸個實施例可用於替代處理系統,而不背離本發明的實施例的範圍。
計算機系統140包括處理核159,處理核159能執行根據一個實施例的至少一個指令。對於一個實施例,處理核159表示任何類型的體系結構的處理單元,包括但不限於:CISC、RISC或VLIW類型體系結構。處理核159也可適於以一種或多種處理技術來製造,並且通過充分詳細地表示在機器可讀介質上可以便於其製造。
處理核159包括執行單元142、一組寄存器組145以及解碼器144。處理核159也包括對於理解本發明的實施例不是必需的額外電路(沒有示出)。執行單元142用於執行處理核159所接收到的指令。除了執行典型的處理器指令外,執行單元142也執行打包指令集143中的指令,用於對打包數據格式執行操作。打包指令集143包括用於執行本發明的諸個實施例的指令以及其他打包指令。執行單元142通過內部總線而耦合至寄存器組145。寄存器組145表示處理核159上的存儲區域,用於存儲包括數據的信息。如前所述的,可以理解,該存儲區域被用於存儲打包數據不是關鍵。執行單元142耦合至解碼器144。解碼器144用於將處理核159所接收到的指令解碼為控制信號和/或微代碼進入點。響應於這些控制信號和/或微代碼進入點,執行單元142執行合適的操作。在一個實施例中,解碼器用於解釋指令的操作碼,操作碼指示應當對該指令內所指示的對應數據執行何種操作。
處理核159耦合至總線141,用於與多個其他系統設備進行通信,這些系統設備包括但不限於:例如,同步動態隨機存取存儲器(SDRAM)控制器146、靜態隨機存取存儲器(SRAM)控制器147、猝發快閃記憶體接口148、個人計算機存儲卡國際協會(PCMCIA)/緻密快閃記憶體(CF)卡控制器149、液晶顯示器(LCD)控制器150、直接存儲器存取(DMA)控制器151、以及替代的總線主接口152。在一個實施例中,數據處理系統140也包括I/O橋154,用於經由I/O總線153與多個I/O設備進行通信。這樣的I/O設備可包括但不限於:例如,通用異步接收機/發射機(UART)155、通用串行總線(USB)156、藍牙無線UART 157、以及I/O擴展接口158。
數據處理系統140的一個實施例提供了移動通信、網絡通信和/或無線通信,並提供了能夠執行SIMD操作的處理核159,SIMD操作包括文本串比較操作。處理核159可編程有多種音頻、視頻、圖像和通信算法,包括離散變換(諸如Walsh-Hadamard變換、快速傅立葉變換(FFT)、離散餘弦變換(DCT)、以及它們相應的逆變換)、壓縮/解壓縮技術(諸如色彩空間變換)、視頻編碼運動估計或視頻解碼運動補償、以及調製/解調(MODEM)功能(諸如脈衝編碼調製PCM)。
圖1C示出了能夠執行用於提供向量分散操作和/或聚集操作功能的指令的數據處理系統的其他替換實施例。根據一個替代實施例,數據處理系統160可包括主處理器166、SIMD協處理器161、高速緩存處理器167以及輸入/輸出系統168。輸入/輸出系統168可選地耦合至無線接口169。SIMD協處理器161能夠執行包括根據一個實施例的指令的操作。處理核170可適於以一種或多種處理技術來製造,並且通過充分詳細地表示在機器可讀介質上可以便於包括處理核170的數據處理系統160的全部或一部分的製造。
對於一個實施例,SIMD協處理器161包括執行單元162以及一組寄存器組164。主處理器166的一個實施例包括解碼器165,用於識別指令集163的指令,指令集163包括根據一個實施例的用於由執行單元162所執行的指令。對於替換實施例,SIMD協處理器161也包括解碼器165B的至少一部分以解碼指令集163的指令。處理核170也包括對於理解本發明的實施例不是必需的額外電路(沒有示出)。
在操作中,主處理器166執行數據處理指令流,數據處理指令流控制通用類型的數據處理操作,包括與高速緩存存儲器167以及輸入/輸入系統168的交互。SIMD協處理器指令嵌入數據處理指令流中。主處理器166的解碼器165將這些SIMD協處理器指令識別為可由附連的SIMD協處理器161來執行的類型。因此,主處理器166在協處理器總線171上發出這些SIMD協處理器指令(或表示SIMD協處理器指令的控制信號),任何附連的SIMD協處理器從協處理器總線171接收到這些指令。在該情況中,SIMD協處理器161將接受並執行任何接收到的針對該SIMD協處理器的SIMD協處理器指令。
可經由無線接口169接收數據以通過SIMD協處理器指令進行處理。對於一個示例,語音通信可以數位訊號的形式被接收到,其將被SIMD協處理器指令所處理,以重新生成表示該語音通信的數字音頻採樣。對於另一個示例,壓縮音頻和/或視頻可以數字位流的形式被接收到,其將被SIMD協處理器指令所處理,以重新生成數字音頻採樣和/或運動視頻幀。對於處理核170的一個實施例,主處理器166和SIMD協處理器161被集成在單個處理核170中,該單個處理核170包括執行單元162、一組寄存器組164、以及解碼器165以識別指令集163的指令,指令集163包括根據一個實施例的指令。
圖2是包括邏輯電路以執行根據本發明的一個實施例的指令的處理器200的微體系結構的框圖。在一些實施例中,根據一個實施例的指令可被實現為對具有字節大小、字大小、雙字大小、四字大小等並具有諸多數據類型(諸如單精度和雙精度整數和浮點數據類型)的數據元素執行操作。在一個實施例中,有序前端201是處理器200的一部分,其獲取將要被執行的指令,並準備這些指令以在稍後供處理器流水線使用。前端201可包括諸個單元。在一個實施例中,指令預取器226從存儲器獲取指令,並將指令饋送至指令解碼器228,指令解碼器228隨後解碼或解釋指令。例如,在一個實施例中,解碼器將所接收到的指令解碼為機器可執行的被稱為「微指令」或「微操作」(也稱為微操作數或uop)的一個或多個操作。在其他實施例中,解碼器將指令解析為操作碼和對應的數據及控制欄位,它們被微體系結構用於執行根據一個實施例的操作。在一個實施例中,追蹤高速緩存230接受經解碼的微操作,並將它們組裝為程序有序序列或微操作隊列234中的蹤跡,以用於執行。當追蹤高速緩存230遇到複雜指令時,微代碼ROM232提供完成操作所需的微操作。
一些指令被轉換為單個微操作,而其他指令需要若干個微操作以完成整個操作。在一個實施例中,如果需要超過四個微操作來完成指令,則解碼器228訪問微代碼ROM 232以進行該指令。對於一個實施例,指令可被解碼為少量的微操作以用於在指令解碼器228處進行處理。在另一個實施例中,如果需要若干微操作來完成操作,則可將指令存儲在微代碼ROM 232中。追蹤高速緩存230參考進入點可編程邏輯陣列(PLA)來確定正確的微指令指針,以從微代碼ROM 232讀取微代碼序列以完成根據一個實施例的一個或多個指令。在微代碼ROM 232完成對於指令的微操作序列化之後,機器的前端201恢復從追蹤高速緩存230提取微操作。
無序執行引擎203是將指令準備好用於執行的單元。無序執行邏輯具有若干個緩衝器,用於將指令流平滑並且重排序,以優化指令流進入流水線後的性能,並調度指令流以供執行。分配器邏輯分配每個微操作需要的機器緩衝器和資源,以用於執行。寄存器重命名邏輯將諸個邏輯寄存器重命名為寄存器組中的條目。在指令調度器(存儲器調度器、快速調度器202、慢速/通用浮點調度器204、簡單浮點調度器206)之前,分配器也將每個微操作的條目分配在兩個微操作隊列中的一個之中,一個微操作隊列用於存儲器操作,另一個微操作隊列用於非存儲器操作。微操作調度器202、204、206基於對它們的依賴輸入寄存器操作數源的準備就緒以及微操作完成它們的操作所需的執行資源的可用性來確定微操作何時準備好用於執行。一個實施例的快速調度器202可在主時鐘周期的每半個上進行調度,而其他調度器可僅僅在每個主處理器時鐘周期上調度一次。調度器對分配埠進行仲裁以調度微操作以便執行。
寄存器組208、210位於調度器202、204、206和執行塊211中的執行單元212、214、216、218、220、222、224之間。也存在單獨的寄存器組208、210,分別用於整數和浮點操作。一個實施例的每個寄存器組208、210也包括旁路網絡,旁路網絡可將剛完成的還沒有被寫入寄存器組的結果旁路或轉發給新的依賴微操作。整數寄存器組208和浮點寄存器組210也能夠彼此通信數據。對於一個實施例,整數寄存器組208被劃分為兩個單獨的寄存器組,一個寄存器組用於低階的32位數據,第二個寄存器組用於高階的32位數據。一個實施例的浮點寄存器組210具有128位寬度的條目,因為浮點指令通常具有從64至128位寬度的操作數。
執行塊211包括執行單元212、214、216、218、220、222、224,在執行單元212、214、216、218、220、222、224中實際執行指令。該區塊包括寄存器組208、210,寄存器組208、210存儲微指令需要執行的整數和浮點數據操作數值。一個實施例的處理器200由若干個執行單元所組成。一個實施例的處理器200包括有若干個執行單元:地址生成單元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮點ALU222、浮點移動單元224。對於一個實施例,浮點執行塊222、224執行浮點、MMX、SIMD、SSE以及其他操作。一個實施例的浮點ALU 222包括64位/64位浮點除法器,用於執行除法、平方根、以及餘數微操作。對於本發明的諸個實施例,涉及浮點值的指令可使用浮點硬體來處理。在一個實施例中,ALU操作進入高速ALU執行單元216、218。一個實施例的高速ALU216、218可執行高速操作,有效等待時間為半個時鐘周期。對於一個實施例,大多數複雜整數操作進入慢速ALU 220,因為慢速ALU 220包括用於長等待時間類型操作的整數執行硬體,諸如,乘法器、移位器、標記邏輯和分支處理。存儲器加載/存儲操作由AGU 212、214來執行。對於一個實施例,整數ALU 216、218、220被描述為對64位數據操作數執行整數操作。在替換實施例中,ALU 216、218、220可被實現為支持大範圍的數據位,包括16、32、128、256等等。類似地,浮點單元222、224可被實現為支持具有多種寬度的位的操作數範圍。對於一個實施例,浮點單元222、224可結合SIMD和多媒體指令對128位寬度打包數據操作數進行操作。
在一個實施例中,在父加載完成執行之前,微操作調度器202、204、206就分派依賴操作。因為在處理器200中微操作被投機地調度和執行,所以處理器200也包括處理存儲器未命中的邏輯。如果數據加載在數據高速緩存中未命中,則可能存在帶有臨時錯誤數據離開調度器並運行在流水線中的依賴操作。重放機制跟蹤使用錯誤數據的指令,並重新執行這些指令。僅僅依賴操作需要被重放,而允許獨立操作完成。處理器的一個實施例的調度器和重放機制也被設計為捕捉提供向量分散操作和/或聚集操作功能的指令。
術語「寄存器」指代被用作為指令的一部分以標識操作數的板上處理器存儲位置。換句話說,寄存器是那些處理器外部(從編程者的角度來看)可用的處理器存儲位置。然而,一實施例的寄存器不限於表示特定類型的電路。相反,一實施例的寄存器能夠存儲並提供數據,能夠執行在此所述的功能。在此所述的寄存器可由處理器中的電路使用任何數量不同技術來實現,諸如,專用物理寄存器、使用寄存器重命名的動態分配物理寄存器、專用和動態分配物理寄存器的組合,等等。在一個實施例中,整數寄存器存儲三十二位整數數據。一個實施例的寄存器組也包含八個多媒體SIMD寄存器,用於打包數據。對於以下討論,寄存器應被理解為設計成保存打包數據的數據寄存器,諸如來自美國加利福尼亞州聖克拉拉市的英特爾公司的啟用了MMX技術的微處理器的64位寬MMXtm寄存器(在一些實例中也稱為「mm寄存器)。」這些MMX寄存器(可用在整數和浮點格式中)可與伴隨SIMD和SSE指令的打包數據元素一起操作。類似地,涉及SSE2、SSE3、SSE4或更新的技術(統稱為「SSEx」)的128位寬XMM寄存器也可被用於保持這樣打包數據操作數。在一個實施例中,在存儲打包數據和整數數據時,寄存器不需要區分這兩類數據類型。在一個實施例中,整數和浮點數據可被包括在相同的寄存器組中,或被包括在不同的寄存器組中。進一步的,在一個實施例中,浮點和整數數據可被存儲在不同的寄存器中,或被存儲在相同的寄存器中。
在下述附圖的示例中,描述了多個數據操作數。圖3A示出根據本發明的一個實施例的多媒體寄存器中的多種打包數據類型表示。圖3A示出了打包字節310、打包字320、打包雙字(dword)330的用於128位寬操作數的數據類型。本示例的打包字節格式310是128位長,並且包含十六個打包字節數據元素。字節在此被定義為是8位數據。每一個字節數據元素的信息被存儲為:對於字節0存儲在位7到位0,對於字節1存儲在位15到位8,對於字節2存儲在位23到位16,最後對於字節15存儲在位120到位127。因此,在該寄存器中使用了所有可用的位。該存儲配置提高了處理器的存儲效率。同樣,因為訪問了十六個數據元素,所以現在可對十六個數據元素並行地執行一個操作。
通常,數據元素是單獨的數據片,與具有相同長度的其他數據元素一起存儲在單個寄存器或存儲器位置中。在涉及SSEx技術的打包數據序列中,存儲在XMM寄存器中的數據元素的數目是128位除以單個數據元素的位長。類似地,在涉及MMX和SSE技術的打包數據序列中,存儲在MMX寄存器中的數據元素的數目是64位除以單個數據元素的位長。雖然圖3A中所示的數據類型是128位長,但本發明的諸個實施例也可操作64位寬、256位寬、512位寬或其他大小的操作數。本示例的打包字格式320是128位長,並且包含八個打包字數據元素。每個打包字包含十六位的信息。圖3A的打包雙字格式330是128位長,並且包含四個打包雙字數據元素。每個打包雙字數據元素包含三十二位信息。打包四字是128位長,並包含兩個打包四字數據元素。
圖3B示出了替代的寄存器內數據存儲格式。每個打包數據可包括超過一個獨立數據元素。示出了三個打包數據格式:打包半數據元素314、打包單數據元素342、以及打包雙數據元素343。打包半數據元素341、打包單數據元素342、打包雙數據元素343的一個實施例包含定點數據元素。對於替代實施例中,一個或多個打包半數據元素341、打包單數據元素342、打包雙數據元素343可包含浮點數據元素。打包半數據元素341的一個替代實施例是一百二十八位長度,包含八個16位數據元素。打包單數據元素342的一個替代實施例是一百二十八位長度,且包含四個32位數據元素。打包雙數據元素343的一個實施例是一百二十八位長度,且包含兩個64位數據元素。可以理解的是,這樣的打包數據格式進一步可被擴展至其他寄存器長度,例如,96位、160位、192位、224位、256位、512位或更長。
圖3C示出了根據本發明的一個實施例的多媒體寄存器中的多種有符號和無符號打包數據類型表示。無符號打包字節表示344示出了SIMD寄存器中的無符號打包字節的存儲。每一個字節數據元素的信息被存儲為:對於字節0存儲在位7到位0,對於字節1存儲在位15到位8,對於字節2存儲在位23到位16,等等,最後對於字節15存儲在位120到位127。因此,在該寄存器中使用了所有可用的位。該存儲配置可提高處理器的存儲效率。同樣,因為訪問了十六個數據元素,所以可對十六個數據元素並行地執行一個操作。有符號打包字節表示345示出了有符號打包字節的存儲。注意到,每個字節數據元素的第八位是符號指示符。無符號打包字表示346示出了SIMD寄存器中字7到字0如何被存儲。有符號打包字表示347類似於無符號打包字寄存器內表示346。注意到,每個字數據元素的第十六位是符號指示符。無符號打包雙字表示348示出了雙字數據元素如何存儲。有符號打包雙字表示349類似於無符號打包雙字寄存器內表示348。注意到,必要的符號位是每個雙字數據元素的第三十二位。
圖3D是與可從美國加利福尼亞州聖克拉拉市的英特爾公司的全球資訊網(www)intel.com/products/processor/manuals/上獲得的「64和IA-32英特爾體系結構軟體開發者手冊組合卷2A和2B:指令集參考A-Z(64and IA-32Intel Architecture Software Developer's Manual Combined Volumes2A and 2B:Instruction Set Reference A-Z,)」中描述的操作碼格式類型相對應的具有32或更多位的操作編碼(操作碼)格式360以及寄存器/存儲器操作數尋址模式的一個實施例的描述。在一個實施例中,可通過一個或更多個欄位361和362來編碼指令。可以標識每個指令高達兩個操作數位置,包括高達兩個源操作數標識符364和365。對於一個實施例,目的地操作數標識符366與源操作數標識符364相同,而在其他實施例中它們不相同。對於替代實施例,目的地操作數標識符366與源操作數標識符365相同,而在其他實施例中它們不相同。在一個實施例中,由源操作數標識符364和365所標識的源操作數中的一個被指令的結果所覆寫,而在其他實施例中,標識符364對應於源寄存器元素,而標識符365對應於目的地寄存器元素。對於一個實施例,操作數標識符364和365可被用於標識32位或64位的源和目的地操作數。
圖3E示出了具有四十個或更多位的另一個替代操作編碼(操作碼)格式370。操作碼格式370對應於操作碼格式360,並包括可選的前綴字節378。根據一個實施例的指令可通過欄位378、371和372中的一個或多個來編碼。通過源操作數標識符374和375以及通過前綴字節378,可標識每個指令中高達兩個操作數位置。對於一個實施例,前綴字節378可被用於標識32位或64位的源和目的地操作數。對於一個實施例,目的地操作數標識符376與源操作數標識符374相同,而在其他實施例中它們不相同。對於替代實施例,目的地操作數標識符376與源操作數標識符375相同,而在其他實施例中它們不相同。在一個實施例中,指令對由操作數標識符374和375所標識的一個或多個操作數進行操作,並且由操作數標識符374和375所標識的一個或多個操作數被指令的結果所覆寫,然而在其他實施例中,由標識符374和375所標識的操作數被寫入另一個寄存器中的另一個數據元素中。操作碼格式360和370允許由MOD欄位363和373以及由可選的比例-變址-基址(scale-index-base)和位移(displacement)字節所部分指定的寄存器到寄存器尋址、存儲器到寄存器尋址、由存儲器對寄存器尋址、由寄存器對寄存器尋址、直接對寄存器尋址、寄存器至存儲器尋址。
接下來轉到圖3F,在一些替換實施例中,64位(或128位、或256位、或512位或更多)單指令多數據(SIMD)算術操作可經由協處理器數據處理(CDP)指令來執行。操作編碼(操作碼)格式380示出了一個這樣的CDP指令,其具有CDP操作碼欄位382和389。對於替代實施例,該類型CDP指令操作可由欄位383、384、387和388中的一個或多個來編碼。可以對每個指令標識高達三個操作數位置,包括高達兩個源操作數標識符385和390以及一個目的地操作數標識符386。協處理器的一個實施例可對8、16、32和64位值操作。對於一個實施例,對整數數據元素執行指令。在一些實施例中,使用條件欄位381,可有條件地執行指令。對於一些實施例,源數據大小可通過欄位383來編碼。在一些實施例中,可對SIMD欄位執行零(Z)、負(N)、進位(C)和溢出(V)檢測。對於一些指令,飽和類型可通過欄位384來編碼。
現在轉到圖3G,其描繪了根據另一實施例的與可從美國加利福尼亞州聖克拉拉市的英特爾公司的全球資訊網(www)intel.com/products/processor/manuals/上獲得的「高級向量擴展編程參考(Advanced Vector Extensions Programming Reference)中描述的操作碼格式類型相對應的用於提供向量分散操作和/或聚集操作功能的另一替代操作編碼(操作碼)格式397。
原始x86指令集向1位元組操作碼提供多種地址字節(syllable)格式以及包含在附加字節中的直接操作數,其中可從第一個「操作碼」字節中獲知附加字節的存在。此外,特定字節值被預留給操作碼作為修改符(稱為前綴prefix,因為它們被放置在指令之前)。當256個操作碼字節的原始配置(包括這些特殊前綴值)耗盡時,指定單個字節以跳出(escape)到新的256個操作碼集合。因為添加了向量指令(諸如,SIMD),即便通過使用前綴進行了擴展以後,也需要產生更多的操作碼,並且「兩字節」操作碼映射也已經不夠。為此,將新指令加入附加的映射中,附加的映射使用兩字節加上可選的前綴作為標識符。
除此外,為了便於在64位模式中實現額外的寄存器,在前綴和操作碼(以及任何的用於確定操作碼所需的跳出字節)之間使用額外的前綴(被稱為「REX」)。在一個實施例中,REX具有4個「有效載荷」位,以指示在64位模式中使用附加的寄存器。在其他實施例中,可具有比4位更少或更多的位。至少一個指令集的通用格式(一般對應于格式360和/或格式370)被一般地示出如下:
[prefixes][rex]escape[escape2]opcode modrm(等等)
操作碼格式397對應於操作碼格式370,並包括可選的VEX前綴字節391(在一個實施例中,以十六進位的C4開始)以替換大部分的其他公共使用的傳統指令前綴字節和跳出代碼。例如,以下示出了使用兩個欄位來編碼指令的實施例,其可在原始指令中存在第二跳出代碼時、或在需要在REX欄位中使用額外位(諸如,XB和W欄位)時被使用。在以下所示的實施例中,傳統跳出由新的跳出值所表示,傳統前綴被完全壓縮為「有效載荷(payload)」字節的一部分,傳統前綴被重新申明並可用於未來的擴展,第二跳出代碼被壓縮在「映射(map)」欄位中且未來的映射或特徵空間可用,並且加入新的特徵(諸如,增加的向量長度以及額外的源寄存器區分符)。
根據一個實施例的指令可通過欄位391和392中的一個或多個來編碼。通過欄位391與源操作碼標識符374和375以及可選的比例-變址-基址(scale-index-base,SIB)標識符393、可選位移標識符394以及可選直接字節395相結合,可以為每個指令標識高達四個操作數位置。對於一個實施例,VEX前綴字節391可被用於標識32位或64位的源和目的地操作數和/或128位或256位SIMD寄存器或存儲器操作數。對於一個實施例,由操作碼格式397所提供的功能可與操作碼格式370形成冗餘,而在其他實施例中它們不同。操作碼格式370和397允許由MOD欄位373以及由可選的SIB標識符393、可選的位移標識符394以及可選的直接標識符395所部分指定的寄存器到寄存器尋址、存儲器到寄存器尋址、由存儲器對寄存器尋址、由寄存器對寄存器尋址、直接對寄存器尋址、寄存器至存儲器尋址。
現在轉到圖3H,其描繪了根據另一實施例的用於提供向量分散操作和/或聚集操作功能的另一替代操作編碼(操作碼)格式398。操作碼格式398對應於操作碼格式370和397,並包括可選的EVEX前綴字節396(在一個實施例中,以十六進位的62開始)以替換大部分的其他公共使用的傳統指令前綴字節和跳出代碼,並提供附加的功能。根據一個實施例的指令可通過欄位396和392中的一個或多個來編碼。通過欄位396與源操作碼標識符374和375以及可選規模化指標(scale-index-base SIB)標識符393、可選位移標識符394以及可選直接字節395相結合,可以標識每個指令高達四個操作數位置和掩碼。對於一個實施例,EVEX前綴字節396可被用於標識32位或64位的源和目的地操作數和/或128位、256位或512位SIMD寄存器或存儲器操作數。對於一個實施例,由操作碼格式398所提供的功能可與操作碼格式370或397形成冗餘,而在其他實施例中它們不同。操作碼格式398允許由MOD欄位373以及由可選的(SIB)標識符393、可選的位移標識符394以及可選的直接標識符395所部分指定的利用掩碼的寄存器到寄存器尋址、存儲器到寄存器尋址、由存儲器對寄存器尋址、由寄存器對寄存器尋址、直接對寄存器尋址、寄存器至存儲器尋址。至少一個指令集的通用格式(一般對應于格式360和/或格式370)被一般地示出如下:
evex1RXBmmmmm WvvvLpp evex4opcode modrm[sib][disp][imm]
對於一個實施例,根據EVEX格式398編碼的指令可具有附加的「有效載荷」位,這些附加的「有效載荷」位可利用附加的新特徵來提供向量分散操作和/或聚集操作功能,附加的新特徵諸如例如用戶可配置的掩碼寄存器、或附加的操作數、或來自於128位、256位或512位向量寄存器或備選的更多寄存器的選擇等等。
例如,在VEX格式397可用於利用隱式掩碼來提供向量分散操作和/或聚集操作功能的場合中,或該附加操作是一元操作(諸如類型轉換)的場合中,EVEX格式398可被用於利用顯式用戶可配置掩碼來提供向量分散操作和/或聚集操作功能,當該附加操作是二元操作(諸如加法或乘法)時,需要一附加操作數。EVEX格式398的一些實施例還可用於在該附加操作是三元操作的場合時提供向量分散操作和/或聚集操作功能以及隱式完成掩碼。附加地,在VEX格式397可用於在128位或256位寄存器上提供向量分散操作和/或聚集操作功能的場合,EVEX格式398可用於在128位、256位、512位或更大(或更小)的向量寄存器上提供向量分散操作和/或聚集操作功能。因此,用於提供向量分散操作和/或聚集操作功能的指令可消除用於附加操作的指令與用於存儲器操作(諸如聚集或分散數據)的指令之間的依賴關係。
通過以下示例說明用於提供向量分散操作和/或聚集操作功能的示例指令:
圖4A是示出根據本發明的至少一個實施例的有序流水線以及寄存器重命名級、無序發布/執行流水線的框圖。圖4B是示出根據本發明的至少一個實施例的要被包括在處理器中的有序體系結構核以及寄存器重命名邏輯、無序發布/執行邏輯的框圖。圖4A中的實線框示出了有序流水線,虛線框示出了寄存器重命名、無序發布/執行流水線。類似地,圖4B中的實線框示出了有序體系結構邏輯,而虛線框示出了寄存器重命名邏輯以及無序發布/執行邏輯。
在圖4A中,處理器流水線400包括提取級402、長度解碼級404、解碼級406、分配級408、重命名級410、調度(也稱為分派或發布)級412、寄存器讀/存儲器讀級414、執行級416、寫回/存儲器寫級418、異常處理級422和提交級424。
在圖4B中,箭頭指示兩個或更多個單元之間的耦合,且箭頭的方向指示那些單元之間的數據流的方向。圖4B示出了包括耦合到執行引擎單元450的前端單元430,且執行引擎單元和前端單元兩者都耦合到存儲器單元470的處理器核490。
核490可以是精簡指令集合計算(RISC)核、複雜指令集合計算(CISC)核、非常長的指令字(VLIW)核或混合或替代核類型。作為另一個選項,核490可以是專用核,諸如網絡或通信核、壓縮引擎、圖形核或類似物。
前端單元430包括耦合到指令高速緩存單元432的分支預測單元434,該高速緩存單元436被耦合到指令翻譯後備緩衝器(TLB)438,該指令翻譯後備緩衝器被耦合到解碼單元440。解碼單元或解碼器可解碼指令,並生成一個或多個微操作、微代碼進入點、微指令、其他指令、或其他控制信號作為輸出,這些輸出是從原始指令中解碼出、或以其他方式反映原始指令、或是從原始指令中推導而出的。解碼器可使用各種不同的機制來實現。合適的機制的示例包括但不限於:查找表、硬體實現、可編程邏輯陣列(PLA)、微代碼只讀存儲器(ROM)等等。指令高速緩存單元434進一步耦合至存儲器單元470中的第二級(L2)高速緩存單元476。解碼單元440耦合至執行引擎單元450中的重命名/分配器單元452。
執行引擎單元450包括重命名/分配器單元452,該重命名/分配器單元454耦合至隱退單元456和一個或多個調度器單元1056的集合。調度器單元456表示任何數目的不同調度器,包括預留站、中央指令窗等。調度器單元456被耦合到物理寄存器組單元458。物理寄存器組單元458中的每一個表示一個或多個物理寄存器組,其中不同的物理寄存器組存儲一個或多個不同的數據類型(諸如標量整數、標量浮點、打包整數、打包浮點、向量整數、向量浮點、等等)、狀態(諸如,指令指針是將要被執行的下一個指令的地址)等等。物理寄存器組單元458被隱退單元454所覆蓋,以示出可實現寄存器重命名和無序執行的多種方式(諸如,使用重排序緩衝器和隱退寄存器組、使用未來文件(future file)、歷史緩衝器、隱退寄存器組、使用寄存器映射和寄存器池等等)。通常,體系結構寄存器從處理器外部或從編程者的視角來看是可見的。這些寄存器不限於任何已知的特定電路類型。多種不同類型的寄存器可適用,只要它們能夠存儲並提供在此所述的數據。合適的寄存器的示例包括但不限於:專用物理寄存器、使用寄存器重命名的動態分配物理寄存器、專用物理寄存器和動態分配物理寄存器的組合等等。隱退單元454和物理寄存器組單元458耦合至執行群集460。執行群集460包括一個或多個執行單元462的集合和一個或多個存儲器訪問單元464的集合。執行單元462可以執行各種操作(例如,移位、加法、減法、乘法),以及對各種類型的數據(例如,標量浮點、打包整數、打包浮點、向量整型、向量浮點)執行。儘管某些實施例可以包括專用於特定功能或功能集合的多個執行單元,但其他實施例可包括僅一個執行單元或全部執行所有函數的多個執行單元。調度器單元456、物理寄存器組單元458、執行群集460被示出為可能是複數個,因為某些實施例為某些數據/操作類型創建了諸個單獨流水線(例如,均具有各自調度器單元、物理寄存器組單元和/或執行群集的標量整數流水線、標量浮點/打包整數/打包浮點/向量整數/向量浮點流水線、和/或存儲器訪問流水線,以及在單獨的存儲器訪問流水線的情況下特定實施例被實現為僅僅該流水線的執行群集具有存儲器訪問單元464)。還應當理解,在分開的流水線被使用的情況下,這些流水線中的一個或多個可以為無序發布/執行,並且其餘流水線可以為有序發布/執行。
存儲器訪問單元464的集合被耦合到存儲器單元470,該存儲器單元472包括耦合到數據高速緩存單元474的數據TLB單元472,其中數據高速緩存單元474耦合到二級(L2)高速緩存單元476。在一個示例性實施例中,存儲器訪問單元464可包括加載單元、存儲地址單元和存儲數據單元,其中的每一個均耦合至存儲器單元470中的數據TLB單元472。L2高速緩存單元476被耦合到一個或多個其他級的高速緩存,並最終耦合到主存儲器。
作為示例,示例性寄存器重命名的、無序發布/執行核體系結構可以如下實現流水線400:1)指令提取438執行提取和長度解碼級402和404;2)解碼單元440執行解碼級406;3)重命名/分配器單元452執行分配級408和重命名級410;4)調度器單元456執行調度級412;5)物理寄存器組單元458和存儲器單元470執行寄存器讀/存儲器讀級414;執行群集460執行執行級416;6)存儲器單元470和物理寄存器組單元458執行寫回/存儲器寫級418;7)各單元可牽涉到異常處理級422;以及8)隱退單元454和物理寄存器組單元458執行提交級424。
核490可支持一個或多個指令集(諸如,x86指令集(具有增加有更新版本的一些擴展)、加利福尼亞州桑尼威爾的MIPS技術公司的MIPS指令集、加利福尼亞州桑尼威爾的ARM控股公司的ARM指令集(具有可選附加擴展,諸如NEON))。
應當理解,核可支持多線程化(執行兩個或更多個並行的操作或線程的集合),並且可以按各種方式來完成該多線程化,此各種方式包括時分多線程化、同步多線程化(其中單個物理核為物理核正同步多線程化的各線程中的每一個線程提供邏輯核)、或其組合(例如,時分提取和解碼以及此後諸如用超線程化技術來同步多線程化)。
儘管在無序執行的上下文中描述了寄存器重命名,但應當理解,可以在有序體系結構中使用寄存器重命名。雖然處理器的所示出的實施例也包括單獨的指令和數據高速緩存單元434/474以及共享的L2高速緩存單元476,但替代的實施例也可具有用於指令和數據的單個內部高速緩存,諸如例如第一級(L1)內部高速緩存、或多個級別的內部高速緩存。在某些實施例中,該系統可包括內部高速緩存和在核和/或處理器外部的外部高速緩存的組合。或者,所有高速緩存都可以在核和/或處理器的外部。
圖5是根據本發明的實施例的單核處理器和多核處理器500的框圖,具有集成的存儲器控制器和圖形器件。圖5的實線框示出了處理器500,處理器500具有單個核502A、系統代理510、一組一個或多個總線控制器單元516,而可選附加的虛線框示出了替代的處理器500,其具有多個核502A-N、位於系統代理單元510中的一組一個或多個集成存儲器控制器單元514以及集成圖形邏輯508。
存儲器層次結構包括在各核內的一個或多個級別的高速緩存、一個或多個共享高速緩存單元506的集合、以及耦合至集成存儲器控制器單元514的集合的外部存儲器(未示出)。該共享高速緩存單元506的集合可以包括一個或多個中間級高速緩存,諸如二級(L2)、三級(L3)、四級(L4)或其他級別的高速緩存、末級高速緩存(LLC)、和/或其組合。雖然在一個實施例中基於環形的互連單元512將集成圖形邏輯508、該組共享高速緩存單元506和系統代理單元510進行互連,但替代的實施例也使用任何數量的公知技術來互連這些單元。
在一些實施例中,核502A-N中的一個或多個核能夠多線程化。系統代理510包括協調和操作核502A-N的那些組件。系統代理單元510可包括例如功率控制單元(PCU)和顯示單元。PCU可以是或包括調整核502A-N和集成圖形邏輯508的功率狀態所需的邏輯和組件。顯示單元用於驅動一個或多個外部連接的顯示器。
核502A-N可以是在體系結構和/或指令集上同構的或異構的。例如,核502A-N中的一些可以是有序的,而另一些是無序的。如另一個示例,核502A-N中的兩個或多個核能夠執行相同的指令集,而其他核能夠執行該指令集中的一個子集或執行不同的指令集。
處理器可以是通用功能處理器,諸如酷睿(CoreTM)i3、i5、i7、2Duo和Quad、至強(XeonTM)、安騰(ItaniumTM)、XScaleTM或StrongARMTM處理器,這些均可以從加利福尼亞聖克拉拉市的Intel公司獲得。或者,處理器可以來自另一個公司,諸如來自ARM控股公司、MIPS、等等。處理器可以是專用處理器,諸如,例如,網絡或通信處理器、壓縮引擎、圖形處理器、協處理器、嵌入式處理器、或類似物。該處理器可以被實現在一個或多個晶片上。處理器500可以是一個或多個襯底的一部分,和/或可以使用諸如例如BiCMOS、CMOS或NMOS等的多個加工技術中的任何一個技術將其實現在一個或多個襯底上。
圖6-8是適於包括處理器500的示例性系統,圖9是可包括一個或多個核502的示例性晶片上系統(SoC)。本領域已知的對膝上型設備、臺式機、手持PC、個人數字助理、工程工作站、伺服器、網絡設備、網絡集線器、交換機、嵌入式處理器、數位訊號處理器(DSP)、圖形設備、視頻遊戲設備、機頂盒、微控制器、蜂窩電話、可攜式媒體播放器、手持設備以及各種其他電子設備的其他系統設計和配置也是合適的。一般來說,能夠納入本文中所公開的處理器和/或其它執行邏輯的大量系統和電子設備一般都是合適的。
現在參考圖6,所示出的是根據本發明一個實施例的系統600的框圖。系統600可包括耦合至圖形存儲器控制器中樞(GMCH)620的一個或多個處理器610、615。附加處理器615的可選性質用虛線表示在圖6中。
每個處理器610、615可以是處理器500的某些版本。然而,應該理解,集成圖形邏輯和集成存儲器控制單元不太可能出現在處理器610、615中。圖6示出GMCH 620可耦合至存儲器640,該存儲器640可以是例如動態隨機存取存儲器(DRAM)。對於至少一個實施例,DRAM可以與非易失性高速緩存相關聯。
GMCH 620可以是晶片組或晶片組的一部分。GMCH 620可以與(多個)處理器610、615進行通信,並控制處理器610、615與存儲器640之間的交互。GMCH 620還可擔當(多個)處理器610、615和系統600的其它元件之間的加速總線接口。對於至少一個實施例,GMCH 620經由諸如前端總線(FSB)695之類的多點總線與(多個)處理器610、615進行通信。
此外,GMCH 620耦合至顯示器645(諸如平板顯示器)。GMCH 620可包括集成圖形加速器。GMCH 620還耦合至輸入/輸出(I/O)控制器中樞(ICH)650,該輸入/輸出(I/O)控制器中樞(ICH)650可用於將各種外圍設備耦合至系統600。在圖6的實施例中作為示例示出了外部圖形設備660以及另一外圍設備670,該外部圖形設備660可以是耦合至ICH 650的分立圖形設備。
替代地,系統600中還可存在附加或不同的處理器。例如,附加(多個)處理器615可包括與處理器610相同的附加(多個)處理器、與處理器610異類或不對稱的附加(多個)處理器、加速器(諸如圖形加速器或數位訊號處理(DSP)單元)、現場可編程門陣列或任何其它處理器。按照包括體系結構、微體系結構、熱、功耗特徵等等優點的度量譜,(多個)物理資源610、615之間存在各種差別。這些差別會有效顯示為處理器610、615之間的不對稱性和異類性。對於至少一個實施例,各種處理器610、615可駐留在同一管芯封裝中。
現在參照圖7,所示出的是根據本發明實施例的第二系統700的框圖。如圖7所示,多處理器系統700是點對點互連繫統,並包括經由點對點互連750耦合的第一處理器770和第二處理器780。處理器770和780中的每一個可以是處理器500的一些版本,如處理器610、615中的一個或多個一樣。
雖然僅以兩個處理器770、780來示出,但應理解本發明的範圍不限於此。在其它實施例中,在給定處理器中可存在一個或多個附加處理器。
處理器770和780被示為分別包括集成存儲器控制器單元772和782。處理器770還包括作為其總線控制器單元的一部分的點對點(P-P)接口776和778;類似地,第二處理器780包括點對點接口786和788。處理器770、780可以使用點對點(P-P)電路778、788經由P-P接口750來交換信息。如圖7所示,IMC 772和782將各處理器耦合至相應的存儲器,即存儲器732和存儲器734,這些存儲器可以是本地附連至相應的處理器的主存儲器的一部分。
處理器770、780各自可使用點對點接口電路776、794、786、798經由單獨的P-P接口752、754與晶片組790交換信息。晶片組790還可經由高性能圖形接口739與高性能圖形電路738交換信息。
共享高速緩存器(未示出)可以被包括在任一處理器中或者兩個處理器的外面,通過P-P互連,與處理器相連接,以便如果處理器被置於低功率模式下,處理器中的任何一個或兩者的本地緩存信息可以存儲在共享高速緩存器中。
晶片組790可經由接口796耦合至第一總線716。在一個實施例中,第一總線716可以是外圍部件互連(PCI)總線,或諸如PCI Express總線或其它第三代I/O互連總線之類的總線,但本發明的範圍並不受此限制。
如圖7所示,各種I/O設備714可以連同總線橋718耦合到第一總線716,總線橋718將第一總線716耦合至第二總線720。在一個實施例中,第二總線720可以是低引腳數(LPC)總線。在一個實施例中,多個設備可以耦合到第二總線720,包括例如鍵盤和/或滑鼠722、通信設備727以及可以包括指令/代碼和數據730的存儲單元728(諸如盤驅動器或其它海量存儲設備)。進一步地,音頻I/O 724可以耦合到第二總線720。注意,其它體系結構是可能的。例如,取代圖7的點對點體系結構,系統可以實現多站總線或其它這類體系結構。
現在參照圖8,所示出的是根據本發明實施例的第三系統800的框圖。圖7和8中的類似元件使用類似附圖標記,且在圖8中省略了圖7的某些方面以避免混淆圖8的其它方面。
圖8示出了處理器870、880可以分別包括集成的存儲器和I/O控制邏輯(「CL」)872和882。對於至少一個實施例,CL 872、882可包括諸如以上聯繫圖5和7所描述的集成存儲器控制器單元。此外。CL 872、882還可包括I/O控制邏輯。圖8不僅解說了耦合至CL 872、882的存儲器832、834,而且還解說了同樣耦合至控制邏輯872、882的I/O設備814。傳統I/O設備815被耦合至晶片組890。
現在參照圖9,所示出的是根據本發明一個實施例的SoC 900的框圖。在圖5中,相似的部件具有同樣的附圖標記。另外,虛線框是更先進的SoC的可選特徵。在圖9中,互連單元902被耦合至:應用處理器910,包括一個或多個核502A-N的集合和共享高速緩存單元506;系統代理單元510;總線控制器單元516;集成存儲器控制器單元514;一個或多個媒體處理器920的集合,可包括集成圖形邏輯508、用於提供靜態和/或視頻照相機功能的圖像處理器924、用於提供硬體音頻加速的音頻處理器926、以及用於提供視頻編碼/解碼加速的視頻處理器928;靜態隨機存取存儲器(SRAM)單元930;直接存儲器存取(DMA)單元932;以及顯示單元940,用於耦合至一個或多個外部顯示器。
圖10示出處理器,包括中央處理單元(CPU)和圖形處理單元(GPU),該處理器可執行根據一個實施例的至少一個指令。在一個實施例中,執行根據至少一個實施例的操作的指令可由CPU來執行。在另一個實施例中,指令可以由GPU來執行。在還有一個實施例中,指令可以由GPU和CPU所執行的操作的組合來執行。例如,在一個實施例中,根據一個實施例的指令可被接收,並被解碼用於在GPU上執行。然而,經解碼的指令中的一個或多個操作可由CPU來執行,並且結果被返回給GPU用於指令的最終隱退。相反,在一些實施例中,CPU可作為主處理器,而GPU作為協處理器。
在一些實施例中,受益於高度並行吞吐量的指令可由GPU來執行,而受益於處理器(這些處理器受益於深度流水線體系結構)的性能的指令可由CPU來執行。例如,圖形、科學應用、金融應用以及其他並行工作負荷可受益於GPU的性能並相應地執行,而更多的序列化應用,諸如作業系統內核或應用代碼更適於CPU。
在圖10中,處理器1000包括:CPU 1005、GPU 1010、圖像處理器1015、視頻處理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、顯示設備1040、高清晰度多媒體接口(HDMI)控制器1045、MIPI控制器1050、快閃記憶體存儲器控制器1055、雙數據率(DDR)控制器1060、安全引擎1065、I2S/I2C(集成跨晶片聲音/跨集成電路)接口1070。其他邏輯和電路可被包括在圖10的處理器中,包括更多的CPU或GPU以及其他外圍設備接口控制器。
至少一個實施例的一個或多個方面可以由存儲在機器可讀介質上的代表性數據來實現,該數據表示處理器中的各種邏輯,其在被機器讀取時使得該機器生成執行本文描述的技術的邏輯。此類表示即所謂「IP核」可以存儲在有形的機器可讀介質(「磁帶」)上並提供給各種顧客或製造商,以加載到實際製作該邏輯或處理器的編制機器中去。例如,IP核(諸如由ARM控股公司所開發的CortexTM處理器族以及由中國科學院計算機技術研究所(ICT)所開發的龍芯IP核)可被授權或銷售給多個客戶或受許可方,諸如德州儀器、高通、蘋果、或三星,並被實現在由這些客戶或受許可方所製造的處理器中。
圖11示出根據一個實施例的IP核開發的框圖。存儲器1130包括模擬軟體1120和/或硬體或軟體模型1110。在一個實施例中,表示IP核設計的數據可經由存儲器1140(諸如,硬碟)、有線連接(諸如,網際網路)1150或無線連接1160而被提供給存儲器1130。由模擬工具和模型所生成的IP核信息可隨後被發送給製造工廠,在製造工廠可由第三方來進行生產以執行根據至少一個實施例的至少一個指令。
在一些實施例中,一個或多個指令可以對應於第一類型或體系結構(例如x86),並且在不同類型或體系結構的處理器(例如ARM)上被轉換或仿真。根據一個實施例,指令可以在任何處理器或處理器類型上執行,包括ARM、x86、MIPS、GPU或其它處理器類型或體系結構。
圖12示出了根據一個實施例的第一類型的指令如何被不同類型的處理器所仿真。在圖12中,程序1205包含一些指令,這些指令可執行與根據一個實施例的指令相同或基本相同的功能。然而,程序1205的指令可以是與處理器1215所不同或不兼容的類型和/或格式,這意味著程序1205中的類型的指令不能原生地被處理器1215所執行。然而,藉助於仿真邏輯1210,程序1205的指令可被轉換成能夠由處理器1215所原生執行的指令。在一個實施例中,仿真邏輯被具體化在硬體中。在另一實施例中,仿真邏輯具體化在有形的機器可讀介質中,該機器可讀介質包含將程序1205中的該類指令翻譯成直接能由處理器1215執行的類型的軟體。在其它實施例中,仿真邏輯是固定功能或可編程硬體和存儲在有形的機器可讀介質上的程序的組合。在一個實施例中,處理器包含仿真邏輯,但在其它實施例中,仿真邏輯在處理器之外並由第三方提供。在一個實施例中,處理器能夠通過執行包含在處理器中或者與之相關聯的微代碼或固件,加載具體化在包含軟體的有形的機器可讀介質中的仿真邏輯。
圖13是根據本發明的實施例的對比使用軟體指令轉換器將源指令集中的二進位指令轉換成目標指令集中的二進位指令的方框圖。在所示的實施例中,指令轉換器是軟體指令轉換器,但作為替代該指令轉換器可以用軟體、固件、硬體或其各種組合來實現。圖13示出了用高級語言1306的程序可以使用x86編譯器1304來編譯,以生成可以由具有至少一個x86指令集核的處理器1316原生執行的x86二進位代碼1306。具有至少一個x86指令集核的處理器1316表示任何處理器,該處理器能夠通過兼容地執行或以其它方式處理(1)英特爾x86指令集核的指令集的大部分或(2)旨在具有至少一個x86指令集核的英特爾處理器上運行的應用或其它軟體的目標代碼版本來執行與具有至少一個x86指令集核的英特爾處理器基本相同的功能,以實現與具有至少一個x86指令集核的英特爾處理器基本相同的結果。x86編譯器1304表示用於生成x86二進位代碼1306(例如,對象代碼)的編譯器,該二進位代碼1306可通過或不通過附加的關聯處理在具有至少一個x86指令集核的處理器1316上執行。類似地,圖13示出用高級語言1306的程序可以使用替代的指令集編譯器1308來編譯,以生成可以由不具有至少一個x86指令集核的處理器1314(例如具有執行加利福尼亞州桑尼維爾市的MIPS技術公司的MIPS指令集,和/或執行加利福尼亞州桑尼維爾市的ARM控股公司的ARM指令集的核的處理器)原生執行的替代指令集二進位代碼1310。指令轉換器1312被用來將x86二進位代碼1306轉換成可以由不具有x86指令集核的處理器1314原生執行的代碼。該轉換後的代碼不大可能與替代指令集二進位代碼1310相同,因為能夠這樣做的指令轉換器難以製造;然而,轉換後的代碼將完成一般操作並由來自替代指令集的指令構成。因此,指令轉換器1312通過仿真、模擬或任何其它過程來表示允許不具有x86指令集處理器或核的處理器或其它電子設備執行x86二進位代碼1306的軟體、固件、硬體或其組合。
圖14示出用於提供向量聚集操作功能的過程1401的一個實施例的流程圖。過程1401和在此描述的其他過程由處理塊來執行,處理塊可包括由通用功能機器或由特定功能機器或由它們的組合可執行的專用硬體或軟體或固件操作代碼。
在過程1401的處理塊1409,可選地,從執行第二操作時將使用的掩碼中創建副本。然後處理繼續至處理塊1410,在處理塊1410,從掩碼寄存器中的多個掩碼欄位中的每個欄位讀取下一值。將理解,雖然過程1401被示為迭代性的,但優選在可能的時候並行地執行這些操作中的許多操作。掩碼寄存器中的多個掩碼欄位中的每一個可對應於存儲器中的數據元素的偏移量,並且對於掩碼寄存器中的每個欄位,第一值表明相應的元素尚未從存儲器中被聚集,而第二值表明相應的數據元素無需被聚集或已經從存儲器中被聚集。在一個實施例中,掩碼寄存器是在體系結構上可見的寄存器。在另一實施例中,掩碼寄存器可以是隱式的,例如其中所有欄位最初指示相應的元素尚未從存儲器中被聚集。在處理塊1420,將掩碼寄存器的欄位與第一值作比較,該第一值指示相應元素尚未從存儲器被聚集。如果不等於第一值,則處理繼續至處理塊1450,在處理塊1450重複聚集操作直到完成。否則,在處理塊1430,從存儲器聚集相應的數據元素並將其存儲到具有多個數據欄位的向量寄存器中,多個數據欄位的一部分用於存儲被聚集的數據元素。一旦成功完成處理塊1430,就在處理塊1440中將掩碼寄存器中的相應欄位改變為第二值,該第二值指示相應的數據元素已經從存儲器中被聚集。
將理解,在一個替代實施例中,可通過如下方式構建處理塊1409的複製掩碼:當掩碼寄存器中的相應欄位在處理塊1440中被改變至第二值時,將複製掩碼寄存器中的欄位設置為第一值,以供第二操作使用。因此,通過在部分複製的掩碼下完成第二操作以及在存儲器錯誤之後利用新掩碼來重啟聚集操作指令,可僅跟蹤仍需要執行聚集操作指令的元素。
在處理塊1450,判斷聚集操作是否完成(即,掩碼寄存器中的多個掩碼欄位中的每個欄位均具有第二值)。如果未完成,則處理重複在處理塊1410中開始。如果完成,則處理繼續至處理塊1460,在處理塊1460執行第二操作。在一個實施例中,可利用來自可選的處理塊1409的複製掩碼來執行第二操作。在另一實施例中,可在不使用掩碼的情況下執行第二操作。然後在處理塊1470,將SIMD聚集操作指令的結果存儲在向量寄存器中。
圖15示出用於提供向量聚集操作功能的過程1501的另一實施例的流程圖。在過程1501的處理塊1505,解碼聚集操作指令。處理繼續至處理塊1509,在處理塊1509可選地從執行第二操作時將使用的掩碼創建副本。然後處理繼續至處理塊1510,在處理塊1510,從掩碼寄存器中的多個掩碼欄位中的每個欄位讀取下一值。同樣,雖然過程1501被示為迭代性,但在可能時,諸個操作中的許多操作可並行地執行。在處理塊1520,將掩碼寄存器的下一欄位與第一值作比較,該第一值指示相應元素尚未從存儲器被聚集。如果不等於第一值,則處理繼續至處理塊1550,在處理塊1550重複聚集操作直到完成。否則,在處理塊1530,從存儲器聚集相應的數據元素並在處理塊1535將其存儲到具有多個數據欄位的向量寄存器中,多個數據欄位的一部分用於存儲被聚集的數據元素。一旦成功完成處理塊1535,就在處理塊1540中將掩碼寄存器中的相應欄位改變為第二值,該第二值指示相應的數據元素已經從存儲器中被聚集。
同樣,將理解,在替代實施例中,可通過如下方式構建處理塊1509的複製掩碼:當掩碼寄存器中的相應欄位在處理塊1540中被改變至第二值時,將複製掩碼寄存器中的欄位設置為第一值,以供第二操作使用。因此,通過在部分複製的掩碼下完成第二操作以及在存儲器錯誤之後利用新掩碼來重啟聚集操作指令,可僅跟蹤仍需要執行聚集操作指令的元素。
在處理塊1550,判斷聚集操作是否完成(即,掩碼寄存器中的多個掩碼欄位中的每個欄位均具有第二值)。如果未完成,則處理重複在處理塊1510中開始。如果完成,則處理繼續至處理塊1565,在處理塊1565對來自目的地寄存器的元素和來自第二操作數寄存器的元素執行第二操作。在一個實施例中,可利用來自可選的處理塊1509的複製掩碼來執行第二操作。在另一實施例中,可在不使用掩碼的情況下執行第二操作。然後在處理塊1570,將SIMD聚集操作指令的結果存儲在向量目的地寄存器中。
將理解,可通過硬體(尤其是在無序微體系結構中)有效地處理聚集操作與第二操作之間的依賴關係,由此允許進一步的編譯器優化和改善的指令吞吐量。
圖16示出了用於提供向量分散操作功能的過程1601的一個實施例的流程圖。在過程1601的處理塊1610,對來自第一操作數寄存器的元素和來自第二操作數寄存器的相應元素執行第一操作。然後處理繼續至處理塊1620,在處理塊1620從掩碼寄存器中的多個掩碼欄位中的欄位讀取下一值。將理解,雖然過程1601被示為迭代性的,但優選在可能的時候並行地執行這些操作中的許多操作。掩碼寄存器中的多個掩碼欄位中的每一個可對應於存儲器中的數據元素的偏移量,並且對於掩碼寄存器中的每個欄位,第一值表明相應的元素尚未被分散至存儲器,而第二值表明相應的數據元素無需被分散或已經被分散至存儲器。在一個實施例中,掩碼寄存器是在體系結構上可見的寄存器。在另一實施例中,掩碼寄存器可以是隱式的,例如其中所有欄位最初指示相應的元素尚未被分散至存儲器。在處理塊1630,將掩碼寄存器的欄位與第一值作比較,該第一值指示相應元素尚未被分散至存儲器。如果不等於第一值,則處理繼續至處理塊1660,在處理塊1660重複分散操作直到完成。否則在處理塊1640,將相應的數據元素分散至存儲器。一旦成功完成處理塊1640,就在處理塊1650中將掩碼寄存器中的相應欄位改變為第二值,該第二值指示相應的數據元素已經被分散至存儲器。
在處理塊1660,判斷分散操作是否完成(即掩碼寄存器中的多個掩碼欄位中的每個欄位具有第二值)。如果未完成,則處理重複在處理塊1620中開始。如果完成,則處理繼續至處理塊1670,在處理塊1670中將SIMD分散操作指令的結果存儲在向量寄存器中。
圖17示出用於提供向量分散操作功能的過程1701的另一實施例的流程圖。在過程1701的處理塊1705,解碼分散操作指令。處理繼續至處理塊1720,在處理塊1720中從掩碼寄存器中的多個掩碼欄位中的欄位讀取下一值。將理解,雖然過程1701被示為迭代性的,但優選在可能的時候並行地執行這些操作中的許多操作。
在一個實施例中,掩碼寄存器是在體系結構上可見的寄存器。在另一實施例中,掩碼寄存器可以是隱式的,例如其中所有欄位最初指示相應的元素尚未被分散至存儲器。在處理塊1730,將掩碼寄存器的欄位與第一值作比較,該第一值指示相應元素尚未被分散至存儲器。如果不等於第一值,則處理繼續至處理塊1760,在處理塊1760中重複分散操作直到完成。否則,在處理塊1710,對來自第一操作數/目的地寄存器的相應元素和來自第二操作數寄存器的相應元素執行第一操作。在處理塊1740,將相應的數據元素分散至存儲器。一旦成功完成處理塊1740,就在處理塊1750中將掩碼寄存器中的相應欄位改變為第二值,該第二值指示相應的數據元素已經被分散至存儲器。
在處理塊1760,判斷分散操作是否完成(即,掩碼寄存器中的多個掩碼欄位中的每個欄位均具有第二值)。如果未完成,則處理重複在處理塊1720中開始。如果完成,則處理繼續至處理塊1770,在處理塊1770中將SIMD分散操作指令的結果存儲在向量寄存器中。
本發明的實施例涉及用於提供向量分散操作和/或聚集操作功能的指令,其中可通過硬體(尤其是在無序微體系結構中)有效地處理聚集或分散操作與另一操作之間的依賴關係,由此允許進一步的編譯器優化和改善的指令吞吐量。
本文公開的機制的各實施例可以被實現在硬體、軟體、固件或這些實現方法的組合中。本發明的實施例可實現為在可編程系統上執行的電腦程式或程序代碼,該可編程系統包括至少一個處理器、存儲系統(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設備以及至少一個輸出設備。
可將程序代碼應用至輸入指令以執行本文描述的功能並產生輸出信息。輸出信息可以按已知方式被應用於一個或多個輸出設備。為了本申請的目的,處理系統包括具有諸如例如數位訊號處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器之類的處理器的任何系統。
程序代碼可以用高級程序化語言或面向對象的程式語言來實現,以便與處理系統通信。程序代碼也可以在需要的情況下用彙編語言或機器語言來實現。事實上,本文中描述的機制不僅限於任何特定程式語言的範圍。在任一情形下,語言可以是編譯語言或解釋語言。
至少一個實施例的一個或多個方面可以由存儲在機器可讀介質上的代表性指令來實現,該指令表示處理器中的各種邏輯,其在被機器讀取時使得該機器生成執行本文描述的技術的邏輯。被稱為「IP核」的這樣的表示可以存儲在有形的機器可讀介質中,並提供給各種客戶或生產設施,以加載到實際製造邏輯或處理器的製造機器中。
此類機器可讀存儲介質可包括但不限於通過機器或設備製造或形成的粒子的有形排列,包括存儲介質,諸如:硬碟;包括軟盤、光碟、壓縮盤只讀存儲器(CD-ROM)、可重寫壓縮盤(CD-RW)以及磁光碟的任何其它類型的盤;諸如只讀存儲器(ROM)之類的半導體器件;諸如動態隨機存取存儲器(DRAM)、靜態隨機存取存儲器(SRAM)之類的隨機存取存儲器(RAM);可擦除可編程只讀存儲器(EPROM);快閃記憶體;電可擦除可編程只讀存儲器(EEPROM);磁卡或光卡;或適於存儲電子指令的任何其它類型的介質。
因此,本發明的各實施例還包括非瞬態、有形機器可讀介質,該介質包含指令或包含設計數據,諸如硬體描述語言(HDL),它定義本文中描述的結構、電路、裝置、處理器和/或系統特性。這些實施例也被稱為程序產品。
在某些情況下,指令轉換器可用來將指令從源指令集轉換至目標指令集。例如,指令轉換器可以變換(例如使用靜態二進位變換、包括動態彙編的動態二進位變換)、變形、模擬或以其它方式將指令轉換成將由核來處理的一個或多個其它指令。指令轉換器可以用軟體、硬體、固件、或其組合實現。指令轉換器可以在處理器上、在處理器外、或者部分在處理器上部分在處理器外。
因此,揭示了用於執行根據至少一個實施例的一個或多個指令的技術。雖然已經描述了特定示例實施例,並示出在附圖中,可以理解到,這些實施例僅僅是示例性的且不限制本發明的翻譯,並且本發明不限於所示出和所描述的特定結構和配置,因為本領域技術人員在研究了本公開文本之後可以料知到多種其他修改方式。在本技術領域中,因為發展很快且未來的進步未曾可知,本公開的諸個實施例可通過受益於技術進步而容易地獲得配置和細節上的改動,而不背離本公開的原理和所附的權利要求書的範圍。