用于對齊寄存器的系統(tǒng)、裝置和方法
【專利摘要】說明了用于在計(jì)算機(jī)處理器中執(zhí)行對齊指令的系統(tǒng)、裝置和方法的實(shí)施例。在一些實(shí)施例中,對齊指令的執(zhí)行使得兩個(gè)串接源的數(shù)據(jù)元素的選擇性存儲存儲在目的地中。
【專利說明】用于對齊寄存器的系統(tǒng)、裝置和方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的領(lǐng)域一般涉及計(jì)算機(jī)處理器體系結(jié)構(gòu),尤其涉及當(dāng)被執(zhí)行時(shí)引起特定結(jié)果的指令。
【背景技術(shù)】
[0002]隨著處理器的單指令多數(shù)據(jù)(SMD)寬度增加,應(yīng)用程序開發(fā)者(和編譯器)越來越難以充分使用SMD硬件,因?yàn)閿?shù)據(jù)元素不會自然地與全矢量的大小對齊并且通常產(chǎn)生高速緩沖存儲行分裂,其中存儲器參考位于高速緩沖存儲器層級的兩個(gè)不同行上。常規(guī)地,處理高速緩沖存儲行分裂涉及到:檢測高速緩沖存儲行分裂狀態(tài),進(jìn)行兩次不同的TLB查找,進(jìn)行兩次高速緩沖存儲行存取,以及因此使用兩個(gè)獨(dú)立的存儲器端口,和/或使用專用邏輯在來自存儲器途中合并來自兩個(gè)連續(xù)高速緩沖存儲行的數(shù)據(jù)片。
【專利附圖】
【附圖說明】
[0003]在附圖中通過舉例的方式而不是限制的方式闡述了本發(fā)明,其中相似的附圖標(biāo)記表示相似的元件,并且其中:
[0004]圖1描繪了 ALIGN (對齊)指令的示例性執(zhí)行。
[0005]圖2描繪了 ALIGN指令的示例性執(zhí)行。
[0006]圖3描繪了 ALIGN指令的示例性執(zhí)行。
[0007]圖4示出了通過在處理器中執(zhí)行對齊指令而對齊來自兩個(gè)源的數(shù)據(jù)以及將該對齊存儲到目的地位置的方法的實(shí)施例。
[0008]圖5示出了用于處理對齊指令的方法的實(shí)施例。
[0009]圖6示出了用于處理對齊指令的方法的實(shí)施例。
[0010]圖7示出了用于處理偽碼的對齊指令的方法的實(shí)施例。
[0011]圖8A是示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其A類指令模板的框圖。
[0012]圖SB是示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其B類指令模板的框圖。
[0013]圖9A-C示出了根據(jù)本發(fā)明的實(shí)施例的示例性的特定矢量友好指令格式。
[0014]圖10是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器體系結(jié)構(gòu)的框圖。
[0015]圖1lA是根據(jù)本發(fā)明的實(shí)施例的單CPU核心連同其與片上互連網(wǎng)絡(luò)的連接以及其2級(L2)高速緩沖存儲器的本地子集的框圖。
[0016]圖1lB是根據(jù)本發(fā)明的實(shí)施例的圖1lA中的CPU核心的部分的分解視圖。
[0017]圖12是示出根據(jù)本發(fā)明的實(shí)施例的示例性的無序體系結(jié)構(gòu)的框圖。
[0018]圖13是依照本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)的框圖。
[0019]圖14是依照本發(fā)明的實(shí)施例的第二系統(tǒng)的框圖。
[0020]圖15是依照本發(fā)明的實(shí)施例的第三系統(tǒng)的框圖。[0021 ] 圖16是依照本發(fā)明的實(shí)施例的SoC的框圖。
[0022]圖17是根據(jù)本發(fā)明的實(shí)施例的具有集成的存儲器控制器和圖形的單核處理器和多核處理器的框圖。
[0023]圖18是根據(jù)本發(fā)明的實(shí)施例的對照將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的軟件指令轉(zhuǎn)換器的使用的框圖。
【具體實(shí)施方式】
[0024]在下面的說明中,闡述了多方面具體細(xì)節(jié)。然而,應(yīng)當(dāng)理解的是,本發(fā)明的實(shí)施例可在不具有這些具體細(xì)節(jié)的情況下實(shí)現(xiàn)。在其它實(shí)例中,為了不使得本說明的理解不清晰,未詳細(xì)示出公知的電路、結(jié)構(gòu)和技術(shù)。
[0025]說明書中提到“ 一個(gè)實(shí)施例”、“實(shí)施例”、“示例性實(shí)施例”等表示所描述的實(shí)施例可包括特定的特征、結(jié)構(gòu)或特點(diǎn),但是每個(gè)實(shí)施例可不必包括該特定的特征、結(jié)構(gòu)或特點(diǎn)。而且,這種術(shù)語不一定指的是同一實(shí)施例。此外,當(dāng)結(jié)合實(shí)施例描述特定的特征、結(jié)構(gòu)或特點(diǎn)時(shí),假設(shè)結(jié)合其它實(shí)施例來實(shí)現(xiàn)這樣的特征、結(jié)構(gòu)或特點(diǎn)在本領(lǐng)域技術(shù)人員的知識范圍內(nèi),無論是否做出明確說明。
[0026]如之前詳述的,數(shù)據(jù)元素的傳統(tǒng)對齊要求多次處理,得到一些不期望的結(jié)果。例如,在一些情形下,用戶經(jīng)由特定記憶術(shù)指定可能的不對齊行為(諸如執(zhí)行類似于VM0VUPS的指令),導(dǎo)致因假設(shè)高速緩沖存儲行分裂總是將要生成而引起的更緩慢的執(zhí)行。在其它情形下,硬件在運(yùn)行時(shí)間檢測高速緩沖存儲器不對齊,導(dǎo)致額外的性能懲罰。
[0027]對齊
[0028]下文中詳細(xì)說明了矢量對齊(VALIGN)指令的實(shí)施例,以及可用于執(zhí)行這樣的指令的系統(tǒng)、體系結(jié)構(gòu)、指令格式等的實(shí)施例。當(dāng)被執(zhí)行時(shí),矢量對齊指令使處理器串接指令的第一和第二源操作數(shù)的數(shù)據(jù)元素,基于指令的偏移(立即數(shù))值將來自該串接數(shù)據(jù)的數(shù)據(jù)元素向右移位,并且將移位后的串接數(shù)據(jù)的一個(gè)或多個(gè)元素存儲到目的地矢量寄存器中。在一些實(shí)施例中,待存儲在目的地矢量寄存器中的移位后的串接數(shù)據(jù)的元素是通過寫屏蔽寄存器的對應(yīng)位確定的。第一和第二源均可是寄存器、存儲器單元或其組合。在一些實(shí)施例中,當(dāng)源為存儲器單元時(shí),其數(shù)據(jù)在串接之前被加載到寄存器中。
[0029]該指令的不例為“VALIGNDzmml {kl}, zmm2, zmm3/m512, offset”,其中 zmml、zmm2、zmm3是矢量寄存器(諸如128、256、512位寄存器),m512是存儲在寄存器或立即數(shù)中的512位存儲器操作數(shù),kl是寫屏蔽操作數(shù)(諸如類似于之前所詳細(xì)說明的16位寄存器),并且offset是立即數(shù)(例如,8位立即數(shù)),其指示在源的數(shù)據(jù)元素串接之后數(shù)據(jù)元素的32位元素的對齊,如下文詳述的。從存儲器取回的無論什么都是起始于存儲器地址的集合連續(xù)位并且可以是多個(gè)尺寸(128位、256位、512位等)中的一個(gè),這取決于目的地寄存器的尺寸,該尺寸通常與目的地寄存器的尺寸相同。在一些實(shí)施例中,寫屏蔽也具有不同的尺寸(8位、32位等)。另外,在一些實(shí)施例中,指令并不使用寫屏蔽的全部位(例如,僅使用最低有效的八位)。當(dāng)然,VALIGND是指令的操作碼。通常,在指令中明確地定義每個(gè)操作數(shù)??梢栽谥噶畹摹扒熬Y”中定義數(shù)據(jù)元素的尺寸,諸如通過使用類似于之前所描述的“W”的數(shù)據(jù)粒度位的指示。在大多數(shù)實(shí)施例中,W將指示每個(gè)數(shù)據(jù)元素是32位或64位的。如果數(shù)據(jù)元素的尺寸是32位,并且源的尺寸是512位,則每個(gè)源中存在十六(16)個(gè)數(shù)據(jù)元素。[0030]圖1描繪了 ALIGN指令的示例性執(zhí)行。在該示例中,存在兩個(gè)源,每個(gè)源具有16個(gè)數(shù)據(jù)元素。在大多數(shù)情況下,這些源中的一個(gè)是寄存器(對于該示例,源1101被處理為512位寄存器,諸如具有16個(gè)32位數(shù)據(jù)元素的ZMM寄存器,然而,可以使用其它的數(shù)據(jù)元素和寄存器尺寸,諸如XMM和YMM寄存器以及16或64位數(shù)據(jù)元素)。另一個(gè)源103是寄存器或存儲器單元(在該示例中,源2為另一個(gè)源)。如果第二源是存儲器單元,則在大多數(shù)實(shí)施例中其在源的任何混合之前被置于臨時(shí)寄存器中。另外,存儲器單元的數(shù)據(jù)元素可在置于臨時(shí)寄存器中之前經(jīng)過數(shù)據(jù)變換。數(shù)據(jù)103包括從A至P的十六個(gè)數(shù)據(jù)元素,并且數(shù)據(jù)103包括從Q至AF的十六個(gè)數(shù)據(jù)元素。
[0031]如圖所示,來自寄存器101和103的數(shù)據(jù)與第一數(shù)據(jù)寄存器101的最低有效數(shù)據(jù)元素串接105,A為串接數(shù)據(jù)105的最低有效數(shù)據(jù)元素。第二數(shù)據(jù)寄存器103的最低有效數(shù)據(jù)元素Q緊跟著第一數(shù)據(jù)寄存器101的最高有效數(shù)據(jù)元素。串接數(shù)據(jù)元素105移位(對齊)三(指令的立即數(shù)值),這留下了來自原始源的數(shù)據(jù)元素D至AF。當(dāng)然,還可使用大端法(big-endian)方式,并且數(shù)據(jù)元素將向左移位相應(yīng)的立即數(shù)值。
[0032]該經(jīng)移位和串接的數(shù)據(jù)的最低有效數(shù)據(jù)元素(D至S)被寫入到指令的目的地寄存器中,直到在目的地寄存器中不存在更多的數(shù)據(jù)元素槽。在其它實(shí)施例中,最高有效數(shù)據(jù)元素被寫入目的地寄存器107中。該寫入可并行地或串行地完成。如圖所示,十六個(gè)最低有效數(shù)據(jù)元素被寫入目的地寄存器中,因其僅具有存儲該尺寸的十六個(gè)數(shù)據(jù)元素的空間。
[0033]圖2示出了相同的源數(shù)據(jù)和移位,但是使用屏蔽寄存器201的內(nèi)容來確定經(jīng)串接和移位的數(shù)據(jù)105中的哪些最低有效數(shù)據(jù)元素應(yīng)當(dāng)被寫入目的地寄存器中。在一些實(shí)施例中,該屏蔽寄存器是上文詳述的“k”屏蔽寄存器(kl-k7)。屏蔽寄存器顯示為0x878B。對于掩碼的存儲值“I”的每個(gè)位置,來自經(jīng)串接和移位的數(shù)據(jù)105的相應(yīng)數(shù)據(jù)元素被寫入目的地寄存器的相應(yīng)位置上。例如,因?yàn)檠诖a的位置“O”為“1”,則經(jīng)移位和串接的數(shù)據(jù)元素中的相應(yīng)數(shù)據(jù)元素位置“O”的值D被存儲到目的地寄存器的“O”位置上。對于掩碼的存儲值“O”的每個(gè)位置,目的地寄存器的相應(yīng)數(shù)據(jù)元素不會被覆寫。例如,在位置“2”上,掩碼為“0”,因此目的地仍為DC,而不是被值F覆寫。盡管“ I ”被顯示為指示特定的數(shù)據(jù)元素位置應(yīng)當(dāng)被寫入目的地寄存器中并且“O”指示不進(jìn)行該寫入,但是在其它實(shí)施例中使用相反的約定。另外,在一些實(shí)施例中,寫入最高有效數(shù)據(jù)元素,而不是最低有效數(shù)據(jù)元素。
[0034]圖3示出了相同的源數(shù)據(jù)和移位,但是使用屏蔽寄存器的內(nèi)容來確定經(jīng)串接和移位的數(shù)據(jù)105中的哪些最低有效數(shù)據(jù)元素應(yīng)當(dāng)被寫入目的地寄存器中。在該實(shí)例中,不使用全部的屏蔽位。這可能發(fā)生于例如具有64位數(shù)據(jù)元素和512位寄存器的一些實(shí)施例中。
[0035]圖4示出了通過在處理器中執(zhí)行對齊指令而對齊來自兩個(gè)源的數(shù)據(jù)且將該對齊存儲到目的地位置上的方法的實(shí)施例。在401中,接收具有目的地操作數(shù)、第一和第二源操作數(shù)、偏移(立即數(shù))值和掩碼操作數(shù)的對齊指令。目的地操作數(shù)和源操作數(shù)具有相同的尺寸。在一些實(shí)施例中,目的地操作數(shù)和源操作數(shù)的尺寸均為512位。然而,在其它實(shí)施例中,目的地操作數(shù)和源操作數(shù)可具有不相同的尺寸,諸如128位或256位。典型地,目的地操作數(shù)和第一源操作數(shù)均為寄存器,諸如上述矢量寄存器(XMM、YMM或ZMM)中的一個(gè)。第二源操作數(shù)可以是寄存器或存儲器操作數(shù)。在一些實(shí)施例中,偏移是8位立即數(shù)。所接收到的掩碼可以是前述“k”寫屏蔽中的一個(gè),或在一些實(shí)施例中,其可以是不同的寄存器或存儲器單元。[0036]在403中對對齊指令進(jìn)行解碼。根據(jù)指令的格式,可在該階段對各數(shù)據(jù)進(jìn)行解釋,諸如,是否將要進(jìn)行數(shù)據(jù)變換、寫入和檢索哪些寄存器、利用存儲器源操作數(shù)以及可能的偏移(如果包括的話)存取哪個(gè)存儲器地址,等等。
[0037]在405中對源操作數(shù)值進(jìn)行取回/讀取。如果兩個(gè)源均為寄存器,則對那些寄存器進(jìn)行讀取。如果源操作數(shù)中的一個(gè)或兩個(gè)為存儲器操作數(shù),則取回與該操作數(shù)相關(guān)聯(lián)的數(shù)據(jù)元素。在一些實(shí)施例中,來自存儲器的數(shù)據(jù)元素被存儲到臨時(shí)寄存器中。
[0038]如果將要進(jìn)行任何數(shù)據(jù)元素變換(諸如向上轉(zhuǎn)換、廣播、混合(swizzle)等),可以在407中進(jìn)行。例如,來自存儲器的16位數(shù)據(jù)元素可被向上轉(zhuǎn)換成32位數(shù)據(jù)元素,或者數(shù)據(jù)元素可從一種模式混合成另一種模式(例如,從XYZW XYZff XYZW…XYZW混合成XXXXXXXXYYYYYYYY ZZZZZZZZ Wffffffffffffff)。
[0039]在409中執(zhí)行對齊指令。該指令的執(zhí)行使得第一和第二源操作數(shù)的數(shù)據(jù)元素串接,基于偏移將來自該串接數(shù)據(jù)的這些數(shù)據(jù)元素向右移位。在一些實(shí)施例中,第一源操作數(shù)數(shù)據(jù)元素是串接數(shù)據(jù)元素中的最低有效數(shù)據(jù)元素。在411中,經(jīng)移位的串接數(shù)據(jù)中的一些數(shù)據(jù)元素可根據(jù)寫屏蔽寄存器的相應(yīng)位而被存儲到目的地矢量寄存器中。盡管單獨(dú)地示出了 409和411,但在一些實(shí)施例中,它們可以作為指令執(zhí)行的一部分一起執(zhí)行。
[0040]盡管上文在一種類型的執(zhí)行環(huán)境中進(jìn)行了闡述說明,但是易于修改以適應(yīng)其它環(huán)境,諸如所詳述的有序環(huán)境和無序環(huán)境。
[0041]圖5示出了用于處理對齊指令的方法的實(shí)施例。在該實(shí)施例中,假設(shè)之前已經(jīng)執(zhí)行了操作401-407中的一些(如果不是全部),然而,為了避免使下文給出的細(xì)節(jié)不清晰,未示出這些操作。例如,未示出取出和解碼,也沒有示出操作數(shù)(源和寫屏蔽)取回。
[0042]在501中,串接第一和第二源的數(shù)據(jù)元素以形成待操作的較大“矢量”。例如,來自兩個(gè)源寄存器的數(shù)據(jù)被串接以使第一源的數(shù)據(jù)元素為較低有效位并且使第二源的數(shù)據(jù)元素為最高有效位,如圖1和圖2中所示。在一些實(shí)施例中,該較大的矢量為1024位。顯然,較大的矢量的該尺寸取決于源的尺寸。
[0043]在503中,第一和第二源的串接數(shù)據(jù)向右移位由指令的立即數(shù)值定義的數(shù)據(jù)元素的量。
[0044]可以在505中確定是否使用寫屏蔽。這是任選的,取決于基礎(chǔ)硬件體系結(jié)構(gòu)的實(shí)現(xiàn)。例如,如果使用類似于上文詳述的k0的寫屏蔽寄存器,則將不使用掩碼。盡管k0是當(dāng)其包括在指令中時(shí)可被寫入的寄存器,但是這表示不進(jìn)行屏蔽(換言之,在所有的位位置上基本上為值“I”)。當(dāng)然,在其它體系結(jié)構(gòu)中,可以用作任何其它所期望的寄存器。
[0045]如果使用寫屏蔽,則對于寫屏蔽中的每個(gè)位位置,在507中確定該位位置是否指示第一和第二源的經(jīng)移位的串接數(shù)據(jù)的相應(yīng)元素將被存儲在目的地寄存器的相應(yīng)位置上。在一些實(shí)施例中,串行地執(zhí)行該確定和/或可能的稍后在511中的存儲,也就是說,對于第一位位置(即,kl [O])做出確定,然后對順序位位置進(jìn)行評估。在其它實(shí)施例中,并行地執(zhí)行該確定和/或可能的稍后在511中的存儲,也就是說,同時(shí)對于所有的位位置(即,kl[0]-kl[15])做出確定。另外,待評估的位位置的數(shù)量根據(jù)數(shù)據(jù)元素尺寸而變化。例如,在具有32位數(shù)據(jù)元素的512位實(shí)現(xiàn)中,對于該確定評估掩碼的十六個(gè)(16)位。在具有64位數(shù)據(jù)元素的512位實(shí)現(xiàn)中,僅對掩碼的八個(gè)(8)位進(jìn)行評估。在該實(shí)例中,典型地對最低有效的八個(gè)(8)位進(jìn)行評估,但是可以使用其它的約定。[0046]當(dāng)掩碼的位位置指示什么都不應(yīng)寫入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上時(shí),在509中什么都不寫入到目的地寄存器中。當(dāng)掩碼的位位置指示經(jīng)移位的串接數(shù)據(jù)的相應(yīng)數(shù)據(jù)應(yīng)當(dāng)寫入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置時(shí),則在511中其被寫入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上。這種存儲裝置的示例顯示在圖2中。如果不使用掩碼,則在511中將經(jīng)移位的串接數(shù)據(jù)的全部相應(yīng)數(shù)據(jù)元素均存儲在目的地寄存器的相應(yīng)數(shù)據(jù)元素位置。這種存儲裝置的示例顯示在圖1中。
[0047]一旦掩碼的最后一個(gè)位位置被視為已評估,或者可被寫的目的地中的全部數(shù)據(jù)元素位置已被評估,則方法結(jié)束。
[0048]圖6示出了用于處理對齊指令的方法的實(shí)施例。在該實(shí)施例中,假設(shè)之前已經(jīng)執(zhí)行了操作401-407中的一些(如果不是全部),然而,為了避免使下文給出的細(xì)節(jié)不清晰,沒有示出這些操作。例如,未示出取出和解碼,也沒有示出操作數(shù)(源和寫屏蔽)取回。
[0049]在601中將第一和第二源的數(shù)據(jù)元素串接以形成待操作的較大“矢量”。例如,來自兩個(gè)源寄存器的數(shù)據(jù)被串接以使第一源的數(shù)據(jù)元素為較低有效位并且使第二源的數(shù)據(jù)元素為最高有效,如圖1和圖2所示。在一些實(shí)施例中,該較大的矢量為1024位。顯然,較大矢量的該尺寸取決于源的尺寸。
[0050]在603中,第一和第二源的串接數(shù)據(jù)向右移位由指令的立即數(shù)值定義的數(shù)據(jù)元素的量。
[0051]還可以確定是否使用寫屏蔽(未示出)。這是任選的,取決于如之前詳述的基礎(chǔ)硬件體系結(jié)構(gòu)的實(shí)現(xiàn)。如果不使用掩碼,則在605或607中不進(jìn)行任何校驗(yàn)。
[0052]對于寫屏蔽中的第一位位置,在605中確定該位位置是否指示第一和第二源的經(jīng)移位的串接數(shù)據(jù)的相應(yīng)元素將被存儲在目的地寄存器的相應(yīng)位置上。如果掩碼的第一位位置指示什么都不應(yīng)寫入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上,則在609中什么都不寫入到目的地寄存器中。如果掩碼的第一位位置指示經(jīng)移位的串接數(shù)據(jù)的相應(yīng)數(shù)據(jù)應(yīng)被寫入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上,則在611中其被寫入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上。在圖2中示出了這種存儲的示例。
[0053]在613中,確定評估的寫屏蔽位置是否為寫屏蔽中的最后一個(gè)或者目的地的全部數(shù)據(jù)元素位置是否已經(jīng)被填滿。如果為真,則操作結(jié)束。當(dāng)例如數(shù)據(jù)元素尺寸為64位、目的地為512位并且寫屏蔽具有16位時(shí),可能發(fā)生后者的情況。在該實(shí)例中,僅需要寫屏蔽中的8位。
[0054]如果不為真,則在615中寫屏蔽中的下一個(gè)位位置將被評估以確定其值。而且,在607等中評估位位置。一旦掩碼的最后一個(gè)位位置被視為已評估,或者可以寫入的目的地中的全部數(shù)據(jù)元素位置已被評估,則方法結(jié)束。
[0055]圖7示出了處理偽碼的對齊指令的方法的實(shí)施例。
[0056]程序典型地以順序方式存取存儲器。例如,在位于地址@處的第一個(gè)512位矢量處存取參考(a),在位于地址@+64個(gè)字節(jié)的第二個(gè)512位矢量處存取參考(b),并且在位于地址@+128個(gè)字節(jié)的第一個(gè)512位矢量處存取參考(C)。在該方案中,參考(a)被定位成跨越高速緩沖存儲行A和B,參考(b)被定位成跨越高速緩沖存儲行B和C,并且參考(c)被定位成跨越高速緩沖存儲行C和D。利用規(guī)律的負(fù)荷,高速緩沖存儲行B和C將被存取兩次,并且整個(gè)高速緩沖存儲行存取次數(shù)將為6 (3X2)。[0057]—般而言,高速緩沖存儲行端口是比寄存器端口更精確的資源。上文討論的對齊指令的實(shí)施例對寄存器執(zhí)行數(shù)據(jù)對齊,而不是對高速緩沖存儲行執(zhí)行對齊,因此,這種指令提供了性能增益。利用對齊指令,高速緩沖存儲行數(shù)據(jù)在寄存器中被對齊,并且通常僅有在每個(gè)矢量參考中取出的一個(gè)新的高速緩沖存儲行,而不是存取每一個(gè)高速緩沖存儲行兩次,僅讀取一次并且同時(shí)與高速緩沖存儲器存取對齊,平衡每個(gè)周期中一個(gè)矢量的吞吐量,而仍使用僅一個(gè)單存儲器端口。
[0058]上文所描述和具體實(shí)施的指令的實(shí)施例可以下文詳述的“一般矢量友好指令格式”來具體實(shí)施。在其它實(shí)施例中,不使用這樣的格式,而使用另一種指令格式,然而,以下對寫屏蔽寄存器、各種數(shù)據(jù)變換(混合、廣播等)、尋址等的描述通常適用于上文的指令的實(shí)施例的描述。另外,下文詳述了示例性的系統(tǒng)、體系結(jié)構(gòu)和管線。上文的指令的實(shí)施例可在這樣的系統(tǒng)、體系結(jié)構(gòu)和管線上執(zhí)行,但是不限于所詳述的那些。
[0059]矢量友好指令格式是適合于矢量指令的指令格式(例如,存在專用于矢量運(yùn)算的一些字段)。盡管描述了通過矢量友好指令格式支持矢量運(yùn)算和標(biāo)量運(yùn)算的實(shí)施例,但是可選的實(shí)施例僅使用矢量友好指令格式的矢量運(yùn)算。
[0060]示例性的一般矢量友好指令格式一圖8A-B
[0061]圖8A-B為示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其指令模板的框圖。圖8A為示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其A類指令模板的框圖;而圖SB為示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其B類指令模板的框圖。具體地,為一般矢量友好指令格式800限定A類和B類指令模板,兩者均包括無儲器存取805指令模板和存儲器存取820指令模板。在矢量友好指令格式的背景下術(shù)語“一般”是指不與任何具體指令集相關(guān)聯(lián)的指令格式。盡管描述了矢量友好指令格式的指令在源自于寄存器(無存儲器存取805指令模板)或寄存器/存儲器(存儲器存取820指令模板)的矢量上操作的實(shí)施例,但本發(fā)明的替代實(shí)施例可支持這些中的僅一種。而且,盡管描述了存在加載且存儲矢量指令格式的指令的本發(fā)明的實(shí)施例,但可選的實(shí)施例代替地或另外地具有將矢量移入和移出寄存器(例如,從存儲器到寄存器,從寄存器到存儲器,在寄存器之間)的不同指令格式的指令。此外,盡管描述了支持兩類指令模板的本發(fā)明的實(shí)施例,但是替代的實(shí)施例可以僅支持這些中的一個(gè)或多于兩個(gè)。
[0062]盡管描述了矢量友好指令格式支持以下的本發(fā)明的實(shí)施例:具有32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或尺寸)的64字節(jié)矢量操作數(shù)長度(或尺寸)(并且因此,64字節(jié)矢量由16個(gè)雙倍字尺寸的元素或可替代的8個(gè)四倍字尺寸的元素構(gòu)成);具有16位(2字節(jié))或8位(I字節(jié))數(shù)據(jù)元素寬度(或尺寸)的64字節(jié)矢量操作數(shù)長度(或尺寸);具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(I字節(jié))數(shù)據(jù)元素寬度(或尺寸)的32字節(jié)矢量操作數(shù)長度(或尺寸);以及具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(I字節(jié))數(shù)據(jù)元素寬度(或尺寸)的16字節(jié)矢量操作數(shù)長度(或尺寸);但是可選的實(shí)施例可以支持具有更多、更少、或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)的更多、更少和/或不同的矢量操作數(shù)尺寸(例如,856字節(jié)矢量操作數(shù))。
[0063]圖8A中的A類指令模板包括:I)在無存儲器存取805指令模板內(nèi),示出了無存儲器存取、全取整控制型操作810指令模板以及無存儲器存取、數(shù)據(jù)變換型操作815指令模板;以及2)在存儲器存取820指令模板內(nèi),示出了存儲器存取、臨時(shí)825指令模板和存儲器存取、非臨時(shí)830指令模板。圖8B中的B類指令模板包括:1)在無存儲器存取805指令模板內(nèi),示出了無存儲器存取、寫屏蔽控制、部分取整控制型操作812指令模板和無存儲器存取、寫屏蔽控制、vsize型操作817指令模板;以及2)在存儲器存取820指令模板內(nèi),示出了存儲器存取、寫屏蔽控制827指令模板。
[0064]格式
[0065]一般矢量友好指令格式800包括在圖8A-B中所示出的次序列于下面的下列字段。
[0066]格式字段840—在該字段中的具體值(指令格式標(biāo)識符值)唯一地標(biāo)識矢量友好指令格式,并且因此唯一地表示指令流中的矢量友好指令格式的指令的出現(xiàn)。因此,格式字段840的內(nèi)容將第一指令格式的指令的出現(xiàn)與其它指令格式的指令的出現(xiàn)區(qū)分開,從而允許將矢量友好指令格式引入具有其它指令格式的指令集中。因此,從該字段無需用于僅具有一般矢量友好指令格式的指令集的意義上講,該字段是任選的。
[0067]基礎(chǔ)操作字段842—其內(nèi)容將不同的基礎(chǔ)操作區(qū)分開。如本文稍后描述的,基礎(chǔ)操作字段842可包括操作碼字段和/或作為操作碼字段的部分。
[0068]寄存器索引字段844—其內(nèi)容直接地或者通過地址生成來指定源和目的地操作數(shù)的位置,如它們在寄存器或存儲器中。這些包括從PXQ (例如,32X1012)寄存器文件中選擇N個(gè)寄存器的足量的位。盡管在一個(gè)實(shí)施例中N可多達(dá)三個(gè)源和一個(gè)目的地寄存器,但是替代的實(shí)施例可支持更多或更少的源和目的地寄存器(例如,可以支持多達(dá)兩個(gè)源,其中這些源中的一個(gè)還充當(dāng)目的地;可以支持多達(dá)三個(gè)源,其中這些源中的一個(gè)還充當(dāng)目的地;可以支持多達(dá)兩個(gè)源和一個(gè)目的地)。盡管在一個(gè)實(shí)施例中P=32,但是替代實(shí)施例可以支持更多或更少的寄存器(例如,16)。盡管在一個(gè)實(shí)施例中Q=1012位,但替代實(shí)施例可以支持更多或更少的位(例如,128、1024)。
[0069]修飾符字段846—其內(nèi)容將指定存儲器存取的一般矢量指令格式的指令的出現(xiàn)與不指定存儲器存取的一般矢量指令格式的那些指令的出現(xiàn)區(qū)分開;也就是說,區(qū)分無存儲器存取805指令模板和存儲器存取820指令模板。存儲器存取操作對存儲器層級進(jìn)行讀和/或?qū)?在一些情況下,利用寄存器中的值來指定源和/或目的地地址),而無存儲器存取操作不這樣(例如,源和目的地均為寄存器)。盡管在一個(gè)實(shí)施例中該字段還在三種不同方式之間選擇以執(zhí)行存儲器地址計(jì)算,但是替代的實(shí)施例可以支持更多、更少或不同的方式來執(zhí)行存儲器地址計(jì)算。
[0070]擴(kuò)增操作字段850—其內(nèi)容對除了基礎(chǔ)操作之外執(zhí)行多種不同操作中的哪一個(gè)進(jìn)行區(qū)分。該字段是上下文特定的。在本發(fā)明的一個(gè)實(shí)施例中,該字段被分成類字段868、α(alpha)字段852和β (beta)字段854。擴(kuò)增操作字段允許在單個(gè)指令而不是2個(gè)、3個(gè)或4個(gè)指令中執(zhí)行共同組的操作。下文是使用擴(kuò)增字段850來減少所需指令數(shù)量的指令的一些示例(其術(shù)語稍后將在下文中進(jìn)行更詳細(xì)的說明)。
[0071]
【權(quán)利要求】
1.一種在計(jì)算機(jī)處理器中執(zhí)行對齊指令的方法,包括: 取出所述對齊指令,其中所述對齊指令包括寫屏蔽操作數(shù)、目的地操作數(shù)、第一源操作數(shù)、第二源操作數(shù)和偏移值; 對所取出的對齊指令進(jìn)行解碼; 通過如下操作來執(zhí)行經(jīng)解碼的對齊指令 將所述第一源操作數(shù)的第一多個(gè)數(shù)據(jù)元素和所述第二源操作數(shù)的第二多個(gè)數(shù)據(jù)元素串接, 基于所述偏移值將串接的數(shù)據(jù)元素向右移位,以及 基于寫屏蔽的相應(yīng)位來確定向右移位的、串接的數(shù)據(jù)元素的哪些將被存儲在目的地的相應(yīng)位置上;以及 將所述向右移位的、串接的數(shù)據(jù)元素的已被確定為應(yīng)當(dāng)存儲到所述目的地的那些數(shù)據(jù)元素存儲在所述目的地中的所述相應(yīng)位置上。
2.如權(quán)利要求1所述的方法,其中所述寫屏蔽是16位寄存器。
3.如權(quán)利要求1所述的方法,其中所述偏移是8位立即數(shù)值。
4.如權(quán)利要求1所述的方法,還包括: 確定是否使用所述寫屏蔽;以及 如果不使用所述寫屏蔽,則將所述向右移位的、串接的數(shù)據(jù)元素中的數(shù)據(jù)元素存儲在所述目的地的所述相應(yīng)位置上,而不基于所述寫屏蔽的相應(yīng)位來確定所述向右移位的、串接的數(shù)據(jù)元素中的哪些將被存儲在所述目的地的相應(yīng)位置上。
5.如權(quán)利要求1所述的方法,其中針對所述寫屏蔽的每個(gè)位位置并行地進(jìn)行所述確定。
6.如權(quán)利要求1所述的方法,其中所述第一源操作數(shù)和第二源操作數(shù)是512位寄存器。
7.如權(quán)利要求1所述的方法,其中所述第二源操作數(shù)是512位存儲器單元,并且來自所述存儲器單元的數(shù)據(jù)元素在所述源的串接之前被加載到臨時(shí)的512位寄存器中。
8.如權(quán)利要求1所述的方法,其中所述第一操作數(shù)的數(shù)據(jù)元素是所述向右移位的、串接的數(shù)據(jù)元素中的最低有效數(shù)據(jù)元素。
9.一種方法,包括: 響應(yīng)對齊指令,所述對齊指令包括第一和第二源操作數(shù)、目的地操作數(shù)、寫屏蔽操作數(shù)和偏移, 將第一源的第一數(shù)據(jù)元素集合與第二源的第二數(shù)據(jù)元素集合串接; 將串接的數(shù)據(jù)元素向右移位X數(shù)據(jù)元素,其中X是在所述對齊指令中提供的立即數(shù)值;以及 對于寫屏蔽的第一位位置,確定所述第一位位置是否指示經(jīng)移位的、串接的數(shù)據(jù)元素的相應(yīng)數(shù)據(jù)元素將被存儲在目的地的相應(yīng)位置上, 當(dāng)所述寫屏蔽的所述第一位位置指示所述經(jīng)移位的、串接的數(shù)據(jù)元素的所述相應(yīng)數(shù)據(jù)元素應(yīng)當(dāng)被存 儲時(shí),將所述經(jīng)移位的、串接的數(shù)據(jù)元素的所述相應(yīng)數(shù)據(jù)元素存儲在所述目的地中的相應(yīng)位置上,并且 當(dāng)所述寫屏蔽的所述第一位位置指示其相應(yīng)數(shù)據(jù)元素不應(yīng)被存儲在所述目的地中時(shí),不對所述目的地中的所述相應(yīng)位置上的數(shù)據(jù)元素進(jìn)行處理。
10.如權(quán)利要求9所述的方法,還包括: 將所述第一源的第一數(shù)據(jù)元素集合與所述第二源的第二數(shù)據(jù)元素集合串接; 對于寫屏蔽的第二位位置,確定所述第二位位置是否指示所述經(jīng)移位的、串接的數(shù)據(jù)元素的相應(yīng)數(shù)據(jù)元素將被存儲在所述目的地中的相應(yīng)位置上, 當(dāng)所述寫屏蔽的所述第二位位置指示所述經(jīng)移位的、串接的數(shù)據(jù)元素的所述相應(yīng)數(shù)據(jù)元素應(yīng)當(dāng)被存儲時(shí),將所述經(jīng)移位的、串接的數(shù)據(jù)元素的所述相應(yīng)數(shù)據(jù)元素存儲在所述目的地的相應(yīng)位置上,并且 當(dāng)所述寫屏蔽的所述第二位位置指示其相應(yīng)數(shù)據(jù)元素不應(yīng)當(dāng)被存儲在所述目的地中時(shí),不對所述目的地中的所述相應(yīng)位置上的數(shù)據(jù)元素進(jìn)行處理。
11.如權(quán)利要求10所述的方法,還包括: 確定最后一個(gè)位位置何時(shí)已被評估以確定所述經(jīng)移位的、串接的數(shù)據(jù)元素的相應(yīng)數(shù)據(jù)元素是否將被存儲在所述目的地中的相應(yīng)位置上,從而完成所述對齊指令。
12.如權(quán)利要求9所述的方法,其中所述寫屏蔽的所述第一位位置是所述寫屏蔽的最低有效位。
13.如權(quán)利要求9所述的方法,其中所述寫屏蔽是16位寄存器。
14.如權(quán)利要求9所述的方法,其中所述偏移是8位立即數(shù)值。
15.如權(quán)利要求9所述的方法,其中針對所述寫屏蔽的每個(gè)位位置并行地進(jìn)行所述確定。
16.如權(quán)利要求1所述的方法,其中所述第一和第二源操作數(shù)是512位寄存器。
17.如權(quán)利要求1所述的方法,其中所述第二源操作數(shù)是512位存儲器單元,并且來自所述存儲器單元的數(shù)據(jù)元素在所述源的串接之前被加載到臨時(shí)的512位寄存器中。
18.一種裝置,包括: 硬件解碼器,其用于對對齊指令進(jìn)行解碼,其中所述對齊指令包括寫屏蔽操作數(shù)、目的地操作數(shù)、第一源操作數(shù)、第二源操作數(shù)和偏移值; 執(zhí)行邏輯,用于 將所述第一源操作數(shù)的第一多個(gè)數(shù)據(jù)元素和所述第二源操作數(shù)的第二多個(gè)數(shù)據(jù)元素串接, 基于所述偏移值將串接的數(shù)據(jù)元素向右移位, 基于所述寫屏蔽的相應(yīng)位來確定向右移位的、串接的數(shù)據(jù)元素的哪些將被存儲到目的地的相應(yīng)位置上,以及 將所述向右移位的、串接的數(shù)據(jù)元素的已被確定為應(yīng)當(dāng)存儲到所述目的地的那些數(shù)據(jù)元素存儲在所述目的地中的所述相應(yīng)位置上。
19.如權(quán)利要求18所述的裝置,還包括: 用于存儲所述寫屏蔽的16位寫屏蔽寄存器;以及 用于存儲所述第一和第二源的數(shù)據(jù)元素的至少兩個(gè)512位寄存器。
【文檔編號】G06F9/30GK103562854SQ201280026790
【公開日】2014年2月5日 申請日期:2012年3月29日 優(yōu)先權(quán)日:2011年4月1日
【發(fā)明者】J·C·圣阿德里安, R·E·桑斯, M·B·吉爾卡爾, L·K·吳, D·R·布拉德福德, V·W·李 申請人:英特爾公司