用於給出相應複數的復共軛的矢量指令的製作方法
2023-05-11 05:10:35 3

本申請是pct國際申請號為pct/us2011/066995、國際申請日為2011年12月22日、中國國家申請號為201180075828.8、題為「用於給出相應複數的復共軛的矢量指令」的申請的分案申請。
背景
本發明的領域一般涉及計算科學,且尤其涉及用於給出相應複數的復共軛的矢量指令。
背景技術:
圖1示出了在半導體晶片上用邏輯電路實現的處理核100的高級圖。該處理核包括流水線101。該流水線由各自被設計成在完全執行程序代碼指令所需的多步驟過程中執行特定步驟的多個級組成。這些級通常包括至少:1)指令取出和解碼;2)數據取出;3)執行;4)寫回。執行級將由在上述步驟1))中所取出和解碼的指令所標識出的特定操作對由相同指令標識出並在另一先前級(例如,上述步驟2))中被取出的數據執行。被操作的數據通常是從(通用)寄存器存儲空間102中取出的。在該操作完成時所創建的新數據通常也被「寫回」寄存器存儲空間(例如,在上述級4))。
與執行級相關聯的邏輯電路通常由多個「執行單元」或「功能單元」103_1至103_n構成,這些單元各自被設計成執行其自身的唯一操作子集(例如,第一功能單元執行整數數學操作,第二功能單元執行浮點指令,第三功能單元執行自/至高速緩存/存儲器的加載/存儲操作等等)。由所有這些功能單元執行的所有操作的集合與處理核100所支持的「指令集」相對應。
兩種類型的處理器架構在計算機科學領域中被廣泛認可:「標量」和「矢量」。標量處理器被設計成執行對單個數據集進行操作的指令,然而矢量處理器被設計成執行對多個數據集進行操作的指令。圖2a和圖2b呈現比較性示例,該比較性示例展示標量處理器與矢量處理器之間的基本差異。
圖2a示出標量and(與)指令的示例,其中單操作數集a和b被「與」在一起以產生奇異(或「標量」)結果c(即,ab=c)。相比之下,圖2b示出矢量and指令的示例,其中兩操作數集a/b和d/e並行地分別「與」在一起以同時產生矢量結果c和f(即,a.and.b=c和d.and.e=f)。根據術語學,「矢量」是具有多個「元素」的數據元素。例如,矢量v=q,r,s,t,u具有五個不同元素:q,r,s,t和u。示例性矢量v的「大小」為五(因為它具有五個元素)。
某些計算任務通過將信息建模為「複數」來處理。複數的形式為「a+jb」,其中「a」指的是「實(re)」項,而「b」指的是「虛(im)」項。a+jb的「復共軛」的形式是「a-jb」。
附圖說明
本發明是作為示例說明的,而不僅限制於各個附圖的圖形,在附圖中,類似的參考編號表示類似的元件,其中:
圖1示出指令執行流水線;
圖2a和2b比較標量和矢量處理;
圖3a至3f涉及用於給出相應複數的復共軛的矢量指令;
圖4涉及由用於給出相應複數的復共軛的矢量指令執行的方法;
圖5a至5b涉及用於給出相應複數的復共軛的矢量指令的邏輯電路;
圖6a例示了示例性avx指令格式;
圖6b示出來自圖6a的哪些欄位構成完整操作碼欄位和基礎操作欄位;
圖6c示出來自圖6a的哪些欄位構成寄存器索引欄位;
圖7a-7b是示出根據本發明的實施例的通用矢量友好指令格式及其指令模板的框圖;
圖8是示出根據本發明的實施例的示例性專用矢量友好指令格式的框圖;
圖9是根據本發明的一個實施例的寄存器架構的框圖;
圖10a是示出根據本發明的實施例的示例性有序流水線以及示例性寄存器重命名的無序發布/執行流水線兩者的框圖;
圖10b是示出根據本發明的各實施例的要包括在處理器中的有序架構核的示例性實施例和示例性的寄存器重命名的無序發布/執行架構核的框圖;
圖11a-b示出了更具體的示例性有序核架構的框圖,該核將是晶片中的若干邏輯塊之一(包括相同類型和/或不同類型的其他核);
圖12是根據本發明的實施例的可具有一個以上核、可具有集成存儲器控制器、並且可具有集成圖形的處理器的方框圖;
圖13是根據本發明的實施例的示例性系統的框圖;
圖14是根據本發明的實施例的第一更具體的示例性系統的框圖;
圖15是根據本發明的實施例的第二更具體的示例性系統的框圖;
圖16是根據本發明的實施例的soc的框圖;
圖17是根據本發明的實施例的對比使用軟體指令變換器將源指令集中的二進位指令變換成目標指令集中的二進位指令的框圖。
具體實施方式
描述
很多使用複數的計算試圖還使用這些數的復共軛。如在背景中討論的,a+jb的復共軛是a-jb。圖3a至3f示出被設計成接受表示虛數的矢量輸入信息並提供該虛數的相應復共軛作為結果的矢量指令的不同實施例的邏輯操作。
在圖3a的方法中,輸入矢量301_a被構造成使得輸入複數被打包,且同一複數的實項和虛項在輸入矢量內彼此相鄰。這樣,為了返回相應的復共軛,第一組交替的輸入元素302_a穿過執行邏輯303_a,且第一組之外的第二組交替的輸入元素304_a的相應符號由執行邏輯303_a改變。這樣,結果305_a由其交替元素的符號被改變的輸入矢量301_a構成。
在實施例中,每個輸入元素被指定為具有尾數項(mantissaterm)和指數項的浮點值。尾數項包括指定該數是正還是負的位。在操作中,邏輯303_a通過反轉輸入元素304_a的相應符號位中的每一個的值並且不反轉其它輸入元素302_a的相應符號位的值來改變輸入元素304_a的符號。
在圖3b的方法中,輸入矢量301_b將多個複數的實項打包在輸入矢量的一側,且將複數的虛項打包在輸入矢量的另一側。這樣,虛項像圖3a的實施例那樣改變符號,但由於不同的輸入矢量格式而根據不同的模式。
在圖3c的方法中,輸入矢量301_c採用圖3b的方法形式,但提供圖3a形式的結果305_c。這樣,執行邏輯303_c改變輸入矢量元素的次序,並且改變表示複數的虛部的那些元素的符號。
在圖3d的方法中,輸入矢量301_d採用圖3a的方法形式,但提供圖3b形式的結果305_d。這樣,執行邏輯303_d改變輸入矢量元素的次序,並且改變表示複數的虛部的那些元素的符號。
在圖3e的方法中,第一輸入矢量操作數301_1_e僅包括實項,而第二輸入矢量操作數301_2_e僅包括相應的虛項。指令執行邏輯303_e將來自兩個輸入操作數的元素合併,並提供圖3a形式的結果305_e。在這裡,注意結果矢量305_e的尺寸是每個輸入矢量301_1_e、301_2_e的兩倍。
在圖3f的方法中,結果305_f採用圖3b的形式。其它組合也是可能的(例如,其中類似於圖3a構造輸入)。
圖4示出被設計成提供輸入複數的復共軛的指令執行邏輯電路所執行的方法。根據圖4的方法,接收對應於多個輸入複數的實部和虛部的輸入矢量元素,401。改變虛數的符號,402,並且給出實數和符號被改變的虛數作為結果,403。
圖5a示出被設計成提供輸入複數的復共軛的執行單元的邏輯電路的第一實施例。根據圖5的設計,輸入矢量寄存器501接收具有複數的實項和虛項的輸入矢量。寄存器501可駐留在以下任一者上:i)矢量寄存器空間、ii)指令執行流水線的數據取出級的輸出、iii)執行單元的輸入。
在形成結果時,邏輯電路503改變虛項的符號,但不改變實項的符號。邏輯電路503還可改變各輸入元素的次序,以形成其實項和虛項的格式不同於輸入矢量的格式的輸出矢量。執行單元還包括寫掩碼電路506,該寫掩碼電路506施加從掩碼寄存器507接收的寫掩碼。可採用零掩碼(經掩碼的元素被強制饋送0值)或直寫(writethrough)掩碼(經掩碼的元素在目的地中保留其最初值)。在實施例中,執行單元可接收和/或提供不同格式的虛數。在又一個實施例中,在立即操作數中指定施加到輸入和/或輸出矢量的格式。在另一個實施例中,在操作碼中指定所施加的格式(例如,存在用於不同輸入和/或輸出格式的不同操作碼)。
圖5b示出被設計成提供輸入複數的復共軛的執行單元的邏輯電路的第二實施例。圖5b的設計類似於圖5a的設計,且具有接收兩個輸入矢量的附加功能。此處,邏輯電路503_b將來自兩個不同的輸入矢量的輸入元素合併以形成單個輸出矢量(例如,如圖3e和3f所觀察到的)。
示例性指令格式
本文中所描述的指令的實施例可以不同的格式體現。例如,本文描述的指令可體現為vex、通用矢量友好或其它格式。以下討論vex和通用矢量友好格式的細節。另外,在下文中詳述示例性系統、架構、以及流水線。指令的實施例可在這些系統、架構、以及流水線上執行,但是不限於詳述的系統、架構、以及流水線。
vex指令格式
vex編碼允許指令具有兩個以上操作數,並且允許simd矢量寄存器比128位長。vex前綴的使用提供了三操作數(或者更多)句法。例如,先前的兩個操作數指令執行改寫源操作數的操作(諸如a=a+b)。vex前綴的使用使操作數執行非破壞性操作,諸如a=b+c。
圖6a示出示例性avx指令格式,包括vex前綴602、實操作碼欄位630、modr/m字節640、sib字節650、位移欄位662以及imm8672。圖6b示出來自圖6a的哪些欄位構成完整操作碼欄位674和基礎操作欄位642。圖6c示出來自圖6a的哪些欄位構成寄存器索引欄位644。
vex前綴(字節0-2)602以三字節形式進行編碼。第一字節是格式欄位640(vex字節0,位[7:0]),該格式欄位640包含明確的c4位元組值(用於區分c4指令格式的唯一值)。第二-第三字節(vex字節1-2)包括提供專用能力的大量位欄位。具體地,rex欄位605(vex字節1,位[7-5])由vex.r位欄位(vex字節1,位[7]-r)、vex.x位欄位(vex字節1,位[6]-x)以及vex.b位欄位(vex字節1,位[5]-b)組成。這些指令的其他欄位對如在本領域中已知的寄存器索引的較低三個位(rrr、xxx以及bbb)進行編碼,由此rrrr、xxxx以及bbbb可通過增加vex.r、vex.x以及vex.b來形成。操作碼映射欄位615(vex字節1,位[4:0]-mmmmm)包括對隱含的領先操作碼字節進行編碼的內容。w欄位664(vex字節2,位[7]-w)由記號vex.w表示,並且取決於該指令提供了不同的功能。vex.vvvv620(vex字節2,位[6:3]-vvvv)的作用可包括如下:1)vex.vvvv對以顛倒(1(多個)補碼)的形式指定第一源寄存器操作數進行編碼,且對具有兩個或兩個以上源操作數的指令有效;2)vex.vvvv針對特定矢量位移對以1(多個)補碼的形式指定的目的地寄存器操作數進行編碼;或者3)vex.vvvv不對任何操作數進行編碼,保留該欄位,並且應當包含1111b。如果vex.l668大小的欄位(vex字節2,位[2]-l)=0,則它指示128位矢量;如果vex.l=1,則它指示256位矢量。前綴編碼欄位625(vex字節2,位[1:0]-pp)提供了用於基礎操作欄位的附加位。
實操作碼欄位630(字節3)還被稱為操作碼字節。操作碼的一部分在該欄位中指定。
modr/m欄位640(字節4)包括mod欄位642(位[7-6])、reg欄位644(位[5-3])、以及r/m欄位646(位[2-0])。reg欄位644的作用可包括如下:對目的地寄存器操作數或源寄存器操作數(rfff中的rrr)進行編碼;或者被視為操作碼擴展且不用於對任何指令操作數進行編碼。r/m欄位646的作用可包括如下:對參考存儲器地址的指令操作數進行編碼;或者對目的地寄存器操作數或源寄存器操作數進行編碼。
縮放索引基址(sib)-縮放欄位650(字節5)的內容包括用於存儲器地址生成的ss652(位[7-6])。先前已經針對寄存器索引xxxx和bbbb參考了sib.xxx654(位[5-3])和sib.bbb656(位[2-0])的內容。
位移欄位662和立即數欄位(imm8)672包含地址數據。
通用矢量友好指令格式
矢量友好指令格式是適於矢量指令(例如,存在專用於矢量操作的特定欄位)的指令格式。儘管描述了其中通過矢量友好指令格式支持矢量和標量操作兩者的實施例,但是替換實施例只通過矢量友好指令格式使用矢量操作。
圖7a-7b是示出根據本發明的實施例的通用矢量友好指令格式及其指令模板的方框圖。圖7a是示出根據本發明的實施例的通用矢量友好指令格式及其a類指令模板的框圖;而圖7b是示出根據本發明的實施例的通用矢量友好指令格式及其b類指令模板的框圖。具體地,針對通用矢量友好指令格式700定義a類和b類指令模板,兩者包括無存儲器存取705的指令模板和存儲器存取720的指令模板。在矢量友好指令格式的上下文中的術語通用指不綁定到任何專用指令集的指令格式。
儘管將描述其中矢量友好指令格式支持以下:64位元組矢量操作數長度(或大小)與32位(4位元組)或64位(8位元組)數據元素寬度(或大小)(並且由此,64位元組矢量由16雙字大小的元素或者替換地8雙字大小的元素組成)、64位元組矢量操作數長度(或大小)與16位(2位元組)或8位(1位元組)數據元素寬度(或大小)、32位元組矢量操作數長度(或大小)與32位(4位元組)、64位(8位元組)、16位(2位元組)、或8位(1位元組)數據元素寬度(或大小)、以及16位元組矢量操作數長度(或大小)與32位(4位元組)、64位(8位元組)、16位(2位元組)、或8位(1位元組)數據元素寬度(或大小)的本發明的實施例,但是替換實施例可支持更大、更小、和/或不同的矢量操作數大小(例如,256位元組矢量操作數)與更大、更小或不同的數據元素寬度(例如,128位(16位元組)數據元素寬度)。
圖7a中的a類指令模板包括:1)在無存儲器訪問705的指令模板內,示出無存儲器訪問的全部捨入(round)控制型操作710的指令模板、以及無存儲器訪問的數據變換型操作715的指令模板;以及2)在存儲器訪問720的指令模板內,示出存儲器訪問的時間725的指令模板和存儲器訪問的非時間730的指令模板。圖7b中的b類指令模板包括:1)在無存儲器訪問705的指令模板內,示出無存儲器訪問的寫掩碼控制的部分捨入控制型操作712的指令模板以及無存儲器訪問的寫掩碼控制的vsize型操作717的指令模板;以及2)在存儲器訪問720的指令模板內,示出存儲器訪問的寫掩碼控制727的指令模板。
通用矢量友好指令格式700包括以下列出以在圖7a-7b中示出順序的如下欄位。結合以上的討論,在實施例中,參考以下在圖7a-b和8中提供的格式細節,可利用無存儲器訪問指令類型705或存儲器訪問指令類型720。可在以下描述的寄存器地址欄位744中標識讀取掩碼、輸入矢量操作數和目的地的地址。在另一個實施例中,在寫掩碼欄位770中指定寫掩碼。
格式欄位740-該欄位中的特定值(指令格式標識符值)唯一地標識矢量友好指令格式,並且由此標識指令在指令流中以矢量友好指令格式出現。由此,該欄位在無需只有通用矢量友好指令格式的指令集的意義上是任選的。
基礎操作欄位742-其內容區分不同的基礎操作。
寄存器索引欄位744-其內容直接或者通過地址生成指定源或目的地操作數在寄存器中或者在存儲器中的位置。這些欄位包括足夠數量的位以從pxq(例如,32x512、16x128、32x1024、64x1024)個寄存器組選擇n個寄存器。儘管在一個實施例中n可高達三個源和一個目的地寄存器,但是替換實施例可支持更多或更少的源和目的地寄存器(例如,可支持高達兩個源,其中這些源中的一個源還用作目的地,可支持高達三個源,其中這些源中的一個源還用作目的地,可支持高達兩個源和一個目的地)。
修飾符(modifier)欄位746-其內容將以指定存儲器訪問的通用矢量指令格式出現的指令與不指定存儲器訪問的通用矢量指令格式出現的指令區分開;即在無存儲器訪問705的指令模板與存儲器訪問720的指令模板之間。存儲器訪問操作讀取和/或寫入到存儲器等級(在一些情況下,使用寄存器中的值來指定源和/或目的地地址),而非存儲器訪問操作不這樣(例如,源和/或目的地是寄存器)。儘管在一個實施例中,該欄位還在三種不同的方式之間選擇以執行存儲器地址計算,但是替換實施例可支持更多、更少或不同的方式來執行存儲器地址計算。
擴充操作欄位750-其內容區分除基礎操作以外要執行各種不同操作中的哪一個操作。該欄位是上下文專用的。在本發明的一個實施例中,該欄位被分成類欄位768、α欄位752、以及β欄位754。擴充操作欄位750允許在單一指令而非2、3或4個指令中執行多組共同的操作。
縮放欄位760-其內容允許用於存儲器地址生成(例如,用於使用2倍縮放*索引+基址的地址生成)的索引欄位的內容的縮放。
位移欄位762a-其內容用作存儲器地址生成的一部分(例如,用於使用2倍縮放*索引+基址+位移的地址生成)。
位移因數欄位762b(注意,位移欄位762a直接在位移因數欄位762b上的並置指示使用一個或另一個)-其內容用作地址生成的一部分,它指定由存儲器訪問的大小(n)縮放的位移因數,其中n是存儲器訪問中的字節數量(例如,用於使用2倍縮放*索引+基址+縮放的位移的地址生成)。忽略冗餘的低階位,並且因此位移因數欄位的內容乘以存儲器操作數總大小以生成在計算有效地址中使用的最終位移。n的值由處理器硬體在運行時基於完整操作碼欄位774(稍候在本文中描述)和數據操縱欄位754c確定。位移欄位762a和位移因數欄位762b在它們不用於無存儲器訪問705的指令模板和/或不同的實施例可實現兩者中的僅一個或均未實現的意義上是任選的。
數據元素寬度欄位764-其內容區分使用大量數據元素寬度中的哪一個(在一些實施例中用於所有指令,在其他實施例中只用於一些指令)。該欄位在如果支持僅一個數據元素寬度和/或使用操作碼的某一方面支持數據元素寬度則不需要的意義上是任選的。
寫掩碼欄位770-其內容在每一數據元素位置的基礎上控制目的地矢量操作數中的數據元素位置是否反映基礎操作和擴充操作的結果。a類指令模板支持合併-寫掩碼,而b類指令模板支持合併寫掩碼和歸零寫掩碼兩者。當合併的矢量掩碼允許在執行任何操作(由基礎操作和擴充操作指定)期間保護目的地中的任何元素集免於更新時,在另一實施例中,保持其中對應掩碼位具有0的目的地的每一元素的舊值。相反,當歸零矢量掩碼允許在執行任何操作(由基礎操作和擴充操作指定)期間使目的地中的任何元素集歸零時,在一個實施例中,目的地的元素在對應掩碼位具有0值時被設為0。該功能的子集是控制執行的操作的矢量長度的能力(即,從第一個到最後一個要修改的元素的跨度),然而,修改的元素連續是不必要的。由此,寫掩碼欄位770允許部分矢量操作,包括加載、存儲、算術、邏輯等。儘管描述了其中寫掩碼欄位770的內容選擇大量寫掩碼寄存器中的包含要使用的寫掩碼的一個寫掩碼寄存器(並且由此寫掩碼欄位770的內容間接地標識要執行的那個掩碼)的本發明的實施例,但是替換實施例相反或另外允許掩碼寫欄位770的內容直接地指定要執行的掩碼。
立即數欄位772-其內容允許對立即數的指定。該欄位在實現不支持立即數的通用矢量友好格式中不存在且在不使用立即數的指令中不存在的意義上是任選的。
類欄位768-其內容在指令的不同的類之間進行區分。參考圖7a-b,該欄位的內容在a類和b類指令之間進行選擇。在圖7a-b中,圓角方形用於指示專用值存在於欄位中(例如,在圖7a-b中分別用於類欄位768的a類768a和b類768b)。
a類指令模板
在a類非存儲器訪問705的指令模板的情況下,α欄位752被解釋為其內容區分要執行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的捨入型操作710和無存儲器訪問的數據變換型操作715的指令模板分別指定捨入752a.1和數據變換752a.2)的rs欄位752a,而β欄位754區分要執行指定類型的操作中的哪一種。在無存儲器訪問705指令模板中,縮放欄位760、位移欄位762a以及位移縮放欄位762b不存在。
無存儲器訪問的指令模板-全部捨入控制型操作
在無存儲器訪問的全部捨入控制型操作710的指令模板中,β欄位754被解釋為其內容提供靜態捨入的捨入控制欄位754a。儘管在本發明的所述實施例中捨入控制欄位754a包括抑制所有浮點異常(sae)欄位756和捨入操作控制欄位758,但是替換實施例可支持、可將這些概念兩者都編碼成相同的欄位或者只有這些概念/欄位中的一個或另一個(例如,可只有捨入操作控制欄位758)。
sae欄位756-其內容區分是否停用異常事件報告;當sae欄位756的內容指示啟用抑制時,給定指令不報告任何種類的浮點異常標誌且不提起任何浮點異常處理器。
捨入操作控制欄位758-其內容區分執行一組捨入操作中的哪一個(例如,向上捨入、向下捨入、向零捨入、以及就近捨入)。由此,捨入操作控制欄位758允許在每一指令的基礎上改變捨入模式。在其中處理器包括用於指定捨入模式的控制寄存器的本發明的一個實施例中,捨入操作控制欄位750的內容覆蓋該寄存器值。
無存儲器清除的指令模板-數據變換型操作
在無存儲器訪問的數據變換型操作715的指令模板中,β欄位754被解釋為數據變換欄位754b,其內容區分要執行大量數據變換中的哪一個(例如,無數據變換、拌和、廣播)的。
在a類存儲器訪問720的指令模板的情況下,α欄位752被解釋為驅逐提示欄位752b,其內容區分要使用驅逐提示中的哪一個(在圖7a中,為存儲器訪問時間725指令模板和存儲器訪問非時間730的指令模板分別指定時間752b.1和非時間752b.2),而β欄位754被解釋為數據操縱欄位754c,其內容區分要執行大量數據操縱操作(也稱為基元(primitive))中的哪一個(例如,無操縱、廣播、源的向上轉換、以及目的地的向下轉換)。存儲器訪問720的指令模板包括縮放欄位760、以及任選的位移欄位762a或位移縮放欄位762b。
矢量存儲器指令使用轉換支持來執行來自存儲器的矢量負載並將矢量存儲到存儲器。如同有規律的矢量指令,矢量存儲器指令以數據元素式的方式與存儲器來回傳輸數據,其中實際傳輸的元素由選為寫掩碼的矢量掩碼的內容闡述。
存儲器訪問的指令模板-時間
時間數據是可能很快地重新使用足以從高速緩存受益的數據。然而,這是提示且不同的處理器可以不同的方式實現它,包括完全忽略該提示。
存儲器訪問的指令模板-非時間
非時間數據是不可能很快地重新使用足以從第一級高速緩存中的高速緩存受益且應當給予驅逐優先級的數據。然而,這是提示且不同的處理器可以不同的方式實現它,包括完全忽略該提示。
b類指令模板
在b類指令模板的情況下,α欄位752被解釋為寫掩碼控制(z)欄位752c,其內容區分由寫掩碼欄位770控制的寫掩碼應當是合併還是歸零。
在b類非存儲器訪問705的指令模板的情況下,β欄位754的一部分被解釋為rl欄位757a,其內容區分要執行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的寫掩碼控制部分捨入控制類型操作712的指令模板和無存儲器訪問的寫掩碼控制vsize型操作717的指令模板分別指定捨入757a.1和矢量長度(vsize)757a.2),而β欄位754的其餘部分區分要執行指定類型的操作中的哪一種。在無存儲器訪問705指令模板中,縮放欄位760、位移欄位762a以及位移縮放欄位762b不存在。
在無存儲器訪問的寫掩碼控制的部分捨入控制型操作710的指令模板中,β欄位754的其餘部分被解釋為捨入操作欄位759a,並且停用異常事件報告(給定指令不報告任何種類的浮點異常標誌且不提起任何浮點異常處理器)。
捨入操作控制欄位759a-只作為捨入操作控制欄位758,其內容區分執行一組捨入操作中的哪一個(例如,向上捨入、向下捨入、向零捨入、以及就近捨入)。由此,捨入操作控制欄位759a允許在每一指令的基礎上改變捨入模式。在其中處理器包括用於指定捨入模式的控制寄存器的本發明的一個實施例中,捨入操作控制欄位750的內容覆蓋該寄存器值。
在無存儲器訪問的寫掩碼控制vsize型操作717的指令模板中,β欄位754的其餘部分被解釋為矢量長度欄位759b,其內容區分要執行大量數據矢量長度中的哪一個(例如,128位元組、256位元組、或512位元組)。
在b類存儲器訪問720的指令模板的情況下,β欄位754的一部分被解釋為廣播欄位757b,其內容區分是否要執行廣播型數據操縱操作,而β欄位754的其餘部分被解釋為矢量長度欄位759b。存儲器訪問720的指令模板包括縮放欄位760、以及任選的位移欄位762a或位移縮放欄位762b。
針對通用矢量友好指令格式700,示出完整操作碼欄位774,包括格式欄位740、基礎操作欄位742以及數據元素寬度欄位764。儘管示出了其中完整操作碼欄位774包括所有這些欄位的一個實施例,但是完整操作碼欄位774包括在不支持所有這些欄位的實施例中的少於所有的這些欄位。完整操作碼欄位774提供操作碼(opcode)。
擴充操作欄位750、數據元素寬度欄位764以及寫掩碼欄位770允許這些特徵在每一指令的基礎上以通用矢量友好指令格式指定。
寫掩碼欄位和數據元素寬度欄位的組合創建各種類型的指令,其中這些指令允許基於不同的數據元素寬度應用該掩碼。
在a類和b類內找到的各種指令模板在不同的情形下是有益的。在本發明的一些實施例中,不同處理器或者處理器內的不同核可只有支持僅a類、僅b類、或者可支持兩類。舉例而言,期望用於通用計算的高性能通用無序核可只支持b類,期望主要用於圖形和/或科學(吞吐量)計算的核可只支持a類,並且期望用於兩者的核可支持兩者(當然,具有來自兩類的模板和指令的一些混合的核,但是並非來自兩類的所有模板和指令都在本發明的權限內)。同樣,單一處理器可包括多個核,所有核支持相同的類或者其中不同的核支持不同的類。舉例而言,在具有分離的圖形和通用核的處理器中,圖形核中的期望主要用於圖形和/或科學計算的一個核可只支持a類,而通用核中的一個或多個可以是和期望用於通用計算的支持b類的無序執行和寄存器重命名的高性能通用核。沒有分離的圖形核的另一處理器可包括支持a類和b類兩者的一個或多個通用有序或無序核。當然,在本發明的不同實施例中,來自一類的特徵還可在其他類中實現。以高級語言撰寫的程序可被輸入(例如,僅僅按時間編譯或者統計編譯)到各種不同的可執行形式,包括:1)只有用於執行的目標處理器支持的類的指令的形式;或者2)具有使用所有類的指令的不同組合而撰寫的替換例程且具有選擇這些例程以基於由當前正在執行代碼的處理器支持的指令而執行的控制流代碼的形式。
示例性專用矢量友好指令格式
圖8是示出根據本發明的實施例的示例性專用矢量友好指令格式的框圖。圖8示出在其指定位置、大小、解釋和欄位的次序、以及那些欄位中的一些欄位的值的意義上是專用的專用矢量友好指令格式800。專用矢量友好指令格式800可用於擴展x86指令集,並且由此一些欄位類似於在現有x86指令集及其擴展(例如,avx)中使用的那些欄位或與之相同。該格式保持與具有擴展的現有x86指令集的前綴編碼欄位、實操作碼字節欄位、modr/m欄位、sib欄位、位移欄位、以及立即數欄位一致。示出來自圖8的欄位映射到的來自圖7的欄位。
應當理解,雖然出於說明的目的在通用矢量友好指令格式700的上下文中,本發明的實施例參考專用矢量友好指令格式800進行了描述,但是本發明不限於專用矢量友好指令格式800,聲明的地方除外。例如,通用矢量友好指令格式700構想各種欄位的各種可能的大小,而專用矢量友好指令格式800被示為具有專用大小的欄位。作為具體示例,儘管在專用矢量友好指令格式800中數據元素寬度欄位764被示為一位欄位,但是本發明不限於此(即,通用矢量友好指令格式700構想數據元素寬度欄位764的其他大小)。
通用矢量友好指令格式700包括以下列出以在圖8a中示出的順序的如下欄位。
evex前綴(字節0-3)802-以四字節形式進行編碼。
格式欄位740(evex字節0,位[7:0])-第一字節(evex字節0)是格式欄位740,並且它包含0x62(在本發明的一個實施例中用於區分矢量友好指令格式的唯一值)。
第二-第四字節(evex字節1-3)包括提供專用能力的大量位欄位。
rex欄位805(evex字節1,位[7-5])-由evex.r位欄位(evex字節1,位[7]-r)、evex.x位欄位(evex字節1,位[6]-x)以及(757bex字節1,位[5]-b)組成。evex.r、evex.x和evex.b位欄位提供與對應vex位欄位相同的功能,並且使用(多個)1補碼的形式進行編碼,即zmm0被編碼為1111b,zmm15被編碼為0000b。這些指令的其他欄位對如在本領域中已知的寄存器索引的較低三個位(rrr、xxx、以及bbb)進行編碼,由此rrrr、xxxx以及bbbb可通過增加evex.r、evex.x以及evex.b來形成。
rex'欄位710-這是rex'欄位710的第一部分,並且是用於對擴展的32個寄存器集合的較高16個或較低16個寄存器進行編碼的evex.r'位欄位(evex字節1,位[4]-r』)。在本發明的一個實施例中,該位與以下指示的其他位一起以位顛倒的格式存儲以(在公知x86的32位模式下)與其實操作碼字節是62的bound指令進行區分,但是在modr/m欄位(在下文中描述)中不接受mod欄位中的值11;本發明的替換實施例不以顛倒的格式存儲該指示的位以及其他指示的位。值1用於對較低16個寄存器進行編碼。換句話說,通過組合evex.r'、evex.r、以及來自其他欄位的其他rrr來形成r'rrrr。
操作碼映射欄位815(evex字節1,位[3:0]-mmmm)-其內容對隱含的領先操作碼字節(0f、0f38、或0f3)進行編碼。
數據元素寬度欄位764(evex字節2,位[7]-w)-由記號evex.w表示。evex.w用於定義數據類型(32位數據元素或64位數據元素)的粒度(大小)。
evex.vvvv820(evex字節2,位[6:3]-vvvv)-evex.vvvv的作用可包括如下:1)evex.vvvv對以顛倒((多個)1補碼)的形式指定的第一源寄存器操作數進行編碼且對具有兩個或兩個以上源操作數的指令有效;2)evex.vvvv針對特定矢量位移對以(多個)1補碼的形式指定的目的地寄存器操作數進行編碼;或者3)evex.vvvv不對任何操作數進行編碼,保留該欄位,並且應當包含1111b。由此,evex.vvvv欄位820對以顛倒((多個)1補碼)的形式存儲的第一源寄存器指定符的4個低階位進行編碼。取決於該指令,額外不同的evex位欄位用於將指定符大小擴展到32個寄存器。
evex.u768類欄位(evex字節2,位[2]-u)-如果evex.u=0,則它指示a類或evex.u0,如果evex.u=1,則它指示b類或evex.u1。
前綴編碼欄位825(evex字節2,位[1:0]-pp)-提供了用於基礎操作欄位的附加位。除了對以evex前綴格式的傳統sse指令提供支持以外,這也具有的壓縮simd前綴的益處(evex前綴只需要2位,而不是需要字節來表達simd前綴)。在一個實施例中,為了支持使用以傳統格式和以evex前綴格式的simd前綴(66h、f2h、f3h)的傳統sse指令,這些傳統simd前綴被編碼成simd前綴編碼欄位;並且在運行時在提供給解碼器的pla之前被擴展成傳統simd前綴(因此pla可執行傳統和evex格式的這些傳統指令,而無需修改)。雖然較新的指令可將evex前綴編碼欄位的內容直接作為操作碼擴展,但是為了一致性,特定實施例以類似的方式擴展,但允許由這些傳統simd前綴指定不同的含義。替換實施例可重新設計pla以支持2位simd前綴編碼,並且由此不需要擴展。
α欄位752(evex字節3,位[7]-eh,也稱為evex.eh、evex.rs、evex.rl、evex.寫掩碼控制、以及evex.n,還被示為具有α)-如先前所述的,該欄位是上下文專用的。
3欄位754(evex字節3,位[6:4]-sss,也稱為evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb,還被示為具有βββ)-如先前所述的,該欄位是內容專用的。
rex'欄位710-這是rex'欄位的其餘部分,並且是可用於對擴展的32個寄存器集合的較高16個或較低16寄存器進行編碼的evex.r'位欄位(evex字節3,位[3]-v』)。該位以位顛倒的格式存儲。值1用於對較低16個寄存器進行編碼。換句話說,通過組合evex.v』、evex.vvvv來形成v'vvvv。
寫掩碼欄位770(evex字節3,位[2:0]-kkk)-其內容指定寫掩碼寄存器中的寄存器索引,如先前所述的。在本發明的一個實施例中,專用值evex.kkk=000具有隱含著沒有寫掩碼用於特定指令(這可以各種方式(包括使用硬連線到所有的寫掩碼或者旁路掩碼硬體的硬體)實現)的特別行為。
實操作碼欄位830(字節4)還被稱為操作碼字節。操作碼的一部分在該欄位中指定。
modr/m欄位840(字節5)包括mod欄位842、reg欄位844、以及r/m欄位846。如先前所述的,mod欄位842的內容在存儲器訪問和非存儲器訪問的操作之間進行區分。reg欄位844的作用可被歸結為兩種情形:對目的地寄存器操作數或源寄存器操作數進行編碼;或者被視為操作碼擴展且不用於對任何指令操作數進行編碼。r/m欄位846的作用可包括如下:對參考存儲器地址的指令操作數進行編碼;或者對目的地寄存器操作數或源寄存器操作數進行編碼。
縮放索引基址(sib)字節(字節6)-如先前所述的,縮放欄位750的內容用於存儲器地址生成。sib.xxx854和sib.bbb856-先前已經針對寄存器索引xxxx和bbbb參考了這些欄位的內容。
位移欄位762a(字節7-10)-當mod欄位842包含10時,字節7-10是位移欄位762a,並且它與傳統32位位移(disp32)一樣地工作,並且以字節粒度工作。
位移因數欄位762b(字節7)-當mod欄位842包含01時,字節7是位移因數欄位762b。該欄位的位置與傳統x86指令集8位位移(disp8)的位置相同,它以字節粒度工作。由於disp8是符號擴展的,因此它可只在-128和127位元組偏移量之間尋址,在64位元組的高速緩存線的方面,disp8使用可被設為僅四個真正有用的值-128、-64、0和64的8位;由於常常需要更大的範圍,所以使用disp32;然而,disp32需要4個字節。與disp8和disp32對比,位移因數欄位762b是disp8的重新解釋;當使用位移因數欄位762b時,實際位移通過位移因數欄位的內容乘以存儲器操作數訪問的大小(n)確定。該類型的位移被稱為disp8*n。這減小了平均指令長度(用於位移但具有大得多的範圍的單一字節)。這種壓縮位移基於有效位移是存儲器訪問的粒度的倍數的假設,並且由此地址偏移量的冗餘低階位不需要被編碼。換句話說,位移因數欄位762b替代傳統x86指令集8位位移。由此,位移因數欄位762b以與x86指令集8位位移相同的方式(因此在modrm/sib編碼規則中沒有變化)進行編碼,唯一的不同在於,disp8超載至disp8*n。換句話說,在編碼規則或者編碼長度中沒有變化,只在通過硬體對位移值的解釋中有變化(這需要使位移縮放存儲器操作數的大小以獲得字節式地址偏移量)。
立即數欄位772如先前所述地操作。
完整操作碼欄位
圖8b是示出根據本發明的實施例的構成完整操作碼欄位774的具有專用矢量友好指令格式800的欄位的方框圖。具體地,完整操作碼欄位774包括格式欄位740、基礎操作欄位742、以及數據元素寬度(w)欄位764。基礎操作欄位742包括前綴編碼欄位825、操作碼映射欄位815以及實操作碼欄位830。
寄存器索引欄位
圖8c是示出根據本發明的一個實施例的構成寄存器索引欄位744的具有專用矢量友好指令格式800的欄位的方框圖。具體地,寄存器索引欄位744包括rex欄位805、rex'欄位810、modr/m.reg欄位844、modr/m.r/m欄位846、vvvv欄位820、xxx欄位854以及bbb欄位856。
擴充操作欄位
圖8d是示出根據本發明的一個實施例的構成擴充操作欄位750的具有專用矢量友好指令格式800的欄位的方框圖。當類(u)欄位768包含0時,它表達evex.u0(a類768a);當它包含1時,它表達evex.u1(b類768b)。當u=0且mod欄位842包含11(表達無存儲器訪問操作)時,α欄位752(evex字節3,位[7]-eh)被解釋為rs欄位752a。當rs欄位752a包含1(捨入752a.1)時,β欄位754(evex字節3,位[6:4]-sss)被解釋為捨入控制欄位754a。捨入控制欄位754a包括一位sae欄位756和兩位捨入操作欄位758。當rs欄位752a包含0(數據變換752a.2)時,β欄位754(evex字節3,位[6:4]-sss)被解釋為三位數據變換欄位754b。當u=0且mod欄位842包含00、01或10(表達存儲器訪問操作)時,α欄位752(evex字節3,位[7]-eh)被解釋為驅逐提示(eh)欄位752b且β欄位754(evex字節3,位[6:4]-sss)被解釋為三位數據操縱欄位754c。
當u=1時,α欄位752(evex字節3,位[7]-eh)被解釋為寫掩碼控制(z)欄位752c。當u=1且mod欄位842包含11(表達無存儲器訪問操作)時,β欄位754的一部分(evex字節3,位[4]-s0)被解釋為rl欄位757a;當它包含1(捨入757a.1)時,β欄位754的其餘部分(evex字節3,位[6-5]-s2-1)被解釋為捨入操作欄位759a,而當rl欄位757a包含0(vsize757.a2)時,β欄位754的其餘部分(evex字節3,位[6-5]-s2-1)被解釋為矢量長度欄位759b(evex字節3,位[6-5]-l1-0)。當u=1且mod欄位842包含00、01或10(表達存儲器訪問操作)時,β欄位754(evex字節3,位[6:4]-sss)被解釋為矢量長度欄位759b(evex字節3,位[6-5]-l1-0)和廣播欄位757b(evex字節3,位[4]-b)。
示例性寄存器架構
圖9是根據本發明的一個實施例的寄存器架構900的框圖。在所示出的實施例中,有32個512位寬的矢量寄存器910;這些寄存器被引用為zmm0到zmm31。較低的16zmm寄存器的較低階256個位覆蓋在寄存器ymm0-16上。較低的16zmm寄存器的較低階128個位(ymm寄存器的較低階128個位)覆蓋在寄存器xmm0-15上。專用矢量友好指令格式800對這些覆蓋的寄存器組操作,如在以下表格中所示的。
換句話說,矢量長度欄位759b在最大長度與一個或多個其他較短長度之間進行選擇,其中每一這種較短長度是前一長度的一半,並且沒有矢量長度欄位759b的指令模板對最大矢量長度操作。此外,在一個實施例中,專用矢量友好指令格式800的b類指令模板對打包或標量單/雙精度浮點數據以及打包或標量整數數據操作。標量操作是在zmm/ymm/xmm寄存器中的最低階數據元素位置上執行的操作;取決於本實施例,較高階數據元素位置保持與在指令之前相同或者歸零。
寫掩碼寄存器915-在所示的實施例中,存在8個寫掩碼寄存器(k0至k7),每一寫掩碼寄存器的大小是64位。在替換實施例中,寫掩碼寄存器915的大小是16位。如先前所述的,在本發明的一個實施例中,矢量掩碼寄存器k0無法用作寫掩碼;當正常可指示k0的編碼用作寫掩碼時,它選擇硬連線的寫掩碼0xffff,從而有效地停用該指令的寫掩碼。
通用寄存器925——在所示出的實施例中,有十六個64位通用寄存器,這些寄存器與現有的x86尋址模式來尋址存儲器操作數一起使用。這些寄存器通過名稱rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp,以及r8到r15來引用。
標量浮點堆棧寄存器組(x87堆棧)945,在其上面混疊mmx打包整數平坦寄存器組950——在所示出的實施例中,x87堆棧是用於使用x87指令集擴展來對32/64/80位浮點數據執行標量浮點操作的八元素堆棧;而使用mmx寄存器來對64位打包整數數據執行操作,以及為在mmx和xmm寄存器之間執行的某些操作保存操作數。
本發明的替換實施例可以使用較寬的或較窄的寄存器。另外,本發明的替換實施例可以使用多一些,少一些或不同的寄存器組和寄存器。
示例性核架構、處理器和計算機架構
處理器核可以用出於不同目的的不同方式在不同的處理器中實現。例如,這樣的核的實現可以包括:1)旨在用於通用計算的通用有序核;2)預期用於通用計算的高性能通用無序核;3)主要預期用於圖形和/或科學(吞吐量)計算的專用核。不同處理器的實現可包括:包括預期用於通用計算的一個或多個通用有序核和/或預期用於通用計算的一個或多個通用無序核的cpu;以及2)包括主要預期用於圖形和/或科學(吞吐量)的一個或多個專用核的協處理器。這樣的不同處理器導致不同的計算機系統架構,其可包括:1)在與cpu分開的晶片上的協處理器;2)在與cpu相同的封裝中但分開的管芯上的協處理器;3)與cpu在相同管芯上的協處理器(在該情況下,這樣的協處理器有時被稱為諸如集成圖形和/或科學(吞吐量)邏輯等專用邏輯,或被稱為專用核);以及4)可以將所描述的cpu(有時被稱為應用核或應用處理器)、以上描述的協處理器和附加功能包括在同一管芯上的片上系統。接著描述示例性核架構,隨後描述示例性處理器和計算機架構。
示例性核架構
有序和無序核框圖
圖10a是示出根據本發明的各實施例的示例性有序流水線和示例性的寄存器重命名的無序發布/執行流水線的框圖。圖10b是示出根據本發明的各實施例的要包括在處理器中的有序架構核的示例性實施例和示例性的寄存器重命名的無序發布/執行架構核的框圖。圖10a-10b中的實線框解說了有序流水線和有序核,而虛線框中的可選附加項解說了寄存器重命名的、無序發布/執行流水線和核。給定有序方面是無序方面的子集的情況下,無序方面將被描述。
在圖10a中,處理器流水線1000包括取出級1002、長度解碼級1004、解碼級1006、分配級1008、重命名級1010、調度(也稱為分派或發布)級1012、寄存器讀/存儲器讀取級1014、執行級1016、寫回/存儲器寫入級1018、異常處理級1022和提交級1024。
圖10b示出了包括耦合到執行引擎單元1050的前端單元1030的處理器核1090,且執行引擎單元和前端單元兩者都耦合到存儲器單元1070。核1090可以是精簡指令集計算(risc)核、複雜指令集計算(cisc)核、非常長的指令字(vliw)核或混合或替代核類型。作為又一選項,核1090可以是專用核,諸如例如網絡或通信核、壓縮引擎、協處理器核、通用計算圖形處理器單元(gpgpu)核、或圖形核等等。
前端單元1030包括耦合到指令高速緩存單元1034的分支預測單元1032,該指令高速緩存單元1034被耦合到指令翻譯後備緩衝器(tlb)1036,該指令翻譯後備緩衝器1036被耦合到指令取出單元1038,指令取出單元1038被耦合到解碼單元1040。解碼單元1040(或解碼器)可解碼指令,並生成從原始指令解碼出的、或以其他方式反映原始指令的、或從原始指令導出的一個或多個微操作、微代碼進入點、微指令、其他指令、或其他控制信號作為輸出。解碼單元1040可使用各種不同的機制來實現。合適的機制的示例包括但不限於查找表、硬體實現、可編程邏輯陣列(ola)、微代碼只讀存儲器(rom)等。在一個實施例中,核1090包括存儲(例如,在解碼單元1040中或否則在前端單元1030內的)某些宏指令的微代碼的微代碼rom或其他介質。解碼單元1040被耦合到執行引擎單元1050中的重命名/分配單元1052。
執行引擎單元1050包括重命名/分配器單元1052,該重命名/分配器單元1052耦合至引退單元1054和一個或多個調度器單元1056的集合。調度器單元1056表示任何數目的不同調度器,包括預留站、中央指令窗等。調度器單元1056被耦合到物理寄存器文件單元1058。每個物理寄存器組單元1058表示一個或多個物理寄存器組,其中不同的物理寄存器組存儲一種或多種不同的數據類型,諸如標量整數、標量浮點、打包整數、打包浮點、矢量整數、矢量浮點、狀態(例如,作為要執行的下一指令的地址的指令指針)等。在一個實施例中,物理寄存器組單元1058包括矢量寄存器單元、寫掩碼寄存器單元和標量寄存器單元。這些寄存器單元可以提供架構矢量寄存器、矢量掩碼寄存器、和通用寄存器。物理寄存器組單元1058被引退單元1054覆蓋以示出可以用來實現寄存器重命名和無序執行的各種方式(例如,使用記錄器緩衝器和引退寄存器組;使用將來的文件、歷史緩衝器和引退寄存器組;使用寄存器圖和寄存器池等等)。引退單元1054和物理寄存器組單元1058被耦合到執行群集1060。執行群集1060包括一個或多個執行單元1062的集合和一個或多個存儲器訪問單元1064的集合。執行單元1062可以執行各種操作(例如,移位、加法、減法、乘法),以及對各種類型的數據(例如,標量浮點、打包整數、打包浮點、矢量整型、矢量浮點)執行。儘管某些實施例可以包括專用於特定功能或功能集合的多個執行單元,但其他實施例可包括全部執行所有函數的僅一個執行單元或多個執行單元。調度器單元1056、物理寄存器組單元1058和執行群集1060被示為可能有多個,因為某些實施例為某些類型的數據/操作(例如,標量整型流水線、標量浮點/打包整型/打包浮點/矢量整型/矢量浮點流水線,和/或各自具有其自己的調度器單元、物理寄存器單元和/或執行群集的存儲器訪問流水線——以及在分開的存儲器訪問流水線的情況下,實現其中僅該流水線的執行群集具有存儲器訪問單元1064的某些實施例)創建分開的流水線。還應當理解,在分開的流水線被使用的情況下,這些流水線中的一個或多個可以為無序發布/執行,並且其餘流水線可以為有序發布/執行。
存儲器訪問單元1064的集合被耦合到存儲器單元1070,該存儲器單元1070包括耦合到數據高速緩存單元1074的數據tlb單元1072,其中數據高速緩存單元1074耦合到二級(l2)高速緩存單元1076。在一個示例性實施例中,存儲器訪問單元1064可以包括加載單元、存儲地址單元和存儲數據單元,這些單元中的每一個單元被耦合到存儲器單元1070中的數據tlb單元1072。指令高速緩存單元1034還被耦合到存儲器單元1070中的二級(l2)高速緩存單元1076。l2高速緩存單元1076被耦合到一個或多個其他級的高速緩存,並最終耦合到主存儲器。
作為示例,示例性寄存器重命名的、無序發布/執行核架構可以如下實現流水線1000:1)指令取出1038執行取出和長度解碼級1002和1004;2)解碼單元1040執行解碼級1006;3)重命名/分配器單元1052執行分配級1008和重命名級1010;4)調度器單元1056執行調度級1012;5)物理寄存器文件單元1058和存儲器單元1070執行寄存器讀取/存儲器讀取級1014;執行群集1060執行執行級1016;6)存儲器單元1070和物理寄存器文件單元1058執行寫回/存儲器寫入級1018;7)各單元可牽涉到異常處理級1022;以及8)引退單元1054和物理寄存器文件單元1058執行提交級1024。
核1090可支持一個或多個指令集(例如,x86指令集(具有與較新版本一起添加的某些擴展);加利福尼亞州桑尼維爾市的mips技術公司的mips指令集;加利福尼州桑尼維爾市的arm控股的arm指令集(具有諸如neon等可選附加擴展)),其中包括本文中描述的各指令。在一個實施例中,核1090包括支持打包數據指令集擴展(例如,avx1、avx2和/或先前描述的一些形式的一般矢量友好指令格式(u=0和/或u=1))的邏輯,從而允許很多多媒體應用使用的操作能夠使用打包數據來執行。
應當理解,核可支持多線程化(執行兩個或更多個並行的操作或線程的集合),並且可以按各種方式來完成該多線程化,此各種方式包括時分多線程化、同步多線程化(其中單個物理核為物理核正同步多線程化的各線程中的每一個線程提供邏輯核)、或其組合(例如,時分取出和解碼以及此後諸如用超線程化技術來同步多線程化)。
儘管在無序執行的上下文中描述了寄存器重命名,但應當理解,可以在有序架構中使用寄存器重命名。儘管所解說的處理器的實施例還包括分開的指令和數據高速緩存單元1034/1074以及共享l2高速緩存單元1076,但替換實施例可以具有用於指令和數據兩者的單個內部高速緩存,諸如例如一級(l1)內部高速緩存或多個級別的內部緩存。在某些實施例中,該系統可包括內部高速緩存和在核和/或處理器外部的外部高速緩存的組合。或者,所有高速緩存都可以在核和/或處理器的外部。
具體的示例性有序核架構
圖11a-b示出了更具體的示例性有序核架構的框圖,該核將是晶片中的若干邏輯塊之一(包括相同類型和/或不同類型的其他核)。這些邏輯塊通過高帶寬的互連網絡(例如,環形網絡)與某些固定的功能邏輯、存儲器i/o接口和其它必要的i/o邏輯通信,這依賴於應用。
圖11a是根據本發明的各實施例的單個處理器核連同它與管芯上互連網絡1102的連接以及其二級(l2)高速緩存1104的本地子集的框圖。在一個實施例中,指令解碼器1100支持具有打包數據指令集擴展的x86指令集。l1高速緩存1106允許對標量和矢量單元中的高速緩存存儲器的低等待時間訪問。儘管在一個實施例中(為了簡化設計),標量單元1108和矢量單元1110使用分開的寄存器集合(分別為標量寄存器1112和矢量寄存器1114),並且在這些寄存器之間轉移的數據被寫入到存儲器並隨後從一級(l1)高速緩存1106讀回,但是本發明的替換實施例可以使用不同的方法(例如使用單個寄存器集合或包括允許數據在這兩個寄存器組之間傳輸而無需被寫入和讀回的通信路徑)。
l2高速緩存的本地子集1104是全局l2高速緩存的一部分,該全局l2高速緩存被劃分成多個分開的本地子集,即每個處理器核一個本地子集。每個處理器核具有到其自己的l2高速緩存1104的本地子集的直接訪問路徑。被處理器核讀出的數據被存儲在其l2高速緩存子集1104中,並且可以被快速訪問,該訪問與其他處理器核訪問其自己的本地l2高速緩存子集並行。被處理器核寫入的數據被存儲在其自己的l2高速緩存子集1104中,並在必要的情況下從其它子集清除。環形網絡確保共享數據的一致性。環形網絡是雙向的,以允許諸如處理器核、l2高速緩存和其它邏輯塊之類的代理在晶片內彼此通信。每個環形數據路徑為每個方向1012位寬。
圖11b是根據本發明的各實施例的圖11a中的處理器核的一部分的展開圖。圖11b包括作為l1高速緩存1104的l1數據高速緩存1106a部分,以及關於矢量單元1110和矢量寄存器1114的更多細節。具體地說,矢量單元1110是16寬矢量處理單元(vpu)(見16寬alu1128),該單元執行整型、單精度浮點以及雙精度浮點指令中的一個或多個。該vpu通過混合單元1120支持對寄存器輸入的混合、通過數值轉換單元1122a-b支持數值轉換,並通過複製單元1124支持對存儲器輸入的複製。寫掩碼寄存器1126允許斷言所得的矢量寫入。
具有集成存儲器控制器和圖形器件的處理器
圖12是根據本發明的各實施例可能具有一個以上核、可能具有集成存儲器控制器、以及可能具有集成圖形的處理器1200的框圖。圖12中的實線框解說具有單個核1202a、系統代理1210、一個或多個總線控制器單元1216的集合的處理器1200,而虛線框中的可選附加項解說具有多個核1202a-n、系統代理單元1210中的一個或多個集成存儲器控制器單元1214的集合以及專用邏輯1208的替換處理器1200。
因此,處理器1200的不同實現可包括:1)cpu,其中專用邏輯1208是集成圖形和/或科學(吞吐量)邏輯(其可包括一個或多個核),並且核1202a-n是一個或多個通用核(例如,通用的有序核、通用的無序核、這兩者的組合);2)協處理器,其中核1202a-n是主要預期用於圖形和/或科學(吞吐量)的大量專用核;以及3)協處理器,其中核1202a-n是大量通用有序核。因此,處理器1200可以是通用處理器、協處理器或專用處理器,諸如例如網絡或通信處理器、壓縮引擎、圖形處理器、gpgpu(通用圖形處理單元)、高吞吐量的集成眾核(mic)協處理器(包括30個或更多核)、或嵌入式處理器等。該處理器可以被實現在一個或多個晶片上。處理器1200可以是一個或多個襯底的一部分,和/或可以使用諸如例如bicmos、cmos或nmos等的多個加工技術中的任何一個技術將其實現在一個或多個襯底上。
存儲器層次結構包括在各核內的一個或多個級別的高速緩存、一個或多個共享高速緩存單元1206的集合、以及耦合至集成存儲器控制器單元1214的集合的外部存儲器(未示出)。該共享高速緩存單元1206的集合可以包括一個或多個中間級高速緩存,諸如二級(l2)、三級(l3)、四級(l4)或其他級別的高速緩存、末級高速緩存(llc)、和/或其組合。儘管在一個實施例中,基於環的互連單元1212將集成圖形邏輯1208、共享高速緩存單元1206的集合以及系統代理單元1210/集成存儲器控制器單元1214互連,但替代實施例可使用任何數量的公知技術來將這些單元互連。在一個實施例中,可以維護一個或多個高速緩存單元1206和核1202a-n之間的一致性(coherency)。
在某些實施例中,核1202a-n中的一個或多個核能夠多線程化。系統代理1210包括協調和操作核1202a-n的那些組件。系統代理單元1210可包括例如功率控制單元(pcu)和顯示單元。pcu可以是或包括調整核1202a-n和集成圖形邏輯1208的功率狀態所需的邏輯和組件。顯示單元用於驅動一個或多個外部連接的顯示器。
核1202a-n在架構指令集方面可以是同構的或異構的;即,這些核1202a-n中的兩個或更多個核可能能夠執行相同的指令集,而其他核可能能夠執行該指令集的僅僅子集或不同的指令集。
示例性計算機架構
圖13-16是示例性計算機架構的框圖。本領域已知的對膝上型設備、臺式機、手持pc、個人數字助理、工程工作站、伺服器、網絡設備、網絡集線器、交換機、嵌入式處理器、數位訊號處理器(dsp)、圖形設備、視頻遊戲設備、機頂盒、微控制器、蜂窩電話、可攜式媒體播放器、手持設備以及各種其他電子設備的其他系統設計和配置也是合適的。一般來說,能夠納入本文中所公開的處理器和/或其它執行邏輯的大量系統和電子設備一般都是合適的。
現在參見圖13,所示為根據本發明的一個實施例的系統1300的框圖。系統1300可以包括一個或多個處理器1310、1315,這些處理器耦合到控制器中樞1320。在一個實施例中,控制器中樞1320包括圖形存儲器控制器中樞(gmch)1390和輸入/輸出中樞(ioh)1350(其可以在分開的晶片上);gmch1390包括存儲器1340和協處理器1345耦合到的存儲器和圖形控制器;ioh1350將輸入/輸出(i/o)設備1360耦合到gmch1390。或者,存儲器和圖形控制器中的一個或兩者可以被集成在處理器中(如本文中所描述的),存儲器1340和協處理器1345被直接耦合到處理器1310以及在具有ioh1350的單個晶片中的控制器中樞1320。
附加處理器1315的可選性質用虛線表示在圖13中。每一處理器1310、1315可包括本文中描述的處理核中的一個或多個,並且可以是處理器1200的某一版本。
存儲器1340可以是例如動態隨機存取存儲器(dram)、相變化存儲器(pcm)或這兩者的組合。對於至少一個實施例,控制器中樞1320經由諸如前側總線(fsb)之類的多點總線(multi-dropbus)、諸如快速通道互連(qpi)之類的點對點接口、或者類似的連接1395與處理器1310、1315進行通信。
在一個實施例中,協處理器1345是專用處理器,諸如例如高吞吐量mic處理器、網絡或通信處理器、壓縮引擎、圖形處理器、gpgpu、或嵌入式處理器等等。在一個實施例中,控制器中樞1320可以包括集成圖形加速計。
在物理資源1310、1315之間可以存在包括架構、微架構、熱、和功率消耗特徵等的一連串品質度量方面的各種差異。
在一個實施例中,處理器1310執行控制一般類型的數據處理操作的指令。嵌入在這些指令中的可以是協處理器指令。處理器1310識別如具有應當由附連的協處理器1345執行的類型的這些協處理器指令。因此,處理器1310在協處理器總線或者其他互連上將這些協處理器指令(或者表示協處理器指令的控制信號)發布到協處理器1345。協處理器1345接受並執行所接收的協處理器指令。
現在參考圖14,所示為根據本發明的一實施例的更具體的第一示例性系統1400的框圖。如圖14所示,多處理器系統1400是點對點互連繫統,並包括經由點對點互連1450耦合的第一處理器1470和第二處理器1480。處理器1470和1480中的每一個都可以是處理器1200的某一版本。在本發明的一個實施例中,處理器1470和1480分別是處理器1310和1315,而協處理器1438是協處理器1345。在另一實施例中,處理器1470和1480分別是處理器1310和協處理器1345。
處理器1470和1480被示為分別包括集成存儲器控制器(imc)單元1472和1482。處理器1470還包括作為其總線控制器單元的一部分的點對點(p-p)接口1476和1478;類似地,第二處理器1480包括點對點接口1486和1488。處理器1470、1480可以使用點對點(p-p)接口電路1478、1488經由p-p接口1450來交換信息。如圖14所示,imc1472和1482將各處理器耦合至相應的存儲器,即存儲器1432和存儲器1434,這些存儲器可以是本地附連至相應的處理器的主存儲器的一部分。
處理器1470、1480可各自使用點對點接口電路1476、1494、1486、1498經由各個p-p接口1452、1454與晶片組1490交換信息。晶片組1490可以可選地經由高性能接口1439與協處理器1438交換信息。在一個實施例中,協處理器1438是專用處理器,諸如例如高吞吐量mic處理器、網絡或通信處理器、壓縮引擎、圖形處理器、gpgpu、或嵌入式處理器等等。
共享高速緩存(未示出)可以被包括在任一處理器之內或被包括兩個處理器外部但仍經由p-p互連與這些處理器連接,從而如果將某處理器置於低功率模式時,可將任一處理器或兩個處理器的本地高速緩存信息存儲在該共享高速緩存中。
晶片組1490可經由接口1496耦合至第一總線1416。在一個實施例中,第一總線1416可以是外圍部件互連(pci)總線,或諸如pciexpress總線或其它第三代i/o互連總線之類的總線,但本發明的範圍並不受此限制。
如圖14所示,各種i/o設備1414可以連同總線橋1418耦合到第一總線1416,總線橋1418將第一總線1416耦合至第二總線1420。在一個實施例中,諸如協處理器、高吞吐量mic處理器、gpgpu的處理器、加速計(諸如例如圖形加速計或數位訊號處理器(dsp)單元)、場可編程門陣列或任何其他處理器的一個或多個附加處理器1415被耦合到第一總線1416。在一個實施例中,第二總線1420可以是低引腳計數(lpc)總線。各種設備可以被耦合至第二總線1420,在一個實施例中這些設備包括例如鍵盤/滑鼠1422、通信設備1427以及諸如可包括指令/代碼和數據1430的盤驅動器或其它海量存儲設備的存儲單元1428。此外,音頻i/o1424可以被耦合至第二總線1420。注意,其它架構是可能的。例如,取代圖14的點對點架構,系統可以實現多站總線或其它這類架構。
現在參考圖15,所示為根據本發明的一實施例的更具體的第二示例性系統1500的框圖。圖14和圖15中的相同部件用相同附圖標記表示,並從圖15中省去了圖14中的某些方面,以避免使圖15的其它方面變得難以理解。
圖15示出處理器1470、1480可分別包括集成存儲器和i/o控制邏輯(「cl」)1472和1482。因此,cl1472、1482包括集成存儲器控制器單元並包括i/o控制邏輯。圖15不僅解說了耦合至cl1472、1482的存儲器1432、1434,而且還解說了同樣耦合至控制邏輯1472、1482的i/o設備1514。傳統i/o設備1515被耦合至晶片組1490。
現在參考圖16,所示為根據本發明的一實施例的soc1600的框圖。在圖12中,相似的部件具有同樣的附圖標記。另外,虛線框是更先進的soc的可選特徵。在圖16中,互連單元1602被耦合至:應用處理器1610,該應用處理器包括一個或多個核202a-n的集合以及共享高速緩存單元1206;系統代理單元1210;總線控制器單元1216;集成存儲器控制器單元1214;一組或一個或多個協處理器1620,其可包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態隨機存取存儲器(sram)單元1630;直接存儲器存取(dma)單元1632;以及用於耦合至一個或多個外部顯示器的顯示單元1640。在一個實施例中,協處理器1620包括專用處理器,諸如例如網絡或通信處理器、壓縮引擎、gpgpu、高吞吐量mic處理器、或嵌入式處理器等等。
本文公開的機制的各實施例可以被實現在硬體、軟體、固件或這些實現方法的組合中。本發明的實施例可實現為在可編程系統上執行的電腦程式或程序代碼,該可編程系統包括至少一個處理器、存儲系統(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設備以及至少一個輸出設備。
可將程序代碼(諸如圖14中解說的代碼1430)應用於輸入指令,以執行本文描述的各功能並生成輸出信息。輸出信息可以按已知方式被應用於一個或多個輸出設備。為了本申請的目的,處理系統包括具有諸如例如數位訊號處理器(dsp)、微控制器、專用集成電路(asic)或微處理器之類的處理器的任何系統。
程序代碼可以用高級程序化語言或面向對象的程式語言來實現,以便與處理系統通信。程序代碼也可以在需要的情況下用彙編語言或機器語言來實現。事實上,本文中描述的機制不僅限於任何特定程式語言的範圍。在任一情形下,語言可以是編譯語言或解釋語言。
至少一個實施例的一個或多個方面可以通過存儲在機器可讀介質上的代表性的指令來實現,指令表示處理器內的各種邏輯,指令在由機器讀取時使機器製造執行此處所描述的技術的邏輯。被稱為「ip核」的這些表示可以被存儲在有形的機器可讀介質上,並被提供給多個客戶或生產設施以加載到實際製造該邏輯或處理器的製造機器中。
這樣的機器可讀存儲介質可以包括但不限於通過機器或設備製造或形成的物品的非瞬態、有形安排,其包括存儲介質,諸如硬碟;任何其它類型的盤,包括軟盤、光碟、緊緻盤只讀存儲器(cd-rom)、緊緻盤可重寫(cd-rw)的以及磁光碟;半導體器件,例如只讀存儲器(rom)、諸如動態隨機存取存儲器(dram)和靜態隨機存取存儲器(sram)的隨機存取存儲器(ram)、可擦除可編程只讀存儲器(eprom)、快閃記憶體、電可擦除可編程只讀存儲器(eeprom);相變化存儲器(pcm);磁卡或光卡;或適於存儲電子指令的任何其它類型的介質。
因此,本發明的各實施例還包括非瞬態、有形機器可讀介質,該介質包含指令或包含設計數據,諸如硬體描述語言(hdl),它定義本文中描述的結構、電路、裝置、處理器和/或系統特性。這些實施例也被稱為程序產品。
仿真(包括二進位變換、代碼變形等)
在某些情況下,指令轉換器可用來將指令從源指令集轉換至目標指令集。例如,指令轉換器可以變換(例如使用靜態二進位變換、包括動態編譯的動態二進位變換)、變形、仿真或以其它方式將指令轉換成將由核來處理的一個或多個其它指令。指令轉換器可以用軟體、硬體、固件、或其組合實現。指令轉換器可以在處理器上、在處理器外、或者部分在處理器上部分在處理器外。
圖17是根據本發明的各實施例的對照使用軟體指令轉換器將源指令集中的二進位指令轉換成目標指令集中的二進位指令的框圖。在所示的實施例中,指令轉換器是軟體指令轉換器,但作為替代該指令轉換器可以用軟體、固件、硬體或其各種組合來實現。圖17示出了用高級語言1702的程序可以使用x86編譯器1704來編譯,以生成可以由具有至少一個x86指令集核1716的處理器原生執行的x86二進位代碼1706。具有至少一個x86指令集核1716的處理器表示任何處理器,這些處理器能通過兼容地執行或以其他方式處理以下內容來執行與具有至少一個x86指令集核的英特爾處理器基本相同的功能:1)英特爾x86指令集核的指令集的本質部分,或2)被定向為在具有至少一個x86指令集核的英特爾處理器上運行的應用或其它程序的對象代碼版本,以便取得與具有至少一個x86指令集核的英特爾處理器基本相同的結果。x86編譯器1704表示用於生成x86二進位代碼1706(例如,對象代碼)的編譯器,該二進位代碼1706可通過或不通過附加的連結處理在具有至少一個x86指令集核1716的處理器上執行。類似地,圖17示出用高級語言1702的程序可以使用替代的指令集編譯器1708來編譯,以生成可以由不具有至少一個x86指令集核1714的處理器(例如具有執行加利福尼亞州桑尼維爾市的mips技術公司的mips指令集,和/或執行加利福尼亞州桑尼維爾市的arm控股公司的arm指令集的核的處理器)原生執行的替代指令集二進位代碼1710。指令轉換器1712被用來將x86二進位代碼1706轉換成可以由不具有x86指令集核1714的處理器原生執行的代碼。該轉換後的代碼不大可能與替換性指令集二進位代碼1710相同,因為能夠這樣做的指令轉換器難以製造;然而,轉換後的代碼將完成一般操作並由來自替換性指令集的指令構成。因此,指令轉換器1712通過仿真、模擬或任何其它過程來表示允許不具有x86指令集處理器或核的處理器或其它電子設備執行x86二進位代碼1706的軟體、固件、硬體或其組合。