欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于對向量元素集合執(zhí)行約減操作的方法和設(shè)備與流程

文檔序號:11635129閱讀:293來源:國知局
用于對向量元素集合執(zhí)行約減操作的方法和設(shè)備與流程

背景。

本發(fā)明一般涉及計算機處理器領(lǐng)域。更具體地,本發(fā)明涉及用于對向量元素集合執(zhí)行約減(reduction)操作的方法和設(shè)備。



背景技術(shù):

指令集或指令集架構(gòu)(isa)是與編程有關(guān)的計算機架構(gòu)的一部分,包括本機數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲器架構(gòu)、中斷和異常處置以及外部輸入和輸出(i/o)。應(yīng)當(dāng)注意到,術(shù)語“指令”本文中一般指作為提供給處理器供執(zhí)行的指令的宏指令,與作為處理器的解碼器解碼宏指令的結(jié)果的微指令或微操作相對。微指令或微操作可以配置成命令處理器上的執(zhí)行單元執(zhí)行操作以實現(xiàn)與宏指令關(guān)聯(lián)的邏輯。

isa與微架構(gòu)是不同的,微架構(gòu)是用于實現(xiàn)指令集的處理器設(shè)計技術(shù)的集合。具有不同微架構(gòu)的處理器可以共享共同指令集。例如,intel?pentium4處理器、intel?core?處理器和來自sunnyvaleca的advancedmicrodevices,inc.的處理器實現(xiàn)幾乎相同版本的x86指令集(具有已添加到較新版本的一些擴展),但是具有不同的內(nèi)部設(shè)計。例如,可以使用眾所周知的技術(shù)在不同的微架構(gòu)中以不同的方式實現(xiàn)isa的相同寄存器架構(gòu),包括專用物理寄存器、使用寄存器重命名機制(例如,使用寄存器別名表(rat)、重排序緩沖器(rob)和引退寄存器堆)的一個或多個動態(tài)分配的物理寄存器。除非另有說明,否則短語寄存器架構(gòu)、寄存器堆和寄存器本文中用于指軟件/編程器可見的東西以及方式(指令以所述方式指定寄存器)。在要求區(qū)分的地方,形容詞“邏輯”、“架構(gòu)”或“軟件可見”將用于指示寄存器架構(gòu)中的寄存器/堆,而不同的形容詞將用于指定給定微架構(gòu)(例如,物理寄存器、重排序緩沖器、引退寄存器、寄存器池)中的寄存器。

指令集包括一個或多個指令格式。給定的指令格式定義各種字段(位數(shù)、位的位置),以指定(除了其它事情)要執(zhí)行的操作和要在其上執(zhí)行該操作的(一個或多個)操作數(shù)。通過指令模板(或子格式)的定義進一步分解一些指令格式。例如,給定指令格式的指令模板可以被定義為具有指令格式的字段的不同子集(所包含的字段通常按相同的順序,但是至少有一些具有不同的位的位置,因為包含有較少的字段)和/或被定義為具有不同解釋的給定字段。給定的指令用給定的指令格式(并且如果定義,以該指令格式的給定一個指令模板)來表達并指定操作和操作數(shù)。指令流是特定的指令序列,其中序列中的每個指令是以指令格式(并且如果定義,該指令格式的指定模板的給定指令模板)的指令的出現(xiàn)。

附圖說明

可以從結(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示出根據(jù)本發(fā)明的一個實施例的可以如何執(zhí)行沖突檢測;

圖13示出用于對值向量寄存器內(nèi)的數(shù)據(jù)元素執(zhí)行約減操作的本發(fā)明的一個實施例;

圖14示出如何使用索引值檢測沖突以及如何存儲在向量寄存器內(nèi)的附加細節(jié);

圖15示出根據(jù)本發(fā)明的一個實施例的與約減操作的執(zhí)行有關(guān)的附加細節(jié);以及

圖16示出根據(jù)本發(fā)明的一個實施例的方法。

具體實施方式

在下面的描述中,為了解釋的目的,闡述了許多特定細節(jié),以便提供對下面描述的本發(fā)明的實施例的透徹理解。然而,對于本領(lǐng)域技術(shù)人員將顯而易見的是,可以在沒有這些特定細節(jié)中的一些的情況下實踐本發(fā)明的實施例。在其它實例中,以框圖的形式示出眾所周知的結(jié)構(gòu)和裝置,以避免模糊本發(fā)明實施例的基礎(chǔ)原理。

示范處理器架構(gòu)和數(shù)據(jù)類型

指令集包括一個或多個指令格式。給定指令格式定義各種字段(位的數(shù)量、位的位置),以指定(除了其它事情)要執(zhí)行的操作(操作碼)和(一個或多個)操作數(shù)(要在其上執(zhí)行該操作)。通過指令模板(或子格式)的定義進一步分解一些指令格式。例如,給定指令格式的指令模板可定義成具有指令格式的字段的不同子集(包含的字段通常按相同順序,但是至少一些字段具有不同的位位置,因為包含有較少字段)和/或定義成具有不同地解釋的給定字段。因此,isa的每個指令用給定指令格式(并且如果定義,以該指令格式的給定一個指令模板)來表達,并且isa的每個指令包括用于指定操作和操作數(shù)的字段。例如,示范add指令具有特定操作碼和指令格式,該指令格式包括用于指定該操作碼的操作碼字段和用于選擇操作數(shù)的操作數(shù)字段(源1/目的地和源2);并且此add指令在指令流中出現(xiàn)將在選擇特定操作數(shù)的操作數(shù)字段中具有特定內(nèi)容。稱為高級向量擴展(avx)(avx1和avx2)并使用向量擴展(vex)編碼方案的simd擴展集合已經(jīng)、已經(jīng)發(fā)行和/或出版(例如,參見2011年10月的intel?64andia-32architecturessoftwaredevelopersmanual;以及參見2011年6月的intel?advancedvectorextensionsprogrammingreference)。

示范指令格式

本文中描述的(一個或多個)指令的實施例可以用不同的格式實施。另外,下文詳述示范系統(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ā)明的實施例:具有32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或大小)的64字節(jié)向量操作數(shù)長度(或大?。ú⑶乙虼?,64字節(jié)向量由16個雙字大小的元素或備選地由8個四字大小的元素組成);具有16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大?。┑?4字節(jié)向量操作數(shù)長度(或大小);具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大?。┑?2字節(jié)向量操作數(shù)長度(或大?。?;以及具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大?。┑?6字節(jié)向量操作數(shù)長度(或大?。粋溥x實施例可支持具有更大、更小或不同數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)的更大、更小和/或不同的向量操作數(shù)大?。ɡ纾?56字節(jié)向量操作數(shù))。

圖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)識符值)唯一地識別向量友好指令格式、以及因此處于向量友好指令格式的指令在指令流中的出現(xiàn)。因此,在對于只具有通用向量友好指令格式的指令集而言不需要此字段的意義上,此字段是可選的。

基本操作字段142-它的內(nèi)容區(qū)分不同的基本操作。

寄存器索引字段144-如果源和目的地操作數(shù)在寄存器或存儲器中,則此字段的內(nèi)容直接或通過地址生成指定源和目的地操作數(shù)的位置。它們包括充足數(shù)量的位以從p×q(例如,32×512、16×128、32×1024、64×1024)寄存器堆中選擇n個寄存器。盡管在一個實施例中,n可以是多達三個源和一個目的地寄存器,但是備選實施例可支持更多或更少的源和目的地寄存器(例如,可支持多達兩個源,其中這些源之一還充當(dāng)目的地;可支持多達三個源,其中這些源之一還充當(dāng)目的地;可支持多達兩個源和一個目的地)。

修改符字段146-它的內(nèi)容區(qū)分處于指定存儲器訪問的通用向量指令格式的指令的出現(xiàn)與不指定存儲器訪問的通用向量指令格式的指令的出現(xiàn);即,在非存儲器訪問105指令模板和存儲器訪問120指令模板之間。存儲器訪問操作對存儲器層級進行讀和/或?qū)懀ㄔ谝恍┣闆r下,使用寄存器中的值指定源和/或目的地地址),而非存儲器訪問操作不這樣做(例如,源和目的地是寄存器)。盡管在一個實施例中,此字段也在三種不同方法之間選擇以便執(zhí)行存儲器地址計算,但是備選實施例可支持更多、更少或不同的方法來執(zhí)行存儲器地址計算。

擴增操作字段150-它的內(nèi)容區(qū)分除了基本操作之外各種不同操作中的哪個操作還要被執(zhí)行。此字段是上下文特定的。在本發(fā)明的一個實施例中,此字段劃分成類字段168、α字段152和β字段154。擴增操作字段150允許在單個指令而不是在2、3或4個指令中執(zhí)行共同操作群組。

縮放字段160-它的內(nèi)容允許對索引字段的內(nèi)容進行縮放以便用于存儲器地址生成(例如,用于使用2縮放×索引+基本(2scale*index+base)的地址生成)。

位移字段162a-它的內(nèi)容用作存儲器地址生成的一部分(例如,用于使用2縮放×索引+基本+位移(2scale*index+base+displacement)的地址生成)。

位移因子字段162b(注意,位移字段162a直接并置在位移因子字段162b上指示一個或另一個被使用)-它的內(nèi)容用作地址生成的一部分;它指定要縮放存儲器訪問的大?。╪)的位移因子,其中n是存儲器訪問中的字節(jié)數(shù)(例如,用于使用2縮放×索引+基本+縮放的位移(2scale*index+base+scaleddisplacement)的地址生成)。忽略冗余低階位,并且因此,將位移因子字段的內(nèi)容乘以存儲器操作數(shù)總大小(n),從而生成最終位移以便在計算有效地址時使用。n的值由處理器硬件在運行時間基于完整操作碼字段174(本文稍后描述的)和數(shù)據(jù)操縱字段154c確定。位移字段162a和位移因子字段162b是可選的(在不將它們用于非存儲器訪問105指令模板和/或不同實施例可只實現(xiàn)這兩個中的僅一個或不實現(xiàn)這兩個中的任一個的意義上)。

數(shù)據(jù)元素寬度字段164-它的內(nèi)容區(qū)分要使用多個數(shù)據(jù)元素寬度中的哪個數(shù)據(jù)元素寬度(在一些實施例中對于所有指令;在其它實施例中只對于一些指令)。在如果只支持一個數(shù)據(jù)元素寬度而不需要此字段和/或使用操作碼的某個方面支持數(shù)據(jù)元素寬度的意義上,此字段是可選的。

寫掩碼字段170-它的內(nèi)容在每數(shù)據(jù)元素位置的基礎(chǔ)上控制目的地向量操作數(shù)中的數(shù)據(jù)元素位置是否反映基本操作和擴增操作的結(jié)果。類a指令模板支持合并-寫遮蔽,而類b指令模板支持合并和歸零-寫遮蔽。當(dāng)合并時,向量掩碼允許保護目的地中的任何元素集合以免在執(zhí)行任何操作(由基本操作和擴增操作指定的)期間更新;在其它一個實施例中,在對應(yīng)掩碼位具有0的情況下,保存目的地的每個元素的舊值。反之,當(dāng)歸零時,向量掩碼允許在執(zhí)行任何操作(由基本操作和擴增操作指定的)期間將目的地中的任何元素集合歸零;在一個實施例中,當(dāng)對應(yīng)掩碼位具有0值時,將目的地的元素設(shè)置成0。此功能性的子集是控制所執(zhí)行的操作的向量長度(即,所修改的元素從第一個到最后一個的跨距)的能力;然而,修改的元素不一定是連續(xù)的。因此,寫掩碼字段170允許部分向量操作,包括加載、存儲、算術(shù)、邏輯等。盡管描述了其中寫掩碼字段170的內(nèi)容選擇多個寫掩碼寄存器中包含要使用的寫掩碼的一個寫掩碼寄存器(并且因此,寫掩碼字段170的內(nèi)容間接地識別要執(zhí)行的該遮蔽)的本發(fā)明的實施例,但是備選實施例替代地或另外允許掩碼寫字段170的內(nèi)容直接指定要執(zhí)行的遮蔽。

立即數(shù)(immediate)字段172-它的內(nèi)容允許規(guī)定立即數(shù)。此字段是可選的(在以下意義上:在不支持立即數(shù)的通用向量友好格式的實現(xiàn)中此字段不存在并且在不使用立即數(shù)的指令中此字段不存在)。

類字段168-它的內(nèi)容在不同類的指令之間區(qū)分。參考圖1a-b,此字段的內(nèi)容在類a和類b指令之間選擇。在圖1a-b中,用圓角方形來指示在字段中存在特定值(例如,在圖1a-b中,對于類字段168分別為類a168a和類b168b)。

類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)志,并且不引發(fā)任何浮點異常處處置程序。

舍入操作控制字段158-它的內(nèi)容區(qū)分執(zhí)行舍入操作群組中的哪個操作(例如,向上舍入、向下舍入、向零舍入和最近舍入)。因此,舍入操作控制字段158允許在每指令基礎(chǔ)上改變舍入模式。在處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段150的內(nèi)容覆蓋該寄存器值。

非存儲器訪問指令模板-數(shù)據(jù)變換類型操作

在非存儲器訪問數(shù)據(jù)變換類型操作115指令模板中,將β字段154解釋為數(shù)據(jù)變換字段154b,其內(nèi)容區(qū)分要執(zhí)行多個數(shù)據(jù)變換中的哪個數(shù)據(jù)變換(例如,非數(shù)據(jù)變換、拌和、廣播)。

在類a的存儲器訪問120指令模板的情況下,將α字段152解釋為驅(qū)逐提示字段152b,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪個驅(qū)逐提示(在圖1a中,分別為存儲器訪問、臨時125指令模板和存儲器訪問、非臨時130指令模板指定臨時152b.1和非臨時152b.2);而將β字段154解釋為數(shù)據(jù)操縱字段154c,其內(nèi)容區(qū)分要執(zhí)行多個數(shù)據(jù)操縱操作(又稱為原語)中的哪個數(shù)據(jù)操縱操作(例如,非操縱;廣播;源的向上轉(zhuǎn)換;以及目的地的向下轉(zhuǎn)換)。存儲器訪問120指令模板包括縮放字段160以及可選地包括位移字段162a或位移縮放字段162b。

向量存儲器指令通過轉(zhuǎn)換支持執(zhí)行從存儲器的向量加載以及到存儲器的向量存儲。正如常規(guī)向量指令一樣,向量存儲器指令以逐數(shù)據(jù)元素的方式從存儲器傳送數(shù)據(jù)和/或?qū)?shù)據(jù)傳送到存儲器,其中通過選擇作為寫掩碼的向量掩碼的內(nèi)容規(guī)定實際傳送的元素。

存儲器訪問指令模板-臨時

臨時數(shù)據(jù)是可能足夠快再使用以從緩存獲益的數(shù)據(jù)。然而,這是提示,并且不同處理器可以用不同方式實現(xiàn)它,包括完全忽略所述提示。

存儲器訪問指令模板-非臨時

非臨時數(shù)據(jù)是不可能足夠快再使用以從第一級高速緩存中的緩存獲益的數(shù)據(jù),并且應(yīng)當(dāng)給予其驅(qū)逐優(yōu)先級。然而,這是提示,并且不同處理器可以用不同方式實現(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和vsize157a.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)容覆蓋該寄存器值。

在非存儲器訪問、寫掩碼控制、vsize型操作117指令模板中,將β字段154的剩余部分解釋為向量長度字段159b,其內(nèi)容區(qū)分要執(zhí)行多個數(shù)據(jù)向量長度中的哪個數(shù)據(jù)向量長度(例如,128、256或512字節(jié))。

在類b的存儲器訪問120指令模板的情況下,將β字段154的部分解釋為廣播字段157b,其內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作;而將β字段154的剩余部分解釋為向量長度字段159b。存儲器訪問120指令模板包括縮放字段160,并且可選地包括位移字段162a或位移縮放字段162b。

關(guān)于通用向量友好指令格式100,示出包括格式字段140、基本操作字段142和數(shù)據(jù)元素寬度字段164的完整操作碼字段174。盡管示出其中完整操作碼字段174包括所有這些字段的一個實施例,但是在不支持它們中的全部的實施例中,完整操作碼字段174包括少于全部這些字段。完整操作碼字段174提供操作代碼(操作碼)。

擴增操作字段150、數(shù)據(jù)元素寬度字段164和寫掩碼字段170允許在通用向量友好指令格式中在每指令基礎(chǔ)上指定這些特征。

寫掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建了類型化指令,因為它們允許基于不同數(shù)據(jù)元素寬度應(yīng)用掩碼。

類a和類b內(nèi)發(fā)現(xiàn)的各種指令模板在不同情形中都是有益的。在本發(fā)明的一些實施例中,不同處理器或處理器內(nèi)的不同核可只支持類a、只支持類b或支持兩個類。例如,預(yù)計用于通用計算的高性能通用無序核可只支持類b,預(yù)計主要用于圖形和/或科學(xué)(吞吐量)計算的核可只支持類a,而預(yù)計用于兩者的核可支持兩者(當(dāng)然,具有來自兩個類的模板和指令的一些混合而并非具有來自兩個類的所有模板和指令的核也在本發(fā)明的范圍內(nèi))。并且,單個處理器可包括多個核,所有這些核支持相同類或在這些核中不同核支持不同類。例如,在具有獨立的圖形和通用核的處理器中,預(yù)計主要用于圖形和/或科學(xué)計算的圖形核之一可只支持類a;而通用核中的一個或多個核可以是具有預(yù)計用于通用計算的無序執(zhí)行和寄存器重命名的高性能通用核,其只支持類b。不具有獨立圖形核的另一個處理器可包括支持類a和類b的一個或多個通用有序或無序核。當(dāng)然,在本發(fā)明的不同實施例中,來自一個類的特征也可在另一類中實現(xiàn)。用高級語言編寫的程序會放到(例如,及時編譯或靜態(tài)地編譯到)各種不同的可執(zhí)行形式中,包括:1)只具有由目標(biāo)處理器支持以用于執(zhí)行的一個或多個類的指令的形式;或2)具有使用所有類的指令的不同組合編寫的備選例程并且具有基于由當(dāng)前執(zhí)行代碼的處理器支持的指令選擇這些例程用于執(zhí)行的控制流代碼的形式。

示范特定向量友好指令格式

圖2是示出根據(jù)本發(fā)明的實施例的示范特定向量友好指令格式的框圖。圖2示出特定向量友好指令格式200,其在它指定字段的位置、大小、解釋和順序以及那些字段中的一些字段的值的意義上是特定的。特定向量友好指令格式200可用于擴展x86指令集,并且因此其中一些字段與現(xiàn)有x86指令集及其擴展(例如,avx)中所使用的字段類似或相同。此格式保持與具有擴展的現(xiàn)有x86指令集的前綴編碼字段、真實操作碼字節(jié)字段、modr/m字段、sib字段、位移字段和立即數(shù)字段一致。示出來自圖1的字段(來自圖2的字段映射到來自圖1的字段)。

應(yīng)當(dāng)理解,盡管為了說明的目的,在通用向量友好指令格式100的上下文中參考特定向量友好指令格式200描述本發(fā)明的實施例,但是除非在聲明的情況下,本發(fā)明不限于特定向量友好指令格式200。例如,通用向量友好指令格式100預(yù)期各種字段的各種可能的大小,而特定向量友好指令格式200示出為具有特定大小的字段。作為特定示例,盡管將數(shù)據(jù)元素寬度164示為是特定向量友好指令格式200中的一位字段,但是本發(fā)明不限于此(即,通用向量友好指令格式100預(yù)期數(shù)據(jù)元素寬度字段164的其它大?。?/p>

通用向量友好指令格式100包括下文按圖2a中示出的順序列出的以下字段。

evex前綴(字節(jié)0-3)202-用四字節(jié)形式編碼。

格式字段140(evex字節(jié)0,位[7:0])-第一字節(jié)(evex字節(jié)0)是格式字段140,并且它包含0×62(在本發(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位字段相同的功能性,并且使用1s補碼形式編碼,即,將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)格式存儲此位連同如下文所指示的其它位,以區(qū)別于(以眾所周知的x8632位模式)bound指令,其真實操作碼字節(jié)是62,但在modr/m字段(下面所描述的)中不接受mod字段中的值11;本發(fā)明的備選實施例下面不以倒轉(zhuǎn)格式存儲此位和其它指示的位。值1用于編碼較低的16個寄存器。換句話說,通過組合evex.r’、evex.r和來自其它字段的其它rrr形成r’rrrr。

操作碼映射字段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編碼以倒轉(zhuǎn)(1s補碼)形式指定的第一源寄存器操作數(shù),并且對于具有2個或更多個源操作數(shù)的指令有效;2)evex.vvvv編碼對于某些向量移位以1s補碼形式指定的目的地寄存器操作數(shù);或3)evex.vvvv不編碼任何操作數(shù),此字段保留并且應(yīng)當(dāng)包含1111b。因此,evex.vvvv字段220編碼以倒轉(zhuǎn)(1s補碼)形式存儲的第一源寄存器指定符的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)-為基本操作字段提供附加位。除了為evex前綴格式的傳統(tǒng)sse指令提供支持以外,這還具有緊縮simd前綴的益處(而不是要求字節(jié)來表達simd前綴,evex前綴只要求2個位)。在一個實施例中,為了支持使用處于傳統(tǒng)格式和處于evex前綴格式的simd前綴(66h、f2h、f3h)的傳統(tǒng)sse指令,將這些傳統(tǒng)simd前綴編碼到simd前綴編碼字段中;并且在運行時間將其擴充到傳統(tǒng)simd前綴中(在提供給解碼器的pla之前(因此,pla可執(zhí)行這些傳統(tǒng)指令的傳統(tǒng)和evex格式,而無需修改))。盡管更新的指令可直接使用evex前綴編碼字段的內(nèi)容作為操作碼擴展,但是某些實施例以類似方式擴充以便實現(xiàn)一致性,但允許通過這些傳統(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;還用βββ示出)-如先前所描述的,此字段是上下文特定的。

rex’字段110-這是rex’字段的剩余部分,并且是可用于編碼擴展的32個寄存器的集合的較上16個或較下16個寄存器的evex.v’位字段(evex字節(jié)3,位[3]-v’)。以位倒轉(zhuǎn)格式存儲此位。值1用于編碼較低的16個寄存器。換句話說,通過組合evex.v’和evex.vvvv而形成v’vvvv。

寫掩碼字段170(evex字節(jié)3,位[2:0]-kkk)-如先前所描述的,它的內(nèi)容指定寫掩碼寄存器中的寄存器的索引。在本發(fā)明的一個實施例中,特定值evek.kkk=000具有暗示沒有寫掩碼用于具體指令的特殊行為(這可以用多種方式實現(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)關(guān)于寄存器索引xxxx和bbbb提到過這些字段的內(nèi)容。

位移字段162a(字節(jié)7-10)-當(dāng)mod字段242包含10時,字節(jié)7-10是位移字段162a,并且它與傳統(tǒng)32位位移(disp32)相同地工作,并且按字節(jié)粒度工作。

位移因子字段162b(字節(jié)7)-當(dāng)mod字段242包含01時,字節(jié)7是位移因子字段162b。此字段的位置與按字節(jié)粒度工作的傳統(tǒng)x86指令集8位位移(disp8)相同。由于disp8進行了符號擴展,所以它只可在-128和127字節(jié)偏移之間尋址;在64字節(jié)高速緩存線方面,disp8使用8個位,這8個位可設(shè)置成只有4個真實有用的值-128、-64、0和64;由于通常需要更大范圍,所以使用disp32;然而,disp32要求4個字節(jié)。與disp8和disp32相對照,位移因子字段162b是disp8的重新解釋;當(dāng)使用位移因子字段162b時,實際位移由位移因子字段的內(nèi)容乘以存儲器操作數(shù)存取的大?。╪)決定。這種類型的位移稱為disp8*n。這減少了平均指令長度(單個字節(jié)用于位移,但是具有大得多的范圍)。這類壓縮位移基于如下假定:即,有效位移是存儲器訪問的粒度的倍數(shù),并且因此,無需編碼地址偏移的冗余低階位。換句話說,位移因子字段162b代替?zhèn)鹘y(tǒng)x86指令集8位位移。因此,以與x86指令集8位位移相同的方式編碼位移因子字段162b(因此,modrm/sib編碼規(guī)則沒有變化),其中唯一例外是disp8過載為disp8*n。換句話說,編碼規(guī)則或編碼長度沒有變化,但只是在通過硬件解釋位移值方面有所變化(這需要將位移縮放存儲器操作數(shù)的大小以便獲得逐字節(jié)地址偏移)。

立即數(shù)字段172如先前所描述地那樣操作。

完整操作碼字段

圖2b是示出根據(jù)本發(fā)明一個實施例的構(gòu)成完整操作碼字段174的特定向量友好指令格式200的字段的框圖。具體來說,完整操作碼字段174包括格式字段140、基本操作字段142和數(shù)據(jù)元素寬度(w)字段164。基本操作字段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(類a168a);當(dāng)它包含1時,它意味著evex.u1(類b168b)。當(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)。

示范寄存器架構(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-在所示實施例中,有16個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)量浮點操作的8元素棧;而使用mmx寄存器來對64位壓縮整數(shù)數(shù)據(jù)執(zhí)行操作,并為在mmx和xmm寄存器之間執(zhí)行的一些操作保持操作數(shù)。

本發(fā)明的備選實施例可使用更寬或更窄的寄存器。另外,本發(fā)明的備選實施例可使用更多、更少或不同的寄存器堆和寄存器。

d.示范核架構(gòu)、處理器和計算機架構(gòu)

處理器核可按照不同方式、為了不同目的并且在不同的處理器中實現(xiàn)。例如,這類核的實現(xiàn)可包括:1)預(yù)計用于通用計算的通用有序核;2)預(yù)計用于通用計算的高性能通用無序核;3)預(yù)計主要用于圖形和/或科學(xué)(吞吐量)計算的專用核。不同處理器的實現(xiàn)可包括:1)cpu,包括預(yù)計用于通用計算的一個或多個通用有序核和/或預(yù)計用于通用計算的一個或多個通用無序核;以及2)協(xié)處理器,包括預(yù)計主要用于圖形和/或科學(xué)(吞吐量)的一個或多個專用核。這類不同的處理器導(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并且均耦合到存儲器單元470的前端單元430的處理器核490。核490可以是精簡指令集計算(risc)核、復(fù)雜指令集計算(cisc)核、超長指令字(vliw)核或者混合或備選核類型。作為又一個選項,核490可以是專用核(例如諸如網(wǎng)絡(luò)或通信核)、壓縮引擎、協(xié)處理器核、通用計算圖形處理單元(gpgpu)核、圖形核等。

前端單元430包括耦合到指令高速緩存單元434的分支預(yù)測單元432,指令高速緩存單元434耦合到指令轉(zhuǎn)化后備緩沖器(tlb)436,指令轉(zhuǎn)化后備緩沖器(tlb)436耦合到指令獲取單元438,指令獲取單元438耦合到解碼單元440。解碼單元440(或解碼器)可對指令進行解碼,并且作為輸出生成一個或多個微操作、微代碼入口點、微指令、其它指令或其它控制信號,其從原始指令來解碼或?qū)С龌蛘咭云渌绞椒从吃贾噶睢=獯a單元440可使用各種不同的機制來實現(xiàn)。適當(dāng)機制的示例包括但不限于查找表、硬件實現(xiàn)、可編程邏輯陣列(pla)、微代碼只讀存儲器(rom)等。在一個實施例中,核490包括微代碼rom或其它介質(zhì),其存儲某些宏指令的微代碼(例如在解碼單元440中或者否則在前端單元430內(nèi))。解碼單元440耦合到執(zhí)行引擎單元450中的重命名/分配器單元452。

執(zhí)行引擎單元450包括重命名/分配器單元452,其耦合到引退單元454和一個或多個調(diào)度器單元456的集合。(一個或多個)調(diào)度器單元456表示任何數(shù)量的不同調(diào)度器,包括保留站、中心指令窗口等。(一個或多個)調(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可執(zhí)行各種操作(例如移位、加法、減法、乘法)并且對各種類型的數(shù)據(jù)(例如,標(biāo)量浮點、壓縮整數(shù)、壓縮浮點、向量整數(shù)、向量浮點)來執(zhí)行。雖然一些實施例可包括專用于特定功能或功能集合的多個執(zhí)行單元,但是其它實施例可以僅包括一個執(zhí)行單元或多個執(zhí)行單元,其全部執(zhí)行全部功能。(一個或多個)調(diào)度器單元456、(一個或多個)物理寄存器堆單元458和(一個或多個)執(zhí)行集群460示為可能是多個的,因為某些實施例創(chuàng)建某些類型的數(shù)據(jù)/操作的獨立流水線(例如標(biāo)量整數(shù)流水線、標(biāo)量浮點/壓縮整數(shù)/壓縮浮點/向量整數(shù)/向量浮點流水線和/或存儲器訪問流水線(其各具有其自己的調(diào)度器單元)、(一個或多個)物理寄存器堆單元和/或執(zhí)行集群)-以及在獨立存儲器訪問流水線的情況下,實現(xiàn)只有這個流水線的執(zhí)行集群具有(一個或多個)存儲器訪問單元464的某些實施例)。還應(yīng)當(dāng)理解,在使用獨立流水線的情況下,這些流水線的一個或多個可以是無序發(fā)布/執(zhí)行,而其余的是有序的。

存儲器訪問單元464的集合耦合到存儲器單元470,其包括耦合到數(shù)據(jù)高速緩存單元474(其耦合到2級(l2)高速緩存單元476)的數(shù)據(jù)tlb單元472。在一個示范實施例中,存儲器訪問單元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指令集(具有隨較新版本已經(jīng)添加的一些擴展);sunnyvale,ca的mipstechnologies的mips指令集;sunnyvale,ca的armholdings的arm指令集(具有可選附加擴展,例如neon)),包括本文所描述的(一個或多個)指令。在一個實施例中,核490包括支持壓縮數(shù)據(jù)指令集擴展的邏輯(例如avx1、avx2),由此允許由許多個多媒體應(yīng)用所使用的操作使用壓縮數(shù)據(jù)來執(zhí)行。

應(yīng)當(dāng)理解,核可支持多線程(執(zhí)行操作或線程的兩個或更多并行集合),并且可按照多種方式這樣做,包括時間分片的多線程、同時多線程(其中單個物理核為物理核同時多線程的線程的每個提供邏輯核)或者其組合(例如,諸如在intel?超線程技術(shù)中的時間分片的獲取和解碼以及此后的同時多線程)。

雖然在無序執(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)的框圖,該核會是芯片中的若干邏輯塊其中之一(包括相同類型和/或不同類型的其它核)。邏輯塊通過具有某種固定功能邏輯、存儲器i/o接口和其它必要i/o邏輯(這取決于應(yīng)用)的高帶寬互連網(wǎng)絡(luò)(例如環(huán)形網(wǎng)絡(luò))進行通信。

圖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),以及在它們之間所傳遞的數(shù)據(jù)被寫到存儲器并且然后從1級(l1)高速緩存506讀回,但是本發(fā)明的備選實施例可使用不同方式(例如使用單個寄存器集合,或者包括允許數(shù)據(jù)在兩個寄存器堆之間來傳遞(而沒有被寫和讀回)的通信路徑)。

l2高速緩存504的本地子集是全局l2高速緩存(其劃分為獨立本地子集,每處理器核一個)的部分。各處理器核具有到l2高速緩存504的其自己的本地子集的直接訪問路徑。由處理器核所讀的數(shù)據(jù)存儲在其l2高速緩存子集504中,并且能夠被與訪問其自己的本地l2高速緩存子集的其它處理器核并行且快速地訪問。由處理器核所寫入的數(shù)據(jù)存儲在其自己的l2高速緩存子集504中,并且如果需要則從其它子集來刷新。環(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部分以及與向量單元510和向量寄存器514有關(guān)的更多細節(jié)。具體來說,向量單元510是16寬向量處理單元(vpu)(參見16寬alu528),其執(zhí)行整數(shù)、單精度浮點和雙精度浮點指令的一個或多個。vpu支持采用拌和(swizzle)單元520來拌和寄存器輸入、采用數(shù)字轉(zhuǎn)換單元522a-b的數(shù)字轉(zhuǎn)換以及采用復(fù)制單元524對存儲器輸入的復(fù)制。寫掩碼寄存器526允許判定所產(chǎn)生向量寫。

圖6是根據(jù)本發(fā)明的實施例的可具有一個以上核、可具有集成存儲器控制器并且可具有集成圖形的處理器600的框圖。圖6中的實線框示出具有單個核602a、系統(tǒng)代理610、一個或多個總線控制器單元616的集合的處理器600,而虛線框的可選添加示出具有多個核602a-n、系統(tǒng)代理單元610中的一個或多個集成存儲器控制器單元614的集合和專用邏輯608的備選處理器600。

因此,處理器600的不同實現(xiàn)可包括:1)具有作為集成圖形和/或科學(xué)(吞吐量)邏輯(其可包括一個或多個核)的專用邏輯608和作為一個或多個通用核(例如通用有序核、通用無序核、兩者的組合)的核602a-n的cpu;2)具有作為預(yù)計主要用于圖形和/或科學(xué)(吞吐量)的大量專用核的核602a-n的協(xié)處理器;以及3)具有作為大量通用有序核的核602a-n的協(xié)處理器。因此,處理器600可以是通用處理器、協(xié)處理器或?qū)S锰幚砥?,例如諸如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu(通用圖形處理單元)、高吞吐量集成眾核(mic)協(xié)處理器(包括30個或更多核)、嵌入式處理器等。處理器可在一個或多個芯片上實現(xiàn)。處理器600可以是一個或多個襯底的一部分和/或可使用多種工藝技術(shù)的任一種(例如諸如bicmos、cmos或nmos)在一個或多個襯底上實現(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與核602a-n之間維持相干性。

在一些實施例中,核602a-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)的框圖。用于膝上型、臺式、手持pc、個人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)裝置、網(wǎng)絡(luò)集線器、交換機、嵌入式處理器,數(shù)字信號處理器(dsp)、圖形裝置、視頻游戲裝置、機頂盒、微控制器,蜂窩電話、便攜媒體播放機、手持裝置和各種其它電子裝置的本領(lǐng)域已知的其它系統(tǒng)設(shè)計和配置也是適合的。一般來說,能夠結(jié)合如本文所公開的處理器和/或其它執(zhí)行邏輯的大量系統(tǒng)或電子裝置一般是適合的。

現(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)裝置760耦合到gmch790。備選地,存儲器和圖形控制器的一個或兩者集成在處理器內(nèi)(如本文所描述的),存儲器740和協(xié)處理器745直接耦合到處理器710以及具有ioh750的單個芯片中的控制器集線器720。

附加處理器715的可選性質(zhì)在圖7中采用虛線表示。各處理器710、715可包括本文所描述的處理核的一個或多個,并且可以是處理器600的某個版本。

存儲器740可以是例如動態(tài)隨機存取存儲器(dram)、相變存儲器(pcm)或者兩者的組合。對于至少一個實施例,控制器集線器720經(jīng)由多點總線(例如前側(cè)總線(fsb))、點對點接口(例如快速通道互連(qpi))或者類似連接795與(一個或多個)處理器710、715進行通信。

在一個實施例中,協(xié)處理器745是專用處理器,例如諸如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、嵌入式處理器等。在一個實施例中,控制器集線器720可包括集成圖形加速器。

在包括架構(gòu)、微架構(gòu)、熱、功率消耗特性等的優(yōu)點的衡量標(biāo)準(zhǔn)范圍方面,在物理資源710、715之間存在各種差異。

在一個實施例中,處理器710執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。嵌入在指令內(nèi)的可以是協(xié)處理器指令。處理器710將這些協(xié)處理器指令辨別為應(yīng)當(dāng)由所附連的協(xié)處理器745來執(zhí)行的類型。相應(yīng)地,處理器710在協(xié)處理器總線或其它互連上向協(xié)處理器745發(fā)布這些協(xié)處理器指令(或者表示協(xié)處理器指令的控制信號)。(一個或多個)協(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可使用點對點(p-p)接口電路878、888經(jīng)由p-p接口850來交換信息。如圖8中所示的,imc872和882將處理器耦合到相應(yīng)存儲器(即存儲器832和存儲器834),其可以是本地附連到相應(yīng)處理器的主存儲器的部分。

處理器870、880每個可使用點對點接口電路876、894、886、898經(jīng)由單獨p-p接口852、854與芯片集890交換信息。芯片集890可選地可經(jīng)由高性能接口839與協(xié)處理器838交換信息。在一個實施例中,協(xié)處理器838是專用處理器,例如諸如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、嵌入式處理器等。

共享高速緩存(未示出)可包含在處理器中或者兩個處理器外部,但是仍然經(jīng)由p-p互連與處理器連接,使得如果將處理器置入低功耗模式,則任一個或兩個處理器的本地高速緩存信息可存儲在共享高速緩存中。

芯片集890可經(jīng)由接口896耦合到第一總線816。在一個實施例中,第一總線816可以是外設(shè)組件互連(pci)總線或者例如pciexpress總線等總線或另一種第三代i/o互連總線(盡管本發(fā)明的范圍并不這樣限制)。

如圖8中所示的,各種i/o裝置814可連同總線橋818(其將第一總線816耦合到第二總線820)一起耦合到第一總線816。在一個實施例中,諸如協(xié)處理器、高吞吐量mic處理器、gpgpu的、加速器(例如,圖形加速器或數(shù)字信號處理(dsp)單元)、現(xiàn)場可編程門陣列或者任何其它處理器之類的一個或多個附加處理器815耦合到第一總線816。在一個實施例中,第二總線820可以是低引腳數(shù)(lpc)總線。在一個實施例中,各種裝置可耦合到第二總線820,包括例如鍵盤和/或鼠標(biāo)822、通信裝置827以及可包括指令/代碼和數(shù)據(jù)830的諸如磁盤驅(qū)動器或其它大容量存儲裝置之類的存儲單元828。此外,音頻i/o824可耦合到第二總線820。注意,其它架構(gòu)是可能的。例如,代替圖8的點對點架構(gòu),系統(tǒng)可實現(xiàn)多點總線或其它這類架構(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裝置914也耦合到控制邏輯872、882。傳統(tǒng)i/o裝置915耦合到芯片集890。

現(xiàn)在參照圖10,所示的是根據(jù)本發(fā)明的實施例的soc1000的框圖。圖6中的類似元件具有相同參考標(biāo)號。而且,虛線框是更高級soc上的可選特征。圖10中,(一個或多個)互連單元1002耦合到:應(yīng)用處理器1010,其包括一個或多個核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)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入裝置和至少一個輸出裝置。

例如圖8中所示的代碼830等程序代碼可應(yīng)用于輸入指令,以執(zhí)行本文所描述的功能并且生成輸出信息。輸出信息可按照已知方式應(yīng)用于一個或多個輸出裝置。為了本申請的目的,處理系統(tǒng)包括具有例如諸如數(shù)字信號處理器(dsp)、微控制器、專用集成電路(asic)或者微處理器等處理器的任何系統(tǒng)。

程序代碼可通過高級過程或面向?qū)ο蟮木幊陶Z言來實現(xiàn),以便與處理系統(tǒng)進行通信。如果期望,程序代碼也可通過匯編或機器語言來實現(xiàn)。實際上,本文所描述的機制在范圍方面并不局限于任何具體編程語言。在任何情況下,語言可以是編譯或解釋語言。

至少一個實施例的一個或多個方面可通過機器可讀介質(zhì)上存儲的、表示處理器內(nèi)的各種邏輯的代表性指令來實現(xiàn),其在由機器讀時使機器制作執(zhí)行本文所描述的技術(shù)的邏輯。稱作“ip核”的這類表示可存儲在有形機器可讀介質(zhì)上,并且供應(yīng)給各種客戶或制造設(shè)施,以加載到實際制作邏輯或處理器的制作機器中。

這類機器可讀存儲介質(zhì)可以非限制性地包括通過機器或裝置所制造或形成的產(chǎn)品的非暫時性有形布置,包括:例如硬盤等存儲介質(zhì);任何其它類型的盤,包括軟盤、光盤、光盤只讀存儲器(cd-rom)、可重寫光盤(cd-rw)和磁光盤;半導(dǎo)體器件(例如只讀存儲器(rom))、隨機存取存儲器(ram)(例如動態(tài)隨機存取存儲器(dram)、靜態(tài)隨機存取存儲器(saram))、可擦可編程只讀存儲器(eprom)、閃速存儲器、電可擦可編程只讀存儲器(eeprom)、相變存儲器(pcm);磁卡或光卡;或者適合于存儲電子指令的任何其它類型的介質(zhì)。

相應(yīng)地,本發(fā)明的實施例還包括非暫時性有形機器可讀介質(zhì),其包含指令或者包含定義本文所描述的結(jié)構(gòu)、電路、設(shè)備、處理器和/或系統(tǒng)特征的設(shè)計數(shù)據(jù)(例如硬件描述語言(hdl))。這類實施例又可稱作程序產(chǎn)品。

在一些情況下,指令轉(zhuǎn)換器可用來將指令從源指令集轉(zhuǎn)換成目標(biāo)指令集。例如,指令轉(zhuǎn)換器可將指令轉(zhuǎn)化(例如使用靜態(tài)二進制轉(zhuǎn)化、包括動態(tài)編譯的動態(tài)二進制轉(zhuǎn)化)、變形、仿真或者以其它方式將指令轉(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示出以高級語言1102的程序可使用x86編譯器1104來編譯,以生成x86二進制代碼1106,其可由具有至少一個x86指令集核的處理器1116本機執(zhí)行。具有至少一個x86指令集核的處理器1116表示任何處理器,其能夠通過兼容地執(zhí)行或者以其它方式處理下列方面來執(zhí)行與具有至少一個x86指令集核的intel處理器基本上相同的功能:(1)intelx86指令集核的指令集的相當(dāng)大部分;或者(2)針對在具有至少一個x86指令集核的intel處理器上運行的應(yīng)用或其它軟件的對象代碼版本,以便實現(xiàn)與具有至少一個x86指令集核的intel處理器基本上相同的結(jié)果。x86編譯器1104表示可操作以生成x86二進制代碼1106(例如對象代碼)(其能夠在具有或沒有附加鏈接處理的情況下在具有至少一個x86指令集核的處理器1116上執(zhí)行)的編譯器。類似地,圖11示出以高級語言1102的程序可使用備選指令集編譯器1108來編譯,以便生成備選指令集二進制代碼1110,其可由沒有至少一個x86指令集核的處理器1114(例如具有執(zhí)行sunnyvale,ca的mipstechnologies的mips指令集和/或執(zhí)行sunnyvale,ca的armholdings的arm指令集的核的處理器)本機執(zhí)行。指令轉(zhuǎn)換器1112用來將x86二進制代碼1106轉(zhuǎn)換為可由沒有x86指令集核的處理器1114本機執(zhí)行的代碼。這個轉(zhuǎn)換的代碼不可能與備選指令集二進制代碼1110是相同的,因為能夠進行這個操作的指令轉(zhuǎn)換器難以制作;然而,轉(zhuǎn)換的代碼將實現(xiàn)一般操作,并且由來自備選指令集的指令來組成。因此,指令轉(zhuǎn)換器1112表示軟件、固件、硬件或者其組合,其通過仿真、模擬或者任何其它過程允許處理器或者沒有x86指令集處理器或核的其它電子裝置執(zhí)行x86二進制代碼1106。

用于對向量元素集合執(zhí)行約減操作的方法和設(shè)備

“稀疏更新”是重要的算法模式(對于其向量化會是有益的)。這里,可以在間接尋址的存儲器位置執(zhí)行讀-修改-寫操作(例如,加載a[b[i]]、添加?xùn)|西到其、以及將值存儲回a[b[i]]中)。向量化此類型的操作涉及執(zhí)行收集-修改-分散操作。作為示例,這類操作可以涉及經(jīng)由收集操作對i的16個連續(xù)值執(zhí)行形式a[b[i]]的16個間接載入、執(zhí)行單指令多數(shù)據(jù)(simd)計算和分散新的值回到存儲器。然而,此向量化假定單個收集/分散指令將訪問每個存儲器位置不超過一次。例如,如果b[i]的兩個連續(xù)值相同,則第二個讀-修改-寫取決于第一個。因此,以simd方式同時進行這些操作違反這些相關(guān)性,并可能引起不正確的結(jié)果。

本發(fā)明的一個實施例利用諸如vpconflict的沖突檢測指令,其比較向量寄存器內(nèi)的元素以檢測重復(fù)。特別地,該指令可以測試其向量寄存器輸入的每個元素(為了與該輸入的所有較早元素(例如,更靠近最低有效位(lsb)的所有元素)的相等性),并將這些比較的結(jié)果作為位向量的集合輸出。沖突檢測指令提供確定元素是否具有涉及相同simd寄存器內(nèi)的其它元素的數(shù)據(jù)相關(guān)的方法。

圖12示出具有包括數(shù)據(jù)元素1200-1203的集合的輸入向量寄存器1220和存儲沖突檢測指令的結(jié)果1210-1213的輸出寄存器1230的示例。在操作中,沖突檢測指令將數(shù)據(jù)元素1200-1203中的每一個與其之前的數(shù)據(jù)元素進行比較。第一元素1200不與另一個元素進行比較(因為其之前沒有元素),并且結(jié)果被存儲為輸出向量寄存器1230中的第一元素中的0000,指示沒有沖突。第二元素1201與第一元素1200進行比較。因為元素不相等,結(jié)果也是存儲在輸出向量寄存器1211的第二位置1211中的0000(無沖突)。因為第三元素1202等于第一元素1200,所以0001的結(jié)果被存儲在輸出向量寄存器1230的第三輸出位置1212中。在一個實施例中,0001是二進制值,并且結(jié)果的第一位置中的1指示第三元素1202等于輸入向量寄存器1220的第一元素1200。最后,因為第四元素1203等于第一元素1200和第三元素1202兩者,所以在輸出向量寄存器1230的第四位置1213中設(shè)置0101值(其中第一位的位置中的第一個1指示與第一數(shù)據(jù)元素1200的相等性,以及第三位的位置中的第二個1指示與第三數(shù)據(jù)元素1202的相等性)。

在simd寄存器的單獨元素內(nèi)識別重復(fù)值的能力允許在跨simd寄存器元素的可能的數(shù)據(jù)相關(guān)性可能以其它方式阻止向量化的情況下對標(biāo)量代碼進行向量化。例如,可以通過確定具有唯一索引的元素的子集、以simd方式計算那些、并且然后循環(huán)回重新嘗試剩余元素來加強相關(guān)性,從而將對具有相同索引的元素的計算序列化。在上面示例中,前兩個元素會被同時計算,之后是第三元素通過本身(從第一元素的輸出值檢索輸入值)以及最后一個元素通過本身(從第三元素的輸出值檢索輸入值)。此方法在以下示例循環(huán)中表示,該循環(huán)對n個數(shù)據(jù)元素的數(shù)組執(zhí)行操作(“計算(compute)”),并被向量化以每次迭代對simd_width元素進行操作:

為簡潔起見,已經(jīng)省略了對compute_mask_of_unique_remaining_indices函數(shù)的討論。

雖然上面代碼示例是向量化的,但循環(huán)的向量化版本有時可以引起比其標(biāo)量等價物更低的性能,使得難以預(yù)測向量化是否將是有益的。特別地,通過向量化提供的性能提升取決于索引simd寄存器(索引)中有多少元素具有重復(fù)值。當(dāng)存在任何給定索引的幾個實例時,即當(dāng)普通情況是要具有while循環(huán)的幾次迭代時,該方法工作良好。然而,當(dāng)存在相同索引的許多實例時,執(zhí)行時間可能比標(biāo)量執(zhí)行更差,因為“while”循環(huán)迭代的最大數(shù)量等于simd寬度。

為了解決這些問題,下面描述的本發(fā)明的實施例包括對simd寄存器內(nèi)的元素并行地執(zhí)行多個樹約減(每唯一索引值一個約減)的技術(shù)。此方法至多具有l(wèi)og2simd_width個計算步驟。特別地,本發(fā)明的某些實施例能夠跨具有simd寄存器內(nèi)的任意排序的值的集合并行地執(zhí)行任意數(shù)量的二進制樹約減。沖突檢測指令(例如vpconflict)的信息豐富的輸出可以被用于迭代地識別并組合來自具有相同索引的simd元素對的部分結(jié)果。新的指令vpopcnt可用于此方法,因為它允許共享索引的每個元素被排序。vpopcnt指令的一個實施例對每個simd元素中的設(shè)置位(即1’s)數(shù)進行計數(shù)。

在單個simd寄存器內(nèi),可能存在需要經(jīng)由一個或多個約減模式組合的多個值。例如,應(yīng)用可以具有需要組合的單個simd寄存器內(nèi)的值{a0,b0,a1,a2,b1,a3,a4,b2}的集合,使得所有'a'值被求和,并且所有'b'值被求和,僅產(chǎn)生兩個值{a0+a1+a2+a3+a4,b0+b1+b2}。盡管存在多種方法來進行此操作,但是通過僅兩個輸入(例如,處理器中的加法指令)給出約減操作的最有效方式是跨simd寄存器的元素并行地執(zhí)行多個二進制樹約減。

本發(fā)明的實施例解決了跨向量寄存器的通道執(zhí)行多個寄存器中約減的問題,而不必進行(a)將每個獨立約減的約減操作序列化,或(b)對關(guān)聯(lián)“索引”向量內(nèi)每個唯一索引值的實例的數(shù)量進行計數(shù)。這可以通過生成第一輸出(其識別獨立的約減)以及生成第二輸出(其可以用于識別二進制約減樹中的左子項對右子項)來實現(xiàn),如下面詳細描述的。在一個實施例中,使用vpconflict指令生成第一輸出,并且使用vpopcnt指令生成第二輸出。

如圖13中所示的,simd樹約減邏輯1305的一個實施例采用兩個向量寄存器作為輸入:包含要約減(例如求和)的值的“值”向量寄存器1302和指示“值”向量中的哪些值(或通道)相互關(guān)聯(lián)“索引”向量寄存器1301。如果“索引”向量寄存器1301中的兩個通道具有相等的值,則它們涉及相同的樹約減。如果“索引”向量寄存器1302中的兩個通道具有不同的值,則它們涉及獨立的約減。simd樹約減邏輯1305的輸出是包含最左邊通道(即最接近最高有效字節(jié))(其包含與該約減關(guān)聯(lián)的索引值的實例)中的每個約減的結(jié)果的累加向量寄存器1303。

雖然本文公開的實施例利用其中每個寄存器的最高有效位/字節(jié)在“左”且最低有效位/字節(jié)在“右”的布置,但是本發(fā)明的基礎(chǔ)原理不限于這類布置。例如,在備選實施例中,最低有效位/字節(jié)在“左”,最高有效位/字節(jié)在“右”。對于此實施例,本公開中對“左”或“最左”的任何引用可以通過“右”或“最右”來替換,反之亦然。

在圖13中的示例中,索引向量寄存器1301內(nèi)的值a、b、c和d表示任意(唯一)整數(shù)值。圖13還示出如何通過每個迭代(迭代0-2被示出)來自值向量1302的值的不同集合被simd樹約減邏輯求和以執(zhí)行約減操作。例如,索引向量寄存器1301中的a的每個實例識別要約減的值向量寄存器中的值的集合:d15、d14、d8、d3和d0。在最終迭代之后,將這些值求和以形成存儲在累加向量1303的最左邊數(shù)據(jù)元素位置(與索引向量中最左邊的a的位置一致)中的單個值α。使用與來自索引向量(d13、d11、d10、d9、d6、d5、d4和d1)的每個實例b關(guān)聯(lián)的值以相同的方式形成β的值,并且將β的最終值存儲在來自累加向量寄存器1303中的左邊的第三數(shù)據(jù)元素位置(與索引向量中最左邊b的位置一致)。

以下偽代碼表示可以由simd樹約減邏輯1305基于索引值執(zhí)行的寄存器中樹約減:

在操作中,向量寄存器“value_vec”(值向量寄存器1302)包含要約減的值,并且向量寄存器“index_vec”(索引向量寄存器1301)包含這些值的索引或關(guān)聯(lián)。例如,在一個實施例中,“index_vec”內(nèi)的相等值意味著“value_vec”中的相應(yīng)值屬于相同的約減。vec_op函數(shù)表示會通常在約減中使用的任何操作,其通常是交換和關(guān)聯(lián)的數(shù)學(xué)操作,例如整數(shù)加法。帶括號的左側(cè)值(例如“cnt_vec{eo_mask}”)表示在掩碼下執(zhí)行的向量操作。對于“i_vec{eo_mask}”操作,任何不活動通道都應(yīng)該被歸零。對于“accum_vec{eo_mask}”操作,任何不活動的通道應(yīng)保留“accum_vec”的先前值。

一旦完成,“accum_vec”向量包含并行發(fā)生的所有約減的結(jié)果,對于包含在“index_vec”中的每個唯一值為一個。每個約減的結(jié)果將在“accum_vec”寄存器1303的最左邊通道(最接近msb),其具有與“index_vec”中的約減關(guān)聯(lián)的索引值(如圖13中所示的)。

在“索引”向量中的所有值是唯一的(即,“無沖突”情況)的情況下,這些技術(shù)的成本是最小的(vpconflict和將為假的初始的“while”循環(huán)條件測試以及環(huán)回分支的成本)。在“索引”向量中的所有值相同(即“最沖突”的情況)的情況下,這些技術(shù)將迭代“l(fā)og2n”次,其中n是向量寬度。這與上面提到的之前實現(xiàn)相反,其會替代地執(zhí)行n次迭代,因為每個約減被有效地序列化(例如,在每個約減中一次累加一個值/通道)。一般而言,本發(fā)明的實施例執(zhí)行‘o(log2n)’迭代,以跨“值”向量1302并行地執(zhí)行任意數(shù)量的約減,其中n是具有最多實例的“索引”向量1301中的值的實例的數(shù)量。例如,在圖13中,值“b”在“索引”向量中具有最多實例,具有總共n=8個實例(操作a的5個實例、c的1個實例以及d的2個實例)。對于此示例,本文描述的技術(shù)會迭代3次(log2n),而先前的算法會迭代8次(n)。

現(xiàn)在將參考圖14和15描述特定示例。為了清楚起見,此詳細示例執(zhí)行遵循圖13中所示的示例。如本文所使用的,最低有效位(lsb)和最低有效通道(lsl)是所示出的最右邊的值(例如,向量寄存器={通道15,通道14,...,通道0})。對于掩碼值,為了清楚起見,使用下劃線來直觀地將位分組。

輸入值連同第一沖突檢測操作(例如,vpconflict)的結(jié)果如下,其中a、b、c和d表示唯一和任意的整數(shù)值,并且d0至d15表示約減涉及的值:

圖14示出在輸出向量寄存器1402內(nèi)創(chuàng)建初始“vc_vec”值的沖突檢測操作(例如,用vpconflict實現(xiàn)的)。在所示實施例中,輸出向量寄存器1402存儲16個數(shù)據(jù)元素,每個與存儲在索引數(shù)據(jù)寄存器內(nèi)的索引數(shù)據(jù)元素之一關(guān)聯(lián),其中元素的值表示與對應(yīng)的通道關(guān)聯(lián)的較早的沖突。如上面提到的,將索引向量寄存器1301中的每個元素與更接近最低有效通道/位的所有其它元素進行比較。因此,將位置#4(示例中的b)中的索引數(shù)據(jù)元素與位置#3(a)、位置#2(d)、位置#1(b)和位置#0(a)中的數(shù)據(jù)元素比較。如果數(shù)據(jù)元素等于更靠近最低有效通道的任何數(shù)據(jù)元素,則在輸出向量寄存器1402內(nèi)設(shè)置對應(yīng)的位。因此,例如,來自索引向量寄存器1301中的左邊的第二個b生成輸出11001110010,其中1指示索引向量寄存器1301中的其它b的位置。如所示的,此值然后被存儲在與對于其執(zhí)行比較的b的位置對應(yīng)的位置的輸出向量寄存器1402中(在該示例中由十六進制值0x0672表示)。對存儲在索引向量寄存器1301中的每個索引值執(zhí)行類似的操作。

接下來,只要在輸出向量寄存器1302中的“vc_vec”值中設(shè)置了至少一個位,則迭代上面闡述的“while”循環(huán)。為了所示示例,約減操作是加法(例如,vec_op=vpadd)。因此,迭代0的結(jié)果如下:

圖15示出如何為迭代0確定pc_vec值并將其存儲為向量寄存器1501內(nèi)的數(shù)據(jù)元素。特別地,pc_vec向量寄存器1501內(nèi)的每個數(shù)據(jù)元素對應(yīng)于索引向量寄存器1301中的索引,并且具有等于在索引向量寄存器1301中更靠近最低有效通道/位存儲的索引值的實例數(shù)量的值。例如,pc_vec向量寄存器1501中最左邊的值4與索引向量寄存器1301中的最左邊的索引a的實例關(guān)聯(lián),并且指示索引向量寄存器1301中存在索引a的4個其它實例(即,在a的最左邊實例的右邊)。類似地,pc_vec向量寄存器1501中的值7與位于索引向量寄存器中的對應(yīng)位置(即,來自在所示示例中的左邊的2個位置)中的索引b的實例關(guān)聯(lián)。值7指示在索引向量寄存器1301中存在索引b的7個實例存儲在右邊。

另外,圖15示出eo_mask寄存器1502內(nèi)的位如何更新。特別地,與每個索引值關(guān)聯(lián)的位被設(shè)置成1,以指示在索引向量寄存器1301內(nèi)右邊的該索引值的奇數(shù)個其它實例。因此,對于給定的索引值,與該索引值關(guān)聯(lián)的位將在eo_mask寄存器1502內(nèi)在1和0之間交替。

在迭代0之后,由于在輸出向量寄存器1402中仍然存在設(shè)置在“vc_vec”值中的位,因此執(zhí)行另一次迭代(“迭代1”):

在迭代1之后,由于在輸出向量寄存器1402中仍然存在設(shè)置在“vc_vec”值中的位,所以執(zhí)行另一次迭代:

由于輸出向量寄存器1402中的“vc_vec”現(xiàn)在包含全部零,所以循環(huán)退出。循環(huán)的結(jié)果如下,其中對于引用重復(fù)輸入:

值在index_vec中加粗,以突出哪個通道表示最終的約減結(jié)果,并且值在上面的accum_vec中加粗以匹配index_vec的粗體。注意到,每個約減的結(jié)果在具有與該約減關(guān)聯(lián)的索引值的最左邊的通道中。在此示例中,最左邊的索引值“a”與結(jié)果“d15+d14+d8+d3+d0”(通道15)關(guān)聯(lián)、最左邊的索引值“b”與結(jié)果“d13+d11+d10+d9+d6+d5+d4+d1”(通道13)關(guān)聯(lián)、最左邊的索引值“c”與結(jié)果“d12”(通道12)關(guān)聯(lián)、并且最左邊的索引值“d”與結(jié)果“d7+d2”(通道7)關(guān)聯(lián)。這匹配圖13中所呈現(xiàn)的最終狀態(tài),標(biāo)記為“在迭代2之后”。

由于分散指令定義,使結(jié)果在最左邊通道(或最高有效通道(msl))中對于一些架構(gòu)(例如,諸如ia)是有利的。在分散中的多個元素具有相同的索引(即寫到相同的存儲器位置)的情況下,最左邊通道(msl)的值覆蓋任何其它值。雖然對于該特定實施例優(yōu)選最左邊的,但是本發(fā)明的基礎(chǔ)原理不限于對于結(jié)果使用最左邊通道。給定索引值的結(jié)果可以存儲在與該索引值關(guān)聯(lián)的最左邊或最右邊通道中,因為當(dāng)重復(fù)發(fā)生時分散指令通常被定義為通過優(yōu)選與該索引值關(guān)聯(lián)的最左邊或最右邊的值來給出確定性結(jié)果。在上面呈現(xiàn)的示例代碼中,與給定索引值關(guān)聯(lián)的最左邊通道是優(yōu)選的。

在圖16中示出根據(jù)本發(fā)明的一個實施例的方法。該方法可以在上面描述的架構(gòu)的上下文中實現(xiàn),但不限于任何特定的系統(tǒng)或處理器架構(gòu)。

在1601,跨索引通道檢測沖突(例如,進一步與最低有效位/通道的相等索引值),并將結(jié)果存儲在vc_vec寄存器中。例如,在一個實施例中,使用諸如vpconflict的沖突檢測指令(參見例如圖12和關(guān)聯(lián)的文本)來檢測沖突。

在1602,關(guān)于是否存在任何沖突進行確定。這可以例如通過檢查vc_vec是否具有當(dāng)前設(shè)置的任何位來確定。如果沒有,則過程終止。如果是這樣,則在1603,具有相同索引值的通道被標(biāo)記為在它們相應(yīng)的約減樹中的左和右子項。在一個實施例中,這通過vpopcnt(vc_vec)&0x1(如上面所描述的)來實現(xiàn)。在一個實施例中,此位序列被用作將左子項標(biāo)記為活動的掩碼(每通道的lsb)(例如,左子項在右邊具有奇數(shù)個沖突,而右子項有偶數(shù)個)。

在1604,對于每個通道,針對指示最左邊通道(msl)具有與此通道右邊(lsl)相等索引值的最高有效1計算位索引。在1605,右子項被移動成與左子項對齊,將結(jié)果放置在臨時的位置。在一個實施例中,這使用向量置換/混洗(shuffle)指令來實現(xiàn)。

在1606,將約減操作應(yīng)用于來自1605的臨時結(jié)果(具有原始數(shù)據(jù))以將左和右子項組合,將結(jié)果放置在左子項的通道中。在1607,在1603中創(chuàng)建的掩碼被廣播并且與vc-vec寄存器中的當(dāng)前值進行逐位求與,更新vc-vec寄存器,并且由此清除與右子項關(guān)聯(lián)的vc_vec寄存器中的位(即在未來的迭代中除去對那些子項的考慮)。然后,過程返回到1602,其確定是否剩余任何沖突(例如,檢查vc_vec是否具有設(shè)置為1的任何位)。如果沒有,則過程終止;如果是這樣,則執(zhí)行通過1603-1607的另一次迭代。

上面技術(shù)的一個應(yīng)用是“直方圖”式操作,其一個示例在下面示出。直方圖操作在各種應(yīng)用(包括圖像處理)中是常見的。

在諸如上面“直方圖”循環(huán)的循環(huán)中,阻止此循環(huán)的簡單向量化的復(fù)雜因素是“b[j]”和“b[k]”的值可以相等,引起對單個簡單向量化循環(huán)迭代中的“a”的相同元素的競爭狀況。這被稱為“沖突”。使用上面技術(shù)通過每唯一索引值首先將任何沖突值組合(約減)成單個值來除去任何沖突。

在上面簡單直方圖的情況下,“索引”向量會是向量寬度“b[i]”值,并且“值”向量在每個通道中會具有值“1”。如果“+=”操作的右手側(cè)是計算的結(jié)果,而不僅是常量“1”,則“值”向量會保持該向量化計算的結(jié)果。然后,我們的約減循環(huán)可以與收集和分散指令結(jié)合使用以對上面的直方圖循環(huán)進行向量化。

在前面的說明書中,已經(jīng)描述了本發(fā)明的實施例(參考其特定示范實施例)。然而,將明顯的是,在不脫離如所附權(quán)利要求中闡述的本發(fā)明的更寬的精神和范圍的情況下,可以對其進行各種修改和改變。相應(yīng)地,說明書和附圖要被視為是說明性的而不是限制性的意義。

本發(fā)明的實施例可以包括上面已經(jīng)描述的各種步驟。所述步驟可以在可以用于使通用或?qū)S锰幚砥鲌?zhí)行所述步驟的機器可執(zhí)行指令中實施。備選地,這些步驟可以由包含用于執(zhí)行步驟的硬連線邏輯的特定硬件組件或由編程的計算機組件和定制硬件組件的任何組合來執(zhí)行。

如本文所描述的,指令可以指被配置成執(zhí)行某些操作或具有存儲于在非暫時性計算機可讀介質(zhì)中實施的存儲器中的預(yù)定功能性或軟件指令的硬件的特定配置,例如專用集成電路(asic)。因此,圖中所示的技術(shù)可以使用在一個或多個電子裝置(例如,終端站、網(wǎng)絡(luò)元件等)上存儲和執(zhí)行的代碼和數(shù)據(jù)來實現(xiàn)。這類電子裝置使用諸如非暫時性計算機機器可讀存儲介質(zhì)(例如,磁盤、光盤、隨機存取存儲器、只讀存儲器、閃存裝置、相變存儲器)和暫時性計算機機器可讀通信介質(zhì)(例如,電、光、聲或其它形式的傳播信號,例如載波、紅外信號、數(shù)字信號等)來存儲和傳遞(內(nèi)部和/或與網(wǎng)絡(luò)上的其它電子裝置)代碼和數(shù)據(jù)。此外,這類電子裝置通常包括耦合到一個或多個其它組件的一個或多個處理器的集合,例如一個或多個存儲裝置(非暫時性機器可讀存儲介質(zhì))、用戶輸入/輸出裝置(例如,鍵盤、觸摸屏和/或顯示器)和網(wǎng)絡(luò)連接。處理器集合和其它組件的耦合通常通過一個或多個總線和橋(也稱為總線控制器)。攜帶網(wǎng)絡(luò)業(yè)務(wù)的存儲裝置和信號分別表示一個或多個機器可讀存儲介質(zhì)和機器可讀通信介質(zhì)。因此,給定電子裝置的存儲裝置通常存儲代碼和/或數(shù)據(jù),供在該電子裝置的一個或多個處理器的集合上執(zhí)行。當(dāng)然,可以使用軟件、固件和/或硬件的不同組合來實現(xiàn)本發(fā)明的實施例的一個或多個部分。整個此詳細描述中,為了解釋的目的,闡述了許多特定細節(jié)以便提供對本發(fā)明的透徹理解。然而,對于本領(lǐng)域技術(shù)人員將顯而易見的是,可以在沒有這些特定細節(jié)中的一些的情況下實踐本發(fā)明。在某些實例中,為了避免使本發(fā)明的主題變得模糊,未以詳細的細節(jié)描述眾所周知的結(jié)構(gòu)和功能。相應(yīng)地,本發(fā)明的范圍和精神應(yīng)根據(jù)跟著的權(quán)利要求來判斷。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
方山县| 叙永县| 雷山县| 庐江县| 阿荣旗| 乐安县| 沾益县| 福泉市| 航空| 渭南市| 龙游县| 昔阳县| 石柱| 红桥区| 广南县| 嘉义县| 开阳县| 阳西县| 栾川县| 忻州市| 营山县| 临沧市| 夏河县| 邹平县| 镇安县| 临朐县| 新安县| 齐河县| 绥中县| 新兴县| 遵化市| 康马县| 大庆市| 靖江市| 凤城市| 增城市| 甘德县| 秦皇岛市| 蒙自县| 香格里拉县| 茂名市|