一種內(nèi)存復(fù)制方法及裝置制造方法
【專利摘要】一種內(nèi)存復(fù)制方法及裝置;方法包括:判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L≥N≥max-min。本申請(qǐng)能提高內(nèi)存復(fù)制的性能。
【專利說明】—種內(nèi)存復(fù)制方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種內(nèi)存復(fù)制方法及裝置。
【背景技術(shù)】
[0002]應(yīng)用程序經(jīng)常會(huì)使用一些通用的操作,比如將一塊內(nèi)存的數(shù)據(jù)復(fù)制到另外一塊空間、比較兩塊內(nèi)存數(shù)據(jù)是否有差異、計(jì)算一個(gè)字符串的長(zhǎng)度等。
[0003]如果不進(jìn)行改進(jìn)就會(huì)導(dǎo)致多個(gè)應(yīng)用程序之間有大量重復(fù)性代碼,總體代碼尺寸變大需要更多的內(nèi)存,導(dǎo)致更多指令緩存失效,性能下降。由于這些操作是頻繁使用,Amdahl法則要求我們優(yōu)化那些占有CPU時(shí)間比例大的函數(shù),這樣才能提高程序的整體性能。因此將所有的頻繁操作的函數(shù)單獨(dú)拿出來做成一個(gè)或多個(gè)程序可以共享的函數(shù)庫,這樣所有程序可以僅僅調(diào)用一個(gè)函數(shù),去掉重復(fù)性函數(shù)代碼,減少內(nèi)存占有量,任何一個(gè)程序?qū)Υ撕瘮?shù)的調(diào)用都會(huì)預(yù)熱緩存,使后面的使用者更快的運(yùn)行。
[0004]內(nèi)存復(fù)制函數(shù)memcpy就是屬于上面提到的庫函數(shù),而且使用次數(shù)相當(dāng)大,越來越被業(yè)界所重視,為了優(yōu)化這個(gè)函數(shù)經(jīng)常要寫出數(shù)千行代碼,最近一個(gè)memcpy函數(shù)達(dá)到了4700行匯編代碼,但是將這段代碼放到真實(shí)的環(huán)境中后,由于代碼包含較多跳轉(zhuǎn)指令,而CPU指令預(yù)測(cè)又沒有達(dá)到十分精確的地步,導(dǎo)致優(yōu)化的結(jié)果被預(yù)測(cè)失敗的負(fù)面效應(yīng)完全遮擋,所以優(yōu)化人員將提高預(yù)測(cè)準(zhǔn)確率融入了 memcpy函數(shù)里面,這將帶來更好的結(jié)果。
[0005]目前的一種方案是完全采用對(duì)齊模式;在這種實(shí)現(xiàn)方式中,需要充分利用CPU流水線處理內(nèi)存訪問的過程,包括前端取指令,解碼,內(nèi)存訪問方式,緩存對(duì)齊。理想情況下這種操作能帶來最大的內(nèi)存訪問量。
[0006]但是該方案僅僅在所有指令預(yù)測(cè)成功的情況下才會(huì)取得最大吞吐量,這在實(shí)際應(yīng)用上并不現(xiàn)實(shí),必然會(huì)有指令預(yù)測(cè)失敗的現(xiàn)象;同時(shí)由于小數(shù)據(jù)的訪問時(shí)間短,所取得的性能提高更是被指令預(yù)測(cè)錯(cuò)誤的負(fù)面所遮掩。
[0007]另一種方案充分考慮指令預(yù)測(cè)所帶來的負(fù)面影響,將復(fù)制模式設(shè)計(jì)的盡可能簡(jiǎn)單,從而節(jié)省上一方案中為了內(nèi)存對(duì)齊而添加的跳轉(zhuǎn)指令。
[0008]該方案雖然減少了預(yù)測(cè)失敗,但同時(shí)也減少了 CPU內(nèi)存訪問的吞吐量。
[0009]還有一種方案完全使用Intel提供的快數(shù)據(jù)復(fù)制模式,在帶來盡可能提高內(nèi)存吞吐量的基礎(chǔ)上,不產(chǎn)生跳轉(zhuǎn)指令預(yù)測(cè)錯(cuò)誤。
[0010]該方案在避免預(yù)測(cè)錯(cuò)誤的同時(shí)提高內(nèi)存訪問量,但是由于CPU需要訪問MS_R0M,所以啟動(dòng)的時(shí)候,需要“預(yù)熱”階段,這個(gè)階段帶來很大延遲,嚴(yán)重影響中小字節(jié)復(fù)制。
【發(fā)明內(nèi)容】
[0011 ] 本發(fā)明要解決的技術(shù)問題是如何提高內(nèi)存復(fù)制的性能。
[0012]為了解決上述問題,本申請(qǐng)?zhí)峁┝艘环N內(nèi)存復(fù)制方法,包括:
[0013]判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0014]當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0015]從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;Wrsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L彡N彡max-min。
[0016]可選地,所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
[0017]可選地,所述第一長(zhǎng)度閾值為256字節(jié)。
[0018]可選地,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間包括8個(gè)長(zhǎng)度區(qū)間,第i個(gè)長(zhǎng)度區(qū)間的上、下限值分別為2--、2Η ;所述N為所確定的長(zhǎng)度區(qū)間的min。
[0019]可選地,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中的步驟包括:
[0020]從所述待復(fù)制內(nèi)存的源地址rsi開始,依次復(fù)制P次16個(gè)字節(jié)到目的地址rdi開始的內(nèi)存中;P Smin除以16的商;
[0021]從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L_N開始的N個(gè)字節(jié)中的步驟包括:
[0022]從rsi+L-min開始,依次復(fù)制P次16個(gè)字節(jié)到rdi+L_N開始的內(nèi)存中。
[0023]可選地,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述從所述待復(fù)制內(nèi)存的源地址的起始位置rsi開始,復(fù)制min個(gè)字節(jié)到目的地址的步驟包括:
[0024]從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;
[0025]從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L_N開始的N個(gè)字節(jié)中的步驟包括:
[0026]從rsi+L-min開始,復(fù)制min個(gè)字節(jié)到rdi+L-min開始的min個(gè)字節(jié)中。
[0027]可選地,所述的方法還包括:
[0028]如果長(zhǎng)度L大于或等于第一長(zhǎng)度閾值,則判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值;
[0029]當(dāng)長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),從rsi+L-CL開始,復(fù)制CL個(gè)字節(jié)到rdi+L_CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪;
[0030]將目的地址32字節(jié)對(duì)齊;
[0031]從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中;復(fù)制后將rsi和rdi各增加CL個(gè)字節(jié),將L減去CL;
[0032]判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則返回所述從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中的步驟。
[0033]可選地,所述第二長(zhǎng)度閾值為2048個(gè)字節(jié),所述CL為128個(gè)字節(jié)。
[0034]本申請(qǐng)還提供了一種內(nèi)存復(fù)制方法,包括:
[0035]判斷用于保存待復(fù)制數(shù)據(jù)的內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0036]當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0037]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中;將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L彡N彡max-min。
[0038]可選地,所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
[0039]可選地,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間的上、下限值分別為2--、2Η ;所述N為所確定的長(zhǎng)度區(qū)間的min ;i為正整數(shù)且21等于所述第一長(zhǎng)度閾值。
[0040]可選地,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中的步驟包括:
[0041]從目的地址rdi開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù);P為min除以16的商;
[0042]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中的步驟包括:
[0043]從rdi+L-min開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
[0044]可選地,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中的步驟包括:
[0045]從目的地址rdi開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù);
[0046]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中的步驟包括:
[0047]從rdi+L-min開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
[0048]可選地,所述的方法還包括:
[0049]如果長(zhǎng)度L大于或等于第一長(zhǎng)度閾值,則判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值;
[0050]當(dāng)長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪;
[0051 ] 將目的地址32字節(jié)對(duì)齊;
[0052]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中;保存后將rdi增加CL個(gè)字節(jié),將L減去CL;
[0053]判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則返回所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中的步驟。
[0054]本申請(qǐng)還提供了一種內(nèi)存復(fù)制方法,包括:
[0055]判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0056]當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0057]從所述待復(fù)制內(nèi)存的源地址rsi開始復(fù)制min個(gè)字節(jié),從rsi+L-N處開始復(fù)制N個(gè)字節(jié);其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L ^ N ^ max—min。
[0058]本申請(qǐng)還提供了一種內(nèi)存復(fù)制裝置,包括:
[0059]第一判斷單元,用于判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0060]第二判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0061]第一復(fù)制單元,用于從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;從rsi+L-N開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L ^ N ^ max—min。
[0062]可選地,所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
[0063]可選地,所述第一長(zhǎng)度閾值為256字節(jié)。
[0064]可選地,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間包括8個(gè)長(zhǎng)度區(qū)間,第i個(gè)長(zhǎng)度區(qū)間的上、下限值分別為2--、2Η ;所述N為所確定的長(zhǎng)度區(qū)間的min。
[0065]可選地,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中是指:
[0066]所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,依次復(fù)制P次16個(gè)字節(jié)到目的地址rdi開始的內(nèi)存中;P為min除以16的商;
[0067]所述第一復(fù)制單元從rsi+L-N開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中是指:
[0068]所述第一復(fù)制單元從rsi+L-min開始,依次復(fù)制P次16個(gè)字節(jié)到rdi+L-N開始的內(nèi)存中。
[0069]可選地,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中是指:
[0070]所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;
[0071]所述第一復(fù)制單元從rsi+L-N開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中是指:
[0072]所述第一復(fù)制單元從rsi+L-min開始,復(fù)制min個(gè)字節(jié)到rdi+L-min開始的min個(gè)字節(jié)中。
[0073]可選地,所述的裝置還包括:
[0074]第三判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L大于或等于第一長(zhǎng)度閾值時(shí),判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值;
[0075]第二復(fù)制單元,用于當(dāng)所述第三判斷單元的判斷結(jié)果為長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),從rsi+L-CL開始,復(fù)制CL個(gè)字節(jié)到rdi+L_CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪;
[0076]地址對(duì)齊單元,用于將目的地址32字節(jié)對(duì)齊;
[0077]第三復(fù)制單元,用于從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中;復(fù)制后將rsi和rdi各增加CL個(gè)字節(jié),將L減去CL ;
[0078]第四判斷單元,用于判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則指示所述第三復(fù)制單元再次進(jìn)行從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中的操作。
[0079]可選地,所述第二長(zhǎng)度閾值為2048個(gè)字節(jié),所述CL為128個(gè)字節(jié)。
[0080]本申請(qǐng)還提供了一種內(nèi)存復(fù)制裝置,包括:
[0081]第一判斷單元,用于判斷用于保存待復(fù)制數(shù)據(jù)的內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0082]第二判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L大于或等于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0083]第一復(fù)制單元,用于將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中;將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L彡N彡max-min。
[0084]可選地,所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
[0085]可選地,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間的上、下限值分別為2Μ、2η ;所述N為所確定的長(zhǎng)度區(qū)間的min ;i為正整數(shù)且21等于所述第一長(zhǎng)度閾值。
[0086]可選地,所述第一復(fù)制單元對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中是指:
[0087]所述第一復(fù)制單元從目的地址rdi開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù);P為min除以16的商;
[0088]所述第一復(fù)制單元將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中是指:
[0089]所述第一復(fù)制單元從rdi+L-min開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
[0090]可選地,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中是指:
[0091]從目的地址rdi開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù);
[0092]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中是指:
[0093]從rdi+L-min開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
[0094]可選地,所述的裝置還包括:
[0095]第三判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L大于或等于第一長(zhǎng)度閾值時(shí),判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值;
[0096]第二復(fù)制單元,用于當(dāng)所述第三判斷單元的判斷結(jié)果為長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪;
[0097]地址對(duì)齊單元,用于將目的地址32字節(jié)對(duì)齊;
[0098]第三復(fù)制單元,用于將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中;保存后將rdi增加CL個(gè)字節(jié),將L減去CL ;
[0099]第四判斷單元,用于判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則指示所述第三復(fù)制單元進(jìn)行所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中的操作。
[0100]本申請(qǐng)還提供了一種內(nèi)存復(fù)制裝置,包括:
[0101]第一判斷單元,用于判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0102]第二判斷單元,用于當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0103]第一復(fù)制單元,用于從所述待復(fù)制內(nèi)存的源地址rsi開始復(fù)制min個(gè)字節(jié),從rsi+L-N處開始復(fù)制N個(gè)字節(jié);其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),? L ^ N ^ max-min。
[0104]本申請(qǐng)的至少一種實(shí)施方式通過冗余復(fù)制,盡量減少內(nèi)存復(fù)制過程中跳轉(zhuǎn)指令的使用,從而可減少指令預(yù)測(cè)錯(cuò)誤,提高復(fù)制性能。在本申請(qǐng)的又一實(shí)施方式中,對(duì)待復(fù)制內(nèi)存長(zhǎng)度小于第一長(zhǎng)度閾值的情況、位于第一、第二長(zhǎng)度閾值之間的情況、以及大于第二長(zhǎng)度閾值的情況,針對(duì)各情況的特點(diǎn)分別提出了各自的復(fù)制策略,避免了全采用一種復(fù)制策略有可能不利于某些情況提高復(fù)制性能的問題。在本申請(qǐng)的又一實(shí)施方式中,對(duì)于每次按照固定字節(jié)復(fù)制后的剩余字節(jié)進(jìn)行了巧妙的處理,避免了跳轉(zhuǎn)指令的加入。當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品必不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
【專利附圖】
【附圖說明】
[0105]圖1是實(shí)施例一的一種內(nèi)存復(fù)制方法的流程示意圖;
[0106]圖2a和圖2b是實(shí)施例一中步驟S103的執(zhí)行示意圖;
[0107]圖3是實(shí)施例一的一種實(shí)施方式的流程示意圖;
[0108]圖4是實(shí)施例一中步驟S105的執(zhí)行示意圖;
[0109]圖5是實(shí)施例一中步驟S107在一備選方案中的具體流程示意圖。
【具體實(shí)施方式】
[0110]下面將結(jié)合附圖及實(shí)施例對(duì)本申請(qǐng)的技術(shù)方案進(jìn)行更詳細(xì)的說明。
[0111]需要說明的是,如果不沖突,本申請(qǐng)實(shí)施例以及實(shí)施例中的各個(gè)特征可以相互結(jié)合,均在本申請(qǐng)的保護(hù)范圍之內(nèi)。另外,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0112]在一個(gè)典型的配置中,進(jìn)行內(nèi)存復(fù)制操作的計(jì)算設(shè)備可包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
[0113]內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
[0114]計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM),快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
[0115]實(shí)施例一,一種內(nèi)存復(fù)制方法,如圖1所示,包括:
[0116]S101、判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值,當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí)進(jìn)行步驟S102 ;
[0117]S102、在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0118]S103、從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;從rsi+L-N個(gè)字節(jié)處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為大于或等于max-min、且小于或等于L的固定整數(shù)。
[0119]每次進(jìn)行內(nèi)存復(fù)制時(shí),待復(fù)制內(nèi)存的長(zhǎng)度、源地址和目的地址都是確定的,可以但不限于通過內(nèi)存復(fù)制函數(shù)中設(shè)定的參數(shù)得知上述長(zhǎng)度L、源地址rsi和目的地址rdi。
[0120]本實(shí)施例中,步驟S103從從rsi+L-N個(gè)字節(jié)處開始復(fù)制N個(gè)字節(jié),相當(dāng)于從待復(fù)制內(nèi)存的終點(diǎn)(rsi+L-Ι)開始往rsi的方向復(fù)制N個(gè)字節(jié),且復(fù)制的字節(jié)數(shù)不大于L并至少為max-min個(gè),這樣可以在不加入跳轉(zhuǎn)指令的情況下,保證復(fù)制的都是待復(fù)制內(nèi)存,并保證待復(fù)制內(nèi)存每個(gè)字節(jié)都被復(fù)制,具體分析如下。
[0121]L等于max時(shí)的情況如圖2a所示,步驟S103中一方面從rsi開始復(fù)制min個(gè)字節(jié)(即復(fù)制到圖2a中的rsi+min-1處),另一方面還從本次復(fù)制的終點(diǎn)rsi+L-Ι (即圖2a中的rsi+max-1)開始,向rsi所在的方向復(fù)制N個(gè)字節(jié)(當(dāng)N=max_min時(shí),即復(fù)制圖2a中從rsi+min到rsi+max-1的內(nèi)存);圖2a中的箭頭僅用于說明計(jì)算字節(jié)個(gè)數(shù)的方向??梢?步驟S103可將rsi到rsi+max-Ι這個(gè)范圍里的內(nèi)存都復(fù)制到,且所復(fù)制的內(nèi)存都屬于這個(gè)范圍。
[0122]L小于max時(shí)的情況如圖2b所示,步驟103中一方面會(huì)從rsi開始復(fù)制min個(gè)字節(jié)(即復(fù)制到圖2b中的rsi+min-1處),另一方面還從本次復(fù)制的終點(diǎn)rsi+L-Ι開始,向rsi所在的方向復(fù)制N個(gè)字節(jié)(即復(fù)制圖2b中從rsi+L-N到rsi+L-Ι的內(nèi)存);圖2b中的箭頭僅用于說明計(jì)算字節(jié)個(gè)數(shù)的方向??梢?,步驟S103同樣可將rsi到rsi+max-Ι這個(gè)范圍里的內(nèi)存都復(fù)制到,且所復(fù)制的內(nèi)存未超出該范圍;而且步驟S103中將有至少min-L+N個(gè)字節(jié)的內(nèi)存會(huì)被復(fù)制兩次;當(dāng)N=max-min時(shí),即:有max_L個(gè)字節(jié)被復(fù)制兩次。
[0123]從上述分析可知,本實(shí)施例通過巧妙的設(shè)計(jì),當(dāng)復(fù)制長(zhǎng)度小于第一長(zhǎng)度閾值的內(nèi)存時(shí),通過部分冗余復(fù)制的代價(jià),換取了在復(fù)制中不使用任何跳轉(zhuǎn)指令的優(yōu)勢(shì),這樣可有效減少預(yù)測(cè)錯(cuò)誤所帶來的延誤;經(jīng)過測(cè)試,本實(shí)施方式在復(fù)制長(zhǎng)度小于第一長(zhǎng)度閾值的內(nèi)存時(shí),可大大減少跳轉(zhuǎn)指令的預(yù)測(cè)錯(cuò)誤,提高復(fù)制操作的性能。
[0124]本實(shí)施例的一種實(shí)施方式中,所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。比如max-min為31,則N為32 ;max-min為6,則N為8。
[0125]該實(shí)施方式的一種備選方案中,可以為不同的長(zhǎng)度區(qū)間分別預(yù)設(shè)對(duì)應(yīng)的N值;根據(jù)確定的長(zhǎng)度區(qū)間就可以得到N的值。
[0126]本實(shí)施例的一種實(shí)施方式中,步驟S103中,復(fù)制內(nèi)存時(shí)通過寄存器進(jìn)行中轉(zhuǎn)。其它實(shí)施方式中,也可以直接復(fù)制或采用其它方式中轉(zhuǎn)。
[0127]本實(shí)施例的一種實(shí)施方式中,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間所包含的長(zhǎng)度值依次相連但互不重疊,且該多個(gè)預(yù)定的長(zhǎng)度區(qū)間中長(zhǎng)度值的總集合可覆蓋從I至所述第一長(zhǎng)度閾值減I的整個(gè)范圍。
[0128]本實(shí)施例的一種實(shí)施方式中,所述第一長(zhǎng)度閾值可以但不限于為256字節(jié)。在其它實(shí)施方式中,也可以根據(jù)經(jīng)驗(yàn)或試驗(yàn)結(jié)果,找出復(fù)制性能受跳轉(zhuǎn)指令預(yù)測(cè)正確率影響較大的長(zhǎng)度范圍,以確定所述第一長(zhǎng)度閾值;對(duì)于小于第一長(zhǎng)度閾值的長(zhǎng)度,按照上述步驟S103復(fù)制,就可以不采用跳轉(zhuǎn)指令。
[0129]該實(shí)施方式的一種備選方案中,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間包括8個(gè)長(zhǎng)度區(qū)間,第i個(gè)長(zhǎng)度區(qū)間的上、下限值分別為2--、2Η,即所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間劃分如下:
[0130]第I個(gè)長(zhǎng)度區(qū)間為[1,I];
[0131]第2個(gè)長(zhǎng)度區(qū)間為[2,3];
[0132]第3個(gè)長(zhǎng)度區(qū)間為[4,7];
[0133]第4個(gè)長(zhǎng)度區(qū)間為[8,15];
[0134]第5個(gè)長(zhǎng)度區(qū)間為[16,31];
[0135]第6個(gè)長(zhǎng)度區(qū)間為[32,63];
[0136]第7個(gè)長(zhǎng)度區(qū)間為[64,127];
[0137]第8個(gè)長(zhǎng)度區(qū)間為[128,255](長(zhǎng)度L等于256時(shí)也可以按照步驟S103進(jìn)行復(fù)制,如果這樣的話,該長(zhǎng)度區(qū)間相應(yīng)改為[128,256])。
[0138]對(duì)于上述8個(gè)長(zhǎng)度區(qū)間,N依次為:1、2、4、8、16、32、64、128,也就是等于各長(zhǎng)度區(qū)間的min。
[0139]本實(shí)施例對(duì)于長(zhǎng)度L為O時(shí)的情況也可以一樣進(jìn)行處理,可以將長(zhǎng)度L=O對(duì)應(yīng)于長(zhǎng)度區(qū)間[0,O],將長(zhǎng)度L=O時(shí)的N設(shè)置為O。
[0140]在其它備選方案中,也可以按照別的方式劃分長(zhǎng)度區(qū)間;比如可以將上述8個(gè)長(zhǎng)度區(qū)間進(jìn)行任意的合并;再比如將各長(zhǎng)度區(qū)間的上、下限各加I ;還可以將各長(zhǎng)度區(qū)間的上、下限值定為其它值。
[0141]本備選方案中,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中的步驟具體可以包括:
[0142]從所述待復(fù)制內(nèi)存的源地址rsi開始,依次復(fù)制P次16個(gè)字節(jié)到目的地址rdi開始的內(nèi)存中;P Smin除以16的商;
[0143]從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中的步驟具體可以包括:
[0144]從rsi+L-min開始,依次復(fù)制P次16個(gè)字節(jié)到rdi+L-N開始的內(nèi)存中。
[0145]本備選方案中,對(duì)于min小于16的長(zhǎng)度區(qū)間,從所述待復(fù)制內(nèi)存的源地址的起始位置rsi開始,復(fù)制min個(gè)字節(jié)到目的地址的步驟具體可以包括:
[0146]從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的內(nèi)存中;
[0147]從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中的步驟具體可以包括:
[0148]從rsi+L-min開始,復(fù)制min個(gè)字節(jié)到rdi+L-min開始的內(nèi)存中。
[0149]本備選方案中,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,復(fù)制時(shí)采用四個(gè)同樣大小的16字節(jié)寄存器即可。對(duì)于min小于16的長(zhǎng)度區(qū)間,復(fù)制時(shí)采用兩個(gè)和min —樣大小的寄存器(即8字節(jié)、4字節(jié)、2字節(jié)、I字節(jié)的寄存器)即可。本備選方案選擇每次復(fù)制16字節(jié)的寄存器是因?yàn)槊?次內(nèi)存操作最多產(chǎn)生一次跨越緩存行的情況(緩存行為64字節(jié)),同時(shí)可以最大限度利用寄存器的容量,根據(jù)這個(gè)原因,如果復(fù)制的字節(jié)大于16字節(jié),則選擇16字節(jié)寄存器,而不是32字節(jié)寄存器或者8字節(jié)寄存器,32字節(jié)寄存器會(huì)導(dǎo)致更頻繁的跨越緩存行的現(xiàn)象(幾乎每?jī)纱尾僮鳟a(chǎn)生一次跨越緩存行),8字節(jié)寄存器則每次只能使用8個(gè)字節(jié)因此需要更多的內(nèi)存操作指令。因此,該備選方案中可以一次性完成內(nèi)存的復(fù)制,進(jìn)一步提高了復(fù)制的性能。當(dāng)然,在其它備選方案中,也可以使用其它大小的寄存器,比如32字節(jié)寄存器、8字節(jié)寄存器等。
[0150]在一個(gè)具體的例子中,所確定的長(zhǎng)度區(qū)間為32?63,N為32,P為2,代碼如下所示,其中rdx即前文的長(zhǎng)度L,/**/中為代碼功能的解釋。
[0151]cmp$32, %rdx/*比較需復(fù)制字節(jié)長(zhǎng)度是否于32*/
[0152]jb L(less_32bytes)/*如果需復(fù)制字節(jié)長(zhǎng)度小于32則離開,下面將復(fù)制介于32?63個(gè)字節(jié)*/
[0153]vmovups (%rsi), %xmm0/* 復(fù)制 rsi 開始的 16 個(gè)字節(jié)到寄存器 xmmO*/
[0154]vmovupsOxlO (%rsi), 0/oxmm1 /* 復(fù)制(rsi+16)開始的 16 個(gè)字節(jié)到寄存器 xmml */
[0155]vmovups-0x20 (%rdx, %rsi), 0/oxmm2/* 復(fù)制(rsi+rdx-32)開始的 16 個(gè)字節(jié)到寄存器 xmm2*/
[0156]vmovups-OxlO (%rdx, %rsi), %xmm3/* 復(fù)制(rsi+rdx-16)開始的 16 個(gè)字節(jié)到寄存器 xmm3*/
[0157]vmovups%xmmO, (%rdi) /*把寄存器xmmO的數(shù)據(jù)復(fù)制到rdi開始的16個(gè)字節(jié)中*/
[0158]vmovups%xmml, OxlO (%rdi)/* 把寄存器 xmml 的數(shù)據(jù)復(fù)制到(rdi+16)開始的 16 個(gè)子節(jié)中*/
[0159]vmovups%xmm2,-0x20 (%rdx, %rdi)/* 把寄存器 xmm2 的數(shù)據(jù)復(fù)制到(rdx+rdi —32)開始的16個(gè)字節(jié)中*/
[0160]vmovups%xmm3,-OxlO (%rdx, %rdi)/* 把寄存器 xmm3 的數(shù)據(jù)復(fù)制到(rdx+rdi —16)開始的16個(gè)字節(jié)中*/
[0161]retq/* 代碼返回 */
[0162]上面的代碼可以復(fù)制32?63字節(jié)內(nèi)存而不需要任何跳轉(zhuǎn)指令(64字節(jié)的情況也可適用上述代碼),這樣有效減少了跳轉(zhuǎn)指令的使用。其它長(zhǎng)度區(qū)間的情況可以類推,這里不再贅述。
[0163]本備選方案中,步驟S102具體可以包括:
[0164]21、各長(zhǎng)度空間的下限值按照從大到小的順序排列,將最大下限值作為當(dāng)前下限值;
[0165]22、判斷長(zhǎng)度L是否小于所述當(dāng)前下限值,如果不小于(即大于或等于)則確定長(zhǎng)度L對(duì)應(yīng)于該下限值所屬的長(zhǎng)度空間;如果小于則將下一個(gè)下限值作為當(dāng)前下限值,返回步驟22。
[0166]比如先判斷L是否小于128個(gè)字節(jié),如果不小于128個(gè)字節(jié)則確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度空間是[128,255],如果小于128個(gè)字節(jié)則繼續(xù)判斷L是否小于64個(gè)字節(jié);如果不小于64個(gè)字節(jié)則確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度空間是[64,127],如果小于64個(gè)字節(jié)則繼續(xù)判斷L是否小于32個(gè)字節(jié);如果不小于32個(gè)字節(jié)則確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度空間是[32,63],如果小于32個(gè)字節(jié)則繼續(xù)判斷L是否小于16個(gè)字節(jié)……以此類推。
[0167]步驟21、22只是步驟S102的一種具體實(shí)現(xiàn)方案,實(shí)現(xiàn)時(shí)可以有多種變形;比如將判斷條件中的“小于”改為“大于”,并相應(yīng)改變不同判斷結(jié)果(“是”或“否”)對(duì)應(yīng)的后續(xù)步驟。
[0168]步驟S102中也可以采用別的方式確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間,比如可以采用不同的判斷順序:例如先判斷L是否小于16,如果不小于,則進(jìn)一步依次判斷是否小于32、64、128,一旦出現(xiàn)“小于”的判斷結(jié)果,就可以確定L對(duì)應(yīng)的長(zhǎng)度空間;如果小于,則進(jìn)一步依次判斷是否小于8、4、2,一旦出現(xiàn)“不小于”的判斷結(jié)果就可以確定L對(duì)應(yīng)的長(zhǎng)度區(qū)間。這樣當(dāng)長(zhǎng)度L較小時(shí),例如12個(gè)字節(jié)時(shí),只需判斷兩次即可確定對(duì)應(yīng)的長(zhǎng)度區(qū)間。再比如可以預(yù)先在配置文件中保存各種長(zhǎng)度L和長(zhǎng)度區(qū)間的對(duì)應(yīng)關(guān)系,根據(jù)長(zhǎng)度L就可以直接查知所對(duì)應(yīng)的長(zhǎng)度區(qū)間。
[0169]當(dāng)長(zhǎng)度區(qū)間的上、下限不同于本備選方案時(shí),步驟S102中進(jìn)行判斷時(shí)的條件或數(shù)值相應(yīng)變化即可,這里不再贅述。
[0170]本實(shí)施例的一種實(shí)施方式中,如圖3所示,所述方法還可以包括:
[0171]如果步驟SlOl中判斷長(zhǎng)度L大于或等于第一長(zhǎng)度閾值,則進(jìn)行步驟S104 ;
[0172]S104、判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值,當(dāng)長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí)進(jìn)行步驟 S105 ;
[0173]S105、從rsi+L-CL開始,復(fù)制CL個(gè)字節(jié)到rdi+L-CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪;比如第一長(zhǎng)度閾值為256時(shí),CL 為 128 ;
[0174]S106、將目的地址32字節(jié)對(duì)齊;
[0175]S107、從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中;復(fù)制后將rsi和rdi各增加CL個(gè)字節(jié);將L減去CL后判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則返回步驟S107。
[0176]本實(shí)施方式中,由于長(zhǎng)度L不一定恰好是CL的整數(shù)倍,這就意味著如果每次復(fù)制CL個(gè)字節(jié),那么會(huì)有部分待復(fù)制內(nèi)存未被復(fù)制;如果用前述的步驟SlOl?S103或其它方式來復(fù)制這部分剩余內(nèi)存,則需要加入跳轉(zhuǎn)指令。
[0177]而加入步驟S105則可避免在復(fù)制剩余內(nèi)存時(shí)使用跳轉(zhuǎn)指令。如圖4所示,假設(shè)L除以CL的商向下取整的結(jié)果為M,那么在從rsi開始復(fù)制了 M次CL個(gè)字節(jié)后(即復(fù)制到圖4中rsi+MXCL-Ι的位置),還會(huì)有L-MX CL個(gè)字節(jié)未被復(fù)制;而步驟S105復(fù)制了從rsi+L-CL到rsi+L-Ι (即終點(diǎn))的CL個(gè)字節(jié),由于L-MXCL小于CL,所以步驟S105復(fù)制的內(nèi)存必然包括每次復(fù)制CL字節(jié)后剩余的內(nèi)存??梢?,步驟S105通過部分冗余復(fù)制(從rsi+L-CL到rsi+MXCL-Ι的內(nèi)存),來避免使用跳轉(zhuǎn)指令,從而提高了復(fù)制的性能。
[0178]本實(shí)施方式中,由于只有步驟S107中一個(gè)跳轉(zhuǎn)指令,且該跳轉(zhuǎn)指令在復(fù)制L個(gè)字節(jié)的過程中,只有最后一次的判斷結(jié)果為“是”,因此可以減少指令預(yù)測(cè)失?。辉搶?shí)施方式也避免了 Intel快數(shù)據(jù)復(fù)制進(jìn)行復(fù)制時(shí)“預(yù)熱”所帶來的額外延遲。
[0179]本實(shí)施方式中,步驟S106中將目的地址對(duì)齊,可以使后面拷入內(nèi)存的操作不會(huì)產(chǎn)生跨緩存行的現(xiàn)象。這個(gè)步驟要求復(fù)制的內(nèi)存長(zhǎng)度一定大于至少一次循環(huán)復(fù)制的字節(jié)數(shù)(范圍需要大于或等于160,比如下面循環(huán)一次需要復(fù)制128個(gè)字節(jié),如果復(fù)制的時(shí)候僅僅是128個(gè)字節(jié),經(jīng)過目的地址對(duì)齊操作那么就很有可能導(dǎo)致剩余需復(fù)制字節(jié)數(shù)小于128,因此就不能進(jìn)行復(fù)制128字節(jié)的循環(huán)操作);當(dāng)?shù)谝婚L(zhǎng)度閾值為160或更大的數(shù)值時(shí),就可以確保進(jìn)行步驟S106時(shí),待復(fù)制內(nèi)存的長(zhǎng)度L是足夠的。
[0180]本實(shí)施方式的一種備選方案中,所述第二長(zhǎng)度閾值為2048個(gè)字節(jié)。其它備選方案中,也可以根據(jù)經(jīng)驗(yàn)或試驗(yàn)結(jié)果,找出復(fù)制性能受Intel快數(shù)據(jù)復(fù)制預(yù)熱時(shí)間影響較大的長(zhǎng)度范圍,以確定所述第二長(zhǎng)度閾值;對(duì)于大于或等于第一長(zhǎng)度閾值、小于第二長(zhǎng)度閾值的長(zhǎng)度,按照本實(shí)施方式進(jìn)行復(fù)制,可避免預(yù)熱帶來的延遲,雖然使用了一次跳轉(zhuǎn)指令,但對(duì)于該部分長(zhǎng)度的數(shù)據(jù)而言,復(fù)制性能仍好于采用Intel快數(shù)據(jù)復(fù)制時(shí)的性能。
[0181]本實(shí)施方式的一種備選方案中,所述CL為128個(gè)字節(jié)。
[0182]在本備選方案的一個(gè)具體的例子中,步驟S105可以分為多個(gè)步驟完成,每個(gè)步驟中復(fù)制16個(gè)字節(jié),一共復(fù)制8次,代碼如下,其中rdx為長(zhǎng)度L:
[0183]Vmovups-0x80 (%rsi+%rdx), %xmm8/* 復(fù)制(rsi+rdx-128)開始的 16 字節(jié)到寄存器xmm8^/
[0184]Vmovups_0x70 (%rsi+%rdx),%xmm9A 復(fù)制(rsi+rdx-112)開始的 16 字節(jié)到寄存器xmm9^/
[0185]Vmovups_0x60 (%rsi+%rdx),%xmmlOA 復(fù)制(rsi+rdx-96)開始的 16 字節(jié)到寄存器
xmmlO氺/
[0186]Vmovups_0x50 (%rsi+%rdx),%xmmllA 復(fù)制(rsi+rdx-80)開始的 16 字節(jié)到寄存器xmml1^/
[0187]Vmovups_0x40 (%rsi+%rdx),%xmml2A 復(fù)制(rsi+rdx-64)開始的 16 字節(jié)到寄存器
xmml2氺/
[0188]Vmovups_0x30 (%rsi+%rdx),%xmml3A 復(fù)制(rsi+rdx-48)開始的 16 字節(jié)到寄存器
xmml3氺/
[0189]Vmovups_0x20 (%rsi+%rdx),%xmml4A 復(fù)制(rsi+rdx-32)開始的 16 字節(jié)到寄存器xmml4V
[0190]Vmovups-OxlO (%rsi+%rdx),%xmml5A 復(fù)制(rsi+rdx-16)開始的 16 字節(jié)到寄存器
xmml5氺/
[0191]Vmovups%xmm8,_0x80(%rdi+%rdx) A 把寄存器 xmm8 數(shù)據(jù)復(fù)制到(rdi+rdx-128)開始的16個(gè)字節(jié)中*/
[0192]Vmovups%xmm9,-0x70(%rdi+%rdx)A 把寄存器 xmm8 數(shù)據(jù)復(fù)制到(rdi+rdx-112)開始的16個(gè)字節(jié)中*/
[0193]Vmovups%xmmlO,_0x60(%rdi+%rdx)/* 把寄存器 x_8 數(shù)據(jù)復(fù)制到(rdi+rdx-96)開始的16個(gè)字節(jié)中*/
[0194]Vmovups%xmmll,_0x50(%rdi+%rdx)/* 把寄存器 x_8 數(shù)據(jù)復(fù)制到(rdi+rdx-80)開始的16個(gè)字節(jié)中*/
[0195]Vmovups%xmml2,-0x40(%rdi+%rdx)A把寄存器 xmm8 數(shù)據(jù)復(fù)制到(rdi+rdx-64)開始的16個(gè)字節(jié)中*/
[0196]Vmovups%xmml3,_0x30(%rdi+%rdx)/*把寄存器 x_8 數(shù)據(jù)復(fù)制到(rdi+rdx-48)開始的16個(gè)字節(jié)中*/
[0197]Vmovups%xmml4,_0x20(%rdi+%rdx)/* 把寄存器 x_8 數(shù)據(jù)復(fù)制到(rdi+rdx-32)開始的16個(gè)字節(jié)中*/
[0198]Vmovups%xmml5,_OxlO(%rdi+%rdx)/*把寄存器 x_8 數(shù)據(jù)復(fù)制到(rdi+rdx-16)開始的16個(gè)字節(jié)中*/
[0199]該備選方案中,步驟S107如圖5所示,具體可以包括:
[0200]51、復(fù)制從rsi開始的128個(gè)字節(jié)到rdi開始的128個(gè)字節(jié)中;
[0201]52、將 rsi 和 rdi 各向前移位 128 個(gè)字節(jié)(即:rsi=rsi+128 ;rdi=rdi+128),將 L 減去 128 ;
[0202]53、判斷L是否小于128 ;如果是,則完成復(fù)制;如果不是,則返回步驟51。
[0203]本實(shí)施方式的一種備選方案中,所述步驟S104還可以包括:
[0204]當(dāng)長(zhǎng)度L大于第二長(zhǎng)度閾值時(shí)釆用Intel快數(shù)據(jù)復(fù)制。
[0205]比如用以下代碼實(shí)現(xiàn):
[0206]mov%rdx, %rcx/*將需復(fù)制的內(nèi)存長(zhǎng)度放入寄存器%rcx*/
[0207]rep movsb/*CPU會(huì)將解碼該指令,變?yōu)楦鄰?fù)制內(nèi)存操作*/
[0208]ret/*復(fù)制操作結(jié)束*/
[0209]實(shí)施例二,一種內(nèi)存復(fù)制裝置,包括:
[0210]第一判斷單元,用于判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0211]第二判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0212]第一復(fù)制單元,用于從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L ^ N ^ max—min。
[0213]本實(shí)施例的一種實(shí)施方式中,所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
[0214]本實(shí)施例的一種實(shí)施方式中,所述第一長(zhǎng)度閾值可以為256字節(jié)。
[0215]本實(shí)施方式的一種備選方案中,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間可以包括8個(gè)長(zhǎng)度區(qū)間,第i個(gè)長(zhǎng)度區(qū)間的上、下限值分別為2--、2Η ;所述N可以為所確定的長(zhǎng)度區(qū)間的min。
[0216]該備選方案中,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中具體可以是指:
[0217]所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,依次復(fù)制P次16個(gè)字節(jié)到目的地址rdi開始的內(nèi)存中;P為min除以16的商;
[0218]所述第一復(fù)制單元從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中具體可以是指:
[0219]所述第一復(fù)制單元從rsi+L-min開始,依次復(fù)制P次16個(gè)字節(jié)到rdi+L-N開始的內(nèi)存中。
[0220]該備選方案中,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中具體可以是指:
[0221]所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;
[0222]所述第一復(fù)制單元從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中具體可以是指:
[0223]所述第一復(fù)制單元從rsi+L-min開始,復(fù)制min個(gè)字節(jié)到rdi+L-min開始的min個(gè)字節(jié)中。
[0224]本實(shí)施例的一種備選方案中,所述的裝置還可以包括:
[0225]第三判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L大于或等于第一長(zhǎng)度閾值時(shí),判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值;
[0226]第二復(fù)制單元,用于當(dāng)所述第三判斷單元的判斷結(jié)果為長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),從rsi+L-CL開始,復(fù)制CL個(gè)字節(jié)到rdi+L-CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪;
[0227]地址對(duì)齊單元,用于將目的地址32字節(jié)對(duì)齊;
[0228]第三復(fù)制單元,用于從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中;復(fù)制后將rsi和rdi各增加CL個(gè)字節(jié),將L減去CL ;
[0229]第四判斷單元,用于判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則指示所述第三復(fù)制單元再次進(jìn)行從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中的操作。
[0230]本實(shí)施方式的一種備選方案中,所述第二長(zhǎng)度閾值可以為2048個(gè)字節(jié),所述CL可以為128個(gè)字節(jié)。
[0231]其它實(shí)現(xiàn)細(xì)節(jié)可參考實(shí)施例一。
[0232]實(shí)施例三、一種內(nèi)存復(fù)制方法,包括:
[0233]判斷用于保存待復(fù)制數(shù)據(jù)的內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0234]當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0235]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中;將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L彡N彡max-min。
[0236]本實(shí)施例可適用于將寄存器或其它存儲(chǔ)空間中的數(shù)據(jù)復(fù)制進(jìn)內(nèi)存的情況,比如將一個(gè)16字節(jié)寄存器中的數(shù)據(jù)寫入64字節(jié)的內(nèi)存中(即:寫入后該64字節(jié)的內(nèi)存中依次保存了 4段相同的數(shù)據(jù),每段16個(gè)字節(jié),和寄存器中數(shù)據(jù)相同),則64就是所述的長(zhǎng)度L,寫入開始的位置就是目的地址rdi。
[0237]本實(shí)施例通過巧妙的設(shè)計(jì),當(dāng)長(zhǎng)度小于第一長(zhǎng)度閾值時(shí),通過部分冗余復(fù)制的代價(jià),換取了在向內(nèi)存中復(fù)制數(shù)據(jù)的過程中不使用任何跳轉(zhuǎn)指令的優(yōu)勢(shì),這樣可有效減少預(yù)測(cè)錯(cuò)誤所帶來的延誤。
[0238]本實(shí)施例的一種實(shí)施方式中,所述N可以為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
[0239]本實(shí)施例的一種實(shí)施方式中,可以根據(jù)經(jīng)驗(yàn)或試驗(yàn)結(jié)果,找出復(fù)制性能受跳轉(zhuǎn)指令預(yù)測(cè)正確率影響較大的長(zhǎng)度范圍,將其中最大的長(zhǎng)度作為第一長(zhǎng)度閾值;對(duì)于小于第一長(zhǎng)度閾值的長(zhǎng)度,按照本實(shí)施例的方法復(fù)制,就可以不采用跳轉(zhuǎn)指令。在一種備選方案中,所述第一長(zhǎng)度閾值可以為256。
[0240]本實(shí)施例的一種實(shí)施方式中,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間所包含的長(zhǎng)度值依次相連但互不重疊,且該多個(gè)預(yù)定的長(zhǎng)度區(qū)間中長(zhǎng)度值的總集合可覆蓋從I至所述第一長(zhǎng)度閾值減I的整個(gè)范圍。
[0241]本實(shí)施例的一種實(shí)施方式中,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間的上、下限值可以分別為2--、2Η ;所述N為所確定的長(zhǎng)度區(qū)間的min ;i為正整數(shù)且21等于所述第一長(zhǎng)度閾值。
[0242]本實(shí)施例的一種實(shí)施方式中,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中的步驟具體可以包括:
[0243]從目的地址rdi開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù);P為min除以16的商;
[0244]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中的步驟具體可以包括:
[0245]從rdi+L-min開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
[0246]在本實(shí)施方式的一個(gè)具體的例子中,一個(gè)16字節(jié)寄存器xmmO作為待復(fù)制數(shù)據(jù)的數(shù)據(jù)源,所確定的長(zhǎng)度區(qū)間為32?63,N為32,P為2,代碼如下所示,其中rdx即前文的長(zhǎng)度L,/**/中為代碼功能的解釋。
[0247]vmovups%xmmO, (%rdi)/*把寄存器xmmO的數(shù)據(jù)復(fù)制到內(nèi)存中目的地址rdi開始的16個(gè)字節(jié)中*/
[0248]vmovups%xmmO, OxlO (%rdi) /*把寄存器xmmO數(shù)據(jù)復(fù)制到內(nèi)存中(rdi+16)開始的16個(gè)字節(jié)中*/
[0249]vmovups%xmmO,-0x20 (%rdx, %rdi)/* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdx+rd1-32)開始的16個(gè)字節(jié)中*/
[0250]vmovups%xmmO,-OxlO (%rdx, %rdi)/* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdx+rd1-16)開始的16個(gè)字節(jié)中*/
[0251]retq/* 代碼返回 */
[0252]本實(shí)施例的一種實(shí)施方式中,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中的步驟具體可以包括:
[0253]從目的地址rdi開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù);
[0254]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中的步驟具體可以包括:
[0255]從rdi+L-min開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
[0256]本實(shí)施例的一種實(shí)施方式中,所述的方法還可以包括:
[0257]如果長(zhǎng)度L大于或等于第一長(zhǎng)度閾值,則判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值;
[0258]當(dāng)長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪;
[0259]將目的地址32字節(jié)對(duì)齊;
[0260]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中;保存后將rdi增加CL個(gè)字節(jié),將L減去CL;
[0261]判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則返回所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中的步驟。
[0262]本實(shí)施方式的一種備選方案中,所述方法還可以包括:
[0263]當(dāng)長(zhǎng)度L大于第二長(zhǎng)度閾值時(shí)采用Intel快數(shù)據(jù)復(fù)制。
[0264]本實(shí)施方式中,可以根據(jù)經(jīng)驗(yàn)或試驗(yàn)結(jié)果,找出復(fù)制性能受Intel快數(shù)據(jù)復(fù)制預(yù)熱時(shí)間影響較大的長(zhǎng)度范圍,以確定所述第二長(zhǎng)度閾值;對(duì)于大于或等于第一長(zhǎng)度閾值、小于第二長(zhǎng)度閾值的長(zhǎng)度,按照本實(shí)施方式進(jìn)行復(fù)制,可避免預(yù)熱帶來的延遲,雖然使用了一次跳轉(zhuǎn)指令,但對(duì)于該部分長(zhǎng)度的數(shù)據(jù)而言,復(fù)制性能仍好于采用Intel快數(shù)據(jù)復(fù)制時(shí)的性能。
[0265]本實(shí)施方式的一種備選方案中,所述CL可以為128個(gè)字節(jié)。
[0266]在本備選方案的一個(gè)具體的例子中,該例子中也是以一個(gè)16字節(jié)寄存器xmmO作為待復(fù)制數(shù)據(jù)的數(shù)據(jù)源,代碼如下所示,其中rdx即前文的長(zhǎng)度L,/**/中為代碼功能的解釋。
[0267]Vmovups%xmmO,-0x80 (%rdi+%rdx)/* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdi+rdx-128)開始的16個(gè)字節(jié)中*/
[0268]Vmovups%xmmO, -0x70 (%rdi+%rdx) /* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdi+rdx-112)開始的16個(gè)字節(jié)中*/
[0269]Vmovups%xmmO,-0x60 (%rdi+%rdx)/* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdi+rdx-96)開始的16個(gè)字節(jié)中*/
[0270]Vmovups%xmmO,-0x50 (%rdi+%rdx)/* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdi+rdx-80)開始的16個(gè)字節(jié)中*/
[0271]Vmovups%xmmO,-0x40 (%rdi+%rdx)/* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdi+rdx-64)開始的16個(gè)字節(jié)中*/
[0272]Vmovups%xmmO,-0x30 (%rdi+%rdx)/* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdi+rdx-48)開始的16個(gè)字節(jié)中*/
[0273]Vmovups%xmmO,-0x20 (%rdi+%rdx)/* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdi+rdx-32)開始的16個(gè)字節(jié)中*/
[0274]Vmovups%xmmO,-OxlO (%rdi+%rdx)/* 把寄存器 xmmO 數(shù)據(jù)復(fù)制到內(nèi)存中(rdi+rdx-16)開始的16個(gè)字節(jié)中*/
[0275]其它實(shí)現(xiàn)細(xì)節(jié)可參考實(shí)施例一。
[0276]實(shí)施例四、一種內(nèi)存復(fù)制裝置,包括:
[0277]第一判斷單元,用于判斷用于保存待復(fù)制數(shù)據(jù)的內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0278]第二判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L大于或等于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0279]第一復(fù)制單元,用于將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中;將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L彡N彡max-min。
[0280]本實(shí)施例的一種實(shí)施方式中,所述N可以為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
[0281]本實(shí)施例的一種實(shí)施方式中,所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間的上、下限值可以分別為2--、2Η ;所述N為所確定的長(zhǎng)度區(qū)間的min ;i為正整數(shù)且21等于所述第一長(zhǎng)度閾值。
[0282]本實(shí)施例的一種實(shí)施方式中,所述第一復(fù)制單元對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中具體可以是指:
[0283]所述第一復(fù)制單元從目的地址rdi開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù);P為min除以16的商;
[0284]所述第一復(fù)制單元將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中具體可以是指:
[0285]所述第一復(fù)制單元從rdi+L-min開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
[0286]本實(shí)施例的一種實(shí)施方式中,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中具體可以是指:
[0287]從目的地址rdi開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù);
[0288]將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中具體可以是指:
[0289]從rdi+L-min開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
[0290]本實(shí)施例的一種實(shí)施方式中,所述的裝置還包括:
[0291]第三判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L大于或等于第一長(zhǎng)度閾值時(shí),判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值;
[0292]第二復(fù)制單元,用于當(dāng)所述第三判斷單元的判斷結(jié)果為長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪;
[0293]地址對(duì)齊單元,用于將目的地址32字節(jié)對(duì)齊;
[0294]第三復(fù)制單元,用于將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中;保存后將rdi增加CL個(gè)字節(jié),將L減去CL ;
[0295]第四判斷單元,用于判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則指示所述第三復(fù)制單元進(jìn)行將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中的操作。
[0296]其它實(shí)現(xiàn)細(xì)節(jié)可參考實(shí)施例一至三。
[0297]實(shí)施例五、一種內(nèi)存復(fù)制方法,包括:
[0298]判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0299]當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0300]從所述待復(fù)制內(nèi)存的源地址rsi開始復(fù)制min個(gè)字節(jié),從rsi+L-N處開始復(fù)制N個(gè)字節(jié);其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L ^ N ^ max—min。
[0301]本實(shí)施例可適用于將內(nèi)存中的數(shù)據(jù)復(fù)制進(jìn)寄存器或其它存儲(chǔ)空間的情況,比如將內(nèi)存中的64字節(jié)依次復(fù)制進(jìn)4個(gè)16字節(jié)寄存器,則64就是所述的長(zhǎng)度L,64字節(jié)中首字節(jié)的位置就是源地址rdi。
[0302]本實(shí)施例通過巧妙的設(shè)計(jì),當(dāng)長(zhǎng)度小于第一長(zhǎng)度閾值時(shí),通過部分冗余復(fù)制的代價(jià),換取了在內(nèi)存復(fù)制的過程中不使用任何跳轉(zhuǎn)指令的優(yōu)勢(shì),這樣可有效減少預(yù)測(cè)錯(cuò)誤所帶來的延誤。
[0303]其它實(shí)現(xiàn)細(xì)節(jié)可參考實(shí)施例一。
[0304]實(shí)施例六、一種內(nèi)存復(fù)制裝置,包括:
[0305]第一判斷單元,用于判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值;
[0306]第二判斷單元,用于當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間;
[0307]第一復(fù)制單元,用于從所述待復(fù)制內(nèi)存的源地址rsi開始復(fù)制min個(gè)字節(jié),從rsi+L-N處開始復(fù)制N個(gè)字節(jié);其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),? L ^ N ^ max-min。
[0308]其它實(shí)現(xiàn)細(xì)節(jié)可參考實(shí)施例一和二。
[0309]本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,所述程序可以存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如只讀存儲(chǔ)器、磁盤或光盤等??蛇x地,上述實(shí)施例的全部或部分步驟也可以使用一個(gè)或多個(gè)集成電路來實(shí)現(xiàn)。相應(yīng)地,上述實(shí)施例中的各模塊/單元可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。本申請(qǐng)不限制于任何特定形式的硬件和軟件的結(jié)合。
[0310]當(dāng)然,本申請(qǐng)還可有其他多種實(shí)施例,在不背離本申請(qǐng)精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本申請(qǐng)作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本申請(qǐng)的權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種內(nèi)存復(fù)制方法,包括: 判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值; 當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間; 從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L彡N彡max-min。
2.如權(quán)利要求1所述的方法,其特征在于: 所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
3.如權(quán)利要求1所述的方法,其特征在于: 所述第一長(zhǎng)度閾值為256字節(jié)。
4.如權(quán)利要求2所述的方法,其特征在于: 所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間包括8個(gè)長(zhǎng)度區(qū)間,第i個(gè)長(zhǎng)度區(qū)間的上、下限值分別為2'-1>2^ ;所述N為所確定的長(zhǎng)度區(qū)間的min。
5.如權(quán)利要求4所述的方法,其特征在于,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中的步驟包括: 從所述待復(fù)制內(nèi)存的源地址rsi開始,依次復(fù)制P次16個(gè)字節(jié)到目的地址rdi開始的內(nèi)存中;P為min除以16的商; 從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中的步驟包括: 從rsi+L-min開始,依次復(fù)制P次16個(gè)字節(jié)到rdi+L-N開始的內(nèi)存中。
6.如權(quán)利要求4所述的方法,其特征在于,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述從所述待復(fù)制內(nèi)存的源地址的起始位置rsi開始,復(fù)制min個(gè)字節(jié)到目的地址的步驟包括: 從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中; 從rsi+L-N處開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中的步驟包括: 從rsi+L-min開始,復(fù)制min個(gè)字節(jié)到rdi+L-min開始的min個(gè)字節(jié)中。
7.如權(quán)利要求1?6中任一項(xiàng)所述的方法,其特征在于,還包括: 如果長(zhǎng)度L大于或等于第一長(zhǎng)度閾值,則判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值; 當(dāng)長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),從rsi+L-CL開始,復(fù)制CL個(gè)字節(jié)到rdi+L_CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪; 將目的地址32字節(jié)對(duì)齊; 從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中;復(fù)制后將rsi和rdi各增加CL個(gè)字節(jié),將L減去CL ; 判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則返回所述從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中的步驟。
8.如權(quán)利要求7所述的方法,其特征在于: 所述第二長(zhǎng)度閾值為2048個(gè)字節(jié),所述CL為128個(gè)字節(jié)。
9.一種內(nèi)存復(fù)制方法,包括: 判斷用于保存待復(fù)制數(shù)據(jù)的內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值; 當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間; 將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中;將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L彡N彡max-min。
10.如權(quán)利要求9所述的方法,其特征在于: 所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
11.如權(quán)利要求10所述的方法,其特征在于: 所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間的上、下限值分別為2--、2Η ;所述N為所確定的長(zhǎng)度區(qū)間的min ;i為正整數(shù)且21等于所述第一長(zhǎng)度閾值。
12.如權(quán)利要求11所述的方法,其特征在于,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中的步驟包括: 從目的地址rdi開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù);P為min除以16的商; 將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中的步驟包括: 從rdi+L-min開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
13.如權(quán)利要求11所述的方法,其特征在于,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中的步驟包括: 從目的地址rdi開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù); 將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中的步驟包括: 從rdi+L-min開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
14.如權(quán)利要求9?13中任一項(xiàng)所述的方法,其特征在于,還包括: 如果長(zhǎng)度L大于或等于第一長(zhǎng)度閾值,則判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值; 當(dāng)長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪; 將目的地址32字節(jié)對(duì)齊; 將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中;保存后將rdi增加CL個(gè)字節(jié),將L減去CL; 判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則返回所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中的步驟。
15.—種內(nèi)存復(fù)制方法,包括: 判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值; 當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間; 從所述待復(fù)制內(nèi)存的源地址rsi開始復(fù)制min個(gè)字節(jié),從rsi+L_N處開始復(fù)制N個(gè)字節(jié);其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L ^ N ^ max—min。
16.—種內(nèi)存復(fù)制裝置,其特征在于,包括: 第一判斷單元,用于判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值; 第二判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間; 第一復(fù)制單元,用于從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中;從rsi+L-N開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L ^ N ^ max—min。
17.如權(quán)利要求9所述的裝置,其特征在于: 所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
18.如權(quán)利要求9所述的裝置,其特征在于: 所述第一長(zhǎng)度閾值為256字節(jié)。
19.如權(quán)利要求11所述的裝置,其特征在于: 所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間包括8個(gè)長(zhǎng)度區(qū)間,第i個(gè)長(zhǎng)度區(qū)間的上、下限值分別為2'-1>2^ ;所述N為所確定的長(zhǎng)度區(qū)間的min。
20.如權(quán)利要求12所述的裝置,其特征在于,對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中是指: 所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,依次復(fù)制P次16個(gè)字節(jié)到目的地址rdi開始的內(nèi)存中;P為min除以16的商; 所述第一復(fù)制單元從rsi+L-N開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中是指: 所述第一復(fù)制單元從rsi+L-min開始,依次復(fù)制P次16個(gè)字節(jié)到rdi+L-N開始的內(nèi)存中。
21.如權(quán)利要求12所述的裝置,其特征在于,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中是指: 所述第一復(fù)制單元從所述待復(fù)制內(nèi)存的源地址rsi開始,復(fù)制min個(gè)字節(jié)到目的地址rdi開始的min個(gè)字節(jié)中; 所述第一復(fù)制單元從rsi+L-N開始,復(fù)制N個(gè)字節(jié)到rdi+L-N開始的N個(gè)字節(jié)中是指:所述第一復(fù)制單元從rsi+L-min開始,復(fù)制min個(gè)字節(jié)到rdi+L-min開始的min個(gè)字節(jié)中。
22.如權(quán)利要求9?14中任一項(xiàng)所述的裝置,其特征在于,還包括: 第三判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L大于或等于第一長(zhǎng)度閾值時(shí),判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值; 第二復(fù)制單元,用于當(dāng)所述第三判斷單元的判斷結(jié)果為長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),從rsi+L-CL開始,復(fù)制CL個(gè)字節(jié)到rdi+L_CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪; 地址對(duì)齊單元,用于將目的地址32字節(jié)對(duì)齊; 第三復(fù)制單元,用于從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中;復(fù)制后將rsi和rdi各增加CL個(gè)字節(jié),將L減去CL ; 第四判斷單元,用于判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則指示所述第三復(fù)制單元再次進(jìn)行從rsi開始復(fù)制CL個(gè)字節(jié)到rdi開始的CL個(gè)字節(jié)中的操作。
23.如權(quán)利要求15所述的裝置,其特征在于: 所述第二長(zhǎng)度閾值為2048個(gè)字節(jié),所述CL為128個(gè)字節(jié)。
24.一種內(nèi)存復(fù)制裝置,其特征在于,包括: 第一判斷單元,用于判斷用于保存待復(fù)制數(shù)據(jù)的內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值; 第二判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L大于或等于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間; 第一復(fù)制單元,用于將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中;將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中;其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且L彡N彡max-min。
25.如權(quán)利要求24所述的裝置,其特征在于: 所述N為大于或等于max-min、且最接近max-min的2的整數(shù)次冪。
26.如權(quán)利要求25所述的裝置,其特征在于: 所述多個(gè)預(yù)定的長(zhǎng)度區(qū)間的上、下限值分別為2--、2Η ;所述N為所確定的長(zhǎng)度區(qū)間的min ;i為正整數(shù)且21等于所述第一長(zhǎng)度閾值。
27.如權(quán)利要求26所述的裝置,其特征在于,所述第一復(fù)制單元對(duì)于min大于或等于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中是指: 所述第一復(fù)制單元從目的地址rdi開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù);P為min除以16的商; 所述第一復(fù)制單元將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中是指: 所述第一復(fù)制單元從rdi+L-min開始,向內(nèi)存中依次寫入P次16個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
28.如權(quán)利要求26所述的裝置,其特征在于,對(duì)于min小于16的長(zhǎng)度區(qū)間,所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的min個(gè)字節(jié)中是指: 從目的地址rdi開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù); 將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-N開始的N個(gè)字節(jié)中是指: 從rdi+L-min開始,向內(nèi)存中寫入min個(gè)字節(jié)的待復(fù)制數(shù)據(jù)。
29.如權(quán)利要求24?28中任一項(xiàng)所述的裝置,其特征在于,還包括: 第三判斷單元,用于當(dāng)所述第一判斷單元的判斷結(jié)果為長(zhǎng)度L大于或等于第一長(zhǎng)度閾值時(shí),判斷長(zhǎng)度L是否大于第二長(zhǎng)度閾值; 第二復(fù)制單元,用于當(dāng)所述第三判斷單元的判斷結(jié)果為長(zhǎng)度L不大于第二長(zhǎng)度閾值時(shí),將待復(fù)制數(shù)據(jù)保存到內(nèi)存中rdi+L-CL開始的CL個(gè)字節(jié)中,CL為小于第一長(zhǎng)度閾值、且最接近該第一長(zhǎng)度閾值的2的整數(shù)次冪; 地址對(duì)齊單元,用于將目的地址32字節(jié)對(duì)齊; 第三復(fù)制單元,用于將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中;保存后將rdi增加CL個(gè)字節(jié),將L減去CL ; 第四判斷單元,用于判斷L是否小于CL,如果是,則完成復(fù)制;如果不是則指示所述第三復(fù)制單元進(jìn)行所述將待復(fù)制數(shù)據(jù)保存到內(nèi)存中目的地址rdi開始的CL個(gè)字節(jié)中的操作。
30.一種內(nèi)存復(fù)制裝置,其特征在于,包括: 第一判斷單元,用于判斷待復(fù)制內(nèi)存的長(zhǎng)度L是否小于第一長(zhǎng)度閾值; 第二判斷單元,用于當(dāng)長(zhǎng)度L小于第一長(zhǎng)度閾值時(shí),在多個(gè)預(yù)定的長(zhǎng)度區(qū)間中,確定長(zhǎng)度L對(duì)應(yīng)的長(zhǎng)度區(qū)間; 第一復(fù)制單元,用于從所述待復(fù)制內(nèi)存的源地址rsi開始復(fù)制min個(gè)字節(jié),從rsi+L-N處開始復(fù)制N個(gè)字節(jié);其中,所述max、min分別為所確定的長(zhǎng)度區(qū)間的上、下限值;N為固定整數(shù),且 L > N > max-min。
【文檔編號(hào)】G06F12/04GK104281537SQ201310282831
【公開日】2015年1月14日 申請(qǐng)日期:2013年7月5日 優(yōu)先權(quán)日:2013年7月5日
【發(fā)明者】馬凌, 姚四海, 張磊 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司