發(fā)明領(lǐng)域
本發(fā)明的領(lǐng)域一般涉及計算機處理器架構(gòu),更具體而言,涉及當執(zhí)行時導致特定結(jié)果的指令。
背景技術(shù):
在計算中,將值從一個范圍映射到另一個是有用的。例如,期望落入從10至250范圍的序列中的值可被處理成落入新范圍。作為另一個示例,0至256之間的值可被重新映射,使得生成新值,具有相同數(shù)量的值的新序列的相應值均勻地分布在較大范圍上。或者較大范圍可被壓縮成較小范圍,例如,0至256縮小到0-255,且來自較大范圍的一些值被映射到較小的新范圍的相同的新值。
附圖說明
本發(fā)明是作為示例說明的,而不僅限制于各個附圖的圖形,在附圖中,類似的參考編號表示類似的元件,其中:
圖1示出范圍映射指令的執(zhí)行的示例。
圖2示出范圍映射指令的執(zhí)行的另一個示例。
圖3A-3B示出范圍映射指令的偽代碼的示例。
圖4示出處理器中范圍映射指令的使用的實施例。
圖5示出處理范圍映射指令的方法的實施例。
圖6示出處理范圍映射指令的方法的實施例。
圖7A、7B和7C是示出根據(jù)本發(fā)明的實施例的示例性專用矢量友好指令格式的框圖。
圖8A是示出根據(jù)本發(fā)明的實施例的通用矢量友好指令格式及其A類指令模板的方框圖。
圖8B是示出根據(jù)本發(fā)明的實施例的通用矢量友好指令格式及其B類指令模板的方框圖。
圖9A-9D是示出根據(jù)本發(fā)明的實施例的示例性專用向量友好指令格式的框圖。
圖10是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)的方框圖。
圖11A是示出根據(jù)本發(fā)明的實施例的示例性有序流水線以及示例性寄存器重命名的無序發(fā)布/執(zhí)行流水線的框圖。
圖11B是示出根據(jù)本發(fā)明的實施例的有序架構(gòu)核的示例性實施例以及包括在處理器中的示例性寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核的框圖。
圖12A和12B是示出根據(jù)本發(fā)明的實施例的示例性有序核架構(gòu)的框圖。
圖13是根據(jù)本發(fā)明的實施例示出具有一個以上的核的處理器的框圖。
圖14示出根據(jù)本發(fā)明一個實施例的系統(tǒng)的框圖。
圖15示出根據(jù)本發(fā)明的實施例的第二系統(tǒng)的框圖。
圖16是根據(jù)本發(fā)明的實施例的第三系統(tǒng)的框圖。
圖17是根據(jù)本發(fā)明的實施例的SoC的框圖。
圖18是根據(jù)本發(fā)明的實施例的對比使用軟件指令變換器將源指令集中的二進制指令變換成目標指令集中的二進制指令的框圖。
具體實施方式
在下面的描述中,闡述了很多具體細節(jié)。然而,應當理解,本發(fā)明的各實施例可以在不具有這些具體細節(jié)的情況下得到實施。在其他實例中,未詳細示出公知的電路、結(jié)構(gòu)和技術(shù)以免混淆對本描述的理解。
在說明書中對“一個實施例”、“一實施例”、“示例實施例”等的引用指示所描述的實施例可以包括特定特征、結(jié)構(gòu)或特性,但并不一定每個實施例都需要包括該特定特征、結(jié)構(gòu)或特性。此外,這樣的短語不一定是指同一個實施例。此外,當結(jié)合一個影響例描述特定特征、結(jié)構(gòu)或特性時,認為在本領(lǐng)域技術(shù)人員學識范圍內(nèi),可以與其他影響例一起影響這樣的特征、結(jié)構(gòu)或特性,無論是否對此明確描述。
指令集,或指令集架構(gòu)(ISA)是涉及編程的計算機架構(gòu)的一部分,并可以包括本機數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲器架構(gòu),中斷和異常處理,以及外部輸入和輸出(I/O)。在本文中術(shù)語指令一般指宏指令——即被提供給處理器(或指令轉(zhuǎn)換器,該指令轉(zhuǎn)換器(例如使用靜態(tài)二進制翻譯、包括動態(tài)編譯的動態(tài)二進制翻譯)翻譯、變形、仿真,或以其他方式將指令轉(zhuǎn)換成要由處理器處理的一個或多個指令)的指令)以用于執(zhí)行的指令——而不是微指令或微操作(micro-op)——它們是處理器的解碼器解碼宏指令的結(jié)果。
ISA與微架構(gòu)不同,微架構(gòu)是實現(xiàn)指令集的處理器的內(nèi)部設(shè)計。帶有不同的微架構(gòu)的處理器可以共享共同的指令集。例如,奔騰四(Pentium4)處理器、酷睿(CoreTM)處理器、以及來自加利福尼亞州桑尼威爾(Sunnyvale)的超微半導體有限公司(Advanced Micro Devices,Inc.)的諸多處理器執(zhí)行幾乎相同版本的x86指令集(在更新的版本中加入了一些擴展),但具有不同的內(nèi)部設(shè)計。例如,ISA的相同寄存器架構(gòu)在不同的微架構(gòu)中可使用已知的技術(shù)以不同方法來實現(xiàn),包括專用物理寄存器、使用寄存器重命名機制(諸如,使用寄存器別名表RAT、重排序緩沖器ROB、以及隱退寄存器組;使用多映射和寄存器池)的一個或多個動態(tài)分配物理寄存器等。除非另作說明,短語寄存器架構(gòu)、寄存器組,以及寄存器在本文中被用來指代對軟件/編程器以及指令指定寄存器的方式可見的東西。在需要特殊性的情況下,形容詞邏輯、架構(gòu),或軟件可見的將用于表示寄存器架構(gòu)中的寄存器/文件,而不同的形容詞將用于指定給定微型架構(gòu)中的寄存器(例如,物理寄存器、重新排序緩沖器、退役寄存器、寄存器池)。
指令集包括一個或多個指令格式。給定指令格式定義各個字段(位的數(shù)量、位的位置)以指定要執(zhí)行的操作(操作碼)以及對其要執(zhí)行該操作的操作碼等。通過指令模板(或子格式)的定義來進一步分解一些指令格式。例如,給定指令格式的指令模板可被定義為具有指令格式的字段(所包括的字段通常在相同的階中,但是至少一些字段具有不同的位位置,因為包括更少的字段)的不同子集,和/或被定義為具有不同解釋的給定字段。由此,ISA的每一指令使用給定指令格式(并且如果定義,則在該指令格式的指令模板的給定一個中)來表達,并且包括用于指定操作和操作碼的字段。例如,示例性ADD指令具有專用操作碼以及包括指定該操作碼的操作碼字段和選擇操作數(shù)的操作數(shù)字段(源1/目的地以及源2)的指令格式,并且該ADD指令在指令流中的出現(xiàn)將具有選擇專用操作數(shù)的操作數(shù)字段中的專用內(nèi)容。
科學、金融、自動矢量化的通用,RMS(識別、挖掘以及合成),以及可視和多媒體應用程序(例如,2D/3D圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻操縱)常常需要對大量的數(shù)據(jù)項執(zhí)行相同操作(被稱為“數(shù)據(jù)并行性”)。單指令多數(shù)據(jù)(SIMD)是指使處理器對多個數(shù)據(jù)項執(zhí)行操作的一種指令。SIMD技術(shù)特別適于能夠在邏輯上將寄存器中的比特分割為若干個固定大小的數(shù)據(jù)元素的處理器,每一個元素都表示單獨的值。例如,256比特寄存器中的比特可以被指定為四個單獨的64比特打包的數(shù)據(jù)元素(四字(Q)大小的數(shù)據(jù)元素),八個單獨的32比特打包的數(shù)據(jù)元素(雙字(D)大小的數(shù)據(jù)元素),十六單獨的16比特打包的數(shù)據(jù)元素(一字(W)大小的數(shù)據(jù)元素),或三十二個單獨的8比特數(shù)據(jù)元素(字節(jié)(B)大小的數(shù)據(jù)元素)來被操作的源操作數(shù)。這種類型的數(shù)據(jù)被稱為打包的數(shù)據(jù)類型或矢量數(shù)據(jù)類型,這種數(shù)據(jù)類型的操作數(shù)被稱為打包的數(shù)據(jù)操作數(shù)或矢量操作數(shù)。換句話說,打包數(shù)據(jù)項或向量指的是打包數(shù)據(jù)元素的序列,并且打包數(shù)據(jù)操作數(shù)或向量操作數(shù)是SIMD指令(也稱為打包數(shù)據(jù)指令或向量指令)的源操作數(shù)或目的地操作數(shù)。
作為示例,一種類型的SIMD指令指定要以垂直方式對兩個源矢量操作數(shù)執(zhí)行的單個矢量操作,以利用相同數(shù)量的數(shù)據(jù)元素,以相同數(shù)據(jù)元素順序,生成相同大小的目的地矢量操作數(shù)(也稱為結(jié)果矢量操作數(shù))。源矢量操作數(shù)中的數(shù)據(jù)元素被稱為源數(shù)據(jù)元素,而目的地矢量操作數(shù)中的數(shù)據(jù)元素被稱為目的地或結(jié)果數(shù)據(jù)元素。這些源矢量操作數(shù)是相同大小,并包含相同寬度的數(shù)據(jù)元素,如此,它們包含相同數(shù)量的數(shù)據(jù)元素。兩個源向量操作數(shù)中的相同位位置中的源數(shù)據(jù)元素形成數(shù)據(jù)元素對(也稱為相對應的數(shù)據(jù)元素;即,每個源操作數(shù)的數(shù)據(jù)元素位置0中的數(shù)據(jù)元素相對應,每個源操作數(shù)的數(shù)據(jù)元素位置1中的數(shù)據(jù)元素相對應,等等)。由該SIMD指令所指定的操作分別地對這些源數(shù)據(jù)元素對中的每一對執(zhí)行,以生成匹配的數(shù)量的結(jié)果數(shù)據(jù)元素,如此,每一對源數(shù)據(jù)元素都具有對應的結(jié)果數(shù)據(jù)元素。由于操作是垂直的并且由于結(jié)果矢量操作數(shù)大小相同,具有相同數(shù)量的數(shù)據(jù)元素,并且結(jié)果數(shù)據(jù)元素與源矢量操作數(shù)以相同數(shù)據(jù)元素順序來存儲,因此,結(jié)果數(shù)據(jù)元素與源矢量操作數(shù)中的它們的對應的源數(shù)據(jù)元素對處于結(jié)果矢量操作數(shù)的相同比特位置。除此示例性類型的SIMD指令之外,還有各種其他類型的SIMD指令(例如,只有一個或具有兩個以上的源矢量操作數(shù)的;以水平方式操作的;生成不同大小的結(jié)果矢量操作數(shù)的,具有不同大小的數(shù)據(jù)元素的,和/或具有不同的數(shù)據(jù)元素順序的)。應該理解,術(shù)語目的地矢量操作數(shù)(或目的地操作數(shù))被定義為執(zhí)行由指令所指定的操作的直接結(jié)果,包括將該目的地操作數(shù)存儲在某一位置(寄存器或在由該指令所指定的存儲器地址),以便它可以作為源操作數(shù)由另一指令訪問(由另一指令指定該同一個位置)。
諸如由具有包括x86、MMXTM、流式SIMD擴展(SSE)、SSE2、SSE3、SSE4.1以及SSE4.2指令的指令集的CoreTM處理器使用的技術(shù)之類的SIMD技術(shù),在應用程序性能方面實現(xiàn)了大大的改善。已經(jīng)發(fā)布和/或公布了涉及高級矢量擴展(AVX)(AVX1和AVX2)且使用矢量擴展(VEX)編碼方案的附加SIMD擴展集(例如,參見2011年10月的64和IA-32架構(gòu)軟件開發(fā)手冊,并且參見2011年6月的高級矢量擴展編程參考)。
范圍映射
以下是一般稱為“范圍映射”的指令的實施例以及在包括背景技術(shù)中描述的各種不同領(lǐng)域中有益的可用于執(zhí)行這一指令的系統(tǒng)、架構(gòu)指令格式等的實施例。范圍映射指令的執(zhí)行高效地處理較早描述的問題的值(多個值)從一個范圍映射到另一個范圍,因為它取得具有源數(shù)據(jù)范圍的源數(shù)據(jù)元素并將源數(shù)據(jù)元素映射到具有目的地數(shù)據(jù)范圍的目的地數(shù)據(jù)元素。換言之,范圍映射指令的執(zhí)行導致處理器執(zhí)行值從一個范圍映射到另一個范圍。其結(jié)果被寫入目的地寄存器。在一些實施例中,源中的至少一個是寄存器,諸如128比特、256比特、512比特矢量寄存器等。在一些實施例中,源操作數(shù)是與開始存儲器位置相關(guān)聯(lián)的數(shù)據(jù)元素的集合。另外,在一些實施例中,一個或兩個源的數(shù)據(jù)元素在任何混合之前經(jīng)歷數(shù)據(jù)變換,諸如拌和、廣播、轉(zhuǎn)換等(在本文中將討論示例)。稍后詳細描述寫掩碼寄存器的示例。
用于單個值的指令的基本形式的示例性格式是“RANGEMAP目的地,源,源_范圍,目的地_范圍(RANGEMAP destination,source,source_range,destination_range)”,其中操作數(shù)目的地是目的地操作數(shù),源是源操作數(shù),源_范圍是源的值的范圍,而目的地_范圍是存儲在目的地中的值的值范圍。在一個實施例中,目的地是目的地操作數(shù),且源是源操作數(shù)。從存儲器檢索的任何是從存儲器地址開始的連續(xù)比特的集合,且取決于目的地寄存器的大小可能是各種大小之一(128比特、256比特、512比特等)——該大小一般與目的地寄存器相等。在一個實施例中,RANGEMAP(范圍映射)是指令的操作碼。典型地,在指令中明確地定義每個操作數(shù)。可在指令的“前綴”中定義數(shù)據(jù)元素的大小,諸如通過使用類似稍后描述的“W”的數(shù)據(jù)粒度的指示。在大多數(shù)實施例中,W將指示每個數(shù)據(jù)元素是32比特或64比特。如果數(shù)據(jù)元素是32比特大小,且源是512比特大小,則每個源有十六(16)個數(shù)據(jù)元素。在一個實施例中,范圍映射指令可以是VEX或EVEX類型的指令。
在圖1中示出范圍映射指令執(zhí)行的示例。在該示例中,有一個源N,其具有從下界LB至上界UB的范圍。下界和上界限定該源的可能值的范圍。例如,且在一個實施例中,對于八比特像素范圍,表示一種顏色的像素的值可具有范圍0<=像素<=255。在另一個實施例中,源可具有不同限定的范圍,諸如10<=N<=250。盡管源具有在該輸入范圍內(nèi)的限定值,但范圍限定該源可具有的可能值的范圍。將執(zhí)行的操作是將具有源范圍的源值N轉(zhuǎn)換成具有不同范圍的另一個值N’。
例如,且在一個實施例中,范圍映射可將值從較大范圍映射到較小范圍,諸如將具有范圍0<=N<=250的整數(shù)映射到具有范圍0<=N<=120的整數(shù)。在另一個實施例中,范圍映射可將具有較小范圍的值映射到較大范圍,諸如將具有范圍0<=N<=75的整數(shù)映射到具有范圍0<=N<=300的整數(shù)。在這些實施例中,用于對源作范圍映射的計算由等式(1)表示,其中源和目的地數(shù)據(jù)范圍中的每一個是基于零的范圍:
其中,目的地是經(jīng)范圍映射的值的值,源是輸入值,源_范圍是源的范圍,且目的地_范圍是目的地的范圍。在一個實施例中,基于零的數(shù)據(jù)范圍是具有為零的數(shù)據(jù)范圍下界的數(shù)據(jù)范圍。在另一個實施例中,基于非零的數(shù)據(jù)范圍(non-zero based data range)將具有與等式(1)不同的等式,但使用將基于非零的數(shù)據(jù)范圍計入在內(nèi)的等式。源和/或目的地數(shù)據(jù)元素可以是整數(shù)(例如,1、2、4、8等字節(jié)整數(shù)),實數(shù)(例如,2、4、8、16等字節(jié)實數(shù))和/或一些其它數(shù)據(jù)類型。盡管在實施例中,源和目的地是標量值,但在替換實施例中,源和目的地是其它類型的操作數(shù)(矢量寄存器、存儲在存儲器中的矢量等)。此外,源和目的地數(shù)據(jù)元素可具有相同和/或不同的數(shù)據(jù)類型(例如,兩個整數(shù)、實數(shù)等,或一個數(shù)據(jù)元素是整數(shù)而另一個數(shù)據(jù)元素是實數(shù)等)。
在一個實施例中,范圍映射是可由替換公式表示且在計算上可比等式(1)所表示的更高效的范圍映射類型。圖2示出范圍映射204指令的執(zhí)行的另一個示例。在圖2中,范圍映射204將整數(shù)N從輸入范圍202 0<=N<=255映射到范圍206 0<=N’<=256。在該實施例中,可由單個字節(jié)整數(shù)表示的數(shù)據(jù)元素被映射到多字節(jié)整數(shù)。在一個實施例中,用于該范圍映射204的等式是等式(2):
目的地=源+(源>>7) (2)
其中目的地是經(jīng)范圍映射的值的整數(shù)值,且源是輸入整數(shù)值。該映射被稱為“α混合”且用于2D圖形。在一個實施例中,源和目的地數(shù)據(jù)范圍是固有的,諸如在等式(2)中。在該實施例中,數(shù)據(jù)范圍不作為操作數(shù)傳遞。
在代碼序列中使用的范圍映射指令的示例如下:
在一些情況下,源是寄存器(對于該示例,源被視為512比特寄存器,諸如具有16個32比特數(shù)據(jù)元素的ZMM寄存器,然而,可使用其它數(shù)據(jù)元素和寄存器大小,諸如XMM和YMM寄存器和16比特或64比特數(shù)據(jù)元素)。目的地是寄存器或存儲器位置。如果源是存儲器位置,則在一些實施例中,在源的任意混合之前,將其置于臨時寄存器中。另外,存儲器位置的數(shù)據(jù)元素在置于臨時寄存器中之前可經(jīng)歷數(shù)據(jù)變換。
圖3A和3B示出范圍映射指令的偽代碼的示例。在圖3A中,偽代碼302示出一般的范圍映射指令。在圖3B中,偽代碼352示出用于α混合的范圍映射。
圖4示出處理器中范圍映射指令的使用的實施例。在401,獲取具有目的地操作數(shù)、源操作數(shù)和范圍指示的范圍映射指令。在一個實施例中,范圍指示作為源_范圍操作數(shù)和目的地_范圍操作數(shù)傳遞。在另一個實施例中,范圍指示是固定的且從指令名導出。在一些實施例中,目的地操作數(shù)是標量或矢量寄存器(諸如ZMM1)。源操作數(shù)可以是標量或矢量寄存器,或者可以是存儲器操作數(shù)。
在403解碼范圍映射指令。取決于指令的格式,在該階段可解釋各種數(shù)據(jù),諸如如果有數(shù)據(jù)變換,則寫入和檢索哪些寄存器、訪問哪些存儲器地址等。
在405檢索/讀取源操作數(shù)的值。如果源是寄存器,則該寄存器被讀取。如果源操作數(shù)是存儲器操作數(shù),則與該操作數(shù)相關(guān)聯(lián)的數(shù)據(jù)元素被檢索。在一些實施例中,來自存儲器的數(shù)據(jù)元素被存儲在臨時寄存器中。
如果要執(zhí)行任何數(shù)據(jù)元素變換(諸如上轉(zhuǎn)換、廣播、拌和等,稍后將詳細描述),則可在407執(zhí)行。例如,可將來自存儲器的16比特數(shù)據(jù)元素上轉(zhuǎn)換(upconvert)成32比特數(shù)據(jù)元素,或者可將數(shù)據(jù)元素從一個模式攪和成另一個(例如,XYZW XYZW XYZW…XYZW至XXXXXXXX YYYYYYYYZZZZZZZZZZ WWWWWWWW)。
在409,確定源和目的地數(shù)據(jù)范圍。在一個實施例中,在指令中范圍之一或兩者作為操作數(shù)被傳遞。在另一個實施例中,基于所執(zhí)行的指令,數(shù)據(jù)范圍之一或兩者是固定的。在又一個實施例中,數(shù)據(jù)范圍之一作為操作數(shù)傳遞,而另一個數(shù)據(jù)范圍是固定的。在一個實施例中,來自源和/或目的地數(shù)據(jù)范圍之一或兩者的數(shù)據(jù)范圍固有地來自所執(zhí)行的指令。例如且在一個實施例中,在支持α混合的指令中,固有源和目的地數(shù)據(jù)范圍分別是[0,255]和[0,256]。作為另一個示例且在另一個實施例中,通過在源中的經(jīng)范圍映射位置從較大圖像采樣以填充目的地的(X,Y)范圍,來縮放(X,Y)坐標以將圖像減小到較小圖像可涉及利用范圍映射指令。這通過將目的地(X,Y)坐標映射到較大范圍,在經(jīng)映射的(X,Y)坐標處從源讀取并寫入目的地的最初XY坐標來完成。
在411,由執(zhí)行資源執(zhí)行范圍映射指令(或者包括這一指令的操作,諸如微操作)。該執(zhí)行導致基于輸入和輸出數(shù)據(jù)范圍、從源值目的地的逐元素的范圍映射。例如,源的數(shù)據(jù)元素基于源和目的地范圍被映射到目的地。在圖1和圖2中示出這種范圍映射的示例。
在413,適當?shù)姆秶成淠康牡刂当淮鎯Φ侥康牡丶拇嫫鳌6?,在圖1和2中示出其示例。盡管分別地示出了411和413,但是在一些實施例中,它們是作為指令的執(zhí)行的一部分一起執(zhí)行的。
盡管以上已經(jīng)示出一種類型的執(zhí)行環(huán)境,但它易于修改以符合其它環(huán)境,諸如詳細描述的有序和無序環(huán)境。
圖5示出處理范圍映射指令的方法的實施例。在此實施例中,假設(shè)早先已經(jīng)執(zhí)行操作401-407中的某些,如果不是全部,然而,沒有示出它們,以便不使下面呈現(xiàn)的細節(jié)模糊。例如,沒有示出獲取和解碼,也沒有示出操作數(shù)檢索。
在501,接收源輸入、源數(shù)據(jù)范圍和目的地數(shù)據(jù)范圍。例如,從源操作數(shù)接收源數(shù)據(jù)元素。在一些實施例中,從對應的指令操作數(shù)接收源和目的地范圍。在另一個實施例中,源和目的地數(shù)據(jù)范圍之一或多個由指令名稱固定。在進一步的實施例中,基于用于對源數(shù)據(jù)元素作范圍映射的等式,數(shù)據(jù)范圍中的一個或多個是固有的。
在503-507,執(zhí)行循環(huán)以范圍映射兩個或更多個數(shù)據(jù)元素。在一個實施例中,源和目的地之一或兩者是標量寄存器、示例寄存器、存儲器位置和/或其組合。此外,由源引用的一個或多個數(shù)據(jù)元素中的每一個可以是一個或多個整數(shù)、實數(shù)等,如上所述。在505,執(zhí)行數(shù)據(jù)元素的范圍映射。所執(zhí)行的范圍映射的示例在圖1-3B中示出。例如,可執(zhí)行一般的范圍映射的循環(huán),諸如將具有開始范圍的值映射到較小或較大的范圍。或者,執(zhí)行公知的范圍映射的循環(huán)(α混合等)。在507,循環(huán)結(jié)束。如果在503-507,一個數(shù)據(jù)元素被范圍映射(例如對標量值作范圍映射等),則不執(zhí)行循環(huán)且單個值的適當范圍映射被執(zhí)行。
圖6示出處理范圍映射指令的方法的實施例。在該實施例中,假設(shè)在601之前,已經(jīng)執(zhí)行操作401-407中的一些(若非全部的話)。在601,對于每個數(shù)據(jù)元素,利用源數(shù)據(jù)范圍和目的地數(shù)據(jù)范圍,對源輸入應用范圍映射。在一些實施例中,并行執(zhí)行范圍映射。例如,可執(zhí)行多個數(shù)據(jù)元素的一般范圍映射,諸如將具有開始范圍的數(shù)據(jù)元素映射到較小或較大的范圍?;蛘?,執(zhí)行利用公知的范圍映射的循環(huán)(α混合等)。
盡管圖5和6已經(jīng)討論了基于一般范圍映射或α混合范圍映射的范圍映射。另外,應當清楚地理解可將其它類型的范圍映射用于本發(fā)明。在一個實施例中,在單個指令中進行范圍映射操作的可能優(yōu)點是較快的性能,更緊湊的代碼和可能通過使用一個指令而不是序列(可能無法識別該序列的目的)使得代碼更易于理解/自文檔化。例如且在一個實施例中,程序中的更多指令可導致執(zhí)行該程序的較大數(shù)量的循環(huán)。相反,具有較小的指令可導致較少數(shù)量的循環(huán)來執(zhí)行該程序。
示例性指令格式
本文中所描述的指令的實施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。指令的實施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。
VEX指令格式
VEX編碼允許指令具有兩個以上操作數(shù),并且允許SIMD矢量寄存器比128比特長。VEX前綴的使用提供了三個操作數(shù)(或者更多)句法。例如,先前的兩個操作數(shù)指令執(zhí)行改寫源操作數(shù)的操作(諸如A=A+B)。VEX前綴的使用使操作數(shù)執(zhí)行非破壞性操作,諸如A=B+C。
圖7A示出示例性AVX指令格式,包括VEX前綴702、實操作碼字段730、MoD R/M字節(jié)740、SIB字節(jié)750、位移字段762、以及IMM8 772。圖7B示出來自圖7A的哪些字段構(gòu)成完整操作碼字段774和基礎(chǔ)操作字段742。圖7C示出來自圖7A的哪些字段構(gòu)成寄存器索引字段744。
VEX前綴(字節(jié)0-2)702以三字節(jié)形式進行編碼。第一字節(jié)是格式字段740(VEX字節(jié)0,比特[7:0]),該格式字段740包含明確的C4字節(jié)值(用于區(qū)分C4指令格式的唯一值)。第二-第三字節(jié)(VEX字節(jié)1-2)包括提供專用能力的多個比特字段。具體地,REX字段705(VEX字節(jié)1,比特[7-5])由VEX.R比特字段(VEX字節(jié)1,比特[7]–R)、VEX.X比特字段(VEX字節(jié)1,比特[6]–X)以及VEX.B比特字段(VEX字節(jié)1,比特[5]–B)組成。這些指令的其他字段對如在本領(lǐng)域中已知的寄存器索引的較低三個比特(rrr、xxx以及bbb)進行編碼,由此Rrrr、Xxxx以及Bbbb可通過增加VEX.R、VEX.X以及VEX.B來形成。操作碼映射字段715(VEX字節(jié)1,比特[4:0]–mmmmm)包括對隱含的領(lǐng)先操作碼字節(jié)進行編碼的內(nèi)容。W字段764(VEX字節(jié)2,比特[7]–W)由記號VEX.W表示,并且取決于該指令提供了不同的功能。VEX.vvvv 720(VEX字節(jié)2,比特[6:3]-vvvv)的作用可包括如下:1)VEX.vvvv對以顛倒(1(多個)補碼)的形式指定第一源寄存器操作數(shù)進行編碼,且對具有兩個或兩個以上源操作數(shù)的指令有效;2)VEX.vvvv針對特定矢量位移對以1(多個)補碼的形式指定的目的地寄存器操作數(shù)進行編碼;或者3)VEX.vvvv不對任何操作數(shù)進行編碼,保留該字段,并且應當包含1111b。如果VEX.L768大小的字段(VEX字節(jié)2,比特[2]-L)=0,則它指示128比特矢量;如果VEX.L=1,則它指示256比特矢量。前綴編碼字段725(VEX字節(jié)2,比特[1:0]-pp)提供了用于基礎(chǔ)操作字段的附加位。
實操作碼字段730(字節(jié)3)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中指定。
MOD R/M字段740(字節(jié)4)包括MOD字段742(比特[7-6])、Reg字段744(比特[5-3])、以及R/M字段746(比特[2-0])。Reg字段744的作用可包括如下:對目的地寄存器操作數(shù)或源寄存器操作數(shù)(Rfff中的rrr)進行編碼;或者被視為操作碼擴展且不用于對任何指令操作數(shù)進行編碼。R/M字段746的作用可包括如下:對參考存儲器地址的指令操作數(shù)進行編碼;或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼。
縮放索引基址(SIB)-縮放字段750(字節(jié)5)的內(nèi)容包括用于存儲器地址生成的SS752(位[7-6])。先前已經(jīng)針對寄存器索引Xxxx和Bbbb參考了SIB.xxx 754(比特[5-3])和SIB.bbb 756(比特[2-0])的內(nèi)容。
位移字段762和立即數(shù)字段(IMM8)772包含地址數(shù)據(jù)。
通用向量友好指令格式
向量友好指令格式是適于向量指令(例如,存在專用于向量操作的某些字段)的指令格式。盡管描述了其中通過向量友好指令格式支持向量和標量操作兩者的實施例,但是替換實施例只通過向量友好指令格式使用向量操作。
圖8A-8B是示出根據(jù)本發(fā)明的實施例的通用矢量友好指令格式及其指令模板的方框圖。圖8A是示出了根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其A類指令模板的框圖;而圖8B是示出了根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其B類指令模板的框圖。具體地,針對通用向量友好指令格式800定義A類和B類指令模板,兩者包括無存儲器訪問805的指令模板和存儲器訪問820的指令模板。在向量友好指令格式的上下文中的通用術(shù)語是指不綁定到任何專用指令集的指令格式。
盡管將描述其中向量友好指令格式支持64字節(jié)向量操作數(shù)長度(或大小)與32比特(4字節(jié))或64比特(8字節(jié))數(shù)據(jù)元素寬度(或大小)(并且由此,64字節(jié)向量由16雙字大小的元素或者替換地8四字大小的元素組成)、64字節(jié)向量操作數(shù)長度(或大小)與16比特(2字節(jié))或8比特(1字節(jié))數(shù)據(jù)元素寬度(或大小)、32字節(jié)向量操作數(shù)長度(或大小)與32比特(4字節(jié))、64比特(8字節(jié))、16比特(2字節(jié))、或8比特(1字節(jié))數(shù)據(jù)元素寬度(或大小)、以及16字節(jié)向量操作數(shù)長度(或大小)與32比特(4字節(jié))、64比特(8字節(jié))、16比特(2字節(jié))、或8比特(1字節(jié))數(shù)據(jù)元素寬度(或大小)的本發(fā)明的實施例,但是替換實施例可支持更大、更小、和/或不同的向量操作數(shù)大小(例如,256字節(jié)向量操作數(shù))與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128比特(16字節(jié))數(shù)據(jù)元素寬度)。
圖8A中的A類指令模板包括:1)在無存儲器訪問805的指令模板內(nèi),示出了無存儲器訪問的全部舍入控制型操作810的指令模板、以及無存儲器訪問的數(shù)據(jù)變換型操作815的指令模板;以及2)在存儲器訪問820的指令模板內(nèi),示出存儲器訪問的時間825的指令模板和存儲器訪問的非時間830的指令模板。圖8B中的B類指令模板包括:1)在無存儲器訪問805的指令模板內(nèi),示出了無存儲器訪問的寫掩碼控制的部分舍入控制型操作812的指令模板以及無存儲器訪問的寫掩碼控制的vsize型操作817的指令模板;以及2)在存儲器訪問820的指令模板內(nèi),示出了存儲器訪問的寫掩碼控制827的指令模板。
通用向量友好指令格式800包括以下列出以在圖8A-8B中示出順序的如下字段。
格式字段840-該字段中的特定值(指令格式標識符值)唯一地標識了向量友好指令格式,并且由此標識了指令在指令流中以向量友好指令格式的出現(xiàn)。由此,該字段在無需只有通用向量友好指令格式的指令集的意義上是任選的。
基礎(chǔ)操作字段842-其內(nèi)容區(qū)分了不同的基礎(chǔ)操作。
寄存器索引字段844-其內(nèi)容直接或者通過地址生成指定了源或目的地操作數(shù)在寄存器中或者在存儲器中的位置。這些包括足夠數(shù)量的比特以從PxQ(例如,32x512、16x128、32x1024、64x1024)個寄存器組中選擇N個寄存器。盡管在一個實施例中N可多達三個源和一個目的地寄存器,但是替換實施例可支持更多或更少的源和目的地寄存器(例如,可支持高達兩個源,其中這些源中的一個源還用作目的地,可支持高達三個源,其中這些源中的一個源還用作目的地,可支持高達兩個源和一個目的地)。
修飾符(modifier)字段846-其內(nèi)容將以指定存儲器訪問的通用向量指令格式出現(xiàn)的指令與不指定存儲器訪問的通用向量指令格式出現(xiàn)的指令區(qū)分開;即在無存儲器訪問805的指令模板與存儲器訪問820的指令模板之間。存儲器訪問操作讀取和/或?qū)懭氲酱鎯ζ鲗哟?在一些情況下,使用寄存器中的值來指定源和/或目的地址),而非存儲器訪問操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個實施例中,該字段還在三種不同的方式之間選擇以執(zhí)行存儲器地址計算,但是替換實施例可支持更多、更少或不同的方式來執(zhí)行存儲器地址計算。
擴充操作字段850-其內(nèi)容區(qū)分了除基礎(chǔ)操作以外要執(zhí)行的各種不同操作中的哪一個操作。該字段是上下文專用的。在本發(fā)明的一個實施例中,該字段被分成類字段868、α字段852、以及β字段854。擴充操作字段850允許在單一指令而非2、3或4個指令中執(zhí)行多組共同的操作。
縮放字段860-其內(nèi)容允許用于存儲器地址生成(例如,用于使用2倍縮放*索引+基址的地址生成)的索引字段的內(nèi)容的縮放。
位移字段862A-其內(nèi)容用作存儲器地址生成的一部分(例如,用于使用2倍縮放*索引+基址+位移的地址生成)。
位移因數(shù)字段862B(注意,位移字段862A直接在位移因數(shù)字段862B上的并置指示使用一個或另一個)-其內(nèi)容用作地址生成的一部分,它指定由存儲器訪問的大小(N)縮放的位移因數(shù),其中N是存儲器訪問中的字節(jié)數(shù)量(例如,用于使用2倍縮放*索引+基址+縮放的位移的地址生成)。忽略冗余的低階位,并且因此位移因數(shù)字段的內(nèi)容乘以存儲器操作數(shù)總大小以生成在計算有效地址時所使用的最終位移。N的值由處理器硬件在運行時基于完整操作碼字段874(稍候在本文中描述)和數(shù)據(jù)操縱字段854C確定。位移字段862A和位移因數(shù)字段862B在它們不用于無存儲器訪問805的指令模板和/或不同的實施例可實現(xiàn)這兩者中的僅一個或均未實現(xiàn)的意義上是任選的。
數(shù)據(jù)元素寬度字段864-其內(nèi)容區(qū)分了將要使用大量數(shù)據(jù)元素寬度中的哪一個(在一些實施例中用于所有的指令,在其他實施例中只用于一些指令)。該字段在如果支持僅一個數(shù)據(jù)元素寬度和/或使用操作碼的某一方面來支持數(shù)據(jù)元素寬度則不需要的意義上是任選的。
寫掩碼字段870-其內(nèi)容基于每一數(shù)據(jù)元素位置來控制目的地向量操作數(shù)中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴充操作的結(jié)果。A類指令模板支持合并-寫掩碼,而B類指令模板支持合并寫掩碼和調(diào)零寫掩碼兩者。當合并的向量掩碼允許在執(zhí)行任何操作(由基礎(chǔ)操作和擴充操作指定)期間保護目的地中的任何元素集免于更新時,在另一實施例中,保持其中對應掩碼比特具有0的目的地的每一元素的舊值。相反,當調(diào)零向量掩碼允許在執(zhí)行任何操作(由基礎(chǔ)操作和擴充操作指定)期間使目的地中的任何元素集調(diào)零時,在一個實施例中,目的地的元素在對應掩碼比特具有0值時被設(shè)為0。該功能的子集是控制執(zhí)行的操作的向量長度的能力(即,從第一個到最后一個要修改的元素的跨度),然而,被修改的元素不必是連續(xù)的。由此,寫掩碼字段870允許部分向量操作,這包括加載、存儲、算術(shù)、邏輯等。盡管描述了其中寫掩碼字段870的內(nèi)容選擇了多個寫掩碼寄存器中的包含要使用的寫掩碼的一個寫掩碼寄存器(并且由此寫掩碼字段870的內(nèi)容間接地標識了要執(zhí)行的掩碼操作)的本發(fā)明的實施例,但是替換實施例相反或另外允許掩碼寫字段870的內(nèi)容直接地指定要執(zhí)行的掩碼操作。
立即數(shù)字段872-其內(nèi)容允許對立即數(shù)的指定。該字段在實現(xiàn)不支持立即數(shù)的通用向量友好格式中不存在且在不使用立即數(shù)的指令中不存在的意義上是任選的。
類字段868-其內(nèi)容在指令的不同的類之間進行區(qū)分。參考圖8A-8B,該字段的內(nèi)容在A類和B類指令之間進行選擇。在圖8A-8B中,圓角方形用于指示專用值存在于字段中(例如,在圖8A-8B中分別用于類字段868的A類868A和B類868B)。
A類指令模板
在A類非存儲器訪問805的指令模板的情況下,α字段852被解釋為其內(nèi)容區(qū)分了要執(zhí)行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的舍入型操作810和無存儲器訪問的數(shù)據(jù)變換型操作815的指令模板分別指定舍入852A.1和數(shù)據(jù)變換852A.2)的RS字段852A,而β字段854區(qū)分了要執(zhí)行指定類型的操作中的哪一種。在無存儲器訪問805指令模板中,縮放字段860、位移字段862A以及位移縮放字段862B都不存在。
無存儲器訪問的指令模板-全部舍入控制型操作
在無存儲器訪問的全部舍入控制型操作810的指令模板中,β字段854被解釋為其內(nèi)容提供了靜態(tài)舍入的舍入控制字段854A。盡管在本發(fā)明的所述實施例中舍入控制字段854A包括抑制所有浮點異常(SAE)字段856和舍入操作控制字段858,但是替換實施例可支持、可將這些概念兩者都編碼成相同的字段或者只有這些概念/字段中的一個或另一個(例如,可只有舍入操作控制字段858)。
SAE字段856-其內(nèi)容區(qū)分是否停用異常事件報告;當SAE字段856的內(nèi)容指示啟用抑制時,給定指令不報告任何種類的浮點異常標志且不引發(fā)任何浮點異常處理程序。
舍入操作控制字段858-其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段858允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段850的內(nèi)容覆蓋該寄存器值。
無存儲器訪問的指令模板-數(shù)據(jù)變換型操作
在無存儲器訪問的數(shù)據(jù)變換型操作815的指令模板中,β字段854被解釋為數(shù)據(jù)變換字段854B,其內(nèi)容區(qū)分要執(zhí)行大量數(shù)據(jù)變換中的哪一個(例如,無數(shù)據(jù)變換、拌和、廣播)。
在A類存儲器訪問820的指令模板的情況下,α字段852被解釋為驅(qū)逐提示字段852B,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(在圖8A中,為存儲器訪問時間825指令模板和存儲器訪問非時間830的指令模板分別指定時間852B.1和非時間852B.2),而β字段854被解釋為數(shù)據(jù)操縱字段854C,其內(nèi)容區(qū)分要執(zhí)行大量數(shù)據(jù)操縱操作(也稱為基元(primitive))中的哪一個(例如,無操縱、廣播、源的向上轉(zhuǎn)換、以及目的地的向下轉(zhuǎn)換)。存儲器訪問820的指令模板包括縮放字段860、以及任選的位移字段862A或位移縮放字段862B。
向量存儲器指令使用轉(zhuǎn)換支持來執(zhí)行來自存儲器的向量負載并將向量存儲到存儲器。如同有規(guī)律的向量指令,向量存儲器指令以數(shù)據(jù)元素式的方式與存儲器來回傳輸數(shù)據(jù),其中實際傳輸?shù)脑赜蛇x為寫掩碼的向量掩碼的內(nèi)容闡述。
存儲器訪問的指令模板-時間
時間數(shù)據(jù)是可能很快地重新使用足以從高速緩存受益的數(shù)據(jù)。然而,這是提示且不同的處理器可以不同的方式實現(xiàn)它,包括完全忽略該提示。
存儲器訪問的指令模板-非時間
非時間數(shù)據(jù)是不可能很快地重新使用足以從第一級高速緩存中的高速緩存受益且應當給予驅(qū)逐優(yōu)先級的數(shù)據(jù)。然而,這是提示且不同的處理器可以不同的方式實現(xiàn)它,包括完全忽略該提示。
B類指令模板
在B類指令模板的情況下,α字段852被解釋為寫掩碼控制(Z)字段852C,其內(nèi)容區(qū)分由寫掩碼字段870控制的寫掩碼應當是合并還是歸零。
在B類非存儲器訪問805的指令模板的情況下,β字段854的一部分被解釋為RL字段857A,其內(nèi)容區(qū)分要執(zhí)行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的寫掩碼控制部分舍入控制類型操作812的指令模板和無存儲器訪問的寫掩碼控制VSIZE型操作817的指令模板分別指定舍入857A.1和向量長度(VSIZE)857A.2),而β字段854的其余部分區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無存儲器訪問805指令模板中,縮放字段860、位移字段862A以及位移縮放字段862B都不存在。
在無存儲器訪問的寫掩碼控制的部分舍入控制型操作810的指令模板中,β字段854的其余部分被解釋為舍入操作字段859A,并且停用異常事件報告(給定指令不報告任何種類的浮點異常標志且不提起任何浮點異常處理器)。
舍入操作控制字段859A-只作為舍入操作控制字段858,其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段859A允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段850的內(nèi)容覆蓋該寄存器值。
在無存儲器訪問的寫掩碼控制VSIZE型操作817的指令模板中,β字段854的其余部分被解釋為向量長度字段859B,其內(nèi)容區(qū)分了要執(zhí)行大量數(shù)據(jù)向量長度中的哪一個(例如,128字節(jié)、256字節(jié)、或512字節(jié))。
在B類存儲器訪問820的指令模板的情況下,β字段854的一部分被解釋為廣播字段857B,其內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作,而β字段854的其余部分被解釋為向量長度字段859B。存儲器訪問820的指令模板包括縮放字段860、以及任選的位移字段862A或位移縮放字段862B。
針對通用向量友好指令格式800,示出完整操作碼字段874,包括格式字段840、基礎(chǔ)操作字段842以及數(shù)據(jù)元素寬度字段864。盡管示出了其中完整操作碼字段874包括所有這些字段的一個實施例,但是完整操作碼字段874包括在不支持所有這些字段的實施例中的少于所有的這些字段。完整操作碼字段874提供該操作碼(opcode)。
擴充操作字段850、數(shù)據(jù)元素寬度字段864以及寫掩碼字段870允許這些特征在每一指令的基礎(chǔ)上以通用向量友好指令格式指定。
寫掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類型的指令,其中這些指令允許基于不同的數(shù)據(jù)元素寬度應用該掩碼。
在A類和B類內(nèi)找到的各種指令模板在不同的情形下是有益的。在本發(fā)明的一些實施例中,不同處理器或者處理器內(nèi)的不同核可只有支持僅A類、僅B類、或者可支持兩類。舉例而言,期望用于通用計算的高性能通用無序核可只支持B類,期望主要用于圖形和/或科學(吞吐量)計算的核可只支持A類,并且期望用于兩者的核可支持兩者(當然,具有來自兩類的模板和指令的一些混合的核,但是并非來自兩類的所有模板和指令都在本發(fā)明的范圍內(nèi))。同樣,單一處理器可包括多個核,所有核支持相同的類或者其中不同的核支持不同的類。舉例而言,在具有分離的圖形和通用核的處理器中,圖形核中的期望主要用于圖形和/或科學計算的一個核可僅支持A類,而通用核中的一個或多個可以是具有期望用于通用計算的僅支持B類的無序執(zhí)行和寄存器重命名的高性能通用核。沒有單獨的圖形核的另一處理器可包括支持A類和B類兩者的一個或多個通用有序或無序核。當然,在本發(fā)明的不同實施例中,來自一類的特征也可在其他類中實現(xiàn)。以高級語言撰寫的程序可被輸入(例如,僅僅按時間編譯或者統(tǒng)計編譯)到各種不同的可執(zhí)行形式,包括:1)只有用于執(zhí)行的目標處理器支持的類的指令的形式;或者2)具有使用所有類的指令的不同組合而撰寫的替換例程且具有選擇這些例程以基于由當前正在執(zhí)行代碼的處理器支持的指令而執(zhí)行的控制流代碼的形式。
示例性專用向量友好指令格式
圖9A-9D是示出根據(jù)本發(fā)明的實施例的示例性專用向量友好指令格式的框圖。圖9A-9D示出在其指定位置、大小、解釋和字段的次序、以及那些字段中的一些字段的值的意義上是專用的專用矢量友好指令格式900。專用矢量友好指令格式900可用于擴展x86指令集,并且由此一些字段類似于在現(xiàn)有x86指令集及其擴展(例如,AVX)中使用的那些字段或與之相同。該格式保持與具有擴展的現(xiàn)有x86指令集的前綴編碼字段、實操作碼字節(jié)字段、MODR/M字段、SIB字段、位移字段、以及立即數(shù)字段一致。示出來自圖8A-8B的字段,來自圖9A-9D的字段映射到來自圖8A-8B的字段。
應當理解,雖然出于說明的目的在通用矢量友好指令格式800的上下文中,本發(fā)明的實施例參考專用矢量友好指令格式900進行了描述,但是本發(fā)明不限于專用矢量友好指令格式900,聲明的地方除外。例如,通用向量友好指令格式800構(gòu)想各種字段的各種可能的大小,而專用向量友好指令格式900被示為具有特定大小的字段。作為具體示例,盡管在專用向量友好指令格式900中數(shù)據(jù)元素寬度字段864被示為一位字段,但是本發(fā)明不限于此(即,通用向量友好指令格式800構(gòu)想數(shù)據(jù)元素寬度字段864的其他大小)。
通用向量友好指令格式800包括以下列出的按照圖9A中示出的順序的如下字段。
EVEX前綴(字節(jié)0-3)902-以四字節(jié)形式進行編碼。
格式字段840(EVEX字節(jié)0,比特[7:0])-第一字節(jié)(EVEX字節(jié)0)是格式字段840,并且它包含0x62(在本發(fā)明的一個實施例中用于區(qū)分向量友好指令格式的唯一值)。
第二-第四字節(jié)(EVEX字節(jié)1-3)包括提供專用能力的大量比特字段。
REX字段905(EVEX字節(jié)1,比特[7-5])-由EVEX.R比特字段(EVEX字節(jié)1,比特[7]–R)、EVEX.X比特字段(EVEX字節(jié)1,比特[6]–X)以及(857BEX字節(jié)1,比特[5]–B)組成。EVEX.R、EVEX.X和EVEX.B比特字段提供與對應VEX比特字段相同的功能,并且使用(多個)1補碼的形式進行編碼,即ZMM0被編碼為1111B,ZMM15被編碼為0000B。這些指令的其他字段對如在本領(lǐng)域中已知的寄存器索引的較低三個比特(rrr、xxx、以及bbb)進行編碼,由此Rrrr、Xxxx以及Bbbb可通過增加EVEX.R、EVEX.X以及EVEX.B來形成。
REX’字段810-這是REX’字段810的第一部分,并且是用于對擴展的32個寄存器集合的較高16個或較低16個寄存器進行編碼的EVEX.R’比特字段(EVEX字節(jié)1,比特[4]–R’)。在本發(fā)明的一個實施例中,該位與以下指示的其他位一起以位顛倒的格式存儲以(在公知x86的32比特模式下)與其實操作碼字節(jié)是62的BOUND指令進行區(qū)分,但是在MOD R/M字段(在下文中描述)中不接受MOD字段中的值11;本發(fā)明的替換實施例不以顛倒的格式存儲該指示的位以及其他指示的位。值1用于對較低16個寄存器進行編碼。換句話說,通過組合EVEX.R’、EVEX.R、以及來自其他字段的其他RRR來形成R’Rrrr。
操作碼映射字段915(EVEX字節(jié)1,比特[3:0]–mmmm)–其內(nèi)容對隱含的領(lǐng)先操作碼字節(jié)(0F、0F 38、或0F 3)進行編碼。
數(shù)據(jù)元素寬度字段864(EVEX字節(jié)2,比特[7]–W)-由記號EVEX.W表示。EVEX.W用于定義數(shù)據(jù)類型(32比特數(shù)據(jù)元素或64比特數(shù)據(jù)元素)的粒度(大小)。
EVEX.vvvv 920(EVEX字節(jié)2,比特[6:3]-vvvv)-EVEX.vvvv的作用可包括如下:1)EVEX.vvvv對以顛倒((多個)1補碼)的形式指定的第一源寄存器操作數(shù)進行編碼且對具有兩個或兩個以上源操作數(shù)的指令有效;2)EVEX.vvvv針對特定向量位移對以(多個)1補碼的形式指定的目的地寄存器操作數(shù)進行編碼;或者3)EVEX.vvvv不對任何操作數(shù)進行編碼,保留該字段,并且應當包含1111b。由此,EVEX.vvvv字段920對以顛倒((多個)1補碼)的形式存儲的第一源寄存器指定符的4個低階比特進行編碼。取決于該指令,額外不同的EVEX比特字段用于將指定符大小擴展到32個寄存器。
EVEX.U 868類字段(EVEX字節(jié)2,比特[2]-U)-如果EVEX.U=0,則它指示A類或EVEX.U0,如果EVEX.U=1,則它指示B類或EVEX.U1。
前綴編碼字段925(EVEX字節(jié)2,比特[1:0]-pp)-提供了用于基礎(chǔ)操作字段的附加比特。除了對以EVEX前綴格式的傳統(tǒng)SSE指令提供支持以外,這也具有的壓縮SIMD前綴的益處(EVEX前綴只需要2比特,而不是需要字節(jié)來表達SIMD前綴)。在一個實施例中,為了支持使用以傳統(tǒng)格式和以EVEX前綴格式的SIMD前綴(66H、F2H、F3H)的傳統(tǒng)SSE指令,這些傳統(tǒng)SIMD前綴被編碼成SIMD前綴編碼字段;并且在運行時在提供給解碼器的PLA之前被擴展成傳統(tǒng)SIMD前綴(因此PLA可執(zhí)行傳統(tǒng)和EVEX格式的這些傳統(tǒng)指令,而無需修改)。雖然較新的指令可將EVEX前綴編碼字段的內(nèi)容直接作為操作碼擴展,但是為了一致性,特定實施例以類似的方式擴展,但允許由這些傳統(tǒng)SIMD前綴指定不同的含義。替換實施例可重新設(shè)計PLA以支持2比特SIMD前綴編碼,并且由此不需要擴展。
α字段852(EVEX字節(jié)3,位[7]–EH,也稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫掩碼控制、以及EVEX.N,還被示為具有α)-如先前所述的,該字段是上下文專用的。
β字段854(EVEX字節(jié)3,比特[6:4]-SSS,也稱為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB,還被示為具有βββ)-如先前所述的,該字段是內(nèi)容專用的。
REX’字段810-這是REX’字段的其余部分,并且是可用于對擴展的32個寄存器集合的較高16個或較低16寄存器進行編碼的EVEX.R’位字段(EVEX字節(jié)3,位[3]–V’)。該位以位反轉(zhuǎn)的格式存儲。值1用于對較低16個寄存器進行編碼。換句話說,通過組合EVEX.V’、EVEX.vvvv來形成V’VVVV。
寫掩碼字段870(EVEX字節(jié)3,比特[2:0]-kkk)-其內(nèi)容指定寫掩碼寄存器中的寄存器索引,如先前所述的。在本發(fā)明的一個實施例中,專用值EVEX.kkk=000具有隱含著沒有寫掩碼用于特定指令(這可以各種方式(包括使用硬連線到所有的寫掩碼或者旁路掩碼硬件的硬件)實現(xiàn))的特別行為。
實操作碼字段930(字節(jié)4)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中指定。
MOD R/M字段940(字節(jié)5)包括MOD字段942、Reg字段944、以及R/M字段946。如先前所述的,MOD字段942的內(nèi)容在存儲器訪問和非存儲器訪問的操作之間進行區(qū)分。Reg字段944的作用可被歸結(jié)為兩種情形:對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼;或者被視為操作碼擴展且不用于對任何指令操作數(shù)進行編碼。R/M字段946的作用可包括如下:對參考存儲器地址的指令操作數(shù)進行編碼;或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼。
縮放索引基數(shù)(SIB)字節(jié)(字節(jié)6)-如先前所述的,縮放字段850的內(nèi)容用于存儲器地址生成。SIB.xxx 954和SIB.bbb 956-先前已經(jīng)針對寄存器索引Xxxx和Bbbb參考了這些字段的內(nèi)容。
位移字段862A(字節(jié)7-10)-當MOD字段942包含10時,字節(jié)7-10是位移字段862A,并且它與傳統(tǒng)32比特位移(disp32)一樣地工作,并且以字節(jié)粒度工作。
位移因數(shù)字段862B(字節(jié)7)-當MOD字段942包含01時,字節(jié)7是位移因數(shù)字段862B。該字段的位置與傳統(tǒng)x86指令集8比特位移(disp8)的位置相同,它以字節(jié)粒度工作。由于disp8是符號擴展的,因此它可只在-128和127字節(jié)偏移量之間尋址,在64字節(jié)的高速緩存線的方面,disp8使用可被設(shè)為僅四個真正有用的值-128、-64、0和64的8比特;由于常常需要更大的范圍,所以使用disp32;然而,disp32需要4個字節(jié)。與disp8和disp32對比,位移因數(shù)字段862B是disp8的重新解釋;當使用位移因數(shù)字段862B時,實際位移通過位移因數(shù)字段的內(nèi)容乘以存儲器操作數(shù)訪問的大小(N)確定。該類型的位移被稱為disp8*N。這減小了平均指令長度(用于位移但具有大得多的范圍的單一字節(jié))。這種壓縮位移基于有效位移是存儲器訪問的粒度的倍數(shù)的假設(shè),并且由此地址偏移量的冗余低階位不需要被編碼。換句話說,位移因數(shù)字段862B替代傳統(tǒng)x86指令集8位位移。由此,位移因數(shù)字段862B以與x86指令集8比特位移相同的方式(因此在ModRM/SIB編碼規(guī)則中沒有變化)進行編碼,唯一的不同在于,disp8超載至disp8*N。換句話說,在編碼規(guī)則或編碼長度中沒有變化,而僅在通過硬件對位移值的解釋中有變化(這需要使位移縮放存儲器操作數(shù)的大小以獲得字節(jié)式地址偏移量)。
立即數(shù)字段872如先前所述地操作。
完整操作碼字段
圖9B是示出根據(jù)本發(fā)明的實施例的構(gòu)成完整操作碼字段874的具有專用向量友好指令格式900的字段的方框圖。具體地,完整操作碼字段874包括格式字段840、基礎(chǔ)操作字段842、以及數(shù)據(jù)元素寬度(W)字段864?;A(chǔ)操作字段842包括前綴編碼字段925、操作碼映射字段915以及實操作碼字段930。
寄存器索引字段
圖9C是示出根據(jù)本發(fā)明的一個實施例的構(gòu)成寄存器索引字段844的具有專用矢量友好指令格式900的字段的方框圖。具體地,寄存器索引字段844包括REX字段905、REX’字段910、MODR/M.reg字段944、MODR/M.r/m字段946、VVVV字段920、xxx字段954以及bbb字段956。
擴充操作字段
圖9D是示出根據(jù)本發(fā)明的一個實施例的構(gòu)成擴充操作字段850的具有專用矢量友好指令格式900的字段的方框圖。當類(U)字段868包含0時,它表達EVEX.U0(A類868A);當它包含1時,它表達EVEX.U1(B類868B)。當U=0且MOD字段942包含11(表達無存儲器訪問操作)時,α字段852(EVEX字節(jié)3,比特[7]–EH)被解釋為rs字段852A。當rs字段852A包含1(舍入852A.1)時,β字段854(EVEX字節(jié)3,比特[6:4]–SSS)被解釋為舍入控制字段854A。舍入控制字段854A包括一比特SAE字段856和兩比特舍入操作字段858。當rs字段852A包含0(數(shù)據(jù)變換852A.2)時,β字段854(EVEX字節(jié)3,比特[6:4]–SSS)被解釋為三比特數(shù)據(jù)變換字段854B。當U=0且MOD字段942包含00、01或10(表達存儲器訪問操作)時,α字段852(EVEX字節(jié)3,比特[7]–EH)被解釋為驅(qū)逐提示(EH)字段852B且β字段854(EVEX字節(jié)3,比特[6:4]–SSS)被解釋為三比特數(shù)據(jù)操縱字段854C。
當U=1時,α字段852(EVEX字節(jié)3,位[7]–EH)被解釋為寫掩碼控制(Z)字段852C。當U=1且MOD字段942包含11(表達無存儲器訪問操作)時,β字段854的一部分(EVEX字節(jié)3,比特[4]–S0)被解釋為RL字段857A;當它包含1(舍入857A.1)時,β字段854的其余部分(EVEX字節(jié)3,比特[6-5]–S2-1)被解釋為舍入操作字段859A,而當RL字段857A包含0(VSIZE 857.A2)時,β字段854的其余部分(EVEX字節(jié)3,比特[6-5]-S2-1)被解釋為矢量長度字段859B(EVEX字節(jié)3,比特[6-5]–L1-0)。當U=1且MOD字段942包含00、01或10(表達存儲器訪問操作)時,β字段854(EVEX字節(jié)3,比特[6:4]–SSS)被解釋為矢量長度字段859B(EVEX字節(jié)3,比特[6-5]–L1-0)和廣播字段857B(EVEX字節(jié)3,比特[4]–B)。
示例性編碼成具體的示例友好指令格式
示例性寄存器架構(gòu)
圖10是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)1000的框圖。在所示出的實施例中,有32個512比特寬的矢量寄存器1010;這些寄存器被引用為zmm0到zmm31。較低的16zmm寄存器的較低階256個比特覆蓋在寄存器ymm0-16上。較低的16zmm寄存器的較低階128個比特(ymm寄存器的較低階128個比特)覆蓋在寄存器xmm0-15上。專用向量友好指令格式900對這些覆蓋的寄存器組操作,如在以下表格中所示的。
換句話說,矢量長度字段859B在最大長度與一個或多個其他較短長度之間進行選擇,其中每一這種較短長度是前一長度的一半,并且沒有矢量長度字段859B的指令模板對最大矢量長度操作。此外,在一個實施例中,專用矢量友好指令格式900的B類指令模板對打包或標量單/雙精度浮點數(shù)據(jù)以及打包或標量整數(shù)數(shù)據(jù)操作。標量操作是在zmm/ymm/xmm寄存器中的最低階數(shù)據(jù)元素位置上執(zhí)行的操作;取決于本實施例,較高階數(shù)據(jù)元素位置保持與在指令之前相同或者調(diào)零。
寫掩碼寄存器1015-在所示的實施例中,存在8個寫掩碼寄存器(k0至k7),每一寫掩碼寄存器的大小是64比特。在替換實施例中,寫掩碼寄存器1015的大小是16比特。如先前所述的,在本發(fā)明的一個實施例中,向量掩碼寄存器k0無法用作寫掩碼;當正??芍甘緆0的編碼用作寫掩碼時,它選擇硬連線的寫掩碼0xFFFF,從而有效地停用該指令的寫掩碼。
通用寄存器1025——在所示出的實施例中,有十六個64比特通用寄存器,這些寄存器與現(xiàn)有的x86尋址模式來尋址存儲器操作數(shù)一起使用。這些寄存器通過名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP,以及R8到R15來引用。
標量浮點堆棧寄存器組(x87堆棧)1045,在其上面混疊MMX打包整數(shù)平坦寄存器組1050——在所示出的實施例中,x87堆棧是用于使用x87指令集擴展來對32/64/80比特浮點數(shù)據(jù)執(zhí)行標量浮點操作的八元素堆棧;而使用MMX寄存器來對64比特打包整數(shù)數(shù)據(jù)執(zhí)行操作,以及為在MMX和XMM寄存器之間執(zhí)行的某些操作保存操作數(shù)。
本發(fā)明的替換實施例可以使用較寬的或較窄的寄存器。另外,本發(fā)明的替換實施例可以使用多一些,少一些或不同的寄存器組和寄存器。
示例性核架構(gòu)、處理器和計算機架構(gòu)
處理器核可以用出于不同目的的不同方式在不同的處理器中實現(xiàn)。例如,這樣的核的實現(xiàn)可以包括:1)旨在用于通用計算的通用有序核;2)預期用于通用計算的高性能通用無序核;3)主要預期用于圖形和/或科學(吞吐量)計算的專用核。不同處理器的實現(xiàn)可包括:包括預期用于通用計算的一個或多個通用有序核和/或預期用于通用計算的一個或多個通用無序核的CPU;以及2)包括主要預期用于圖形和/或科學(吞吐量)的一個或多個專用核的協(xié)處理器。這樣的不同處理器導致不同的計算機系統(tǒng)架構(gòu),其可包括:1)在與CPU分開的芯片上的協(xié)處理器;2)在與CPU相同的封裝中但分開的管芯上的協(xié)處理器;3)與CPU在相同管芯上的協(xié)處理器(在該情況下,這樣的協(xié)處理器有時被稱為諸如集成圖形和/或科學(吞吐量)邏輯等專用邏輯,或被稱為專用核);以及4)可以將所描述的CPU(有時被稱為應用核或應用處理器)、以上描述的協(xié)處理器和附加功能包括在同一管芯上的片上系統(tǒng)。接著描述示例性核架構(gòu),隨后描述示例性處理器和計算機架構(gòu)。
示例性核架構(gòu)
有序和無序核框圖
圖11A是示出根據(jù)本發(fā)明的實施例的示例性有序流水線和示例性的寄存器重命名的無序發(fā)布/執(zhí)行流水線二者的框圖。圖11B是示出根據(jù)本發(fā)明的各實施例的要包括在處理器中的有序架構(gòu)核的示例性實施例和示例性的寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核的框圖。圖11A-11B中的實線框示出了有序流水線和有序核,而虛線框中的可選附加項示出了寄存器重命名的、無序發(fā)布/執(zhí)行流水線和核。給定有序方面是無序方面的子集的情況下,無序方面將被描述。
在圖11A中,處理器流水線1100包括獲取級1102、長度解碼級1104、解碼級1106、分配級1108、重命名級1110、調(diào)度(也稱為分派或發(fā)布)級1112、寄存器讀取/存儲器讀取級1114、執(zhí)行級1116、寫回/存儲器寫入級1118、異常處理級1122和提交級1124。
圖11B示出了包括耦合到執(zhí)行引擎單元1150的前端單元1130的處理器核1190,且執(zhí)行引擎單元和前端單元兩者都耦合到存儲器單元1170。核1190可以是精簡指令集合計算(RISC)核、復雜指令集合計算(CISC)核、非常長的指令字(VLIW)核或混合或替代核類型。作為又一選項,核1190可以是專用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計算圖形處理器單元(GPGPU)核、或圖形核等等。
前端單元1130包括耦合到指令高速緩存單元1132的分支預測單元1134,該指令高速緩存單元1134被耦合到指令轉(zhuǎn)換后備緩沖器(TLB)1136,該指令轉(zhuǎn)換后備緩沖器1136被耦合到指令獲取單元1138,指令獲取單元1138被耦合到解碼單元1140。解碼單元1140(或解碼器)可解碼指令,并生成從原始指令解碼出的、或以其他方式反映原始指令的、或從原始指令導出的一個或多個微操作、微代碼進入點、微指令、其他指令、或其他控制信號作為輸出。解碼單元1140可使用各種不同的機制來實現(xiàn)。合適的機制的示例包括但不限于查找表、硬件實現(xiàn)、可編程邏輯陣列(OLA)、微代碼只讀存儲器(ROM)等。在一個實施例中,核1190包括存儲(例如,在解碼單元1140中或否則在前端單元1130內(nèi)的)某些宏指令的微代碼的微代碼ROM或其他介質(zhì)。解碼單元1140耦合至執(zhí)行引擎單元1150中的重命名/分配器單元1152。
執(zhí)行引擎單元1150包括重命名/分配器單元1152,該重命名/分配器單元1152耦合至引退單元1154和一個或多個調(diào)度器單元(多個)1156的集合。調(diào)度器單元1156表示任何數(shù)目的不同調(diào)度器,包括預留站、中央指令窗等。調(diào)度器單元1156被耦合到物理寄存器組單元1158。每個物理寄存器組(多個)單元1158表示一個或多個物理寄存器組,其中不同的物理寄存器組存儲一種或多種不同的數(shù)據(jù)類型,諸如標量整數(shù)、標量浮點、打包整數(shù)、打包浮點、矢量整數(shù)、矢量浮點、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個實施例中,物理寄存器組單元1158包括矢量寄存器單元、寫掩碼寄存器單元和標量寄存器單元。這些寄存器單元可以提供架構(gòu)矢量寄存器、矢量掩碼寄存器、和通用寄存器。物理寄存器組單元1158與引退單元1154重疊以示出可以用來實現(xiàn)寄存器重命名和無序執(zhí)行的各種方式(例如,使用記錄器緩沖器和引退寄存器組;使用將來的文件、歷史緩沖器和引退寄存器組;使用寄存器映射和寄存器池等等)。引退單元1154和物理寄存器組(多個)單元(多個)1158被耦合到執(zhí)行群集(多個)1160。執(zhí)行群集1160包括一個或多個執(zhí)行單元1162的集合和一個或多個存儲器訪問單元1164的集合。執(zhí)行單元1162可以執(zhí)行各種操作(例如,移位、加法、減法、乘法),以及對各種類型的數(shù)據(jù)(例如,標量浮點、打包整數(shù)、打包浮點、向量整型、向量浮點)執(zhí)行。盡管某些實施例可以包括專用于特定功能或功能集合的多個執(zhí)行單元,但其他實施例可包括全部執(zhí)行所有函數(shù)的僅一個執(zhí)行單元或多個執(zhí)行單元。調(diào)度器單元(多個)1156、物理寄存器組(多個)單元(多個)1158和執(zhí)行群集(多個)1160被示為可能有多個,因為某些實施例為某些類型的數(shù)據(jù)/操作(例如,標量整型流水線、標量浮點/打包整型/打包浮點/矢量整型/矢量浮點流水線,和/或各自具有其自己的調(diào)度器單元、物理寄存器組(多個)單元和/或執(zhí)行群集的存儲器訪問流水線——以及在分開的存儲器訪問流水線的情況下,實現(xiàn)其中僅該流水線的執(zhí)行群集具有存儲器訪問單元(多個)1164的某些實施例)創(chuàng)建分開的流水線。還應當理解,在分開的流水線被使用的情況下,這些流水線中的一個或多個可以為無序發(fā)布/執(zhí)行,并且其余流水線可以為有序發(fā)布/執(zhí)行。
存儲器訪問單元1164的集合被耦合到存儲器單元1170,該存儲器單元1170包括耦合到數(shù)據(jù)高速緩存單元1174的數(shù)據(jù)TLB單元1172,其中數(shù)據(jù)高速緩存單元1174耦合到二級(L2)高速緩存單元1176。在一個示例性實施例中,存儲器訪問單元1164可包括加載單元、存儲地址單元和存儲數(shù)據(jù)單元,其中的每一個均耦合至存儲器單元1170中的數(shù)據(jù)TLB單元1172。指令高速緩存單元1134還耦合到存儲器單元1170中的二級(L2)高速緩存單元1176。L2高速緩存單元1176被耦合到一個或多個其他級的高速緩存,并最終耦合到主存儲器。
作為示例,示例性寄存器重命名的、無序發(fā)布/執(zhí)行核架構(gòu)可以如下實現(xiàn)流水線1100:1)指令獲取1138執(zhí)行獲取和長度解碼級1102和1104;2)解碼單元1140執(zhí)行解碼級1106;3)重命名/分配器單元1152執(zhí)行分配級1108和重命名級1110;4)調(diào)度器單元1156執(zhí)行調(diào)度級1112;5)物理寄存器組單元1158和存儲器單元1170執(zhí)行寄存器讀取/存儲器讀取級1114;執(zhí)行群集1160執(zhí)行執(zhí)行級1116;6)存儲器單元1170和物理寄存器組單元1158執(zhí)行寫回/存儲器寫入級1118;7)各單元可牽涉到異常處理級1122;以及8)引退單元1154和物理寄存器組單元1158執(zhí)行提交級1124。
核1190可支持一個或多個指令集合(例如,x86指令集合(具有與較新版本一起添加的某些擴展);加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集合;加利福尼州桑尼維爾市的ARM控股的ARM指令集合(具有諸如NEON等可選附加擴展)),其中包括本文中描述的各指令。在一個實施例中,核1190包括支持打包數(shù)據(jù)指令集擴展(例如,AVX1、AVX2和/或先前描述的一些形式的一般矢量友好指令格式(U=0和/或U=1))的邏輯,從而允許很多多媒體應用使用的操作能夠使用打包數(shù)據(jù)來執(zhí)行。
應當理解,核可支持多線程化(執(zhí)行兩個或更多個并行的操作或線程的集合),并且可以按各種方式來完成該多線程化,此各種方式包括時分多線程化、同步多線程化(其中單個物理核為物理核正同步多線程化的各線程中的每一個線程提供邏輯核)、或其組合(例如,時分獲取和解碼以及此后諸如用超線程化技術(shù)來同步多線程化)。
盡管在無序執(zhí)行的上下文中描述了寄存器重命名,但應當理解,可以在有序架構(gòu)中使用寄存器重命名。盡管所解說的處理器的實施例還包括分開的指令和數(shù)據(jù)高速緩存單元1134/1174以及共享L2高速緩存單元1176,但替換實施例可以具有用于指令和數(shù)據(jù)兩者的單個內(nèi)部高速緩存,諸如例如一級(L1)內(nèi)部高速緩存或多個級別的內(nèi)部緩存。在某些實施例中,該系統(tǒng)可包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合?;蛘撸懈咚倬彺娑伎梢栽诤撕?或處理器的外部。
具體的示例性有序核架構(gòu)
圖12A-12B示出了更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的若干邏輯塊之一(包括相同類型和/或不同類型的其他核)。這些邏輯塊通過高帶寬的互連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與某些固定的功能邏輯、存儲器I/O接口和其它必要的I/O邏輯通信,這依賴于應用。
圖12A是根據(jù)本發(fā)明的各實施例的單個處理器核連同它與管芯上互連網(wǎng)絡(luò)1202的連接以及其二級(L2)高速緩存1204的本地子集的框圖。在一個實施例中,指令解碼器1200支持具有打包數(shù)據(jù)指令集合擴展的x86指令集。L1高速緩存1206允許對標量和矢量單元中的高速緩存存儲器的低等待時間訪問。盡管在一個實施例中(為了簡化設(shè)計),標量單元1208和矢量單元1210使用分開的寄存器集合(分別為標量寄存器1212和矢量寄存器1214),并且在這些寄存器之間轉(zhuǎn)移的數(shù)據(jù)被寫入到存儲器并隨后從一級(L1)高速緩存1206讀回,但是本發(fā)明的替換實施例可以使用不同的方法(例如使用單個寄存器集合或包括允許數(shù)據(jù)在這兩個寄存器組之間傳輸而無需被寫入和讀回的通信路徑)。
L2高速緩存的本地子集1204是全局L2高速緩存的一部分,該全局L2高速緩存被劃分成多個分開的本地子集,即每個處理器核一個本地子集。每個處理器核具有到其自己的L2高速緩存1204的本地子集的直接訪問路徑。被處理器核讀出的數(shù)據(jù)被存儲在其L2高速緩存子集1204中,并且可以被快速訪問,該訪問與其他處理器核訪問其自己的本地L2高速緩存子集并行。被處理器核寫入的數(shù)據(jù)被存儲在其自己的L2高速緩存子集1204中,并在必要的情況下從其它子集清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如處理器核、L2高速緩存和其它邏輯塊之類的代理在芯片內(nèi)彼此通信。每個環(huán)形數(shù)據(jù)路徑為每個方向1012比特寬。
圖12B是根據(jù)本發(fā)明的各實施例的圖12A中的處理器核的一部分的展開圖。圖12B包括作為L1高速緩存1204的L1數(shù)據(jù)高速緩存1206A部分,以及關(guān)于矢量單元1210和矢量寄存器1214的更多細節(jié)。具體地說,矢量單元1210是16寬矢量處理單元(VPU)(見16寬ALU 1228),該單元執(zhí)行整型、單精度浮點以及雙精度浮點指令中的一個或多個。該VPU通過拌和單元1220支持對寄存器輸入的混合、通過數(shù)值轉(zhuǎn)換單元1222A-B支持數(shù)值轉(zhuǎn)換,并通過復制單元1224支持對存儲器輸入的復制。寫掩碼寄存器1226允許斷言所得的矢量寫入。
具有集成存儲器控制器和圖形器件的處理器
圖13是根據(jù)本發(fā)明的實施例的可具有一個以上核、可具有集成存儲器控制器、并且可具有集成圖形的處理器1300的框圖。圖13的實線框示出了處理器1300,處理器1300具有單個核1302A、系統(tǒng)代理1310、一組一個或多個總線控制器單元1316,而可選附加的虛線框示出了替代的處理器1300,其具有多個核1302A-N、系統(tǒng)代理單元1310中的一組一個或多個集成存儲器控制器單元1314以及專用邏輯1308。
因此,處理器1300的不同實現(xiàn)可包括:1)CPU,其中專用邏輯1308是集成圖形和/或科學(吞吐量)邏輯(其可包括一個或多個核),并且核1302A-N是一個或多個通用核(例如,通用的有序核、通用的無序核、這兩者的組合);2)協(xié)處理器,其中核1302A-N是主要預期用于圖形和/或科學(吞吐量)的大量專用核;以及3)協(xié)處理器,其中核1302A-N是大量通用有序核。因此,處理器1300可以是通用處理器、協(xié)處理器或?qū)S锰幚砥?,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高吞吐量的集成眾核(MIC)協(xié)處理器(包括30個或更多核)、或嵌入式處理器等。該處理器可以被實現(xiàn)在一個或多個芯片上。處理器1300可以是一個或多個襯底的一部分,和/或可以使用諸如例如BiCMOS、CMOS或NMOS等的多個加工技術(shù)中的任何一個技術(shù)將其實現(xiàn)在一個或多個襯底上。
存儲器層次結(jié)構(gòu)包括在各核內(nèi)的一個或多個級別的高速緩存、一個或多個共享高速緩存單元1306的集合、以及耦合至集成存儲器控制器單元1314的集合的外部存儲器(未示出)。該共享高速緩存單元1306的集合可以包括一個或多個中間級高速緩存,諸如二級(L2)、三級(L3)、四級(L4)或其他級別的高速緩存、末級高速緩存(LLC)、和/或其組合。盡管在一個實施例中,基于環(huán)的互連單元1312將集成圖形邏輯1308、共享高速緩存單元1306的集合以及系統(tǒng)代理單元1310/集成存儲器控制器單元1314互連,但替代實施例可使用任何數(shù)量的公知技術(shù)來將這些單元互連。在一個實施例中,在一個或多個高速緩存單元1306與核1302-A-N之間維持相干性。
在某些實施例中,核1302A-N中的一個或多個核能夠多線程化。系統(tǒng)代理1310包括協(xié)調(diào)和操作核1302A-N的那些組件。系統(tǒng)代理單元1310可包括例如功率控制單元(PCU)和顯示單元。PCU可以是或包括調(diào)整核1302A-N和集成圖形邏輯1308的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動一個或多個外部連接的顯示器。
核1302A-N在架構(gòu)指令集合方面可以是同構(gòu)的或異構(gòu)的;即,這些核1302A-N中的兩個或更多個核可能能夠執(zhí)行相同的指令集合,而其他核可能能夠執(zhí)行該指令集合的僅僅子集或不同的指令集合。
示例性計算機架構(gòu)
圖14-17是示例性計算機架構(gòu)的框圖。本領(lǐng)域已知的對膝上型設(shè)備、臺式機、手持PC、個人數(shù)字助理、工程工作站、服務器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機、嵌入式處理器、數(shù)字信號處理器(DSP)、圖形設(shè)備、視頻游戲設(shè)備、機頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備以及各種其他電子設(shè)備的其他系統(tǒng)設(shè)計和配置也是合適的。一般來說,能夠納入本文中所公開的處理器和/或其它執(zhí)行邏輯的大量系統(tǒng)和電子設(shè)備一般都是合適的。
現(xiàn)在參考圖14,所示出的是根據(jù)本發(fā)明一實施例的系統(tǒng)1400的框圖。系統(tǒng)1400可以包括一個或多個處理器1410、1415,這些處理器耦合到控制器中樞1420。在一個實施例中,控制器中樞1420包括圖形存儲器控制器中樞(GMCH)1490和輸入/輸出中樞(IOH)1450(其可以在分開的芯片上);GMCH 1490包括存儲器1440和協(xié)處理器1445耦合到的存儲器和圖形控制器;IOH 1450將輸入/輸出(I/O)設(shè)備1460耦合到GMCH 1490?;蛘撸鎯ζ骱蛨D形控制中的一個或兩個集成在處理器內(nèi)(如本文所述),存儲器1440和協(xié)處理器1445直接耦合到處理器1410和在單個芯片中具有IOH 1450的控制器中樞1420。
附加處理器1415的可選性質(zhì)用虛線表示在圖14中。每一處理器1410、1415可包括本文中描述的處理核中的一個或多個,并且可以是處理器1300的某一版本。
存儲器1440可以是例如動態(tài)隨機存取存儲器(DRAM)、相變化存儲器(PCM)或這兩者的組合。對于至少一個實施例,控制器中樞1420經(jīng)由諸如前側(cè)總線(FSB)之類的多分總線(multi-drop bus)、諸如快速通道互連(QPI)之類的點對點接口、或者類似的連接1495與處理器1410、1415進行通信。
在一個實施例中,協(xié)處理器1445是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。在一個實施例中,控制器中樞1420可以包括集成圖形加速計。
按照包括架構(gòu)、微架構(gòu)、熱、功耗特征等等優(yōu)點的度量譜,物理資源1410、1415之間存在各種差別。
在一個實施例中,處理器1410執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。嵌入在這些指令中的可以是協(xié)處理器指令。處理器1410識別如具有應當由附連的協(xié)處理器1445執(zhí)行的類型的這些協(xié)處理器指令。因此,處理器1410在協(xié)處理器總線或者其他互連上將這些協(xié)處理器指令(或者表示協(xié)處理器指令的控制信號)發(fā)布到協(xié)處理器1445。協(xié)處理器1445接受并執(zhí)行所接收的協(xié)處理器指令。
現(xiàn)在參照圖15,所示出的是根據(jù)本發(fā)明一個實施例的更具體的第一示例性系統(tǒng)1500的框圖。如圖15所示,多處理器系統(tǒng)1500是點對點互連系統(tǒng),并包括經(jīng)由點對點互連1550耦合的第一處理器1570和第二處理器1580。處理器1570和1580中的每一個都可以是處理器1300的某一版本。在本發(fā)明的一個實施例中,處理器1570和1580分別是處理器1410和1415,而協(xié)處理器1538是協(xié)處理器1445。在另一實施例中,處理器1570和1580分別是處理器1410和協(xié)處理器1445。
處理器1570和1580被示為分別包括集成存儲器控制器(IMC)單元1572和1582。處理器1570還包括作為其總線控制器單元的一部分的點對點(P-P)接口1576和1578;類似地,第二處理器1580包括點對點接口1586和1588。處理器1570、1580可以使用點對點(P-P)電路1578、1588經(jīng)由P-P接口1550來交換信息。如圖15所示,IMC 1572和1582將各處理器耦合至相應的存儲器,即存儲器1532和存儲器1534,這些存儲器可以是本地附連至相應的處理器的主存儲器的一部分。
處理器1570、1580可各自經(jīng)由使用點對點接口電路1576、1594、1586、1598的各個P-P接口1552、1554與芯片組1590交換信息。芯片組1590可以可選地經(jīng)由高性能接口1539與協(xié)處理器1538交換信息。在一個實施例中,協(xié)處理器1538是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。
共享高速緩存(未示出)可以被包括在任一處理器之內(nèi)或被包括兩個處理器外部但仍經(jīng)由P-P互連與這些處理器連接,從而如果將某處理器置于低功率模式時,可將任一處理器或兩個處理器的本地高速緩存信息存儲在該共享高速緩存中。
芯片組1590可經(jīng)由接口1596耦合至第一總線1516。在一個實施例中,第一總線1516可以是外圍部件互連(PCI)總線,或諸如PCI Express總線或其它第三代I/O互連總線之類的總線,但本發(fā)明的范圍并不受此限制。
如圖15所示,各種I/O設(shè)備1514可以連同總線橋1518耦合到第一總線1516,總線橋1518將第一總線1516耦合至第二總線1520。在一個實施例中,諸如協(xié)處理器、高吞吐量MIC處理器、GPGPU的處理器、加速計(諸如例如圖形加速計或數(shù)字信號處理器(DSP)單元)、場可編程門陣列或任何其他處理器的一個或多個附加處理器1515被耦合到第一總線1516。在一個實施例中,第二總線1520可以是低引腳計數(shù)(LPC)總線。各種設(shè)備可以被耦合至第二總線1520,在一個實施例中這些設(shè)備包括例如鍵盤/鼠標1522、通信設(shè)備1527以及諸如可包括指令/代碼和數(shù)據(jù)1528的盤驅(qū)動器或其它海量存儲設(shè)備的存儲單元1530。此外,音頻I/O 1524可以被耦合至第二總線1520。注意,其它架構(gòu)是可能的。例如,取代圖15的點對點架構(gòu),系統(tǒng)可以實現(xiàn)多站總線或其它這類架構(gòu)。
現(xiàn)在參照圖16,所示出的是根據(jù)本發(fā)明實施例的更具體的第二示例性系統(tǒng)1600的框圖。圖15和16中的相同元件使用相同附圖標記,且在圖16中省略了圖15的某些方面以避免混淆圖16的其它方面。
圖16示出處理器1570、1580可分別包括集成存儲器和I/O控制邏輯(“CL”)1572和1582。因此,CL 1572、1582包括集成存儲器控制器單元并包括I/O控制邏輯。圖16不僅解說了耦合至CL 1572、1582的存儲器1532、1534,而且還解說了同樣耦合至控制邏輯1572、1582的I/O設(shè)備1614。傳統(tǒng)I/O設(shè)備1615被耦合至芯片組1590。
現(xiàn)在參照圖17,所示出的是根據(jù)本發(fā)明一個實施例的SoC 1700的框圖。在圖13中,相似的部件具有同樣的附圖標記。另外,虛線框是更先進的SoC的可選特征。在圖17中,互連單元1702被耦合至:應用處理器1710,該應用處理器包括一個或多個核202A-N的集合以及共享高速緩存單元1306;系統(tǒng)代理單元1310;總線控制器單元1316;集成存儲器控制器單元1314;一組或一個或多個協(xié)處理器1720,其可包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機存取存儲器(SRAM)單元1730;直接存儲器存取(DMA)單元1732;以及用于耦合至一個或多個外部顯示器的顯示單元1740。在一個實施例中,協(xié)處理器1720包括專用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、GPGPU、高吞吐量MIC處理器、或嵌入式處理器等等。
本文公開的機制的各實施例可以被實現(xiàn)在硬件、軟件、固件或這些實現(xiàn)方法的組合中。本發(fā)明的實施例可實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序或程序代碼,該可編程系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備以及至少一個輸出設(shè)備。
可將程序代碼(諸如圖15中示出的代碼1530)應用于輸入指令,以執(zhí)行本文描述的各功能并生成輸出信息。輸出信息可以按已知方式被應用于一個或多個輸出設(shè)備。為了本申請的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器之類的處理器的任何系統(tǒng)。
程序代碼可以用高級程序化語言或面向?qū)ο蟮木幊陶Z言來實現(xiàn),以便與處理系統(tǒng)通信。程序代碼也可以在需要的情況下用匯編語言或機器語言來實現(xiàn)。事實上,本文中描述的機制不僅限于任何特定編程語言的范圍。在任一情形下,語言可以是編譯語言或解釋語言。
至少一個實施例的一個或多個方面可以由存儲在機器可讀介質(zhì)上的表征性指令來實現(xiàn),該指令表示處理器中的各種邏輯,該指令在被機器讀取時使得該機器制作用于執(zhí)行本文所述的技術(shù)的邏輯。被稱為“IP核”的這些表示可以被存儲在有形的機器可讀介質(zhì)上,并被提供給多個客戶或生產(chǎn)設(shè)施以加載到實際制造該邏輯或處理器的制造機器中。
這樣的機器可讀存儲介質(zhì)可以包括但不限于通過機器或設(shè)備制造或形成的物品的非瞬態(tài)、有形安排,其包括存儲介質(zhì),諸如硬盤;任何其它類型的盤,包括軟盤、光盤、緊致盤只讀存儲器(CD-ROM)、緊致盤可重寫(CD-RW)的以及磁光盤;半導體器件,例如只讀存儲器(ROM)、諸如動態(tài)隨機存取存儲器(DRAM)和靜態(tài)隨機存取存儲器(SRAM)的隨機存取存儲器(RAM)、可擦除可編程只讀存儲器(EPROM)、閃存、電可擦除可編程只讀存儲器(EEPROM);相變化存儲器(PCM);磁卡或光卡;或適于存儲電子指令的任何其它類型的介質(zhì)。
因此,本發(fā)明的各實施例還包括非瞬態(tài)、有形機器可讀介質(zhì),該介質(zhì)包含指令或包含設(shè)計數(shù)據(jù),諸如硬件描述語言(HDL),它定義本文中描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特性。這些實施例也被稱為程序產(chǎn)品。
仿真(包括二進制變換、代碼變形等)
在某些情況下,指令轉(zhuǎn)換器可用來將指令從源指令集轉(zhuǎn)換至目標指令集。例如,指令轉(zhuǎn)換器可以變換(例如使用靜態(tài)二進制變換、包括動態(tài)編譯的動態(tài)二進制變換)、變形、仿真或以其它方式將指令轉(zhuǎn)換成將由核來處理的一個或多個其它指令。指令轉(zhuǎn)換器可以用軟件、硬件、固件、或其組合實現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或者部分在處理器上部分在處理器外。
圖18是根據(jù)本發(fā)明的實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進制指令轉(zhuǎn)換成目標指令集中的二進制指令的框圖。在所示的實施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但作為替代該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來實現(xiàn)。圖18示出了用高級語言1802的程序可以使用x86編譯器1804來編譯,以生成可以由具有至少一個x86指令集核1816的處理器原生執(zhí)行的x86二進制代碼1806。具有至少一個x86指令集核1816的處理器表示任何處理器,這些處理器能通過兼容地執(zhí)行或以其他方式處理以下內(nèi)容來執(zhí)行與具有至少一個x86指令集核的英特爾處理器基本相同的功能:1)英特爾x86指令集核的指令集的本質(zhì)部分,或2)被定向為在具有至少一個x86指令集核的英特爾處理器上運行的應用或其它程序的目標代碼版本,以便取得與具有至少一個x86指令集核的英特爾處理器基本相同的結(jié)果。x86編譯器1804表示用于生成x86二進制代碼1806(例如,對象代碼)的編譯器,該二進制代碼1816可通過或不通過附加的鏈接處理在具有至少一個x86指令集核1816的處理器上執(zhí)行。類似地,圖18示出用高級語言1802的程序可以使用替代的指令集編譯器1808來編譯,以生成可以由不具有至少一個x86指令集核1810的處理器(例如具有執(zhí)行加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集,和/或執(zhí)行加利福尼亞州桑尼維爾市的ARM控股公司的ARM指令集的核的處理器)原生執(zhí)行的替代指令集二進制代碼1814。指令轉(zhuǎn)換器1812被用來將x86二進制代碼1806轉(zhuǎn)換成可以由不具有x86指令集核1814的處理器原生執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替換性指令集二進制代碼1810相同,因為能夠這樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將完成一般操作并由來自替換性指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器1812通過仿真、模擬或任何其它過程來表示允許不具有x86指令集處理器或核的處理器或其它電子設(shè)備執(zhí)行x86二進制代碼1806的軟件、固件、硬件或其組合。
盡管已經(jīng)描述了將本地執(zhí)行矢量友好指令格式的實施例,但本發(fā)明的可選實施例可通過運行在執(zhí)行不同指令集的處理器(例如,執(zhí)行美國加利福亞州桑尼維爾的MIPS技術(shù)公司的MIPS指令集的處理器、執(zhí)行加利福亞州桑尼維爾的ARM控股公司的ARM指令集的處理器)上的仿真層來執(zhí)行矢量友好指令格式。同樣,盡管附圖中的流程圖示出本發(fā)明的某些實施例的特定操作順序,按應理解該順序是示例性的(例如,可選實施例可按不同順序執(zhí)行操作、組合某些操作、使某些操作重疊等)。
在以上描述中,為解釋起見,闡明了眾多具體細節(jié)以提供對本發(fā)明的實施例的透徹理解。然而,將對本領(lǐng)域技術(shù)人員明顯的是,沒有這些具體細節(jié)中的一些也可實踐一個或多個其他實施例。提供所描述的具體實施例不是為了限制本發(fā)明而是為了說明本發(fā)明的實施例。本發(fā)明的范圍不是由所提供的具體示例確定,而是僅由所附權(quán)利要求確定。