两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

用于對(duì)齊寄存器的系統(tǒng)、裝置和方法與流程

文檔序號(hào):11774022閱讀:531來(lái)源:國(guó)知局
用于對(duì)齊寄存器的系統(tǒng)、裝置和方法與流程

本申請(qǐng)是2012年03月29日提交的申請(qǐng)?zhí)枮?01280026790.x的同名專利申請(qǐng)的分案申請(qǐng)。

本發(fā)明的領(lǐng)域一般涉及計(jì)算機(jī)處理器體系結(jié)構(gòu),尤其涉及當(dāng)被執(zhí)行時(shí)引起特定結(jié)果的指令。



背景技術(shù):

隨著處理器的單指令多數(shù)據(jù)(simd)寬度增加,應(yīng)用程序開(kāi)發(fā)者(和編譯器)越來(lái)越難以充分使用simd硬件,因?yàn)閿?shù)據(jù)元素不會(huì)自然地與全矢量的大小對(duì)齊并且通常產(chǎn)生高速緩沖存儲(chǔ)行分裂,其中存儲(chǔ)器參考位于高速緩沖存儲(chǔ)器層級(jí)的兩個(gè)不同行上。常規(guī)地,處理高速緩沖存儲(chǔ)行分裂涉及到:檢測(cè)高速緩沖存儲(chǔ)行分裂狀態(tài),進(jìn)行兩次不同的tlb查找,進(jìn)行兩次高速緩沖存儲(chǔ)行存取,以及因此使用兩個(gè)獨(dú)立的存儲(chǔ)器端口,和/或使用專用邏輯在來(lái)自存儲(chǔ)器途中合并來(lái)自兩個(gè)連續(xù)高速緩沖存儲(chǔ)行的數(shù)據(jù)片。

附圖說(shuō)明

在附圖中通過(guò)舉例的方式而不是限制的方式闡述了本發(fā)明,其中相似的附圖標(biāo)記表示相似的元件,并且其中:

圖1描繪了align(對(duì)齊)指令的示例性執(zhí)行。

圖2描繪了align指令的示例性執(zhí)行。

圖3描繪了align指令的示例性執(zhí)行。

圖4示出了通過(guò)在處理器中執(zhí)行對(duì)齊指令而對(duì)齊來(lái)自兩個(gè)源的數(shù)據(jù)以及將該對(duì)齊存儲(chǔ)到目的地位置的方法的實(shí)施例。

圖5示出了用于處理對(duì)齊指令的方法的實(shí)施例。

圖6示出了用于處理對(duì)齊指令的方法的實(shí)施例。

圖7示出了用于處理偽碼的對(duì)齊指令的方法的實(shí)施例。

圖8a是示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其a類指令模板的框圖。

圖8b是示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其b類指令模板的框圖。

圖9a-c示出了根據(jù)本發(fā)明的實(shí)施例的示例性的特定矢量友好指令格式。

圖10是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器體系結(jié)構(gòu)的框圖。

圖11a是根據(jù)本發(fā)明的實(shí)施例的單cpu核心連同其與片上互連網(wǎng)絡(luò)的連接以及其2級(jí)(l2)高速緩沖存儲(chǔ)器的本地子集的框圖。

圖11b是根據(jù)本發(fā)明的實(shí)施例的圖11a中的cpu核心的部分的分解視圖。

圖12是示出根據(jù)本發(fā)明的實(shí)施例的示例性的無(wú)序體系結(jié)構(gòu)的框圖。

圖13是依照本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)的框圖。

圖14是依照本發(fā)明的實(shí)施例的第二系統(tǒng)的框圖。

圖15是依照本發(fā)明的實(shí)施例的第三系統(tǒng)的框圖。

圖16是依照本發(fā)明的實(shí)施例的soc的框圖。

圖17是根據(jù)本發(fā)明的實(shí)施例的具有集成的存儲(chǔ)器控制器和圖形的單核處理器和多核處理器的框圖。

圖18是根據(jù)本發(fā)明的實(shí)施例的對(duì)照將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的軟件指令轉(zhuǎn)換器的使用的框圖。

具體實(shí)施方式

在下面的說(shuō)明中,闡述了多方面具體細(xì)節(jié)。然而,應(yīng)當(dāng)理解的是,本發(fā)明的實(shí)施例可在不具有這些具體細(xì)節(jié)的情況下實(shí)現(xiàn)。在其它實(shí)例中,為了不使得本說(shuō)明的理解不清晰,未詳細(xì)示出公知的電路、結(jié)構(gòu)和技術(shù)。

說(shuō)明書(shū)中提到“一個(gè)實(shí)施例”、“實(shí)施例”、“示例性實(shí)施例”等表示所描述的實(shí)施例可包括特定的特征、結(jié)構(gòu)或特點(diǎn),但是每個(gè)實(shí)施例可不必包括該特定的特征、結(jié)構(gòu)或特點(diǎn)。而且,這種術(shù)語(yǔ)不一定指的是同一實(shí)施例。此外,當(dāng)結(jié)合實(shí)施例描述特定的特征、結(jié)構(gòu)或特點(diǎn)時(shí),假設(shè)結(jié)合其它實(shí)施例來(lái)實(shí)現(xiàn)這樣的特征、結(jié)構(gòu)或特點(diǎn)在本領(lǐng)域技術(shù)人員的知識(shí)范圍內(nèi),無(wú)論是否做出明確說(shuō)明。

如之前詳述的,數(shù)據(jù)元素的傳統(tǒng)對(duì)齊要求多次處理,得到一些不期望的結(jié)果。例如,在一些情形下,用戶經(jīng)由特定記憶術(shù)指定可能的不對(duì)齊行為(諸如執(zhí)行類似于vmovups的指令),導(dǎo)致因假設(shè)高速緩沖存儲(chǔ)行分裂總是將要生成而引起的更緩慢的執(zhí)行。在其它情形下,硬件在運(yùn)行時(shí)間檢測(cè)高速緩沖存儲(chǔ)器不對(duì)齊,導(dǎo)致額外的性能懲罰。

對(duì)齊

下文中詳細(xì)說(shuō)明了矢量對(duì)齊(valign)指令的實(shí)施例,以及可用于執(zhí)行這樣的指令的系統(tǒng)、體系結(jié)構(gòu)、指令格式等的實(shí)施例。當(dāng)被執(zhí)行時(shí),矢量對(duì)齊指令使處理器串接指令的第一和第二源操作數(shù)的數(shù)據(jù)元素,基于指令的偏移(立即數(shù))值將來(lái)自該串接數(shù)據(jù)的數(shù)據(jù)元素向右移位,并且將移位后的串接數(shù)據(jù)的一個(gè)或多個(gè)元素存儲(chǔ)到目的地矢量寄存器中。在一些實(shí)施例中,待存儲(chǔ)在目的地矢量寄存器中的移位后的串接數(shù)據(jù)的元素是通過(guò)寫(xiě)屏蔽寄存器的對(duì)應(yīng)位確定的。第一和第二源均可是寄存器、存儲(chǔ)器單元或其組合。在一些實(shí)施例中,當(dāng)源為存儲(chǔ)器單元時(shí),其數(shù)據(jù)在串接之前被加載到寄存器中。

該指令的示例為“valigndzmm1{k1},zmm2,zmm3/m512,offset”,其中zmm1、zmm2、zmm3是矢量寄存器(諸如128、256、512位寄存器),m512是存儲(chǔ)在寄存器或立即數(shù)中的512位存儲(chǔ)器操作數(shù),k1是寫(xiě)屏蔽操作數(shù)(諸如類似于之前所詳細(xì)說(shuō)明的16位寄存器),并且offset是立即數(shù)(例如,8位立即數(shù)),其指示在源的數(shù)據(jù)元素串接之后數(shù)據(jù)元素的32位元素的對(duì)齊,如下文詳述的。從存儲(chǔ)器取回的無(wú)論什么都是起始于存儲(chǔ)器地址的集合連續(xù)位并且可以是多個(gè)尺寸(128位、256位、512位等)中的一個(gè),這取決于目的地寄存器的尺寸,該尺寸通常與目的地寄存器的尺寸相同。在一些實(shí)施例中,寫(xiě)屏蔽也具有不同的尺寸(8位、32位等)。另外,在一些實(shí)施例中,指令并不使用寫(xiě)屏蔽的全部位(例如,僅使用最低有效的八位)。當(dāng)然,valignd是指令的操作碼。通常,在指令中明確地定義每個(gè)操作數(shù)??梢栽谥噶畹摹扒熬Y”中定義數(shù)據(jù)元素的尺寸,諸如通過(guò)使用類似于之前所描述的“w”的數(shù)據(jù)粒度位的指示。在大多數(shù)實(shí)施例中,w將指示每個(gè)數(shù)據(jù)元素是32位或64位的。如果數(shù)據(jù)元素的尺寸是32位,并且源的尺寸是512位,則每個(gè)源中存在十六(16)個(gè)數(shù)據(jù)元素。

圖1描繪了align指令的示例性執(zhí)行。在該示例中,存在兩個(gè)源,每個(gè)源具有16個(gè)數(shù)據(jù)元素。在大多數(shù)情況下,這些源中的一個(gè)是寄存器(對(duì)于該示例,源1101被處理為512位寄存器,諸如具有16個(gè)32位數(shù)據(jù)元素的zmm寄存器,然而,可以使用其它的數(shù)據(jù)元素和寄存器尺寸,諸如xmm和ymm寄存器以及16或64位數(shù)據(jù)元素)。另一個(gè)源103是寄存器或存儲(chǔ)器單元(在該示例中,源2為另一個(gè)源)。如果第二源是存儲(chǔ)器單元,則在大多數(shù)實(shí)施例中其在源的任何混合之前被置于臨時(shí)寄存器中。另外,存儲(chǔ)器單元的數(shù)據(jù)元素可在置于臨時(shí)寄存器中之前經(jīng)過(guò)數(shù)據(jù)變換。數(shù)據(jù)103包括從a至p的十六個(gè)數(shù)據(jù)元素,并且數(shù)據(jù)103包括從q至af的十六個(gè)數(shù)據(jù)元素。

如圖所示,來(lái)自寄存器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移位(對(duì)齊)三(指令的立即數(shù)值),這留下了來(lái)自原始源的數(shù)據(jù)元素d至af。當(dāng)然,還可使用大端法(big-endian)方式,并且數(shù)據(jù)元素將向左移位相應(yīng)的立即數(shù)值。

該經(jīng)移位和串接的數(shù)據(jù)的最低有效數(shù)據(jù)元素(d至s)被寫(xiě)入到指令的目的地寄存器中,直到在目的地寄存器中不存在更多的數(shù)據(jù)元素槽。在其它實(shí)施例中,最高有效數(shù)據(jù)元素被寫(xiě)入目的地寄存器107中。該寫(xiě)入可并行地或串行地完成。如圖所示,十六個(gè)最低有效數(shù)據(jù)元素被寫(xiě)入目的地寄存器中,因其僅具有存儲(chǔ)該尺寸的十六個(gè)數(shù)據(jù)元素的空間。

圖2示出了相同的源數(shù)據(jù)和移位,但是使用屏蔽寄存器201的內(nèi)容來(lái)確定經(jīng)串接和移位的數(shù)據(jù)105中的哪些最低有效數(shù)據(jù)元素應(yīng)當(dāng)被寫(xiě)入目的地寄存器中。在一些實(shí)施例中,該屏蔽寄存器是上文詳述的“k”屏蔽寄存器(k1-k7)。屏蔽寄存器顯示為0x878b。對(duì)于掩碼的存儲(chǔ)值“1”的每個(gè)位置,來(lái)自經(jīng)串接和移位的數(shù)據(jù)105的相應(yīng)數(shù)據(jù)元素被寫(xiě)入目的地寄存器的相應(yīng)位置上。例如,因?yàn)檠诖a的位置“0”為“1”,則經(jīng)移位和串接的數(shù)據(jù)元素中的相應(yīng)數(shù)據(jù)元素位置“0”的值d被存儲(chǔ)到目的地寄存器的“0”位置上。對(duì)于掩碼的存儲(chǔ)值“0”的每個(gè)位置,目的地寄存器的相應(yīng)數(shù)據(jù)元素不會(huì)被覆寫(xiě)。例如,在位置“2”上,掩碼為“0”,因此目的地仍為dc,而不是被值f覆寫(xiě)。盡管“1”被顯示為指示特定的數(shù)據(jù)元素位置應(yīng)當(dāng)被寫(xiě)入目的地寄存器中并且“0”指示不進(jìn)行該寫(xiě)入,但是在其它實(shí)施例中使用相反的約定。另外,在一些實(shí)施例中,寫(xiě)入最高有效數(shù)據(jù)元素,而不是最低有效數(shù)據(jù)元素。

圖3示出了相同的源數(shù)據(jù)和移位,但是使用屏蔽寄存器的內(nèi)容來(lái)確定經(jīng)串接和移位的數(shù)據(jù)105中的哪些最低有效數(shù)據(jù)元素應(yīng)當(dāng)被寫(xiě)入目的地寄存器中。在該實(shí)例中,不使用全部的屏蔽位。這可能發(fā)生于例如具有64位數(shù)據(jù)元素和512位寄存器的一些實(shí)施例中。

圖4示出了通過(guò)在處理器中執(zhí)行對(duì)齊指令而對(duì)齊來(lái)自兩個(gè)源的數(shù)據(jù)且將該對(duì)齊存儲(chǔ)到目的地位置上的方法的實(shí)施例。在401中,接收具有目的地操作數(shù)、第一和第二源操作數(shù)、偏移(立即數(shù))值和掩碼操作數(shù)的對(duì)齊指令。目的地操作數(shù)和源操作數(shù)具有相同的尺寸。在一些實(shí)施例中,目的地操作數(shù)和源操作數(shù)的尺寸均為512位。然而,在其它實(shí)施例中,目的地操作數(shù)和源操作數(shù)可具有不相同的尺寸,諸如128位或256位。典型地,目的地操作數(shù)和第一源操作數(shù)均為寄存器,諸如上述矢量寄存器(xmm、ymm或zmm)中的一個(gè)。第二源操作數(shù)可以是寄存器或存儲(chǔ)器操作數(shù)。在一些實(shí)施例中,偏移是8位立即數(shù)。所接收到的掩碼可以是前述“k”寫(xiě)屏蔽中的一個(gè),或在一些實(shí)施例中,其可以是不同的寄存器或存儲(chǔ)器單元。

在403中對(duì)對(duì)齊指令進(jìn)行解碼。根據(jù)指令的格式,可在該階段對(duì)各數(shù)據(jù)進(jìn)行解釋,諸如,是否將要進(jìn)行數(shù)據(jù)變換、寫(xiě)入和檢索哪些寄存器、利用存儲(chǔ)器源操作數(shù)以及可能的偏移(如果包括的話)存取哪個(gè)存儲(chǔ)器地址,等等。

在405中對(duì)源操作數(shù)值進(jìn)行取回/讀取。如果兩個(gè)源均為寄存器,則對(duì)那些寄存器進(jìn)行讀取。如果源操作數(shù)中的一個(gè)或兩個(gè)為存儲(chǔ)器操作數(shù),則取回與該操作數(shù)相關(guān)聯(lián)的數(shù)據(jù)元素。在一些實(shí)施例中,來(lái)自存儲(chǔ)器的數(shù)據(jù)元素被存儲(chǔ)到臨時(shí)寄存器中。

如果將要進(jìn)行任何數(shù)據(jù)元素變換(諸如向上轉(zhuǎn)換、廣播、混合(swizzle)等),可以在407中進(jìn)行。例如,來(lái)自存儲(chǔ)器的16位數(shù)據(jù)元素可被向上轉(zhuǎn)換成32位數(shù)據(jù)元素,或者數(shù)據(jù)元素可從一種模式混合成另一種模式(例如,從xyzwxyzwxyzw…xyzw混合成xxxxxxxxyyyyyyyyzzzzzzzzwwwwwwww)。

在409中執(zhí)行對(duì)齊指令。該指令的執(zhí)行使得第一和第二源操作數(shù)的數(shù)據(jù)元素串接,基于偏移將來(lái)自該串接數(shù)據(jù)的這些數(shù)據(jù)元素向右移位。在一些實(shí)施例中,第一源操作數(shù)數(shù)據(jù)元素是串接數(shù)據(jù)元素中的最低有效數(shù)據(jù)元素。在411中,經(jīng)移位的串接數(shù)據(jù)中的一些數(shù)據(jù)元素可根據(jù)寫(xiě)屏蔽寄存器的相應(yīng)位而被存儲(chǔ)到目的地矢量寄存器中。盡管單獨(dú)地示出了409和411,但在一些實(shí)施例中,它們可以作為指令執(zhí)行的一部分一起執(zhí)行。

盡管上文在一種類型的執(zhí)行環(huán)境中進(jìn)行了闡述說(shuō)明,但是易于修改以適應(yīng)其它環(huán)境,諸如所詳述的有序環(huán)境和無(wú)序環(huán)境。

圖5示出了用于處理對(duì)齊指令的方法的實(shí)施例。在該實(shí)施例中,假設(shè)之前已經(jīng)執(zhí)行了操作401-407中的一些(如果不是全部),然而,為了避免使下文給出的細(xì)節(jié)不清晰,未示出這些操作。例如,未示出取出和解碼,也沒(méi)有示出操作數(shù)(源和寫(xiě)屏蔽)取回。

在501中,串接第一和第二源的數(shù)據(jù)元素以形成待操作的較大“矢量”。例如,來(lái)自兩個(gè)源寄存器的數(shù)據(jù)被串接以使第一源的數(shù)據(jù)元素為較低有效位并且使第二源的數(shù)據(jù)元素為最高有效位,如圖1和圖2中所示。在一些實(shí)施例中,該較大的矢量為1024位。顯然,較大的矢量的該尺寸取決于源的尺寸。

在503中,第一和第二源的串接數(shù)據(jù)向右移位由指令的立即數(shù)值定義的數(shù)據(jù)元素的量。

可以在505中確定是否使用寫(xiě)屏蔽。這是任選的,取決于基礎(chǔ)硬件體系結(jié)構(gòu)的實(shí)現(xiàn)。例如,如果使用類似于上文詳述的k0的寫(xiě)屏蔽寄存器,則將不使用掩碼。盡管k0是當(dāng)其包括在指令中時(shí)可被寫(xiě)入的寄存器,但是這表示不進(jìn)行屏蔽(換言之,在所有的位位置上基本上為值“1”)。當(dāng)然,在其它體系結(jié)構(gòu)中,可以用作任何其它所期望的寄存器。

如果使用寫(xiě)屏蔽,則對(duì)于寫(xiě)屏蔽中的每個(gè)位位置,在507中確定該位位置是否指示第一和第二源的經(jīng)移位的串接數(shù)據(jù)的相應(yīng)元素將被存儲(chǔ)在目的地寄存器的相應(yīng)位置上。在一些實(shí)施例中,串行地執(zhí)行該確定和/或可能的稍后在511中的存儲(chǔ),也就是說(shuō),對(duì)于第一位位置(即,k1[0])做出確定,然后對(duì)順序位位置進(jìn)行評(píng)估。在其它實(shí)施例中,并行地執(zhí)行該確定和/或可能的稍后在511中的存儲(chǔ),也就是說(shuō),同時(shí)對(duì)于所有的位位置(即,k1[0]-k1[15])做出確定。另外,待評(píng)估的位位置的數(shù)量根據(jù)數(shù)據(jù)元素尺寸而變化。例如,在具有32位數(shù)據(jù)元素的512位實(shí)現(xiàn)中,對(duì)于該確定評(píng)估掩碼的十六個(gè)(16)位。在具有64位數(shù)據(jù)元素的512位實(shí)現(xiàn)中,僅對(duì)掩碼的八個(gè)(8)位進(jìn)行評(píng)估。在該實(shí)例中,典型地對(duì)最低有效的八個(gè)(8)位進(jìn)行評(píng)估,但是可以使用其它的約定。

當(dāng)掩碼的位位置指示什么都不應(yīng)寫(xiě)入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上時(shí),在509中什么都不寫(xiě)入到目的地寄存器中。當(dāng)掩碼的位位置指示經(jīng)移位的串接數(shù)據(jù)的相應(yīng)數(shù)據(jù)應(yīng)當(dāng)寫(xiě)入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置時(shí),則在511中其被寫(xiě)入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上。這種存儲(chǔ)裝置的示例顯示在圖2中。如果不使用掩碼,則在511中將經(jīng)移位的串接數(shù)據(jù)的全部相應(yīng)數(shù)據(jù)元素均存儲(chǔ)在目的地寄存器的相應(yīng)數(shù)據(jù)元素位置。這種存儲(chǔ)裝置的示例顯示在圖1中。

一旦掩碼的最后一個(gè)位位置被視為已評(píng)估,或者可被寫(xiě)的目的地中的全部數(shù)據(jù)元素位置已被評(píng)估,則方法結(jié)束。

圖6示出了用于處理對(duì)齊指令的方法的實(shí)施例。在該實(shí)施例中,假設(shè)之前已經(jīng)執(zhí)行了操作401-407中的一些(如果不是全部),然而,為了避免使下文給出的細(xì)節(jié)不清晰,沒(méi)有示出這些操作。例如,未示出取出和解碼,也沒(méi)有示出操作數(shù)(源和寫(xiě)屏蔽)取回。

在601中將第一和第二源的數(shù)據(jù)元素串接以形成待操作的較大“矢量”。例如,來(lái)自兩個(gè)源寄存器的數(shù)據(jù)被串接以使第一源的數(shù)據(jù)元素為較低有效位并且使第二源的數(shù)據(jù)元素為最高有效,如圖1和圖2所示。在一些實(shí)施例中,該較大的矢量為1024位。顯然,較大矢量的該尺寸取決于源的尺寸。

在603中,第一和第二源的串接數(shù)據(jù)向右移位由指令的立即數(shù)值定義的數(shù)據(jù)元素的量。

還可以確定是否使用寫(xiě)屏蔽(未示出)。這是任選的,取決于如之前詳述的基礎(chǔ)硬件體系結(jié)構(gòu)的實(shí)現(xiàn)。如果不使用掩碼,則在605或607中不進(jìn)行任何校驗(yàn)。

對(duì)于寫(xiě)屏蔽中的第一位位置,在605中確定該位位置是否指示第一和第二源的經(jīng)移位的串接數(shù)據(jù)的相應(yīng)元素將被存儲(chǔ)在目的地寄存器的相應(yīng)位置上。如果掩碼的第一位位置指示什么都不應(yīng)寫(xiě)入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上,則在609中什么都不寫(xiě)入到目的地寄存器中。如果掩碼的第一位位置指示經(jīng)移位的串接數(shù)據(jù)的相應(yīng)數(shù)據(jù)應(yīng)被寫(xiě)入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上,則在611中其被寫(xiě)入到目的地寄存器的相應(yīng)數(shù)據(jù)元素位置上。在圖2中示出了這種存儲(chǔ)的示例。

在613中,確定評(píng)估的寫(xiě)屏蔽位置是否為寫(xiě)屏蔽中的最后一個(gè)或者目的地的全部數(shù)據(jù)元素位置是否已經(jīng)被填滿。如果為真,則操作結(jié)束。當(dāng)例如數(shù)據(jù)元素尺寸為64位、目的地為512位并且寫(xiě)屏蔽具有16位時(shí),可能發(fā)生后者的情況。在該實(shí)例中,僅需要寫(xiě)屏蔽中的8位。

如果不為真,則在615中寫(xiě)屏蔽中的下一個(gè)位位置將被評(píng)估以確定其值。而且,在607等中評(píng)估位位置。一旦掩碼的最后一個(gè)位位置被視為已評(píng)估,或者可以寫(xiě)入的目的地中的全部數(shù)據(jù)元素位置已被評(píng)估,則方法結(jié)束。

圖7示出了處理偽碼的對(duì)齊指令的方法的實(shí)施例。

程序典型地以順序方式存取存儲(chǔ)器。例如,在位于地址@處的第一個(gè)512位矢量處存取參考(a),在位于地址@+64個(gè)字節(jié)的第二個(gè)512位矢量處存取參考(b),并且在位于地址@+128個(gè)字節(jié)的第一個(gè)512位矢量處存取參考(c)。在該方案中,參考(a)被定位成跨越高速緩沖存儲(chǔ)行a和b,參考(b)被定位成跨越高速緩沖存儲(chǔ)行b和c,并且參考(c)被定位成跨越高速緩沖存儲(chǔ)行c和d。利用規(guī)律的負(fù)荷,高速緩沖存儲(chǔ)行b和c將被存取兩次,并且整個(gè)高速緩沖存儲(chǔ)行存取次數(shù)將為6(3×2)。

一般而言,高速緩沖存儲(chǔ)行端口是比寄存器端口更精確的資源。上文討論的對(duì)齊指令的實(shí)施例對(duì)寄存器執(zhí)行數(shù)據(jù)對(duì)齊,而不是對(duì)高速緩沖存儲(chǔ)行執(zhí)行對(duì)齊,因此,這種指令提供了性能增益。利用對(duì)齊指令,高速緩沖存儲(chǔ)行數(shù)據(jù)在寄存器中被對(duì)齊,并且通常僅有在每個(gè)矢量參考中取出的一個(gè)新的高速緩沖存儲(chǔ)行,而不是存取每一個(gè)高速緩沖存儲(chǔ)行兩次,僅讀取一次并且同時(shí)與高速緩沖存儲(chǔ)器存取對(duì)齊,平衡每個(gè)周期中一個(gè)矢量的吞吐量,而仍使用僅一個(gè)單存儲(chǔ)器端口。

上文所描述和具體實(shí)施的指令的實(shí)施例可以下文詳述的“一般矢量友好指令格式”來(lái)具體實(shí)施。在其它實(shí)施例中,不使用這樣的格式,而使用另一種指令格式,然而,以下對(duì)寫(xiě)屏蔽寄存器、各種數(shù)據(jù)變換(混合、廣播等)、尋址等的描述通常適用于上文的指令的實(shí)施例的描述。另外,下文詳述了示例性的系統(tǒng)、體系結(jié)構(gòu)和管線。上文的指令的實(shí)施例可在這樣的系統(tǒng)、體系結(jié)構(gòu)和管線上執(zhí)行,但是不限于所詳述的那些。

矢量友好指令格式是適合于矢量指令的指令格式(例如,存在專用于矢量運(yùn)算的一些字段)。盡管描述了通過(guò)矢量友好指令格式支持矢量運(yùn)算和標(biāo)量運(yùn)算的實(shí)施例,但是可選的實(shí)施例僅使用矢量友好指令格式的矢量運(yùn)算。

示例性的一般矢量友好指令格式-圖8a-b

圖8a-b為示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其指令模板的框圖。圖8a為示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其a類指令模板的框圖;而圖8b為示出根據(jù)本發(fā)明的實(shí)施例的一般矢量友好指令格式及其b類指令模板的框圖。具體地,為一般矢量友好指令格式800限定a類和b類指令模板,兩者均包括無(wú)儲(chǔ)器存取805指令模板和存儲(chǔ)器存取820指令模板。在矢量友好指令格式的背景下術(shù)語(yǔ)“一般”是指不與任何具體指令集相關(guān)聯(lián)的指令格式。盡管描述了矢量友好指令格式的指令在源自于寄存器(無(wú)存儲(chǔ)器存取805指令模板)或寄存器/存儲(chǔ)器(存儲(chǔ)器存取820指令模板)的矢量上操作的實(shí)施例,但本發(fā)明的替代實(shí)施例可支持這些中的僅一種。而且,盡管描述了存在加載且存儲(chǔ)矢量指令格式的指令的本發(fā)明的實(shí)施例,但可選的實(shí)施例代替地或另外地具有將矢量移入和移出寄存器(例如,從存儲(chǔ)器到寄存器,從寄存器到存儲(chǔ)器,在寄存器之間)的不同指令格式的指令。此外,盡管描述了支持兩類指令模板的本發(fā)明的實(shí)施例,但是替代的實(shí)施例可以僅支持這些中的一個(gè)或多于兩個(gè)。

盡管描述了矢量友好指令格式支持以下的本發(fā)明的實(shí)施例:具有32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或尺寸)的64字節(jié)矢量操作數(shù)長(zhǎng)度(或尺寸)(并且因此,64字節(jié)矢量由16個(gè)雙倍字尺寸的元素或可替代的8個(gè)四倍字尺寸的元素構(gòu)成);具有16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸)的64字節(jié)矢量操作數(shù)長(zhǎng)度(或尺寸);具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸)的32字節(jié)矢量操作數(shù)長(zhǎng)度(或尺寸);以及具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸)的16字節(jié)矢量操作數(shù)長(zhǎng)度(或尺寸);但是可選的實(shí)施例可以支持具有更多、更少、或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)的更多、更少和/或不同的矢量操作數(shù)尺寸(例如,856字節(jié)矢量操作數(shù))。

圖8a中的a類指令模板包括:1)在無(wú)存儲(chǔ)器存取805指令模板內(nèi),示出了無(wú)存儲(chǔ)器存取、全取整控制型操作810指令模板以及無(wú)存儲(chǔ)器存取、數(shù)據(jù)變換型操作815指令模板;以及2)在存儲(chǔ)器存取820指令模板內(nèi),示出了存儲(chǔ)器存取、臨時(shí)825指令模板和存儲(chǔ)器存取、非臨時(shí)830指令模板。圖8b中的b類指令模板包括:1)在無(wú)存儲(chǔ)器存取805指令模板內(nèi),示出了無(wú)存儲(chǔ)器存取、寫(xiě)屏蔽控制、部分取整控制型操作812指令模板和無(wú)存儲(chǔ)器存取、寫(xiě)屏蔽控制、vsize型操作817指令模板;以及2)在存儲(chǔ)器存取820指令模板內(nèi),示出了存儲(chǔ)器存取、寫(xiě)屏蔽控制827指令模板。

格式

一般矢量友好指令格式800包括在圖8a-b中所示出的次序列于下面的下列字段。

格式字段840—在該字段中的具體值(指令格式標(biāo)識(shí)符值)唯一地標(biāo)識(shí)矢量友好指令格式,并且因此唯一地表示指令流中的矢量友好指令格式的指令的出現(xiàn)。因此,格式字段840的內(nèi)容將第一指令格式的指令的出現(xiàn)與其它指令格式的指令的出現(xiàn)區(qū)分開(kāi),從而允許將矢量友好指令格式引入具有其它指令格式的指令集中。因此,從該字段無(wú)需用于僅具有一般矢量友好指令格式的指令集的意義上講,該字段是任選的。

基礎(chǔ)操作字段842—其內(nèi)容將不同的基礎(chǔ)操作區(qū)分開(kāi)。如本文稍后描述的,基礎(chǔ)操作字段842可包括操作碼字段和/或作為操作碼字段的部分。

寄存器索引字段844—其內(nèi)容直接地或者通過(guò)地址生成來(lái)指定源和目的地操作數(shù)的位置,如它們?cè)诩拇嫫骰虼鎯?chǔ)器中。這些包括從p×q(例如,32×1012)寄存器文件中選擇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)。

修飾符字段846—其內(nèi)容將指定存儲(chǔ)器存取的一般矢量指令格式的指令的出現(xiàn)與不指定存儲(chǔ)器存取的一般矢量指令格式的那些指令的出現(xiàn)區(qū)分開(kāi);也就是說(shuō),區(qū)分無(wú)存儲(chǔ)器存取805指令模板和存儲(chǔ)器存取820指令模板。存儲(chǔ)器存取操作對(duì)存儲(chǔ)器層級(jí)進(jìn)行讀和/或?qū)?在一些情況下,利用寄存器中的值來(lái)指定源和/或目的地地址),而無(wú)存儲(chǔ)器存取操作不這樣(例如,源和目的地均為寄存器)。盡管在一個(gè)實(shí)施例中該字段還在三種不同方式之間選擇以執(zhí)行存儲(chǔ)器地址計(jì)算,但是替代的實(shí)施例可以支持更多、更少或不同的方式來(lái)執(zhí)行存儲(chǔ)器地址計(jì)算。

擴(kuò)增操作字段850—其內(nèi)容對(duì)除了基礎(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來(lái)減少所需指令數(shù)量的指令的一些示例(其術(shù)語(yǔ)稍后將在下文中進(jìn)行更詳細(xì)的說(shuō)明)。

其中,[rax]是用于地址生成的基址指針,并且其中{}表示數(shù)據(jù)操縱字段所指定的轉(zhuǎn)換操作(下文將進(jìn)行更加詳細(xì)的說(shuō)明)。

標(biāo)度字段860—其內(nèi)容允許對(duì)索引字段的內(nèi)容進(jìn)行縮放以用于存儲(chǔ)器地址生成(例如,用于使用2標(biāo)度*索引+基址的地址生成)。

位移字段862a—其內(nèi)容用作存儲(chǔ)器地址生成的部分(例如,用于使用2標(biāo)度*索引+基址+位移的地址生成)。

位移因子字段862b(注意,位移字段862a直接并置在位移因子字段862b之上表示使用一個(gè)或另一個(gè))—其內(nèi)容用作地址生成的部分;其指定要按存儲(chǔ)器存取的尺寸(n)縮放的位移因子,其中n為存儲(chǔ)器存取中的字節(jié)數(shù)量(例如,用于使用2標(biāo)度*索引+基址+所縮放的位移的地址生成)。冗余低階位被忽略,并且因此,位移因子字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)的總尺寸(n),從而生成待用于計(jì)算有效地址的最終位移。n的值是通過(guò)處理器硬件在運(yùn)行時(shí)間基于全操作碼字段874(下文稍后說(shuō)明)和如下文稍后說(shuō)明的數(shù)據(jù)操縱字段854c來(lái)確定的。從不用于無(wú)存儲(chǔ)器存取805指令模板和/或不同的實(shí)施例可僅實(shí)現(xiàn)兩個(gè)中的一個(gè)或不實(shí)現(xiàn)任一個(gè)的意義上講,位移字段862a和位移因子字段862b是任選的。

數(shù)據(jù)元素寬度字段864—其內(nèi)容對(duì)將使用多個(gè)數(shù)據(jù)元素寬度中的哪一個(gè)進(jìn)行區(qū)分(在一些實(shí)施例中,對(duì)于所有指令;在其它實(shí)施例中,僅對(duì)于指令中的一些指令)。從如果僅支持一個(gè)數(shù)據(jù)元素寬度和/或利用操作碼的某方面來(lái)支持?jǐn)?shù)據(jù)元素寬度則不需要該字段的意義上講,該字段是任選的。

寫(xiě)屏蔽字段870—其內(nèi)容基于每個(gè)數(shù)據(jù)元素位置來(lái)控制目的地矢量操作數(shù)中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴(kuò)增操作的結(jié)果。a類指令模板支持合并-寫(xiě)屏蔽,而b類指令模板支持合并-寫(xiě)屏蔽以及歸零-寫(xiě)屏蔽兩者。當(dāng)合并時(shí),矢量掩碼允許目的地中的任何元素集合被保護(hù)以免在任何操作(由基礎(chǔ)操作和擴(kuò)增操作指定的)執(zhí)行期間更新;在另一實(shí)施例中,保留相應(yīng)屏蔽位具有0的目的地的每個(gè)元素的舊值。相反,當(dāng)歸零時(shí),矢量掩碼允許目的地中的任何元素集合在任何操作(由基礎(chǔ)操作和擴(kuò)增操作指定的)執(zhí)行期間被歸零;在一個(gè)實(shí)施例中,當(dāng)相應(yīng)的屏蔽位具有0值時(shí),目的地的元素被設(shè)定為0。該功能的子集是控制所執(zhí)行的操作的矢量長(zhǎng)度(即,所修改的元素從第一個(gè)到最后一個(gè)的跨度)的能力;然而,被修改的元素不必是連續(xù)的。因此,寫(xiě)屏蔽字段870允許部分矢量操作,包括加載、存儲(chǔ)、算術(shù)運(yùn)算、邏輯等。而且,該屏蔽能夠用于故障抑制(即,通過(guò)屏蔽目的地的數(shù)據(jù)元素位置來(lái)防止接收可能/將要引起故障的任何操作的結(jié)果,例如,假設(shè)存儲(chǔ)器中的矢量跨過(guò)了頁(yè)面邊界并且第一頁(yè)面而不是第二頁(yè)面將導(dǎo)致頁(yè)面故障,如果通過(guò)寫(xiě)屏蔽來(lái)屏蔽位于第一頁(yè)面中的矢量的全部數(shù)據(jù)元素,則能夠忽略該頁(yè)面故障)。此外,寫(xiě)屏蔽允許包含某些類型的條件語(yǔ)句的“矢量化循環(huán)”。盡管描述了其中寫(xiě)屏蔽字段870的內(nèi)容選擇包含待使用的寫(xiě)屏蔽的多個(gè)寫(xiě)屏蔽寄存器中的一個(gè)(并且因此,寫(xiě)屏蔽字段870的內(nèi)容間接地標(biāo)識(shí)了待執(zhí)行的該屏蔽)的本發(fā)明的實(shí)施例,但是替代的實(shí)施例代替地或者另外允許寫(xiě)屏蔽字段870的內(nèi)容直接指定待執(zhí)行的屏蔽。此外,歸零允許當(dāng)在如下情況下時(shí)的性能提高:1)在目的地操作數(shù)不也是源的指令(還稱為非三元指令)上使用寄存器重命名,因?yàn)樵诩拇嫫髦孛芫€階段中,目的地不再是隱式源(來(lái)自當(dāng)前目的地寄存器的數(shù)據(jù)元素?zé)o需復(fù)制到重命名后的目的地寄存器,或者連同操作一起以某種方式攜載,因?yàn)椴皇遣僮鹘Y(jié)果的任何數(shù)據(jù)元素(任何被屏蔽的數(shù)據(jù)元素)將被歸零);以及2)在寫(xiě)回階段中,因?yàn)榱阏诒粚?xiě)入。

立即數(shù)字段872—其內(nèi)容允許立即數(shù)的具體說(shuō)明。從其不存在于不支持立即數(shù)的一般矢量友好格式的實(shí)現(xiàn)中并且其不存在于不使用立即數(shù)的指令中的意義上講,該字段是任選的。

指令模板類選擇

類字段868—其內(nèi)容區(qū)分不同類的指令。參考圖8a-b,該字段的內(nèi)容在a類和b類指令之間進(jìn)行選擇。在圖8a-b中,圓角方形用于表示具體值存在于字段中(例如,分別在圖8a-b中的類字段868的a類868a和b類868b)。

a類的無(wú)存儲(chǔ)器存取指令模板

在a類的無(wú)存儲(chǔ)器存取805指令模板的情況下,α字段852被解釋為rs字段852a,其內(nèi)容區(qū)分待執(zhí)行不同擴(kuò)增操作類型中的哪一個(gè)(例如,對(duì)于無(wú)存儲(chǔ)器存取、取整型操作810和無(wú)存儲(chǔ)器存取、數(shù)據(jù)變換型操作815指令模板,分別指定取整852a.1和數(shù)據(jù)變換852a.2);而β字段854區(qū)分待執(zhí)行指定類型中的哪些。在圖8中,圓角方框用于指示存在特定值(例如,修飾符字段846中的無(wú)存儲(chǔ)器存取846a;用于α字段852/rs字段852a的取整852a.1和數(shù)據(jù)變換852a.2)。在無(wú)存儲(chǔ)器存取805指令模板中,不存在標(biāo)度字段860、位移字段862a和位移標(biāo)度字段862b。

無(wú)存儲(chǔ)器存取指令模板-全取整控制型操作

在無(wú)存儲(chǔ)器存取全取整控制型操作810指令模板中,β字段854被解釋為取整控制字段854a,其內(nèi)容提供了靜態(tài)取整。盡管在本發(fā)明的所述實(shí)施例中,取整控制字段854a包括抑制全部浮點(diǎn)異常(sae)字段856和取整操作控制字段858,可選的實(shí)施例可以支持這些構(gòu)思,并且可以將這些構(gòu)思編碼成相同的字段或者僅具有這些構(gòu)思/字段中的一個(gè)或另一個(gè)(例如,可以僅具有取整操作控制字段858)。

sae字段856—其內(nèi)容對(duì)是否禁用異常事件報(bào)告進(jìn)行區(qū)分;當(dāng)sae字段856的內(nèi)容指示啟用抑制時(shí),既定的指令不對(duì)任何類型的浮點(diǎn)異常標(biāo)記進(jìn)行報(bào)告并且不喚起任何浮點(diǎn)異常處理程序。

取整操作控制字段858—其內(nèi)容對(duì)執(zhí)行一組取整操作中的哪一個(gè)進(jìn)行區(qū)分(例如,上取整、下取整、向零取整和就近取整)。因此,取整操作控制字段858允許基于每個(gè)指令來(lái)改變?nèi)≌J?,并且因此?dāng)需要時(shí)尤其有用。在處理器包括用于指定取整模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,取整操作控制字段850的內(nèi)容覆蓋該寄存器值(能夠選擇取整模式,而不必在這樣的控制寄存器上執(zhí)行保存-修改-恢復(fù)是有益的)。

無(wú)存儲(chǔ)器存取指令模板-數(shù)據(jù)變換型操作

在無(wú)存儲(chǔ)器存取數(shù)據(jù)變換型操作815指令模板中,β字段854被解釋為數(shù)據(jù)變換字段854b,其內(nèi)容對(duì)待執(zhí)行多個(gè)數(shù)據(jù)變換中的哪一個(gè)進(jìn)行區(qū)分(例如,無(wú)數(shù)據(jù)變換、混合、廣播)。

a類的存儲(chǔ)器存取指令模板

在a類的存儲(chǔ)器存取820指令模板的情況下,α字段852被解釋為驅(qū)逐(eviction)暗示字段852b,其內(nèi)容對(duì)將待使用哪一個(gè)驅(qū)逐暗示進(jìn)行區(qū)分(在圖8a中,分別為存儲(chǔ)器存取、臨時(shí)825指令模板和存儲(chǔ)器存取、非臨時(shí)830指令模板指定臨時(shí)852b.1和非臨時(shí)852b.2),而β字段854被解釋為數(shù)據(jù)操縱字段854c,其內(nèi)容對(duì)待執(zhí)行多個(gè)數(shù)據(jù)操縱操作(也稱為基元)中的哪一個(gè)進(jìn)行區(qū)分(例如,無(wú)操縱;廣播;源的向上轉(zhuǎn)換;以及目的地的向下轉(zhuǎn)換)。存儲(chǔ)器存取820指令模板包括標(biāo)度字段860,并且任選地包括位移字段862a或位移標(biāo)度字段862b。

矢量存儲(chǔ)器指令通過(guò)轉(zhuǎn)換支持來(lái)執(zhí)行來(lái)自存儲(chǔ)器的矢量加載以及到存儲(chǔ)器的矢量存儲(chǔ)。如同常規(guī)的矢量指令,矢量存儲(chǔ)器指令以逐數(shù)據(jù)元素(element-wise)的方式傳遞數(shù)據(jù)至存儲(chǔ)器/從存儲(chǔ)器傳遞數(shù)據(jù),通過(guò)被選為寫(xiě)屏蔽的矢量掩碼的內(nèi)容來(lái)規(guī)定實(shí)際上傳遞的元素。在圖8a中,圓角方形用于表示在字段中存在特定值(例如,用于修飾符字段846的存儲(chǔ)器存取846b;用于α字段852/驅(qū)逐暗示字段852b的臨時(shí)852b.1和非臨時(shí)852b.2)。

存儲(chǔ)器存取指示模板-臨時(shí)

臨時(shí)數(shù)據(jù)是可能足夠迅速地被重新使用以受益于高速緩沖存儲(chǔ)的數(shù)據(jù)。然而,這是暗示,并且不同的處理器可以不同的方式來(lái)實(shí)現(xiàn),包括完全忽略暗示。

存儲(chǔ)器存取指令模板-非臨時(shí)

非臨時(shí)數(shù)據(jù)是不太可能足夠迅速地被重新使用而受益于1級(jí)高速緩沖存儲(chǔ)器的高速緩存并且應(yīng)當(dāng)給予驅(qū)逐的優(yōu)選級(jí)的數(shù)據(jù)。然而,這是暗示,并且不同的處理器可以不同的方式來(lái)實(shí)現(xiàn),包括完全忽略暗示。

b類的指令模板

在b類的指令模板的情況下,α字段852被解釋為寫(xiě)屏蔽控制(z)字段852c,其內(nèi)容對(duì)寫(xiě)屏蔽字段870所控制的寫(xiě)屏蔽是否應(yīng)當(dāng)合并或歸零進(jìn)行區(qū)分。

b類的無(wú)存儲(chǔ)器存取指令模板

在b類的無(wú)存儲(chǔ)器存取805指令模板的情況下,β字段854的部分被解釋為rl字段857a,其內(nèi)容對(duì)待執(zhí)行不同擴(kuò)增操作類型中的哪一種進(jìn)行區(qū)分(例如,分別為無(wú)存儲(chǔ)器存取、寫(xiě)屏蔽控制、部分取整控制型操作812指令模板和無(wú)存儲(chǔ)器存取、寫(xiě)屏蔽控制、矢量長(zhǎng)度(vsize)型操作817指令模板指定取整857a.1和vsize857a.2),而β字段854的其余部分對(duì)待執(zhí)行指定類型的哪些操作進(jìn)行區(qū)分。在圖8b中,圓角方框用于指示存在特定值(例如,修飾符字段846中的無(wú)存儲(chǔ)器存取846a;用于rl字段857a的取整857a.1和vsize857a.2)。在無(wú)存儲(chǔ)器存取805指令模板中,不存在標(biāo)度字段860、位移字段862a和位移標(biāo)度字段862b。

無(wú)存儲(chǔ)器存取指令模板—寫(xiě)屏蔽控制、部分取整控制型操作

在無(wú)存儲(chǔ)器存取、寫(xiě)屏蔽控制、部分取整控制型操作810指令模板中,β字段854的其余部分被解釋為取整操作字段859a,并且異常事件報(bào)告被禁用(既定指令不報(bào)告任何類型的浮點(diǎn)異常標(biāo)記并且不喚起任何浮點(diǎn)異常處理程序)。

取整操作控制字段859a-恰如取整操作控制字段858一樣,其內(nèi)容對(duì)執(zhí)行一組取整操作中的哪一個(gè)進(jìn)行區(qū)分(例如,上取整、下取整、向零取整和就近取整)。因此,取整操作控制字段859a允許在每個(gè)指令的基礎(chǔ)上改變?nèi)≌J?,并且因此在需要時(shí)尤其有用。在處理器包括用于指定取整模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,取整操作控制字段850的內(nèi)容覆蓋該寄存器值(能夠選擇取整模式,而不必在這樣的控制寄存器上執(zhí)行保存-修改-恢復(fù)是有益的)。

無(wú)存儲(chǔ)器存取指令模板—寫(xiě)屏蔽控制、vsize型操作

在無(wú)存儲(chǔ)器存取、寫(xiě)屏蔽控制、vsize型操作817指令模板中,β字段854的其余部分被解釋為矢量長(zhǎng)度字段859b,其內(nèi)容對(duì)待執(zhí)行多個(gè)數(shù)據(jù)矢量長(zhǎng)度中的哪一個(gè)進(jìn)行區(qū)分(例如,128、856、或1012字節(jié))。

b類的存儲(chǔ)器存取指令模板

在a類的存儲(chǔ)器存取820指令模板的情況下,β字段854的部分被解釋為廣播字段857b,其內(nèi)容對(duì)是否執(zhí)行廣播型數(shù)據(jù)操縱操作進(jìn)行區(qū)分,而β字段854的其余部分被解釋為矢量長(zhǎng)度字段859b。存儲(chǔ)器存取820指令模板包括標(biāo)度字段860,且任選的包括位移字段862a或位移標(biāo)度字段862b。

關(guān)于字段的附加注釋

關(guān)于一般矢量友好指令格式800,示出了全操作碼字段874,其包括格式字段840、基礎(chǔ)操作字段842和數(shù)據(jù)元素寬度字段864。盡管示出了全操作碼字段874包括所有這些字段的一個(gè)實(shí)施例,但是在不支持其全部的實(shí)施例中全操作碼字段874不包括全部這些字段。全操作碼字段874提供了操作代碼。

擴(kuò)增操作字段850、數(shù)據(jù)元素寬度字段864和寫(xiě)屏蔽字段870允許在每指令基礎(chǔ)上以一般矢量友好指令格式來(lái)指定這些特征。

寫(xiě)屏蔽字段和數(shù)據(jù)元素寬度字段的組合形成了類型確定的(typed)指令,因?yàn)樗鼈冊(cè)试S基于不同的數(shù)據(jù)元素寬度來(lái)應(yīng)用掩碼。

指令格式要求相對(duì)少量的位,因?yàn)槠浠谄渌侄蔚膬?nèi)容而為不同目的重新使用不同的字段。例如,一個(gè)視點(diǎn)在于,修飾符字段的內(nèi)容在圖8a-b上的無(wú)存儲(chǔ)器存取805指令模板和圖8a-b上的存儲(chǔ)器存取8250指令模板之間進(jìn)行選擇;而類字段868的內(nèi)容在圖8a的指令模板810/815和圖8b的指令模板812/817之間的那些無(wú)存儲(chǔ)器存取805指令模板內(nèi)進(jìn)行選擇;而類字段868的內(nèi)容在圖8a的指令模板825/830和圖8b的827之間的那些存儲(chǔ)器存取820指令模板內(nèi)進(jìn)行選擇。從另一視點(diǎn)看,類字段868的內(nèi)容在圖8a和圖8b的各自的a類和b類指令模板之間進(jìn)行選擇;而修飾符字段的內(nèi)容在圖8a的指令模板805和820之間的那些a類指令模板內(nèi)進(jìn)行選擇;而修飾符字段的內(nèi)容在圖8b的指令模板805和820之間的那些b類指令模板內(nèi)進(jìn)行選擇。在類字段的內(nèi)容表示a類指令模板的情況下,修飾符字段846的內(nèi)容選擇α字段852(在rs字段852a和eh字段852b之間)的解釋。通過(guò)有關(guān)的方式,修飾符字段846和類字段868的內(nèi)容選擇是否將α字段解釋為rs字段852a、eh字段852b或?qū)懫帘慰刂?z)字段852c。在類字段和修飾符字段表示a類無(wú)存儲(chǔ)器存取操作的情況下,擴(kuò)增字段的β字段的解釋基于rs字段的內(nèi)容而改變;而在類字段和修飾符字段表示b類無(wú)存儲(chǔ)器存取操作的情況下,β字段的解釋取決于rl字段的內(nèi)容。在類字段和修飾符字段表示a類存儲(chǔ)器存取操作的情況下,擴(kuò)增字段的β字段的解釋基于基礎(chǔ)操作字段的內(nèi)容而改變;而在類字段和修飾符字段表示b類存儲(chǔ)器存取操作的情況下,擴(kuò)增字段的β字段的廣播字段857b的解釋基于基礎(chǔ)操作字段的內(nèi)容而改變。因此,基礎(chǔ)操作字段、修飾符字段和擴(kuò)增操作字段的組合允許指定甚至更加多樣的擴(kuò)增操作。

在a類和b類內(nèi)發(fā)現(xiàn)的各種指令模板在不同情形下是有益的。當(dāng)由于性能原因而期望歸零-寫(xiě)屏蔽或較小矢量長(zhǎng)度時(shí),a類是有用的。例如,當(dāng)使用重命名時(shí),歸零允許避免虛假相關(guān)性,因?yàn)槲覀儾辉傩枰c目的地人為地合并;作為另一示例,當(dāng)用矢量掩碼來(lái)仿真較短的矢量尺寸時(shí),矢量長(zhǎng)度控制使得存儲(chǔ)-加載轉(zhuǎn)送問(wèn)題變得容易。當(dāng)期望如下情形時(shí)b類是有用的:1)在使用取整模式控制的同時(shí),允許浮點(diǎn)異常(即,當(dāng)sae字段的內(nèi)容指示無(wú)時(shí));2)能夠使用向上轉(zhuǎn)換、混合、交換和/或向下轉(zhuǎn)換;3)在圖形數(shù)據(jù)類型上操作。例如,向上轉(zhuǎn)換、混合、交換、向下轉(zhuǎn)換和圖形數(shù)據(jù)類型減少了當(dāng)用不同格式的源工作時(shí)所要求的指令數(shù)量;作為另一示例,允許異常的能力提供了定向的取整模式的完全ieee符合。

示例性的特定矢量友好指令格式

圖9a-c示出了根據(jù)本發(fā)明的實(shí)施例的示例性的特定矢量友好指令格式。圖9a-c示出了特定矢量友好指令格式900,其在它指定字段的位置、尺寸、解釋和順序以及用于那些字段中的一些字段的值的意義上是特定的。特定矢量友好指令格式900可用于擴(kuò)展x86指令集,并且因此一些字段與現(xiàn)有的x86指令集及其擴(kuò)展(例如,avx)中使用的那些字段相似或相同。該格式保持與具有擴(kuò)展的現(xiàn)有x86指令集的前綴編碼字段、真實(shí)操作碼字節(jié)字段、modr/m字段、sib字段、位移字段和立即數(shù)字段一致。圖示了圖9a-c的字段映射到圖8a-b中的字段。

應(yīng)當(dāng)理解的是,盡管為了說(shuō)明的目的在一般矢量友好指令格式800的背景下參照特定矢量友好指令格式900對(duì)本發(fā)明的實(shí)施例進(jìn)行了說(shuō)明,但本發(fā)明不限于特定矢量友好指令格式900,除了被主張的場(chǎng)合之外。例如,一般矢量友好指令格式800構(gòu)思了用于各種字段的各種可能的尺寸,而特定矢量友好指令格式900被顯示為具有特定尺寸的字段。通過(guò)具體示例,盡管數(shù)據(jù)元素寬度字段864被圖示為特定矢量友好指令格式900的一位字段,但本發(fā)明不受此限制(即,一般矢量友好指令格式800構(gòu)思了數(shù)據(jù)元素寬度字段864的其它尺寸)。

格式-圖9a-c

一般矢量友好指令格式800包括按圖9a-c中所示的次序列于下文的下列字段。

evex前綴(字節(jié)0-3)

evex前綴902-以四字節(jié)形式進(jìn)行編碼。

格式字段840(evex字節(jié)0,位[7:0])—第一字節(jié)(evex字節(jié)0)為格式字段840,并且其包含0x62(在本發(fā)明的一個(gè)實(shí)施例中用于區(qū)分矢量友好指令格式的唯一值)。

第二-第四字節(jié)(evex字節(jié)1-3)包括提供特定能力的多個(gè)位字段。

rex字段905(evex字節(jié)1,位[7-5])—由evex.r位字段(evex字節(jié)1,位[7]-r)、evex.x位字段(evex字節(jié)1,位[6]-x)和857bex字節(jié)1,位[5]-b)組成。evex.r、evex.x和evex.b位字段提供了與相應(yīng)的vex位字段相同的功能,并且利用1s補(bǔ)碼形式進(jìn)行編碼,即,zmm0被編碼為1111b,zmm15被編碼為0000b。指令的其它字段對(duì)寄存器索引的較低三位進(jìn)行編碼,這是本領(lǐng)域公知的(rrr、xxx和bbb),以使rrrr、xxxx、和bbbb可通過(guò)添加evex.r、evex.x和evex.b來(lái)形成。

rex字段910—其為rex字段910的第一部分,并且是用于對(duì)擴(kuò)增的32寄存器集的較高16或較低16進(jìn)行編碼的evex.r’位字段(evex字節(jié)1,位[4]-r’)。在本發(fā)明的一個(gè)實(shí)施例中,該位連同如下文所示出的其它位一起以位反轉(zhuǎn)格式存儲(chǔ)以與bound指令區(qū)分開(kāi)(以公知的x8632位模式),其真實(shí)操作碼字節(jié)為62,但是在modr/m字段(下面描述)中不接受mod字段中的值11;本發(fā)明的可替代實(shí)施例不以反轉(zhuǎn)格式來(lái)存儲(chǔ)該位以及其它示于下文的位。值1用于對(duì)較低16個(gè)寄存器進(jìn)行編碼。換言之,r’rrrr是通過(guò)將evex.r’、evex.r和來(lái)自其它字段的其它rrr組合而形成的。

操作碼映射字段915(evex字節(jié)1,位[3:0]-mmmm)—其內(nèi)容對(duì)隱含的前置操作碼字節(jié)(0f、0f38或0f3)進(jìn)行編碼。

數(shù)據(jù)元素寬度字段864(evex字節(jié)2,位[7]-w)—由記號(hào)evex.w表示。evex.w用于限定數(shù)據(jù)類型的粒度(尺寸)(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)。

evex.vvvv920(evex字節(jié)2,位[6:3]-vvvv)—evex.vvvv的作用可包括下列:1)evex.vvvv對(duì)以反轉(zhuǎn)(1s補(bǔ)碼)形式指定的第一源寄存器操作數(shù)進(jìn)行編碼,并且對(duì)于具有2個(gè)或更多個(gè)源操作數(shù)的指令有效;2)evex.vvvv對(duì)以用于一定矢量移位的1s補(bǔ)碼形式指定的目的地寄存器操作數(shù)進(jìn)行編碼;或者3)evex.vvvv不對(duì)任何操作數(shù)進(jìn)行編碼,字段被保留并且應(yīng)當(dāng)包含1111b。因此,evex.vvvv字段920對(duì)以反轉(zhuǎn)(1s補(bǔ)碼)形式存儲(chǔ)的第一源寄存器說(shuō)明符的4個(gè)低階位進(jìn)行編碼。根據(jù)指令,額外的不同evex位字段用于將說(shuō)明符尺寸擴(kuò)展至32個(gè)寄存器。

evex.u868類字段(evex字節(jié)2,位[2]-u)—如果evex.u=0,則其表示a類或evex.u0;如果evex.u=1,則其表示b類或evex.u1。

前綴編碼字段925(evex字節(jié)2,位[1:0]-pp)—為基礎(chǔ)操作字段提供了附加位。除了為evex前綴格式的傳統(tǒng)sse指令提供支持之外,這還具有壓縮simd前綴的益處(不是需要字節(jié)來(lái)表達(dá)simd前綴,evex前綴僅需要2個(gè)位)。在一個(gè)實(shí)施例中,為了支持使用傳統(tǒng)格式和evex前綴格式的simd前綴(66h、f2h、f3h)的傳統(tǒng)sse指令,這些傳統(tǒng)simd前綴被編碼到simd前綴編碼字段中;并且在提供給解碼器的pla之前在運(yùn)行時(shí)間被擴(kuò)展成傳統(tǒng)simd前綴(因此,pla能夠執(zhí)行這些傳統(tǒng)指令的傳統(tǒng)和evex格式,而無(wú)需進(jìn)行修改)。盡管較新的指令可將evex前綴編碼字段的內(nèi)容直接用作操作碼擴(kuò)展,一些實(shí)施例以相似方式擴(kuò)展以確保一致性,但是允許由這些傳統(tǒng)simd前綴指定不同的含義??蛇x的實(shí)施例可以重新設(shè)計(jì)pla以支持2位simd前綴編碼,并且因此不需要擴(kuò)展。

α字段852(evex字節(jié)3,位[7]-eh;也稱為evex.eh、evex.rs、evex.rl、evex.寫(xiě)屏蔽控制、以及evex.n;還可由α表示)—如之前所述,該字段是上下文特定的。本文稍后將提供進(jìn)一步的描述。

β字段854(evex字節(jié)3,位[6:4]-sss;也稱為evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;還由可由βββ表示)—如之前所述,該字段是上下文特定的。本文稍后將提供進(jìn)一步的描述。

rex’字段910—這是rex’字段的其余部分并且是evex.v’位字段(evex字節(jié)3,位[3]-v’),其可用于對(duì)擴(kuò)展的32寄存器集的較高16或較低16進(jìn)行編碼。該位以位反轉(zhuǎn)格式存儲(chǔ)。值1用于對(duì)較低16個(gè)寄存器進(jìn)行編碼。換言之,v’vvvv是通過(guò)將evex.v’、evex.vvvv組合而形成的。

寫(xiě)屏蔽字段870(evex字節(jié)3,位[2:0]-kkk)—其內(nèi)容指定寫(xiě)屏蔽寄存器中的寄存器的索引,如之前所描述的。在本發(fā)明的一個(gè)實(shí)施例中,特定值evex.kkk=000具有特殊行為,其暗示沒(méi)有寫(xiě)屏蔽用于特定指令(這可多種方式來(lái)實(shí)現(xiàn),包括使用硬連線到全1的寫(xiě)屏蔽或繞過(guò)屏蔽硬件的硬件)。

真實(shí)操作碼字段930(字節(jié)4)

這還稱為操作碼字節(jié)。操作碼的一部分在該字段中被指定。

modr/m字段940(字節(jié)5)

修飾符字段846(modr/m.mod,位[7-6]-mod字段942)—如之前所述,mod字段942的內(nèi)容在存儲(chǔ)器存取操作和無(wú)存儲(chǔ)器存取操作之間進(jìn)行區(qū)分。本文稍后將對(duì)該字段進(jìn)行進(jìn)一步說(shuō)明。

modr/m.reg字段944,位[5-3]—modr/m.reg字段的作用能夠被概述為如下兩種情況:modr/m.reg對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼,或者modr/m.reg被處理為操作碼擴(kuò)展且不用于對(duì)任何指令操作數(shù)進(jìn)行編碼。

modr/m.r/m字段946,位[2-0]—modr/m.r/m字段的作用可包括下述情況:modr/m.r/m對(duì)參考存儲(chǔ)器地址的指令操作數(shù)進(jìn)行編碼,或者modr/m.r/m對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼。

標(biāo)度、索引、基礎(chǔ)(sib)字節(jié)(字節(jié)6)

標(biāo)度字段860(sib.ss,位[7-6]—如之前所述,標(biāo)度字段860的內(nèi)容用于存儲(chǔ)器地址生成。本文稍后將對(duì)該字段進(jìn)行進(jìn)一步說(shuō)明。

sib.xxx954(位[5-3]和sib.bbb956(位[2-0])—之前關(guān)于寄存器索引xxxx和bbbb提到了這些字段的內(nèi)容。

位移字節(jié)(字節(jié)7或字節(jié)7-10)

位移字段862a(字節(jié)7-10)—當(dāng)mod字段942包含10時(shí),字節(jié)7-10是位移字段862a,并且其作用與傳統(tǒng)32位位移(disp32)相同并且按字節(jié)粒度工作。

位移因子字段862b(字節(jié)7)—當(dāng)mod字段942包含01時(shí),字節(jié)7是位移因子字段862b。該字段的位置與按字節(jié)粒度工作的傳統(tǒng)x86指令集8位位移(disp8)的位置相同。因?yàn)閐isp8是符號(hào)擴(kuò)展的,所以其僅能夠在-128和127字節(jié)偏移之間進(jìn)行尋址;按照64字節(jié)高速緩沖存儲(chǔ)行,disp8使用能夠被設(shè)定為僅四個(gè)實(shí)際可用的值-128、-64、0和64的8個(gè)位;因?yàn)橥ǔP枰蟮姆秶?,所以使用disp32;然而,disp32需要4個(gè)字節(jié)。與disp8和disp32相反,位移因子字段862b是disp8的重新解釋;當(dāng)使用位移因子字段862b時(shí),實(shí)際的位移由位移因子字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)存取的尺寸(n)來(lái)確定。這種類型的位移被稱為disp8*n。這減少了平均指令長(zhǎng)度(所使用的單個(gè)字節(jié)用于位移,但是具有更大的范圍)。這種壓縮位移基于如下假設(shè):有效位移是存儲(chǔ)器存取的粒度的倍數(shù),并且因此,無(wú)需對(duì)地址偏移的冗余低階位進(jìn)行編碼。換言之,位移因子字段862b替代傳統(tǒng)x86指令集8位位移。因此,位移因子字段862b以與x86指令集8位位移相同的方式進(jìn)行編碼(因此,modrm/sib編碼規(guī)則不變),僅除了disp8被過(guò)載為disp8*n。換言之,編碼規(guī)則或編碼長(zhǎng)度無(wú)變化,而僅僅是硬件對(duì)位移值的解釋發(fā)生了變化(這需要按照存儲(chǔ)器操作數(shù)的尺寸縮放位移以獲得逐字節(jié)地址偏移)。

立即數(shù)

立即數(shù)字段872如之前所描述的那樣操作。

示例性的寄存器體系結(jié)構(gòu)-圖10

圖10為根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器體系結(jié)構(gòu)1000的框圖。寄存器體系結(jié)構(gòu)的寄存器文件和寄存器列于下面:

矢量寄存器文件1010—在圖示的實(shí)施例中,存在1012位寬的32個(gè)矢量寄存器;這些寄存器被稱為zmm0至zmm31。較低16個(gè)zmm寄存器的較低階的856位疊加在寄存器ymm0-16之上。較低16個(gè)zmm寄存器的較低階的128位(ymm寄存器的較低階的128位)疊加在寄存器xmm0-15之上。特定矢量友好指令格式900如下表中所圖示的那樣在這些疊加的寄存器文件上操作。

換言之,矢量長(zhǎng)度字段859b在最大長(zhǎng)度和一個(gè)或多個(gè)其它較短長(zhǎng)度之間選擇,其中每個(gè)這樣的較短長(zhǎng)度為前一長(zhǎng)度的一半;并且不具有矢量長(zhǎng)度字段859b的指令模板在最大矢量長(zhǎng)度上操作。此外,在一個(gè)實(shí)施例中,特定矢量友好指令格式900的b類指令模板在封包的或標(biāo)量單/雙精度浮點(diǎn)數(shù)據(jù)和封包的或標(biāo)量整數(shù)數(shù)據(jù)上操作。標(biāo)量操作是在zmm/ymm/xmm寄存器中的最低階數(shù)據(jù)元素位置上執(zhí)行的操作;更高階數(shù)據(jù)元素位置保持與它們?cè)谠撝噶钪跋嗤蛘吒鶕?jù)實(shí)施例進(jìn)行歸零。

寫(xiě)屏蔽寄存器1015—在圖示的實(shí)施例中,存在8個(gè)寫(xiě)屏蔽寄存器(k0至k7),每個(gè)的尺寸為64位。如之前所述,在本發(fā)明的一個(gè)實(shí)施例中,矢量屏蔽寄存器k0不能用作寫(xiě)屏蔽;當(dāng)通常表示k0的編碼用于寫(xiě)屏蔽時(shí),其選擇0xffff的硬接線寫(xiě)屏蔽,有效地對(duì)該指令禁用寫(xiě)屏蔽。

多媒體擴(kuò)展控制狀態(tài)寄存器(mxcsr)1020—在圖示的實(shí)施例中,該32位寄存器提供了在浮點(diǎn)運(yùn)算中使用的狀態(tài)位和控制位。

通用寄存器1025—在圖示的實(shí)施例中,存在十六個(gè)64位通用寄存器,其連同現(xiàn)有的x86尋址模式一起用于對(duì)存儲(chǔ)器操作數(shù)進(jìn)行尋址。這些寄存器按名稱rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp和r8至r15進(jìn)行參考。

擴(kuò)展標(biāo)記(eflags)寄存器1030—在圖示的實(shí)施例中,該32位寄存器用于記錄許多指令的結(jié)果。

浮點(diǎn)控制字(fcw)寄存器1035和浮點(diǎn)狀態(tài)字(fsw)寄存器1040—在圖示的實(shí)施例中,這些寄存器由x87指令集擴(kuò)展使用來(lái)在fcw情況下設(shè)定取整模式、異常掩碼和標(biāo)記,并且在fsw的情況下跟蹤異常。

標(biāo)量浮點(diǎn)堆棧寄存器文件(x87堆棧)1045,其又名mmx封包整數(shù)平面寄存器文件1050—在圖示的實(shí)施例中,x87堆棧為利用x87指令集擴(kuò)展對(duì)32/64/80位浮點(diǎn)數(shù)據(jù)執(zhí)行標(biāo)量浮點(diǎn)操作的八元素堆棧;而mmx寄存器用于對(duì)64位封包整數(shù)數(shù)據(jù)執(zhí)行操作,以及為在mmx和xmm寄存器之間執(zhí)行的一些操作保持操作數(shù)。

段寄存器1055—在圖示的實(shí)施例中,存在六個(gè)16位寄存器,其用于存儲(chǔ)分段地址生成所使用的數(shù)據(jù)。

rip寄存器1065—在圖示的實(shí)施例中,該64位寄存器存儲(chǔ)指令指針。

本發(fā)明的替代實(shí)施例可以使用更寬或更窄的寄存器。另外,本發(fā)明的可替代實(shí)施例可以使用更多、更少、或不同的寄存器文件和寄存器。

示例性的有序處理器體系結(jié)構(gòu)—圖11a-11b

圖11a-11b圖示了示例性的有序處理器體系結(jié)構(gòu)的框圖。圍繞擴(kuò)增有寬矢量處理器(vpu)的有序cpu核心的多個(gè)實(shí)例來(lái)設(shè)計(jì)這些示例性的實(shí)施例。核心通過(guò)高帶寬互連網(wǎng)絡(luò)與某些固定功能邏輯、存儲(chǔ)器i/o接口和其它必要的i/o邏輯進(jìn)行通信,取決于el3t應(yīng)用。例如,該實(shí)施例實(shí)現(xiàn)為獨(dú)立式gpu通常包括pci總線。

圖11a是根據(jù)本發(fā)明的實(shí)施例的單cpu核心連同其與片上互連網(wǎng)絡(luò)1102的連接及其2級(jí)(l2)高速緩沖存儲(chǔ)器1104的本地子集的框圖。指令解碼器1100支持帶有包括特定矢量指令格式900的擴(kuò)展的x86指令集。盡管在本發(fā)明的一個(gè)實(shí)施例中(為了簡(jiǎn)化設(shè)計(jì)),標(biāo)量單元1108和矢量單元1110使用單獨(dú)的寄存器集(分別是標(biāo)量寄存器1112和矢量寄存器1114),并且在它們之間傳遞的數(shù)據(jù)被寫(xiě)入存儲(chǔ)器并且然后從1級(jí)(l1)高速緩沖存儲(chǔ)器1106中讀回,但是本發(fā)明的替代實(shí)施例可以使用不同的方法(例如,使用單個(gè)寄存器集或者包括允許數(shù)據(jù)在兩個(gè)寄存器文件之間傳遞的通信路徑,而不進(jìn)行寫(xiě)入和讀回)。

l1高速緩沖存儲(chǔ)器1106允許低時(shí)延存取高速緩沖存儲(chǔ)器的標(biāo)量和矢量單元。連同矢量友好指令格式的load-op指令,這表示能夠有點(diǎn)類似于擴(kuò)展寄存器文件來(lái)處理l1高速緩沖存儲(chǔ)器1106。這顯著地提高了許多算法的性能,尤其是利用驅(qū)逐暗示字段852b。

l2高速緩沖存儲(chǔ)器1104的本地子集是被劃分成單獨(dú)的本地子集的全局l2高速緩沖存儲(chǔ)器的一部分,每個(gè)cpu核心各一個(gè)本地子集。每個(gè)cpu具有通往其l2高速緩沖存儲(chǔ)器1104的自身本地子集的直接存取路徑。由cpu核心讀取的數(shù)據(jù)被存儲(chǔ)在其l2高速緩沖存儲(chǔ)器子集1104中,并且能夠與存取其自身局部l2高速緩沖存儲(chǔ)器子集的其它c(diǎn)pu并行地被快速地存取。由cpu核心寫(xiě)入的數(shù)據(jù)被存儲(chǔ)在其自身的l2高速緩沖存儲(chǔ)器子集1104中,并且如果有必要的話從其它子集中清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。

圖11b是根據(jù)本發(fā)明的實(shí)施例的圖11a中的cpu核心的部分的分解視圖。圖11b包括l1高速緩沖存儲(chǔ)器1104的l1數(shù)據(jù)高速緩沖存儲(chǔ)器1106a部分,以及關(guān)于矢量單元1110和矢量寄存器1114的更多細(xì)節(jié)。具體地,矢量單元1110是16-寬矢量處理單元(vpu)(參見(jiàn)16-寬alu1128),其執(zhí)行整數(shù)、單精度浮點(diǎn)和雙精度浮點(diǎn)指令。vpu支持用混合單元1120混合寄存器輸入、用數(shù)字轉(zhuǎn)換單元1122a-b進(jìn)行數(shù)字轉(zhuǎn)換、以及在存儲(chǔ)器輸入上用復(fù)制單元1124進(jìn)行復(fù)制。寫(xiě)屏蔽寄存器1126允許預(yù)測(cè)作為結(jié)果的矢量寫(xiě)入。

寄存器數(shù)據(jù)能夠以多種方式進(jìn)行混合,例如,支持矩陣乘法。來(lái)自存儲(chǔ)器的數(shù)據(jù)能夠跨越vpu通道而被復(fù)制。這是圖形和非圖形并行數(shù)據(jù)處理的共同操作,顯著地提高了高速緩沖存儲(chǔ)效率。

環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如cpu核心、l2高速緩沖存儲(chǔ)器和其它邏輯塊的代理在芯片內(nèi)彼此通信。每個(gè)環(huán)形數(shù)據(jù)路徑在每個(gè)方向上為1012位寬。

示例性的無(wú)序體系結(jié)構(gòu)—圖12

圖12是示出根據(jù)本發(fā)明的實(shí)施例的示例性的無(wú)序體系結(jié)構(gòu)的框圖。具體地,圖12示出了公知的示例性無(wú)序體系結(jié)構(gòu),其已被修改而并入了矢量友好指令格式及其執(zhí)行。在圖12中,箭頭表示在兩個(gè)或更多個(gè)單元之間的耦合,并且箭頭的方向指示在那些單元之間的數(shù)據(jù)流方向。圖12包括前端單元1205,其與執(zhí)行引擎單元1210和存儲(chǔ)器單元1215耦合;執(zhí)行引擎單元1210進(jìn)一步與存儲(chǔ)器單元1215耦合。

前端單元1205包括1級(jí)(l1)分支預(yù)測(cè)單元1220,其與2級(jí)(l2)分支預(yù)測(cè)單元1222耦合。l1和l2分支預(yù)測(cè)單元1220和1222與l1指令高速緩沖存儲(chǔ)單元1224耦合。l1指令高速緩沖存儲(chǔ)單元1224與指令轉(zhuǎn)換后援緩沖器(tlb)1226耦合,指令轉(zhuǎn)換后援緩沖器1226進(jìn)一步與指令取回和預(yù)解碼單元1228耦合。指令取回和預(yù)解碼單元1228與指令隊(duì)列單元1230耦合,指令隊(duì)列單元1230進(jìn)一步與解碼單元1232耦合。解碼單元1232包括復(fù)雜解碼器單元1234和三個(gè)簡(jiǎn)單解碼器單元1236、1238和1240。解碼單元1232包括微代碼rom單元1242。解碼單元1232可如前所述在解碼階段部分中那樣操作。l1指令高速緩沖存儲(chǔ)單元1224進(jìn)一步與存儲(chǔ)器單元1215中的l2高速緩沖存儲(chǔ)單元1248耦合。指令tlb單元1226進(jìn)一步與存儲(chǔ)器單元1215中的第二級(jí)tlb單元1246耦合。解碼單元1232、微代碼rom單元1242和循環(huán)流探測(cè)器單元1244各自與執(zhí)行引擎單元1210中的重命名/分配器單元1256耦合。

執(zhí)行引擎單元1210包括重命名/分配器單元1256,重命名/分配器單元1256與引退單元(retirementunit)1274和統(tǒng)一調(diào)度器單元1258耦合。引退單元1274進(jìn)一步與執(zhí)行單元1260耦合并且包括重排序緩沖單元1278。統(tǒng)一調(diào)度器單元1258進(jìn)一步與物理寄存器文件單元1276耦合,物理寄存器文件單元1276與執(zhí)行單元1260耦合。物理寄存器文件單元1276包括矢量寄存器單元1277a、寫(xiě)屏蔽寄存器單元1277b、和標(biāo)量寄存器單元1277c;這些寄存器單元可以提供矢量寄存器1010、矢量屏蔽寄存器1015、以及通用寄存器1025;并且物理寄存器文件單元1276可以包括未示出的附加寄存器文件(例如,標(biāo)量浮點(diǎn)堆棧寄存器文件1045,又名mmx封包整數(shù)平面寄存器文件1050)。執(zhí)行單元1260包括三個(gè)混合標(biāo)量和矢量單元1262、1264和1272;加載單元1266;存儲(chǔ)地址單元1268;存儲(chǔ)數(shù)據(jù)單元1270。加載單元1266、存儲(chǔ)地址單元1268和存儲(chǔ)數(shù)據(jù)單元1270各自進(jìn)一步與存儲(chǔ)器單元1215中的數(shù)據(jù)tlb單元1252耦合。

存儲(chǔ)器單元1215包括與數(shù)據(jù)tlb單元1252耦合的第二級(jí)tlb單元1246。數(shù)據(jù)tlb單元1252與l1數(shù)據(jù)高速緩沖存儲(chǔ)單元1254耦合。l1數(shù)據(jù)高速緩沖存儲(chǔ)單元1254與l2高速緩沖存儲(chǔ)單元1248進(jìn)一步耦合。在一些實(shí)施例中,l2高速緩沖存儲(chǔ)單元1248進(jìn)一步與存儲(chǔ)器單元1215內(nèi)部和/或外部的l3和更高的高速緩沖存儲(chǔ)單元1250耦合。

通過(guò)舉例的方式,示例性的無(wú)序體系結(jié)構(gòu)可以實(shí)現(xiàn)如下的過(guò)程管線8200:1)指令取回和預(yù)解碼單元1228執(zhí)行取回和長(zhǎng)度解碼階段;2)解碼單元1232執(zhí)行解碼階段;3)重命名/分配器單元1256執(zhí)行分配階段和重命名階段;4)統(tǒng)一調(diào)度器1258執(zhí)行調(diào)度階段;5)物理寄存器文件單元1276、重排序緩沖單元1278和存儲(chǔ)器單元1215執(zhí)行寄存器讀取/存儲(chǔ)器讀取階段;執(zhí)行單元1260執(zhí)行執(zhí)行/數(shù)據(jù)變換階段;6)存儲(chǔ)器單元1215和重排序緩沖單元1278執(zhí)行寫(xiě)回/存儲(chǔ)器寫(xiě)入階段1960;7)引退單元1274執(zhí)行rob讀取階段;8)各個(gè)單元可在異常處理階段中被涉及;以及9)引退單元1274和物理寄存器文件單元1276執(zhí)行提交階段。

示例性的單核心和多核心處理器—圖17

圖17是根據(jù)本發(fā)明的實(shí)施例的帶有集成存儲(chǔ)器控制器和圖形的單核心處理器和多核心處理器1700的框圖。圖17中的實(shí)線框示出了帶有單核心1702a、系統(tǒng)代理1710、一組一個(gè)或多個(gè)總線控制器單元1716的處理器1700,而虛線框的任選添加示出了帶有多個(gè)核心1702a-n、系統(tǒng)代理單元1710中的一組一個(gè)或多個(gè)集成存儲(chǔ)器控制器單元1714、以及集成圖形邏輯1708的可選處理器1700。

存儲(chǔ)器層級(jí)包括核心內(nèi)的一級(jí)或多級(jí)高速緩沖存儲(chǔ)器、一組或一個(gè)或多個(gè)共享高速緩沖存儲(chǔ)單元1706以及與一組集成存儲(chǔ)器控制器單元1714耦合的外部存儲(chǔ)器(未顯示)。這組共享高速緩沖存儲(chǔ)單元1706可包括一個(gè)或多個(gè)中級(jí)高速緩沖存儲(chǔ)器,諸如2級(jí)(l2)、3級(jí)(l3)、4級(jí)(l4)或其它級(jí)的高速緩沖存儲(chǔ)器、最后一級(jí)高速緩沖存儲(chǔ)器(llc)、和/或其組合。盡管在一個(gè)實(shí)施例中,基于環(huán)的互連單元1712將集成圖形邏輯1708、一組共享高速緩沖存儲(chǔ)單元1706和系統(tǒng)代理單元1710互連,可選的實(shí)施例可以使用任何數(shù)量的用于將這些單元互連的公知技術(shù)。

在一些實(shí)施例中,核心1702a-n中的一個(gè)或多個(gè)能夠?yàn)槎嗑€程的。系統(tǒng)代理1710包括協(xié)調(diào)并操作核心1702a-n的那些部件。系統(tǒng)代理單元1710可包括例如功率控制單元(pcu)和顯示單元。pcu可以是或包括調(diào)整核心1702a-n和集成圖形邏輯1708的功率狀態(tài)所需要的邏輯和部件。顯示單元用于驅(qū)動(dòng)一個(gè)或多個(gè)外部連接的顯示器。

從體系結(jié)構(gòu)和/或指令集方面看,核心1702a-n可以是同類的或異構(gòu)的。例如,核心1702a-n中的一些可以是有序的(例如,類似于圖11a和圖11b中所示的),而其它核心是無(wú)序的(例如,類似于圖12中所示的)。作為另一示例,核心1702a-n中的兩個(gè)或更多個(gè)可以能夠執(zhí)行相同的指令集,而其它核心可能夠僅執(zhí)行該指令集的子集或不同的指令集。至少一個(gè)核心能夠執(zhí)行本文所描述的矢量友好指令格式。

處理器可以是通用處理器,諸如可從santaclara,calif的英特爾公司獲得的coretmi3、i5、i7、2duo和quad、xeontm、或itaniumtm處理器??蛇x地,處理器可以來(lái)自其它公司。處理器可以是專用處理器,例如網(wǎng)絡(luò)或通信處理器,壓縮引擎、圖形處理器、協(xié)同處理器、嵌入式處理器等等。處理器可在一個(gè)或多個(gè)芯片上實(shí)現(xiàn)。處理器1700可以利用例如bicmos、cmos或nmos的多種處理技術(shù)中的任一種成為一個(gè)或多個(gè)基板的一部分和/或可在一個(gè)或多個(gè)基板上實(shí)現(xiàn)。

示例性的計(jì)算機(jī)系統(tǒng)和處理器—圖13-15

圖13-15是適于包括處理器1700的示例性系統(tǒng),而圖17是可包括一個(gè)或多個(gè)核心1702的示例性的片上系統(tǒng)(soc)。本領(lǐng)域公知的用于膝上型計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、手持式pc、個(gè)人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機(jī)、嵌入式處理器、數(shù)字信號(hào)處理器(dsp)、圖形設(shè)備、視頻游戲設(shè)備、機(jī)頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持式設(shè)備和各種其它電子設(shè)備的其它系統(tǒng)設(shè)計(jì)和配置也是適用的。一般地,如本文所公開(kāi)的能夠合并處理器和/或其它執(zhí)行邏輯的大量系統(tǒng)或電子設(shè)備一般是適用的。

現(xiàn)參考圖13,示出了依照本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)1300的框圖。系統(tǒng)1300可包括與圖形存儲(chǔ)器控制器中心(gmch)1320耦合的一個(gè)或多個(gè)處理器1310、1315。在圖13中用虛線表示了附加處理器1315的可選特性。

每個(gè)處理器1310、1315可以是某種型號(hào)的處理器1700。然而,應(yīng)當(dāng)理解,集成圖形邏輯和集成存儲(chǔ)器控制單元不可能存在于處理器1310、1315中。

圖13示出了gmch1320可與存儲(chǔ)器1340耦合,存儲(chǔ)器1340可以例如是動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)。對(duì)于至少一個(gè)實(shí)施例,dram可以與非易失性高速緩沖存儲(chǔ)器相關(guān)聯(lián)。

gmch1320可以是芯片組或芯片組的一部分。gmch1320可以與處理器1310、1315通信并且控制處理器1310、1315和存儲(chǔ)器1340之間的交互。gmch1320還可充當(dāng)處理器1310、1315和系統(tǒng)1300的其它元件之間的加速總線接口。對(duì)于至少一個(gè)實(shí)施例,gmch1320經(jīng)由諸如前端總線(fsb)1395的多點(diǎn)分支總線與處理器1310、1315通信。

此外,gmch1320與顯示器1345(諸如平板顯示器)耦合。gmch1320可以包括集成圖形加速器。gmch1320進(jìn)一步與輸入/輸出(i/o)控制器中心(ich)1350耦合,其可用于將各種外圍設(shè)備與系統(tǒng)1300耦合。例如,在圖13的實(shí)施例中顯示了外部圖形設(shè)備1360連同另外的外圍設(shè)備1370,外部圖形設(shè)備1360可以是與ich1350耦合的分立圖形設(shè)備。

可選地,附加的或不同的處理器也可以存在于系統(tǒng)1300中。例如,附加的處理器1315可以包括與處理器1310相同的附加處理器、與處理器1310異構(gòu)或非對(duì)稱的附加處理器、加速器(例如圖形加速器或數(shù)字信號(hào)處理(dsp)單元)、現(xiàn)場(chǎng)可編程門陣列、或任何其它處理器。從包括體系結(jié)構(gòu)、微體系結(jié)構(gòu)、熱力、功率消耗特性等指標(biāo)的度量范圍看,物理資源1310、1315之間可存在多種差別。這些差別可有效地將其自身展現(xiàn)為處理元件1310、1315中的非對(duì)稱和異構(gòu)的。對(duì)于至少一個(gè)實(shí)施例,各種處理元件1310、1315可駐存在同一片封裝中。

現(xiàn)在參考圖14,該圖示出了依照本發(fā)明的實(shí)施例的第二系統(tǒng)1400的框圖。如圖14所示,微處理器系統(tǒng)1400是點(diǎn)對(duì)點(diǎn)互連系統(tǒng),并且包括經(jīng)由點(diǎn)對(duì)點(diǎn)互連1450耦合的第一處理器1470和第二處理器1480。如圖14所示,處理器1470和1480中的每個(gè)可以是某種型號(hào)的處理器1700。

可選地,一個(gè)或多個(gè)處理器1470、1480可以是除了處理器之外的元件,諸如加速器或現(xiàn)場(chǎng)可編程門陣列。

盡管顯示為僅具有兩個(gè)處理器1470、1480,但應(yīng)當(dāng)理解,本發(fā)明的范圍不受此限制。在其它實(shí)施例中,一個(gè)或多個(gè)附加的處理元件可存在于既定的處理器中。

處理器1470還可以包括集成存儲(chǔ)器控制器中心(imc)1472和點(diǎn)對(duì)點(diǎn)(p-p)接口1476和1478。類似地,第二處理器1480可以包括imc1482和p-p接口1486和1488。處理器1470、1480可以利用ptp接口電路1478、1488經(jīng)由點(diǎn)對(duì)點(diǎn)(ptp)接口1450交換數(shù)據(jù)。如圖14所示,imc的1472和1482將處理器與相應(yīng)的存儲(chǔ)器(即,存儲(chǔ)器1442和存儲(chǔ)器1444)耦合,該存儲(chǔ)器可以是在本地附接至相應(yīng)的處理器的主存儲(chǔ)器的部分。

處理器1470、1480可以各自利用點(diǎn)對(duì)點(diǎn)接口電路1476、1494、1486、1498經(jīng)由單獨(dú)的p-p接口1452、1454與芯片組1490交換數(shù)據(jù)。芯片組1490還可以經(jīng)由高性能圖形接口1439與高性能圖形電路1438交換數(shù)據(jù)。

共享高速緩沖存儲(chǔ)器(未顯示)可包括在兩個(gè)處理器之外的任一處理器中,而經(jīng)由p-p互連與處理器連接,以使得在處理器被置于低功率模式時(shí)任一個(gè)或兩個(gè)處理器的本地高速緩沖存儲(chǔ)器信息可被存儲(chǔ)在共享高速緩沖存儲(chǔ)器中。

芯片組1490可以經(jīng)由接口1496與第一總線1416耦合。在一個(gè)實(shí)施例中,第一總線1416可以是外圍部件互連(pci)總線、或諸如pci快速總線或另一第三代i/o互連總線的總線,但是本發(fā)明的范圍不受此限制。

如圖14中所示,各個(gè)i/o設(shè)備1414可以連同將第一總線1416與第二總線1420耦合的總線橋1418一起與第一總線1416耦合。在一個(gè)實(shí)施例中,第二總線1420可以是低引腳數(shù)(lpc)總線。各種設(shè)備可與第二總線1420耦合,包括例如鍵盤/鼠標(biāo)1422、通信設(shè)備1426和數(shù)據(jù)存儲(chǔ)單元1428,諸如在一個(gè)實(shí)施例中可包括代碼1430的磁盤驅(qū)動(dòng)或其它大容量存儲(chǔ)設(shè)備。此外,音頻i/o1424可與第二總線1420耦合。注意的是,其它體系結(jié)構(gòu)是可能的。例如,除了圖14的點(diǎn)對(duì)點(diǎn)體系結(jié)構(gòu)之外,系統(tǒng)可以實(shí)現(xiàn)多點(diǎn)分支總線(multi-dropbus)或其它這樣的體系結(jié)構(gòu)。

現(xiàn)在參考圖15,該圖示出了依照本發(fā)明的實(shí)施例的第三系統(tǒng)1500的框圖。圖14和圖15中相似的元件使用了相似附圖標(biāo)記,為了避免使圖15的其它方面不清晰而從圖15中省去了圖14的一些方面。

圖15圖示出處理元件1470、1480可以分別包括集成存儲(chǔ)器和i/o控制邏輯(“cl”)1472和1482。對(duì)于至少一個(gè)實(shí)施例,cl1472、1482可以包括存儲(chǔ)器控制中心邏輯(imc),諸如上文結(jié)合圖14中所描述的。另外,cl1472、1482還可以包括i/o控制邏輯。圖15中不僅示出了與cl1472、1482耦合的存儲(chǔ)器1442、1444,而且示出了i/o設(shè)備1514也與控制邏輯1472、1482耦合。傳統(tǒng)i/o設(shè)備1515與芯片組1490耦合。

現(xiàn)在參考圖16,示出了依照本發(fā)明的實(shí)施例的soc1600的框圖。圖17中的相似元件使用了相似的附圖標(biāo)記。而且,虛線框是更高級(jí)的soc上的可選特征。在圖16中,互連單元1602與如下部件耦合:應(yīng)用處理器1610,其包括一組一個(gè)或多個(gè)核心1702a-n和共享高速緩沖存儲(chǔ)單元1706;系統(tǒng)代理單元1710;總線控制器單元1716;集成存儲(chǔ)器控制器單元1714;一組或一個(gè)或多個(gè)媒體處理器1620,其可包括集成圖形邏輯1708、用于提供靜態(tài)和/或視頻攝像機(jī)功能的圖像處理器1624、用于提供硬件音頻加速的音頻處理器1626、以及用于提供視頻編碼/解碼加速的視頻處理器1628;靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)單元1630;直接存儲(chǔ)器存取(dma)單元1632;以及用于與一個(gè)或多個(gè)外部顯示器耦合的顯示單元1640。

本文所公開(kāi)的機(jī)制的實(shí)施例可在硬件、軟件、固件或這些實(shí)現(xiàn)方法的組合中實(shí)現(xiàn)。本發(fā)明的實(shí)施例可實(shí)現(xiàn)為在包括至少一個(gè)處理器、存儲(chǔ)系統(tǒng)(包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備以及至少一個(gè)輸出設(shè)備的可編程系統(tǒng)上執(zhí)行的計(jì)算機(jī)程序或程序代碼。

程序代碼可應(yīng)用于輸入數(shù)據(jù)以執(zhí)行本文所述的功能并且生成輸出信息。輸出信息可以已知方式應(yīng)用于一個(gè)或多個(gè)輸出設(shè)備。為了本申請(qǐng)的目的,處理器系統(tǒng)包括具有例如數(shù)字信號(hào)處理器(dsp)、微控制器、專用集成電路(asic)或微處理器的處理器的任何系統(tǒng)。

程序代碼可以用高級(jí)過(guò)程編程語(yǔ)言或面向?qū)ο蟮木幊陶Z(yǔ)言來(lái)實(shí)施,以與處理系統(tǒng)通信。根據(jù)需要,程序代碼還可以用匯編或機(jī)器語(yǔ)言來(lái)實(shí)施。事實(shí)上,本文所描述的機(jī)制的范圍不限于任何特定的編程語(yǔ)言。在任何情況下,語(yǔ)言可以是經(jīng)編譯的或經(jīng)解釋的語(yǔ)言。

至少一個(gè)實(shí)施例的一個(gè)或多個(gè)方面可通過(guò)存儲(chǔ)在機(jī)器可讀介質(zhì)上的代表處理器內(nèi)的各種邏輯的代表性指令來(lái)實(shí)施,當(dāng)由機(jī)器讀取時(shí),指令使機(jī)器裝配邏輯來(lái)執(zhí)行本文所描述的技術(shù)。這種稱為“ip核心”的代表可存儲(chǔ)在有形的機(jī)器可讀介質(zhì)上,并且供給各個(gè)顧客或制造設(shè)施以加載到實(shí)際上制作邏輯或處理器的制造機(jī)器中。

這種機(jī)器可讀存儲(chǔ)介質(zhì)可包括但不限于通過(guò)機(jī)器或設(shè)備制造或形成的非暫態(tài)性的有形物品布置,包括:存儲(chǔ)介質(zhì),諸如硬盤、包括軟盤、光盤(光盤只讀存儲(chǔ)器(cd-rom)、可重寫(xiě)光盤(cd-rw))和磁光盤的任何其它類型的磁盤;半導(dǎo)體器件,諸如只讀存儲(chǔ)器(rom)、隨機(jī)存取存儲(chǔ)器(ram),諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、可擦除可編程只讀存儲(chǔ)器(eprom)、閃存、電可擦除可編程只讀存儲(chǔ)器(eeprom)、磁卡或光卡;或者適用于存儲(chǔ)電子指令的任何其它類型的介質(zhì)。

因此,本發(fā)明的實(shí)施例還包括非暫態(tài)性的有形機(jī)器可讀介質(zhì),其包含矢量友好指令格式的指令或者包括設(shè)計(jì)數(shù)據(jù),諸如硬件描述語(yǔ)言(hdl),這限定了本文中描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這些實(shí)施例還可稱為程序產(chǎn)品。

在一些情況下,指令轉(zhuǎn)換器可用于將指令從源指令集轉(zhuǎn)換成目標(biāo)指令集。例如,指令轉(zhuǎn)換器可以將指令變換(例如,利用靜態(tài)二進(jìn)制變換、包括動(dòng)態(tài)編譯的動(dòng)態(tài)二進(jìn)制變換)、變形、仿真或以其它方式轉(zhuǎn)換成待由核心處理的一個(gè)或多個(gè)其它指令。指令轉(zhuǎn)換器可以軟件、硬件、固件或其組合來(lái)實(shí)施。指令轉(zhuǎn)換器可以在處理器上、不在處理器上、或部分在處理器上和部分不在處理器上。

圖18是根據(jù)本發(fā)明的實(shí)施例的對(duì)比將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的軟件指令轉(zhuǎn)換器的使用的框圖。在圖示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但是可選地指令轉(zhuǎn)換器可以軟件、固件、硬件或其各種組合來(lái)實(shí)現(xiàn)。圖18示出了高級(jí)語(yǔ)言1802的程序可利用x86編譯器1804進(jìn)行編譯以生成x86二進(jìn)制代碼1806,x86二進(jìn)制代碼1806可由具有至少一個(gè)x86指令集核心1816的處理器本機(jī)執(zhí)行(假設(shè)經(jīng)編譯的一些指令呈矢量友好指令格式)。具有至少一個(gè)x86指令集核心1816的處理器代表能夠通過(guò)兼容地執(zhí)行或其它方式處理如下來(lái)執(zhí)行與具有至少一個(gè)x86指令集核心的英特爾處理器基本相同的功能的任何處理器:(1)英特爾x86指令集核心的指令集的實(shí)質(zhì)部分,或者(2)旨在于具有至少一個(gè)x86指令集核心的英特爾處理器上運(yùn)行的應(yīng)用程序或其它軟件的對(duì)象代碼版本,從而實(shí)現(xiàn)與具有至少一個(gè)x86指令集核心的英特爾處理器基本相同的結(jié)果。x86編譯器1804代表了可操作以生成x86二進(jìn)制代碼1806(例如,對(duì)象代碼)的編譯器,x86二進(jìn)制代碼1806能夠通過(guò)或不通過(guò)額外的鏈接處理而在具有至少一個(gè)x86指令集核心1816的處理器上執(zhí)行。類似地,圖18示出了高級(jí)語(yǔ)言1802的程序可以利用可選的指令集編譯器1808進(jìn)行編譯以生成可選的指令集二進(jìn)制代碼1810,指令集二進(jìn)制代碼1810可由不具有至少一個(gè)x86指令集核心1814的處理器(例如,具有執(zhí)行ca,sunnyvale的mipstechnologies的mips指令集和/或執(zhí)行ca,sunnyvale的armholdings的arm指令集的核心的處理器)本機(jī)執(zhí)行。指令轉(zhuǎn)換器1812用于將x86二進(jìn)制代碼1806轉(zhuǎn)換成可由不具有x86指令集核心1814的處理器本機(jī)執(zhí)行的代碼。該經(jīng)轉(zhuǎn)換的代碼不大可能與可選的指令集二進(jìn)制代碼1810相同,這是因?yàn)槟軌驅(qū)崿F(xiàn)這點(diǎn)的指令轉(zhuǎn)換器很難制造;然而,經(jīng)轉(zhuǎn)換的代碼將實(shí)現(xiàn)通常的操作并且由來(lái)自可選的指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器1812代表了通過(guò)仿真、模擬或任何其它處理而允許不具有x86指令集處理器或核心的處理器或其它電子設(shè)備來(lái)執(zhí)行x86二進(jìn)制代碼1806的軟件、固件、硬件或其組合。

本文所公開(kāi)的矢量友好指令格式的指令的一些操作可通過(guò)硬件部件來(lái)執(zhí)行,并且可以用于使或至少使得電路或其它硬件部件被編程有執(zhí)行操作的指令的機(jī)器可執(zhí)行指令來(lái)具體實(shí)施。電路可以包括通用或?qū)S锰幚砥?,或邏輯電路,僅列舉了幾個(gè)示例。操作還可任選地通過(guò)硬件和軟件的組合來(lái)執(zhí)行。執(zhí)行邏輯和/或處理器可以包括響應(yīng)機(jī)器指令或從機(jī)器指令得到的一個(gè)或多個(gè)控制信號(hào)以存儲(chǔ)指令指定結(jié)果操作數(shù)的專門或特定的電路或其它邏輯。例如,本文公開(kāi)的指令的實(shí)施例可以在圖13-16的一個(gè)或多個(gè)系統(tǒng)中執(zhí)行,并且矢量友好指令格式的指令的實(shí)施例可以存儲(chǔ)在程序代碼中以在系統(tǒng)中執(zhí)行。另外,這些圖的處理元件可以使用本文詳述的詳細(xì)管線和/或體系結(jié)構(gòu)(例如,有序和無(wú)序體系結(jié)構(gòu))中的一個(gè)。例如,有序體系結(jié)構(gòu)的解碼單元可以對(duì)指令進(jìn)行解碼,將經(jīng)解碼的指令傳遞到矢量或標(biāo)量單元,等等。

上面的描述旨在說(shuō)明本發(fā)明的優(yōu)選實(shí)施例。從上面的討論還應(yīng)當(dāng)顯知,尤其在該技術(shù)領(lǐng)域,增長(zhǎng)快速且進(jìn)一步的發(fā)展不易于預(yù)見(jiàn),本領(lǐng)域技術(shù)人員能夠?qū)Ρ景l(fā)明的布置和細(xì)節(jié)進(jìn)行修改而在隨附權(quán)利要求書(shū)及其等同內(nèi)容的范圍內(nèi)不偏離本發(fā)明的原理。例如,方法的一個(gè)或多個(gè)操作可組合或進(jìn)一步分離。

替代的實(shí)施例

盡管已經(jīng)描述了本機(jī)執(zhí)行矢量友好指令格式的實(shí)施例,但是本發(fā)明的替代實(shí)施例可以通過(guò)在執(zhí)行不同指令集的處理器(例如,執(zhí)行ca,sunnyvale的mipstechnologies的mips指令集的處理器,執(zhí)行ca,sunnyvale的armholdings的arm指令集的處理器)上運(yùn)行的仿真層來(lái)執(zhí)行矢量友好指令格式。而且,盡管圖中的流程圖示出了本發(fā)明的一些實(shí)施例所執(zhí)行的操作的特定次序,但應(yīng)當(dāng)理解這樣的次序是示例性的(例如,替代的實(shí)施例可以按不同的次序執(zhí)行操作,組合一些操作,重疊一些操作,等等)。

在上文的描述中,為了說(shuō)明的目的,已經(jīng)闡述了多方面具體細(xì)節(jié)從而提供本發(fā)明的實(shí)施例的全面理解。然而,本領(lǐng)域技術(shù)人員顯而易見(jiàn),可在不具有這些具體細(xì)節(jié)中的一些細(xì)節(jié)的情況下來(lái)實(shí)施一個(gè)或多個(gè)其它實(shí)施例。所描述的特定實(shí)施例被提供不是為了限制本發(fā)明而是說(shuō)明本發(fā)明的實(shí)施例。本發(fā)明的范圍不是由上文提供的具體示例確定的,而是僅由下面的權(quán)利要求書(shū)確定。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
南开区| 平顶山市| 龙泉市| 库车县| 麻阳| 汉川市| 泾源县| 龙游县| 湘西| 灵石县| 陆河县| 曲阳县| 新密市| 岱山县| 莱西市| 宜川县| 陆川县| 同仁县| 海门市| 修文县| 建德市| 家居| 仪征市| 中江县| 岳普湖县| 曲沃县| 怀宁县| 昔阳县| 咸丰县| 文昌市| 龙岩市| 武宁县| 诸城市| 封丘县| 沙洋县| 定襄县| 民勤县| 若尔盖县| 定南县| 射阳县| 定安县|