欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

執(zhí)行重復(fù)串操作的制作方法

文檔序號(hào):6418563閱讀:269來源:國知局
專利名稱:執(zhí)行重復(fù)串操作的制作方法
背景技術(shù)
下面論述的實(shí)施方式一般地涉及計(jì)算環(huán)境中的處理操作,某些實(shí)施方式更具體地涉及處理重復(fù)串操作。
可以向處理器分配連續(xù)多次地執(zhí)行操作(也稱為指令)的任務(wù)。對(duì)于串操作來說可能是如此,其中串操作例如是將數(shù)據(jù)從一個(gè)存儲(chǔ)器位置移動(dòng)到另一個(gè)存儲(chǔ)器位置的移動(dòng)(move)操作,或者是將數(shù)據(jù)從寄存器移動(dòng)到存儲(chǔ)器位置的存儲(chǔ)操作。移動(dòng)操作可以重復(fù)多次,以移動(dòng)一整塊的數(shù)據(jù)而不僅僅是單個(gè)數(shù)據(jù)元素。可以重復(fù)進(jìn)行存儲(chǔ)以初始化一塊數(shù)據(jù)。可以將REP前綴與指令一起使用,以表明所述指令將重復(fù)執(zhí)行指定數(shù)量的迭代(iteration)。一直需要新穎且有用的方式來有效地執(zhí)行被重復(fù)的指令,所述有效是按照時(shí)間、處理器資源利用狀況或任何多種其他度量來說的。


圖1的方框圖示出了用于執(zhí)行所公開的重復(fù)串操作的系統(tǒng)。
圖2是用于執(zhí)行短重復(fù)串操作的過程的流程圖。
圖3是用于執(zhí)行中長度重復(fù)串操作的過程的流程圖。
圖4是用于執(zhí)行圖3的過程時(shí)執(zhí)行迭代的過程的流程圖。
圖5是用于執(zhí)行長重復(fù)串操作的過程的流程圖。
圖6、7、8A、8B和9是用于執(zhí)行圖5的過程時(shí)執(zhí)行快速重復(fù)串操作的過程的流程圖。
圖10是用于與執(zhí)行重復(fù)串操作并行地執(zhí)行額外開銷(overhead)的過程的流程圖。
具體實(shí)施例方式
在各種指令集和體系結(jié)構(gòu)中,可以將具有符號(hào)REP的重復(fù)前綴來與特定指令一起使用,以使得處理器將該指令重復(fù)給定的次數(shù)(迭代)。例子可包括REP MOVSB(移動(dòng)/拷貝一字節(jié)數(shù)據(jù)項(xiàng)的串)、REP MOVSW(移動(dòng)/拷貝兩字節(jié)數(shù)據(jù)項(xiàng)的串)、REP MOVSD(移動(dòng)/拷貝4字節(jié)數(shù)據(jù)項(xiàng)的串)、REP STOSW(存儲(chǔ)兩字節(jié)數(shù)據(jù)項(xiàng)的串)和REP CMPSD(比較4字節(jié)數(shù)據(jù)項(xiàng)的串)。每次迭代一般地涉及進(jìn)行存儲(chǔ)器轉(zhuǎn)移,然后更新保存用于該數(shù)據(jù)的存儲(chǔ)器地址的寄存器。REP前綴還可與其他指令例如LODS(加載串)一起使用??梢允褂梅Q為ECX寄存器的寄存器來指定對(duì)于特定重復(fù)串操作需要執(zhí)行的迭代數(shù)量。雖然所描述的實(shí)施方式采用了REP前綴,但是也可使用其他機(jī)制來重復(fù)指令,并且所描述的特征同樣適用于這樣的其他機(jī)制。在處理器上下文中,通常使用微操作來執(zhí)行串操作。
微操作在處理器內(nèi)的生命包括不同的階段。一個(gè)階段稱為發(fā)射(issuance),而后一個(gè)階段稱為執(zhí)行(execution)。發(fā)射與執(zhí)行之間的延遲以及可能的空閑時(shí)間可能會(huì)導(dǎo)致處理器的性能度量降低。然而,可以在發(fā)射微操作之后并且在執(zhí)行微操作之前使處理器取消微操作。因此,一些處理器預(yù)測重復(fù)串操作將會(huì)請求的迭代數(shù)量,并基于該預(yù)測來發(fā)射迭代。這些處理器然后可以在以后的時(shí)間處取消不需要的迭代,但這發(fā)生在執(zhí)行所述不需要的迭代之前。然而,對(duì)于誤預(yù)測,由于需要取消已發(fā)射的操作,因此會(huì)導(dǎo)致額外的延遲。
為了提高性能,下面論述的各種實(shí)施方式或者試圖對(duì)將要請求的迭代數(shù)量作出精確的預(yù)測,或者集中于恰好發(fā)射所請求數(shù)量的迭代。各種實(shí)施方式還與數(shù)據(jù)轉(zhuǎn)移并行地執(zhí)行額外開銷計(jì)算以減少用于執(zhí)行重復(fù)串操作的總時(shí)間,或者試圖通過以比指令所請求的更大的塊來轉(zhuǎn)移數(shù)據(jù),從而更快地執(zhí)行所請求的重復(fù)串操作。
參考圖1,用于執(zhí)行重復(fù)串操作的系統(tǒng)100包括計(jì)算機(jī)110,計(jì)算機(jī)110包括處理器120、存儲(chǔ)器130以及連接處理器120和存儲(chǔ)器130的總線135。處理器120包括可通過總線或其他連接(未示出)而連接的電子電路140和處理器存儲(chǔ)器150。系統(tǒng)100還包括外部存儲(chǔ)器160。處理器120可使用電子電路140和/或處理器存儲(chǔ)器150來執(zhí)行下面論述的過程中的任一個(gè)。而且,存儲(chǔ)器160可存儲(chǔ)用于使得計(jì)算機(jī)執(zhí)行下面論述的過程中的任一個(gè)的指令。計(jì)算機(jī)110可選地通過網(wǎng)絡(luò)連接180耦合到聯(lián)網(wǎng)計(jì)算機(jī)170。
短重復(fù)串操作圖2示出了過程200,用于執(zhí)行短重復(fù)串操作(即執(zhí)行少于8次的串操作)。然而,過程200也可執(zhí)行非短重復(fù)串操作。最初,所述過程包括進(jìn)行檢查以發(fā)現(xiàn)指令中的REP前綴(210)。如果沒有REP前綴,則沒有重復(fù)串操作要執(zhí)行。
如果存在REP前綴,則檢查重復(fù)串操作以獲得操作數(shù)的大小(220)。過程200只有在操作數(shù)大小是一個(gè)字節(jié)(a byte)例如REP MOVSB(與MOVSW或MOVSD形成對(duì)比)時(shí)才會(huì)繼續(xù)。這是因?yàn)檫^程200被設(shè)計(jì)為用于字節(jié)操作。其他實(shí)施方式可將過程200用于字、雙字或任何其他長度的操作數(shù)。
然后發(fā)射串操作的3次迭代(230)。已收集的數(shù)據(jù)表明特定的實(shí)施方式中至少99%的REP MOVSB指令涉及3次或更少的迭代。在特定的實(shí)施方式中,使用雙字轉(zhuǎn)移來執(zhí)行所需要的存儲(chǔ)器轉(zhuǎn)移的大部分,因而剩下3或更少的字節(jié)需要轉(zhuǎn)移。然后通過字節(jié)串操作來處理所述剩下的數(shù)據(jù)。因此,在這些實(shí)施方式中,字節(jié)串操作中的絕大多數(shù)具有的ECX小于或等于3。因此,可將3用作為預(yù)期迭代數(shù)量的上限。其他實(shí)施方式可發(fā)射任何數(shù)量的初始迭代(例如8次),并可基于任何(多個(gè))相關(guān)因素來確定需要發(fā)射多少次迭代。
然后檢查ECX寄存器以確定實(shí)際請求的迭代數(shù)量是否在值為3或更少的預(yù)測之內(nèi)(240)。在特定的實(shí)施方式中,在發(fā)射任何迭代之前檢查ECX寄存器。
如果實(shí)際迭代數(shù)量(ECX)小于或等于3,則適當(dāng)?shù)貓?zhí)行或取消已發(fā)射的迭代(250)。具體地說,被執(zhí)行的迭代數(shù)量等于ECX寄存器中的值(ECX),而被取消的迭代數(shù)量等于3減去ECX寄存器中的值(3-ECX)。數(shù)據(jù)轉(zhuǎn)移然后完成。
如果實(shí)際迭代數(shù)量(ECX)大于3,則取消3次已發(fā)射的迭代(260),并另外發(fā)射8次迭代(270)。其他實(shí)施方式可例如基于所收集的用于預(yù)測的數(shù)據(jù)或其他因素而發(fā)射任何數(shù)量的迭代。另外的實(shí)施方式不取消所述3次已發(fā)射的迭代。相反,它們例如基于ECX寄存器的值而發(fā)射額外的迭代。
然后檢查ECX寄存器的值以看它是否小于8(275)。如果是,則適當(dāng)?shù)貓?zhí)行或取消已發(fā)射的迭代(280)。具體地說,執(zhí)行ECX次迭代,并取消8-ECX次迭代。
如果ECX不小于8,則檢查ECX以看它是否大于8(285)。如果ECX大于8,則執(zhí)行全部已發(fā)射的8次迭代,并發(fā)射且執(zhí)行ECX-8次額外的迭代(290)。如果ECX不大于8,則執(zhí)行8次已發(fā)射的迭代(295)。
中長度重復(fù)串操作圖3示出了過程300的流程圖,過程300主要適用于執(zhí)行中長度重復(fù)串操作,其中,中長度重復(fù)串操作被指定為請求8到64次迭代的重復(fù)串操作?!?”和“64”的選擇專用于所描述的實(shí)施方式,對(duì)于其他實(shí)施方式可指定不同的中長度。在所描述的實(shí)施方式中,選擇“8”是基于延遲,而選擇“64”是基于性能考慮,并且總的來說反映了一個(gè)點(diǎn),在該點(diǎn)處,用于快速重復(fù)串操作(見下述)的算法執(zhí)行得比過程300更好。過程300的使用可不考慮操作數(shù)大小,并不局限于字節(jié)操作數(shù)。過程300通過恰好發(fā)射所請求的數(shù)量的迭代來執(zhí)行中長度重復(fù)串操作,這意味著不需要取消任何已發(fā)射的迭代。
過程300包括發(fā)射8次初始迭代(310)。檢查ECX的值以確定ECX在8和64之間(包括這兩個(gè)值本身)(320)。ECX的檢查可以在發(fā)射所述8次迭代之前或之后。
如果ECX在8和64之間,則執(zhí)行初始發(fā)射的8次迭代(330)。進(jìn)一步,發(fā)射(340)并執(zhí)行(350)ECX-8次額外的迭代。下面論述的圖4是用于執(zhí)行額外的ECX-8次額外迭代的過程400的流程圖。
如果ECX不在8和64之間,則調(diào)用另一個(gè)過程以繼續(xù)執(zhí)行重復(fù)串操作(360)。例如,對(duì)于短重復(fù)串操作(即少于8次迭代),可以使用過程200,從操作275開始。對(duì)于長重復(fù)串操作(即多于64次迭代),可以使用下述的過程500。
可以以多種其他方式來結(jié)合過程200和300以及它們的變體,以執(zhí)行短和中長度重復(fù)串操作。例如,可以用過程300的操作320-350來代替過程290,從而修改過程200。
圖4示出了過程400的流程圖,用于執(zhí)行所述額外的ECX-8次迭代(過程300的操作350)。過程400與同時(shí)使用硬件寄存器和微碼的特定實(shí)施方式相關(guān)。
過程400包括向循環(huán)計(jì)數(shù)器寄存器加載值ECX-8(410)。所述循環(huán)計(jì)數(shù)器是遞減計(jì)數(shù)器,其跟蹤剩下要被發(fā)射和執(zhí)行的迭代數(shù)量,并稱為剩余迭代計(jì)數(shù)器。加載剩余迭代計(jì)數(shù)器寄存器可使用微碼來完成,并且剩余迭代計(jì)數(shù)器寄存器可在微操作的發(fā)射部分中。
將一個(gè)稱為迭代完成計(jì)數(shù)器的遞增/減計(jì)數(shù)器初始化為0(420)。例如可使用微碼中的微操作(“uop”)來完成所述初始化。迭代完成計(jì)數(shù)器遞增或遞減式地計(jì)數(shù),其絕對(duì)值反映了已完成的迭代數(shù)量,并且每一次迭代就將迭代完成計(jì)數(shù)器遞增或遞減一次。如果重復(fù)串操作是前向行進(jìn)的就遞增迭代完成計(jì)數(shù)器,所述前向行進(jìn)即逐漸訪問更高的存儲(chǔ)器地址作為源和/或目標(biāo)地址。如果重復(fù)串操作是后向行進(jìn)的就遞減迭代完成計(jì)數(shù)器,所述后向行進(jìn)即逐漸訪問更低的存儲(chǔ)器地址作為源和/或目標(biāo)地址。
使用迭代完成計(jì)數(shù)器的值和重復(fù)串操作的操作數(shù)的數(shù)據(jù)/項(xiàng)大小來在硬件中計(jì)算存儲(chǔ)器地址偏移(430)。例如,假設(shè)迭代完成計(jì)數(shù)器的值為1,而操作數(shù)是雙字(4字節(jié)),則所計(jì)算的地址偏移將是4。
將地址偏移值返回給微碼(440)。微碼然后使用所述偏移來執(zhí)行重復(fù)串操作的下一次迭代(450)。具體地說,微碼可使用所述偏移來計(jì)算下一次迭代的源和目標(biāo)地址。在REP MOVS操作的典型實(shí)施方式中,一個(gè)稱為ESI的寄存器存儲(chǔ)源數(shù)據(jù)位置的初始地址,而一個(gè)稱為EDI的寄存器存儲(chǔ)目標(biāo)數(shù)據(jù)位置的初始地址。微碼將所述偏移加到ESI以確定用于加載數(shù)據(jù)的位置,并將所述偏移加到EDI以確定用于存儲(chǔ)數(shù)據(jù)的位置。本例子假設(shè)調(diào)整了ESI和EDI的值,以考慮在過程300的操作330中執(zhí)行的8次初始迭代。
在發(fā)射每次迭代后,遞減剩余迭代計(jì)數(shù)器(460),并遞增或遞減迭代完成計(jì)數(shù)器(470)。然后檢查剩余迭代計(jì)數(shù)器以看它的值是否大于零,該值大于零表明尚未完成重復(fù)串操作的發(fā)射(480)。如果剩余迭代計(jì)數(shù)器大于零,則過程400跳轉(zhuǎn)回到操作430。否則,過程400結(jié)束。另一種實(shí)施方式不使用剩余迭代計(jì)數(shù)器,而是將迭代完成計(jì)數(shù)器的絕對(duì)值與值ECX-8進(jìn)行比較。
用于執(zhí)行中長度(以及短)重復(fù)串操作的另一種實(shí)施方式不一定恰好發(fā)射所請求的數(shù)量的迭代。該實(shí)施方式8次一組地發(fā)射迭代,并取消不需要的那些迭代。因此,對(duì)于0到8次迭代的請求,該實(shí)施方式發(fā)射8次迭代,而對(duì)于9到16次迭代的請求,該實(shí)施方式發(fā)射16次迭代(兩組8次),如此等等。這一實(shí)施方式利用了通過8次一組地執(zhí)行迭代而獲得的效率。
長重復(fù)串操作—概論圖5提供了過程500的流程圖,用于執(zhí)行長重復(fù)串操作。長重復(fù)串操作包括請求多于64次迭代的重復(fù)串操作。
“短”、“中長度”和“長”的指定完全取決于ECX的值,因此依賴于所請求的迭代次數(shù)。很清楚,例如某些中長度重復(fù)串操作涉及的數(shù)據(jù)傳輸轉(zhuǎn)移比某些長重復(fù)串操作更多。例如,ECX=60(中長度)的REP MOVSD將移動(dòng)240字節(jié)的數(shù)據(jù),而ECX=65(長)的REP MOVSB將只移動(dòng)65字節(jié)的數(shù)據(jù)。其他實(shí)施方式在確定如何指定并執(zhí)行重復(fù)串操作時(shí)可更著重于操作數(shù)大小。
過程500包括確定ECX是否大于64(510)。如果ECX不大于64,則重復(fù)串操作不是長重復(fù)串操作。因此,使用用于執(zhí)行較短的重復(fù)串操作的過程(520)。適當(dāng)?shù)倪^程的例子包括上述過程200和300。
如果ECX大于64,則重復(fù)串操作是長重復(fù)串操作。過程500然后確定是否可以使用兼容操作來對(duì)齊ESI和/或EDI(530)。
兼容操作指的是下述操作,其例如包括使用與操作數(shù)相同大小的數(shù)據(jù)大小來對(duì)數(shù)據(jù)進(jìn)行操作的串操作和重復(fù)串操作。例如,在REP MOVSB指令中,操作數(shù)是一個(gè)字節(jié),并且如果ECX=32,則兼容操作將每次一字節(jié)地移動(dòng)32字節(jié)的數(shù)據(jù)。類似地,在REP MOVSD指令中,操作數(shù)是4字節(jié)的雙字,并且如果ECX=32,則兼容操作將每次4字節(jié)地移動(dòng)128(32×4)字節(jié)的數(shù)據(jù)。
相對(duì)比的是,快速操作使用比操作數(shù)大小更大的數(shù)據(jù)大小來對(duì)數(shù)據(jù)進(jìn)行操作。如果快速操作是串操作,則該快速操作還可稱為快速串操作。再次看ECX=32的REP MOVSD指令,快速操作可一次8字節(jié)、一次16字節(jié)或一次以另外某個(gè)比4大的數(shù)量來移動(dòng)128字節(jié)。快速操作通常比兼容操作快,因?yàn)樵谝淮无D(zhuǎn)移中快速操作可移動(dòng)更多數(shù)據(jù)。因此,經(jīng)常期望使用快速操作,尤其是對(duì)于長重復(fù)串操作來說更是如此。無論使用快速操作還是兼容操作,存儲(chǔ)器中的最后串?dāng)?shù)據(jù)結(jié)果應(yīng)是相同的。
但是,快速操作也有代價(jià),因?yàn)榇嬖谂c快速操作相關(guān)聯(lián)的額外開銷。只有當(dāng)ECX>64時(shí)才使用快速操作這一決定反映了額外開銷的成本。在一些實(shí)施方式中,由于各種額外開銷的考慮,快速操作也只在特定的尋址模式中才使用,例如32位而非16位。
在快速操作中,經(jīng)常希望將源和/或目標(biāo)數(shù)據(jù)位置與正被移動(dòng)的數(shù)據(jù)的大小對(duì)齊。如果存儲(chǔ)器位置的地址可被特定數(shù)據(jù)大小整除,則該位置與該大小對(duì)齊。例如,地址128與數(shù)據(jù)大小128字節(jié)、64字節(jié)、32字節(jié)、16字節(jié)、8字節(jié)、4字節(jié)、2字節(jié)和1字節(jié)對(duì)齊,但不與例如數(shù)據(jù)大小100字節(jié)或12字節(jié)對(duì)齊。在這個(gè)例子中,例如可將所述地址稱為16對(duì)齊(16-aligned)??焖俨僮魍ǔo需對(duì)齊地址地執(zhí)行,但性能經(jīng)常會(huì)有損失,因?yàn)樵谠L問數(shù)據(jù)時(shí)發(fā)生了緩存行(cache line)分裂。因此,如果沒有對(duì)齊,那么存儲(chǔ)器操作甚至在只采用兼容操作時(shí)會(huì)有更好的性能。
使用兼容操作時(shí)不是總能對(duì)齊地址。例如,對(duì)于REP MOVSW指令和EDI=3,兼容操作不能16對(duì)齊EDI,因?yàn)镋DI將總具有奇數(shù)值。在這些情形下,利用兼容操作來執(zhí)行重復(fù)串操作(540)。但是,一般地,如果ESI和/或EDI與操作數(shù)大小對(duì)齊(稱為O大小對(duì)齊),則可以使用兼容操作來8對(duì)齊或16對(duì)齊所述(多個(gè))地址。
如果利用一個(gè)或多個(gè)兼容操作可對(duì)齊所述地址,則首先執(zhí)行所述一個(gè)或多個(gè)兼容地址以對(duì)齊EDI和/或ESI(550)。對(duì)齊存儲(chǔ)器地址所需的兼容操作的數(shù)量將取決于地址需要與之對(duì)齊的數(shù)據(jù)大小。例如,EDI=6且前向行進(jìn)的REP MOVSB重復(fù)串操作將需要2個(gè)兼容操作來8對(duì)齊EDI,并需要10個(gè)兼容操作來16對(duì)齊EDI。
對(duì)齊至少一個(gè)存儲(chǔ)器地址(550)之后,以前向行進(jìn)或后向行進(jìn)的方向以該地址執(zhí)行快速操作(560)??蓤?zhí)行快速操作直到剩下要處理的數(shù)據(jù)小于快速操作的大小。之后,執(zhí)行兼容操作直到處理了剩下的數(shù)據(jù)(570)。例如,假設(shè)ECX=150的REP MOVSB指令,有150字節(jié)要移動(dòng)。再假設(shè)快速操作可移動(dòng)16字節(jié),開始時(shí)所述存儲(chǔ)器地址都被16對(duì)齊,9次快速操作后將剩下6字節(jié)要移動(dòng)。剩下的6字節(jié)太小了,不能使用快速操作,因此執(zhí)行6次兼容操作(本例子中是字節(jié)操作)。
長重復(fù)串操作—快速操作實(shí)施方式圖6、7、8A和9示出了與過程500一起使用的過程600、700、800、900的4個(gè)流程圖。過程600、700、800、900用于執(zhí)行快速重復(fù)串操作,如過程500的操作560所述。
參考圖6,過程600可用來在ESI和EDI都是16對(duì)齊時(shí)執(zhí)行快速操作。過程600包括從ESI加載16字節(jié)(610)和將16字節(jié)存儲(chǔ)到EDI(620)。
參考圖7,過程700可用于在ESI是8對(duì)齊而EDI是16對(duì)齊時(shí)執(zhí)行快速操作。過程700包括從ESI加載8字節(jié)(710),將ESI推進(jìn)8(720),并從ESI再加載8字節(jié)(730)。根據(jù)所述快速操作是前向行進(jìn)還是后向行進(jìn),推進(jìn)操作分別包括遞增和遞減ESI。所述兩組8字節(jié)被合并(740)并存儲(chǔ)到EDI(750)。所述合并操作涉及拼接(concatenate)所述兩組8字節(jié)以反映ESI的初始值處的16字節(jié)。
參考圖8A,過程800可用來在EDI是16對(duì)齊而ESI不是16對(duì)齊時(shí)執(zhí)行快速操作。例如,該過程還可在ESI不是8對(duì)齊時(shí)使用。一般地,過程800從包圍(bracket)ESI的16對(duì)齊的位置加載兩個(gè)16字節(jié)數(shù)據(jù)組,并合并這兩個(gè)數(shù)據(jù)組以獲得所期望的16字節(jié)。
具體地說,確定ESI的低對(duì)齊位置(810)和ESI的高對(duì)齊位置(820)。ESI的低對(duì)齊位置是存儲(chǔ)器中較低的最接近的16對(duì)齊的位置。ESI的高對(duì)齊位置是存儲(chǔ)器中較高的最接近的16對(duì)齊的位置。
然后從所述低對(duì)齊位置加載16字節(jié)(830),并從所述高對(duì)齊位置加載16字節(jié)(840)。然后合并所述兩個(gè)16字節(jié)數(shù)據(jù)組,以獲得對(duì)應(yīng)于ESI的16字節(jié)(850)。在這個(gè)例子中,合并操作可涉及例如通過對(duì)所述兩個(gè)數(shù)據(jù)組進(jìn)行掩碼操作,然后拼接進(jìn)行了掩碼操作的數(shù)據(jù)組,從而抽取了每個(gè)所述16字節(jié)數(shù)據(jù)組中感興趣的數(shù)據(jù)。然后將對(duì)應(yīng)于ESI的16字節(jié)存儲(chǔ)到EDI(860)。
還可參考圖8B中的存儲(chǔ)器870來說明過程800。存儲(chǔ)器870示出了被高對(duì)齊位置和低對(duì)齊位置包圍的ESI。如果重復(fù)串操作是前向行進(jìn)的,則需要將標(biāo)記為FWD-DATA的數(shù)據(jù)存儲(chǔ)到EDI。因此,需要加載并合并數(shù)據(jù)組B和A。如果重復(fù)串操作是后向行進(jìn)的,則需要將標(biāo)記為BACK-DATA的數(shù)據(jù)存儲(chǔ)到EDI。因此,需要加載并合并數(shù)據(jù)組B和C。
在其他實(shí)施方式中,從低對(duì)齊和高對(duì)齊位置的加載不必一定是16字節(jié)(或任意對(duì)齊大小),甚至也不一定必須是相同數(shù)量的字節(jié)。例如,低對(duì)齊加載可加載具有第一預(yù)定大小的數(shù)據(jù),高對(duì)齊加載可加載具有第二預(yù)定大小的數(shù)據(jù),而被合并的數(shù)據(jù)可具有第三預(yù)定大小。在這個(gè)例子中,第一、第二和第三預(yù)定大小彼此都可不同,也不同于對(duì)齊大小。但是,在某些實(shí)施方式中,可通過將第一、第二和第三預(yù)定大小中的每一個(gè)設(shè)置為等于對(duì)齊大小來獲得效率。而且,例如當(dāng)ESI是16對(duì)齊時(shí)可以使得低對(duì)齊和高對(duì)齊位置相同。
參考圖9,過程900可用來在EDI和ESI都是8對(duì)齊時(shí)執(zhí)行快速操作。例如,過程900還可在EDI和ESI都是8對(duì)齊但都不是16對(duì)齊時(shí)使用。過程900包括從ESI加載8字節(jié)(910),并將所加載的8字節(jié)存儲(chǔ)到EDI(920)。
實(shí)施方式可采用過程600、700、800、900中的一個(gè)或多個(gè)來執(zhí)行快速操作。例如,可將算法編寫為估計(jì)對(duì)齊概率并選擇過程600、700、800、900中之一來執(zhí)行的微碼。對(duì)于不滿足過程600、700、800、900中任何之一的對(duì)齊需求的情形,一般可使用兼容串操作來執(zhí)行。
由于當(dāng)前使用了快速操作而不是指令所指定的兼容操作這一實(shí)事,可能會(huì)出現(xiàn)其他的實(shí)施方式上的問題。很清楚,通過執(zhí)行不同的操作,即執(zhí)行了快速操作而不是兼容操作,在快速操作期間,機(jī)器的狀態(tài)可能不總是與如果執(zhí)行了兼容操作時(shí)的狀態(tài)相同。但是,可以使用多種技術(shù)來嘗試保持如果執(zhí)行兼容操作時(shí)會(huì)獲得的機(jī)器狀態(tài),因此使得快速操作的使用對(duì)于程序來說是透明的。保持狀態(tài)例如可包括將存儲(chǔ)器中的結(jié)果保持為與兼容操作相同,并觸發(fā)相同的故障條件。下面將進(jìn)一步依次討論這些操作。
上述第一個(gè)例子是保持存儲(chǔ)器中的相同結(jié)果。在拷貝操作中這個(gè)例子涉及的一個(gè)問題是在使用源數(shù)據(jù)之前避免覆寫源數(shù)據(jù)。由于所請求的重復(fù)串操作不一定會(huì)考慮到使用快速操作來取代所指定的兼容操作,因此在源位置和目標(biāo)位置之間可能沒有充分的距離。
可以以多種方式來解決避免覆寫問題,例如包括在ESI和EDI之間要求有最小的距離,或者將值存儲(chǔ)在臨時(shí)位置中。一種實(shí)施方式使用16字節(jié)的快速操作,其需要EDI和ESI不在彼此的1和15字節(jié)之間。
與線性地址相對(duì),類似的覆寫在跨越頁邊界時(shí)也可能是個(gè)問題??蓪⒃磾?shù)據(jù)和目標(biāo)數(shù)據(jù)的頁偏移進(jìn)行比較,以確保如果源數(shù)據(jù)和目標(biāo)數(shù)據(jù)在相同頁或鄰接頁上則不會(huì)有覆寫。一種實(shí)施方式在目標(biāo)頁偏移小于源頁偏移之前16字節(jié)時(shí)避免16字節(jié)的快速轉(zhuǎn)移。當(dāng)目標(biāo)頁偏移接近零,而源頁偏移接近上限例如4k字節(jié)時(shí),這種實(shí)施方式還考慮了目標(biāo)頁可能與源頁加1相等的可能性。在此情形下,該實(shí)施方式仍確保目標(biāo)頁加偏移至少在源頁加偏移之前的16字節(jié)。
上述第二個(gè)例子是嘗試對(duì)快速操作觸發(fā)與兼容操作會(huì)觸發(fā)的故障條件相同的故障條件。例子包括分段(segmentation)和保護(hù)故障、對(duì)齊例外或調(diào)頁違反。用于幫助觸發(fā)相同故障的一種技術(shù)是恰好訪問與兼容操作會(huì)訪問的存儲(chǔ)器位置相同的存儲(chǔ)器位置。這可消除接收到表明“段或頁不可訪問”的錯(cuò)誤或非預(yù)期的例外的可能性。
為了避免這種訪問,可對(duì)最少16字節(jié)執(zhí)行兼容操作(假設(shè)實(shí)施方式期望16對(duì)齊的地址并使用16字節(jié)的轉(zhuǎn)移),以及16對(duì)齊所述地址所需的任何額外的兼容操作。而且,可在快速操作結(jié)束時(shí)對(duì)至少16字節(jié)執(zhí)行兼容操作。按照這種方式,如果使用過程800,則源訪問不會(huì)訪問預(yù)期的源數(shù)據(jù)之外的存儲(chǔ)器地址。
應(yīng)注意,通過一次訪問更大量的數(shù)據(jù)例如16字節(jié)而不是1字節(jié)(假設(shè)一個(gè)字節(jié)的操作數(shù)),可能不能獲得相同的調(diào)試和指令陷入(trapping)能力。例如,可能不能在每個(gè)字節(jié)轉(zhuǎn)移后檢查狀態(tài)。
各種實(shí)施方式可能需要解決另外的問題。一個(gè)例子是處理器可能需要防止源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置跨越或包圍(wrapping)所支持的地址空間的末尾。
額外開銷計(jì)算圖10提供了過程1000的流程圖,用于與執(zhí)行重復(fù)串操作并行地執(zhí)行額外開銷。與執(zhí)行重復(fù)串操作相關(guān)聯(lián)的額外開銷包括更新3個(gè)寄存器ECX、EDI和ESI,這包括執(zhí)行確定所述更新值所需的各種計(jì)算。這些計(jì)算包括整數(shù)寄存器操作,許多處理器可與用來執(zhí)行重復(fù)串迭代的存儲(chǔ)器操作并行地執(zhí)行所述整數(shù)寄存器操作。
過程1000包括執(zhí)行所請求的重復(fù)串迭代(1010)??蛇x地存儲(chǔ)ECX、EDI和ESI的值以在執(zhí)行所請求的重復(fù)串迭代期間保持它們以用于訪問(1020)。然后,與所請求的重復(fù)串迭代的執(zhí)行并行地執(zhí)行更新ECX、EDI和ESI所需的計(jì)算(1030)。最后,可選地與所請求的重復(fù)串迭代的執(zhí)行并行地更新ECX、EDI和ESI(1040)。過程1000使得可使用處理器的空閑能力,并且至少部分地避免了如果額外開銷在已執(zhí)行所述迭代后才開始的話會(huì)導(dǎo)致的延遲。
其他實(shí)施方式再次參考圖1,處理器120可使用能夠執(zhí)行指令的結(jié)構(gòu)或設(shè)備來實(shí)現(xiàn)。例子包括微處理器、控制器或邏輯設(shè)備。各個(gè)存儲(chǔ)器130、150、160也稱為存儲(chǔ)介質(zhì),可以用于至少臨時(shí)存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)或設(shè)備來實(shí)現(xiàn)。例子包括寄存器、隨機(jī)訪問存儲(chǔ)器(“RAM”)、只讀存儲(chǔ)器(“ROM”)和軟盤。電子電路140可用能夠被配置來執(zhí)行功能的結(jié)構(gòu)或設(shè)備來實(shí)現(xiàn)。例子包括集成電路。計(jì)算機(jī)110可用包括圖1中所表示的元件的結(jié)構(gòu)或設(shè)備來實(shí)現(xiàn)。例子包括通用計(jì)算機(jī)例如個(gè)人計(jì)算機(jī)、專用計(jì)算機(jī)、個(gè)人數(shù)字助理(“PDA”)、電子管理器(organizer)、電子游戲設(shè)備、蜂窩式電話、尋呼設(shè)備或遙控器。聯(lián)網(wǎng)計(jì)算機(jī)170可以上述對(duì)計(jì)算機(jī)110描述的方式來實(shí)現(xiàn)。網(wǎng)絡(luò)連接180可包括多種連接,例如有線連接、無線連接、局域網(wǎng)連接和廣域網(wǎng)連接。
特定的實(shí)施方式可使用電路來執(zhí)行所公開的過程中的一個(gè)或多個(gè)。這種電路例如可包括存儲(chǔ)器、具有或不具有微碼部分或硬件部分的處理器、處理器的微碼部分、處理器的硬件部分、控制器、邏輯設(shè)備、模擬或數(shù)字電路或者芯片或其他集成電路。例如,所公開的過程中的一個(gè)或多個(gè)可通過處理器執(zhí)行存儲(chǔ)在該處理內(nèi)的微碼中的指令來實(shí)現(xiàn),或由例如包括控制硬件狀態(tài)機(jī)的硬件定序器的處理器內(nèi)的硬件實(shí)現(xiàn)。多個(gè)過程還可實(shí)現(xiàn)為例如以軟件或微碼形式運(yùn)行的狀態(tài)機(jī)。
所公開的過程可一般地應(yīng)用于涉及各種數(shù)據(jù)存儲(chǔ)位置的指令。數(shù)據(jù)存儲(chǔ)位置的例子包括處理器寄存器、其他處理器存儲(chǔ)器、其他計(jì)算機(jī)存儲(chǔ)器和外部存儲(chǔ)器。
已描述了多種實(shí)施方式。例如,實(shí)施方式可局限于單個(gè)計(jì)算機(jī)或涉及聯(lián)網(wǎng)到另一個(gè)計(jì)算機(jī)的計(jì)算機(jī)。但是應(yīng)該理解到可作出多種修改。因此,其他實(shí)施方式也在所附權(quán)利要求書的范圍內(nèi)。
權(quán)利要求
1.一種用于執(zhí)行重復(fù)串操作的方法,該方法包括訪問對(duì)具有操作數(shù)大小的重復(fù)串操作的請求;將源數(shù)據(jù)位置或目標(biāo)數(shù)據(jù)位置中的至少一個(gè)對(duì)齊到可被預(yù)定整數(shù)整除的對(duì)齊位置,所述對(duì)齊包括使用具有與所述操作數(shù)大小相等的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作;以及對(duì)齊后,使用具有比所述操作數(shù)大小更大的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作。
2.如權(quán)利要求1所述的方法,還包括將源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置二者對(duì)齊到可被所述預(yù)定整數(shù)整除的對(duì)齊位置,其中執(zhí)行所述一個(gè)或多個(gè)串操作導(dǎo)致所述源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置二者的對(duì)齊。
3.如權(quán)利要求2所述的方法,其中所述對(duì)齊位置代表字節(jié),所述預(yù)定整數(shù)等于8,并且對(duì)齊后執(zhí)行一個(gè)或多個(gè)串操作包括從所述源數(shù)據(jù)位置加載8字節(jié)大小的數(shù)據(jù);以及存儲(chǔ)所加載的8字節(jié)大小的數(shù)據(jù)到所述目標(biāo)數(shù)據(jù)位置。
4.如權(quán)利要求2所述的方法,其中所述對(duì)齊位置代表字節(jié),所述預(yù)定整數(shù)等于16,并且對(duì)齊后執(zhí)行一個(gè)或多個(gè)串操作包括從所述源數(shù)據(jù)位置加載16字節(jié)大小的數(shù)據(jù);以及存儲(chǔ)所加載的16字節(jié)大小的數(shù)據(jù)到所述目標(biāo)數(shù)據(jù)位置。
5.如權(quán)利要求1所述的方法,其中所述源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置中只有一個(gè)對(duì)齊到可被所述預(yù)定整數(shù)整除的對(duì)齊位置。
6.如權(quán)利要求5所述的方法,其中只有所述目標(biāo)數(shù)據(jù)位置對(duì)齊到可被所述預(yù)定整數(shù)整除的對(duì)齊位置。
7.如權(quán)利要求6所述的方法,其中所述對(duì)齊位置代表字節(jié),所述預(yù)定整數(shù)等于16,所述源數(shù)據(jù)位置對(duì)齊到可被8整除的對(duì)齊位置,并且對(duì)齊后執(zhí)行一個(gè)或多個(gè)串操作包括從所述源數(shù)據(jù)位置加載8字節(jié)大小的第一數(shù)據(jù)組;將所述源數(shù)據(jù)位置推進(jìn)8字節(jié);從所述源數(shù)據(jù)位置加載8字節(jié)大小的第二數(shù)據(jù)組;將所述第一和第二數(shù)據(jù)組合并為16字節(jié)的數(shù)據(jù)組;以及將所述16字節(jié)的數(shù)據(jù)組存儲(chǔ)在所述目標(biāo)數(shù)據(jù)位置處。
8.如權(quán)利要求6所述的方法,其中所述對(duì)齊位置代表字節(jié),所述預(yù)定整數(shù)等于16,并且對(duì)齊后執(zhí)行一個(gè)或多個(gè)串操作包括從可被16整除,并且位于所述源數(shù)據(jù)位置處或其下的最接近的對(duì)齊數(shù)據(jù)位置加載16字節(jié)大小的第一數(shù)據(jù)組;從可被16整除,并且位于所述源數(shù)據(jù)位置處或其上的最接近的對(duì)齊數(shù)據(jù)位置加載16字節(jié)大小的第二數(shù)據(jù)組;將所述第一和第二數(shù)據(jù)組合并為對(duì)應(yīng)于所述源數(shù)據(jù)位置處的數(shù)據(jù)的合并的16字節(jié)數(shù)據(jù)組;以及將所述合并的16字節(jié)數(shù)據(jù)組存儲(chǔ)到所述目標(biāo)數(shù)據(jù)位置。
9.如權(quán)利要求1所述的方法,其中對(duì)齊后執(zhí)行一個(gè)或多個(gè)串操作包括從可被所述預(yù)定整數(shù)整除,并且位于所述源數(shù)據(jù)位置處或其下的最接近的對(duì)齊數(shù)據(jù)位置加載第一預(yù)定大小的第一數(shù)據(jù)組;從可被所述預(yù)定整數(shù)整除,并且位于所述源數(shù)據(jù)位置處或其上的最接近的對(duì)齊數(shù)據(jù)位置加載第二預(yù)定大小的第二數(shù)據(jù)組;將所述第一和第二數(shù)據(jù)組合并為對(duì)應(yīng)于所述源數(shù)據(jù)位置處的數(shù)據(jù)的第三預(yù)定大小的合并數(shù)據(jù)組;以及將所述合并數(shù)據(jù)組存儲(chǔ)在所述目標(biāo)數(shù)據(jù)位置處。
10.如權(quán)利要求1所述的方法,其中所述對(duì)齊位置代表字節(jié),并且所述預(yù)定整數(shù)等于一個(gè)大于所述操作數(shù)大小的字節(jié)大小數(shù)量。
11.如權(quán)利要求1所述的方法,其中所述對(duì)齊位置代表字節(jié),并且所述預(yù)定整數(shù)選自由8和16組成的組。
12.如權(quán)利要求1所述的方法,其中對(duì)齊后執(zhí)行一個(gè)或多個(gè)串操作包括前向行進(jìn)。
13.如權(quán)利要求1所述的方法,其中對(duì)齊后執(zhí)行一個(gè)或多個(gè)串操作包括后向行進(jìn)。
14.如權(quán)利要求1所述的方法,其中所述方法由處理器執(zhí)行。
15.一種包括存儲(chǔ)介質(zhì)的制品,所述存儲(chǔ)介質(zhì)上存儲(chǔ)有指令,所述指令被機(jī)器執(zhí)行時(shí)至少導(dǎo)致下述操作訪問對(duì)具有操作數(shù)大小的重復(fù)串操作的請求;將源數(shù)據(jù)位置或目標(biāo)數(shù)據(jù)位置中的至少一個(gè)對(duì)齊到可被預(yù)定整數(shù)整除的對(duì)齊位置,所述對(duì)齊包括使用具有與操作數(shù)大小相等的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作;以及對(duì)齊后,使用具有比所述操作數(shù)大小更大的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作。
16.如權(quán)利要求15所述的制品,其中所述指令被機(jī)器執(zhí)行時(shí)導(dǎo)致將源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置二者對(duì)齊到可被所述預(yù)定整數(shù)整除的對(duì)齊位置,其中執(zhí)行所述一個(gè)或多個(gè)串操作導(dǎo)致所述源數(shù)據(jù)位置和所述目標(biāo)數(shù)據(jù)位置二者的對(duì)齊。
17.如權(quán)利要求15所述的制品,其中對(duì)齊后執(zhí)行一個(gè)或多個(gè)串操作包括從可被所述預(yù)定整數(shù)整除,并且位于所述源數(shù)據(jù)位置處或其下的最接近的對(duì)齊數(shù)據(jù)位置加載第一預(yù)定大小的第一數(shù)據(jù)組;從可被所述預(yù)定整數(shù)整除,并且位于所述源數(shù)據(jù)位置處或其上的最接近的對(duì)齊數(shù)據(jù)位置加載第二預(yù)定大小的第二數(shù)據(jù)組;將所述第一和第二數(shù)據(jù)組合并為對(duì)應(yīng)于所述源數(shù)據(jù)位置處的數(shù)據(jù)的第三預(yù)定大小的合并數(shù)據(jù)組;以及將所述合并數(shù)據(jù)組存儲(chǔ)在所述目標(biāo)數(shù)據(jù)位置處。
18.一種用于執(zhí)行重復(fù)串操作的裝置,該裝置包括用于執(zhí)行至少下述操作的電路訪問對(duì)具有操作數(shù)大小的重復(fù)串操作的請求;將源數(shù)據(jù)位置或目標(biāo)數(shù)據(jù)位置中的至少一個(gè)對(duì)齊到可被預(yù)定整數(shù)整除的對(duì)齊位置,所述對(duì)齊包括使用具有與操作數(shù)大小相等的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作;以及對(duì)齊后,使用具有比所述操作數(shù)大小更大的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作。
19.如權(quán)利要求18所述的裝置,其中所述電路將源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置二者對(duì)齊到可被所述預(yù)定整數(shù)整除的對(duì)齊位置,其中執(zhí)行所述一個(gè)或多個(gè)串操作導(dǎo)致所述源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置二者的對(duì)齊。
20.如權(quán)利要求18所述的裝置,其中對(duì)齊后執(zhí)行一個(gè)或多個(gè)串操作包括從可被所述預(yù)定整數(shù)整除,并且位于所述源數(shù)據(jù)位置處或其下的最接近的對(duì)齊數(shù)據(jù)位置加載第一預(yù)定大小的第一數(shù)據(jù)組;從可被所述預(yù)定整數(shù)整除,并且位于所述源數(shù)據(jù)位置處或其上的最接近的對(duì)齊數(shù)據(jù)位置加載第二預(yù)定大小的第二數(shù)據(jù)組;將所述第一和第二數(shù)據(jù)組合并為對(duì)應(yīng)于所述源數(shù)據(jù)位置處的數(shù)據(jù)的第三預(yù)定大小的合并數(shù)據(jù)組;以及將所述合并數(shù)據(jù)組存儲(chǔ)在所述目標(biāo)數(shù)據(jù)位置處。
21.如權(quán)利要求18所述的裝置,其中所述電路包括存儲(chǔ)器,該存儲(chǔ)器上存儲(chǔ)有用于執(zhí)行下述操作中至少之一的指令訪問對(duì)具有操作數(shù)大小的重復(fù)串操作的請求;將源數(shù)據(jù)位置或目標(biāo)數(shù)據(jù)位置中的至少一個(gè)對(duì)齊到可被預(yù)定整數(shù)整除的對(duì)齊位置,所述對(duì)齊包括使用具有與操作數(shù)大小相等的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作;以及對(duì)齊后,使用具有比所述操作數(shù)大小更大的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作。
22.如權(quán)利要求18所述的裝置,其中所述電路包括用于執(zhí)行下述操作中至少之一的處理器訪問對(duì)具有操作數(shù)大小的重復(fù)串操作的請求;將源數(shù)據(jù)位置或目標(biāo)數(shù)據(jù)位置中的至少一個(gè)對(duì)齊到可被預(yù)定整數(shù)整除的對(duì)齊位置,所述對(duì)齊包括使用具有與操作數(shù)大小相等的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作;以及對(duì)齊后,使用具有比所述操作數(shù)大小更大的大小的數(shù)據(jù)來執(zhí)行一個(gè)或多個(gè)串操作。
23.如權(quán)利要求18所述的裝置,其中所述電路包括存儲(chǔ)器;處理器;以及連接所述存儲(chǔ)器和處理器的總線。
24.一種用于執(zhí)行重復(fù)串操作的方法,該方法包括確定與重復(fù)串操作相關(guān)聯(lián)的操作數(shù)大小;如果所述操作數(shù)大小是預(yù)定大小則發(fā)射第一預(yù)定數(shù)量的迭代;以及否則發(fā)射第二預(yù)定數(shù)量的迭代。
25.如權(quán)利要求24所述的方法,其中基于對(duì)重復(fù)字節(jié)串操作的所請求數(shù)量的迭代的預(yù)測來選擇所述迭代的第一預(yù)定數(shù)量。
26.如權(quán)利要求24所述的方法,其中所述迭代的第一預(yù)定數(shù)量是3,所述迭代的第二預(yù)定數(shù)量是8,所述預(yù)定大小是一個(gè)字節(jié),并且對(duì)于字或雙字的操作數(shù)大小發(fā)射8次迭代。
27.如權(quán)利要求24所述的方法,還包括確定所述重復(fù)串操作所請求的迭代數(shù)量大于所述已發(fā)射的迭代的預(yù)定數(shù)量,其中所述已發(fā)射的迭代的預(yù)定數(shù)量是所述第一預(yù)定數(shù)量或所述第二預(yù)定數(shù)量;以及如果需要?jiǎng)t發(fā)射額外的迭代,以使得恰好發(fā)射所述重復(fù)串操作所請求的數(shù)量的迭代。
28.如權(quán)利要求27所述的方法,其中確定所述所請求的迭代數(shù)量大于所述預(yù)定數(shù)量在發(fā)射所述預(yù)定數(shù)量的迭代之后執(zhí)行。
29.如權(quán)利要求27所述的方法,其中確定所述所請求的迭代數(shù)量大于所述預(yù)定數(shù)量在發(fā)射所述預(yù)定數(shù)量的迭代之前執(zhí)行。
30.一種用于執(zhí)行重復(fù)串操作的裝置,該裝置包括用于執(zhí)行至少下述操作的電路確定與重復(fù)串操作相關(guān)聯(lián)的操作數(shù)大??;如果所述操作數(shù)大小是預(yù)定大小則發(fā)射第一預(yù)定數(shù)量的迭代;以及否則發(fā)射第二預(yù)定數(shù)量的迭代。
31.如權(quán)利要求30所述的裝置,其中所述電路包括存儲(chǔ)器,該存儲(chǔ)器上存儲(chǔ)有用于執(zhí)行下述操作中至少之一的指令確定與重復(fù)串操作相關(guān)聯(lián)的操作數(shù)大??;如果所述操作數(shù)大小是預(yù)定大小則發(fā)射第一預(yù)定數(shù)量的迭代;以及否則發(fā)射第二預(yù)定數(shù)量的迭代。
32.如權(quán)利要求30所述的裝置,其中所述電路包括用于執(zhí)行下述操作中至少之一的處理器確定與重復(fù)串操作相關(guān)聯(lián)的操作數(shù)大?。蝗绻霾僮鲾?shù)大小是預(yù)定大小則發(fā)射第一預(yù)定數(shù)量的迭代;以及否則發(fā)射第二預(yù)定數(shù)量的迭代。
33.如權(quán)利要求30所述的裝置,其中所述電路可操作來執(zhí)行至少下述進(jìn)一步操作確定所述重復(fù)串操作所請求的迭代數(shù)量大于所述已發(fā)射的迭代的預(yù)定數(shù)量,其中所述已發(fā)射的迭代的預(yù)定數(shù)量是所述第一預(yù)定數(shù)量或所述第二預(yù)定數(shù)量;以及如果需要?jiǎng)t發(fā)射額外的迭代,以使得恰好發(fā)射所述重復(fù)串操作所請求的數(shù)量的迭代。
34.一種包括存儲(chǔ)介質(zhì)的制品,所述存儲(chǔ)介質(zhì)上存儲(chǔ)有指令,所述指令被機(jī)器執(zhí)行時(shí)至少會(huì)導(dǎo)致下述操作確定與重復(fù)串操作相關(guān)聯(lián)的操作數(shù)大?。蝗绻霾僮鲾?shù)大小是預(yù)定大小則發(fā)射第一預(yù)定數(shù)量的迭代;以及否則發(fā)射第二預(yù)定數(shù)量的迭代。
35.如權(quán)利要求34所述的制品,其中所述存儲(chǔ)介質(zhì)上存儲(chǔ)有指令,所述指令被機(jī)器執(zhí)行時(shí)至少導(dǎo)致下述進(jìn)一步操作確定所述重復(fù)串操作所請求的迭代數(shù)量大于所述已發(fā)射的迭代的預(yù)定數(shù)量,其中所述已發(fā)射的迭代的預(yù)定數(shù)量是所述第一預(yù)定數(shù)量或所述第二預(yù)定數(shù)量;以及如果需要?jiǎng)t發(fā)射額外的迭代,以使得恰好發(fā)射所述重復(fù)串操作所請求的數(shù)量的迭代。
36.一種用于執(zhí)行重復(fù)串操作的方法,該方法包括恰好發(fā)射重復(fù)串操作所請求的數(shù)量的迭代;以及執(zhí)行所述串操作所請求的數(shù)量的迭代,所述串操作用于轉(zhuǎn)移具有特定字節(jié)長度的數(shù)據(jù),所述執(zhí)行包括使用硬件計(jì)數(shù)器存儲(chǔ)迭代值,該迭代值用于標(biāo)識(shí)源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置二者;在硬件中將存儲(chǔ)在硬件計(jì)數(shù)器中的所述迭代值乘以所述特定字節(jié)長度,以確定所述源數(shù)據(jù)位置和所述目標(biāo)數(shù)據(jù)位置的實(shí)際存儲(chǔ)器地址偏移;每次迭代后,將存儲(chǔ)在所述硬件計(jì)數(shù)器中的迭代值改變1;以及將所述實(shí)際存儲(chǔ)器地址偏移提供給微碼。
37.一種用于執(zhí)行重復(fù)串操作的裝置,該裝置包括用于執(zhí)行至少下述操作的電路恰好發(fā)射重復(fù)串操作所請求的數(shù)量的迭代;以及執(zhí)行所述串操作所請求的數(shù)量的迭代,所述串操作用于轉(zhuǎn)移具有特定字節(jié)長度的數(shù)據(jù),所述執(zhí)行包括使用硬件計(jì)數(shù)器存儲(chǔ)迭代值,該迭代值用于標(biāo)識(shí)源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置二者;在硬件中將存儲(chǔ)在硬件計(jì)數(shù)器中的所述迭代值乘以所述特定字節(jié)長度,以確定所述源數(shù)據(jù)位置和所述目標(biāo)數(shù)據(jù)位置的實(shí)際存儲(chǔ)器地址偏移;每次迭代后,將存儲(chǔ)在所述硬件計(jì)數(shù)器中的迭代值改變1;以及將所述實(shí)際存儲(chǔ)器地址偏移提供給微碼。
38.一種包括存儲(chǔ)介質(zhì)的制品,所述存儲(chǔ)介質(zhì)上存儲(chǔ)有指令,所述指令被機(jī)器執(zhí)行時(shí)至少導(dǎo)致下述操作對(duì)于位于預(yù)定范圍之內(nèi)的所請求的數(shù)量的任何值,恰好發(fā)射重復(fù)串操作所請求的數(shù)量的迭代;以及執(zhí)行所述串操作所請求的數(shù)量的迭代,所述串操作用于轉(zhuǎn)移具有特定字節(jié)長度的數(shù)據(jù),所述執(zhí)行包括使用硬件計(jì)數(shù)器存儲(chǔ)迭代值,該迭代值用于標(biāo)識(shí)源數(shù)據(jù)位置和目標(biāo)數(shù)據(jù)位置二者;在硬件中將存儲(chǔ)在硬件計(jì)數(shù)器中的所述迭代值乘以所述特定字節(jié)長度,以確定所述源數(shù)據(jù)位置和所述目標(biāo)數(shù)據(jù)位置的實(shí)際存儲(chǔ)器地址偏移;每次迭代后,將存儲(chǔ)在所述硬件計(jì)數(shù)器中的迭代值改變1;以及將所述實(shí)際存儲(chǔ)器地址偏移提供給微碼。
全文摘要
執(zhí)行重復(fù)串操作可包括將源數(shù)據(jù)位置或目標(biāo)數(shù)據(jù)位置對(duì)齊到可被預(yù)定整數(shù)整除的位置,所述對(duì)齊包括使用這樣的數(shù)據(jù)來執(zhí)行串操作,所述數(shù)據(jù)所具有的大小等于操作數(shù)的大小。對(duì)齊后,可使用具有比操作數(shù)大小更大的大小的數(shù)據(jù)來執(zhí)行串操作。執(zhí)行重復(fù)串操作可包括如果操作數(shù)大小是預(yù)定大小則發(fā)射第一預(yù)定數(shù)量的迭代,否則發(fā)射第二預(yù)定數(shù)量的迭代。執(zhí)行重復(fù)串操作可包括確定重復(fù)串操作中所請求的迭代數(shù)量位于預(yù)定的多數(shù)量范圍之內(nèi),以及對(duì)于在該范圍之內(nèi)的所請求數(shù)量的任何值,恰好發(fā)射所請求數(shù)量的迭代。
文檔編號(hào)G06F9/315GK1695115SQ03824642
公開日2005年11月9日 申請日期2003年8月28日 優(yōu)先權(quán)日2002年8月28日
發(fā)明者鄒湘, 拉杰什·帕沙薩拉斯, 麥德哈文·帕沙薩拉斯, 斯科特·羅杰斯 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
永春县| 霍城县| 汝阳县| 林州市| 东源县| 吴川市| 黄龙县| 休宁县| 伊金霍洛旗| 伊吾县| 兰溪市| 威信县| 手游| 沅陵县| 东城区| 镇巴县| 台东县| 澜沧| 芦溪县| 延津县| 桦南县| 铁岭市| 虹口区| 美姑县| 自治县| 衡山县| 曲阳县| 肇庆市| 隆昌县| 湘潭市| 宜兰县| 义乌市| 德州市| 达孜县| 长子县| 泗水县| 武乡县| 衡东县| 保山市| 准格尔旗| 永济市|