執行重複串操作的製作方法
2023-05-18 21:00:01
專利名稱:執行重複串操作的製作方法
背景技術:
下面論述的實施方式一般地涉及計算環境中的處理操作,某些實施方式更具體地涉及處理重複串操作。
可以向處理器分配連續多次地執行操作(也稱為指令)的任務。對於串操作來說可能是如此,其中串操作例如是將數據從一個存儲器位置移動到另一個存儲器位置的移動(move)操作,或者是將數據從寄存器移動到存儲器位置的存儲操作。移動操作可以重複多次,以移動一整塊的數據而不僅僅是單個數據元素。可以重複進行存儲以初始化一塊數據。可以將REP前綴與指令一起使用,以表明所述指令將重複執行指定數量的迭代(iteration)。一直需要新穎且有用的方式來有效地執行被重複的指令,所述有效是按照時間、處理器資源利用狀況或任何多種其他度量來說的。
圖1的方框圖示出了用於執行所公開的重複串操作的系統。
圖2是用於執行短重複串操作的過程的流程圖。
圖3是用於執行中長度重複串操作的過程的流程圖。
圖4是用於執行圖3的過程時執行迭代的過程的流程圖。
圖5是用於執行長重複串操作的過程的流程圖。
圖6、7、8A、8B和9是用於執行圖5的過程時執行快速重複串操作的過程的流程圖。
圖10是用於與執行重複串操作並行地執行額外開銷(overhead)的過程的流程圖。
具體實施例方式
在各種指令集和體系結構中,可以將具有符號REP的重複前綴來與特定指令一起使用,以使得處理器將該指令重複給定的次數(迭代)。例子可包括REP MOVSB(移動/拷貝一字節數據項的串)、REP MOVSW(移動/拷貝兩字節數據項的串)、REP MOVSD(移動/拷貝4位元組數據項的串)、REP STOSW(存儲兩字節數據項的串)和REP CMPSD(比較4位元組數據項的串)。每次迭代一般地涉及進行存儲器轉移,然後更新保存用於該數據的存儲器地址的寄存器。REP前綴還可與其他指令例如LODS(加載串)一起使用。可以使用稱為ECX寄存器的寄存器來指定對於特定重複串操作需要執行的迭代數量。雖然所描述的實施方式採用了REP前綴,但是也可使用其他機制來重複指令,並且所描述的特徵同樣適用於這樣的其他機制。在處理器上下文中,通常使用微操作來執行串操作。
微操作在處理器內的生命包括不同的階段。一個階段稱為發射(issuance),而後一個階段稱為執行(execution)。發射與執行之間的延遲以及可能的空閒時間可能會導致處理器的性能度量降低。然而,可以在發射微操作之後並且在執行微操作之前使處理器取消微操作。因此,一些處理器預測重複串操作將會請求的迭代數量,並基於該預測來發射迭代。這些處理器然後可以在以後的時間處取消不需要的迭代,但這發生在執行所述不需要的迭代之前。然而,對於誤預測,由於需要取消已發射的操作,因此會導致額外的延遲。
為了提高性能,下面論述的各種實施方式或者試圖對將要請求的迭代數量作出精確的預測,或者集中於恰好發射所請求數量的迭代。各種實施方式還與數據轉移並行地執行額外開銷計算以減少用於執行重複串操作的總時間,或者試圖通過以比指令所請求的更大的塊來轉移數據,從而更快地執行所請求的重複串操作。
參考圖1,用於執行重複串操作的系統100包括計算機110,計算機110包括處理器120、存儲器130以及連接處理器120和存儲器130的總線135。處理器120包括可通過總線或其他連接(未示出)而連接的電子電路140和處理器存儲器150。系統100還包括外部存儲器160。處理器120可使用電子電路140和/或處理器存儲器150來執行下面論述的過程中的任一個。而且,存儲器160可存儲用於使得計算機執行下面論述的過程中的任一個的指令。計算機110可選地通過網絡連接180耦合到聯網計算機170。
短重複串操作圖2示出了過程200,用於執行短重複串操作(即執行少於8次的串操作)。然而,過程200也可執行非短重複串操作。最初,所述過程包括進行檢查以發現指令中的REP前綴(210)。如果沒有REP前綴,則沒有重複串操作要執行。
如果存在REP前綴,則檢查重複串操作以獲得操作數的大小(220)。過程200隻有在操作數大小是一個字節(a byte)例如REP MOVSB(與MOVSW或MOVSD形成對比)時才會繼續。這是因為過程200被設計為用於字節操作。其他實施方式可將過程200用於字、雙字或任何其他長度的操作數。
然後發射串操作的3次迭代(230)。已收集的數據表明特定的實施方式中至少99%的REP MOVSB指令涉及3次或更少的迭代。在特定的實施方式中,使用雙字轉移來執行所需要的存儲器轉移的大部分,因而剩下3或更少的字節需要轉移。然後通過字節串操作來處理所述剩下的數據。因此,在這些實施方式中,字節串操作中的絕大多數具有的ECX小於或等於3。因此,可將3用作為預期迭代數量的上限。其他實施方式可發射任何數量的初始迭代(例如8次),並可基於任何(多個)相關因素來確定需要發射多少次迭代。
然後檢查ECX寄存器以確定實際請求的迭代數量是否在值為3或更少的預測之內(240)。在特定的實施方式中,在發射任何迭代之前檢查ECX寄存器。
如果實際迭代數量(ECX)小於或等於3,則適當地執行或取消已發射的迭代(250)。具體地說,被執行的迭代數量等於ECX寄存器中的值(ECX),而被取消的迭代數量等於3減去ECX寄存器中的值(3-ECX)。數據轉移然後完成。
如果實際迭代數量(ECX)大於3,則取消3次已發射的迭代(260),並另外發射8次迭代(270)。其他實施方式可例如基於所收集的用於預測的數據或其他因素而發射任何數量的迭代。另外的實施方式不取消所述3次已發射的迭代。相反,它們例如基於ECX寄存器的值而發射額外的迭代。
然後檢查ECX寄存器的值以看它是否小於8(275)。如果是,則適當地執行或取消已發射的迭代(280)。具體地說,執行ECX次迭代,並取消8-ECX次迭代。
如果ECX不小於8,則檢查ECX以看它是否大於8(285)。如果ECX大於8,則執行全部已發射的8次迭代,並發射且執行ECX-8次額外的迭代(290)。如果ECX不大於8,則執行8次已發射的迭代(295)。
中長度重複串操作圖3示出了過程300的流程圖,過程300主要適用於執行中長度重複串操作,其中,中長度重複串操作被指定為請求8到64次迭代的重複串操作。「8」和「64」的選擇專用於所描述的實施方式,對於其他實施方式可指定不同的中長度。在所描述的實施方式中,選擇「8」是基於延遲,而選擇「64」是基於性能考慮,並且總的來說反映了一個點,在該點處,用於快速重複串操作(見下述)的算法執行得比過程300更好。過程300的使用可不考慮操作數大小,並不局限於字節操作數。過程300通過恰好發射所請求的數量的迭代來執行中長度重複串操作,這意味著不需要取消任何已發射的迭代。
過程300包括發射8次初始迭代(310)。檢查ECX的值以確定ECX在8和64之間(包括這兩個值本身)(320)。ECX的檢查可以在發射所述8次迭代之前或之後。
如果ECX在8和64之間,則執行初始發射的8次迭代(330)。進一步,發射(340)並執行(350)ECX-8次額外的迭代。下面論述的圖4是用於執行額外的ECX-8次額外迭代的過程400的流程圖。
如果ECX不在8和64之間,則調用另一個過程以繼續執行重複串操作(360)。例如,對於短重複串操作(即少於8次迭代),可以使用過程200,從操作275開始。對於長重複串操作(即多於64次迭代),可以使用下述的過程500。
可以以多種其他方式來結合過程200和300以及它們的變體,以執行短和中長度重複串操作。例如,可以用過程300的操作320-350來代替過程290,從而修改過程200。
圖4示出了過程400的流程圖,用於執行所述額外的ECX-8次迭代(過程300的操作350)。過程400與同時使用硬體寄存器和微碼的特定實施方式相關。
過程400包括向循環計數器寄存器加載值ECX-8(410)。所述循環計數器是遞減計數器,其跟蹤剩下要被發射和執行的迭代數量,並稱為剩餘迭代計數器。加載剩餘迭代計數器寄存器可使用微碼來完成,並且剩餘迭代計數器寄存器可在微操作的發射部分中。
將一個稱為迭代完成計數器的遞增/減計數器初始化為0(420)。例如可使用微碼中的微操作(「uop」)來完成所述初始化。迭代完成計數器遞增或遞減式地計數,其絕對值反映了已完成的迭代數量,並且每一次迭代就將迭代完成計數器遞增或遞減一次。如果重複串操作是前向行進的就遞增迭代完成計數器,所述前向行進即逐漸訪問更高的存儲器地址作為源和/或目標地址。如果重複串操作是後向行進的就遞減迭代完成計數器,所述後向行進即逐漸訪問更低的存儲器地址作為源和/或目標地址。
使用迭代完成計數器的值和重複串操作的操作數的數據/項大小來在硬體中計算存儲器地址偏移(430)。例如,假設迭代完成計數器的值為1,而操作數是雙字(4位元組),則所計算的地址偏移將是4。
將地址偏移值返回給微碼(440)。微碼然後使用所述偏移來執行重複串操作的下一次迭代(450)。具體地說,微碼可使用所述偏移來計算下一次迭代的源和目標地址。在REP MOVS操作的典型實施方式中,一個稱為ESI的寄存器存儲源數據位置的初始地址,而一個稱為EDI的寄存器存儲目標數據位置的初始地址。微碼將所述偏移加到ESI以確定用於加載數據的位置,並將所述偏移加到EDI以確定用於存儲數據的位置。本例子假設調整了ESI和EDI的值,以考慮在過程300的操作330中執行的8次初始迭代。
在發射每次迭代後,遞減剩餘迭代計數器(460),並遞增或遞減迭代完成計數器(470)。然後檢查剩餘迭代計數器以看它的值是否大於零,該值大於零表明尚未完成重複串操作的發射(480)。如果剩餘迭代計數器大於零,則過程400跳轉回到操作430。否則,過程400結束。另一種實施方式不使用剩餘迭代計數器,而是將迭代完成計數器的絕對值與值ECX-8進行比較。
用於執行中長度(以及短)重複串操作的另一種實施方式不一定恰好發射所請求的數量的迭代。該實施方式8次一組地發射迭代,並取消不需要的那些迭代。因此,對於0到8次迭代的請求,該實施方式發射8次迭代,而對於9到16次迭代的請求,該實施方式發射16次迭代(兩組8次),如此等等。這一實施方式利用了通過8次一組地執行迭代而獲得的效率。
長重複串操作—概論圖5提供了過程500的流程圖,用於執行長重複串操作。長重複串操作包括請求多於64次迭代的重複串操作。
「短」、「中長度」和「長」的指定完全取決於ECX的值,因此依賴於所請求的迭代次數。很清楚,例如某些中長度重複串操作涉及的數據傳輸轉移比某些長重複串操作更多。例如,ECX=60(中長度)的REP MOVSD將移動240位元組的數據,而ECX=65(長)的REP MOVSB將只移動65位元組的數據。其他實施方式在確定如何指定並執行重複串操作時可更著重於操作數大小。
過程500包括確定ECX是否大於64(510)。如果ECX不大於64,則重複串操作不是長重複串操作。因此,使用用於執行較短的重複串操作的過程(520)。適當的過程的例子包括上述過程200和300。
如果ECX大於64,則重複串操作是長重複串操作。過程500然後確定是否可以使用兼容操作來對齊ESI和/或EDI(530)。
兼容操作指的是下述操作,其例如包括使用與操作數相同大小的數據大小來對數據進行操作的串操作和重複串操作。例如,在REP MOVSB指令中,操作數是一個字節,並且如果ECX=32,則兼容操作將每次一字節地移動32位元組的數據。類似地,在REP MOVSD指令中,操作數是4位元組的雙字,並且如果ECX=32,則兼容操作將每次4位元組地移動128(32×4)字節的數據。
相對比的是,快速操作使用比操作數大小更大的數據大小來對數據進行操作。如果快速操作是串操作,則該快速操作還可稱為快速串操作。再次看ECX=32的REP MOVSD指令,快速操作可一次8位元組、一次16位元組或一次以另外某個比4大的數量來移動128位元組。快速操作通常比兼容操作快,因為在一次轉移中快速操作可移動更多數據。因此,經常期望使用快速操作,尤其是對於長重複串操作來說更是如此。無論使用快速操作還是兼容操作,存儲器中的最後串數據結果應是相同的。
但是,快速操作也有代價,因為存在與快速操作相關聯的額外開銷。只有當ECX>64時才使用快速操作這一決定反映了額外開銷的成本。在一些實施方式中,由於各種額外開銷的考慮,快速操作也只在特定的尋址模式中才使用,例如32位而非16位。
在快速操作中,經常希望將源和/或目標數據位置與正被移動的數據的大小對齊。如果存儲器位置的地址可被特定數據大小整除,則該位置與該大小對齊。例如,地址128與數據大小128位元組、64位元組、32位元組、16位元組、8位元組、4位元組、2位元組和1位元組對齊,但不與例如數據大小100位元組或12位元組對齊。在這個例子中,例如可將所述地址稱為16對齊(16-aligned)。快速操作通常無需對齊地址地執行,但性能經常會有損失,因為在訪問數據時發生了緩存行(cache line)分裂。因此,如果沒有對齊,那麼存儲器操作甚至在只採用兼容操作時會有更好的性能。
使用兼容操作時不是總能對齊地址。例如,對於REP MOVSW指令和EDI=3,兼容操作不能16對齊EDI,因為EDI將總具有奇數值。在這些情形下,利用兼容操作來執行重複串操作(540)。但是,一般地,如果ESI和/或EDI與操作數大小對齊(稱為O大小對齊),則可以使用兼容操作來8對齊或16對齊所述(多個)地址。
如果利用一個或多個兼容操作可對齊所述地址,則首先執行所述一個或多個兼容地址以對齊EDI和/或ESI(550)。對齊存儲器地址所需的兼容操作的數量將取決於地址需要與之對齊的數據大小。例如,EDI=6且前向行進的REP MOVSB重複串操作將需要2個兼容操作來8對齊EDI,並需要10個兼容操作來16對齊EDI。
對齊至少一個存儲器地址(550)之後,以前向行進或後向行進的方向以該地址執行快速操作(560)。可執行快速操作直到剩下要處理的數據小於快速操作的大小。之後,執行兼容操作直到處理了剩下的數據(570)。例如,假設ECX=150的REP MOVSB指令,有150位元組要移動。再假設快速操作可移動16位元組,開始時所述存儲器地址都被16對齊,9次快速操作後將剩下6位元組要移動。剩下的6位元組太小了,不能使用快速操作,因此執行6次兼容操作(本例子中是字節操作)。
長重複串操作—快速操作實施方式圖6、7、8A和9示出了與過程500一起使用的過程600、700、800、900的4個流程圖。過程600、700、800、900用於執行快速重複串操作,如過程500的操作560所述。
參考圖6,過程600可用來在ESI和EDI都是16對齊時執行快速操作。過程600包括從ESI加載16位元組(610)和將16位元組存儲到EDI(620)。
參考圖7,過程700可用於在ESI是8對齊而EDI是16對齊時執行快速操作。過程700包括從ESI加載8位元組(710),將ESI推進8(720),並從ESI再加載8位元組(730)。根據所述快速操作是前向行進還是後向行進,推進操作分別包括遞增和遞減ESI。所述兩組8位元組被合併(740)並存儲到EDI(750)。所述合併操作涉及拼接(concatenate)所述兩組8位元組以反映ESI的初始值處的16位元組。
參考圖8A,過程800可用來在EDI是16對齊而ESI不是16對齊時執行快速操作。例如,該過程還可在ESI不是8對齊時使用。一般地,過程800從包圍(bracket)ESI的16對齊的位置加載兩個16位元組數據組,並合併這兩個數據組以獲得所期望的16位元組。
具體地說,確定ESI的低對齊位置(810)和ESI的高對齊位置(820)。ESI的低對齊位置是存儲器中較低的最接近的16對齊的位置。ESI的高對齊位置是存儲器中較高的最接近的16對齊的位置。
然後從所述低對齊位置加載16位元組(830),並從所述高對齊位置加載16位元組(840)。然後合併所述兩個16位元組數據組,以獲得對應於ESI的16位元組(850)。在這個例子中,合併操作可涉及例如通過對所述兩個數據組進行掩碼操作,然後拼接進行了掩碼操作的數據組,從而抽取了每個所述16位元組數據組中感興趣的數據。然後將對應於ESI的16位元組存儲到EDI(860)。
還可參考圖8B中的存儲器870來說明過程800。存儲器870示出了被高對齊位置和低對齊位置包圍的ESI。如果重複串操作是前向行進的,則需要將標記為FWD-DATA的數據存儲到EDI。因此,需要加載並合併數據組B和A。如果重複串操作是後向行進的,則需要將標記為BACK-DATA的數據存儲到EDI。因此,需要加載並合併數據組B和C。
在其他實施方式中,從低對齊和高對齊位置的加載不必一定是16位元組(或任意對齊大小),甚至也不一定必須是相同數量的字節。例如,低對齊加載可加載具有第一預定大小的數據,高對齊加載可加載具有第二預定大小的數據,而被合併的數據可具有第三預定大小。在這個例子中,第一、第二和第三預定大小彼此都可不同,也不同於對齊大小。但是,在某些實施方式中,可通過將第一、第二和第三預定大小中的每一個設置為等於對齊大小來獲得效率。而且,例如當ESI是16對齊時可以使得低對齊和高對齊位置相同。
參考圖9,過程900可用來在EDI和ESI都是8對齊時執行快速操作。例如,過程900還可在EDI和ESI都是8對齊但都不是16對齊時使用。過程900包括從ESI加載8位元組(910),並將所加載的8位元組存儲到EDI(920)。
實施方式可採用過程600、700、800、900中的一個或多個來執行快速操作。例如,可將算法編寫為估計對齊概率並選擇過程600、700、800、900中之一來執行的微碼。對於不滿足過程600、700、800、900中任何之一的對齊需求的情形,一般可使用兼容串操作來執行。
由於當前使用了快速操作而不是指令所指定的兼容操作這一實事,可能會出現其他的實施方式上的問題。很清楚,通過執行不同的操作,即執行了快速操作而不是兼容操作,在快速操作期間,機器的狀態可能不總是與如果執行了兼容操作時的狀態相同。但是,可以使用多種技術來嘗試保持如果執行兼容操作時會獲得的機器狀態,因此使得快速操作的使用對於程序來說是透明的。保持狀態例如可包括將存儲器中的結果保持為與兼容操作相同,並觸發相同的故障條件。下面將進一步依次討論這些操作。
上述第一個例子是保持存儲器中的相同結果。在拷貝操作中這個例子涉及的一個問題是在使用源數據之前避免覆寫源數據。由於所請求的重複串操作不一定會考慮到使用快速操作來取代所指定的兼容操作,因此在源位置和目標位置之間可能沒有充分的距離。
可以以多種方式來解決避免覆寫問題,例如包括在ESI和EDI之間要求有最小的距離,或者將值存儲在臨時位置中。一種實施方式使用16位元組的快速操作,其需要EDI和ESI不在彼此的1和15位元組之間。
與線性地址相對,類似的覆寫在跨越頁邊界時也可能是個問題。可將源數據和目標數據的頁偏移進行比較,以確保如果源數據和目標數據在相同頁或鄰接頁上則不會有覆寫。一種實施方式在目標頁偏移小於源頁偏移之前16位元組時避免16位元組的快速轉移。當目標頁偏移接近零,而源頁偏移接近上限例如4k字節時,這種實施方式還考慮了目標頁可能與源頁加1相等的可能性。在此情形下,該實施方式仍確保目標頁加偏移至少在源頁加偏移之前的16位元組。
上述第二個例子是嘗試對快速操作觸發與兼容操作會觸發的故障條件相同的故障條件。例子包括分段(segmentation)和保護故障、對齊例外或調頁違反。用於幫助觸發相同故障的一種技術是恰好訪問與兼容操作會訪問的存儲器位置相同的存儲器位置。這可消除接收到表明「段或頁不可訪問」的錯誤或非預期的例外的可能性。
為了避免這種訪問,可對最少16位元組執行兼容操作(假設實施方式期望16對齊的地址並使用16位元組的轉移),以及16對齊所述地址所需的任何額外的兼容操作。而且,可在快速操作結束時對至少16位元組執行兼容操作。按照這種方式,如果使用過程800,則源訪問不會訪問預期的源數據之外的存儲器地址。
應注意,通過一次訪問更大量的數據例如16位元組而不是1位元組(假設一個字節的操作數),可能不能獲得相同的調試和指令陷入(trapping)能力。例如,可能不能在每個字節轉移後檢查狀態。
各種實施方式可能需要解決另外的問題。一個例子是處理器可能需要防止源數據位置和目標數據位置跨越或包圍(wrapping)所支持的地址空間的末尾。
額外開銷計算圖10提供了過程1000的流程圖,用於與執行重複串操作並行地執行額外開銷。與執行重複串操作相關聯的額外開銷包括更新3個寄存器ECX、EDI和ESI,這包括執行確定所述更新值所需的各種計算。這些計算包括整數寄存器操作,許多處理器可與用來執行重複串迭代的存儲器操作並行地執行所述整數寄存器操作。
過程1000包括執行所請求的重複串迭代(1010)。可選地存儲ECX、EDI和ESI的值以在執行所請求的重複串迭代期間保持它們以用於訪問(1020)。然後,與所請求的重複串迭代的執行並行地執行更新ECX、EDI和ESI所需的計算(1030)。最後,可選地與所請求的重複串迭代的執行並行地更新ECX、EDI和ESI(1040)。過程1000使得可使用處理器的空閒能力,並且至少部分地避免了如果額外開銷在已執行所述迭代後才開始的話會導致的延遲。
其他實施方式再次參考圖1,處理器120可使用能夠執行指令的結構或設備來實現。例子包括微處理器、控制器或邏輯設備。各個存儲器130、150、160也稱為存儲介質,可以用於至少臨時存儲數據的結構或設備來實現。例子包括寄存器、隨機訪問存儲器(「RAM」)、只讀存儲器(「ROM」)和軟盤。電子電路140可用能夠被配置來執行功能的結構或設備來實現。例子包括集成電路。計算機110可用包括圖1中所表示的元件的結構或設備來實現。例子包括通用計算機例如個人計算機、專用計算機、個人數字助理(「PDA」)、電子管理器(organizer)、電子遊戲設備、蜂窩式電話、尋呼設備或遙控器。聯網計算機170可以上述對計算機110描述的方式來實現。網絡連接180可包括多種連接,例如有線連接、無線連接、區域網連接和廣域網連接。
特定的實施方式可使用電路來執行所公開的過程中的一個或多個。這種電路例如可包括存儲器、具有或不具有微碼部分或硬體部分的處理器、處理器的微碼部分、處理器的硬體部分、控制器、邏輯設備、模擬或數字電路或者晶片或其他集成電路。例如,所公開的過程中的一個或多個可通過處理器執行存儲在該處理內的微碼中的指令來實現,或由例如包括控制硬體狀態機的硬體定序器的處理器內的硬體實現。多個過程還可實現為例如以軟體或微碼形式運行的狀態機。
所公開的過程可一般地應用於涉及各種數據存儲位置的指令。數據存儲位置的例子包括處理器寄存器、其他處理器存儲器、其他計算機存儲器和外部存儲器。
已描述了多種實施方式。例如,實施方式可局限於單個計算機或涉及聯網到另一個計算機的計算機。但是應該理解到可作出多種修改。因此,其他實施方式也在所附權利要求書的範圍內。
權利要求
1.一種用於執行重複串操作的方法,該方法包括訪問對具有操作數大小的重複串操作的請求;將源數據位置或目標數據位置中的至少一個對齊到可被預定整數整除的對齊位置,所述對齊包括使用具有與所述操作數大小相等的大小的數據來執行一個或多個串操作;以及對齊後,使用具有比所述操作數大小更大的大小的數據來執行一個或多個串操作。
2.如權利要求1所述的方法,還包括將源數據位置和目標數據位置二者對齊到可被所述預定整數整除的對齊位置,其中執行所述一個或多個串操作導致所述源數據位置和目標數據位置二者的對齊。
3.如權利要求2所述的方法,其中所述對齊位置代表字節,所述預定整數等於8,並且對齊後執行一個或多個串操作包括從所述源數據位置加載8位元組大小的數據;以及存儲所加載的8位元組大小的數據到所述目標數據位置。
4.如權利要求2所述的方法,其中所述對齊位置代表字節,所述預定整數等於16,並且對齊後執行一個或多個串操作包括從所述源數據位置加載16位元組大小的數據;以及存儲所加載的16位元組大小的數據到所述目標數據位置。
5.如權利要求1所述的方法,其中所述源數據位置和目標數據位置中只有一個對齊到可被所述預定整數整除的對齊位置。
6.如權利要求5所述的方法,其中只有所述目標數據位置對齊到可被所述預定整數整除的對齊位置。
7.如權利要求6所述的方法,其中所述對齊位置代表字節,所述預定整數等於16,所述源數據位置對齊到可被8整除的對齊位置,並且對齊後執行一個或多個串操作包括從所述源數據位置加載8位元組大小的第一數據組;將所述源數據位置推進8位元組;從所述源數據位置加載8位元組大小的第二數據組;將所述第一和第二數據組合併為16位元組的數據組;以及將所述16位元組的數據組存儲在所述目標數據位置處。
8.如權利要求6所述的方法,其中所述對齊位置代表字節,所述預定整數等於16,並且對齊後執行一個或多個串操作包括從可被16整除,並且位於所述源數據位置處或其下的最接近的對齊數據位置加載16位元組大小的第一數據組;從可被16整除,並且位於所述源數據位置處或其上的最接近的對齊數據位置加載16位元組大小的第二數據組;將所述第一和第二數據組合併為對應於所述源數據位置處的數據的合併的16位元組數據組;以及將所述合併的16位元組數據組存儲到所述目標數據位置。
9.如權利要求1所述的方法,其中對齊後執行一個或多個串操作包括從可被所述預定整數整除,並且位於所述源數據位置處或其下的最接近的對齊數據位置加載第一預定大小的第一數據組;從可被所述預定整數整除,並且位於所述源數據位置處或其上的最接近的對齊數據位置加載第二預定大小的第二數據組;將所述第一和第二數據組合併為對應於所述源數據位置處的數據的第三預定大小的合併數據組;以及將所述合併數據組存儲在所述目標數據位置處。
10.如權利要求1所述的方法,其中所述對齊位置代表字節,並且所述預定整數等於一個大於所述操作數大小的字節大小數量。
11.如權利要求1所述的方法,其中所述對齊位置代表字節,並且所述預定整數選自由8和16組成的組。
12.如權利要求1所述的方法,其中對齊後執行一個或多個串操作包括前向行進。
13.如權利要求1所述的方法,其中對齊後執行一個或多個串操作包括後向行進。
14.如權利要求1所述的方法,其中所述方法由處理器執行。
15.一種包括存儲介質的製品,所述存儲介質上存儲有指令,所述指令被機器執行時至少導致下述操作訪問對具有操作數大小的重複串操作的請求;將源數據位置或目標數據位置中的至少一個對齊到可被預定整數整除的對齊位置,所述對齊包括使用具有與操作數大小相等的大小的數據來執行一個或多個串操作;以及對齊後,使用具有比所述操作數大小更大的大小的數據來執行一個或多個串操作。
16.如權利要求15所述的製品,其中所述指令被機器執行時導致將源數據位置和目標數據位置二者對齊到可被所述預定整數整除的對齊位置,其中執行所述一個或多個串操作導致所述源數據位置和所述目標數據位置二者的對齊。
17.如權利要求15所述的製品,其中對齊後執行一個或多個串操作包括從可被所述預定整數整除,並且位於所述源數據位置處或其下的最接近的對齊數據位置加載第一預定大小的第一數據組;從可被所述預定整數整除,並且位於所述源數據位置處或其上的最接近的對齊數據位置加載第二預定大小的第二數據組;將所述第一和第二數據組合併為對應於所述源數據位置處的數據的第三預定大小的合併數據組;以及將所述合併數據組存儲在所述目標數據位置處。
18.一種用於執行重複串操作的裝置,該裝置包括用於執行至少下述操作的電路訪問對具有操作數大小的重複串操作的請求;將源數據位置或目標數據位置中的至少一個對齊到可被預定整數整除的對齊位置,所述對齊包括使用具有與操作數大小相等的大小的數據來執行一個或多個串操作;以及對齊後,使用具有比所述操作數大小更大的大小的數據來執行一個或多個串操作。
19.如權利要求18所述的裝置,其中所述電路將源數據位置和目標數據位置二者對齊到可被所述預定整數整除的對齊位置,其中執行所述一個或多個串操作導致所述源數據位置和目標數據位置二者的對齊。
20.如權利要求18所述的裝置,其中對齊後執行一個或多個串操作包括從可被所述預定整數整除,並且位於所述源數據位置處或其下的最接近的對齊數據位置加載第一預定大小的第一數據組;從可被所述預定整數整除,並且位於所述源數據位置處或其上的最接近的對齊數據位置加載第二預定大小的第二數據組;將所述第一和第二數據組合併為對應於所述源數據位置處的數據的第三預定大小的合併數據組;以及將所述合併數據組存儲在所述目標數據位置處。
21.如權利要求18所述的裝置,其中所述電路包括存儲器,該存儲器上存儲有用於執行下述操作中至少之一的指令訪問對具有操作數大小的重複串操作的請求;將源數據位置或目標數據位置中的至少一個對齊到可被預定整數整除的對齊位置,所述對齊包括使用具有與操作數大小相等的大小的數據來執行一個或多個串操作;以及對齊後,使用具有比所述操作數大小更大的大小的數據來執行一個或多個串操作。
22.如權利要求18所述的裝置,其中所述電路包括用於執行下述操作中至少之一的處理器訪問對具有操作數大小的重複串操作的請求;將源數據位置或目標數據位置中的至少一個對齊到可被預定整數整除的對齊位置,所述對齊包括使用具有與操作數大小相等的大小的數據來執行一個或多個串操作;以及對齊後,使用具有比所述操作數大小更大的大小的數據來執行一個或多個串操作。
23.如權利要求18所述的裝置,其中所述電路包括存儲器;處理器;以及連接所述存儲器和處理器的總線。
24.一種用於執行重複串操作的方法,該方法包括確定與重複串操作相關聯的操作數大小;如果所述操作數大小是預定大小則發射第一預定數量的迭代;以及否則發射第二預定數量的迭代。
25.如權利要求24所述的方法,其中基於對重複字節串操作的所請求數量的迭代的預測來選擇所述迭代的第一預定數量。
26.如權利要求24所述的方法,其中所述迭代的第一預定數量是3,所述迭代的第二預定數量是8,所述預定大小是一個字節,並且對於字或雙字的操作數大小發射8次迭代。
27.如權利要求24所述的方法,還包括確定所述重複串操作所請求的迭代數量大於所述已發射的迭代的預定數量,其中所述已發射的迭代的預定數量是所述第一預定數量或所述第二預定數量;以及如果需要則發射額外的迭代,以使得恰好發射所述重複串操作所請求的數量的迭代。
28.如權利要求27所述的方法,其中確定所述所請求的迭代數量大於所述預定數量在發射所述預定數量的迭代之後執行。
29.如權利要求27所述的方法,其中確定所述所請求的迭代數量大於所述預定數量在發射所述預定數量的迭代之前執行。
30.一種用於執行重複串操作的裝置,該裝置包括用於執行至少下述操作的電路確定與重複串操作相關聯的操作數大小;如果所述操作數大小是預定大小則發射第一預定數量的迭代;以及否則發射第二預定數量的迭代。
31.如權利要求30所述的裝置,其中所述電路包括存儲器,該存儲器上存儲有用於執行下述操作中至少之一的指令確定與重複串操作相關聯的操作數大小;如果所述操作數大小是預定大小則發射第一預定數量的迭代;以及否則發射第二預定數量的迭代。
32.如權利要求30所述的裝置,其中所述電路包括用於執行下述操作中至少之一的處理器確定與重複串操作相關聯的操作數大小;如果所述操作數大小是預定大小則發射第一預定數量的迭代;以及否則發射第二預定數量的迭代。
33.如權利要求30所述的裝置,其中所述電路可操作來執行至少下述進一步操作確定所述重複串操作所請求的迭代數量大於所述已發射的迭代的預定數量,其中所述已發射的迭代的預定數量是所述第一預定數量或所述第二預定數量;以及如果需要則發射額外的迭代,以使得恰好發射所述重複串操作所請求的數量的迭代。
34.一種包括存儲介質的製品,所述存儲介質上存儲有指令,所述指令被機器執行時至少會導致下述操作確定與重複串操作相關聯的操作數大小;如果所述操作數大小是預定大小則發射第一預定數量的迭代;以及否則發射第二預定數量的迭代。
35.如權利要求34所述的製品,其中所述存儲介質上存儲有指令,所述指令被機器執行時至少導致下述進一步操作確定所述重複串操作所請求的迭代數量大於所述已發射的迭代的預定數量,其中所述已發射的迭代的預定數量是所述第一預定數量或所述第二預定數量;以及如果需要則發射額外的迭代,以使得恰好發射所述重複串操作所請求的數量的迭代。
36.一種用於執行重複串操作的方法,該方法包括恰好發射重複串操作所請求的數量的迭代;以及執行所述串操作所請求的數量的迭代,所述串操作用於轉移具有特定字節長度的數據,所述執行包括使用硬體計數器存儲迭代值,該迭代值用於標識源數據位置和目標數據位置二者;在硬體中將存儲在硬體計數器中的所述迭代值乘以所述特定字節長度,以確定所述源數據位置和所述目標數據位置的實際存儲器地址偏移;每次迭代後,將存儲在所述硬體計數器中的迭代值改變1;以及將所述實際存儲器地址偏移提供給微碼。
37.一種用於執行重複串操作的裝置,該裝置包括用於執行至少下述操作的電路恰好發射重複串操作所請求的數量的迭代;以及執行所述串操作所請求的數量的迭代,所述串操作用於轉移具有特定字節長度的數據,所述執行包括使用硬體計數器存儲迭代值,該迭代值用於標識源數據位置和目標數據位置二者;在硬體中將存儲在硬體計數器中的所述迭代值乘以所述特定字節長度,以確定所述源數據位置和所述目標數據位置的實際存儲器地址偏移;每次迭代後,將存儲在所述硬體計數器中的迭代值改變1;以及將所述實際存儲器地址偏移提供給微碼。
38.一種包括存儲介質的製品,所述存儲介質上存儲有指令,所述指令被機器執行時至少導致下述操作對於位於預定範圍之內的所請求的數量的任何值,恰好發射重複串操作所請求的數量的迭代;以及執行所述串操作所請求的數量的迭代,所述串操作用於轉移具有特定字節長度的數據,所述執行包括使用硬體計數器存儲迭代值,該迭代值用於標識源數據位置和目標數據位置二者;在硬體中將存儲在硬體計數器中的所述迭代值乘以所述特定字節長度,以確定所述源數據位置和所述目標數據位置的實際存儲器地址偏移;每次迭代後,將存儲在所述硬體計數器中的迭代值改變1;以及將所述實際存儲器地址偏移提供給微碼。
全文摘要
執行重複串操作可包括將源數據位置或目標數據位置對齊到可被預定整數整除的位置,所述對齊包括使用這樣的數據來執行串操作,所述數據所具有的大小等於操作數的大小。對齊後,可使用具有比操作數大小更大的大小的數據來執行串操作。執行重複串操作可包括如果操作數大小是預定大小則發射第一預定數量的迭代,否則發射第二預定數量的迭代。執行重複串操作可包括確定重複串操作中所請求的迭代數量位於預定的多數量範圍之內,以及對於在該範圍之內的所請求數量的任何值,恰好發射所請求數量的迭代。
文檔編號G06F9/315GK1695115SQ03824642
公開日2005年11月9日 申請日期2003年8月28日 優先權日2002年8月28日
發明者鄒湘, 拉傑什·帕沙薩拉斯, 麥德哈文·帕沙薩拉斯, 斯科特·羅傑斯 申請人:英特爾公司