背景
本發(fā)明總體涉及計算機處理器領(lǐng)域。更具體地說,本發(fā)明涉及用于將掩碼擴展為掩碼值向量的方法和裝置。
相關(guān)技術(shù)描述
指令集,或指令集架構(gòu)(isa)是涉及編程的計算機架構(gòu)的一部分,并包括原生數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲器架構(gòu)、中斷和異常處理、以及外部輸入和輸出(i/o)。應(yīng)該注意,術(shù)語“指令”在本文中一般是指宏指令——即,提供給處理器供執(zhí)行的指令——而不是作為由處理器的解碼器解碼宏指令產(chǎn)生的結(jié)果的微指令或微操作。微指令或微操作可以配置為指示處理器上的執(zhí)行單元執(zhí)行操作以實現(xiàn)與宏指令相關(guān)聯(lián)的邏輯。
isa與微架構(gòu)不同,微架構(gòu)是用于實現(xiàn)指令集的處理器設(shè)計技術(shù)的集合。具有不同的微架構(gòu)的處理器可共享共同的指令集。例如,
指令集包括一個或多個指令格式。給定指令格式定義各個字段(位的數(shù)量、位的位置)以指定要執(zhí)行的操作以及對其要執(zhí)行該操作的操作數(shù)等。通過指令模板(或子格式)的定義來進一步分解一些指令格式。例如,可將給定指令格式的指令模板定義為具有指令格式的字段的不同子集(所包括的字段通常按相同的順序,但是至少一些字段具有不同的位的位置,因為有較少的字段被包括)和/或定義為具有以不同的方式來解釋的給定字段。使用給定的指令格式(并且如果經(jīng)定義,則以該指令格式的一個給定的指令模板)來表達給定的指令,并且該給定的指令指定操作和操作數(shù)。指令流是具體的指令序列,其中,序列中的每條指令是按照指令格式(并且如果經(jīng)定義,按照該指令格式的指令模板中的一個給定的指令模板)的指令的發(fā)生。
附圖說明
結(jié)合以下附圖,從以下具體實施方式中可獲得對本發(fā)明更好的理解,其中:
圖1a和1b是示出根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其指令模板的框圖;
圖2a-d是示出根據(jù)本發(fā)明的實施例的示例性專用向量友好指令格式的框圖;
圖3是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)的框圖;以及
圖4a是示出根據(jù)本發(fā)明的實施例的示例性有序取出、解碼、引退流水線以及示例性寄存器重命名的亂序發(fā)布/執(zhí)行流水線兩者的框圖;
圖4b是示出根據(jù)本發(fā)明的實施例的要包括在處理器中的有序取出、解碼、引退核的示例性實施例和示例性的寄存器重命名的亂序發(fā)布/執(zhí)行架構(gòu)核的框圖;
圖5a是單個處理器核以及它與管芯上互連網(wǎng)絡(luò)的連接的框圖;
圖5b示出根據(jù)本發(fā)明的實施例的圖5a中的處理器核的一部分的展開圖;
圖6是根據(jù)本發(fā)明的實施例的具有集成存儲器控制器和圖形器件的單核處理器和多核處理器的框圖;
圖7示出根據(jù)本發(fā)明的一個實施例的系統(tǒng)的框圖;
圖8示出根據(jù)本發(fā)明的實施例的第二系統(tǒng)的框圖;
圖9示出根據(jù)本發(fā)明的實施例的第三系統(tǒng)的框圖;
圖10示出根據(jù)本發(fā)明的實施例的芯片上系統(tǒng)(soc)的框圖;
圖11示出根據(jù)本發(fā)明的實施例的、對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進制指令轉(zhuǎn)換成目標(biāo)指令集中的二進制指令的框圖;
圖12示出可在其上實現(xiàn)本發(fā)明的實施例的示例性處理器;
圖13-14示出根據(jù)本發(fā)明的一個實施例的掩碼擴展邏輯;以及
圖15示出根據(jù)本發(fā)明的一個實施例的方法。
具體實施方式
在下面的描述中,為了進行解釋,闡述了眾多具體細節(jié)以便提供對以下描述的本發(fā)明的多個實施例的透徹理解。然而,對本領(lǐng)域技術(shù)人員顯而易見的是,可以在沒有這些具體細節(jié)中的一些細節(jié)的情況下實施本發(fā)明的各實施例。在其他實例中,公知的結(jié)構(gòu)和設(shè)備以框圖形式示出,以避免使本發(fā)明的多個實施例的基本原理模糊。
示例性處理器架構(gòu)和數(shù)據(jù)類型
指令集包括一個或多個指令格式。給定指令格式定義各種字段(位的數(shù)量、位的位置)以指定將要執(zhí)行的操作(操作碼)以及將對其執(zhí)行該操作的操作數(shù),等等。通過指令模板(或子格式)的定義來進一步分解一些指令格式。例如,可將給定指令格式的指令模板定義為具有指令格式的字段的不同子集(所包括的字段通常按相同的順序,但是至少一些字段具有不同的位的位置,因為有較少的字段被包括)和/或定義為具有以不同的方式來解釋的給定字段。如此,isa的每一條指令使用給定的指令格式來表達(并且如果經(jīng)定義,則按照該指令格式的指令模板中的給定指令模板),并包括用于指定操作和操作數(shù)的字段。例如,示例性add指令具有專用操作碼以及包括用于指定該操作碼的操作碼字段和用于選擇操作數(shù)的操作數(shù)字段(源1/目的地以及源2)的指令格式,并且該add指令在指令流中的出現(xiàn)將具有選擇特定操作數(shù)的操作數(shù)字段中的特定內(nèi)容。已發(fā)布和/或出版了被稱為高級向量擴展(avx)(avx1和avx2)并使用向量擴展(vex)編碼方案的simd擴展集(例如,參見2011年10月的《
示例性指令格式
本文中所描述的指令的實施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。指令的實施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。
a.通用向量友好指令格式
向量友好指令格式是適于向量指令(例如,存在專用于向量操作的特定字段)的指令格式。盡管描述了其中通過向量友好指令格式支持向量和標(biāo)量運算兩者的實施例,但是替代實施例僅使用通過向量友好指令格式的向量運算。
圖1a-1b是示出根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其指令模板的框圖。圖1a是示出根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其a類指令模板的框圖;而圖1b是示出根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其b類指令模板的框圖。具體而言,為通用向量友好指令格式100定義了a類和b類指令模板,這兩類指令模板都包括無存儲器訪問105指令模板和存儲器訪問120指令模板。在向量友好指令格式的上下文中的術(shù)語“通用”指不束縛于任何專用指令集的指令格式。
盡管將描述其中向量友好指令格式支持以下情況的本發(fā)明的實施例,即: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ù)元素寬度(或大小);但是,替代實施例可支持更大、更小、和/或不同的向量操作數(shù)大小(例如,256字節(jié)向量操作數(shù))與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)。
圖1a中的a類指令模板包括:1)在無存儲器訪問105的指令模板內(nèi),示出無存儲器訪問的完全舍入控制型操作110的指令模板以及無存儲器訪問的數(shù)據(jù)變換型操作115的指令模板;以及2)在存儲器訪問120的指令模板內(nèi),示出存儲器訪問的時效性的125的指令模板和存儲器訪問的非時效性的130的指令模板。圖1b中的b類指令模板包括:1)在無存儲器訪問105的指令模板內(nèi),示出無存儲器訪問的寫掩碼控制的部分舍入控制型操作112的指令模板以及無存儲器訪問的寫掩碼控制的vsize型操作117的指令模板;以及2)在存儲器訪問120的指令模板內(nèi),示出存儲器訪問的寫掩碼控制127的指令模板。
通用向量友好指令格式100包括下文中按照圖1a-1b中所示出的順序列出的下列字段。
格式字段140-該字段中的特定值(指令格式標(biāo)識符值)唯一地標(biāo)識向量友好指令格式,并且由此標(biāo)識指令在指令流中以向量友好指令格式出現(xiàn)。由此,該字段對于僅具有通用向量友好指令格式的指令集是不需要的,在這個意義上該字段是任選的。
基礎(chǔ)操作字段142-其內(nèi)容區(qū)分不同的基礎(chǔ)操作。
寄存器索引字段144-其內(nèi)容直接或者通過地址生成來指定源和目的地操作數(shù)在寄存器中或者在存儲器中的位置。這些字段包括足夠數(shù)量的位以從pxq(例如,32x512、16x128、32x1024、64x1024)個寄存器堆中選擇n個寄存器。盡管在一個實施例中n可高達三個源和一個目的地寄存器,但是替代實施例可支持更多或更少的源和目的地寄存器(例如,可支持高達兩個源,其中這些源中的一個源還用作目的地,可支持高達三個源,其中這些源中的一個源還用作目的地,可支持高達兩個源和一個目的地)。
修飾符(modifier)字段146-其內(nèi)容將指定存儲器訪問的以通用向量指令格式出現(xiàn)的指令與不指定存儲器訪問的以通用向量指令格式出現(xiàn)的指令區(qū)分開;即在無存儲器訪問105的指令模板與存儲器訪問120的指令模板之間進行區(qū)分。存儲器訪問操作讀取和/或?qū)懭氲酱鎯ζ鲗哟?在一些情況下,使用寄存器中的值來指定源和/或目的地地址),而非存儲器訪問操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個實施例中,該字段還在三種不同的方式之間選擇以執(zhí)行存儲器地址計算,但是替代實施例可支持更多、更少或不同的方式來執(zhí)行存儲器地址計算。
擴充操作字段150-其內(nèi)容區(qū)分除基礎(chǔ)操作以外還要執(zhí)行各種不同操作中的哪一個操作。該字段是針對上下文的。在本發(fā)明的一個實施例中,此字段被劃分為類字段168、α字段152以及β字段154。擴充操作字段150允許在單條指令而非2條、3條或4條指令中執(zhí)行多組共同的操作。
比例字段160-其內(nèi)容允許用于存儲器地址生成(例如,用于使用2比例*索引+基址的地址生成)的索引字段的內(nèi)容的按比例縮放。
位移字段162a-其內(nèi)容用作存儲器地址生成的一部分(例如,用于使用2比例*索引+基址+位移的地址生成)。
位移因數(shù)字段162b(注意,位移字段162a直接在位移因數(shù)字段162b上的并置指示使用一個或另一個)-其內(nèi)容用作地址生成的一部分,它指定通過存儲器訪問的大小(n)按比例縮放的位移因數(shù),其中n是存儲器訪問中的字節(jié)數(shù)量(例如,用于使用2比例*索引+基址+按比例縮放的位移的地址生成)。忽略冗余的低階位,并且因此將位移因數(shù)字段的內(nèi)容乘以存儲器操作數(shù)總大小(n)以生成要在計算有效地址時使用的最終位移。n的值由處理器硬件在運行時基于完整操作碼字段174(稍候在本文中描述)和數(shù)據(jù)操縱字段154c確定。位移字段162a和位移因數(shù)字段162b不用于無存儲器訪問105指令模板,和/或不同的實施例可以實現(xiàn)僅一者或兩者都不實現(xiàn),從這個意義上說,位移字段162a和位移因數(shù)字段162b是任選的。
數(shù)據(jù)元素寬度字段164-其內(nèi)容區(qū)分將使用多個數(shù)據(jù)元素寬度中的哪一個(在一些實施例中用于所有指令,在其他實施例中僅用于指令中的一些)。如果支持僅一個數(shù)據(jù)元素寬度和/或使用操作碼的某一方面來支持數(shù)據(jù)元素寬度,則該字段是不需要的,在這個意義上該字段是任選的。
寫掩碼字段170-其內(nèi)容在每一數(shù)據(jù)元素位置的基礎(chǔ)上控制目的地向量操作數(shù)中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴充操作的結(jié)果。a類指令模板支持合并-寫掩碼操作,而b類指令模板支持合并-寫掩碼操作和歸零-寫掩碼操作兩者。當(dāng)合并時,向量掩碼允許在執(zhí)行任何操作期間保護目的地中的任何元素集免于更新(由基礎(chǔ)操作和擴充操作指定);在另一實施例中,保持其中對應(yīng)掩碼位具有0的目的地的每一元素的舊值。相反,當(dāng)歸零時,向量掩碼允許在執(zhí)行任何操作期間使目的地中的元素的任何集合歸零(由基礎(chǔ)操作和擴充操作指定);在一個實施例中,目的地的元素在對應(yīng)掩碼位具有0值時被設(shè)為0。該功能的子集是控制執(zhí)行的操作的向量長度的能力(即,從第一個到最后一個要修改的元素的跨度),然而,被修改的元素不一定要是連續(xù)的。如此,寫掩碼字段170允許部分向量操作,包括加載、存儲、算術(shù)、邏輯等等。盡管描述了其中寫掩碼字段170的內(nèi)容選擇了多個寫掩碼寄存器中的包含要使用的寫掩碼的一個寫掩碼寄存器(并且由此寫掩碼字段170的內(nèi)容間接地標(biāo)識了要執(zhí)行的掩碼操作)的本發(fā)明的實施例,但是替代實施例相反或另外允許掩碼寫字段170的內(nèi)容直接地指定要執(zhí)行的掩碼操作。
立即數(shù)字段172-其內(nèi)容允許對立即數(shù)的指定。該字段在實現(xiàn)不支持立即數(shù)的通用向量友好格式中不存在且在不使用立即數(shù)的指令中不存在,在這個意義上該字段是任選的。
類字段168-其內(nèi)容在不同類的指令之間進行區(qū)分。參考圖1a-b,該字段的內(nèi)容在a類和b類指令之間進行選擇。在圖1a-b中,使用圓角方形來指示在字段中存在專用值(例如,在圖1a-b中,分別是針對類字段168的a類168a和b類168b)。
a類指令模板
在a類非存儲器訪問105的指令模板的情況下,α字段152被解釋為rs字段152a,其內(nèi)容區(qū)分將執(zhí)行不同的擴充操作類型中的哪一種(例如,分別為無存儲器訪問的舍入型操作110以及無存儲器訪問的數(shù)據(jù)變換型操作115指令模板指定的舍入152a.1和數(shù)據(jù)變換152a.2),而β字段154區(qū)別將執(zhí)行指定的類型的操作中的哪一個。在無存儲器訪問105的指令模板中,比例字段160、位移字段162a以及位移比例字段162b不存在。
無存儲器訪問的指令模板-完全舍入控制型操作
在無存儲器訪問的完全舍入控制型操作110指令模板中,β字段154被解釋為舍入控制字段154a,其內(nèi)容提供靜態(tài)舍入操作。盡管在本發(fā)明的所描述的實施例中,舍入控制字段154a包括抑制所有浮點異常(sae)字段156和舍入操作控制字段158,但是替代實施例可以支持將這兩個概念編碼為同一個字段,或僅具有這些概念/字段中的一個或另一個(例如,可以僅具有舍入操作控制字段158)。
sae字段156-其內(nèi)容區(qū)分是否禁用異常事件報告;當(dāng)sae字段156的內(nèi)容指示啟用抑制時,給定的指令不報告任何種類的浮點異常標(biāo)志,并且不喚起任何浮點異常處理程序。
舍入操作控制字段158-其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。如此,舍入操作控制字段158允許逐指令地改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段150的內(nèi)容優(yōu)先于該寄存器值。
無存儲器訪問的指令模板-數(shù)據(jù)變換型操作
在無存儲器訪問的數(shù)據(jù)變換型操作115指令模板中,β字段154被解釋為數(shù)據(jù)變換字段154b,其內(nèi)容區(qū)分將執(zhí)行數(shù)個數(shù)據(jù)變換中的哪一個(例如,無數(shù)據(jù)變換、混合、廣播)。
在a類存儲器訪問120的指令模板的情況下,α字段152被解釋為驅(qū)逐提示字段152b,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(在圖1a中,對于存儲器訪問時效性125的指令模板和存儲器訪問非時效性130的指令模板分別指定時效性的152b.1和非時效性的152b.2),而β字段154被解釋為數(shù)據(jù)操縱字段154c,其內(nèi)容區(qū)分要執(zhí)行多個數(shù)據(jù)操縱操作(也稱為基元(primitive))中的哪一個(例如,無操縱、廣播、源的向上轉(zhuǎn)換以及目的地的向下轉(zhuǎn)換)。存儲器訪問120指令模板包括比例字段160,并且任選地包括位移字段162a或位移比例字段162b。
向量存儲器指令使用轉(zhuǎn)換支持來執(zhí)行來自存儲器的向量加載并將向量存儲到存儲器。如同尋常的向量指令,向量存儲器指令以數(shù)據(jù)元素式的方式與存儲器來回傳輸數(shù)據(jù),其中實際傳輸?shù)脑赜蛇x為寫掩碼的向量掩碼的內(nèi)容規(guī)定。
存儲器訪問的指令模板-時效性的
時效性的數(shù)據(jù)是可能足夠快地重新使用以從高速緩存受益的數(shù)據(jù)。然而,這是提示,且不同的處理器可以不同的方式實現(xiàn)它,包括完全忽略該提示。
存儲器訪問的指令模板-非時效性的
非時效性數(shù)據(jù)是不大可能足夠快地重復(fù)使用以從第1級高緩存中的高速緩存操作獲益且應(yīng)當(dāng)給予驅(qū)逐優(yōu)先級的數(shù)據(jù)。然而,這是提示,且不同的處理器可以不同的方式實現(xiàn)它,包括完全忽略該提示。
b類指令模板
在b類指令模板的情況下,α字段152被解釋為寫掩碼控制(z)字段152c,其內(nèi)容區(qū)分由寫掩碼字段170控制的寫掩碼應(yīng)當(dāng)是合并還是歸零。
在b類非存儲器訪問105指令模板的情況下,β字段154的部分被解釋為rl字段157a,其內(nèi)容區(qū)分將執(zhí)行不同的擴充操作類型中的哪一種(例如,分別為無存儲器訪問的寫掩碼控制部分舍入控制型操作112指令模板和無存儲器訪問的寫掩碼控制vsize型操作117指令模板指定的舍入157a.1和向量長度(vsize)157a.2),而β字段154的其余部分區(qū)分將執(zhí)行指定類型的操作中的哪一個。在無存儲器訪問105的指令模板中,比例字段160、位移字段162a以及位移比例字段162b不存在。
在無存儲器訪問的寫掩碼控制部分舍入控制型操作110指令模板中,β字段154的其余部分被解釋為舍入操作字段159a,并且異常事件報告被禁用(給定的指令不報告任何種類的浮點異常標(biāo)志,并且不引發(fā)任何浮點異常處理程序)。
舍入操作控制字段159a-正如舍入操作控制字段158,其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段159a允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段150的內(nèi)容優(yōu)先于該寄存器值。
在無存儲器訪問的寫掩碼控制vsize型操作117指令模板中,β字段154的其余部分被解釋為向量長度字段159b,其內(nèi)容區(qū)分將執(zhí)行數(shù)個數(shù)據(jù)向量長度中的哪一個(例如,128、256或512字節(jié))。
在b類存儲器訪問120指令模板的情況下,β字段154的部分被解釋為廣播字段157b,其內(nèi)容區(qū)分是否將執(zhí)行廣播類型數(shù)據(jù)操縱操作,而β字段154的其余部分被解釋為向量長度字段159b。存儲器訪問120指令模板包括比例字段160,并且任選地包括位移字段162a或位移比例字段162b。
就通用向量友好指令格式100而言,完整操作碼字段174示出為包括格式字段140、基礎(chǔ)操作字段142以及數(shù)據(jù)元素寬度字段164。盡管示出了其中完整操作碼字段174包括所有這些字段的一個實施例,但是,在不是支持所有這些字段的實施例中,完整操作碼字段174包括少于全部這些字段。完整操作碼字段174提供操作代碼(操作碼)。
擴充操作字段150、數(shù)據(jù)元素寬度字段164以及寫掩碼字段170允許以通用向量友好指令格式逐指令地指定這些特征。
寫掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類型的指令,因為這些指令允許基于不同的數(shù)據(jù)元素寬度應(yīng)用該掩碼。
在a類和b類內(nèi)出現(xiàn)的各種指令模板在不同的情形下是有益的。在本發(fā)明的一些實施例中,不同處理器或者處理器內(nèi)的不同核可支持僅a類、僅b類、或者可支持兩類。舉例而言,旨在用于通用計算的高性能通用亂序核可僅支持b類,旨在主要用于圖形和/或科學(xué)(吞吐量)計算的核可僅支持a類,并且旨在用于兩者的核可支持兩者(當(dāng)然,具有來自兩類的模板和指令的一些混合、但是并非來自兩類的所有模板和指令的核在本發(fā)明的范圍內(nèi))。同樣,單一處理器可包括多個核,所有核支持相同的類或者其中不同的核支持不同的類。舉例而言,在具有單獨的圖形和通用核的處理器中,圖形核中的旨在主要用于圖形和/或科學(xué)計算的一個核可僅支持a類,而通用核中的一個或多個可以是具有旨在用于通用計算的僅支持b類的亂序執(zhí)行和寄存器重命名的高性能通用核。不具有單獨的圖形核的另一處理器可包括既支持a類又支持b類的一個或多個通用有序或亂序核。當(dāng)然,在本發(fā)明的不同實施例中,來自一類的特征也可在其他類中實現(xiàn)。可使以高級語言撰寫的程序成為(例如,及時編譯或者靜態(tài)編譯)各種不同的可執(zhí)行形式,包括:1)僅具有目標(biāo)處理器支持以執(zhí)行的類的指令的形式;或者2)具有使用所有類的指令的不同組合而編寫的替代例程且具有選擇這些例程以基于由當(dāng)前正在執(zhí)行代碼的處理器支持的指令而執(zhí)行的控制流代碼的形式。
b.示例性專用向量友好指令格式
圖2是示出根據(jù)本發(fā)明的實施例的示例性專用向量友好指令格式的框圖。圖2示出專用向量友好指令格式200,其指定位置、大小、解釋、字段的次序、以及那些字段中的一些字段的值,在這個意義上專用向量友好指令格式200是專用的。專用向量友好指令格式200可以被用來擴展x86指令集,并且由此,這些字段中的一些與用于現(xiàn)有的x86指令集及其擴展(例如,avx)中的那些字段類似或相同。該格式保持與具有擴展的現(xiàn)有x86指令集的前綴編碼字段、實操作碼字節(jié)字段、modr/m字段、sib字段、位移字段、以及立即數(shù)字段一致。示出來自圖1的字段,來自圖2的字段映射到來自圖1的字段。
應(yīng)當(dāng)理解,雖然出于說明的目的在通用向量友好指令格式100的上下文中,本發(fā)明的實施例參考專用向量友好指令格式200進行了描述,但是本發(fā)明不限于專用向量友好指令格式200,聲明的地方除外。例如,通用向量友好指令格式100構(gòu)想了各種字段的各種可能的大小,而專用向量友好指令格式200示出為具有特定大小的字段。作為具體示例,盡管數(shù)據(jù)元素寬度字段164示出為專用向量友好指令格式200中的一個位字段,但是本發(fā)明不限于此(也就是說,通用向量友好指令格式100構(gòu)想數(shù)據(jù)元素寬度字段164的其他大小)。
通用向量友好指令格式100包括下文中按照圖2a中所示出的順序列出的字段。
evex前綴(字節(jié)0-3)202——以四字節(jié)形式進行編碼。
格式字段140(evex字節(jié)0,位[7:0])——第一字節(jié)(evex字節(jié)0)是格式字段140,并且它包含0x62(在本發(fā)明的一個實施例中用于區(qū)分向量友好指令格式的唯一值)。
第二-第四字節(jié)(evex字節(jié)1-3)包括提供專用能力的多個位字段。
rex字段205(evex字節(jié)1,位[7-5])-由evex.r位字段(evex字節(jié)1,位[7]–r)、evex.x位字段(evex字節(jié)1,位[6]–x)以及(157bex字節(jié)1,位[5]–b)組成。evex.r、evex.x和evex.b位字段提供與對應(yīng)vex位字段相同的功能,并且使用1補碼的形式進行編碼,即zmm0被編碼為1111b,zmm15被編碼為0000b。這些指令的其他字段對如在本領(lǐng)域中已知的寄存器索引的較低三個位(rrr、xxx、以及bbb)進行編碼,由此可通過增加evex.r、evex.x以及evex.b來形成rrrr、xxxx以及bbbb。
rex’字段110-這是rex’字段110的第一部分,并且是用于對擴展的32個寄存器集合的較高16個或較低16個寄存器進行編碼的evex.r’位字段(evex字節(jié)1,位[4]–r’)。在本發(fā)明的一個實施例中,該位與以下指示的其他位一起以位反轉(zhuǎn)的格式存儲以(在公知x86的32位模式下)與實操作碼字節(jié)是62的bound指令進行區(qū)分,但是在modr/m字段(在下文中描述)中不接受mod字段中的值11;本發(fā)明的替代實施例不以反轉(zhuǎn)的格式存儲該指示的位以及下文中其他指示的位。值1用于對較低16個寄存器進行編碼。換言之,r'rrrr是通過組合來自其他字段的evex.r'、evex.r以及其他rrr而形成的。
操作碼映射字段215(evex字節(jié)1,位[3:0]–mmmm)–其內(nèi)容對隱含的前導(dǎo)操作碼字節(jié)(0f、0f38、或0f3)進行編碼。
數(shù)據(jù)元素寬度字段164(evex字節(jié)2,位[7]–w)-由記號evex.w表示。evex.w用于定義數(shù)據(jù)類型的粒度(大小)(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)。
evex.vvvv220(evex字節(jié)2,位[6:3]-vvvv)——evex.vvvv的作用可包括如下:1)evex.vvvv編碼第一源寄存器操作數(shù)且對具有兩個或兩個以上源操作數(shù)的指令有效,第一源寄存器操作數(shù)以反轉(zhuǎn)(1補碼)形式被指定;2)evex.vvvv編碼目的地寄存器操作數(shù),目的地寄存器操作數(shù)針對特定向量位移以1補碼的形式被指定;或者3)evex.vvvv不編碼任何操作數(shù),保留該字段,并且應(yīng)當(dāng)包含1111b。由此,evex.vvvv字段220對以反轉(zhuǎn)(1補碼)的形式存儲的第一源寄存器說明符的4個低階位進行編碼。取決于該指令,額外不同的evex位字段用于將說明符大小擴展到32個寄存器。
evex.u168類字段(evex字節(jié)2,位[2]-u)——如果evex.u=0,則它指示a類或evex.u0;如果evex.u=1,則它指示b類或evex.u1。
前綴編碼字段225(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前綴編碼,并且由此不需要擴展。
α字段152(evex字節(jié)3,位[7]–eh;也稱為evex.eh、evex.rs、evex.rl、evex.寫掩碼控制、以及evex.n;也以α示出)-如先前所述,該字段是針對上下文的。
β字段154(evex字節(jié)3,位[6:4]-sss,也稱為evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb,還被示為具有βββ)-如先前所述,該字段是內(nèi)容專用的。
rex’字段110-這是rex’字段的其余部分,并且是可用于對擴展的32個寄存器集合的較高16個或較低16個寄存器進行編碼的evex.v’位字段(evex字節(jié)3,位[3]–v’)。該位以位反轉(zhuǎn)的格式存儲。值1用于對較低16個寄存器進行編碼。換言之,v'vvvv是通過組合evex.v'、evex.vvvv而形成的。
寫掩碼字段170(evex字節(jié)3,位[2:0]-kkk)-其內(nèi)容指定寫掩碼寄存器中的寄存器索引,如先前所述。在本發(fā)明的一個實施例中,特定值evex.kkk=000具有暗示沒有寫掩碼用于特定指令的特殊行為(這可以各種方式實現(xiàn),包括使用硬連線成全部為1的寫掩碼或者旁路掩碼硬件的硬件來實現(xiàn))。
實操作碼字段230(字節(jié)4)也稱為操作碼字節(jié)。操作碼的一部分在該字段中被指定。
modr/m字段240(字節(jié)5)包括mod字段242、reg字段244以及r/m字段246。如前所述,mod字段242的內(nèi)容在存儲器訪問操作與非存儲器訪問操作之間進行區(qū)分。reg字段244的作用可被歸結(jié)為兩種情形:對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼;或者被視為操作碼擴展且不用于對任何指令操作數(shù)進行編碼。r/m字段246的作用可包括如下:對引用存儲器地址的指令操作數(shù)進行編碼,或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼。
比例、索引、基址(sib)字節(jié)(字節(jié)6)-如先前所述的,比例字段150的內(nèi)容用于存儲器地址生成。sib.xxx254和sib.bbb256-先前已經(jīng)針對寄存器索引xxxx和bbbb提及了這些字段的內(nèi)容。
位移字段162a(字節(jié)7-10)-當(dāng)mod字段242包含10時,字節(jié)7-10是位移字段162a,并且它以與傳統(tǒng)32位位移(disp32)相同的方式工作,以字節(jié)粒度工作。
位移因數(shù)字段162b(字節(jié)7)-當(dāng)mod字段242包含01時,字節(jié)7是位移因數(shù)字段162b。該字段的位置與傳統(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ù)字段162b是disp8的重新解釋;當(dāng)使用位移因數(shù)字段162b時,通過將位移因數(shù)字段的內(nèi)容乘以存儲器操作數(shù)訪問的大小(n)來確定實際位移。這種類型的位移被稱為disp8*n。這減小了平均指令長度(用于位移的單個字節(jié),但是具有大得多的范圍)。這種壓縮位移基于有效位移是存儲器訪問的粒度的倍數(shù)的假設(shè),并且由此地址偏移量的冗余低階位不需要被編碼。換句話說,位移因數(shù)字段162b替代傳統(tǒng)x86指令集8位位移。由此,位移因數(shù)字段162b以與x86指令集8位位移相同的方式(因此在modrm/sib編碼規(guī)則中沒有變化)進行編碼,唯一的不同在于,將disp8超載至disp8*n。換句話說,在編碼規(guī)則或編碼長度中沒有變化,而僅在通過硬件對位移值的解釋中有變化(這需要按存儲器操作數(shù)的尺寸按比例縮放位移量以獲得字節(jié)式地址偏移量)。
立即數(shù)字段172如先前所述那樣進行操作。
完整操作碼字段
圖2b是示出根據(jù)本發(fā)明的一個實施例的構(gòu)成完整操作碼字段174的專用向量友好指令格式200中的字段的框圖。具體而言,完整操作碼字段174包括格式字段140、基礎(chǔ)操作字段142以及數(shù)據(jù)元素寬度(w)字段164?;A(chǔ)操作字段142包括前綴編碼字段225、操作碼映射字段215以及實操作碼字段230。
寄存器索引字段
圖2c是示出根據(jù)本發(fā)明的一個實施例的構(gòu)成寄存器索引字段144的具有專用向量友好指令格式200的字段的框圖。具體地,寄存器索引字段144包括rex字段205、rex’字段210、modr/m.reg字段244、modr/m.r/m字段246、vvvv字段220、xxx字段254以及bbb字段256。
擴充操作字段
圖2d是示出根據(jù)本發(fā)明的一個實施例的構(gòu)成擴充操作字段150的具有專用向量友好指令格式200的字段的框圖。當(dāng)類(u)字段168包含0時,它表示evex.u0(a類168a);當(dāng)它包含1時,它表示evex.u1(b類168b)。當(dāng)u=0并且mod字段242包含11(表示無存儲器訪問操作)時,α字段152(evex字節(jié)3,位[7]-eh)被解釋為rs字段152a。當(dāng)rs字段152a包含1(舍入152a.1)時,β字段154(evex字節(jié)3、位[6:4]-sss)被解釋為舍入控制字段154a。舍入控制字段154a包括一位的sae字段156和兩位的舍入操作字段158。當(dāng)rs字段152a包含0(數(shù)據(jù)變換152a.2)時,β字段154(evex字節(jié)3,位[6:4]-sss)被解釋為三位的數(shù)據(jù)變換字段154b。當(dāng)u=0且mod字段242包含00、01或10(表明存儲器訪問操作)時,α字段152(evex字節(jié)3,位[7]–eh)被解釋為驅(qū)逐提示(eh)字段152b且β字段154(evex字節(jié)3,位[6:4]–sss)被解釋為三位的數(shù)據(jù)操縱字段154c。
當(dāng)u=1時,α字段152(evex字節(jié)3,位[7]-eh)被解釋為寫掩碼控制(z)字段152c。當(dāng)u=1且mod字段242包含11(表示無存儲器訪問操作)時,β字段154的一部分(evex字節(jié)3,位[4]–s0)被解釋為rl字段157a;當(dāng)它包含1(舍入157a.1)時,β字段154的其余部分(evex字節(jié)3,位[6-5]–s2-1)被解釋為舍入操作字段159a,而當(dāng)rl字段157a包含0(vsize157.a2)時,β字段154的其余部分(evex字節(jié)3,位[6-5]–s2-1)被解釋為向量長度字段159b(evex字節(jié)3,位[6-5]–l1-0)。當(dāng)u=1且mod字段242包含00、01或10(表示存儲器訪問操作)時,β字段154(evex字節(jié)3,位[6:4]–sss)被解釋為向量長度字段159b(evex字節(jié)3,位[6-5]–l1-0)和廣播字段157b(evex字節(jié)3,位[4]–b)。
c.示例性寄存器架構(gòu)
圖3是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)300的框圖。在所示出的實施例中,有32個512位寬的向量寄存器310;這些寄存器被引用為zmm0到zmm31。較低的16個zmm寄存器的較低階256個位覆蓋在寄存器ymm0-16上。較低的16個zmm寄存器的較低階128個位(ymm寄存器的較低階128個位)覆蓋在寄存器xmm0-15上。專用向量友好指令格式200按下表中所示方式對這些重疊寄存器堆進行操作。
換句話說,向量長度字段159b在最大長度與一個或多個其他較短長度之間進行選擇,其中每一這種較短長度是前一長度的一半,并且不具有向量長度字段159b的指令模板對最大向量長度操作。此外,在一個實施例中,專用向量友好指令格式200的b類指令模板對緊縮或標(biāo)量單/雙精度浮點數(shù)據(jù)以及緊縮或標(biāo)量整數(shù)數(shù)據(jù)操作。標(biāo)量操作是對zmm/ymm/xmm寄存器中的最低階數(shù)據(jù)元素位置執(zhí)行的操作;取決于本實施例,較高階數(shù)據(jù)元素位置保持與在指令之前相同或者歸零。
寫掩碼寄存器315——在所示實施例中,有8個寫掩碼寄存器(k0到k7),每一個的尺寸都是64位。在替代實施例中,寫掩碼寄存器315的尺寸為16位。如先前所述的,在本發(fā)明的一個實施例中,向量掩碼寄存器k0無法用作寫掩碼;當(dāng)正常指示k0的編碼用作寫掩碼時,它選擇硬連線的寫掩碼0xffff,從而有效地停用該指令的寫掩碼操作。
通用寄存器325——在所示實施例中,有十六個64位通用寄存器,這些寄存器與現(xiàn)有的x86尋址模式一起使用來對存儲器操作數(shù)尋址。這些寄存器通過名稱rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15來引用。
標(biāo)量浮點棧寄存器堆(x87棧)345,在其上重疊了mmx緊縮整數(shù)平坦寄存器堆350——在所示出的實施例中,x87棧是用于使用x87指令集擴展來對32/64/80位浮點數(shù)據(jù)執(zhí)行標(biāo)量浮點操作的八元素棧;而使用mmx寄存器來對64位緊縮整數(shù)數(shù)據(jù)執(zhí)行操作,以及為在mmx和xmm寄存器之間執(zhí)行的某些操作保存操作數(shù)。
本發(fā)明的替代實施例可以使用較寬的或較窄的寄存器。另外,本發(fā)明的替代實施例可以使用更多、更少或不同的寄存器堆和寄存器。
d.示例性核架構(gòu)、處理器和計算機架構(gòu)
處理器核可以以不同方式、出于不同目的、在不同的處理器中實現(xiàn)。例如,這樣的核的實現(xiàn)可以包括:1)旨在用于通用計算的通用有序核;2)旨在用于通用計算的高性能通用亂序核;3)旨在主要用于圖形和/或科學(xué)(吞吐量)計算的專用核。不同處理器的實現(xiàn)可包括:1)包括旨在用于通用計算的一個或多個通用有序核和/或旨在用于通用計算的一個或多個通用亂序核的cpu;以及2)包括旨在主要用于圖形和/或科學(xué)(吞吐量)的一個或多個專用核的協(xié)處理器。這樣的不同處理器導(dǎo)致不同的計算機系統(tǒng)架構(gòu),其可包括:1)在與cpu分開的芯片上的協(xié)處理器;2)在與cpu相同的封裝中但分開的管芯上的協(xié)處理器;3)與cpu在相同管芯上的協(xié)處理器(在該情況下,這樣的協(xié)處理器有時被稱為諸如集成圖形和/或科學(xué)(吞吐量)邏輯等的專用邏輯,或被稱為專用核);以及4)可以將所描述的cpu(有時被稱為應(yīng)用核或應(yīng)用處理器)、以上描述的協(xié)處理器和附加功能包括在同一管芯上的芯片上系統(tǒng)。接著描述示例性核架構(gòu),隨后描述示例性處理器和計算機架構(gòu)。
圖4a是示出根據(jù)本發(fā)明的實施例的示例性有序流水線和示例性的寄存器重命名的亂序發(fā)布/執(zhí)行流水線的框圖。圖4b是示出根據(jù)本發(fā)明的實施例的要被包括在處理器中的有序架構(gòu)核的和示例性寄存器重命名的亂序發(fā)布/執(zhí)行架構(gòu)核的示例性實施例的框圖。圖4a-b中的實線框示出了有序流水線和有序核,而可選增加的虛線框示出了寄存器重命名的、亂序發(fā)布/執(zhí)行流水線和核。給定有序方面是亂序方面的子集的情況下,將描述亂序方面。
在圖4a中,處理器流水線400包括取出級402、長度解碼級404、解碼級406、分配級408、重命名級410、調(diào)度(也被稱為分派或發(fā)布)級412、寄存器讀取/存儲器讀取級414、執(zhí)行級416、寫回/存儲器寫入級418、異常處理級422和提交級424。
圖4b示出了包括耦合到執(zhí)行引擎單元450的前端單元430的處理器核490,且執(zhí)行引擎單元和前端單元兩者都耦合到存儲器單元470。核490可以是精簡指令集計算(risc)核、復(fù)雜指令集計算(cisc)核、超長指令字(vliw)核或混合或替代核類型。作為又一選項,核490可以是專用核,諸如例如網(wǎng)絡(luò)或通信核、緊縮引擎、協(xié)處理器核、通用計算圖形處理單元(gpgpu)核、圖形核、等等。
前端單元430包括耦合至指令高速緩存單元434的分支預(yù)測單元432,指令高速緩存單元434耦合至指令轉(zhuǎn)換后備緩沖器(tlb)436,指令轉(zhuǎn)換后備緩沖器436耦合至指令取出單元438,指令取出單元438耦合至解碼單元440。解碼單元440(或解碼器)可解碼指令,并生成從原始指令解碼出的、或以其它方式反映原始指令的、或從原始指令導(dǎo)出的一個或多個微操作、微代碼進入點、微指令、其它指令、或其它控制信號作為輸出。解碼單元440可使用各種不同的機制來實現(xiàn)。合適的機制的示例包括但不僅限于,查找表、硬件實現(xiàn)、可編程邏輯陣列(pla)、微代碼只讀存儲器(rom)等等。在一個實施例中,核490包括(例如,在解碼單元440中或以其他方式在前端單元430內(nèi)的)用于存儲某些宏指令的微代碼的微代碼rom或其他介質(zhì)。解碼單元440耦合至執(zhí)行引擎單元450中的重命名/分配器單元452。
執(zhí)行引擎單元450包括耦合至引退單元454的重命名/分配器單元452以及一組一個或多個調(diào)度器單元456。調(diào)度器單元456表示任意數(shù)量的不同調(diào)度器,包括預(yù)留站、中心指令窗等。調(diào)度器單元456耦合到物理寄存器堆單元458。每個物理寄存器堆單元458表示一個或多個物理寄存器堆,其中不同的物理寄存器堆存儲一種或多種不同的數(shù)據(jù)類型,諸如標(biāo)量整數(shù)、標(biāo)量浮點、緊縮整數(shù)、緊縮浮點、向量整數(shù)、向量浮點、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個實施例中,物理寄存器堆單元458包括向量寄存器單元、寫掩碼寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以提供架構(gòu)向量寄存器、向量掩碼寄存器、和通用寄存器。物理寄存器堆單元458與引退單元454重疊以示出可以用來實現(xiàn)寄存器重命名和亂序執(zhí)行的各種方式(例如,使用重新排序緩沖器和引退寄存器堆;使用將來的文件、歷史緩沖器和引退寄存器堆;使用寄存器映射和寄存器池等等)。引退單元454和物理寄存器堆單元458耦合到執(zhí)行群集460。執(zhí)行群集460包括一組一個或多個執(zhí)行單元462和一組一個或多個存儲器訪問單元464。執(zhí)行單元462可以對各種類型的數(shù)據(jù)(例如,標(biāo)量浮點、緊縮整數(shù)、緊縮浮點、向量整數(shù)、向量浮點)執(zhí)行各種操作(例如,移位、加法、減法、乘法)。盡管一些實施例可以包括專用于特定功能或功能組的數(shù)個執(zhí)行單元,但是其他實施例可以僅包括一個執(zhí)行單元或全部都執(zhí)行所有功能的多個執(zhí)行單元。調(diào)度器單元456、物理寄存器堆單元458以及執(zhí)行群集460示出為可能是復(fù)數(shù)個,因為某些實施例為某些類型的數(shù)據(jù)/操作創(chuàng)建單獨的流水線(例如,各自都具有其自身的調(diào)度器單元、物理寄存器堆單元和/或執(zhí)行群集的標(biāo)量整數(shù)流水線、標(biāo)量浮點/緊縮整數(shù)/緊縮浮點/向量整數(shù)/向量浮點流水線和/或存儲器訪問流水線——并且在單獨的存儲器訪問流水線的情況下,實現(xiàn)了其中僅此流水線的執(zhí)行群集具有存儲器訪問單元464的某些實施例)。還應(yīng)當(dāng)理解,在使用分開的流水線的情況下,這些流水線中的一個或多個可以是亂序發(fā)布/執(zhí)行的,而其余的是有序的。
存儲器訪問單元464的集合耦合到存儲器單元470,該存儲器單元包括耦合到數(shù)據(jù)高速緩存單元474的數(shù)據(jù)tlb單元472,其中數(shù)據(jù)高速緩存單元耦合到第2級(l2)高速緩存單元476。在一個示例性實施例中,存儲器訪問單元464可包括加載單元、存儲地址單元和存儲數(shù)據(jù)單元,其中的每一個均耦合至存儲器單元470中的數(shù)據(jù)tlb單元472。指令高速緩存單元434進一步耦合到存儲器單元470中的第2級(l2)高速緩存單元476。l2高速緩存單元476被耦合到一個或多個其他級的高速緩存,并最終被耦合到主存儲器。
作為示例,示例性寄存器重命名的、亂序發(fā)布/執(zhí)行核架構(gòu)可以如下實現(xiàn)流水線400:1)指令取出438執(zhí)行取出和長度解碼級402和404;2)解碼單元440執(zhí)行解碼級406;3)重命名/分配器單元452執(zhí)行分配級408和重命名級410;4)調(diào)度器單元456執(zhí)行調(diào)度級412;5)物理寄存器堆單元458和存儲器單元470執(zhí)行寄存器讀取/存儲器讀取級414;執(zhí)行群集460執(zhí)行執(zhí)行級416;6)存儲器單元470和物理寄存器堆單元458執(zhí)行寫回/存儲器寫入級418;7)各單元可牽涉到異常處理級422;以及8)引退單元454和物理寄存器堆單元458執(zhí)行提交級424。
核490可支持一個或多個指令集(例如,x86指令集(具有與較新版本一起添加的一些擴展);加利福尼亞州桑尼維爾市的mips技術(shù)公司的mips指令集;加利福尼州桑尼維爾市的arm控股的arm指令集(具有諸如neon等可選附加擴展)),其中包括本文中描述的各指令。在一個實施例中,核490包括用于支持緊縮數(shù)據(jù)指令集擴展(例如,avx1、avx2)的邏輯,進而允許由許多多媒體應(yīng)用使用的操作通過使用緊縮數(shù)據(jù)來執(zhí)行。
應(yīng)當(dāng)理解,核可以支持多線程操作(執(zhí)行兩個或更多個并行的操作或線程的集合),并且可以按各種方式來完成該多線程操作,各種方式包括時分多線程操作、同步多線程操作(其中,單個物理核為物理核正在同步進行多線程操作的多個線程中的每一個線程提供邏輯核)或其組合(例如,時分取出和解碼以及此后諸如利用
盡管在亂序執(zhí)行的上下文中描述了寄存器重命名,但是,應(yīng)當(dāng)理解,寄存器重命名可以用于有序架構(gòu)中。盡管所示出的處理器的實施例還包括分開的指令和數(shù)據(jù)高速緩存單元434/474以及共享l2高速緩存單元476,但替代實施例可以具有用于指令和數(shù)據(jù)兩者的單個內(nèi)部高速緩存,諸如例如第1級(l1)內(nèi)部高速緩存或多個級別的內(nèi)部高速緩存。在一些實施例中,系統(tǒng)可以包括內(nèi)部高速緩存以及在核和/或處理器外部的外部高速緩存的組合?;蛘撸扛咚倬彺娑伎梢栽诤撕?或處理器的外部。
圖5a-b示出更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的多個邏輯塊中的一個(包括相同類型和/或不同類型的其他核)。根據(jù)應(yīng)用,這些邏輯塊通過高帶寬的互連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與一些固定的功能邏輯、存儲器i/o接口和其它必要的i/o邏輯通信。
圖5a是根據(jù)本發(fā)明的實施例的單個處理器核以及它與管芯上互連網(wǎng)絡(luò)502的連接及其第2級(l2)高速緩存的本地子集504的框圖。在一個實施例中,指令解碼器500支持具有緊縮數(shù)據(jù)指令集擴展的x86指令集。l1高速緩存506允許對進入標(biāo)量和向量單元中的高速緩存存儲器的低等待時間訪問。盡管在一個實施例中(為了簡化設(shè)計),標(biāo)量單元508和向量單元510使用分開的寄存器集合(分別為標(biāo)量寄存器512和向量寄存器514),并且在這些寄存器之間轉(zhuǎn)移的數(shù)據(jù)被寫入到存儲器并隨后從第一級(l1)高速緩存506讀回,但是本發(fā)明的替代實施例可以使用不同的方法(例如,使用單個寄存器集合或包括允許數(shù)據(jù)在這兩個寄存器堆之間傳輸而無需被寫入和讀回的通信路徑)。
l2高速緩存的本地子集504是全局l2高速緩存的一部分,該全局l2高速緩存被劃分成多個分開的本地子集,即每個處理器核一個本地子集。每個處理器核具有到其自己的l2高速緩存的本地子集504的直接訪問路徑。被處理器核讀出的數(shù)據(jù)被存儲在其l2高速緩存子集504中,并且可以與其它處理器核訪問其自己的本地l2高速緩存子集并行地被快速訪問。被處理器核寫入的數(shù)據(jù)被存儲在其自己的l2高速緩存子集504中,并在必要的情況下從其它子集轉(zhuǎn)儲清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如處理器核、l2高速緩存和其它邏輯塊之類的代理在芯片內(nèi)彼此通信。每個環(huán)形數(shù)據(jù)路徑為每個方向1012位寬。
圖5b是根據(jù)本發(fā)明的實施例的圖5a中的處理器核的一部分的展開圖。圖5b包括l1高速緩存504的l1數(shù)據(jù)高速緩存506a部分,以及關(guān)于向量單元510和向量寄存器514的更多細節(jié)。具體地說,向量單元510是16寬向量處理單元(vpu)(見16寬alu528),該單元執(zhí)行整型、單精度浮點以及雙精度浮點指令中的一個或多個。該vpu通過混合單元520支持對寄存器輸入的混合、通過數(shù)值轉(zhuǎn)換單元522a-b支持數(shù)值轉(zhuǎn)換、并通過復(fù)制單元524支持對存儲器輸入的復(fù)制。寫掩碼寄存器526允許斷言所得的向量寫入。
圖6是根據(jù)本發(fā)明的實施例的可具有多于一個的核、可具有集成存儲器控制器、以及可具有集成圖形器件的處理器600的框圖。圖6中的實線框示出具有單一核602a、系統(tǒng)代理610、一組一個或多個總線控制器單元616的處理器600,而任選增加的虛線框示出具有多個核602a-n、系統(tǒng)代理單元610中的一組一個或多個集成存儲器控制器單元614、以及專用邏輯608的替換處理器600。
因此,處理器600的不同實現(xiàn)可包括:1)cpu,其中專用邏輯608是集成圖形和/或科學(xué)(吞吐量)邏輯(其可包括一個或多個核),并且核602a-n是一個或多個通用核(例如,通用的有序核、通用的亂序核、這兩者的組合);2)協(xié)處理器,其中核602a-n是旨在主要用于圖形和/或科學(xué)(吞吐量)的多個專用核;以及3)協(xié)處理器,其中核602a-n是多個通用有序核。因此,處理器600可以是通用處理器、協(xié)處理器或?qū)S锰幚砥鳎T如例如網(wǎng)絡(luò)或通信處理器、緊縮引擎、圖形處理器、gpgpu(通用圖形處理單元)、高吞吐量的集成眾核(mic)協(xié)處理器(包括30個或更多核)、或嵌入式處理器等。該處理器可以被實現(xiàn)在一個或多個芯片上。處理器600可以是一個或多個襯底的一部分,和/或可以使用諸如例如bicmos、cmos或nmos等的多個工藝技術(shù)中的任何一個技術(shù)將該處理器實現(xiàn)在一個或多個襯底上。
存儲器層次結(jié)構(gòu)包括核內(nèi)的一個或多個層級的高速緩存、一組或一個或多個共享高速緩存單元606以及耦合到集成存儲器控制器單元614的集合的外部存儲器(未示出)。共享高速緩存單元606的集合可以包括一個或多個中級高速緩存,諸如,第2級(l2)、第3級(l3)、第4級(l4),或其他層級的高速緩存,末級高速緩存(llc),和/或上述各項的組合。盡管在一個實施例中,基于環(huán)的互連單元612將集成圖形邏輯608、共享高速緩存單元606的集合以及系統(tǒng)代理單元610/集成存儲器控制器單元614互連,但替代實施例可使用任何數(shù)量的公知技術(shù)來將這些單元互連。在一個實施例中,可以維護一個或多個高速緩存單元606和核602-a-n之間的一致性。
在一些實施例中,核602a-n中的一個或多個能夠?qū)崿F(xiàn)多線程。系統(tǒng)代理610包括協(xié)調(diào)和操作核602a-n的那些組件。系統(tǒng)代理單元610可包括例如功率控制單元(pcu)和顯示單元。pcu可以是或可包括用于調(diào)節(jié)核602a-n和集成圖形邏輯608的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動一個或多個從外部連接的顯示器。
核602a-n在架構(gòu)指令集方面可以是同構(gòu)的或異構(gòu)的;即,這些核602a-n中的兩個或更多個核可能能夠執(zhí)行相同的指令集,而其它核可能能夠執(zhí)行該指令集的僅僅子集或不同的指令集。
圖7-10是示例性計算機架構(gòu)的框圖。本領(lǐng)域已知的對膝上型設(shè)備、臺式機、手持pc、個人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機、嵌入式處理器、數(shù)字信號處理器(dsp)、圖形設(shè)備、視頻游戲設(shè)備、機頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備以及各種其它電子設(shè)備的其它系統(tǒng)設(shè)計和配置也是合適的。一般地,能夠包含本文中所公開的處理器和/或其它執(zhí)行邏輯的多個系統(tǒng)或電子設(shè)備一般都是合適的。
現(xiàn)在參考圖7,所示出的是根據(jù)本發(fā)明的一個實施例的系統(tǒng)700的框圖。系統(tǒng)700可以包括一個或多個處理器710、715,這些處理器耦合到控制器中樞720。在一個實施例中,控制器中樞720包括圖形存儲器控制器中樞(gmch)790和輸入/輸出中樞(ioh)750(其可以在分開的芯片上);gmch790包括存儲器和圖形控制器,存儲器740和協(xié)處理器745耦合到該存儲器和圖形控制器;ioh750將輸入/輸出(i/o)設(shè)備760耦合到gmch790?;蛘撸鎯ζ骱蛨D形控制器中的一個或兩者可以被集成在處理器內(nèi)(如本文中所描述的),存儲器740和協(xié)處理器745直接耦合到處理器710以及控制器中樞720,控制器中樞720與ioh750處于單個芯片中。
在圖7中以虛線表示附加的處理器715的可選的性質(zhì)。每個處理器710、715可包括本文中描述的處理核中的一個或多個,并且可以是處理器600的某一版本。
存儲器740可以是例如動態(tài)隨機存取存儲器(dram)、相變存儲器(pcm)或這兩者的組合。對于至少一個實施例,控制器中樞720經(jīng)由諸如前端總線(fsb)之類的多分支總線、諸如快速通道互連(qpi)之類的點對點接口、或者類似的連接795與處理器710、715進行通信。
在一個實施例中,協(xié)處理器745是專用處理器,諸如例如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、緊縮引擎、圖形處理器、gpgpu、或嵌入式處理器等等。在一個實施例中,控制器中樞720可以包括集成圖形加速器。
在物理資源710、715之間會存在包括架構(gòu)、微架構(gòu)、熱、功耗特性等的一系列品質(zhì)度量方面的各種差異。
在一個實施例中,處理器710執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。協(xié)處理器指令可嵌入在這些指令中。處理器710將這些協(xié)處理器指令識別為應(yīng)當(dāng)由附連的協(xié)處理器745執(zhí)行的類型。因此,處理器710在協(xié)處理器總線或者其它互連上將這些協(xié)處理器指令(或者表示協(xié)處理器指令的控制信號)發(fā)布到協(xié)處理器745。協(xié)處理器745接受并執(zhí)行所接收的協(xié)處理器指令。
現(xiàn)在參見圖8,所示是根據(jù)本發(fā)明的實施例的第一更具體的示例性系統(tǒng)800的框圖。如圖8所示,多處理器系統(tǒng)800是點對點互連系統(tǒng),并且包括經(jīng)由點對點互連850耦合的第一處理器870和第二處理器880。處理器870和880中的每一個都可以是處理器600的某一版本。在本發(fā)明的一個實施例中,處理器870和880分別是處理器710和715,而協(xié)處理器838是協(xié)處理器745。在另一實施例中,處理器870和880分別是處理器710和協(xié)處理器745。
處理器870和880被示為分別包括集成存儲器控制器(imc)單元872和882。處理器870還包括點對點(p-p)接口876和878作為其總線控制器單元的部分;類似地,第二處理器880包括p-p接口886和888。處理器870、880可以經(jīng)由使用點對點(p-p)接口電路878、888的p-p接口850來交換信息。如圖8所示,imc872和882將處理器耦合至相應(yīng)的存儲器,即,存儲器832和存儲器834,它們可以是本地連接到相應(yīng)的處理器的主存儲器的部分。
處理器870、880可各自經(jīng)由使用點對點接口電路876、894、886、898的各個p-p接口852、854與芯片組890交換信息。芯片組890可任選地經(jīng)由高性能接口839與協(xié)處理器838交換信息。在一個實施例中,協(xié)處理器838是專用處理器,諸如例如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、緊縮引擎、圖形處理器、gpgpu、或嵌入式處理器等等。
共享高速緩存(未示出)可以被包括在任一處理器之內(nèi),或被包括在兩個處理器外部但仍經(jīng)由p-p互連與這些處理器連接,使得如果將某處理器置于低功率模式時,可將任一處理器或兩個處理器的本地高速緩存信息存儲在該共享高速緩存中。
芯片組890可經(jīng)由接口896耦合至第一總線816。在一個實施例中,第一總線816可以是外圍組件互連(pci)總線,或諸如pciexpress總線或其它第三代i/o互連總線之類的總線,但本發(fā)明的范圍并不受此限制。
如圖8所示,各種i/o設(shè)備814可以連同總線橋818被耦合至第一總線816,總線橋818將第一總線816耦合至第二總線820。在一個實施例中,諸如協(xié)處理器、高吞吐量mic處理器、gpgpu的處理器、加速器(諸如例如圖形加速器或數(shù)字信號處理(dsp)單元)、現(xiàn)場可編程門陣列或任何其它處理器的一個或多個附加處理器815耦合到第一總線816。在一個實施例中,第二總線820可以是低引腳數(shù)(lpc)總線。在一個實施例中,各種設(shè)備可以耦合到第二總線820,各種設(shè)備包括例如,鍵盤和/或鼠標(biāo)822、通信設(shè)備827以及存儲單元828,存儲單元828諸如,可包括指令/代碼和數(shù)據(jù)830的磁盤驅(qū)動器或其他大容量存儲設(shè)備。此外,音頻i/o824可以被耦合至第二總線820。注意,其他架構(gòu)是可能的。例如,系統(tǒng)可實現(xiàn)多分支總線或者其他此類架構(gòu),而不是圖8中的點對點架構(gòu)。
現(xiàn)在參考圖9,所示為根據(jù)本發(fā)明的實施例的更具體的第二示例性系統(tǒng)900的框圖。圖8和9中的類似元件使用類似附圖標(biāo)記,且在圖9中省略了圖8的某些方面以避免混淆圖9的其它方面。
圖9示出處理器870、880可以分別包括集成存儲器和i/o控制邏輯(“cl”)872和882。因此,cl872、882包括集成存儲器控制器單元并包括i/o控制邏輯。圖9示出不僅存儲器832、834耦合到cl872、882,而且i/o設(shè)備914也耦合到控制邏輯872、882。傳統(tǒng)i/o設(shè)備915被耦合至芯片組890。
現(xiàn)在參照圖10,所示出的是根據(jù)本發(fā)明的實施例的soc1000的框圖。圖6中相似的部件具有同樣的附圖標(biāo)記。另外,虛線框是更先進的soc的可選特征。在圖10中,互連單元1002被耦合至:應(yīng)用處理器1010,該應(yīng)用處理器包括一個或多個核202a-n的集合以及共享高速緩存單元606;系統(tǒng)代理單元610;總線控制器單元616;集成存儲器控制器單元614;一組或一個或多個協(xié)處理器1020,其可包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機存取存儲器(sram)單元1030;直接存儲器存取(dma)單元1032;以及用于耦合至一個或多個外部顯示器的顯示單元1040。在一個實施例中,協(xié)處理器1020包括專用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、緊縮引擎、gpgpu、高吞吐量mic處理器、或嵌入式處理器等等。
本文公開的機制的各實施例可以被實現(xiàn)在硬件、軟件、固件或這些實現(xiàn)方法的組合中。本發(fā)明的實施例可實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序或程序代碼,該可編程系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備以及至少一個輸出設(shè)備。
可將程序代碼(諸如圖8中示出的代碼830)應(yīng)用于輸入指令,以執(zhí)行本文描述的各功能并生成輸出信息??梢园匆阎绞綄⑤敵鲂畔?yīng)用于一個或多個輸出設(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)以及磁光盤;半導(dǎo)體器件,例如只讀存儲器(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)換至目標(biāo)指令集。例如,指令轉(zhuǎn)換器可以變換(例如使用靜態(tài)二進制變換、包括動態(tài)編譯的動態(tài)二進制變換)、變形、仿真或以其它方式將指令轉(zhuǎn)換成將由核來處理的一個或多個其它指令。指令轉(zhuǎn)換器可以用軟件、硬件、固件、或其組合實現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或者部分在處理器上且部分在處理器外。
圖11是根據(jù)本發(fā)明的各實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進制指令轉(zhuǎn)換成目標(biāo)指令集中的二進制指令的框圖。在所示的實施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但作為替代,該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來實現(xiàn)。圖11示出可以使用x86編譯器1104來編譯高級語言1102形式的程序以生成可由具有至少一個x86指令集核的處理器1116原生地執(zhí)行的x86二進制代碼1106。具有至少一個x86指令集核的處理器1116表示能通過兼容地執(zhí)行或以其他方式處理以下內(nèi)容來執(zhí)行與具有至少一個x86指令集核的英特爾處理器基本相同的功能的任何處理器:(1)英特爾x86指令集核的指令集的本質(zhì)部分,或(2)目標(biāo)為在具有至少一個x86指令集核的英特爾處理器上運行以實現(xiàn)與具有至少一個x86指令集核的英特爾處理器基本相同的結(jié)果的應(yīng)用或其他軟件的目標(biāo)代碼版本。x86編譯器1104表示可用于生成x86二進制代碼1106(例如,目標(biāo)代碼)的編譯器,該x86二進制代碼1106能夠通過附加的鏈接處理或無需附加的鏈接處理而在具有至少一個x86指令集核的處理器1116上被執(zhí)行。類似地,圖11示出可以使用替代的指令集編譯器1108來編譯高級語言1102的程序以生成可由不具有至少一個x86指令集核的處理器1114(例如,具有執(zhí)行加利福尼亞州桑尼維爾市的mips技術(shù)公司的mips指令集和/或執(zhí)行加利福尼州桑尼維爾市的arm控股公司的arm指令集的核的處理器)原生地執(zhí)行的替代的指令集二進制代碼1110。指令轉(zhuǎn)換器1112用于將x86二進制代碼1106轉(zhuǎn)換成可以由不具有x86指令集核的處理器1114原生地執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替代的指令集二進制代碼1110相同,因為能夠這樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將完成通用操作,并且將由來自替代指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器1112表示軟件、固件、硬件或它們的組合,這些軟件、固件、硬件或它們的組合通過仿真、模擬或任何其他過程允許不具有x86指令集處理器或核的處理器或其他電子設(shè)備執(zhí)行x86二進制代碼1106。
用于將掩碼擴展為掩碼值向量的方法和裝置
下文描述了將掩碼值擴展為掩碼值向量的掩碼擴展指令。在一個特定實施例中,掩碼擴展指令利用目的地掩碼寄存器來存儲結(jié)果、利用源掩碼寄存器來存儲源掩碼值、利用索引來標(biāo)識來自源掩碼寄存器的會被復(fù)制到目的地掩碼寄存器的至少一個位、以及利用值來指示目的地掩碼寄存器中會被填充的位位置的數(shù)量("numbits")。下文描述的一個實施例采取的形式為:maskexpanddst_mask_reg,src_mask_reg,numbits,index.
可以通過使用例如向量比較指令將來自條件語句的值存儲在掩碼寄存器中。在這種情形下,每個掩碼位表示條件值(位0或1分別指示假和真)。在這些條件框內(nèi)存在加載和存儲。本文中描述的掩碼擴展到向量掩碼寄存器允許將掩碼位擴展到單獨的掩碼寄存器,單獨的掩碼寄存器然后可以直接用于條件的、經(jīng)掩碼的加載和存儲。因此,本文中所描述的本發(fā)明的實施例可以用于增加條件加載和存儲的速度,而不是測試加載/存儲的每一位(其往往減緩執(zhí)行)。
如圖12所示,在其上可以實現(xiàn)本發(fā)明的實施例的示例性處理器1255包括通用寄存器(gpr)1205的集合、向量寄存器1206的集合以及掩碼寄存器1207的集合。在一個實施例中,將多個向量數(shù)據(jù)元素緊縮到每個向量寄存器1206中,每個向量寄存器1206可以具有512位寬度以用于存儲兩個256位值、四個128位值、八個64位值、十六個32位值等等。然而,本發(fā)明的基本原理不限于任何具體大小/類型的向量數(shù)據(jù)。在一個實施例中,掩碼寄存器1207包括八個64位操作數(shù)掩碼寄存器,用于對存儲在向量寄存器1206中的值執(zhí)行位掩碼操作(例如,實現(xiàn)為上文所描述的掩碼寄存器k0-k7)。然而,本發(fā)明的基本原理不限于任何具體的掩碼寄存器大小/類型。
為簡單起見,在圖12中示出單個處理器核(“核0”)的細節(jié)。然而,將會理解,圖12中所示的每個核都可具有與核0相同的邏輯集合。例如,每個核可包括根據(jù)指定的高速緩存管理策略的用于高速緩存指令和數(shù)據(jù)的專用一級(l1)高速緩存1212和二級(l2)高速緩存1211。l1高速緩存1212包括用于存儲指令的單獨的指令高速緩存1220和用于存儲數(shù)據(jù)的單獨的數(shù)據(jù)高速緩存1221。存儲在各種處理器高速緩存之內(nèi)的指令和數(shù)據(jù)以可以是固定尺寸(如,64字節(jié)、128字節(jié)、512字節(jié)長度的)高速緩存行的粒度被管理。該示例性實施例的每個核具有:從主存儲器1200和/或共享的三級(l3)高速緩存1216取出指令的指令取出單元1210;用于對指令進行解碼(例如,將程序指令解碼成微操作或“uops”)的解碼單元1220;用于執(zhí)行指令的執(zhí)行單元1240;以及用于引退指令和寫回結(jié)果的寫回單元1250。
指令取出單元1210包括各種公知的組件,包括:用于存儲要從存儲器1200(或高速緩存中的一個)取出的下一指令的地址的下一指令指針1203;用于存儲最近使用的虛擬向物理指令地址的映射以改善地址轉(zhuǎn)換速度的指令轉(zhuǎn)換后備緩沖器(itlb)1204;用于推測地預(yù)測指令分支地址的分支預(yù)測單元1202;以及用于存儲分支地址和目標(biāo)地址的分支目標(biāo)緩沖器(btb)1201。一旦被取出,隨后指令被流式地傳送到指令流水線的其余的級,包括,解碼單元1230、執(zhí)行單元1240和寫回單元1250。本領(lǐng)域普通技術(shù)人員已很好地理解這些單元中的每一個的結(jié)構(gòu)和功能,將不在此詳細對其進行描述以避免使本發(fā)明的不同實施例的相關(guān)方面不清楚。
在一個實施例中,處理器1255的每個核包括用于執(zhí)行本文中所描述的掩碼擴展操作的掩碼擴展邏輯。具體而言,在一個實施例中,解碼單元1230包括用于解碼本文中所描述的掩碼擴展指令(例如,在一個實施例中解碼為微操作的序列)的掩碼擴展解碼邏輯1231,并且執(zhí)行單元1240包括用于執(zhí)行指令的掩碼擴展執(zhí)行邏輯1241。
圖13示出包括用于存儲源掩碼數(shù)據(jù)的源掩碼寄存器1301和用于存儲掩碼擴展操作的結(jié)果的目的地掩碼寄存器1302的示例性實施例。為簡單起見,在源掩碼寄存器1301和目的地掩碼寄存器1302中只示出了8位。然而,將理解可以使用任意數(shù)量的位的源和目的地掩碼寄存器來實現(xiàn)本文中所描述的本發(fā)明的實施例。例如,在一個實施例中,每個掩碼寄存器是64位(例如,諸如上文所描述的k0-k7寄存器)。
在一個實施例中,響應(yīng)于索引值1304和numbits值1303,掩碼擴展邏輯1300將來自源掩碼寄存器1301的位復(fù)制到目的地掩碼寄存器1302中的指定數(shù)量的位位置。具體而言,索引值1304標(biāo)識來自源掩碼寄存器的會被復(fù)制到目的地掩碼寄存器的位(在示例中為位b3),而numbits值指示目的地掩碼寄存器中會被填充的位位置的數(shù)量(在示例中為四個位置)。在一個實施例中,從其他寄存器(例如,諸如圖12中示出的通用寄存器1205、向量寄存器1206或其他掩碼寄存器1207)讀取索引值1304和numbits值1303。
在一個實施例中,掩碼擴展邏輯1300包括一個或多個復(fù)用器,一個或多個復(fù)用器能夠從源掩碼寄存器1301中的任意位位置選擇掩碼位并且將掩碼位存儲在目的地掩碼寄存器1302的任意數(shù)量的位位置中。在一個實施例中,一個或多個復(fù)用器由索引值1304(用于選擇源掩碼寄存器中的位位置)和numbits值1303(用于選擇目的地掩碼寄存器中的位位置)兩者控制。
在圖13中示出的具體示例中,索引設(shè)為3,標(biāo)識來自源掩碼寄存器1301的位b3,而numbits設(shè)為4,指示目的地掩碼寄存器1302的前四位會被位b3的值填充。在一個實施例中,以此方式填充目的地掩碼寄存器1302的最低有效位。
圖14示出另一示例,其中索引設(shè)為1,標(biāo)識來自源掩碼寄存器1301的位b1,而numbits設(shè)為5,指示目的地掩碼寄存器1302的前五位會被位b3的值填充(即,前五個最低有效位)。
在一個實施例中,掩碼擴展指令采取下列形式,指定源掩碼寄存器、目的地掩碼寄存器、numbits和索引:
maskexpanddst_mask_reg,src_mask_reg,numbits,index
假設(shè),作為示例,src_mask_reg是k1掩碼寄存器并且存儲值00001011:
如果maskexpandk2,k1,4,0,則目的地掩碼寄存器k2將具有4個1(即,00001111),因為索引指向源掩碼寄存器的位0,位0包括1的值,并且numbits設(shè)為等于4。
如果maskexpandk3,k1,5,1,則目的地掩碼寄存器k3將具有5個1(即,00011111),因為索引指向源掩碼寄存器的位1,位1包括1的值,并且numbits設(shè)為等于5。
如果maskexpandk4,k1,4,2,則目的地掩碼寄存器k4將具有全部是0(即,0000000),因為索引指向源掩碼寄存器的位2,位2包括0的值。因此,可以看出當(dāng)讀取自源掩碼寄存器的位值為0時,numbits是不相關(guān)的。
在一個實施例中,當(dāng)掩碼位已經(jīng)被復(fù)制到目的地掩碼寄存器內(nèi)的位位置時,被擴展的掩碼位然后可以用于改善被執(zhí)行的程序代碼的性能,諸如條件加載和存儲,或依賴于使用掩碼位的條件測試的其他指令序列。下文提供了被擴展的掩碼位可以怎樣用于改善性能的具體示例。
在圖15中示出根據(jù)本發(fā)明的一個實施例的方法。該方法可在上述架構(gòu)的情境內(nèi)執(zhí)行,但并不限于任何特定系統(tǒng)架構(gòu)。
在1501處,從系統(tǒng)存儲器取出或從高速緩存(例如,l1、l2或l3高速緩存)讀出掩碼擴展指令。在1502處,將源輸入掩碼數(shù)據(jù)存儲在源掩碼寄存器中。在1503處,讀取索引以標(biāo)識來自源掩碼寄存器的掩碼位,并且在1504處讀取numbits值以確定目的地掩碼寄存器中的會被填充的位位置的數(shù)量。在1505處,將索引標(biāo)識的掩碼位復(fù)制到目的地掩碼寄存器等于numbits的值的數(shù)量的次數(shù)。最后,在1506處,被擴展的掩碼位用于改善需要條件測試的后續(xù)指令序列的性能。下文提供了這種方法的示例。
考慮應(yīng)用使用情形,對雙精度數(shù)據(jù)集操作的來自hpcapp的c代碼序列的快照:
對于標(biāo)量循環(huán)(當(dāng)未被向量化時),如果條件"if(delr2>=lowest_efs_u)"為真,則加載數(shù)組"f_tbl",否則加載數(shù)組"eed_cub"。
對于向量化的代碼,我們得到2個掩碼;一個用于if條件(>=),而另一個用于else條件(<),其中8個掩碼位中的每一個指示是if為真還是else為真。
在if條件中加載f_tb1的當(dāng)前解決方案(只示出關(guān)于擴展代碼的相關(guān)代碼):
s1:測試每一位以進行對f_tb1的加載:
s2:因此,只有在條件掩碼寄存器中的對應(yīng)位即k_delr2gteqlowest_efs_u是1時,使用來自if條件的掩碼擴展在if條件中對f_tb1的8個掩碼加載將是成功的。
s3:用于從else條件加載eed_cub的類似的代碼
在提出的新的expandmask指令中,步驟s1將更高效,產(chǎn)生較少指令,消除所有條件測試并且因此是更快的代碼:
s1_new:因為我們從f_tbl加載4個連續(xù)元素,因此我們使用4作為numbits
s2_new:因此新的expandmask指令消除對來自if條件的每個掩碼位的所有條件測試,消除許多代碼,包括加載常數(shù)。
s3_new:用于從else條件加載eed_cub的類似的代碼
在前述的說明書中,已經(jīng)參考本發(fā)明的特定示例性實施例描述了本發(fā)明的多個實施例。然而,顯然可對這些實施例作出各種修改和改變,而不背離如所附權(quán)利要求所述的本發(fā)明的更寬泛精神和范圍。因此,說明書和附圖應(yīng)被認為是說明性而非限制性意義。
本發(fā)明的多個實施例可包括上述各個步驟??稍诳捎糜谑雇ㄓ没?qū)S锰幚砥鲌?zhí)行這些步驟的機器可執(zhí)行指令中具體化這些步驟?;蛘撸捎砂糜趫?zhí)行這些步驟的硬連線邏輯的專用硬件組件,或可由被編程的計算機組件和自定義硬件組件的任何組合來執(zhí)行這些步驟。
如本文中所描述的,指令可以指硬件的具體配置,例如,配置成用于執(zhí)行某些操作或具有預(yù)定功能的專用集成電路(asic),或者被存儲在被具體化在非暫態(tài)計算機可讀介質(zhì)中的存儲器中的軟件指令。因而,附圖中示出的技術(shù)可以使用存儲在一個或多個電子設(shè)備(例如,終端站、網(wǎng)絡(luò)元件等等)并在其上執(zhí)行的代碼和數(shù)據(jù)來實現(xiàn)。此類電子設(shè)備使用諸如非暫態(tài)計算機機器可讀存儲介質(zhì)(例如,磁盤;光盤;隨機存取存儲器;只讀存儲器;閃存設(shè)備;相變存儲器)之類的計算機機器可讀介質(zhì)和暫態(tài)計算機機器可讀通信介質(zhì)(例如,電、光、聲或其他形式的傳播信號——諸如載波、紅外信號、數(shù)字信號等)來(內(nèi)部地和/或在網(wǎng)絡(luò)上與其他電子設(shè)備之間進行)存儲和傳遞代碼和數(shù)據(jù)。另外,此類電子設(shè)備一般包括耦合至一個或多個其他組件的一個或多個處理器的集合,所述一個或多個其他組件例如是一個或多個存儲設(shè)備(非暫態(tài)機器可讀存儲介質(zhì))、用戶輸入/輸出設(shè)備(例如,鍵盤、觸摸屏和/或顯示器)以及網(wǎng)絡(luò)連接。該組處理器和其他組件的耦合一般是通過一個或多個總線和橋(也稱為總線控制器)實現(xiàn)的。存儲設(shè)備和攜帶網(wǎng)絡(luò)話務(wù)的信號分別表示一個或多個機器可讀存儲介質(zhì)和機器可讀通信介質(zhì)。因此,給定電子設(shè)備的存儲設(shè)備通常存儲用于在該電子設(shè)備的一個或多個處理器的集合上執(zhí)行的代碼和/或數(shù)據(jù)。當(dāng)然,本發(fā)明的實施例的一個或多個部分可使用軟件、固件和/或硬件的不同組合來實現(xiàn)。貫穿此具體實施方式,為了進行解釋,陳述了眾多具體細節(jié)以提供對本發(fā)明的透徹理解。然而,對本領(lǐng)域技術(shù)人員顯而易見的是,沒有這些具體細節(jié)中的一些細節(jié)也可實施本發(fā)明。在某些實例中,并不詳細描述公知的結(jié)構(gòu)和功能,以免使本發(fā)明的主題模糊。因此,本發(fā)明的范圍和精神應(yīng)根據(jù)所附權(quán)利要求書來確定。