亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于序列檢測(cè)或與指令相關(guān)聯(lián)的信息來(lái)優(yōu)化指令的性能的制作方法

文檔序號(hào):6587900閱讀:181來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):基于序列檢測(cè)或與指令相關(guān)聯(lián)的信息來(lái)優(yōu)化指令的性能的制作方法
基于序列檢測(cè)或與指令相關(guān)聯(lián)的信息來(lái)優(yōu)化指令的性能
背景技術(shù)
在許多基于處理器的系統(tǒng)中,處理器提供針對(duì)拷貝或存儲(chǔ)操作的高效實(shí)現(xiàn)而被調(diào)
整的指令。用于存儲(chǔ)器拷貝操作的軟件被針對(duì)特定的處理器實(shí)現(xiàn)而進(jìn)行優(yōu)化。在許多情況
下,用于執(zhí)行數(shù)據(jù)拷貝的最優(yōu)方式在不斷變化,而且,代碼充當(dāng)著編譯器、操作系統(tǒng)(OS)內(nèi)
核和應(yīng)用程序編寫(xiě)器的活動(dòng)目標(biāo),所述編譯器、操作系統(tǒng)內(nèi)核和應(yīng)用程序編寫(xiě)器被迫使用
針對(duì)不同場(chǎng)景、不同微架構(gòu)等而被調(diào)整的多種擴(kuò)充(proliferation)。
迭代拷貝指令(iterative copy instruction)可被用于如該指令的參數(shù)之一所 規(guī)定的那樣拷貝一定數(shù)量的數(shù)據(jù)元素。迭代拷貝操作可以具有不同的固有(native)數(shù)據(jù) 元素長(zhǎng)度,例如,字節(jié)、字、雙字、四字等等。固有長(zhǎng)度越長(zhǎng),指令在移動(dòng)數(shù)據(jù)的量方面更加高 效,這是因?yàn)榭梢允褂酶蟮?載入"和"存儲(chǔ)"操作。例如,在Inte1⑧Architecture (IA32) 架構(gòu)中,重復(fù)移動(dòng)字節(jié)(REP M0VSB)指令將給定寄存器內(nèi)的值用作拷貝的長(zhǎng)度的指示。此 外,該指令接收源指針和目的地指針作為輸入?yún)?shù)。這種指令被定義為"一次一個(gè)地"移動(dòng) 一個(gè)字節(jié)的數(shù)據(jù)。在某些情況下,該指令的實(shí)現(xiàn)可以切換至"快速模式",在該模式下,使用 更長(zhǎng)的操作(例如,一次16個(gè)字節(jié))來(lái)執(zhí)行操作。IA32程序員參考手冊(cè)定義了在當(dāng)前處理 器中執(zhí)行這種快速模式的條件。 由于在許多情況下拷貝和設(shè)置操作的長(zhǎng)度在編譯時(shí)是未知的,所以一種用現(xiàn)有實(shí) 現(xiàn)的迭代拷貝操作來(lái)提高拷貝操作效率的方案是使用第一迭代拷貝指令來(lái)移動(dòng)數(shù)據(jù)串的 大部分,之后使用第二迭代拷貝指令來(lái)移動(dòng)數(shù)據(jù)的剩余部分(例如,第一拷貝操作每次移 動(dòng)雙字,而第二拷貝操作移動(dòng)最后的0-3字節(jié))。這種序列有兩個(gè)缺點(diǎn)(a)第二指令耗費(fèi) 額外的周期,這些額外的周期總是會(huì)被花費(fèi)掉,即使當(dāng)沒(méi)有剩余部分時(shí)也是如此;以及(b) 優(yōu)化所針對(duì)的情況是,特定長(zhǎng)度的第一迭代拷貝指令其后跟著用于第二迭代拷貝指令的有 限指令序列;任何其它組合將會(huì)導(dǎo)致顯著的性能損失。 此外,在流水線(xiàn)型機(jī)器中,經(jīng)常發(fā)生的情況是,需要在指令譯碼時(shí)決定指令的最佳 行為,即便是作出該決定所需的一些數(shù)據(jù)還未知或還未提交。這樣的一個(gè)示例是分支,其需 要被采用還是不被采用取決于標(biāo)志,即使這些標(biāo)志還未被計(jì)算出來(lái)。解決該問(wèn)題最常用的 方案是使用分支預(yù)測(cè)器。但是這種預(yù)測(cè)器需要時(shí)間來(lái)進(jìn)行訓(xùn)練(建立歷史記錄),具有高昂 的成本(因?yàn)樾枰4嬖S多狀態(tài)),并且在異常模式(flaky pattern)下它們的性能是不確 定的。


圖l是根據(jù)本發(fā)明的
圖2是根據(jù)本發(fā)明的
圖3是根據(jù)本發(fā)明的
圖4是根據(jù)本發(fā)明的
圖5是根據(jù)本發(fā)明的
一個(gè)實(shí)施例的方法的流程圖。
一個(gè)實(shí)施例的序列檢測(cè)器的框圖。
一個(gè)實(shí)施例的序列譯碼器狀態(tài)機(jī)的示例的狀態(tài)圖。
一個(gè)實(shí)施例的處理器的框圖。
一個(gè)實(shí)施例的系統(tǒng)的框圖。
具體實(shí)施例方式
在各種實(shí)施例中,編譯器生成的拷貝操作的屬性可被用于更高效地執(zhí)行迭代拷貝
操作。如本文中所使用的,術(shù)語(yǔ)"拷貝"操作被用作存儲(chǔ)器拷貝、存儲(chǔ)器移動(dòng)和存儲(chǔ)器設(shè)置操 作的通稱(chēng),這些操作在存儲(chǔ)器內(nèi)移動(dòng)數(shù)據(jù)、將數(shù)據(jù)移入或移出存儲(chǔ)器。不同環(huán)境可以使用這 類(lèi)操作的不同名稱(chēng)。這些拷貝操作的"快速模式"可以在許多情況中被執(zhí)行。即使當(dāng)不可用
時(shí)(例如,當(dāng)別名風(fēng)險(xiǎn)測(cè)試(aliasing-risk-test)失敗時(shí)),在許多情況下(假設(shè)隨機(jī)分布 的情況),仍然可以執(zhí)行比其中一次拷貝單個(gè)數(shù)據(jù)元素的固有模式更快的模式。因此優(yōu)化的 拷貝序列從開(kāi)始就嘗試使用數(shù)個(gè)不同快速模式(即,比固有模式更快的模式)之一來(lái)執(zhí)行 拷貝,并且僅僅在很少數(shù)情況下將導(dǎo)致使用固有長(zhǎng)度的操作來(lái)執(zhí)行拷貝操作。處理器指令 集可以包括一個(gè)或多個(gè)指令,用于命令處理器執(zhí)行存儲(chǔ)器拷貝或存儲(chǔ)器設(shè)置(存儲(chǔ))操作, 當(dāng)被高效實(shí)現(xiàn)時(shí),其可以使得處理器硬件在不同的微架構(gòu)和架構(gòu)世代上保持其性能邊界。
如下面將進(jìn)一步描述的,一個(gè)實(shí)施例可以包括數(shù)個(gè)主要步驟(在下面詳細(xì)描述), 包括(l)對(duì)開(kāi)始"快速拷貝"所需的規(guī)則執(zhí)行檢查,并針對(duì)之后的步驟進(jìn)行建立操作;(2) 頭部,其中進(jìn)行條件拷貝(使用條件操作來(lái)覆蓋流水線(xiàn)的時(shí)延,以防止傳播導(dǎo)致的氣泡 (bubble)) ;(3)快速的固定大小的迭代,其具有處理感興趣的情況的特性;以及(4)尾部。 所述檢查和頭部(步驟1和2)針對(duì)所有串長(zhǎng)(即,拷貝長(zhǎng)度或塊長(zhǎng)度)被執(zhí)行。注意,頭 部在所有的檢查都通過(guò)的情況下被執(zhí)行;否則,硬件進(jìn)入固有循環(huán),其以拷貝操作的固有大 小一次一個(gè)地執(zhí)行拷貝操作。根據(jù)在頭部中所分析的拷貝的長(zhǎng)度,按照需要執(zhí)行快速循環(huán) 和尾部。通過(guò)提早作出決定,可以選擇流水線(xiàn)氣泡最少并且沒(méi)有分支誤預(yù)測(cè)的執(zhí)行路徑。 對(duì)于一些長(zhǎng)度或源(src)-目的地(dst)距離處理,可以應(yīng)用一些額外限制,例如,在一些 實(shí)現(xiàn)中的"快速循環(huán)"內(nèi),可能存在將需要重新執(zhí)行一些操作的不準(zhǔn)確的異常檢測(cè),以允許 返回多達(dá)64B,除了在頭部進(jìn)行檢查之外,還需要檢查目的地指針是否落后源指針不超過(guò) 63B(即,(dst mod 4k)-(src mod4k) < 63B)。當(dāng)這種額外檢查失敗時(shí),仍可以轉(zhuǎn)至次優(yōu)的 代碼例程來(lái)進(jìn)行正確的執(zhí)行。此外,在一些實(shí)施例中,對(duì)于拷貝操作長(zhǎng)度非常長(zhǎng)并且緩存提 示(caching hint)可以用來(lái)提高性能的情況,可以存在可選的特殊處理。應(yīng)該注意的是, 盡管在此以特定大小的拷貝操作進(jìn)行描述,但是本發(fā)明的范圍并不限于此,并且這些實(shí)施 例可以處理針對(duì)其它大小(例如,不同數(shù)目的字節(jié)和高速緩存行寬度)而優(yōu)化的拷貝操作。
現(xiàn)在參見(jiàn)圖l,示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的方法的流程圖。方法100可以在 諸如通用或?qū)S糜布卧@樣的處理器的不同位置被執(zhí)行。方法ioo可以用于以?xún)?yōu)化方式 來(lái)執(zhí)行迭代拷貝操作。如在圖1中所示,方法ioo可以從執(zhí)行檢查并對(duì)拷貝操作進(jìn)行預(yù)備
開(kāi)始(框110)。更具體地,可以執(zhí)行各種檢查來(lái)確定要執(zhí)行的拷貝操作的類(lèi)型,以及通過(guò)將 拷貝操作中使用的各種計(jì)數(shù)值載入計(jì)數(shù)器中來(lái)初始化與拷貝操作相關(guān)聯(lián)的各種計(jì)數(shù)器。首 先,可以執(zhí)行數(shù)個(gè)檢查來(lái)確定是否可以執(zhí)行快速流程,其中在所述快速流程中,使用比指令 的固有長(zhǎng)度更長(zhǎng)的載入/存儲(chǔ)操作來(lái)執(zhí)行拷貝操作。如果任何一個(gè)檢查失敗,則執(zhí)行固有 模式循環(huán)(框120),在所述固有模式循環(huán)中,使用指令的固有長(zhǎng)度(例如,對(duì)于字節(jié)移動(dòng)操 作為字節(jié),而對(duì)于雙字指令為雙字)來(lái)進(jìn)行拷貝操作。應(yīng)該注意的是,這些檢查使用在執(zhí)行 階段所獲取的數(shù)據(jù),其中在執(zhí)行階段中,所需信息已經(jīng)可用并且已知。如果任何一個(gè)檢查失 敗,則誤推測(cè)代價(jià)可能與相關(guān)聯(lián)的性能影響一同發(fā)生,但是在通常的使用中這是少有的情 況,并且由于消耗的是固有循環(huán),所以使得相對(duì)損失也較低。
在一個(gè)實(shí)施例中,被檢查的條件包括檢查數(shù)據(jù)串的目的地(dst)指針和源(src)指針之間的距離,以確保之前讀取的src將不會(huì)改變操作的行為。該距離被測(cè)量如下;如果0字節(jié)(B) < ((dst mod 4K)-(src mod4K)) < 16B,則可能退出至固有模式。在可替代的其中不關(guān)注頁(yè)間的存儲(chǔ)器別名的實(shí)施例中,可以在不進(jìn)行"mod 4K"的情況下進(jìn)行操作。此外,方向(DF)標(biāo)志被檢查。如果DF標(biāo)志二二"1",則可能退出至固有模式。對(duì)地址空間(對(duì)src和dst 二者)的回巻(wr即-around)的檢查可以被確定,并且如果為真,則該檢查導(dǎo)致退出至固有模式。替代的實(shí)現(xiàn)可以針對(duì)進(jìn)入快速模式而增加其它條件或者消除一些條件。 在框110中,還可以執(zhí)行對(duì)諸如"快速循環(huán)"(Fast Loop)這樣的快速循環(huán)進(jìn)行的預(yù)備以及尾部。在一個(gè)實(shí)施例中,這可以包括計(jì)算快速CL循環(huán)的計(jì)數(shù)(例如,如果在rcx寄存器中用字節(jié)來(lái)規(guī)定長(zhǎng)度,并且每個(gè)循環(huán)對(duì)64個(gè)字節(jié)進(jìn)行操作,則使用rcx/64來(lái)計(jì)算迭代的數(shù)目),并且將其載入零開(kāi)銷(xiāo)計(jì)數(shù)寄存器(假設(shè)當(dāng)跳轉(zhuǎn)至快速循環(huán)110時(shí),如之后討論的那樣,"頭"部拷貝多達(dá)64B的數(shù)據(jù),并且計(jì)數(shù)器減1)。在其中"頭"部處理多于64B (例如,128B)的數(shù)據(jù)的一些情況下,可能需要從rcx/64的計(jì)算中減去一常數(shù)。此外,尾部條件被計(jì)算,并且被置于零開(kāi)銷(xiāo)跳轉(zhuǎn)控制寄存器中。 如果任何一個(gè)檢查失敗,則控制轉(zhuǎn)至框120,其中,可以以固有模式來(lái)執(zhí)行拷貝。在各種實(shí)施例中,該固有模式可以用于執(zhí)行根據(jù)固有長(zhǎng)度模式的拷貝操作,之后方法100可以結(jié)束。因此,在批(bunch)拷貝操作所需的條件未滿(mǎn)足的情況下,固有長(zhǎng)度被用于使用零開(kāi)銷(xiāo)循環(huán)的每個(gè)拷貝迭代(例如,對(duì)于重復(fù)移動(dòng)字節(jié)指令(REP M0VSB)的情況,每個(gè)迭代為1個(gè)字節(jié))。 而如果檢查通過(guò)并且確定可以執(zhí)行快速拷貝操作(基于框110中的檢查和計(jì)算),則控制從框110轉(zhuǎn)至框130。在框130,可以執(zhí)行拷貝操作的頭部。更具體地,可以執(zhí)行條件載入/存儲(chǔ),其可以處理多達(dá)預(yù)定數(shù)量的任何長(zhǎng)度的數(shù)據(jù),例如64字節(jié)的數(shù)據(jù)。如將在本文中描述的,在一個(gè)這樣的實(shí)施例中,可以執(zhí)行多達(dá)八個(gè)拷貝操作,來(lái)拷貝多達(dá)64字節(jié)
的數(shù)據(jù)。更具體地,如果在框iio檢查通過(guò),則此時(shí)處理器知道可以執(zhí)行比固有拷貝長(zhǎng)度更
長(zhǎng)的拷貝操作,而不影響結(jié)果的正確性。 因此,在框130,拷貝操作正在使用"條件"操作,其中,如果剩余長(zhǎng)度中具有至少"N"個(gè)字節(jié),則將執(zhí)行長(zhǎng)度為"N"字節(jié)的每個(gè)條件拷貝。應(yīng)該注意的是,該條件在執(zhí)行時(shí)被檢查,由此不依賴(lài)于長(zhǎng)度信息從執(zhí)行階段返回至譯碼階段的傳播。除了拷貝之外,每次迭代將會(huì)使源和目的地指針加"N"以供后續(xù)操作使用,并且將剩余長(zhǎng)度減去"N"。
拷貝操作的數(shù)目被設(shè)置,以允許在"檢查"步驟(框IIO)中進(jìn)行的預(yù)備在流水線(xiàn)中傳播,從而當(dāng)它們被輪轉(zhuǎn)到并且在譯碼階段被使用時(shí),將不會(huì)對(duì)它們有任何懲罰。應(yīng)該注意的是,對(duì)于"載入零開(kāi)銷(xiāo)計(jì)數(shù)器"或"零開(kāi)銷(xiāo)分支條件",從譯碼到完成執(zhí)行所花費(fèi)的時(shí)間——其是條件操作在其中被譯碼并執(zhí)行的窗口,等于從譯碼到執(zhí)行的流水線(xiàn)深度。假設(shè)機(jī)器可以處理的最大載入/存儲(chǔ)長(zhǎng)度(用字節(jié)表示)是"N二2'n",則可以使用如下為2的冪的長(zhǎng)度的序列(可以被稱(chēng)為2的冪的樹(shù))來(lái)執(zhí)行拷貝序列1, 1,2,4,. . . N/2,N,N,N。例如,如果N = 16,并且假設(shè)處理器需要8個(gè)操作來(lái)覆蓋流水線(xiàn)延遲,則序列將是1, 1, 2, 4, 8,16, 16, 16 ;其提供了最大64B的拷貝。對(duì)于范圍0至64B中的每個(gè)數(shù)目,存在上述操作的子集,其可以精確移動(dòng)該數(shù)據(jù)量(例如,為了移動(dòng)3字節(jié),應(yīng)該執(zhí)行1字節(jié)和2字節(jié),或者為了移動(dòng)10字節(jié),應(yīng)該執(zhí)行2字節(jié)和8字節(jié))。對(duì)于另一示例,如果N = 32并且需要8個(gè)操作來(lái)覆蓋流水線(xiàn)延遲,則序列將是1, 1, 2, 4, 8, 16, 32, 32,共計(jì)96B。在一些實(shí)施例中,條件段可以處理的最大數(shù)據(jù)量是快速循環(huán)的大小的整數(shù)倍(例如,64BX1 = 64B或64BX2 =128B)是高效的。 在一個(gè)實(shí)施例中,實(shí)際上以上面的列表的相反順序(例如,16, 16, 16,8,4,2, 1, 1)來(lái)執(zhí)行操作的序列,以?xún)H生成通過(guò)框130的頭部正確拷貝從0到64B范圍內(nèi)的任何數(shù)目的字節(jié)所需的操作的子集。這是通過(guò)使條件查看剩余長(zhǎng)度來(lái)進(jìn)行的,并且如果Remainder—Length-N > 0,則進(jìn)行操作,否則跳過(guò)。Remainder Length在每個(gè)拷貝操作之后被用該操作的長(zhǎng)度來(lái)進(jìn)行更新。應(yīng)該注意的是,并不是每進(jìn)行拷貝操作就更新src和dst指針,而可以?xún)H更新相對(duì)于原始src和dst指針的偏移量,并在框130結(jié)束時(shí)(或者在該框的中間的某個(gè)其他快照點(diǎn))將src和dst指針更新為它們的新值。這可以在每個(gè)條件步驟中節(jié)省一個(gè)"加"操作。 在頭部130結(jié)束時(shí),使用框110中的計(jì)數(shù)器、選擇的循環(huán)類(lèi)型和預(yù)備的條件來(lái)進(jìn)行多路判決。更具體地,如果零開(kāi)銷(xiāo)計(jì)數(shù)器值等于或大于l,則該計(jì)數(shù)器減1并且執(zhí)行框140的快速循環(huán),否則如果尾部條件為真(即,剩余的字節(jié)數(shù)目小于64但大于0),則在框135執(zhí)行尾部,否則,如果沒(méi)有要拷貝的額外數(shù)據(jù),則方法100結(jié)束。因此,零開(kāi)銷(xiāo)計(jì)數(shù)器值被用于確定是否需要調(diào)用"快速循環(huán)"。計(jì)數(shù)器被加載有迭代數(shù)+1,如果計(jì)數(shù)器> l,則其被減小,并且跳轉(zhuǎn)至"快速循環(huán)"的頭部。如果確定計(jì)數(shù)器為等于1或更小,則不需調(diào)用該循環(huán)。
仍參見(jiàn)圖l,如果剩余計(jì)數(shù)值大于63字節(jié),則控制轉(zhuǎn)至框140,其中可以執(zhí)行快速的固定大小的迭代,每次迭代時(shí)傳送例如64字節(jié)和/或高速緩存行大小的數(shù)據(jù)。這是一個(gè)以預(yù)先載入的零開(kāi)銷(xiāo)循環(huán)計(jì)數(shù)器來(lái)處理預(yù)定義長(zhǎng)度的拷貝操作的快速循環(huán)。在一些實(shí)施例中,在執(zhí)行框140的拷貝操作之前,進(jìn)行數(shù)個(gè)檢查,當(dāng)命中時(shí)所述數(shù)個(gè)檢查采取誤預(yù)測(cè)懲罰(但是將允許在其發(fā)生的情況中進(jìn)行"更快速執(zhí)行")。首先,可以執(zhí)行附加的指針距離檢查,如果快速循環(huán)的限制比在頭部中的條件拷貝內(nèi)的限制更嚴(yán)格,則可能需要該檢查。例如,不跟蹤其進(jìn)度的快速循環(huán)可能需要從頭重新執(zhí)行,除了之前進(jìn)行的所有檢查之外,這還調(diào)用檢查((src mod 4K)-(dst mod4K)) > 63B。如果該檢查失敗,則控制轉(zhuǎn)至框160,其中執(zhí)行第二快速循環(huán)(其在下面被更完整討論,并且其可以對(duì)應(yīng)于沒(méi)有這些限制但是可能更慢執(zhí)行的拷貝);(2)檢查數(shù)據(jù)串的剩余長(zhǎng)度,并且如果該長(zhǎng)度大于定義的閾值(NT_threshold),則控制轉(zhuǎn)至框150,框150是一個(gè)循環(huán),其使用諸如針對(duì)載入和存儲(chǔ)操作(例如,Intel的M0VNTDQA或M0VNTSQ指令)的非臨時(shí)提示這樣的緩存提示,用于避免高速緩存污染。在一個(gè)實(shí)施例中,N乙threshold參數(shù)可以針對(duì)高速緩存大小而被調(diào)整,以獲得最好的性能影響??商娲膶?shí)現(xiàn)可以使用多個(gè)閾值級(jí)別來(lái)確定不同的緩存提示的最好應(yīng)用。
在框140的循環(huán)的每次迭代期間,64B的數(shù)據(jù)以最快的可能方式被拷貝(S卩,使用針對(duì)該拷貝長(zhǎng)度的優(yōu)化的代碼序列)。迭代的數(shù)量使用零開(kāi)銷(xiāo)循環(huán)計(jì)數(shù)器來(lái)確定。在框140的快速循環(huán)結(jié)束時(shí),檢查針對(duì)處理尾部的條件,并且可以采取以下決定(因?yàn)閷?duì)條件進(jìn)行了預(yù)先設(shè)置,所以再次具有零開(kāi)銷(xiāo))如果tail—condition =真,則控制轉(zhuǎn)至框135處的尾部,否則,如果沒(méi)有要拷貝的額外數(shù)據(jù),則方法100結(jié)束。 應(yīng)該注意的是,在框160,fastj6循環(huán)類(lèi)似于快速循環(huán),但是(根據(jù)針對(duì)該拷貝長(zhǎng)度的優(yōu)化的序列)每次迭代拷貝16B的數(shù)據(jù)。零開(kāi)銷(xiāo)計(jì)數(shù)器在執(zhí)行該循環(huán)之前被調(diào)整,以
7允許16B的迭代。 在進(jìn)行了盡可能多的64B數(shù)據(jù)塊的拷貝(或框140、 150、 160的其他大小的拷貝操 作)之后,可能留下多達(dá)63B的拷貝操作的剩余部分(應(yīng)該注意的是,只有存在這樣的尾 部,處理器才會(huì)到達(dá)此位置)。在框135使用條件拷貝操作的序列來(lái)處理尾部,所述序列類(lèi) 似于頭部所使用的序列,不同的是所述序列從單個(gè)l字節(jié)(1,2…)而不是兩個(gè)l字節(jié)開(kāi)始。 此外,尾部長(zhǎng)度被設(shè)置成一個(gè)快速循環(huán)迭代中的數(shù)據(jù)量的大小減1 (例如,63B = 64B-1),并 且與流水線(xiàn)深度無(wú)關(guān)。因此,對(duì)于上面的N二 16并且快速循環(huán)為64B的示例,將以以下數(shù) 據(jù)塊來(lái)拷貝尾部16,16,16,8,4,2,1字節(jié)(7個(gè)操作),如上面針對(duì)頭部所討論的,相反的順 序被用來(lái)優(yōu)化定義要被移動(dòng)的操作子集的處理。對(duì)于N二 32,尾部序列將是32,16,8,4,2, 1 (6個(gè)操作)。 應(yīng)該注意的是,當(dāng)框110中所檢查的DF標(biāo)志為"1"時(shí),數(shù)據(jù)串將為"相反"的順序, 并且源和目的地指針被減小。上述算法使用固有循環(huán)(通過(guò)將控制轉(zhuǎn)至框120)來(lái)應(yīng)對(duì)這 種情況??商娲膶?shí)現(xiàn)可以通過(guò)使用對(duì)稱(chēng)方案將針對(duì)指針調(diào)節(jié)操作的操作進(jìn)行反向,來(lái)使 用類(lèi)似的"快速拷貝"實(shí)現(xiàn)此類(lèi)拷貝操作。 盡管上述方法100的實(shí)現(xiàn)可以是針對(duì)使用REP M0VSB指令的迭代拷貝操作,但是 其它實(shí)現(xiàn)可以與其它拷貝指令一起使用。例如,與存儲(chǔ)指令(例如,REP STOSB)—起使用 的算法可以使用與REPMOVSB相同的方案,使用上述大部分步驟,發(fā)生變化的是,不執(zhí)行用 于拷貝操作的載入+存儲(chǔ),而僅執(zhí)行存儲(chǔ)。另外,還有一些針對(duì)REP STOSB情況所采用的簡(jiǎn) 化(1)不需要檢查src和dst之間的距離;(2)不需要檢查關(guān)于src指針的條件。還需要 額外步驟來(lái)為存儲(chǔ)數(shù)據(jù)寄存器預(yù)備最長(zhǎng)存儲(chǔ)操作的長(zhǎng)度(在上述實(shí)例中為N二 16或N二 32),所述存儲(chǔ)數(shù)據(jù)寄存器保存數(shù)據(jù)的復(fù)制版本以用于存儲(chǔ)操作(ST0SB包括需要在目的地 存儲(chǔ)數(shù)據(jù)寄存器的每個(gè)字節(jié)中復(fù)制的一字節(jié)數(shù)據(jù))。 盡管圖1中所示的實(shí)現(xiàn)是針對(duì)REP M0VSB并且針對(duì)每次迭代64字節(jié)而進(jìn)行調(diào)節(jié), 但是其它實(shí)現(xiàn)可以用于處理不同長(zhǎng)度的快速拷貝操作。此外,這些操作還可以用來(lái)執(zhí)行使 用諸如移動(dòng)雙字長(zhǎng)度的其他指令(例如,REP M0VSD)或其它此類(lèi)指令的快速拷貝操作???替代的實(shí)施例可以采用與"無(wú)別名"的頁(yè)面有關(guān)的"假設(shè)"(并因此移除對(duì)4K取模的支持)。
如上所述,一些代碼序列被優(yōu)化以針對(duì)它們包括的特定類(lèi)型的指令以最高效的方 式執(zhí)行期望的操作,而在其它的序列中,相同的指令可能不是以其最優(yōu)方式執(zhí)行。因此,在 各種實(shí)施例中,序列檢測(cè)技術(shù)可以被實(shí)現(xiàn)來(lái)分析輸入指令序列并向執(zhí)行單元提供代碼,以 使得能夠以?xún)?yōu)化方式執(zhí)行給定代碼序列的一個(gè)或多個(gè)指令。 作為一個(gè)示例,在未預(yù)知長(zhǎng)度的情況下,IA32REP M0VS和REP ST0S操作被調(diào)整來(lái) 處理拷貝操作。當(dāng)前優(yōu)化是基于將REP MOVSD用于移動(dòng)數(shù)據(jù)的大部分而將REP M0VSB用于 處理剩余部分,在使用中已知所述剩余部分的長(zhǎng)度為0-3 (用于優(yōu)化REP M0VSB執(zhí)行時(shí)間的 信息)。實(shí)現(xiàn)這些拷貝操作的代碼的示例在表l中示出(類(lèi)似結(jié)構(gòu)適用于REP ST0S):
movl 0x0c(%esp), % edi 〃載入目的地地址
movl % edi, % eax movl 0xl0(%esp), % esi 〃載入源地址
movl 0xl4(%esp), % edx 〃將長(zhǎng)度載入edx
cld movl %edX,%eCx 〃通過(guò)針對(duì)"雙字"計(jì)數(shù)而設(shè)置ecx來(lái)開(kāi)始移動(dòng)序列 shrl $0x02, % ecx r印/movsl(% esi) , (% edi) movl%edx, % ecx 〃開(kāi)始針對(duì)"剩余字節(jié)"計(jì)數(shù)而設(shè)置ecx andl $0x03, % ecx r印/movsb(% esi) , (% edi) 對(duì)此,通過(guò)快速處理長(zhǎng)度為0-3的情況而對(duì)其它長(zhǎng)度進(jìn)行懲罰來(lái)優(yōu)化REP MOVSB。 由于它之前的操作,上述方案確保計(jì)數(shù)絕不超出0-3。但是,也存在其它各種序列可以用于 執(zhí)行該優(yōu)化,尤其是用于針對(duì)REP MOVSB指令而設(shè)置計(jì)數(shù)。因此,將REP MOVSB的行為改變 為針對(duì)不同于0-3的其他長(zhǎng)度進(jìn)行優(yōu)化(例如,將其與REP MOVSQ指令結(jié)合來(lái)使用將具有 0-7的剩余長(zhǎng)度)將導(dǎo)致該代碼在許多情況下(在該示例中,當(dāng)長(zhǎng)度為4-7時(shí))發(fā)生錯(cuò)誤 行為并且損失性能。類(lèi)似地,針對(duì)REP MOVSB的其他優(yōu)化(例如,使其對(duì)于處理任何長(zhǎng)度都 很高效的優(yōu)化,和作為導(dǎo)致長(zhǎng)度0-3的情況下性能降低的優(yōu)化的一部分)將使上述表1中 描述的代碼發(fā)生錯(cuò)誤行為并損失性能。關(guān)于REP MOVSB應(yīng)該處理的長(zhǎng)度的決定需要在指令 譯碼時(shí)作出,以防止流水線(xiàn)延遲上的時(shí)間損失而產(chǎn)生可能導(dǎo)致性能損失的"氣泡",即使ecx 的值將僅在指令執(zhí)行時(shí)才已知也是如此。 在所描述的優(yōu)化(表1)中,MOVSB緊跟在REP MOVSD指令后(被稱(chēng)為D+B序列), 這用作程序員將REP MOVSB指令用于有限數(shù)目的字節(jié)(例如,0-3字節(jié))的意圖的提示。這 樣,實(shí)施例可以借助該序列提示來(lái)向執(zhí)行單元提供不同的指令代碼,以使得能夠優(yōu)化(至 少)該第二拷貝指令。因?yàn)榫_的指令序列可以改變,并且其它代碼可以用來(lái)獲得相同的 結(jié)果,因此取代搜索特定序列的是,硬件搜索跟在REP MOVSD指令之后并與之相隔少量指令 (例如,l-9)的REP M0VSB。因?yàn)椴槐WC檢測(cè)到D+B序列,并且也不保證D+B序列不被錯(cuò)誤 地檢測(cè),所以無(wú)論對(duì)哪個(gè)流進(jìn)行譯碼和選擇哪種優(yōu)化,對(duì)于任何給定的數(shù)據(jù)長(zhǎng)度,譯碼都提 供正確的執(zhí)行。 現(xiàn)在參見(jiàn)圖2,示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的序列檢測(cè)器的框圖。如圖2所 示,處理器200可以包括指令譯碼器210,其接收要被執(zhí)行的指令。當(dāng)在該譯碼器中被接收 時(shí),這些指令可以存儲(chǔ)在緩沖器215內(nèi)。緩沖器215可以用來(lái)向譯碼邏輯220提供下一個(gè)執(zhí) 行的指令,譯碼邏輯220還從包括序列檢測(cè)器狀態(tài)機(jī)240的反饋路徑接收譯碼路徑選擇信 號(hào)。基于該選擇信號(hào)和譯碼邏輯220的各種規(guī)則,指令可以被譯碼并被提供給執(zhí)行單元230 以供執(zhí)行。通常,譯碼邏輯220進(jìn)行操作來(lái)接收輸入指令,并從中生成譯碼指令。在一個(gè)實(shí) 施例中,這些譯碼指令可以是與指令相對(duì)應(yīng)的機(jī)器代碼形式,其隨后被提供給執(zhí)行單元230 以使得能夠執(zhí)行指令。例如,這些指令代碼可以使執(zhí)行單元執(zhí)行微代碼序列,或者選擇給定 的功能單元來(lái)執(zhí)行期望的操作。應(yīng)該注意的是, 一些譯碼邏輯電路可以并行地執(zhí)行數(shù)個(gè)指 令的譯碼。其它譯碼邏輯電路可以將單個(gè)指令轉(zhuǎn)換成多個(gè)命令來(lái)執(zhí)行。
如在圖2中進(jìn)一步示出的,譯碼指令可以被提供給反饋路徑的譯碼指令比較器 225,其中,譯碼指令可以與從狀態(tài)機(jī)240接收到的預(yù)期指令代碼進(jìn)行比較。該預(yù)期指令代 碼可以對(duì)應(yīng)于處于代碼序列的開(kāi)始處、希望使用狀態(tài)機(jī)240和譯碼邏輯220來(lái)優(yōu)化的給定 指令代碼。在一些實(shí)現(xiàn)中,這可以通過(guò)內(nèi)部微操作陣列的索引來(lái)實(shí)現(xiàn)。在一些實(shí)現(xiàn)中,可以提供多個(gè)這種狀態(tài)機(jī)和比較器,其中每一個(gè)都與代碼序列中要被搜索的給定指令相關(guān)聯(lián)。在其它實(shí)現(xiàn)中,狀態(tài)機(jī)240和比較器225可以被擴(kuò)展來(lái)為比較和分析這多個(gè)指令提供支持。
如在圖2的實(shí)施例中所示,對(duì)于單個(gè)指令的實(shí)現(xiàn),如果比較器225的兩個(gè)進(jìn)入的代碼之間發(fā)生了匹配,則將匹配信號(hào)從比較器225報(bào)告回狀態(tài)機(jī)240。如在圖2中進(jìn)一步所示,狀態(tài)機(jī)240還在每個(gè)周期中從指令譯碼器210接收停頓信號(hào)(或指令譯碼指示)。因此,盡管圖2說(shuō)明指令的譯碼一次進(jìn)行一個(gè)的情況,但是其可以被擴(kuò)展到對(duì)多個(gè)指令進(jìn)行并行譯碼的情況。指令譯碼器210保存饋送到譯碼邏輯220中的指令。在一個(gè)實(shí)施例中,譯碼邏輯220可以包括使用特定狀態(tài)信息(例如,可以將一些指令定義為非法的機(jī)器模式)來(lái)對(duì)指令進(jìn)行解析的邏輯功能。譯碼器的輸出是被稱(chēng)為"譯碼指令"的代碼,其標(biāo)識(shí)將針對(duì)該指令而被執(zhí)行的微操作。這些操作的性質(zhì)取決于機(jī)器的微架構(gòu)的實(shí)現(xiàn),但是也可以被看作是獨(dú)特地描述指令的二進(jìn)制值(或一系列值)。該代碼被傳送至執(zhí)行單元230以在一個(gè)或多個(gè)周期中執(zhí)行與譯碼指令相對(duì)應(yīng)的操作。 在一個(gè)實(shí)現(xiàn)中,優(yōu)化是基于松散方式的指令序列。它假設(shè)保證指令的正確操作而無(wú)論是何判決,這避免了需要保證序列的檢測(cè)在所有情況下都是準(zhǔn)確的,并且可以?xún)?yōu)化來(lái)檢測(cè)大部分序列的發(fā)生。指令比較器225將來(lái)自狀態(tài)機(jī)240的當(dāng)前指令代碼與從指令譯碼器220接收到的"下一指令代碼"進(jìn)行比較。該代碼可以涵蓋一系列代碼或者多于一個(gè)的代碼,這取決于下面將要討論的狀態(tài)機(jī)流程。 一旦檢測(cè)到匹配,狀態(tài)機(jī)240移動(dòng)至下一步驟。該狀態(tài)機(jī)基于檢測(cè)到匹配而從一個(gè)步驟移動(dòng)至另一個(gè)步驟(其可以從一個(gè)狀態(tài)改變到另一個(gè)狀態(tài)),或者基于時(shí)間或譯碼指令計(jì)數(shù)而從一個(gè)步驟移動(dòng)至另一個(gè)步驟。當(dāng)使用時(shí)間時(shí),可以從指令譯碼器210提供停頓指示,以防止?fàn)顟B(tài)機(jī)在指令譯碼器210停頓時(shí)(例如,由于等待從更低級(jí)別的緩存或存儲(chǔ)器中完成取指,或者在執(zhí)行單元忙并且不能處理新指令的情況下)進(jìn)行"計(jì)數(shù)"。通過(guò)這些停頓,執(zhí)行周期計(jì)數(shù)變得與譯碼指令計(jì)數(shù)緊密接近,并且在一些情況下可能更易于實(shí)現(xiàn)。序列檢測(cè)器狀態(tài)機(jī)240向譯碼邏輯220反饋狀態(tài)信息信號(hào),其在圖2中示出為"譯碼路徑選擇"信號(hào)。該狀態(tài)信息改變譯碼邏輯220,使得對(duì)于指令緩沖器215內(nèi)的相同指令,譯碼器規(guī)則將用信號(hào)向執(zhí)行單元230發(fā)送不同的譯碼指令。
為了闡明操作,提供了針對(duì)兩種情況來(lái)檢測(cè)并優(yōu)化REP MOVSB (和REP STOSB)的執(zhí)行的示例(1)REP M0VSB本身用來(lái)拷貝可能大于3字節(jié)的未知數(shù)據(jù)長(zhǎng)度(即,"長(zhǎng)REPMOVSB"指令);以及REP MOVSB與REP MOVSD在代碼序列中相結(jié)合來(lái)使用,在這種情況下,針對(duì)REPMOVSB指令的長(zhǎng)度被期望在0-3字節(jié)的范圍內(nèi),并且在此被稱(chēng)為"短REPMOVSB"。因此,可以從指令譯碼器210輸出兩個(gè)不同的代碼,以使得執(zhí)行單元230運(yùn)行兩種不同的優(yōu)化拷貝操作中所選的一個(gè)。 圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的序列譯碼器狀態(tài)機(jī)的示例的狀態(tài)圖,并且說(shuō)明了該狀態(tài)機(jī)的實(shí)現(xiàn)。如圖3所示,在操作310,狀態(tài)機(jī)被重置為正在尋找REP MOVSD或REPSTOSD指令的情況。在這種情況下,如果在代碼序列中遇到REP MOVSB,則來(lái)自狀態(tài)機(jī)的譯碼路徑選擇信號(hào)被設(shè)置為生成"長(zhǎng)REP MOVSB"代碼。同時(shí),指令檢測(cè)器被提供了REPMOVSD和REP STOSD代碼,如果兩者中的一個(gè)被遇到,則該指示被提供至序列檢測(cè)器狀態(tài)機(jī),所述序列檢測(cè)器狀態(tài)機(jī)現(xiàn)在通過(guò)提供譯碼路徑選擇信號(hào)而切換到它正在尋找"緊跟的"REP MOVSB或REP MOVSB的模式,以編碼用于"短REP MOVSB"操作的代碼。針對(duì)所識(shí)別的REP MOVSB或REP STOSD閾值距離,狀態(tài)機(jī)將保持此狀態(tài)(在操作320-340)并持續(xù)較小數(shù)目的"n個(gè)非停頓周期"或相等的"nl個(gè)指令"。如果此時(shí)對(duì)一個(gè)指令進(jìn)行譯碼,則nl可以等于n,而如果在同一時(shí)間對(duì)多個(gè)指令進(jìn)行譯碼,則nl大于n (例如,為4n)。在取指-停頓或防止譯碼器發(fā)出用于該流程的新指令的任何其他停頓的情況中,計(jì)數(shù)被停頓以保證序列檢測(cè)。在該示例中,數(shù)"n"較小,例如為4。在該延遲之后,不管REPMOVSB是否到達(dá),序列返回到尋找REP MOVSD或REP STOSD的初始狀態(tài)310,以作為新REP MOVSD+B序列的開(kāi)始指示。未檢測(cè)到REP MOVSB或者REP STOSB的情況覆蓋了這樣的場(chǎng)景,即,該代碼僅包括REP MOVSD并且在其它地方可以"僅"包括一個(gè)REP MOVSB。在一些實(shí)施例中,狀態(tài)機(jī)操作中間的諸如中斷這樣的事件可以被忽略,這是因?yàn)檎`預(yù)測(cè)的懲罰乘以它們發(fā)生的比率要比該事件的代價(jià)小。 可選地,以下是可以實(shí)現(xiàn)的,即狀態(tài)機(jī)將尋找REP MOVSB或REPSTOSB作為從狀態(tài)320和330提早離開(kāi)并返回至狀態(tài)310的出口 ,然而當(dāng)該代碼序列短時(shí)則這是不必要的(假設(shè)沒(méi)有REP MOVSD緊隨在REPMOVSB后并且在固定延遲內(nèi)缺失)。因此,在其它實(shí)施例中,特別是在所識(shí)別的指令之間的序列空間可能更長(zhǎng)的實(shí)施例中,在檢測(cè)到第二指令(或其它附加指令)時(shí),該狀態(tài)機(jī)可以被重置為初始搜索狀態(tài)(狀態(tài)310)。 保證精確執(zhí)行而不管所采用的優(yōu)化,這一事實(shí)涵蓋了諸如REPMOVSD和REP MOVSB指令之間發(fā)生異常的情況。如果發(fā)生這種少見(jiàn)的狀況,則REP MOVSB的執(zhí)行可以選擇非優(yōu)化路徑,這可能會(huì)耗費(fèi)一些性能,但是將不會(huì)破壞代碼的正確執(zhí)行。還存在其它情況可能導(dǎo)致誤預(yù)測(cè),例如流水線(xiàn)的轉(zhuǎn)儲(chǔ)清除(flushing)(例如,REP MOVSB在REP MOVSD之后被譯碼,并且然后被轉(zhuǎn)儲(chǔ)清除)。在這種情況下,通常希望狀態(tài)機(jī)將不被重置,在該情況下,很可能將在允許的延遲窗口內(nèi)對(duì)REP MOVSB進(jìn)行重新譯碼。 在一個(gè)實(shí)施例中,序列檢測(cè)器狀態(tài)機(jī)的實(shí)現(xiàn)可以被放寬,以允許正確處理其中流程不準(zhǔn)確和發(fā)生波動(dòng)的情況。例如,使用計(jì)時(shí)器(對(duì)非停頓時(shí)鐘或指令進(jìn)行計(jì)數(shù))而不搜索精確的序列也可以解決該問(wèn)題。 現(xiàn)代譯碼器可以允許同時(shí)對(duì)多個(gè)指令進(jìn)行譯碼??梢砸远喾N方式來(lái)擴(kuò)展上述實(shí)現(xiàn)以涵蓋該情況。首先,對(duì)"被搜索"的指令的譯碼可以被限制為每次一個(gè)。在REP MOVSB的示例中,REP MOVSD和REP STOSD指令將由它們自身進(jìn)行譯碼。第二,多個(gè)比較操作可以被放置在每個(gè)譯碼器的輸出上并且被串行化(對(duì)后續(xù)操作進(jìn)行轉(zhuǎn)儲(chǔ)清除),或者多個(gè)比較器被用于所有預(yù)期代碼,以允許該狀態(tài)機(jī)從任何操作緊隨該代碼序列。如果使用非串行化譯碼,則狀態(tài)機(jī)可以被擴(kuò)展為支持同時(shí)進(jìn)行多個(gè)步驟分支(第二匹配譯碼并行于第一匹配譯碼,等等)。 因此,實(shí)施例允許對(duì)REP MOVSB指令的優(yōu)化,其對(duì)于新代碼提供了顯著益處,而不會(huì)導(dǎo)致在被優(yōu)化來(lái)使用REP MOVSD+B序列的已有代碼上的性能損失。 現(xiàn)在參見(jiàn)圖4,示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的處理器的框圖。如圖4所示,處理器400可以是多級(jí)流水線(xiàn)亂序處理器。在圖4中用相對(duì)簡(jiǎn)化的視圖示出了處理器400,以說(shuō)明所使用的與上述指令調(diào)整有關(guān)的各種特征。 如圖4所示,處理器400包括前端單元410,其可以用于獲取要執(zhí)行的宏指令,并且對(duì)它們進(jìn)行預(yù)備以供之后在處理器中使用。例如,前端單元410可以包括取指單元404、指令高速緩存406、和指令譯碼器408。在一些實(shí)現(xiàn)中,前端單元410還可以包括追蹤高速緩存、微代碼存儲(chǔ)設(shè)備以及Pop存儲(chǔ)設(shè)備。取指單元404可以例如從存儲(chǔ)器或指令高速緩
11存406獲取宏指令,并將它們饋送至指令譯碼器408以將它們譯碼成原語(yǔ),S卩,由處理器執(zhí)行的P op。指令譯碼器408可以根據(jù)本發(fā)明的實(shí)施例被配置為包括用于執(zhí)行序列檢測(cè)的邏輯,從而當(dāng)一組輸入指令包括預(yù)先確定的由兩個(gè)或多個(gè)指令構(gòu)成的序列(或諸如上述那樣選擇的彼此緊密接近的指令的序列)時(shí),該邏輯可以使得指令譯碼器408提供不同的譯碼指令(例如,供之后在處理器流水線(xiàn)中執(zhí)行的Pop)以?xún)?yōu)化性能。此外,在一些實(shí)現(xiàn)中,當(dāng)接收到給定的宏指令時(shí),指令譯碼器408可以使得發(fā)送給定的微代碼序列以供執(zhí)行,其中,該序列可以根據(jù)本發(fā)明的實(shí)施例來(lái)處理快速模式拷貝操作。在其它實(shí)現(xiàn)中,可以用特定硬件來(lái)擴(kuò)展執(zhí)行單元,以響應(yīng)于譯碼指令而高效地執(zhí)行這種快速拷貝操作。
耦合在前端單元410和執(zhí)行單元420之間的是亂序(000)引擎415,其可以被用于接收宏指令并對(duì)它們進(jìn)行預(yù)備以供執(zhí)行。更具體地,OOO引擎415可以包括各種緩沖器,用于對(duì)宏指令流進(jìn)行重排序和分配執(zhí)行所需的各種資源,以及提供諸如寄存器文件430和擴(kuò)展寄存器文件435這樣的各種寄存器文件中的存儲(chǔ)位置上的邏輯寄存器的重命名。寄存器文件430可以包括用于整型和浮點(diǎn)型操作的分別的寄存器文件。擴(kuò)展寄存器文件435可以為矢量大小的單元提供存儲(chǔ),例如,每寄存器256或512比特。 在執(zhí)行單元420內(nèi)可以存在各種資源,例如包括各種整型、浮點(diǎn)型和單指令多數(shù)據(jù)(SIMD)邏輯單元,和其它專(zhuān)用硬件。結(jié)果可以被提供給引退邏輯,即重排序緩沖器(R0B)440。更具體地,ROB 440可以包括各種陣列和邏輯,用于接收與被執(zhí)行的指令相關(guān)聯(lián)的信息。該信息接著由ROB 440進(jìn)行檢查,來(lái)確定該指令是否可以被有效引退并且結(jié)果數(shù)據(jù)是否被提交給處理器的架構(gòu)狀態(tài),或者是否發(fā)生一個(gè)或多個(gè)阻止所述指令的正確引退的異常。當(dāng)然,ROB 440可以處理與引退相關(guān)聯(lián)的其他操作。 如圖4所示,ROB 440被耦合到高速緩存450,在一個(gè)實(shí)施例中,高速緩存450可以是低級(jí)高速緩存(例如,Ll高速緩存),但是本發(fā)明的范圍不限于此。此外,執(zhí)行單元420可以直接耦合到高速緩存450。可以從高速緩存450與更高級(jí)的高速緩存、系統(tǒng)存儲(chǔ)器等進(jìn)行數(shù)據(jù)通信。盡管在圖4的實(shí)施例中用該高級(jí)別示出,但是應(yīng)該理解,本發(fā)明的范圍并不限于此。 實(shí)施例可以以許多不同的系統(tǒng)類(lèi)型來(lái)實(shí)現(xiàn)。現(xiàn)在參見(jiàn)圖5,示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)的框圖。如圖5所示,多處理器系統(tǒng)500是點(diǎn)對(duì)點(diǎn)互連系統(tǒng),并且包括經(jīng)由點(diǎn)對(duì)點(diǎn)互連550耦合的第一處理器570和第二處理器580。如圖5所示,處理器570和580的每一個(gè)都可以是多核處理器,其包括第一和第二處理器核心(S卩,處理器核心574a和574b以及處理器核心584a和584b)。每個(gè)處理器核心可以包括諸如圖1_4中所示的用于執(zhí)行指令調(diào)整的硬件、軟件和固件。 仍然參見(jiàn)圖5,第一處理器570還包括存儲(chǔ)器控制器中心(MCH)572和點(diǎn)對(duì)點(diǎn)(P-P)接口 576與578。類(lèi)似地,第二處理器580包括MCH 582和P-P接口 586與588。如圖5所示,MCH 572和582將處理器耦合到相應(yīng)的存儲(chǔ)器,即存儲(chǔ)器532和存儲(chǔ)器534,它們可以是在本地附接到相應(yīng)處理器的主存儲(chǔ)器(例如,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM))的部分。第一處理器570和第二處理器580可以通過(guò)P-P互連552和554分別耦合到芯片組590。如圖5所示,芯片組590包括P-P接口 594和598。 此外,芯片組590包括接口 592,以將芯片組590與高性能圖形引擎538進(jìn)行耦合。芯片組590又可以通過(guò)接口 596耦合到第一總線(xiàn)516。如圖5所示,各種I/O設(shè)備514可以與總線(xiàn)橋518 —起耦合到第一總線(xiàn)516,所述總線(xiàn)橋518將第一總線(xiàn)516耦合到第二總線(xiàn)520。各種設(shè)備可以耦合到第二總線(xiàn)520,在一個(gè)實(shí)施例中,例如包括鍵盤(pán)/鼠標(biāo)522、通信設(shè)備526和諸如盤(pán)驅(qū)動(dòng)器或其它大容量存儲(chǔ)設(shè)備這樣的數(shù)據(jù)存儲(chǔ)單元528,該數(shù)據(jù)存儲(chǔ)單元528可以包括代碼530。此外,音頻I/0 524可以耦合到第二總線(xiàn)520。
這些實(shí)施例可以用代碼來(lái)實(shí)現(xiàn)并且可以被存儲(chǔ)在其上存儲(chǔ)有指令的存儲(chǔ)介質(zhì)上,所述指令可以用來(lái)對(duì)系統(tǒng)進(jìn)行編程以執(zhí)行這些指令。所述存儲(chǔ)介質(zhì)可以包括但不限于任何類(lèi)型的盤(pán),包括軟盤(pán)、光盤(pán)、光盤(pán)只讀存儲(chǔ)器(CD-ROM)、可重寫(xiě)光盤(pán)(CD-RW)以及磁光盤(pán);半導(dǎo)體器件,例如只讀存儲(chǔ)器(ROM)、諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)與靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)這樣的隨機(jī)存取存儲(chǔ)器(RAM)、可擦可編程只讀存儲(chǔ)器(EPROM)、閃速存儲(chǔ)器、電可擦可編程只讀存儲(chǔ)器(EEPROM)、磁卡或光卡;或者適合于存儲(chǔ)電子指令的任何其他類(lèi)型的介質(zhì)。 盡管已經(jīng)針對(duì)數(shù)量有限的實(shí)施例描述了本發(fā)明,但是本領(lǐng)域技術(shù)人員將從中意識(shí)到許多修改和變型。所附權(quán)利要求意圖涵蓋落入本發(fā)明的實(shí)質(zhì)精神和范圍內(nèi)的所有這種修改和變型。
權(quán)利要求
一種裝置,包括執(zhí)行單元,用于執(zhí)行指令代碼指示的操作;以及指令譯碼器,用于接收輸入指令,其中,所述指令譯碼器包括第一邏輯,用于接收第一輸入指令,并從反饋路徑接收路徑選擇信號(hào),所述反饋路徑耦合到所述指令譯碼器并且包括耦合到所述指令譯碼器的、用于生成所述路徑選擇信號(hào)的序列檢測(cè)器,所述路徑選擇信號(hào)對(duì)應(yīng)于檢測(cè)到所述指令譯碼器在所述第一輸入指令的閾值距離內(nèi)接收到不同的輸入指令,所述第一邏輯響應(yīng)于所述路徑選擇信號(hào)而將所述第一輸入指令譯碼成第一指令代碼或第二指令代碼。
2. 如權(quán)利要求1所述的裝置,還包括比較器,用于接收來(lái)自所述指令譯碼器的指令代 碼和來(lái)自所述序列檢測(cè)器的預(yù)期代碼,并且如果所述指令代碼和所述預(yù)期代碼相匹配,則 生成匹配信號(hào)。
3. 如權(quán)利要求2所述的裝置,其中,如果未生成所述匹配信號(hào),則所述序列檢測(cè)器生成 第一狀態(tài)的路徑選擇信號(hào),以使得所述第一邏輯將所述第一輸入指令譯碼成所述第一指令 代碼,所述第一指令代碼對(duì)應(yīng)于針對(duì)第一數(shù)據(jù)長(zhǎng)度而優(yōu)化的拷貝操作。
4. 如權(quán)利要求3所述的裝置,其中,響應(yīng)于所述匹配信號(hào),所述序列檢測(cè)器生成第二狀 態(tài)的路徑選擇信號(hào),以使得所述第一邏輯將所述第一輸入指令譯碼成所述第二指令代碼, 所述第二指令代碼對(duì)應(yīng)于針對(duì)與所述第一數(shù)據(jù)長(zhǎng)度不同的第二數(shù)據(jù)長(zhǎng)度而優(yōu)化的拷貝操 作。
5. 如權(quán)利要求4所述的裝置,其中,所述第二指令代碼使得所述執(zhí)行單元執(zhí)行長(zhǎng)度受 限的拷貝操作。
6. 如權(quán)利要求4所述的裝置,其中,如果所述指令譯碼器在與所述第一輸入指令的閾 值距離相對(duì)應(yīng)的第一數(shù)量的指令中接收到所述不同的輸入指令,則所述序列檢測(cè)器生成所 述第二狀態(tài)的路徑選擇信號(hào)。
7. 如權(quán)利要求6所述的裝置,其中,所述閾值距離是通過(guò)周期數(shù)目和譯碼停頓信息來(lái) 估計(jì)的。
8. 如權(quán)利要求6所述的裝置,其中,所述序列檢測(cè)器包括狀態(tài)機(jī),如果在所述第一數(shù)目 的指令內(nèi)未接收到所述不同的輸入指令,則所述狀態(tài)機(jī)重置。
9. 一種方法,包括至少部分地基于與迭代拷貝指令相關(guān)聯(lián)的信息來(lái)確定所述迭代拷貝指令是否能夠被 優(yōu)化;如果是,則通過(guò)第一條件拷貝操作序列來(lái)執(zhí)行所述迭代拷貝指令的第一部分,其中使 用2的冪的拷貝的樹(shù)將多達(dá)第一數(shù)目的塊中多達(dá)第一數(shù)量的數(shù)據(jù)從第一源位置拷貝到第 一目的地位置;如果要被拷貝的數(shù)據(jù)的剩余部分大于第一閾值,則通過(guò)拷貝操作的快速循環(huán)將第二數(shù) 量的數(shù)據(jù)從第二源位置拷貝到第二目的地位置,來(lái)執(zhí)行所述迭代拷貝指令的第二部分;之后,如果仍剩余有要拷貝的數(shù)據(jù),則通過(guò)第二條件拷貝操作序列來(lái)執(zhí)行所述迭代拷 貝指令的第三部分,其中將多達(dá)第三數(shù)目的塊中多達(dá)第三數(shù)量的數(shù)據(jù)從第三源位置拷貝到 第三目的地位置。
10. 如權(quán)利要求9所述的方法,還包括在執(zhí)行所述第一條件拷貝操作序列之前,獲得針對(duì)所述快速循環(huán)和所述第二條件拷貝操作序列的建立信息。
11. 如權(quán)利要求9所述的方法,還包括確定數(shù)據(jù)的所述第二數(shù)量是否大于第二閾值, 并且如果是,則使用緩存提示將所述第二數(shù)量的數(shù)據(jù)直接拷貝到存儲(chǔ)器,而不用在高速緩 存中存儲(chǔ)。
12. 如權(quán)利要求9所述的方法,其中,所述第一條件拷貝操作序列的第一操作拷貝N字 節(jié)的數(shù)據(jù)塊,增加與所述第一拷貝操作序列相關(guān)聯(lián)的第一和第二指針,并且更新與要拷貝 的剩余數(shù)據(jù)相關(guān)聯(lián)的計(jì)數(shù)器。
13. 如權(quán)利要求9所述的方法,其中,2的冪的樹(shù)從與處理器的最大載入或存儲(chǔ)長(zhǎng)度相 對(duì)應(yīng)的2的第一個(gè)冪的長(zhǎng)度開(kāi)始,并且以與一個(gè)字節(jié)相對(duì)應(yīng)的2的最后一個(gè)冪結(jié)束。
14. 如權(quán)利要求9所述的方法,還包括確定與所述迭代拷貝指令相關(guān)聯(lián)的第一指針和 第二指針之間的差是否在第三閾值和第四閾值之間,并且如果是,則通過(guò)寬度小于所述快 速循環(huán)的一次迭代的拷貝操作來(lái)拷貝所述第二數(shù)量的數(shù)據(jù)。
15. —種系統(tǒng),包括處理器,其具有前端,所述前端包括具有譯碼邏輯的譯碼器,所述譯碼邏輯用于接收進(jìn) 入拷貝指令和來(lái)自耦合到所述譯碼器的反饋路徑中的第二邏輯的選擇信號(hào),所述選擇信號(hào) 指示在所述譯碼器中接收到包括所述進(jìn)入拷貝指令和至少一個(gè)其他拷貝指令的指令序列, 并且所述譯碼邏輯用于響應(yīng)于所述選擇信號(hào)而將所述進(jìn)入拷貝指令譯碼成第一指令代碼 或第二指令代碼,所述處理器還具有執(zhí)行單元,用于接收所述第一或第二指令代碼,并且響 應(yīng)于此而相應(yīng)地執(zhí)行第一拷貝操作或第二拷貝操作;以及動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM),其耦合到所述處理器。
16. 如權(quán)利要求15所述的系統(tǒng),其中,所述第二邏輯包括序列檢測(cè)器,用于如果所述進(jìn) 入拷貝指令是在與所述至少一個(gè)其它拷貝指令相對(duì)應(yīng)的第二進(jìn)入拷貝指令之后的第一數(shù) 目的指令內(nèi)接收到的,則生成所述選擇信號(hào)以使得所述譯碼邏輯生成所述第二指令代碼, 否則使得所述譯碼邏輯生成所述第一指令代碼。
17. 如權(quán)利要求16所述的系統(tǒng),其中,如果所述進(jìn)入拷貝指令不是在所述第一數(shù)目的指令內(nèi)接收到的,則所述序列檢測(cè)器重置為第一狀態(tài)來(lái)搜索所述第二進(jìn)入拷貝指令。
18. 如權(quán)利要求17所述的系統(tǒng),其中,在檢測(cè)到所述第二進(jìn)入拷貝指令之后,所述序列檢測(cè)器從所述第一狀態(tài)前進(jìn)到第二狀態(tài)來(lái)搜索所述進(jìn)入拷貝指令。
19. 如權(quán)利要求16所述的系統(tǒng),還包括比較器,用于接收來(lái)自所述譯碼器的指令代碼 和來(lái)自所述序列檢測(cè)器的預(yù)期代碼,并且用于如果所述指令代碼和所述預(yù)期代碼相匹配, 則生成匹配信號(hào)。
20. 如權(quán)利要求15所述的系統(tǒng),其中,所述第一拷貝操作針對(duì)第一數(shù)據(jù)長(zhǎng)度而被優(yōu)化, 而所述第二拷貝操作針對(duì)與所述第一數(shù)據(jù)長(zhǎng)度不同的第二數(shù)據(jù)長(zhǎng)度而被優(yōu)化。
全文摘要
在一個(gè)實(shí)施例中,本發(fā)明包括指令譯碼器,其能夠接收輸入指令和路徑選擇信號(hào),并且響應(yīng)于該路徑選擇信號(hào)而將該輸入指令譯碼成第一指令代碼或第二指令代碼。表示同一輸入指令的這兩個(gè)不同的指令代碼可以被執(zhí)行單元用于執(zhí)行針對(duì)不同數(shù)據(jù)長(zhǎng)度而優(yōu)化的操作。還描述了其它實(shí)施例,并且要求保護(hù)這些實(shí)施例。
文檔編號(hào)G06F9/38GK101788903SQ20091100015
公開(kāi)日2010年7月28日 申請(qǐng)日期2009年11月5日 優(yōu)先權(quán)日2008年11月5日
發(fā)明者L·拉波波特, M·米沙利, O·法利克, R·加博爾, Y·庫(kù)羅萊普 申請(qǐng)人:英特爾公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1