用于循環(huán)剩余掩碼指令的系統(tǒng)、裝置和方法
【專利摘要】循環(huán)剩余掩碼指令指示循環(huán)的當(dāng)前迭代計數(shù)作為第一操作數(shù),循環(huán)的迭代極限作為第二操作數(shù)以及目的地。循環(huán)包含迭代,且每次迭代包含陣列的數(shù)據(jù)元素。處理器接收循環(huán)剩余掩碼指令,解碼該指令以供執(zhí)行,并且將執(zhí)行的結(jié)果存儲在目的地中。結(jié)果指示陣列中在陣列的在前部分的末端之后要與在前部分分開處理的數(shù)據(jù)元素的數(shù)量,在前部分的末端是記錄當(dāng)前迭代計數(shù)的位置。
【專利說明】用于循環(huán)剩余掩碼指令的系統(tǒng)、裝置和方法
【技術(shù)領(lǐng)域】
[0001] 實施例涉及計算機處理器架構(gòu)。具體地,實施例涉及指令在被執(zhí)行時導(dǎo)致特定的 結(jié)果。
[0002] 相關(guān)技術(shù)的描述
[0003] 許多處理器具有單指令多數(shù)據(jù)(SMD)架構(gòu)。該SMD架構(gòu)通常有助于顯著提高處 理速度。在SIMD架構(gòu)中,與僅在一個數(shù)據(jù)元素或一對數(shù)據(jù)元素上操作標(biāo)量指令不同,打包 數(shù)據(jù)指令、矢量指令、或SMD指令可在多個數(shù)據(jù)元素、或多對數(shù)據(jù)元素上同時或并行地操 作。處理器可具有并行執(zhí)行硬件,該并行執(zhí)行硬件響應(yīng)于打包數(shù)據(jù)指令來同時或并行地執(zhí) 行多個操作。
[0004] 在SIMD架構(gòu)中,可將多個數(shù)據(jù)元素打包在一個寄存器或存儲器位置內(nèi)作為打包 數(shù)據(jù)或矢量數(shù)據(jù)。在矢量數(shù)據(jù)中,寄存器或其他存儲位置的比特可被邏輯地劃分成多個固 定大小的數(shù)據(jù)元素的序列。數(shù)據(jù)元素中的每一個可表示個體數(shù)據(jù)片,該個體數(shù)據(jù)片連同通 常具有相同大小的其他數(shù)據(jù)元素一起被存儲在寄存器或存儲位置中。例如,256比特寬寄存 器可具有四個64比特寬打包數(shù)據(jù)元素,八個32比特寬打包數(shù)據(jù)元素,十六個16比特寬打 包數(shù)據(jù)元素,或三十二個8比特寬打包數(shù)據(jù)元素。每一打包數(shù)據(jù)元素可表示獨立個體的一 段數(shù)據(jù)(例如,像素顏色等),該段數(shù)據(jù)可單獨地操作或與其他數(shù)據(jù)獨立地操作。
[0005] 代表性地,打包數(shù)據(jù)指令、矢量指令或SMD指令(例如,打包加法指令)中的一種 類型可指定在來自兩個源打包數(shù)據(jù)操作數(shù)的所有相應(yīng)數(shù)據(jù)元素對上以垂直方式執(zhí)行單個 打包數(shù)據(jù)操作(例如,加法)以生成目的或結(jié)果打包數(shù)據(jù)。這些源打包數(shù)據(jù)操作數(shù)是相同 大小,可包含相同寬度的數(shù)據(jù)元素,并因此可各自包含相同數(shù)量的數(shù)據(jù)元素。兩個源打包數(shù) 據(jù)操作數(shù)中的相同的比特位置中的源數(shù)據(jù)元素可表示相應(yīng)的數(shù)據(jù)元素對??煞珠_地或獨立 地對這些相應(yīng)的源數(shù)據(jù)元素對中的每一個執(zhí)行打包數(shù)據(jù)操作,以便生成匹配數(shù)量的結(jié)果數(shù) 據(jù)元素,且因而每一對相應(yīng)的源數(shù)據(jù)元素可以具有相應(yīng)的結(jié)果數(shù)據(jù)元素。通常,這樣的指令 的結(jié)果數(shù)據(jù)元素是以相同的次序,且它們常常具有相同的大小。
[0006] 除這種示例性類型的打包數(shù)據(jù)指令之外,還有各種其它類型的打包數(shù)據(jù)指令。例 如,存在僅具有一個源打包數(shù)據(jù)操作數(shù)或具有兩個以上的源打包數(shù)據(jù)操作數(shù)的打包數(shù)據(jù)指 令、以水平方式而不是垂直方式操作的打包數(shù)據(jù)指令、生成不同尺寸的結(jié)果打包數(shù)據(jù)操作 數(shù)的打包數(shù)據(jù)指令、具有不同尺寸的數(shù)據(jù)元素的打包數(shù)據(jù)指令和/或具有不同的數(shù)據(jù)元素 次序的打包數(shù)據(jù)指令。
【專利附圖】
【附圖說明】
[0007] 通過參考用來說明本發(fā)明的實施例的以下描述和附圖,可最好地理解本發(fā)明。在 附圖中:
[0008] 圖1是具有含一個或多個循環(huán)對齊指令的指令集的處理器的示例實施例的框圖。
[0009] 圖2A-2C示出利用循環(huán)對齊指令的結(jié)果的經(jīng)掩碼的打包數(shù)據(jù)操作的示例。
[0010] 圖3是具有執(zhí)行單元的指令處理裝置的示例實施例的框圖,該執(zhí)行單元可操作用 于執(zhí)行包含一個或多個循環(huán)對齊指令的示例實施例的指令。
[0011] 圖4是包括存儲有一個或多個循環(huán)對齊指令的有形、非瞬態(tài)機器可訪問和/或機 器可讀存儲介質(zhì)的制品(例如,計算機程序產(chǎn)品)的框圖。
[0012] 圖5A和5B是示出用于處理循環(huán)對齊指令的方法的示例實施例的流程圖。
[0013] 圖6是示出打包數(shù)據(jù)操作掩碼比特的數(shù)目依賴于對齊寬度和數(shù)據(jù)元素寬度的表 格。
[0014] 圖7是一組打包數(shù)據(jù)操作掩碼寄存器的示例實施例的框圖。
[0015] 圖8A-8C示出循環(huán)對齊指令及其操作的示例實施例。
[0016] 圖9示出根據(jù)本發(fā)明一個實施例的系統(tǒng)的框圖。
[0017] 圖10示出根據(jù)本發(fā)明的實施例的第二系統(tǒng)的框圖。
[0018] 圖11是根據(jù)本發(fā)明的實施例的第三系統(tǒng)的框圖。
[0019] 圖12是根據(jù)本發(fā)明的實施例的片上系統(tǒng)(SoC)的框圖。
[0020] 圖13是根據(jù)本發(fā)明的實施例的單核處理器和多核處理器的框圖,具有集成的存 儲器控制器和圖形器件。
[0021] 圖14是根據(jù)本發(fā)明的實施例的對比使用軟件指令變換器將源指令集中的二進(jìn)制 指令變換成目標(biāo)指令集中的二進(jìn)制指令的框圖。
【具體實施方式】
[0022] 在下面的描述中,闡述了很多具體細(xì)節(jié)。然而,應(yīng)當(dāng)理解,本發(fā)明的各實施例可以 在不具有這些具體細(xì)節(jié)的情況下得到實施。在其他實例中,公知的電路、結(jié)構(gòu)和技術(shù)未被詳 細(xì)示出以免混淆對本描述的理解。
[0023] 圖1是具有含一個或多個循環(huán)對齊指令的指令集102的處理器100的示例實施例 的框圖。該處理器100可以是各種復(fù)雜指令集計算(CISC)處理器、各種精簡指令集計算 (RISC)處理器、各種超長指令字(VLIW)處理器、其各種混合、或完全其他類型的處理器中 的任何處理器。在一個或多個實施例中,處理器100可以是通用處理器(例如由美國加利 福尼亞州圣克拉拉市的英特爾公司制造的類型的通用微處理器),盡管這不是必需的。替 換地,指令處理處理裝置可以是專用處理器。合適的專用處理器的示例包括但不限于,網(wǎng)絡(luò) 處理器、通信處理器、加密處理器、圖形處理器、協(xié)處理器、嵌入式處理器、數(shù)字信號處理器 (DSP)以及控制器(例如,微控制器),僅列舉數(shù)例。
[0024] 處理器100具有指令集架構(gòu)(ISA) 101。指令集體系結(jié)果101表示與編程相關(guān)的 處理器100的架構(gòu)的一部分指令集架構(gòu)101通常包括本地指令、架構(gòu)寄存器、數(shù)據(jù)類型、尋 址模式、存儲器架構(gòu)、中斷和異常處理以及處理器100的外部輸入和輸出(I/O)。指令集架 構(gòu)101與微架構(gòu)不同,微架構(gòu)通常表示選擇用于實現(xiàn)指令集架構(gòu)的特定處理器設(shè)計技術(shù)。 帶有不同的微架構(gòu)的處理器可以共享共同的指令集架構(gòu)。例如,加利福尼亞州圣克拉拉的 英特爾公司的某些微處理器和加利福尼亞州桑尼威爾(Sunnyvale)的超微半導(dǎo)體有限公 司(Advanced Micro Devices, Inc.)的某些微處理器使用本質(zhì)上不同的內(nèi)部微架構(gòu)來實現(xiàn) x86指令集的類似部分。
[0025] 指令集架構(gòu)101包括架構(gòu)寄存器(例如,架構(gòu)寄存器文件)106。所示的架構(gòu)寄存 器106包括通用寄存器127和打包數(shù)據(jù)寄存器107。通用寄存器127中的每一個可操作用 于存儲標(biāo)量數(shù)據(jù)元素(也被稱為數(shù)據(jù)元素),且打包數(shù)據(jù)寄存器107B中的每一個可操作用 于存儲打包數(shù)據(jù)、矢量數(shù)據(jù)或SIMD數(shù)據(jù)(例如,數(shù)據(jù)元素的陣列)。所示的架構(gòu)寄存器106 還包括掩碼寄存器108。掩碼寄存器108中的每一個可操作用于存儲打包數(shù)據(jù)操作掩碼(也 被稱為"掩碼")。
[0026] 架構(gòu)寄存器106表示板上處理器存儲位置。架構(gòu)寄存器106此處也可以被簡稱為 寄存器。短語架構(gòu)寄存器、寄存器文件、以及寄存器在本文中用于表示對軟件和/或編程器 (例如,軟件可見的)和/或由宏指令指定來標(biāo)識操作數(shù)(operand)的寄存器,除非另外予 以指定或清楚明顯可知。這些寄存器與給定微架構(gòu)(例如,臨時寄存器、重排序緩沖器、弓丨 退(retirement)寄存器等)中的其他非架構(gòu)寄存器形成對比。
[0027] 所示的指令集架構(gòu)101還包括由處理器100支持的指令集102。指令集102包括 若干不同類型的指令。指令集102的這些指令表示宏指令(例如,提供給處理器100以供 執(zhí)行的指令),與微指令或微操作(例如,從處理器1〇〇的解碼器129解碼宏指令得到的) 不同。
[0028] 指令集102包括一個或多個循環(huán)對齊指令,諸如循環(huán)對齊計數(shù)(PLCNT)指令105A、 循環(huán)對齊掩碼(PLMSK)指令105B和/或循環(huán)剩余掩碼(KSUBREM)指令105C。PLCNT指令 105A是標(biāo)量生成指令,該指令可操作用于導(dǎo)致或致使處理器100生成標(biāo)量值,諸如整數(shù)值。 可將標(biāo)量值存儲在通用寄存器127中。PLMSK指令105B和KSUBREM指令105C是掩碼生成指 令,該指令中的每一個可操作用于導(dǎo)致或致使處理器100生成可被存儲在掩碼寄存器108 中的掩碼。
[0029] 在一個實施例中,上述循環(huán)對齊指令中的一個或多個是經(jīng)掩碼的打包數(shù)據(jù)指令 103。經(jīng)掩碼的打包數(shù)據(jù)指令103可類似于在背景部分中提及的矢量指令,且具有幾個顯著 的差別。類似于前述打包數(shù)據(jù)指令,經(jīng)掩碼的打包數(shù)據(jù)指令103中的每一個可操作用于導(dǎo) 致或致使處理器100在該打包數(shù)據(jù)指令指示的一個或多個打包操作數(shù)的數(shù)據(jù)元素上執(zhí)行 打包數(shù)據(jù)操作。打包數(shù)據(jù)操作數(shù)可被存儲在打包數(shù)據(jù)寄存器107中。然而,經(jīng)掩碼的打包 數(shù)據(jù)指令103中的每一個可使用一個或多個掩碼寄存器108以掩碼、斷言(predicate)或 有條件地控制打包數(shù)據(jù)處理。存儲在掩碼寄存器108中的掩碼可表示掩碼操作數(shù)、斷言操 作數(shù)或條件操作控制操作數(shù)。
[0030] 掩碼可操作用于按數(shù)據(jù)元素粒度掩碼或有條件地控制打包數(shù)據(jù)處理。例如,掩碼 可操作用于對是否將在來自單個源打包數(shù)據(jù)操作數(shù)的個體數(shù)據(jù)元素或來自兩個源打包數(shù) 據(jù)操作數(shù)的個體相應(yīng)數(shù)據(jù)元素對上執(zhí)行的經(jīng)掩碼的打包數(shù)據(jù)指令103的打包數(shù)據(jù)操作的 結(jié)果存儲在打包數(shù)據(jù)結(jié)果中進(jìn)行掩碼。經(jīng)掩碼的打包數(shù)據(jù)指令103可允許與數(shù)據(jù)元素分開 地且獨立地斷言或有條件控制對每個數(shù)據(jù)元素或每對相對應(yīng)數(shù)據(jù)元素的打包數(shù)據(jù)處理。經(jīng) 掩碼的打包數(shù)據(jù)指令103、操作和掩碼可提供某些優(yōu)點,諸如增加的代碼密度和/或較高的 指令吞吐量。
[0031] 在替換實施例中,以上描述的循環(huán)對齊指令中的一個或多個可以是不一定具有與 經(jīng)掩碼的打包數(shù)據(jù)指令103相同的指令格式的指令;然而,這些指令生成可由經(jīng)掩碼的打 包數(shù)據(jù)指令103使用的結(jié)果。循環(huán)對齊指令的替換實施例在圖1中被示為虛線框。
[0032] 處理器100還包括執(zhí)行邏輯109。執(zhí)行邏輯109可操作用于執(zhí)行或處理指令集102 的指令。執(zhí)行邏輯109可包括執(zhí)行單元、功能單元、算術(shù)邏輯單元、邏輯單元、算術(shù)單元等。 處理器100還包括解碼器129,用以將宏指令解碼成微指令或微操作以供執(zhí)行邏輯109執(zhí) 行。
[0033] PLCNT指令105A和PLMSK指令105B計算剝離迭代(peel iteration)的數(shù)量。剝 離迭代指的是可從循環(huán)中取出并與循環(huán)的剩余迭代分開地執(zhí)行的循環(huán)的最初迭代。循環(huán)的 "最初"迭代指的是在循環(huán)索引隨著每次迭代而增加時循環(huán)的最低索引部分,或者在循環(huán)索 引隨著每次迭代而減小時循環(huán)的最高索引部分。從循環(huán)取出一個或多個最初迭代被稱為 "循環(huán)剝離",這是一種通常針對循環(huán)優(yōu)化而執(zhí)行的技術(shù)。在通常的情況下,循環(huán)內(nèi)的計算可 涉及陣列。陣列的基址不一定與處理打包數(shù)據(jù)的底層處理器的數(shù)據(jù)存儲的寬度(諸如打包 數(shù)據(jù)寄存器107、高速緩存線或其它存儲器單元的寬度)對齊。該數(shù)據(jù)存儲的寬度被稱為對 齊寬度。非對齊基址表示基址不是對齊寬度的整數(shù)倍。為了提高數(shù)據(jù)訪問的效率,編譯器 可生成計算剝離迭代的數(shù)量以將陣列的非對齊數(shù)據(jù)元素移出循環(huán)的代碼。剝離迭代的數(shù)量 是相同數(shù)量的需要移出該循環(huán)或者需要與陣列的剩余部分分開地處理的這些非對齊數(shù)據(jù) 元素。陣列的剩余部分的基址(即,開始地址)與對齊寬度對齊;或等價地是對齊寬度的整 數(shù)倍。
[0034] 然而,剝離迭代的數(shù)量以及最后矢量化的循環(huán)操作中的剩余迭代的數(shù)量通常不能 在編譯時間解析,因為此時不知道陣列元素的地址。利用本文描述的指令,在編譯時間,編 譯器可生成PLCNT指令105A、PLMSK指令105B和/或KSUBREM指令105C代替執(zhí)行相同任 務(wù)的其它代碼序列。因此,編譯器可利用這些循環(huán)對齊指令來簡化其循環(huán)優(yōu)化任務(wù)。在替 換實施例中,循環(huán)對齊指令可由編程器或其它代碼生成實體使用。當(dāng)循環(huán)對齊指令是指令 集架構(gòu)101的一部分時,處理器100包含接收這些指令作為輸入并將它們解碼成微指令或 微操作以供執(zhí)行邏輯109執(zhí)行的硬件(例如,解碼器129)。
[0035] PLCNT指令105A和PLMSK指令105B處理陣列的開始未對齊的情況,而KSUBREM指 令105C處理在循環(huán)的最后端處的剩余元素的總尺寸小于對齊寬度的情況。在對齊寬度是 矢量寄存器的寬度的實施例中,這意味著在最后的矢量化循環(huán)操作中,剩余的元素不填充 整個矢量寄存器。即,當(dāng)循環(huán)中沒有足夠多的迭代(且陣列中沒有足夠多的數(shù)據(jù)元素)來 構(gòu)成全寬度矢量操作時可使用KSUBREM指令105C。
[0036] 考慮每個循環(huán)迭代處理一個陣列元素的示例。假設(shè)每個分組數(shù)據(jù)寄存器具有512 比特,這表示16個雙字?jǐn)?shù)據(jù)元素可被打包成寄存器并一起作為矢量來處理。如果迭代的總 數(shù)是100且循環(huán)的開始與數(shù)據(jù)存儲對齊,則在末端有4個剩余的數(shù)據(jù)元素在矢量化循環(huán)中 未被處理且需要單獨處理。KSUBREM指令105C計算剩余數(shù)據(jù)元素的數(shù)量,并且生成可與剩 余數(shù)據(jù)元素一起使用的掩碼以改進(jìn)循環(huán)矢量化。
[0037] 為了進(jìn)一步示出循環(huán)對齊,考慮它們的使用的代表示例是有用的。圖2A是示出經(jīng) 掩碼的打包數(shù)據(jù)加法操作203的第一代表性示例實施例的框圖。經(jīng)掩碼的打包數(shù)據(jù)加法操 作203可響應(yīng)于經(jīng)掩碼的打包數(shù)據(jù)指令(例如,圖1的經(jīng)掩碼的打包數(shù)據(jù)指令103之一) 或者作為該指令的結(jié)果來執(zhí)行。在一個實施例中,在操作203中使用掩碼202。掩碼202可 以是由處理器執(zhí)行圖1的PLMSK指令105B生成的結(jié)果。
[0038] 在圖2A的示例中,經(jīng)掩碼的打包數(shù)據(jù)加法操作203將標(biāo)量值(例如,5)加到對應(yīng) 于置位的掩碼比特(例如,1)的源打包數(shù)據(jù)201的每個數(shù)據(jù)元素。假設(shè)代碼序列(對于i =0至21,B(i) = A(i)+5)被指定用于執(zhí)行,則標(biāo)量值5被加到陣列A的每個數(shù)據(jù)元素。 因為源打包數(shù)據(jù)201包括陣列A的三個數(shù)據(jù)元素(S卩,A (0)、A (1)和A (2))作為其最低階 數(shù)據(jù)元素,所以掩碼202的僅最低階三個比特被置位(例如為1)以指示對于A(0)、A(1)和 A(2),應(yīng)執(zhí)行加法,且加法的結(jié)果應(yīng)被存儲。在一個實施例中,掩碼202可用于加載源打包 數(shù)據(jù)201以及執(zhí)行經(jīng)掩碼的打包數(shù)據(jù)加法操作203?;蛘撸谑鶄€數(shù)據(jù)元素(例如,A(0) 至A(15))被加載到矢量寄存器以指示加法僅應(yīng)在最低階的三個數(shù)據(jù)元素上執(zhí)行之后,使 用掩碼202。在任意實施例中,陣列A的最高階的十三個數(shù)據(jù)元素不會進(jìn)行加法操作;因此, 它們被指示為"x"(不關(guān)心)。
[0039] 出于示出的目的,假設(shè)源打包數(shù)據(jù)201是512比特寬且每個數(shù)據(jù)元素是32比特寬 (即,雙字或"Dword")。在圖2A-2C的示例中,源打包數(shù)據(jù)201的寬度與對齊寬度相同。為 了優(yōu)化數(shù)據(jù)訪問和打包數(shù)據(jù)操作,將陣列的基址與對齊寬度對齊是有利的。例如,當(dāng)存儲在 高速緩存中的陣列的基址與高速緩存線對齊時,處理器可利用單次獲取來獲取完整高速緩 存線的陣列數(shù)據(jù)元素。此外,當(dāng)存儲在打包數(shù)據(jù)寄存器中的陣列的基址與打包數(shù)據(jù)寄存器 寬度對齊時,處理器可高效地矢量化對陣列數(shù)據(jù)元素的操作。
[0040] 作為示例,高速緩存線的寬度可以是512比特,且對齊寬度可以是矢量寄存器的 寬度。在矢量寄存器也是512比特寬的處理器中,將完整高速緩存線的數(shù)據(jù)(例如十六個 Dword)加載到矢量寄存器將進(jìn)行一個加載操作。然而,在圖2A的示例中,其中陣列A的基 址不與對齊寬度對齊,加載陣列A的最初的十六個Dword將進(jìn)行兩個加載操作;來自第一高 速緩存線的第一 A (0)至A (2),然后來自第二高速緩存線的A (3)至A (15)。如果高速緩存 線的寬度是512比特且對齊寬度(例如,矢量寄存器寬度)是128比特寬,則將對齊的十六 個Dword加載到矢量寄存器將進(jìn)行四個加載操作。然而,在圖2A的示例中,加載陣列A的 最初十六個Dword將進(jìn)行五個加載操作。這是因為最初的16個Dword跨兩條高速緩存線 存儲;結(jié)果,加載它們將導(dǎo)致額外的加載操作。
[0041] 在陣列元素的數(shù)量是2的冪的應(yīng)用中(例如,圖像處理),最初的未對齊可導(dǎo)致陣 列元素的所有后續(xù)加載的未對齊。因此,由于最初的未對齊,而可能無法有效地利用打包數(shù) 據(jù)操作處理整個陣列A。因此,在圖2A的示例中,掩碼202用于向處理器指示陣列A的需要 與陣列元素的剩余部分分開地處理的那些元素。
[0042] 相反,圖2B示出其中源打包數(shù)據(jù)205包含陣列A的接下來的十六個元素(即, Α(3)、Α(4)、···.、Α(18))的示例。十六個元素的總寬度與對齊寬度相同。因此,單個打包數(shù) 據(jù)操作(例如,矢量獲取、矢量加法等)可在全部這些十六個元素上操作。如果這些十六個 元素中的每一個在一個循環(huán)迭代中用作指令的源操作數(shù)(例如,對于i = 3至18, B(i)= A(i)+5),則可利用單個打包數(shù)據(jù)操作執(zhí)行加法。在圖2B的示例中,示出與源打包數(shù)據(jù)205 一起使用打包數(shù)據(jù)操作掩碼206。掩碼206的全部十六個掩碼比特被設(shè)定為指示可在陣列 A的全部十六個數(shù)據(jù)元素上操作且可存儲操作的結(jié)果。以虛線示出掩碼206,因為在一些實 施例中,不使用掩碼206可能是有利的。這是因為通過使所有的1作為掩碼比特,在源分組 數(shù)據(jù)205上的操作和操作結(jié)果的存儲與在操作中不使用掩碼206相同。
[0043] 在圖2C的示例中,陣列的最后三個數(shù)據(jù)元素(即,A(19)、A(20)、A(21))不占據(jù)源 打包數(shù)據(jù)207的全部寬度。即,在A沒有留下足夠的元素來填充整個矢量寄存器207。因為 源打包數(shù)據(jù)207包括A (19)、A (20)、A (21)作為其最低階數(shù)據(jù)元素,因此掩碼208的僅最低 階三個比特被置位(例如為1)以指示對于八(19)、4(20)、4(21),應(yīng)執(zhí)行加法,且加法的結(jié) 果應(yīng)被存儲。掩碼208可以是由處理器執(zhí)行圖1的KSUBREM指令105C生成的結(jié)果。在一 個實施例中,在陣列的末端缺少數(shù)據(jù)元素(用于填充整個矢量寄存器)可能是在陣列的基 址處最初未對齊的結(jié)果。例如,在圖像處理應(yīng)用中,通常圖像陣列的尺寸是矢量寄存器寬度 的整數(shù)倍。然而,如果圖像陣列的開始未被對齊,則若干數(shù)據(jù)元素留在循環(huán)的末端,而不能 填充整個矢量寄存器。
[0044] 使用掩碼202和208有助于對其中陣列的數(shù)據(jù)元素是操作數(shù)的循環(huán)的執(zhí)行進(jìn)行矢 量化。在圖2A的示例中,可利用其中源打包數(shù)據(jù)201與掩碼202 -起使用的經(jīng)掩碼的打包 數(shù)據(jù)操作來對具有循環(huán)索引i = 〇、1和2的迭代進(jìn)行矢量化。.在圖2C的示例中,可利用 其中源打包數(shù)據(jù)207與掩碼208 -起使用的經(jīng)掩碼的打包數(shù)據(jù)操作來對具有循環(huán)索引i = 19、20和21的迭代進(jìn)行矢量化。在一個實施例中,在檢測到循環(huán)之后,編譯器可生成循環(huán)優(yōu) 化代碼,該代碼包括PLCNT指令105A、PLMSK指令105B和/或KSUBREM指令105C。PLCNT 指令105A的輸出是指示迭代數(shù)量的整數(shù),可將其從循環(huán)中取出以改進(jìn)矢量化;在圖2A的示 例中,該數(shù)量是3。PLMSK指令105B的輸出是可被施加到源打包數(shù)據(jù)201的打包數(shù)據(jù)操作 掩碼(例如,掩碼202)。在圖2A的示例中,僅掩碼202的最低階三個元素被置位(例如,1) 且其余被清零(例如,〇)。KSUBREM指令105C的輸出是可被施加到源打包數(shù)據(jù)207的打包 數(shù)據(jù)操作掩碼(例如,掩碼208)。在圖2C的示例中,僅掩碼208的最低階三個元素被置位 (例如,1)且其余被清零(例如,0)。
[0045] 關(guān)于所示的經(jīng)掩碼的打包數(shù)據(jù)操作203的指令指示要被加到標(biāo)量值的源打包數(shù) 據(jù)。其它經(jīng)掩碼的打包數(shù)據(jù)指令可指示兩個或更多個源打包數(shù)據(jù)。經(jīng)掩碼的打包數(shù)據(jù)操作 203的指令還指示打包數(shù)據(jù)操作掩碼(202、206或208)。打包數(shù)據(jù)操作掩碼中的每一個包 括多個掩碼元素、斷言元素、條件控制元素或標(biāo)志??梢园磁c一個或多個相對應(yīng)源數(shù)據(jù)元素 的一對一對應(yīng)的形式包括元素或標(biāo)志。例如,如圖所示,在操作涉及一個源打包數(shù)據(jù)操作數(shù) 的情況下,對于每個對應(yīng)的源數(shù)據(jù)元素可以有一個這樣的元素或標(biāo)志。打包數(shù)據(jù)操作掩碼 的每個元素或標(biāo)志可操作用于對一個或多個相應(yīng)的源打包數(shù)據(jù)元素上單獨打包數(shù)據(jù)操作 進(jìn)行掩碼。例如,每個元素或標(biāo)記可對相應(yīng)源打包數(shù)據(jù)元素上的單獨打包數(shù)據(jù)操作進(jìn)行掩 碼。
[0046] 如圖中所示的,通常每個元素或標(biāo)志可以是單個比特。單個比特可允許指定兩個 不同可能性(例如,執(zhí)行操作對不執(zhí)行操作,存儲操作的結(jié)果對不存儲操作的結(jié)果等)中的 任一個。替代地,如果需要在多于兩個的不同選項中進(jìn)行選擇,則可對每個標(biāo)志或元素使用 兩個或更多個比特。在圖2A的示例中,打包數(shù)據(jù)操作掩碼202包括十六個比特。十六個比 特中的每一個具有與源打包數(shù)據(jù)201的十六個相應(yīng)數(shù)據(jù)元素的有序?qū)?yīng)關(guān)系。例如,掩碼 202的三個最高階比特對應(yīng)于源打包數(shù)據(jù)201的相應(yīng)三個最高階數(shù)據(jù)元素。在替換實施例 中,其中源打包數(shù)據(jù)具有更少或更多的數(shù)據(jù)元素,打包數(shù)據(jù)操作掩碼可類似地具有更少或 更多的數(shù)據(jù)元素。
[0047] 根據(jù)所示的協(xié)定,當(dāng)給定的掩碼比特被置位(例如,1)時,打包數(shù)據(jù)操作的結(jié)果在 源打包數(shù)據(jù)的相應(yīng)數(shù)據(jù)元素上執(zhí)行,并且被存儲在打包數(shù)據(jù)結(jié)果的相應(yīng)數(shù)據(jù)元素中。相反, 當(dāng)給定的掩碼比特被清零(即,〇)時,對于源打包數(shù)據(jù)的對應(yīng)的數(shù)據(jù)元素省略(即不執(zhí)行) 打包數(shù)據(jù)操作,或者不允許將結(jié)果存儲在打包數(shù)據(jù)結(jié)果的相應(yīng)數(shù)據(jù)元素中。相反,可將另一 個值(由符號"X"指示)存儲在結(jié)果數(shù)據(jù)元素中。例如,存儲來自源打包數(shù)據(jù)的相應(yīng)數(shù)據(jù) 元素的數(shù)值。在替換實施例中,可將零或另一個預(yù)定值存儲在打包數(shù)據(jù)結(jié)果的對應(yīng)數(shù)據(jù)元 素中。與所示相反的協(xié)定也是可能的,其中比特被清零(即,〇)以允許存儲結(jié)果,或被置位 (即,1)以不允許存儲結(jié)果。
[0048] 在一些實施例中,掩碼掉(masked-off)元素(即、具有相應(yīng)的清零的掩碼比特的 數(shù)據(jù)元素)上的打包數(shù)據(jù)操作可任選地抑制或不引起異常(例如,異常標(biāo)志)或違犯。在 一些實施例中,對于具有存儲器操作數(shù)的經(jīng)掩碼打包數(shù)據(jù)指令,可任選地針對掩碼掉數(shù)據(jù) 元素抑制存儲器錯誤。該特征可有助于實現(xiàn)控制流斷言,因為掩碼可有效地提供合并狀態(tài) 打包數(shù)據(jù)寄存器,但不是必須的。
[0049] 應(yīng)當(dāng)理解,處理器可支持寬泛的各種不同類型的經(jīng)掩碼的打包數(shù)據(jù)操作。例如,這 些可包括僅具有一個源打包數(shù)據(jù)或具有兩個以上的源打包數(shù)據(jù)的操作、生成不同尺寸的結(jié) 果打包數(shù)據(jù)的操作、具有不同尺寸的數(shù)據(jù)元素的操作和/或具有不同的結(jié)果數(shù)據(jù)元素順序 的操作及其組合。
[0050] 圖3是具有執(zhí)行單元317的指令處理裝置315的示例實施例的框圖,該執(zhí)行單元 317可操作用于執(zhí)行包含PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C的示例 實施例的指令。在一些實施例中,指令處理裝置315可以是處理器,和/或可被包括在處理 器(例如,圖1的處理器100或類似裝置)中。替換地,指令處理裝置315可被包括在不同 的處理器或電子系統(tǒng)中。
[0051] 指令處理器裝置315接收PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C 中的一個或多個。可從存儲器、指令隊列、指令獲取單元或其它源接收指令。指令105AU05B 和105C中的每一個可表示機器指令、宏指令或指令處理裝置識別的控制信號。指令處理裝 置315可具有專用的或特定的電路或其它邏輯(例如,與硬件和/或固件結(jié)合的軟件),專 用的或特定的電路或其它邏輯可操作用于處理指令和/或響應(yīng)于指令的結(jié)果或按指令指 不存儲結(jié)果。
[0052] 指令處理裝置315的所示實施例包括指令解碼器,諸如圖1的解碼器129或一 個類似解碼器。解碼器129接收并解碼較高級的機器指令或宏指令,諸如所接收的指令 105A-105C。解碼器129可以生成并輸出一個或多個較低級的微操作、微代碼入口點、微指 令、或其他較低級的指令或控制信號,它們反映和/或來源于原始較高級的指令。一個或多 個較低級指令或控制信號可通過一個或多個較低級(例如,電路級或硬件級)操作來實現(xiàn) 較高級指令的操作。解碼器129可使用各種不同的機制來實現(xiàn)。合適機制的示例包括但不 限于微代碼、隨機存取存儲器(ROM)、查找表、硬件實現(xiàn)、可編程邏輯陣列(PLA)、用于實現(xiàn) 本領(lǐng)域已知的解碼器的其他機制等。
[0053] 或者,并非具有解碼器129,在一個或多個其它實施例中,指令處理裝置315相反 可具有指令仿真器、轉(zhuǎn)換器、變形器(morpher)、解釋器或者其他指令變換邏輯。各種不同類 型的指令變換邏輯在本領(lǐng)域中是已知的,并且可在軟件、硬件、固件、或者其組合中實現(xiàn)。指 令變換邏輯可接收指令105A-105C中的一個或多個,并且仿真、轉(zhuǎn)換、變形、解釋、或者以其 他方式將指令變換成一個或多個對應(yīng)的導(dǎo)出指令或控制信號。在又一個其它實施例中,指 令處理裝置315可具有解碼器和附加的指令變換邏輯。例如,指令處理裝置315可具有變 換邏輯,用以將指令105A-105C中的一個或多個變換成一個或多個中間指令,以及解碼器, 用以將一個或多個中間指令解碼成由指令處理裝置的本機硬件執(zhí)行的一個或多個較低級 的指令或控制信號。指令變換邏輯中的一些或全部可位于其余指令處理裝置的管芯外,諸 如在單獨的管芯上或在管芯外的存儲器中。
[0054] 再次參考圖3,指令處理裝置315還包括第一通用(GP)寄存器320和第二通用寄 存器321,第一通用(GP)寄存器320可操作用于存儲基址(即要對齊的陣列的開始地址), 第二通用(GP)寄存器321可操作用于存儲循環(huán)極限(即循環(huán)中迭代的總數(shù))。第一和第 二通用寄存器320和321可向PLCNT指令105A和PLMSK指令105B提供輸入。在一個實 施例中,指令處理器裝置315還包括第三通用寄存器322,其可操作用于存儲當(dāng)前的迭代計 數(shù)(指示矢量處理停止)。第二和第三通用寄存器321和322將輸入提供給KSUBREM指令 105C。如前所提及的,循環(huán)對齊指令可明確指定(例如,通過比特或一個或多個字段)或以 其它方式指示提供輸入和目的地的寄存器。PLCNT指令105A的目的地(PLCNT目的地323) 也是通用寄存器。PLMSK指令105B的目的地(PLMSK目的地324)是掩碼寄存器108之一。 KSUBREM指令105C的目的地(KSUBREM目的地325)也是掩碼寄存器108之一?;蛘撸康?地存儲位置可以是另一個寄存器或存儲器位置。
[0055] 在一些實施例中,PLCNT指令105A和PLMSK指令105B中的每一個指定或指示直 接數(shù)(immediate)值的附加操作數(shù)。直接數(shù)值表示對齊寬度。在替換實施例中,指令不指 定直接數(shù)值且替代地使用預(yù)定值(例如,下層微架構(gòu)允許的最大對齊寬度,諸如512比特) 作為對齊寬度。
[0056] 寄存器320-325可各自表示板上處理器存儲位置,諸如圖1的架構(gòu)寄存器106。寄 存器320-325對于軟件和/或編程器可見(例如,軟件可見)和/或可以是宏指令指示或 指定的寄存器以標(biāo)識操作數(shù)。寄存器320-325可使用公知技術(shù)在不同的微架構(gòu)中以不同的 方式實現(xiàn),并且不限于任何已知的特定類型的電路。多種不同類型的寄存器可適用,只要它 們能夠存儲并提供在此所述的數(shù)據(jù)。合適類型的寄存器的示例包括但不限于,專用物理寄 存器、使用寄存器重命名的動態(tài)分配的物理寄存器以及其組合。
[0057] 指令處理裝置315還包括執(zhí)行單元317。執(zhí)行單元317與寄存器320-325耦合。 執(zhí)行單元317還與解碼器129耦合。執(zhí)行單元317可從解碼器129接收一個或多個微操作、 微代碼進(jìn)入點、微指令、其他指令或其他控制信號,它們反映了 PLCNT指令105A、PLMSK指令 105B和KSUBREM指令105C或者是從該指令導(dǎo)出的。
[0058] 執(zhí)行單元317響應(yīng)于循環(huán)對齊指令中的每一個和/或作為循環(huán)對齊指令中的每一 個的結(jié)果,可操作用于在目的地中存儲結(jié)果。作為示例,執(zhí)行單元317可包括算術(shù)邏輯單 元、邏輯單元、算術(shù)單元、功能單元等。執(zhí)行單元317可包括可操作用于計算剝離迭代的數(shù) 量的循環(huán)對齊邏輯318。執(zhí)行單元317和/或循環(huán)對齊邏輯318可包括可操作用于實現(xiàn)指 令的操作(例如,執(zhí)行一個或多個微指令)的電路或其它執(zhí)行邏輯(例如,軟件、固件、硬件 或組合)。
[0059] 在一些實施例中,執(zhí)行單元可進(jìn)一步操作用于使目的地用于存儲掩碼的比特歸 零,或者給予這些比特另一個預(yù)定值。
[0060] 為了避免混淆描述,已示出和描述了相對簡單的指令處理裝置315。應(yīng)當(dāng)理解,其 他實施例可具有超過一個執(zhí)行單元。例如,裝置可包括多個不同類型的執(zhí)行單元,諸如例如 算術(shù)單元、算術(shù)邏輯單元(ALU)、整數(shù)單元、浮點單元等。這些單元中的至少一個可響應(yīng)于 如本文公開的循環(huán)對齊指令的實施例。指令處理裝置或處理器的再其他實施例可具有多個 核、邏輯處理器或執(zhí)行引擎。可操作用于執(zhí)行一個或多個循環(huán)對齊指令的執(zhí)行單元可被包 含在核、邏輯處理器或執(zhí)行引擎中的至少一個、至少兩個、大多數(shù)或全部中。
[0061] 指令處理裝置315或處理器還可以可任選地包括一個或多個其他已知的組件。例 如,其它實施例可包括指令獲取邏輯、調(diào)度邏輯、分支預(yù)測邏輯、指令和數(shù)據(jù)緩存、指令和數(shù) 據(jù)轉(zhuǎn)換后備緩沖器、預(yù)取緩沖器、微指令隊列、微指令定序器、總線接口單元、第二或更高級 緩存、指令調(diào)度邏輯、引退邏輯、寄存器重命名邏輯等中的一個或多個或它們的各種組合。 應(yīng)意識到實際上在處理器中存在這些組件的多種不同的組合和配置,并且本發(fā)明的范圍不 限于任意已知的這些組合配置。
[0062] 圖4是包括有形、非瞬態(tài)機器可讀(例如,機器可訪問)存儲介質(zhì)400的制品(例 如,計算機程序產(chǎn)品)的框圖,其存儲一個或多個循環(huán)對齊指令405 (例如,圖1的PLCNT指 令105A、PLMSK指令105B和/或KSUBREM指令105C)。將意識到還可將用于執(zhí)行如本文所 公開的一個或多個操作或方法的其它指令或指令序列(例如,利用循環(huán)對齊指令405的結(jié) 果作為斷言操作數(shù)的一個或多個指令、緊密附屬的標(biāo)量或打包數(shù)據(jù)指令或使用循環(huán)對齊指 令405的例程或算法)存儲在存儲介質(zhì)400上。
[0063] 在各實施例中,有形、非瞬態(tài)機器可讀存儲介質(zhì)400可包括軟盤、光存儲介 質(zhì)、光盤、CD-ROM、磁盤、磁光盤、只讀存儲器(ROM)、可編程ROM (PR0M)、可擦除可編程 ROM (EPROM)、電可擦除可編程ROM (EEPR0M)、隨機存取存儲器(RAM)、靜態(tài)RAM (SRAM)、動態(tài) RAM (DRAM)、閃存、相變存儲器或它們的組合。有形介質(zhì)可包括一個或多個固態(tài)有形材料,例 如半導(dǎo)體材料、相變材料、磁性材料、光盤的光學(xué)透明固體材料等等。
[0064] 適當(dāng)?shù)臋C器的示例包括但不限于指令處理設(shè)備、指令執(zhí)行設(shè)備、處理器以及具有 一個或多個指令處理設(shè)備、指令執(zhí)行設(shè)備或處理器的各種電子設(shè)備。這種電子設(shè)備的幾個 代表示例包括但不限于計算機系統(tǒng)、臺式機、膝上型計算機、筆記本、服務(wù)器、網(wǎng)絡(luò)設(shè)備、路 由器、開關(guān)、上網(wǎng)本、上網(wǎng)計算機、移動互聯(lián)網(wǎng)設(shè)備(MID)、蜂窩電話和媒體播放器。這樣的電 子設(shè)備通常包括與諸如例如一個或多個有形非瞬態(tài)機器可讀存儲介質(zhì)等的一個或多個其 他組件耦合的一個或多個處理器。處理器和其它組件的耦合一般是通過一個或多個總線和 橋(也稱總線控制器)達(dá)成的。因而,電子設(shè)備的存儲設(shè)備或存儲介質(zhì)可以存儲在該電子 設(shè)備的一個或多個處理器上執(zhí)行的指令和/或指令序列。
[0065] 圖5A是處理循環(huán)對齊指令(例如,圖1的PLCNT指令105A和/或PLMSK指令105B) 的示例實施例的方法500的示例實施例的流程框圖。在各實施例中,方法500的方法可由 通用處理器、專用處理器(例如,圖形處理器或數(shù)字信號處理器)、或另一種類型的數(shù)字邏 輯設(shè)備或指令處理裝置執(zhí)行。在一些實施例中,方法500可由圖1的處理器100、圖3的指 令處理裝置315或類似的處理器或指令處理裝置執(zhí)行?;蛘撸椒?00可由處理器或指令 處理裝置的不同實施例執(zhí)行。此外,圖1的處理器100和圖3的指令處理裝置315可執(zhí)行 與圖5A的方法500的操作和方法相同、類似或不同的操作和方法的實施例。
[0066] 方法500包括處理器接收循環(huán)對齊指令,諸如PLCNT指令105A或PLMSK指令 105B (框510)。循環(huán)對齊指令指定或指示第一源操作數(shù)、第二源操作數(shù)、陣列的目的地和數(shù) 據(jù)元素尺寸。在一個實施例中,第一源操作數(shù)指定其中存儲陣列的基址的第一寄存器,且第 二源操作數(shù)指定其中存儲循環(huán)極限(即,循環(huán)中迭代的總數(shù))的第二寄存器。在一些實施 例中,每個陣列數(shù)據(jù)元素的寬度由作為指令名稱的一部分的助記符號(mnemonic)指定(例 如,字節(jié)的數(shù)據(jù)元素寬度可由諸如PLCNTB和PLMSKB之類的指令的名稱指示)。在一些實施 例中,指令還指定或指示直接數(shù)值,即陣列要與之對齊的所要求的對齊寬度。在各個方面, 該指令可在處理器、指令處理裝置或者其一部分(例如,解碼器、指令變換器等)處接收。在 各個方面,循環(huán)對齊指令可從處理器外的源(例如,從主存儲器、盤、或總線或互連)或者從 處理器上的源(例如,從指令高速緩存)接收。
[0067] 然后,解碼循環(huán)對齊指令以供執(zhí)行(框520)??赏ㄟ^處理器內(nèi)的解碼器電路執(zhí)行 解碼。在一些實施例中,可變換循環(huán)對齊指令,用于由上述的指令變換邏輯結(jié)合圖3中示出 的解碼器129來解碼。
[0068] 在執(zhí)行循環(huán)對齊指令之后,將執(zhí)行的結(jié)果存儲在目的地中(框530)。該結(jié)果指示 在陣列的開始處的要與陣列的剩余部分分開處理的數(shù)據(jù)元素的數(shù)量。當(dāng)陣列的剩余部分的 基址(即,開始地址)與對齊寬度(諸如,所要求的對齊寬度)對齊時,實現(xiàn)循環(huán)對齊。 [0069] 在一個實施例中,結(jié)果指示數(shù)據(jù)元素的數(shù)量作為整數(shù)值(諸如在PLCNT指令105A 的情況下)。在另一個實施例中,結(jié)果指示數(shù)據(jù)元素的數(shù)量作為設(shè)定為預(yù)定值(例如,1)的 掩碼元素(諸如在PLMSK指令105B的情況下)。
[0070] 圖5B是處理循環(huán)對齊指令(例如,圖1的KSUBREM指令105C)的示例實施例的方 法550的示例實施例的流程框圖。在各實施例中,方法550的方法可由通用處理器、專用處 理器(例如,圖形處理器或數(shù)字信號處理器)、或另一種類型的數(shù)字邏輯設(shè)備或指令處理裝 置執(zhí)行。在一些實施例中,方法550可由圖1的處理器100、圖3的指令處理裝置315或類 似的處理器或指令處理裝置執(zhí)行。或者,方法550可由處理器或指令處理裝置的不同實施 例執(zhí)行。此外,圖1的處理器100和圖3的指令處理裝置315可執(zhí)行與圖5B的方法550的 操作和方法相同、類似或不同的操作和方法的實施例。
[0071] 方法550包括處理器接收循環(huán)對齊指令,諸如KSUBREM指令105C (框560)。循環(huán) 對齊指令指定或指示第一源操作數(shù)、第二源操作數(shù)、陣列的目的地和數(shù)據(jù)元素尺寸。在一個 實施例中,第一源操作數(shù)指定其中存儲當(dāng)前的迭代計數(shù)(即,循環(huán)的矢量處理處)的第一寄 存器,且第二源操作數(shù)指定其中存儲循環(huán)極限(即,循環(huán)中迭代的總數(shù))的第二寄存器。在 一些實施例中,每個陣列數(shù)據(jù)元素的寬度由作為指令名稱的一部分的助記符號(mnemonic) 指定(例如,字節(jié)的數(shù)據(jù)元素寬度可由諸如KSUMREMB之類的指令的名稱指示)。在各個方 面,該指令可在處理器、指令處理裝置或者其一部分(例如,解碼器、指令變換器等)處接 收。在各個方面,循環(huán)對齊指令可從處理器外的源(例如,從主存儲器、盤、或總線或互連) 或者從處理器上的源(例如,從指令高速緩存)接收。
[0072] 然后,解碼循環(huán)對齊指令以供執(zhí)行(框570)??赏ㄟ^處理器內(nèi)的解碼器電路執(zhí)行 解碼。在一些實施例中,可變換循環(huán)對齊指令,用于由上述的指令變換邏輯結(jié)合圖3中示出 的解碼器129來解碼。
[0073] 在執(zhí)行循環(huán)對齊指令之后,將執(zhí)行的結(jié)果存儲在目的地(框580)。該結(jié)果指示在 陣列的末端處的要與陣列的在前部分分開處理的數(shù)據(jù)元素的數(shù)量。陣列的在前部分的末端 是矢量處理停止且當(dāng)前迭代計數(shù)被記錄的位置。
[0074] 在一個實施例中,結(jié)果指示數(shù)據(jù)元素的數(shù)量作為設(shè)定為預(yù)定值(例如,1)的掩碼 元素(諸如在KSUBREM指令105C的情況下)。在替代實施例中,結(jié)果還可指示數(shù)據(jù)元素的 數(shù)量作為整數(shù)值。
[0075] 所示的方法包括從處理器或指令處理裝置外部可見的操作(例如,從軟件觀點)。 在其它實施例中,方法可任選地包括一個或多個其它操作(例如,在處理器或指令處理器 裝置內(nèi)部發(fā)生的一個或多個操作)。作為示例,在接收到指令之后,可將指令解碼、轉(zhuǎn)換、仿 真或以其它方式變換成一個或多個其它指令或控制信號。可訪問和/或接收第一和第二源 操作數(shù)。可啟用執(zhí)行單元以根據(jù)指令生成或執(zhí)行循環(huán)對齊,并且可生成或執(zhí)行循環(huán)對齊。
[0076] 圖6是示出對于對齊寬度和打包數(shù)據(jù)元素寬度的不同組合由PLMSK指令105B和 KSUBREM指令105C生成的打包數(shù)據(jù)操作掩碼比特的數(shù)量的表600。打包數(shù)據(jù)操作掩碼比特 的數(shù)量是給定的對齊寬度和給定的打包數(shù)據(jù)(例如陣列)元素寬度之比。示出了 64比特、 128比特、256比特以及512比特的對齊寬度,雖然其他尺寸也是可以的??紤]了 8比特字 節(jié)(B)、16比特字(W)、32比特雙字⑶或單精度浮點以及64比特四倍字(Q)或雙精度浮 點的打包數(shù)據(jù)元素寬度,雖然其他寬度也是可能的。
[0077] 圖7是一組掩碼寄存器700 (諸如,圖1的掩碼寄存器108)的示例實施例的框圖。 掩碼寄存器700中的每一個可用于存儲打包數(shù)據(jù)操作掩碼(諸如存儲在PLMSK目的地324 和KSUBREM目的地325中的掩碼)。在所例示的實施例中,該組包括標(biāo)示為K0至k7的八個 掩碼寄存器。替代的實施例可包括比八個更少(例如,兩個、四個、六個等)或比八個更多 (例如,十六個、二十個、三十二個等)打包數(shù)據(jù)運算掩碼寄存器。在所例示的實施例中,掩 碼寄存器700中的每一個為64比特寬。在替代實施例中,掩碼寄存器700的寬度可以比64 比特更寬(例如,80比特,128比特等)或比64比特更窄(例如,8比特、16比特、32比特 等)。掩碼寄存器700可使用公知技術(shù)以不同方式實現(xiàn),并且不限于任何已知的特定類型的 電路。多種不同類型的寄存器可適用,只要它們能夠存儲并提供在此所述的數(shù)據(jù)。合適寄 存器的示例包括但不限于,專用物理寄存器、使用寄存器重命名的動態(tài)分配的物理寄存器、 以及其組合。
[0078] 在一些實施例中,掩碼寄存器700可以是分開的專用架構(gòu)寄存器集合。在一些實 施例中,與用于編碼或指定其它類型的寄存器(例如,圖1的掩碼寄存器108)相比,指令可 在指令格式的不同比特或一個或多個不同字段組合中編碼或指定掩碼寄存器。作為示例, 經(jīng)掩碼的打包數(shù)據(jù)指令可使用三個比特(例如,3比特字段)來編碼或指定八個打包數(shù)據(jù) 操作掩碼寄存器k0至k7中的任一個。在替代實施例中,在分別有更少或更多打包數(shù)據(jù)操 作掩碼寄存器時,可使用更少或更多比特。在一個特定實現(xiàn)中,僅掩碼寄存器kl至k7 (而 非k0)可被尋址作為用于斷言經(jīng)掩碼的打包數(shù)據(jù)操作的斷言操作數(shù)。寄存器k0可被用作 常規(guī)源或目的地,但是可能不被編碼為斷言操作數(shù)(例如,如果k0被指定,則其具有全一或 "無掩碼"編碼)。在其他實施例中,寄存器中的全部或僅一些可被編碼為斷言操作數(shù)。
[0079] 在一些實施例中,寄存器700的最低階子集或部分被用于進(jìn)行掩碼,但是并不要 求如此。如圖6所示,當(dāng)對齊寬度是128比特且數(shù)據(jù)元素寬度是8比特時,使用16個掩碼 比特。這些16個掩碼比特可以是存儲在寄存器700之一(例如kl)中的最低階的16個比 特。K1的最高階部分可被置位為0或其它預(yù)定值。在替代實施例中,可任選地使用最高階 子集或某一其他子集。
[0080] 圖8A-8C分別示出PLCNT指令105A、PLMSK指令105B和KSUBREM指令105C的實 施例以及其操作。每個指令的名稱可具有附加到其上的助記符號B/W/D/Q;例如,B(8比 特)、W(16比特)、D (32比特)或Q(64比特)。在這些圖中,rax、rbx、rex標(biāo)識通用寄存 器,而kl表示掩碼寄存器。在圖8A和8B(PLCNT和PLMSK)的示例中,rax(存儲SRC1)是具 有陣列的基址的第一源操作數(shù),rex (存儲SRC2)是具有循環(huán)極限的第二源操作數(shù),rax (存 儲DEST)表示結(jié)果的目的地。VL表示按字節(jié)的所請求的對齊寬度,w表示陣列中的每個數(shù) 據(jù)元素的寬度(即,1、2、4或8字節(jié),如由附加到指令名稱的B/W/D/Q所指示的)。在一些 實施例中,指令指定可用于設(shè)定VL的值的直接數(shù)(immediate);例如00、01和10,它們可分 別表示128比特、256比特、512比特。直接數(shù)值的一些可被保留;例如,11可表示1024比 特。應(yīng)理解可將任意不同的直接數(shù)值用于表示不同的對齊寬度。在替換實施例中,指令不 指定直接數(shù)且替代地使用預(yù)定值(例如,下層微架構(gòu)允許的最大對齊寬度,諸如512比特) 作為VL的值。此外,在圖8A和8B的示例中,對齊_迭代表示達(dá)到對齊的迭代的數(shù)量。該 數(shù)量小于SRC2中指定的迭代極限。在圖2A的示例中,該數(shù)量是3。
[0081] 如圖所示,PLCNT指令返回與對齊_迭代和SRC2 (迭代極限)的最小值對應(yīng)的計 數(shù)。PLMSK指令返回等價于PLCNT返回的計數(shù)的打包數(shù)據(jù)操作掩碼。圖8B的示例示出可通 過將值1移位η個比特然后減1生成的掩碼,其中η表示計數(shù)(可由PLCNT生成)。將所得 到的掩碼存儲在目的地中,目的地可以是圖7的打包數(shù)據(jù)操作掩碼寄存器700之一。應(yīng)理 解本文的示例是說明性的且非限制性的,因為有多種不同的方式來實現(xiàn)PLCNT和PLMSK。
[0082] 在圖8C的示例(KSUBREM)中,rax(存儲SRC1)是具有循環(huán)極限的第一源操作數(shù), rex (存儲SRC2)是具有循環(huán)的循環(huán)極限的第二源操作數(shù),rax (存儲DEST)表示結(jié)果的目的 地。VL此處表示矢量元素的數(shù)量,且剩余_迭代表示VL的最小值以及SRC2和SRC1之差。 所得到的掩碼可通過使值1移位η個比特然后減1來生成,其中η是剩余_迭代的值。 [0083] 本文公開的循環(huán)對齊指令是具有一般用途的通用指令。例如,這些指令可單獨地 或與其它指令組合地使用以計算剝離迭代的數(shù)量。在一些實施例中,本文公開的循環(huán)對齊 指令可與緊密附屬的或相關(guān)聯(lián)的打包數(shù)據(jù)指令結(jié)合使用以優(yōu)化循環(huán)操作的執(zhí)行。還基于本 公開構(gòu)想到其它使用。
[0084] 示例性計算機系統(tǒng)和處理器-圖9-13
[0085] 圖9-13是示例性計算機系統(tǒng)和處理器。本領(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è)備一般都是合適 的。
[0086] 現(xiàn)在參考圖9,所示出的是根據(jù)本發(fā)明實施例的系統(tǒng)1300的框圖。系統(tǒng)1300可包 括耦合至圖形存儲器控制器中樞(GMCH) 1320的一個或多個處理器1310、1310。附加處理器 1315的可選性質(zhì)用虛線表示在圖9中。
[0087] 每一處理器1310U315可以是處理器1700的某種版本。然而,應(yīng)該注意,集成圖 形邏輯和集成存儲器控制單元未必存在于處理器1310、1315中。
[0088] 圖9示出GMCH1320可耦合至存儲器1340,該存儲器1340可以是例如動態(tài)隨機存 取存儲器(DRAM)。對于至少一個實施例,DRAM可以與非易失性緩存相關(guān)聯(lián)。
[0089] GMCH1320可以是芯片組或芯片組的一部分。GMCH1320可以與(多個)處理器 1310、1315進(jìn)行通信,并控制處理器1310、1315與存儲器1340之間的交互。GMCH1320還 可擔(dān)當(dāng)(多個)處理器1310、1315和系統(tǒng)1300的其它元件之間的加速總線接口。對于至 少一個實施例,GMCH1320經(jīng)由諸如前端總線(FSB) 1395之類的多站總線與(多個)處理器 1310、1315進(jìn)行通信。
[0090] 此外,GMCH1320耦合至顯示器1345(諸如平板顯示器)。GMCH1320可包括集成圖 形加速器。GMCH1320還耦合至輸入/輸出(I/O)控制器中樞(ICH) 1350,該輸入/輸出(1/ 0)控制器中樞(ICH) 1350可用于將各種外圍設(shè)備耦合至系統(tǒng)1300。在圖9的實施例中作 為示例示出了外部圖形設(shè)備1360以及另一外圍設(shè)備1370,該外部圖形設(shè)備1360可以是耦 合至ICH1350的分立圖形設(shè)備。
[0091] 替代地,系統(tǒng)1300中還可存在附加或不同的處理器。例如,附加(多個)處理器 1315可包括與處理器1310相同的附加(多個)處理器、與處理器1310異類或不對稱的附 加(多個)處理器、加速器(諸如圖形加速器或數(shù)字信號處理(DSP)單元)、現(xiàn)場可編程門 陣列或任何其它處理器。按照包括架構(gòu)、微架構(gòu)、熱、功耗特征等等優(yōu)點的度量譜,(多個) 物理資源1310、1315之間存在各種差別。這些差別會有效顯示為處理元件1310、1315之間 的不對稱性和異類性。對于至少一個實施例,各種處理元件1310U315可駐留在同一管芯 封裝中。
[0092] 現(xiàn)在參照圖10,所示出的是根據(jù)本發(fā)明一實施例的第二系統(tǒng)1400的框圖。如圖 10所示,多處理器系統(tǒng)1400是點對點互連系統(tǒng),且包括經(jīng)由點對點互連1450耦合的第一處 理器1470和第二處理器1480。如圖10所示,處理器1470和1480中的每個可以是處理器 1700的某一版本。
[0093] 替代地,處理器1470U480中的一個或多個可以是除處理器之外的元件,諸如加 速器或現(xiàn)場可編程門陣列。
[0094] 雖然僅以兩個處理器1470U480來示出,但應(yīng)理解本發(fā)明的范圍不限于此。在其 它實施例中,在給定處理器中可存在一個或多個附加處理元件。
[0095] 處理器1470還可包括集成存儲器控制器中樞(MC) 1472和點對點(P-P)接口 1476和1478。類似地,第二處理器1480包括頂C1482和P-P接口 1486和1488。處理器 1470、1480可以經(jīng)由使用點對點(PtP)接口電路1478、1488的點對點(PtP)接口 1450來交 換數(shù)據(jù)。如圖10所示,頂C1472和1482將處理器耦合到相應(yīng)的存儲器,即存儲器1442和 存儲器1444,這些存儲器可以是本地附連到相應(yīng)處理器的主存儲器部分。
[0096] 處理器1470、1480可各自經(jīng)由使用點對點接口電路1476、1494、1486、1498的各個 P-P接口 1452、1454與芯片組1490交換數(shù)據(jù)。芯片組1490還可經(jīng)由高性能圖形接口 1439 與高性能圖形電路1438交換數(shù)據(jù)。
[0097] 共享高速緩存(未示出)可以被包括在任一處理器之內(nèi)或被包括兩個處理器外部 但仍經(jīng)由P-P互連與這些處理器連接,從而如果將某處理器置于低功率模式時,可將任一 處理器或兩個處理器的本地高速緩存信息存儲在該共享高速緩存中。
[0098] 芯片組1490可經(jīng)由接口 1496耦合至第一總線1416。在一個實施例中,第一總線 1416可以是外圍部件互連(PCI)總線,或諸如PCI Express總線或其它第三代I/O互連總 線之類的總線,但本發(fā)明的范圍并不受此限制。
[0099] 如圖10所示,各種I/O設(shè)備1414可連同總線橋1418 -起耦合到第一總線1416, 總線橋1418將第一總線1416耦合到第二總線1420。在一個實施例中,第二總線1420可以 是低引腳數(shù)(LPC)總線。在一個實施例中,多個設(shè)備可以耦合到第二總線1420,包括例如鍵 盤和/或鼠標(biāo)1422、通信設(shè)備1426以及可以包括代碼1430的諸如盤驅(qū)動器或其它海量存 儲設(shè)備的數(shù)據(jù)存儲單元1428。進(jìn)一步地,音頻1/01424可以耦合到第二總線1420。注意, 其它體系結(jié)構(gòu)是可能的。例如,代替圖10的點對點架構(gòu),系統(tǒng)可實現(xiàn)多點總線或者其他此 類架構(gòu)。
[0100] 現(xiàn)在參照圖11,所示出的是根據(jù)本發(fā)明實施例的第三系統(tǒng)1500的框圖。圖10和 11中的類似元件使用類似附圖標(biāo)記,且在圖11中省略了圖10的某些方面以避免混淆圖11 的其它方面。
[0101] 圖11示出處理元件1470、1480可分別包括集成存儲器和I/O控制邏輯("L") 1472 和1482。對于至少一個實施例,CL1472、1482可包括諸如以上結(jié)合圖8、9和14所描述的存 儲器控制器中樞邏輯(MC)。此外。CL1472U482還可包括I/O控制邏輯。圖15不僅解說 了耦合至CL1472、1482的存儲器1442、1444,而且還解說了同樣耦合至控制邏輯1472、1482 的I/O設(shè)備1514。傳統(tǒng)I/O設(shè)備1515被耦合至芯片組1490。
[0102] 現(xiàn)在參考圖12,所示為根據(jù)本發(fā)明的一實施例的S〇C1600的框圖。圖13中的類似 元件具有相似的附圖標(biāo)記。另外,虛線框是更先進(jìn)的SoC的可選特征。在圖12中,互連單 元1602被耦合至:應(yīng)用處理器1610,包括一個或多個核1702A-N的集合和共享高速緩存單 元1706 ;系統(tǒng)代理單元1710 ;總線控制器單元1716 ;集成存儲器控制器單元1714 ;-個或 多個媒體處理器1620的集合,可包括集成圖形邏輯1708、用于提供靜態(tài)和/或視頻照相機 功能的圖像處理器1624、用于提供硬件音頻加速的音頻處理器1626、以及用于提供視頻編 碼/解碼加速的視頻處理器1628 ;靜態(tài)隨機存取存儲器(SRAM)單元1630 ;直接存儲器存取 (DMA)單元1632 ;以及顯示單元1640,用于耦合至一個或多個外部顯示器。
[0103] 本文公開的機制的各實施例可以被實現(xiàn)在硬件、軟件、固件或這些實現(xiàn)方法的組 合中。本發(fā)明的實施例可實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序或程序代碼,該可編程 系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至 少一個輸入設(shè)備以及至少一個輸出設(shè)備。
[0104] 可將程序代碼應(yīng)用至輸入數(shù)據(jù)以執(zhí)行本文描述的功能并產(chǎn)生輸出信息。輸出信息 可以按已知方式被應(yīng)用于一個或多個輸出設(shè)備。為了本申請的目的,處理系統(tǒng)包括具有諸 如例如數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器之類的處理器 的任何系統(tǒng)。
[0105] 程序代碼可以用高級程序化語言或面向?qū)ο蟮木幊陶Z言來實現(xiàn),以便與處理系統(tǒng) 通信。程序代碼也可以在需要的情況下用匯編語言或機器語言來實現(xiàn)。事實上,本文中描 述的機制不僅限于任何特定編程語言的范圍。在任一情形下,語言可以是編譯語言或解釋 語目。
[0106] 至少一個實施例的一個或多個方面可以通過存儲在機器可讀介質(zhì)上的代表性的 指令來實現(xiàn),指令表示處理器內(nèi)的各種邏輯,指令在由機器讀取時使機器制造執(zhí)行此處所 描述的技術(shù)的邏輯。被稱為"IP核"的這些表示可以被存儲在有形的機器可讀介質(zhì)上,并被 提供給多個客戶或生產(chǎn)設(shè)施以加載到實際制造該邏輯或處理器的制造機器中。
[0107] 此類機器可讀存儲介質(zhì)可包括但不限于通過機器或設(shè)備制造或形成的非易 失性的粒子有形排列,包括存儲介質(zhì),諸如:硬盤;包括軟盤、光盤、壓縮盤只讀存儲器 (CD-ROM)、可重寫壓縮盤(CD-RW)以及磁光盤的任何其它類型的盤;諸如只讀存儲器(ROM) 之類的半導(dǎo)體器件;諸如動態(tài)隨機存取存儲器(DRAM)、靜態(tài)隨機存取存儲器(SRAM)之類的 隨機存取存儲器(RAM);可擦除可編程只讀存儲器(EPROM);閃存;電可擦除可編程只讀存 儲器(EEPR0M);磁卡或光卡;或適于存儲電子指令的任何其它類型的介質(zhì)。
[0108] 因此,本發(fā)明的各實施例還包括非瞬態(tài)、有形機器可讀介質(zhì),該介質(zhì)包含矢量友好 指令格式的指令或包含設(shè)計數(shù)據(jù),諸如硬件描述語言(HDL),它定義本文中描述的結(jié)構(gòu)、電 路、裝置、處理器和/或系統(tǒng)特性。這些實施例也被稱為程序產(chǎn)品。
[0109] 在某些情況下,指令轉(zhuǎn)換器可用來將指令從源指令集轉(zhuǎn)換至目標(biāo)指令集。例如,指 令轉(zhuǎn)換器可以變換(例如使用靜態(tài)二進(jìn)制變換、包括動態(tài)編譯的動態(tài)二進(jìn)制變換)、變形、 仿真或以其它方式將指令轉(zhuǎn)換成將由核來處理的一個或多個其它指令。指令轉(zhuǎn)換器可以用 軟件、硬件、固件、或其組合實現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或者部分在處 理器上部分在處理器外。
[0110] 圖14是根據(jù)本發(fā)明的各實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn) 制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。在所示的實施例中,指令轉(zhuǎn)換器是軟件 指令轉(zhuǎn)換器,但作為替代該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來實現(xiàn)。圖13 示出可以使用x86編譯器1804來編譯高級語言1802的程序,以便生成可以由具有至少一 個x86指令集核1816的處理器本地執(zhí)行的x86二進(jìn)制代碼1806(假設(shè)指令中的一些是以 矢量友好指令格式編譯)。具有至少一個x86指令集核1816的處理器表示任何處理器,該 處理器能夠通過兼容地執(zhí)行或以其它方式處理(1)英特爾x86指令集核的指令集的大部分 或(2)旨在具有至少一個x86指令集核的英特爾處理器上運行的應(yīng)用或其它軟件的目標(biāo)代 碼版本來執(zhí)行與具有至少一個x86指令集核的英特爾處理器基本相同的功能,以實現(xiàn)與具 有至少一個x86指令集核的英特爾處理器基本相同的結(jié)果。x86編譯器1804表示用于生成 x86二進(jìn)制代碼1806 (例如,對象代碼)的編譯器,該二進(jìn)制代碼1806可通過或不通過附加 的鏈接處理在具有至少一個x86指令集核1816的處理器上執(zhí)行。類似地,圖14示出高級語 言1802的程序可使用替換指令集編譯器1808來編譯以生成替換指令集二級制代碼1810, 替換指令集二級制代碼1810可由不具有至少一個x86指令集核的處理器1814 (諸如,具有 執(zhí)行加利福尼亞州桑尼威爾的MIPS技術(shù)公司的MIPS指令集的處理器和/或執(zhí)行加利福尼 亞州桑尼威爾的ARM控股公司的ARM指令集的處理器)來本地執(zhí)行。指令轉(zhuǎn)換器1812被 用來將x86二進(jìn)制代碼1806轉(zhuǎn)換成可以由不具有x86指令集核1814的處理器原生執(zhí)行的 代碼。該轉(zhuǎn)換后的代碼不大可能與替換性指令集二進(jìn)制代碼1810相同,因為能夠這樣做的 指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將完成一般操作并由來自替換性指令集的指令 構(gòu)成。因此,指令轉(zhuǎn)換器1812通過仿真、模擬或任何其它過程來表示允許不具有x86指令 集處理器或核的處理器或其它電子設(shè)備執(zhí)行x86二進(jìn)制代碼1806的軟件、固件、硬件或其 組合。
[0111] 本文公開的矢量友好指令格式的指令的某些操作可由硬件組件執(zhí)行,且可體現(xiàn)在 機器可執(zhí)行指令中,該指令用于導(dǎo)致或至少致使電路或其它硬件組件以執(zhí)行該操作的指令 編程。電路可包括通用或?qū)S锰幚砥?、或邏輯電路,這里僅給出幾個示例。這些操作還可任 選地由硬件和軟件的組合執(zhí)行。執(zhí)行邏輯和/或處理器可包括響應(yīng)于從機器指令導(dǎo)出的機 器指令或一個或多個控制信號以存儲指令指定的結(jié)果操作數(shù)的專用或特定電路或其它邏 輯。例如,本文公開的指令的實施例可在圖9-13的一個或多個系統(tǒng)中執(zhí)行,且矢量友好指 令格式的指令的實施例可存儲在將在系統(tǒng)中執(zhí)行的程序代碼中。另外這些附圖的處理元件 可利用本文詳細(xì)描述的詳細(xì)描述的流水線和/或架構(gòu)(例如有序和無序架構(gòu))之一。例如, 有序架構(gòu)的解碼單元可解碼指令、將經(jīng)解碼的指令傳送到矢量或標(biāo)量單元等。
[0112] 上述描述旨在說明本發(fā)明的優(yōu)選實施例。根據(jù)上述討論,還應(yīng)當(dāng)顯而易見的是,在 發(fā)展迅速且進(jìn)一步的進(jìn)展難以預(yù)見的此【技術(shù)領(lǐng)域】中,本領(lǐng)域技術(shù)人員可在安排和細(xì)節(jié)上對 本發(fā)明進(jìn)行修改,而不背離落在所附權(quán)利要求及其等價方案的范圍內(nèi)的本發(fā)明的原理。例 如,方法的一個或多個操作可組合或進(jìn)一步分開。
[0113] 可選實施例
[0114] 盡管已經(jīng)描述了將本地執(zhí)行矢量友好指令格式的實施例,但本發(fā)明的可選實施例 可通過運行在執(zhí)行不同指令集的處理器(例如,執(zhí)行美國加利福亞州桑尼維爾的MIPS技術(shù) 公司的MIPS指令集的處理器、執(zhí)行加利福亞州桑尼維爾的ARM控股公司的ARM指令集的處 理器)上的仿真層來執(zhí)行矢量友好指令格式。同樣,盡管附圖中的流程圖示出本發(fā)明的某 些實施例的特定操作順序,按應(yīng)理解該順序是示例性的(例如,可選實施例可按不同順序 執(zhí)行操作、組合某些操作、使某些操作重疊等)。
[0115] 在以上描述中,為解釋起見,闡明了眾多具體細(xì)節(jié)以提供對本發(fā)明的實施例的透 徹理解。然而,將對本領(lǐng)域技術(shù)人員明顯的是,沒有這些具體細(xì)節(jié)中的一些也可實踐一個或 多個其他實施例。提供所描述的具體實施例不是為了限制本發(fā)明而是為了說明本發(fā)明的實 施例。本發(fā)明的范圍不是由所提供的具體示例確定,而是僅由所附權(quán)利要求確定。
[0116] 應(yīng)當(dāng)理解,以上描述旨在是說明性的而非限制性的。在閱讀并理解以上描述之后, 許多其它實施方式對本領(lǐng)域內(nèi)技術(shù)人員而言將是顯而易見的。因此,本發(fā)明的范圍應(yīng)參考 所附權(quán)利要求書以及使這些權(quán)利要求享有權(quán)利的等效方案的完全范圍來確定。
【權(quán)利要求】
1. 一種方法,包括: 由處理器接收循環(huán)剩余掩碼指令,所述循環(huán)剩余掩碼指令指示循環(huán)的當(dāng)前迭代計數(shù)作 為第一操作數(shù)、循環(huán)極限作為第二操作數(shù)以及目的地,其中所述循環(huán)包含多次迭代,且在每 次迭代中陣列的數(shù)據(jù)元素被處理; 解碼所述循環(huán)剩余掩碼指令以供執(zhí)行;以及 將執(zhí)行的結(jié)果存儲在目的地中,所述結(jié)果指示所述陣列中在陣列的在前部分的末端之 后的要與所述在前部分分開處理的數(shù)據(jù)元素的數(shù)量,在前部分的末端是記錄當(dāng)前迭代計數(shù) 的位置。
2. 如權(quán)利要求1所述的方法,其特征在于,循環(huán)剩余掩碼指令的結(jié)果是 具有設(shè)定為預(yù)定值的若干掩碼元素的打包數(shù)據(jù)操作掩碼,設(shè)定的掩碼元素中的每一個 對應(yīng)于所述陣列中要與所述陣列的在前部分分開處理的數(shù)據(jù)元素之一。
3. 如權(quán)利要求2所述的方法,其特征在于,掩碼元素中的每一個是比特。
4. 如權(quán)利要求1所述的方法,其特征在于,所述循環(huán)剩余掩碼指令通過助記符號 (mnemonic)標(biāo)識陣列的數(shù)據(jù)元素的寬度。
5. 如權(quán)利要求1所述的方法,其特征在于,所述對齊寬度是處理器處理打包數(shù)據(jù)所使 用的數(shù)據(jù)存儲的寬度。
6. 如權(quán)利要求1所述的方法,其特征在于,所述陣列中要與陣列的在前部分分開處理 的數(shù)據(jù)元素的總數(shù)量大小小于對齊寬度。
7. -種設(shè)備,包括: 存儲循環(huán)的當(dāng)前迭代計數(shù)的第一寄存器; 存儲循環(huán)極限的第二寄存器,其中所述循環(huán)包含多次迭代,且在每次迭代中陣列的數(shù) 據(jù)元素被處理; 與第一寄存器和第二寄存器耦合的解碼器,作為指示第一寄存器、第二寄存器和目的 地的循環(huán)剩余掩碼指令的結(jié)果,所述解碼器操作用以解碼循環(huán)剩余掩碼指令以供執(zhí)行;以 及 與解碼器耦合的執(zhí)行單元,所述執(zhí)行單元操作用于將所述循環(huán)剩余掩碼指令的結(jié)果存 儲在目的地中,所述結(jié)果指示所述陣列中在陣列的在前部分的末端之后的要與所述在前部 分分開處理的數(shù)據(jù)元素的數(shù)量,在前部分的末端是記錄當(dāng)前迭代計數(shù)的位置。
8. 如權(quán)利要求7所述的設(shè)備,其特征在于,循環(huán)剩余掩碼指令的結(jié)果是 具有設(shè)定為預(yù)定值的若干掩碼元素的打包數(shù)據(jù)操作掩碼,設(shè)定的掩碼元素中的每一個 對應(yīng)于所述陣列中要與所述陣列的在前部分分開處理的數(shù)據(jù)元素之一。
9. 如權(quán)利要求8所述的設(shè)備,其特征在于,掩碼元素中的每一個是比特。
10. 如權(quán)利要求7所述的設(shè)備,其特征在于,所述循環(huán)剩余掩碼指令通過助記符號 (mnemonic)標(biāo)識陣列的數(shù)據(jù)元素的寬度。
11. 如權(quán)利要求7所述的設(shè)備,其特征在于,所述對齊寬度是處理器處理打包數(shù)據(jù)所使 用的數(shù)據(jù)存儲的寬度。
12. 如權(quán)利要求7所述的設(shè)備,其特征在于,所述陣列中要與陣列的在前部分分開處理 的數(shù)據(jù)元素的總數(shù)量大小小于對齊寬度。
13. -種系統(tǒng),包括: 互連; 與所述互連耦合的處理器,所述處理器包括: 存儲循環(huán)的當(dāng)前迭代計數(shù)的第一寄存器、存儲循環(huán)極限的第二寄存器,其中所述循環(huán) 包含多次迭代,且在每次迭代中陣列的數(shù)據(jù)元素被處理; 與第一寄存器和第二寄存器耦合的解碼器,作為指示第一寄存器、第二寄存器和目的 地的循環(huán)剩余掩碼指令的結(jié)果,所述解碼器操作用以解碼循環(huán)剩余掩碼指令以供執(zhí)行;以 及 與解碼器耦合的執(zhí)行單元,所述執(zhí)行單元操作用于將所述循環(huán)剩余掩碼指令的結(jié)果存 儲在目的地中,所述結(jié)果指示所述陣列中在陣列的在前部分的末端之后的要與所述在前部 分分開處理的數(shù)據(jù)元素的數(shù)量,在前部分的末端是記錄當(dāng)前迭代計數(shù)的位置;以及 耦合到所述互連的動態(tài)隨機存取存儲器(DRAM)。
14. 如權(quán)利要求13所述的系統(tǒng),其特征在于,循環(huán)剩余掩碼指令的結(jié)果是 具有設(shè)定為預(yù)定值的若干掩碼元素的打包數(shù)據(jù)操作掩碼,設(shè)定的掩碼元素中的每一個 對應(yīng)于所述陣列中要與所述陣列的在前部分分開處理的數(shù)據(jù)元素之一。
15. 如權(quán)利要求14所述的系統(tǒng),其特征在于,掩碼元素中的每一個是比特。
16. 如權(quán)利要求13所述的系統(tǒng),其特征在于,所述循環(huán)剩余掩碼指令通過助記符號標(biāo) 識陣列的數(shù)據(jù)元素的寬度。
17. 如權(quán)利要求13所述的系統(tǒng),其特征在于,所述對齊寬度是處理器處理打包數(shù)據(jù)所 使用的數(shù)據(jù)存儲的寬度。
18. 如權(quán)利要求13所述的系統(tǒng),其特征在于,所述陣列中要與陣列的在前部分分開處 理的數(shù)據(jù)元素的總數(shù)量大小小于對齊寬度。
【文檔編號】G06F9/30GK104115113SQ201180075242
【公開日】2014年10月22日 申請日期:2011年12月14日 優(yōu)先權(quán)日:2011年12月14日
【發(fā)明者】E·烏爾德-阿邁德-瓦爾, R·凡倫天, J·考博爾, A·納賴金, S·賽爾, A·哈吉爾, M·B·吉爾卡爾, B·L·托爾, M·J·查尼 申請人:英特爾公司