使用混洗表和混合表經(jīng)由矢量指令優(yōu)化程序循環(huán)的方法
【專利摘要】根據(jù)一種實施例,一種代碼優(yōu)化器被配置為接收第一代碼,該第一代碼具有以標(biāo)量指令實現(xiàn)的程序循環(huán),用于基于第三數(shù)組的值把第一數(shù)組的值存儲到第二數(shù)組,并生成第二代碼,該第二代碼用至少一個矢量指令來表示程序循環(huán)。該第二代碼包括混洗指令、混合指令和存儲指令,該混洗指令以矢量方式使用混洗表基于第三數(shù)組混洗第一數(shù)組的元素,該混合指令以矢量方式使用混合表混合第一數(shù)組的已混洗的元素,該存儲指令把第一數(shù)組的已混合元素存儲在第二數(shù)組中。
【專利說明】使用混洗表和混合表經(jīng)由矢量指令優(yōu)化程序循環(huán)的方法
發(fā)明領(lǐng)域
[0001]本發(fā)明的各實施例通常涉及程序循環(huán)的優(yōu)化。尤其,本發(fā)明的各實施例涉及使用混洗表和混合表經(jīng)由矢量指令優(yōu)化程序循環(huán)。
[0002]背景
[0003]幾乎所有數(shù)據(jù)處理應(yīng)用都涉及必須對數(shù)據(jù)集合迭代地執(zhí)行的操作。這樣的程序循環(huán)可以包括任何數(shù)量的指令,且可以迭代根據(jù)計算機程序確定的任何次數(shù)。很常見的情況是,基于第三數(shù)組的條件把第一數(shù)組的值賦值給第二數(shù)組。通常,為了實現(xiàn)這樣的操作,取決于第三數(shù)組的相應(yīng)元素,利用程序循環(huán)來把第一數(shù)組的元素迭代地賦值給第二數(shù)組的元素,以標(biāo)量方式每次一個元素地進(jìn)行,如圖3中所示的。
[0004]在如圖3中所示出的示例中,基于數(shù)組b[]的相應(yīng)元素的值或條件,在程序循環(huán)中每次一個元素地把數(shù)組a[]的元素賦值給數(shù)組dest[]。然而,因為由處理器執(zhí)行的大量的迭代和指令,這樣的實現(xiàn)是低效的。
[0005]附圖簡述
[0006]作為示例而非限制,在附圖的各圖中闡釋本發(fā)明的各實施例,附圖中,類似的標(biāo)號指示相似的元素。
[0007]圖1是闡釋根據(jù)一種實施例的代碼優(yōu)化器的框圖。
[0008]圖2是闡釋根據(jù)一種實施例優(yōu)化程序代碼的方法的流程圖。
[0009]圖3是表示典型程序循環(huán)的偽代碼。
[0010]圖4是根據(jù)一種實施例用高級矢量指令表示程序循環(huán)的偽代碼。
[0011]圖5是闡釋根據(jù)一種實施例存儲混洗表和掩碼存儲表的數(shù)據(jù)結(jié)構(gòu)的圖。
[0012]圖6是闡釋根據(jù)一種實施例用于優(yōu)化程序循環(huán)的方法的流程圖。
[0013]圖7是根據(jù)另一實施例用高級矢量指令表示程序循環(huán)的偽代碼。
[0014]圖8是闡釋根據(jù)一種實施例存儲混洗表和混合表的數(shù)據(jù)結(jié)構(gòu)的圖。
[0015]圖9是闡釋根據(jù)另一實施例用于優(yōu)化程序循環(huán)的方法的流程圖。
[0016]圖10是闡釋根據(jù)一種實施例的數(shù)據(jù)處理系統(tǒng)的示例的框圖。
[0017]圖11是闡釋根據(jù)另一實施例的數(shù)據(jù)處理系統(tǒng)的示例的框圖。
[0018]詳細(xì)描述
[0019]將參考下面討論的細(xì)節(jié)描述本發(fā)明的各種實施例和各方面,且附圖將闡釋各種實施例。下列的描述和附圖闡釋本發(fā)明,且不應(yīng)被解釋成限制本發(fā)明。描述了眾多特定細(xì)節(jié),以便提供對本發(fā)明的各種實施例的透徹理解。然而,在某些實例中,不描述公知的或常規(guī)的細(xì)節(jié),以便提供對本發(fā)明的各實施例的簡練討論。
[0020]本說明書中對“一種實施例”或“一個實施例”的引用意味著,結(jié)合該實時例描述的具體的特征、結(jié)構(gòu)或特性可以被包括在本發(fā)明的至少一種實施例中。在本說明書中各個地方出現(xiàn)“在一個實施例中”的短語不一定都是指相同的實施例。
[0021]根據(jù)一些實施例,通過使用矢量指令以矢量方式執(zhí)行程序循環(huán)的迭代,代碼優(yōu)化器(例如,編譯器)用于優(yōu)化程序循環(huán)的標(biāo)量指令。通過由諸如單指令多數(shù)據(jù)(SMD)處理器等的具有矢量能力的處理器執(zhí)行矢量指令或打包指令(Packed instruction),執(zhí)行程序循環(huán)的迭代。通過使用矢量或打包指令,基于矢量指令的矢量長度或打包在SIMD指令內(nèi)的指令的數(shù)量,可以減少或縮小程序循環(huán)的迭代的數(shù)量??梢杂删哂惺噶磕芰Φ奶幚砥魇褂檬噶恐噶顏聿⑿袌?zhí)行典型程序循環(huán)的某些迭代。結(jié)果,程序循環(huán)的執(zhí)行效率可以得到極大改善。
[0022]根據(jù)一種實施例,代碼優(yōu)化器接收到第一代碼,該第一代碼具有用于基于第三數(shù)組(例如,條件數(shù)組)的元素的值或條件把第一數(shù)組(例如,源數(shù)組)的元素賦值給第二數(shù)組(例如,目的地數(shù)組)的元素的程序循環(huán)。作為響應(yīng),代碼優(yōu)化器被配置為生成第二代碼,該第二代碼具有執(zhí)行與程序循環(huán)相同的操作的矢量指令。在一種實施例中,在程序循環(huán)的每次迭代中,第二代碼包括VECT0R_SHUFLE指令和VECT0R_MASKST0RE指令,VECT0R_SHUFLE指令基于第三數(shù)組的相應(yīng)元素的值或條件使用混洗表混洗第一數(shù)組的元素,VECTOR,MASKST0RE指令以矢量方式把第一數(shù)組的已混洗的元素存儲在第二數(shù)組中。
[0023]在另一實施例中,在程序循環(huán)的每次迭代中,第二代碼包括VECT0R_SHUFLE指令和VECT0R_BLEND指令,VECT0R_SHUFLE指令基于第三數(shù)組的相應(yīng)元素的值或條件使用混洗表混洗第一數(shù)組的元素,VECT0R_BLEND指令以矢量方式混合第一數(shù)組的已混洗的元素。取決于矢量長度,一旦已經(jīng)經(jīng)由混合操作積聚了第一數(shù)組的元素,那么,就把第一數(shù)組的已混合的元素存儲在第二數(shù)組中。
[0024]圖1是闡釋根據(jù)一種實施例的代碼優(yōu)化器的框圖。參見圖1,系統(tǒng)100包括接收第一代碼101的代碼優(yōu)化器102,第一代碼101具有帶有標(biāo)量指令(例如圖3中所示出的那些標(biāo)量指令)的程序循環(huán)。第一代碼101中的程序循環(huán)包括標(biāo)量指令,這些標(biāo)量指令基于第三數(shù)組的元素的值或條件,分別迭代地把第一數(shù)組的元素的值賦值給第二數(shù)組的元素。響應(yīng)于第一代碼101,代碼優(yōu)化器102被配置為把第一代碼101的標(biāo)量指令轉(zhuǎn)換成第二代碼103,第二代碼103具有至少一個矢量指令以便代替第一代碼101的一些標(biāo)量指令。在一種實施例中,代碼優(yōu)化器被配置為把多個標(biāo)量迭代的多個數(shù)據(jù)打包成單個SIMD指令。第二代碼103的至少一個矢量指令允許具有矢量能力的處理器104(例如,具有SMD能力的處理器)執(zhí)行至少一個矢量指令,以便在程序循環(huán)中并行執(zhí)行某些步驟,例如在單個指令循環(huán)期間。
[0025]在一種實施例中,在每次迭代期間,第二代碼103包括在此稱為VECTOR_SHUFFLE指令的混洗指令,該混洗指令基于根據(jù)第三數(shù)組的相應(yīng)元素的值或條件生成的掩碼使用混洗表105混洗第一數(shù)組的元素。第二代碼103還包括在此稱為VECT0R_MASKST0RE指令的存儲指令,該存儲指令基于掩碼將第一數(shù)組的已混洗的元素存儲在第二數(shù)組中。在另一實施例中,在每次迭代期間,第二代碼103包括VECTOR_SHUFFLE指令,VECTOR_SHUFFLE指令基于根據(jù)第三數(shù)組的相應(yīng)元素的值或條件生成的掩碼使用混洗表105混洗第一數(shù)組的元素。第二代碼103還包括在此稱為VECT0R_BLEND指令的混合指令,該混合指令將第一數(shù)組的已混洗的元素與先前已混洗的元素混合。在已經(jīng)混洗并混合第一數(shù)組的所有元素時,然后,把第一數(shù)組的已混合的元素存儲在第二數(shù)組中。應(yīng)注意,代碼優(yōu)化器102可以以硬件、軟件或其組合實現(xiàn)。
[0026]在一種實施例中,代碼優(yōu)化器102可以是編譯器的一部分,且處理器104可以是可從加利福尼亞州圣克拉拉市的英特A g得到的高級矢量擴展(AVX)兼容的處理器。在一種實施例中,VECTOR_SHUFFLE指令可以是流式SIMD擴展(SSE)和/或AVX兼容的指令的PSHUFB、PSHUFD、PSHUFHW 和 PSHUFLW 中的一種。VECTOR_MASKSTORE 指令可以是 SSE/AVX 兼容的指令的 MASKMOVDQU、VMASKMOV 和 MASKMOVQ 中的一種。VECTOR_BLEND 指令可以是 SSE/AVX 兼容的指令的 BLENDPD、BLENDPS、BLENDVPD 和 BLENDVPS 中的一種。
[0027]圖2是闡釋根據(jù)一種實施例優(yōu)化程序代碼的方法的流程圖。例如,方法200可以由圖1的代碼優(yōu)化器102執(zhí)行。參見圖2,在框201,處理邏輯接收第一代碼,該第一代碼具有程序循環(huán),該程序循環(huán)具有基于第三數(shù)組的值或條件把第一數(shù)組的值存儲到第二數(shù)組的標(biāo)量指令。在框202,處理邏輯生成第二代碼,該第二代碼具有諸如VECT0R_SHUFFLE、VECT0R_MASKST0RE和VECT0R_BLEND指令等的至少一個矢量指令,從而以矢量方式執(zhí)行程序循環(huán)的一些迭代。矢量指令可以與基于AVX的矢量指令兼容。在框203,將第二代碼存儲在存儲器中,以便由具有矢量能力的處理器執(zhí)行。
[0028]圖3是表示具有標(biāo)量指令的典型程序循環(huán)的偽代碼。參見圖3,在這一示例中,偽代碼300包括程序循環(huán)(例如,for循環(huán)),以基于第三數(shù)組303的相應(yīng)元素的值或條件分別把第一數(shù)組301的元素的值賦值給第二數(shù)組302的相應(yīng)元素。在這一示例中,在每次迭代中每次一個元素地、迭代地處理數(shù)組301-303的元素中的每一個。如圖3中所示出,在每次迭代期間,在304行評估數(shù)組303的元素,且如果滿足條件,那么就在305行把數(shù)組301元素賦值給數(shù)組302的相應(yīng)元素。此后,在行306處遞增將在下一迭代中執(zhí)行的下一個元素的索引。在這樣的配置中, 處理器必須執(zhí)行等于數(shù)組301中的元素的數(shù)量的迭代次數(shù)。如果數(shù)組301具有大量的元素,將存在大量的迭代,這顯著低效且耗費資源。
[0029]圖4是表示根據(jù)本發(fā)明的一種實施例使用基于矢量的指令或經(jīng)打包指令的程序循環(huán)的偽代碼。在這一示例中,偽代碼400可以由圖1的代碼優(yōu)化器102基于圖3的偽代碼300生成。參見圖4,多個數(shù)據(jù)被打包成矢量寄存器,且把矢量或打包指令(例如,SMD指令)用作在相同的迭代內(nèi)并行執(zhí)行多個操作的打包指令,其中在常規(guī)標(biāo)量程序循環(huán)的迭代內(nèi)那些多個操作將必須每次一個地執(zhí)行。
[0030]在401行,借助于廣播,把條件值(例如,topVal)加載到矢量寄存器VMM0。取決于VMMO寄存器的大小,使用借助于廣播的加載指令(load-with-broadcast instruction),可以把該條件值的多個副本加載到VMM0。VMMO可以是128位、256位、512位或其他大小的寄存器。借助于廣播的加載指令可以是SSE/AVX兼容的指令的VBR0ADCASTSS、VBR0ADCASTSD和VBR0ADCASTF中的一種。在被執(zhí)行時,借助于廣播的加載指令加載來自源操作數(shù)(例如,topVal)的值并廣播給目的地操作數(shù)(例如,VMM0)的所有元素。
[0031 ] 在這一示例中,假設(shè):
[0032]topVal = O ;
[0033]數(shù)組a[4] = {0,1,2,3};
[0034]數(shù)組b [4] = {-2,-2,I, -2}.[0035]在401行的指令將把所有零加載到VMMO寄存器。然后,按矢量長度(VL)的增量執(zhí)行程序循環(huán)402,這是由于每次迭代執(zhí)行等于VL的指派操作的數(shù)量。取決于寄存器的大小,對于128位、256位或512位寄存器,VL分別可以是4、8或16。
[0036]在403行,指令加載來自數(shù)組b[]的4個值,并與存儲在VMMO中的topVal的矢量(在這一示例中都是0)進(jìn)行比較。存儲在VMM2寄存器中的結(jié)果將是{-1,_1,0,-1},因為這些是少于VMMO中的topVal的數(shù)組b[]中的值。再次貫穿本申請,在此描述的諸如VMM0、VMM和VMM2等的任何寄存器可以是128位、256位、512位或其他大小的寄存器。在這一示例中,利用了打包比較大于指令(packed compare-greater-than instruction),該指令可以在單個指令循環(huán)內(nèi)以矢量方式比較多個值。在一種實施例中,打包比較大于指令可以是SSE/AVX兼容的指令的PCMPGTB、PCMPGTW、PCMPGTD或PCMPGTQ中的一種,這取決于數(shù)據(jù)和/或寄存器寬度。
[0037]在行404,提取VMM2中的每一元素的符號位并將其存儲在寄存器或存儲器“掩碼”(在這一示例中是OxD)中。在一種實施例中,利用了打包提取符號位指令(packedextract-sign-bit),該指令可以是SSE/AVX兼容的指令的M0VMSKPD和M0VMSKPS中的一種,該指令從源操作數(shù)中的打包浮點值提取符號位,把它們格式成掩碼,并把該掩碼存儲在目的地操作數(shù)中。
[0038]在405行,根據(jù)存儲在“掩碼”中的掩碼值,從混洗表加載混洗控制?;煜幢硎纠徊怀鰹閳D5中的混洗表501,混洗表501可以被實現(xiàn)為圖1的混洗表105 —部分。在這一示例中,由掩碼表示的混洗控制是{0x00,0x01, 0x02, 0x03, 0x08, 0x09, OxOa, OxOb, OxOc, Ox0d, OxOe, OxOf, 0x80, 0x80, 0x80, 0x80},基于從存儲在VMMl寄存器中的比較結(jié)果提取的符號位(例如,-1, -1, O, -1),把該混洗控制加載到寄存器“掩碼”中。
[0039]在406行,從數(shù)組ΑΙ0,I, 2,3}加載四個元素,且根據(jù)先前加載到VMMl中的混洗控制進(jìn)行混洗。結(jié)果將是{0,2,3,0},且存儲在VMM2寄存器中。在一種實施例中,利用了打包混洗指令,該指令可以是SSE/AVX兼容的指令的PSHUFB、PSHUFD、PSHUFHW和PSHUFLW中的一種。打包混洗指令根據(jù)源操作數(shù)中的混洗控制掩碼在目的地操作數(shù)中原地執(zhí)行各種大小的混洗。該指令置換(permute)目的地操作數(shù)中的數(shù)據(jù),保持混洗掩碼不受影響。如果設(shè)定了混洗控制掩碼中的每一個的最高有效位,那么,把常量零寫到結(jié)果中?;煜纯刂蒲诖a中的每一元素形成置換目的地操作數(shù)中的相應(yīng)字節(jié)的索引。每一索引的值是混洗控制字節(jié)的最低有效4比特(128位操作)或3比特(64位操作)。
[0040]在407行,對存儲在“掩碼”中的具有預(yù)先確定的邏輯值(例如,邏輯值I)的比特的數(shù)量進(jìn)行技術(shù),并將其存儲在“num”中。在一種實施例中,利用了與AVX指令兼容的P0PCNT,其中POPCNT指令返回具有邏輯值I的比特的數(shù)量。在408行,根據(jù)來自掩碼存儲表的比特的數(shù)量,把掩碼控制加載到VMMl中。掩碼存儲表的示例被示出為圖5中的表502,表502可以被實現(xiàn)為圖1的掩碼存儲表106的一部分。在這一示例中,VMMl將包含來自掩碼存儲表 502 的{-1, -1, -1, 0}。
[0041]在409行,執(zhí)行掩碼存儲操作,該操作把基于存儲在VMMl中掩碼而選擇的VMM2的值存儲到目的地數(shù)組中。在這一示例中,將僅存儲VMM2的前3個元素(例如,基于{-1,-1,-1,0}的掩碼)。在一種實施例中,在此利用了打包掩碼存儲指令,該指令可以是AVX兼容指令的MASKMOVDQU、VMASKMOV和MASKM0VQ中的一種。在410行,按在掩碼存儲操作期間所存儲的元素的數(shù)量遞增目的地數(shù)組的索引或指針。結(jié)果,取決于關(guān)聯(lián)的矢量長度,程序循環(huán)402的每次迭代可以以矢量方式執(zhí)行多個操作。注意,僅出于闡釋的目的描述了如圖3-圖5中所示出的偽代碼和數(shù)據(jù)結(jié)構(gòu);也可以利用其他代碼或編程語言以及特定打包或矢量指令。
[0042]圖6是闡釋根據(jù)一種實施例用于優(yōu)化程序循環(huán)的方法的流程圖。例如,方法600可以由圖1的代碼優(yōu)化器102執(zhí)行。參見圖6,在框601,接收到第一代碼,該第一代碼具有用標(biāo)量指令實現(xiàn)的程序循環(huán)。第一代碼基于第三數(shù)組的值把第一數(shù)組的值存儲到第二數(shù)組。在框602,代碼優(yōu)化器基于第一代碼生成第二代碼,以加載第三數(shù)組的值,并使用矢量比較指令把它們與預(yù)先確定的閾值進(jìn)行比較。在框603,基于掩碼(基于比較結(jié)果的符號位確定該掩碼),第二代碼加載混洗表。在框604,使用混洗表,使用矢量混洗指令,第二代碼混洗第一數(shù)組的元素。在框605,基于掩碼(例如,掩碼中的非零比特的數(shù)量),加載掩碼存儲表。在框606,然后,基于掩碼存儲表,使用矢量掩碼存儲指令把已混洗的元素存儲在第二數(shù)組中。在每次迭代中執(zhí)行上面的操作,其中每次迭代使用矢量指令來并行執(zhí)行多個操作(例如,高達(dá)矢量長度)。然后,在框607,把第二代碼存儲在存儲器中。
[0043]在另一實施例中,代替使用VECT0R_MASKST0RE指令,在程序循環(huán)的每次迭代中,第二代碼包括VECT0R_SHUFLE指令和VECT0R_BLEND指令,VECT0R_SHUFLE指令基于第三數(shù)組的相應(yīng)元素值或條件使用混洗表混洗第一數(shù)組的元素,VECT0R_BLEND指令以矢量方式混合第一數(shù)組的已混洗的元素。取決于矢量長度,一旦經(jīng)由混合操作已積聚了第一數(shù)組的元素,則然后,把第一數(shù)組的已混合的元素存儲在第二數(shù)組中。
[0044]圖7是表示根據(jù)本發(fā)明的另一實施例使用基于矢量的或打包指令的程序循環(huán)的偽代碼。在這一示例中,偽代碼700可以由圖1的代碼優(yōu)化器102基于圖3的偽代碼300生成。參見圖7,多個數(shù)據(jù)被打包成矢量寄存器,且矢量或打包指令(例如,SMD指令)被用作在相同的迭代內(nèi)并行執(zhí)行多個操作的打包指令,其中在常規(guī)標(biāo)量程序循環(huán)的迭代內(nèi)那些多個操作必須每次一個地執(zhí)行。在這一實施例中,該過程將積聚結(jié)果直到它已經(jīng)處理了等于矢量長度的元素的數(shù)量。代替使用如上所述的掩碼存儲指令,利用了帶有混合表的混合指令。 [0045]參見圖7,在701行,執(zhí)行程序循環(huán)的某些初始化。在這一示例中,借助于廣播把條件值(例如,topVal)加載到矢量寄存器VMMO中。取決于VMMO寄存器的大小,使用借助于廣播的加載指令(loadwith broadcast instruction),可以把條件值的多個副本加載到VMMO中。VMMO可以是128位、256位、512位或其他大小的寄存器。借助于廣播的加載指令可以是AVX兼容指令的VBROADCASTSS、VBROADCASTSD和VBR0ADCASTF中的一種。在被執(zhí)行時,借助于廣播的加載指令加載來自源操作數(shù)的值(例如,topVal)并廣播到目的地操作數(shù)(例如,VMM0)的所有元素。
[0046]另外,積聚計數(shù)器numOfElem表示已經(jīng)處理但沒有存儲在目的地數(shù)組的元素的數(shù)量。在這一示例中,假設(shè):
[0047]topVal = O ;
[0048]a[8] = {O, 1,2,3,4,5,6,7};
[0049]b [8] = {~2, ~2, I, ~2, ~2, I, I, ~2).[0050]在701行,指令將把所有零都加載到VMMO寄存器中。然后,按矢量長度(VL)的遞增執(zhí)行程序循環(huán)702,這是由于每次迭代執(zhí)行等于VL的指派操作的數(shù)量。取決于寄存器的大小,對于128位、256位或512位寄存器,VL分別可以是4、8或16。
[0051]在行703,指令加載來自數(shù)組b[]的4個值,并與存儲在VMMO中的topVal的矢量(在這一示例中都是0)進(jìn)行比較。存儲在VMM3寄存器中的結(jié)果將是{-1,_1,0,-1},因為這些是少于VMMO中的topVal的數(shù)組b[]中的值。再次貫穿本申請,在此描述的諸如VMM0、VMM、VMM2和VMM3等的任何寄存器可以是128位、256位、512位或其他大小的寄存器。在這一示例中,利用了打包比較大于指令,該指令可以在單個指令循環(huán)內(nèi)以矢量方式比較多個值。在一種實施例中,打包比較大于指令可以是SSE/AVX兼容指令的PCMPGTB、PCMPGTW、PCMPGTD或PCMPGTQ中的一種,這取決于數(shù)據(jù)和/或寄存器寬度。
[0052]在704行,提取VMM3中的每一元素的符號位并將其存儲在寄存器或存儲器“掩碼”(在這一示例中是OxD)中。在一種實施例中,利用了打包提取符號位指令,該指令可以是SSE/AVX兼容指令的M0VMSKPD和M0VMSKPS中的一種,該指令從源操作數(shù)中的打包浮點值提取符號位,把它們格式成掩碼,并把該掩碼存儲在目的地操作數(shù)中。
[0053]在705行,根據(jù)存儲在“掩碼”中的掩碼值和當(dāng)前所積聚的元素的數(shù)量“numOfElem”,從混洗表把混洗控制加載到VMMl寄存器中。混洗表的示例被示出為圖8中的混洗表751,混洗表751可以被實現(xiàn)為圖1的混洗表105的一部分。在這一示例中,VMMl中的混洗控制是{0x00, 0x01, 0x02, 0x03, 0x08, 0x09, OxOa, OxOb, OxOc, OxOd, OxOe, OxOf, Ox80,0x80, 0x80, 0x80}。
[0054]在706行,從數(shù)組{0,I, 2,3}加載四個元素,且根據(jù)先前加載到VMMl中的混洗控制進(jìn)行混洗。結(jié)果將是{0,1、3,0},且存儲在VMM3寄存器中。在一種實施例中,利用了打包混洗指令,該指令可以是SSE/AVX兼容的指令的PSHUFB、PSHUFD、PSHUFHW和PSHUFLW中的一種。打包混洗指令根據(jù)源操作數(shù)中的混洗控制掩碼在目的地操作數(shù)中原地執(zhí)行各種大小的混洗。該指令置換目的地操作數(shù)中的數(shù)據(jù),保持混洗掩碼不受影響。如果設(shè)定了混洗控制掩碼中的每一個的最高有效位,那么,把常量零寫到結(jié)果中?;煜纯刂蒲诖a中的每一元素形成置換目的地操作數(shù)中的相應(yīng)字節(jié)的索引。每一索引的值是混洗控制字節(jié)的最低有效的4比特(128位操作)或3比特(64位操作)。
[0055]在707行,對存儲在“掩碼”中的具有預(yù)先確定的邏輯值(例如,邏輯值I)的比特的數(shù)量進(jìn)行計數(shù),并將其存儲在寄存器或存儲器“num”中。在這一示例中,“num”是3。在一種實施例中,利用了與AVX指令兼容的P0PCNT,其中POPCNT指令返回具有邏輯值I的比特的數(shù)量。在708行,根據(jù)所積聚的元素的數(shù)量“num”,從混合表把混合控制加載到VMMl中?;旌媳淼牟焕徊怀鰹閳D8中的表752,表752可以被實現(xiàn)為圖1的混合表107的一部分。在這一示例中,VMMl將包含來自混合表752的{0,O, O, 0}。
[0056]在709行,使用先前加載到VMMl中的混合控制把存儲在VMM2中的已積聚的元素與存儲在VMM3中的已混洗的元素混合起來。結(jié)果將是{0,1、3,0},并存儲在VMM2中。在一種實施例中,使用VECT0R_BLEND指令以矢量方式執(zhí)行多個元素的混合操作,VECT0R_BLEND指令可以是SSE/AVX兼容的指令的BLENDPD、BLENDPS、BLENDVPD和BLENDVPS中的一種。取決于掩碼寄存器操作數(shù)(例如,VMM3)中所定義的掩碼比特,VECT0R_BLEND有條件地復(fù)制來自第二源操作數(shù)(例如,VMM2)和第一源操作數(shù)(例如,VMM1)的值的每一數(shù)據(jù)元素。掩碼比特是掩碼寄存器的每一元素中是最高有效位。
[0057]此后,在行710,按存儲在“num”中的值的增量,更新已積聚的元素的數(shù)量numOfElem, “num”對應(yīng)于已混合的元素的數(shù)量。在711行,如果numOfElem中已處理的已積聚的元素的數(shù)量大于矢量長度VL,則存儲在VMM2中的經(jīng)混合元素存儲在目的地數(shù)組中,且對接下來的VL個元素重復(fù)該迭代。在這一示例中,“num”等于3,少于值為4的VL。結(jié)果,已積聚的經(jīng)已混合的元素將不存儲在目的地數(shù)組中。相反,執(zhí)行下一迭代。[0058]回到703行,從b[]加載4個值,并將其與矢量topVal(在這一示例中都是零)進(jìn)行比較。結(jié)果將是{-1,O, O, -1}。在704行,提取每一元素的符號位并將其存儲在64位寄存器掩碼中(在這一示例中,該值將是0x9)。在705行,根據(jù)掩碼值和所積聚的元素的當(dāng)前數(shù)量(例如,3),從混洗表加載混洗控制。在這一示例中,混洗控制將是{OxOc,OxOd, OxOe, 0x0f, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x01,0x02,0x03}。在 706行,從數(shù)組a[]加載4個元素(例如,{4,5,6,7}),并根據(jù)先前加載的控制混洗。結(jié)果將是{7,O, O, 4}。在707行,對掩碼中具有值I的比特的數(shù)量(在這一示例中結(jié)果是2)進(jìn)行計數(shù)。在708行,根據(jù)已積聚的元素的數(shù)量,加載混合控制。在這一示例中混合控制將是{0,0,0,1}。
[0059]在709行,使用先前加載的混合控制,把已積聚元素與已混洗的元素混合。結(jié)果將是{0,1,3,4}。在710行,這一迭代中所積聚的元素的數(shù)量相加(在這一示例中新的值將是3+2 = 5)。在711行,把已積聚的數(shù)量與矢量長度VL4進(jìn)行比較。在這種情況中,滿足該條件。在712行,存儲已積聚寄存器。在713行,已積聚元素的數(shù)量遞減4(例如,VL),得到I。在行714,把已混洗的元素指派為新的已積聚的矢量寄存器。經(jīng)加載的值的旋轉(zhuǎn)將最近積聚的元素放置在匹配已積聚的元素的剩余數(shù)量的矢量的開始處。結(jié)果將是{7,DC,DC,DC} (DC=不關(guān)心)。在715行,目的地指針遞增4(例如,VL)個元素。
[0060]圖9是闡釋根據(jù)另一實施例用于優(yōu)化程序循環(huán)的方法的流程圖。方法800可以由圖1的代碼優(yōu)化器102執(zhí)行。參見圖8,在框801,接收到第一代碼,該第一代碼具有以標(biāo)量指令實現(xiàn)的程序循環(huán)。第一代碼基于第三數(shù)組的值把第一數(shù)組的值存儲到第二數(shù)組。在框802,代碼優(yōu)化器基于第一代碼生成第二代碼,以加載第三數(shù)組的值并使用矢量比較指令把它們與預(yù)先確定的閾值進(jìn)行比較。在框803,基于掩碼(基于比較結(jié)果的符號位確定該掩碼),第二代碼加載混洗表。在框804,使用混洗表,使用矢量混洗指令,第二代碼混洗第一數(shù)組的元素。在框805,基于第一數(shù)組的已積聚的元素,加載混合表。在框806,使用矢量混合指令,把已混洗的元素與第一數(shù)組的已積聚元素混合起來。如果已積聚的元素的數(shù)量少于矢量長度,則迭代地執(zhí)行框802-806的操作。否則,在框807,然后,把第一數(shù)組的已積聚元素存儲在第二數(shù)組。然后,對第一數(shù)組的所有元素迭代地執(zhí)行上面的操作。
[0061]圖10是闡釋根據(jù)本發(fā)明的一種實施例的數(shù)據(jù)處理系統(tǒng)的示例的框圖。例如,系統(tǒng)900可以表示圖1的任意系統(tǒng)100。處理器901可以表示圖1的處理器104。系統(tǒng)900可以表示以上所描述的任意系統(tǒng)。例如,系統(tǒng)900可以表示臺式計算機、膝上型計算機、平板計算機、服務(wù)器、移動電話(例如,智能手機)、媒體播放器、個人數(shù)字助理(PDA)、個人通信設(shè)備、游戲設(shè)備、網(wǎng)絡(luò)路由器或集線器、無線接入點或中繼器、機頂盒或其組合。注意,盡管圖10闡釋了數(shù)據(jù)處理系統(tǒng)的各種組件,但它不旨在表示任何具體的體系結(jié)構(gòu)或互連組件的方式;因而,這些細(xì)節(jié)與本發(fā)明的各實施例沒有密切關(guān)系。還應(yīng)明白,具有更少組件或者也許具有更多組件的網(wǎng)絡(luò)計算機、手持式計算機、移動電話和其他數(shù)據(jù)處理系統(tǒng)也可以與本發(fā)明的各實施例一起使用。
[0062]參見圖10,在一種實施例中,系統(tǒng)900包括處理器901和芯片組902,芯片組902經(jīng)由總線或互連將包括存儲器905和設(shè)備903-904的各種組件耦合到處理器901。處理器901可以表示其中包括有單個處理器核或多個處理器核909的單個處理器或多個處理器。處理器901可以表示一個或多個通用處理器,例如微處理器、中央處理單元(CPU)等等。更具體地,處理器901可以是復(fù)雜指令集計算(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器或?qū)崿F(xiàn)其他指令集的處理器、或?qū)崿F(xiàn)指令集的組合的處理器。處理器901也可以是一個或多個專用處理器,例如專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、數(shù)字信號處理器(DSP)、網(wǎng)絡(luò)處理器、圖形處理器、網(wǎng)絡(luò)處理器、通信處理器、密碼處理器、協(xié)處理器、嵌入式處理器或能夠處理指令的任何其他類型的邏輯。例如,處理器9Ol可以是可從加利福尼亞州圣克拉拉市的英特爾公司購買的奔騰? 4 ( Pentium*4)、奔騰⑧雙核(Pentium? Dual-Core)、酷睿 ?2 雙核和四核(Core?2Duo and Quad)、至強?(Xeon?)、安騰 ? (Itanium?)、XScale?、酷睿 ?i7 (Core?i7)、酷睿 ?i5 (Core?i5)、賽揚?(Celeron? )或StrongARM?微處理器。處理器901被配置為執(zhí)行用于執(zhí)行在此討論的操作和步驟的指令。
[0063]處理器901可以包括指令解碼器,指令解碼器可以接收和解碼各種指令。解碼器可以生成和輸出一個或多個微操作、微代碼入口點、微指令、其他指令或其他控制信號,它們反映原始輸入指令或者是從原始輸入指令導(dǎo)出??梢允褂酶鞣N不同的機制實現(xiàn)解碼器。合適的機制的示例包括但不限于微代碼只讀存儲器(ROM)、查找、硬件實現(xiàn)、可編程邏輯陣列(PLA)等等。
[0064]解碼器可以不是處理器901的必要組件。在一個或多個其他實施例中,處理器901可以改為具有指令仿真器、指令翻譯器、指令變形器、指令解釋器或其他指令轉(zhuǎn)換邏輯。各種不同類型的指令仿真器、指令變形器、指令翻譯器等等在本領(lǐng)域中是已知的。指令轉(zhuǎn)換邏輯可以接收比特范圍隔離指令,仿真、轉(zhuǎn)換、變形、解釋或以另外方式轉(zhuǎn)換該比特范圍隔離指令,并輸出對應(yīng)于原始比特范圍隔離指令的一個或多個指令或控制信號。指令轉(zhuǎn)換邏輯可以以軟件、硬件、固件或其組合實現(xiàn)。在一些情況中,指令轉(zhuǎn)換邏輯中的一些或全部可以位于與其余的指令處理裝置不同的管芯,例如在分離的管芯上或在系統(tǒng)存儲器中。在一些情況中,指令處理裝置可以具有解碼器和指令轉(zhuǎn)換邏輯兩者。
[0065]處理器901和/或核心909還可以包括一個或多個執(zhí)行單元,這些執(zhí)行單元與解碼器的輸出耦合或以另外方式與之通信。術(shù)語“耦合”可以意味著兩個或更多個元素處于直接的電氣接觸或連接。然而,“耦合”也可以意味著兩個或更多個元素相互不處于直接連接,但仍然彼此協(xié)同操作或交互或通信(例如,通過中間組件)。作為一個示例,解碼器和執(zhí)行單元可以通過中間的可選緩沖器或本領(lǐng)域中已知可能耦合在解碼器和執(zhí)行單元之間的其他組件彼此耦合起來。處理器901和/或核心909還可以包括多種不同類型的執(zhí)行單元,諸如例如算術(shù)單元、算術(shù)邏輯單元(ALU)整數(shù)單元等等。
[0066]處理器901還可以包括一個或多個寄存器堆,包括但不限于整數(shù)寄存器、浮點寄存器、矢量或擴展寄存器、狀態(tài)寄存器和指令指針寄存器等等。在此使用術(shù)語“寄存器”來指代被用作宏指令的一部分以便標(biāo)識操作數(shù)的板載處理器存儲位置。換句話說,在此指出的寄存器在處理器外(從程序器的視角)可見的那些。然而,寄存器在含義上不應(yīng)限于具體類型的電路。相反,寄存器僅需要能夠存儲和提供數(shù)據(jù),并執(zhí)行在此描述的功能。在此描述的寄存器可以使用任何數(shù)量的不同技術(shù)由在處理器內(nèi)的電路實現(xiàn),例如專用物理寄存器、使用寄存器重命名的動量分配物理寄存器、專用物理寄存器和動量分配物理寄存器的組合等等。在一種實施例中,整數(shù)寄存器存儲32位或64位整數(shù)數(shù)據(jù)。寄存器堆可以包含用于經(jīng)打包數(shù)據(jù)的擴展多媒體SMD寄存器(例如,XMM)。這樣的寄存器可以包括涉及SSE2、SSE3、SSE4、GSSE和更高(泛指為“SSEx” )技術(shù)的128位寬的XMM寄存器和256位寬的寄存器(它們可以在它們的低階比特中合并XMM寄存器),以便保存這樣的經(jīng)打包數(shù)據(jù)操作數(shù)。
[0067]處理器901和/或核心909也可以可選地包括一個或多個其他公知的組件。例如,處理器901可以可選地包括指令取數(shù)邏輯、預(yù)解碼邏輯、調(diào)度邏輯、重排序緩沖器、分支預(yù)測邏輯、引退邏輯、寄存器重命名邏輯等等或其某種組合。這些組件可以按常規(guī)方式實現(xiàn),或者具有本領(lǐng)域中的技術(shù)人員基于本公開內(nèi)容將明顯看出的細(xì)微調(diào)整。理解在此的實施例不需要對這些組件的進(jìn)一步描述,但如果期望的話,可以容易地從常見文獻(xiàn)得到進(jìn)一步的描述。存在本領(lǐng)域中已知的這樣的組件的眾多不同的組合和配置。該范圍不限于任何已知的這樣的組合或 配置。各實施例可以被實現(xiàn)為帶有或不帶有這樣的附加組件。
[0068]芯片組902可以包括存儲器控制中樞(MCH)910和輸入輸出控制中樞(ICH)911。MCH910可以包括與存儲器905通信的存儲器控制器(未示出)。MCH910也可以包括與圖形設(shè)備912通信的圖形接口。在本發(fā)明的一種實施例中,圖形接口可以經(jīng)由加速圖形端口(AGP)、高速外圍組件互連(PCI)總線或其他類型的互連與圖形設(shè)備912通信。ICH911可以提供到諸如設(shè)備903-904等的I/O設(shè)備的接口。設(shè)備903-904中的任何都可以是存儲設(shè)備(例如,硬盤驅(qū)動器、閃速存儲器設(shè)備)、通用串行總線(USB)端口、鍵盤、鼠標(biāo)、并行端口、串行端口、打印機、網(wǎng)絡(luò)接口(有線或無線)、無線收發(fā)器(例如,WiF1、藍(lán)牙或蜂窩收發(fā)器)、媒體設(shè)備(例如、音頻/視頻編解碼器或控制器)、總線橋(例如,PC1-PCI橋)或其組合。
[0069]MCH910有時被稱為北橋,且ICH911有時被稱為南橋,盡管有些人在它們之間做出技術(shù)區(qū)分。在此所使用的術(shù)語MCH、ICH、北橋和南橋預(yù)期被廣泛地解釋為覆蓋其功能包括向處理器傳送中斷信號的各種芯片。在一些實施例中,MCH910可以與處理器901集成起來。在這樣的配置中,芯片組902操作執(zhí)行MCH910和ICH911的一些功能的接口芯片,如圖11中所示出的。此外,圖形加速器912可以被集成在MCH910或處理器901內(nèi)。
[0070]存儲器905可以存儲包括由處理器901或任何其他設(shè)備執(zhí)行的指令序列的數(shù)據(jù)。例如,各種操作系統(tǒng)、設(shè)備驅(qū)動器、固件(例如,基本輸入輸出系統(tǒng)或BIOS)和/或應(yīng)用的可執(zhí)行代碼913和/或數(shù)據(jù)914可以被加載到存儲器905中且由處理器901執(zhí)行。操作系統(tǒng)可以是任何種類的操作系統(tǒng),諸如例如來自微軟.?的Windows?操作系統(tǒng)、來自蘋果的Mac OS?/iOS?、來自谷^?^Android?、Linux?、Unix?或其他實時操作系統(tǒng)。在一種實施例中,存儲器905可以包括一個或多個易失性存儲(或存儲器)設(shè)備。例如隨機存取存儲器(RAM)、動量RAM(DRAM)、同步DRAM (SDRAM)、靜態(tài)RAM(SRAM)或其他類型的存儲設(shè)備。也可以利用非易失性存儲器,例如硬盤或閃速存儲設(shè)備。前端總線(FSB)906可以是多點式互連或點對點互連。術(shù)語FSB預(yù)期覆蓋到處理器901的各種類型的互連。芯片組902可以經(jīng)由點對點接口與諸如設(shè)備903-904等的其他設(shè)備通信??偩€906可以被實現(xiàn)為各種總線或互連,諸如例如快速路徑互連(QPI)、超傳輸互連或與高級微控制器總線體系結(jié)構(gòu)(AMBA)兼容的總線,例如AMBA高性能總線(AHB)。
[0071]高速緩存908可以是任何種類的處理器高速緩存,例如I級(LI)高速緩存、L2高速緩存、L3高速緩存、L4高速緩存、末級高速緩存(LLC)或其組合。高速緩存908可以與處理器901的處理器核心909共享。高速緩存908可以嵌入在處理器901內(nèi)和/或外置于處理器901。高速緩存908可以在各核心909當(dāng)中共享。替代地,核心909中的至少一個還包括其中嵌入的其自己的本地高速緩存。核心909中的至少一個可以利用本地高速緩存已經(jīng)與核心909中的另一個共享的高速緩存兩者。處理器901還可以包括直接高速緩存訪問(DCA)邏輯,以便允許諸如設(shè)備903-904等的其他設(shè)備直接地訪問高速緩存908。處理器901和/或芯片組902還可以包括中斷控制器,例如高級可編程中斷控制器(APIC),以便處理諸如消息信號中斷等的中斷。
[0072]在前述的說明書中,已經(jīng)參考其特定示例性實施例描述了本發(fā)明的各實施例??梢悦黠@看出,在不偏離下列權(quán)利要求所陳述的本發(fā)明的寬泛的精神和范圍的前提下,可以對其做出各種修改。因此,應(yīng)該以說明性而非限制性的意義來看待說明書和附圖。
【權(quán)利要求】
1.一種計算機實現(xiàn)的方法,包括: 接收第一代碼,所述第一代碼具有以標(biāo)量指令實現(xiàn)的程序循環(huán),用于基于第三數(shù)組的值把第一數(shù)組的值存儲到第二數(shù)組中;以及 生成第二代碼,所述第二代碼用至少一個矢量指令表示所述程序循環(huán),所述第二代碼包括 混洗指令,用于以矢量方式使用混洗表基于所述第三數(shù)組混洗所述第一數(shù)組的元素, 混合指令,用于以矢量方式使用混合表混合所述第一數(shù)組的已混洗的元素,以及 存儲指令,用于將所述第一數(shù)組的已混洗的元素存儲在所述第二數(shù)組中。
2.如權(quán)利要求1所述的方法,其特征在于,所述第二代碼進(jìn)一步包括用于將所述第三數(shù)組的元素與預(yù)先確定的閾值進(jìn)行比較,從而生成比較結(jié)果的指令,以及 用于基于所述比較結(jié)果生成掩碼的指令,基于所述掩碼混洗所述第一數(shù)組的所述元素。
3.如權(quán)利要求2所述的方法,其特征在于,所述第二代碼進(jìn)一步包括用于加載基于所述掩碼選擇的所述混洗表的元素的指令,基于所述混洗表的已選擇的元素經(jīng)由所述混洗指令混洗所述第一數(shù)組的所述元素。
4.如權(quán)利要求2所述的方法,其特征在于,所述第二代碼進(jìn)一步包括用于加載基于所述掩碼選擇的所述混合表的 元素的指令,基于所述混合表的已選擇的元素經(jīng)由所述混合指令混合所述第一數(shù)組的已混洗的元素。
5.如權(quán)利要求4所述的方法,其特征在于,基于所述掩碼的具有預(yù)先確定的邏輯值的比特的數(shù)量確定所述混合表的已選擇的元素。
6.如權(quán)利要求2所述的方法,其特征在于,所述第二代碼進(jìn)一步包括用于將所述預(yù)先確定的閾值存儲在矢量寄存器中的指令,使用矢量比較指令把所述第一數(shù)組的所述元素與存儲在所述矢量寄存器中的值進(jìn)行比較。
7.如權(quán)利要求2所述的方法,其特征在于,基于存儲在矢量寄存器中的所述比較結(jié)果的符號位生成所述掩碼。
8.一種其中存儲有指令的計算機可讀存儲介質(zhì),在由計算機執(zhí)行時,所述指令引起所述計算機執(zhí)行一種方法,所述方法包括: 接收第一代碼,所述第一代碼具有以標(biāo)量指令實現(xiàn)的程序循環(huán),用于基于第三數(shù)組的值把第一數(shù)組的值存儲到第二數(shù)組中;以及 生成第二代碼,所述第二代碼使用至少一個矢量指令表示所述程序循環(huán),所述第二代碼包括 混洗指令,用于以矢量方式基于所述第三數(shù)組使用混洗表混洗所述第一數(shù)組的元素, 混合指令,用于以矢量方式使用混合表混合所述第一數(shù)組的已混洗的元素,以及 存儲指令,用于將所述第一數(shù)組的已混洗的元素存儲在所述第二數(shù)組中。
9.如權(quán)利要求8所述的計算機可讀存儲介質(zhì),其特征在于,所述第二代碼進(jìn)一步包括 用于將所述第三數(shù)組的元素與預(yù)先確定的閾值進(jìn)行比較,從而生成比較結(jié)果的指令,以及 用于基于所述比較結(jié)果生成掩碼的指令,基于所述掩碼混洗所述第一數(shù)組的所述元素。
10.如權(quán)利要求9所述的計算機可讀存儲介質(zhì),其特征在于,所述第二代碼進(jìn)一步包括用于加載基于所述掩碼選擇的所述混洗表的元素的指令,基于所述混洗表的已選擇的元素經(jīng)由所述混洗指令混洗所述第一數(shù)組的所述元素。
11.如權(quán)利要求9所述的計算機可讀存儲介質(zhì),其特征在于,所述第二代碼進(jìn)一步包括用于加載基于所述掩碼選擇的所述混合表的元素的指令,基于所述混合表的已選擇的元素經(jīng)由所述混合指令混合所述第一數(shù)組的已混洗的元素。
12.如權(quán)利要求11所述的計算機可讀存儲介質(zhì),其特征在于,基于所述掩碼的具有預(yù)先確定的邏輯值的比特的數(shù)量確定所述混合表的已選擇的元素。
13.如權(quán)利要求9所述的計算機可讀存儲介質(zhì),其特征在于,所述第二代碼進(jìn)一步包括用于將所述預(yù)先確定的閾值存儲在矢量寄存器中的指令,使用矢量比較指令把所述第一數(shù)組的所述元素與存儲在所述矢量寄存器中的值進(jìn)行比較。
14.如權(quán)利要求9所述的計算機可讀存儲介質(zhì),其特征在于,基于存儲在矢量寄存器中的所述比較結(jié)果的符號位生成所述掩碼。
15.一種裝置,包括: 存儲器,用于存儲混 洗表和混合表;以及 代碼優(yōu)化器,用于接收第一代碼,所述第一代碼具有以標(biāo)量指令實現(xiàn)的程序循環(huán),用于基于第三數(shù)組的值把第一數(shù)組的值存儲到第二數(shù)組中,并且,所述代碼優(yōu)化器用于生成第二代碼,所述第二代碼用至少一個矢量指令表示所述程序循環(huán),所述第二代碼包括 混洗指令,用于以矢量方式使用所述混洗表基于所述第三數(shù)組混洗所述第一數(shù)組的元素, 混合指令,用于以矢量方式使用所述混合表混合所述第一數(shù)組的已混洗的元素,以及 存儲指令,用于將所述第一數(shù)組的已混洗的元素存儲在所述第二數(shù)組中。
16.如權(quán)利要求15所述的裝置,其特征在于,所述第二代碼進(jìn)一步包括 用于將所述第三數(shù)組的元素與預(yù)先確定的閾值進(jìn)行比較,從而生成比較結(jié)果的指令,以及 用于基于所述比較結(jié)果生成掩碼的指令,基于所述掩碼混洗所述第一數(shù)組的所述元素。
17.如權(quán)利要求16所述的裝置,其特征在于,所述第二代碼進(jìn)一步包括用于加載基于所述掩碼選擇的所述混洗表的元素的指令,基于所述混洗表的已選擇的元素經(jīng)由所述混洗指令混洗所述第一數(shù)組的所述元素。
18.如權(quán)利要求14所述的裝置,其特征在于,所述第二代碼進(jìn)一步包括用于加載基于所述掩碼選擇的所述混合表的元素的指令,基于所述混合表的已選擇的元素經(jīng)由所述混合指令混合所述第一數(shù)組的已混洗的元素。
19.如權(quán)利要求18所述的裝置,其特征在于,基于所述掩碼的具有預(yù)先確定的邏輯值的比特的數(shù)量確定所述混合表的已選擇的元素。
20.如權(quán)利要求16所述的裝置,其特征在于,所述第二代碼進(jìn)一步包括用于將所述預(yù)先確定的閾值存儲在矢量寄存器中的指令,使用矢量比較指令把所述第一數(shù)組的所述元素與存儲在所述矢量寄存器中的值進(jìn)行比較。
【文檔編號】G06F9/44GK103999045SQ201180075570
【公開日】2014年8月20日 申請日期:2011年12月15日 優(yōu)先權(quán)日:2011年12月15日
【發(fā)明者】T·尤里爾, E·烏爾德-阿邁德-瓦爾, B·T·托爾 申請人:英特爾公司