專利名稱:由程序生成優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼的方法
技術(shù)領(lǐng)域:
本申請涉及標(biāo)準(zhǔn)庫函數(shù)匯編領(lǐng)域,具體來說,涉及一種由程序生成優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼的方法。
背景技術(shù):
C標(biāo)準(zhǔn)中的strcpy標(biāo)準(zhǔn)庫函數(shù)主要用來實(shí)現(xiàn)字符串的拷貝,即將源地址指針?biāo)赣蒒ULL結(jié)束的字符串拷貝到目標(biāo)地址指針?biāo)傅膬?nèi)存地址上。一般地,對于具有不同硬件特性的處理器來說,標(biāo)準(zhǔn)庫函數(shù)在高級語言層面上的實(shí)現(xiàn)代碼是一致的。然而,正是因?yàn)檫@種一致性,高級語言層面上的標(biāo)準(zhǔn)庫函數(shù)很難做到針對特定體系結(jié)構(gòu)的徹底優(yōu)化。從優(yōu)化的時(shí)機(jī)出發(fā),對程序的匯編級進(jìn)行優(yōu)化,程序越底層,代碼越容易調(diào)試,更能有效利用指令集。因此,現(xiàn)代處理器為了提高處理性能,很多標(biāo)準(zhǔn)庫函數(shù)都是以匯編的形式內(nèi)嵌靜態(tài)庫中。Strcpy標(biāo)準(zhǔn)庫函數(shù)所做的操作實(shí)質(zhì)是微處理器與內(nèi)存間的數(shù)據(jù)交互,由于現(xiàn)代處理器不支持內(nèi)存到內(nèi)存的讀寫指令,因此內(nèi)存之間的數(shù)據(jù)搬移需要處理器的中間操作,即先從內(nèi)存讀數(shù)據(jù)到寄存器,然后再從寄存器將數(shù)據(jù)寫回內(nèi)存。Strcpy標(biāo)準(zhǔn)庫函數(shù)的典型執(zhí)行是單字節(jié)數(shù)據(jù)搬移,即從內(nèi)存中讀取單字符,判斷該字符是否為NULL,若是有效數(shù)據(jù)則將該字符寫回內(nèi)存。這種算法實(shí)現(xiàn)簡單,當(dāng)字符串規(guī)模較小時(shí),性能尚可。然而,當(dāng)處理器的數(shù)據(jù)帶寬大于8bits,且字符串規(guī)模較大時(shí),這種單字符的拷貝方式,遠(yuǎn)沒有發(fā)揮處理器的數(shù)據(jù)帶寬,拷貝性能極低。在大多數(shù)平臺下,從內(nèi)存對齊邊界開始數(shù)據(jù)拷貝可以充分發(fā)揮處理器的數(shù)據(jù)帶寬。GCC在匯編級對strcpy標(biāo)準(zhǔn)庫函數(shù)實(shí)現(xiàn)優(yōu)化時(shí)正是利用了這一點(diǎn),將待拷貝的字符串按照內(nèi)存地址對齊與否分為兩部分先采用單字節(jié)數(shù)據(jù)搬移指令拷貝內(nèi)存地址不對齊部分的字符串,再采用多字節(jié)數(shù)據(jù)搬移指令將剩余字符串全部拷貝,且在多字節(jié)搬移的同時(shí)進(jìn)行字符串結(jié)束判斷操作。然而,GCC對于strcpy標(biāo)準(zhǔn)庫函數(shù)的優(yōu)化,在C語言級別上,采用了相同的優(yōu)化算法,實(shí)現(xiàn)了相同的代碼使得性能較優(yōu),而在匯編級實(shí)現(xiàn)優(yōu)化時(shí)需要針對不同的體系結(jié)構(gòu),結(jié)合各自的硬件特性分別實(shí)現(xiàn),可移植性較差。對于其他自主研發(fā)的微處理器,現(xiàn)有的對于標(biāo)準(zhǔn)庫函數(shù)匯編級的優(yōu)化,大部分是根據(jù)目標(biāo)處理器的硬件特性,在由相應(yīng)編譯器編譯高級語言生成的匯編代碼基礎(chǔ)上,對其進(jìn)行手工優(yōu)化以獲得當(dāng)前微處理器上的較優(yōu)性能。然而,這種對于標(biāo)準(zhǔn)庫函數(shù)的優(yōu)化方法,是基于編譯器編譯高級語言得到的匯編代碼,冗余較多,優(yōu)化不夠徹底。
發(fā)明內(nèi)容
本發(fā)明的目的是基于標(biāo)準(zhǔn)庫函數(shù)的行為本質(zhì),提供一種優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼的生成方法。為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼生成方法,該方法包括根據(jù)輸入?yún)?shù)中的源拷貝地址,獲取待拷貝字符串規(guī)模,所述待拷貝字符串規(guī)模,與輸入?yún)?shù)中的目標(biāo)拷貝地址、源拷貝地址構(gòu)成拷貝要求;根據(jù)目標(biāo)機(jī)器的硬件特性,確定待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息及規(guī)模;根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的規(guī)模,構(gòu)造分支跳轉(zhuǎn)表,所述分支跳轉(zhuǎn)表由多條分支跳轉(zhuǎn)語句構(gòu)成,各條分支跳轉(zhuǎn)語句一一對應(yīng)于各個優(yōu)化的拷貝執(zhí)行片段;根據(jù)所述分支跳轉(zhuǎn)表,基于目標(biāo)機(jī)器邏輯運(yùn)算指令,對所述拷貝要求中的目標(biāo)拷貝地址、源拷貝地址、字符串規(guī)模進(jìn)行分支判斷,完成拷貝要求集到所述分支跳轉(zhuǎn)表的分支映射;根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,生成滿足拷貝要求的拷貝模式集合;根據(jù)所述目標(biāo)機(jī)器的硬件特性,對所述拷貝模式集合進(jìn)行性能篩選,得到具有最優(yōu)拷貝性能的拷貝模式,由此生成各個優(yōu)化的拷貝執(zhí)行片段。本發(fā)明實(shí)施例基于標(biāo)準(zhǔn)庫函數(shù)的行為本質(zhì),設(shè)計(jì)了一種優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼生成方法,該方法生成的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼執(zhí)行時(shí)能夠根據(jù)輸入?yún)?shù),實(shí)現(xiàn)具有針對性優(yōu)化地字符串拷貝,且只需通過修改硬件特性自定義文件,可擴(kuò)展到其他基于RISC (Reduced Instruction Set Computer,精簡指令集計(jì)算機(jī))的體系結(jié)構(gòu)上,可移植性較好。
以下結(jié)合附圖以舉例方式對本發(fā)明的實(shí)施方式進(jìn)行詳細(xì)描述后,本發(fā)明的其他特征、特點(diǎn)和優(yōu)點(diǎn)將會更加明顯。
圖1為本發(fā)明實(shí)施例的一種優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼生成方法流程示意圖;圖2為本發(fā)明實(shí)施例的優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)的執(zhí)行框架圖;圖3為圖2的執(zhí)行框架中獲取待拷貝字符串規(guī)模的流程示意
圖4為圖2的執(zhí)行框架中優(yōu)化的拷貝執(zhí)行片段的生成流程示意圖;圖5為圖4中分解字符串規(guī)模為η的拷貝任務(wù)示意圖;圖6為圖4中基本拷貝模式的生成流程示意圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)、清楚、完整的說明。顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。在C標(biāo)準(zhǔn)中,字符串拷貝函數(shù)strcpy是常用函數(shù)之一,對其進(jìn)行性能優(yōu)化具有較大意義?;趦?yōu)化理論基礎(chǔ),程序越底層,代碼越容易調(diào)試,更能有效利用指令集。而匯編代碼是編譯器結(jié)合目標(biāo)機(jī)器的硬件特性,將高級語言通過編譯優(yōu)化,代碼塊合并等操作后生成,與目標(biāo)機(jī)器密切相關(guān)。構(gòu)成匯編語言主體的匯編格式指令是用機(jī)器指令的符號表示的,每一條匯編格式指令都對應(yīng)某條機(jī)器指令,能夠充分利用機(jī)器硬件系統(tǒng)的許多特性。因此,現(xiàn)代微處理器為了提高處理性能,很多標(biāo)準(zhǔn)庫函數(shù)都是以匯編的形式內(nèi)嵌靜態(tài)庫中。而標(biāo)準(zhǔn)庫函數(shù)的優(yōu)化不同于其他開發(fā)程序的優(yōu)化標(biāo)準(zhǔn)庫函數(shù)的行為明確,可根據(jù)其行為描述直接生成性能較優(yōu)的代碼,而非在冗余代碼基礎(chǔ)上作修改使其較優(yōu)。圖1為本發(fā)明實(shí)施例的一種優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼生成方法流程示意圖。如圖1所示,所述方法包括步驟100,根據(jù)輸入?yún)?shù)中的源拷貝地址,獲取待拷貝字符串規(guī)模;根據(jù)目標(biāo)機(jī)器的硬件特性,確定待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息及規(guī)模;所述待拷貝字符串規(guī)模與輸入?yún)?shù)中的源拷貝地址、目標(biāo)拷貝地址構(gòu)成拷貝要求。優(yōu)選地,所述待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息是指目標(biāo)拷貝地址的對齊模式、源拷貝地址的對齊模式、字符串規(guī)模。步驟102,根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的規(guī)模,構(gòu)造分支跳轉(zhuǎn)表;具體地,所述分支跳轉(zhuǎn)表由多條分支跳轉(zhuǎn)語句構(gòu)成,各條分支跳轉(zhuǎn)語句一一對應(yīng)于各個優(yōu)化的拷貝執(zhí)行片段,每條分支跳轉(zhuǎn)語句旨在將執(zhí)行路徑引向相應(yīng)的優(yōu)化的拷貝執(zhí)行片段。步驟104,根據(jù)所述分支跳轉(zhuǎn)表、待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,基于目標(biāo)機(jī)器邏輯運(yùn)算指令,對所述拷貝要求中的目標(biāo)拷貝地址、源拷貝地址和字符串規(guī)模進(jìn)行分支判斷,完成拷貝要求集到所述分支跳轉(zhuǎn)表的分支映射;步驟106,根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,生成滿足拷貝要求的拷貝模式集合;優(yōu)選地,所述根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,生成滿足拷貝要求的拷貝模式集合步驟包括根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,將字符串拷貝任務(wù)分解成頭部拷貝任務(wù)、循環(huán)拷貝任務(wù)和尾部拷貝任務(wù);根據(jù)所述頭部拷貝任務(wù)、循環(huán)拷貝任務(wù)和尾部拷貝任務(wù),分別對目標(biāo)機(jī)器可用的數(shù)據(jù)搬移指令集分別施以基本拷貝模式生成算法,得到滿足所述頭部拷貝任務(wù)、循環(huán)拷貝任務(wù)和尾部拷貝任務(wù)的頭部拷貝模式集合、循環(huán)拷貝模式集合、尾部拷貝模式集合。分別將頭部拷貝模式集合、循環(huán)拷貝模式集合、尾部拷貝模式集合中的各個元素進(jìn)行有序組合,得到組合拷貝模式集合。進(jìn)一步優(yōu)選地,所述基本拷貝模式生成算法通過以下步驟實(shí)現(xiàn)遍歷目標(biāo)機(jī)器可用的數(shù)據(jù)搬移指令集;判斷當(dāng)前地址是否滿足當(dāng)前數(shù)據(jù)搬移指令相應(yīng)的地址對齊要求,如果滿足,再判斷當(dāng)前可用硬件資源是否滿足需要的硬件資源,如果也滿足,則將當(dāng)前的數(shù)據(jù)搬移指令按序添加到當(dāng)前拷貝模式;否則,篩除當(dāng)前數(shù)據(jù)搬移指令,遍歷下一條數(shù)據(jù)搬移指令;當(dāng)所述當(dāng)前拷貝模式生成完成后,對所述當(dāng)前拷貝模式進(jìn)行性能評估,如果當(dāng)前拷貝模式被濾除,則開始新一輪的拷貝模式生成;否則,將當(dāng)前拷貝模式添加到拷貝模式集合。優(yōu)選地,對所述當(dāng)前拷貝模式進(jìn)行性能評估是根據(jù)拷貝模式中含有的元素個數(shù),對當(dāng)前拷貝模式進(jìn)行評估,篩選出含有元素個數(shù)最少的拷貝模式。步驟108,根據(jù)所述目標(biāo)機(jī)器的硬件特性,對所述拷貝模式集合進(jìn)行性能篩選,得到具有最優(yōu)拷貝性能的拷貝模式,由此生成優(yōu)化的拷貝執(zhí)行片段。具體地,所述根據(jù)所述目標(biāo)機(jī)器的硬件特性,對所述組合拷貝模式集合進(jìn)行性能篩選,得到具有最優(yōu)拷貝性能的組合拷貝模式步驟包括根據(jù)所述目標(biāo)機(jī)器的硬件特性自定義文件中的指令執(zhí)行代價(jià)信息,計(jì)算所述組合拷貝模式集合中各個組合拷貝模式執(zhí)行代價(jià)總和,以指令執(zhí)行代價(jià)為衡量標(biāo)準(zhǔn),得到執(zhí)行代價(jià)最小的組合拷貝模式。下面,對本發(fā)明實(shí)施例方案進(jìn)行更加詳細(xì)細(xì)致的描述,以便本領(lǐng)域人員更好地理解本發(fā)明實(shí)施例方案的原理以及具體實(shí)施細(xì)節(jié)。圖2為本發(fā)明實(shí)施例的優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)的執(zhí)行框架圖。Strcpy標(biāo)準(zhǔn)庫函數(shù)原型為Char*StrCpy(dSt,src),其典型執(zhí)行是單字符拷貝,當(dāng)檢測到當(dāng)前字符為“\0”時(shí)拷貝結(jié)束。然而這種實(shí)現(xiàn)算法在字符串規(guī)模較小時(shí)性能尚可,當(dāng)字符串規(guī)模較大時(shí),實(shí)現(xiàn)代價(jià)很大,性能極低。因此,如何實(shí)現(xiàn)多字節(jié)的拷貝是眾多strcpy標(biāo)準(zhǔn)庫函數(shù)優(yōu)化算法的設(shè)計(jì)重點(diǎn)?,F(xiàn)代微處理器的指令集都提供了字節(jié)、半字、字尋址,為了充分發(fā)揮處理器的數(shù)據(jù)帶寬,我們可根據(jù)目標(biāo)機(jī)器可用的數(shù)據(jù)搬移指令集,每次進(jìn)行有效指令可搬移的字節(jié)數(shù)進(jìn)行數(shù)據(jù)搬移。然而,當(dāng)以多字節(jié)為單位搬移數(shù)據(jù)時(shí),相應(yīng)的內(nèi)存地址必須是多字節(jié)對齊,否則不對齊的訪問會觸發(fā)異常。因此,結(jié)合待搬移數(shù)據(jù)的內(nèi)存地址對齊與否,選取可用的數(shù)據(jù)搬移指令,是程序生成strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼考慮的關(guān)鍵。另外,由于strcpy標(biāo)準(zhǔn)庫函數(shù)的輸入?yún)?shù)中沒有明確給出待拷貝字符串的拷貝規(guī)模,因此每次采用多字節(jié)數(shù)據(jù)搬移指令進(jìn)行字符串拷貝時(shí),都需要判斷當(dāng)前獲得的多字節(jié)數(shù)據(jù)中是否存在“\0”,指令開銷非常大。因此,如果在strcpy標(biāo)準(zhǔn)庫函數(shù)的入口處,獲得待拷貝字符串的拷貝規(guī)模,則能夠降低指令開銷,獲得較優(yōu)的拷貝性能。 綜合上述關(guān)于優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)的執(zhí)行探究,那么優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼需要從以下幾個角度由程序自動生成獲取拷貝規(guī)模部分、分支判斷部分、優(yōu)化的拷貝執(zhí)行片段部分。下面會借助圖3-圖6對圖2的優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)的執(zhí)行框架涉及的這些部分進(jìn)行詳細(xì)描述。為了充分發(fā)揮微處理器的數(shù)據(jù)帶寬,基于目標(biāo)機(jī)器可用的數(shù)據(jù)搬移指令集,在對特定內(nèi)存進(jìn)行字符串拷貝時(shí),選取多字節(jié)的數(shù)據(jù)搬移指令來完成拷貝。由于cll標(biāo)準(zhǔn)中的strcpy標(biāo)準(zhǔn)庫函數(shù)的輸入?yún)?shù)為目標(biāo)拷貝地址、源拷貝地址,而字符串結(jié)束標(biāo)志“\0”的位置并不確定。因此,如果采用多字節(jié)的數(shù)據(jù)搬移指令進(jìn)行拷貝時(shí),需要每次對搬移到的多字節(jié)數(shù)據(jù)判斷“\0”的位置,操作會異常繁瑣,其指令開銷可能會抵消采用多字節(jié)數(shù)據(jù)搬移指令所帶來的益處。因此,為了有效利用指令集,優(yōu)化strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼在執(zhí)行時(shí),首先根據(jù)輸入?yún)?shù)中的源拷貝地址src來獲取待拷貝字符串規(guī)模,以便后期采用多字節(jié)數(shù)據(jù)搬移指令進(jìn)行多字節(jié)數(shù)據(jù)搬移。圖3為圖2的執(zhí)行框架中獲取待拷貝字符串規(guī)模的流程示意圖。設(shè)目標(biāo)機(jī)器的最大數(shù)據(jù)帶寬為MAX_SIZEX8bits,當(dāng)strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼執(zhí)行時(shí),使用多字節(jié)數(shù)據(jù)搬移指令(搬移字節(jié)數(shù)為MAX_SIZE)搬移的多字節(jié)數(shù)據(jù)為MAX_DATA,待拷貝字符串的規(guī)模使用規(guī)模計(jì)數(shù)寄存器Cnt_reg存儲,暫記拷貝規(guī)模為η。執(zhí)行框架的從上往下第二個步驟單元判斷地址字節(jié)對齊是核心之一,下面對其進(jìn)行詳細(xì)解釋假設(shè)目標(biāo)機(jī)器可用的數(shù)據(jù)搬移指令每次最多搬移的字節(jié)數(shù)為4Β,其相應(yīng)的多字節(jié)數(shù)據(jù)搬移指令為ldw, stw, Idw指令是[mem]->reg, stw指令是reg-> [mem],采用這兩條指令搬移數(shù)據(jù)時(shí)必須滿足內(nèi)存地址mem是4B對齊,否則不對齊的訪問會觸發(fā)異常。從圖2可以看出,優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)執(zhí)行框架還涉及分支判斷部分的生成。分支判斷部分的實(shí)施位置位于優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)入口處。要說明的是,程序在生成分支判斷部分時(shí),需要綜合各個優(yōu)化的拷貝執(zhí)行片段的特征信息,如目標(biāo)拷貝地址對齊模式,源拷貝地址對齊模式,字符串規(guī)模等,依據(jù)目標(biāo)機(jī)器可用的跳轉(zhuǎn)操作指令,來生成分支判斷部分。上述對齊模式信息會影響拷貝模式的生成,因?yàn)槿绻x取多字節(jié)數(shù)據(jù)搬移指令來拷貝字符串,則要求訪存地址是多字節(jié)對齊。具體地,應(yīng)按如下生成分支判斷部分
由于待生成的優(yōu)化的拷貝執(zhí)行片段集中的各個元素,由上述的特征信息來唯一表征。因此,根據(jù)目標(biāo)機(jī)器的硬件特性,確定待生成優(yōu)化的拷貝執(zhí)行片段集的規(guī)模;所述待生成的優(yōu)化的拷貝執(zhí)行片段集就是各個待生成的優(yōu)化的拷貝執(zhí)行片段構(gòu)成的集合。根據(jù)待生成的優(yōu)化的拷貝執(zhí)行片段集的規(guī)模,基于目標(biāo)機(jī)器可用的相關(guān)跳轉(zhuǎn)操作(即目標(biāo)機(jī)器指令集中的分支跳轉(zhuǎn)指令,如jmp指令),構(gòu)造分支跳轉(zhuǎn)表。分支跳轉(zhuǎn)表由各條分支跳轉(zhuǎn)語句構(gòu)成,每條分支語句旨在將執(zhí)行路徑引向相應(yīng)的優(yōu)化的拷貝執(zhí)行片段;對拷貝要求中的目標(biāo)拷貝地址、源拷貝地址、字符串規(guī)模進(jìn)行分支判斷,建立拷貝要求集到分支跳轉(zhuǎn)表的映射關(guān)系,該映射是I對1,或多對1,并基于目標(biāo)機(jī)器指令集的相關(guān)邏輯操作指令,由程序生成這種映射關(guān)系。優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼在執(zhí)行時(shí),首先對輸入?yún)?shù)中的目標(biāo)拷貝地址dst、源拷貝地址src,以及通過拷貝規(guī)模獲取部分得到的字符串規(guī)模n,執(zhí)行上述分支判斷,使得不同的拷貝要求能夠分別跳轉(zhuǎn)到各個優(yōu)化的拷貝執(zhí)行片段上。所述拷貝執(zhí)行片段是由拷貝模式通過腳本處理得到,詳見后續(xù)的圖4。圖4是圖2的優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)的執(zhí)行框架中優(yōu)化的拷貝執(zhí)行片段的生成流程示意圖。在優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼中,優(yōu)化的拷貝執(zhí)行片段部分是實(shí)現(xiàn)字符串拷貝的主體部分。當(dāng)優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)在執(zhí)行時(shí),該部分能夠根據(jù)輸入?yún)?shù)目標(biāo)拷貝地址dst,源拷貝地址src,以及函數(shù)入口處獲取到的待拷貝字符串規(guī)模n,針對性優(yōu)化地實(shí)現(xiàn)字符串拷貝。由于strcpy標(biāo)準(zhǔn)庫函數(shù)的行為本質(zhì)是完成字符串的拷貝,且需要處理器的參與,當(dāng)目標(biāo)拷貝地址、源拷貝地址、待拷貝字符串規(guī)模確定后,可用的拷貝模式是可以完全枚舉的。程序生成各個優(yōu)化的拷貝執(zhí)行片段部分的步驟如下根據(jù)輸入?yún)?shù)目標(biāo)拷貝地址dst、源拷貝地址src,字符串規(guī)模n,將字符串拷貝任務(wù)分解成頭部拷貝任務(wù),循環(huán)拷貝任務(wù),尾部拷貝任務(wù),以構(gòu)成循環(huán)拷貝;所述的循環(huán)拷貝,其實(shí)就是循環(huán)搬移數(shù)據(jù)的意思。
`
根據(jù)頭部拷貝任務(wù),循環(huán)拷貝任務(wù),尾部拷貝任務(wù),對目標(biāo)機(jī)器可用的數(shù)據(jù)搬移指令集分別施以基本拷貝模式生成算法,得到頭部拷貝模式集合、循環(huán)拷貝模式集合、尾部拷貝模式集合;分別將頭部拷貝模式集合、循環(huán)拷貝模式集合、尾部拷貝模式集合中的各個元素進(jìn)行有序組合后得到組合拷貝模式集合,通過對所述組合拷貝模式集合進(jìn)行性能篩選,得到性能最優(yōu)的組合拷貝模式,加入目標(biāo)機(jī)器的指令集信息,通過腳本處理,即可形成各個優(yōu)化的拷貝執(zhí)行片段。圖5為圖4中分解拷貝規(guī)模為η的拷貝任務(wù)示意圖。循環(huán)搬移數(shù)據(jù),不僅可以縮短各個優(yōu)化的搬移執(zhí)行片段規(guī)模,也能有效利用目標(biāo)機(jī)器的指令集。因此,在生成優(yōu)化的拷貝執(zhí)行片段匯編代碼過程中,需要將字符串拷貝任務(wù)分解,構(gòu)成循環(huán)拷貝的形式。各部分拷貝任務(wù)分別生成相應(yīng)的拷貝模式,再按序組合,以縮減匯編代碼量。其中,字符串規(guī)模η =頭部搬移規(guī)模+單次循環(huán)搬移規(guī)模X循環(huán)次數(shù)+尾部搬移規(guī)模,而各部分規(guī)模的確定需要根據(jù)多次迭代,加入性能篩選最終完成。圖6為圖4中基本拷貝模式的生成流程示意圖。主要描述根據(jù)某一特定拷貝要求,基本拷貝模式的生成流程。
Strcpy標(biāo)準(zhǔn)庫函數(shù)的行為本質(zhì)為字符串的拷貝?;谀繕?biāo)機(jī)器可用的數(shù)據(jù)搬移指令集及其相應(yīng)的地址對齊要求,根據(jù)輸入?yún)?shù)中的目標(biāo)拷貝地址dst、源拷貝地址src,獲取到的字符串規(guī)模n,可得到滿足拷貝要求的所有拷貝模式構(gòu)成的拷貝模式集合。在線性空間中,作如下定義目標(biāo)機(jī)器可用的數(shù)據(jù)搬移指令集為集合Γ,其構(gòu)成元素為i是某條具體的數(shù)據(jù)搬移指令(具備屬性bytes,代表該指令可搬移的數(shù)據(jù)字節(jié)數(shù)),則定義集合Φ為目標(biāo)機(jī)器可用數(shù)據(jù)搬移指令集(Φ = {(i e Γ) I1. behavior_attri=DATA_MOVEMENT_BETWEEN_REGS_MEM}),定義滿足拷貝要求的所有拷貝模式構(gòu)成的集合Ψ Ψ = {Q1, i2,…,in) I Q1, i2,…,in e Φ) Λ SumQ1. bytes, i2. bytes,…,in.bytes) = SIZE}其中,SIZE為拷貝要求中的拷貝規(guī)模,sum為常用求和函數(shù)。由于匯編代碼的實(shí)現(xiàn)依賴于目標(biāo)硬件平臺,因此可用拷貝模式的生成與目標(biāo)機(jī)器的硬件特性密切相關(guān)。對于strcpy標(biāo)準(zhǔn)庫函數(shù)而言,其行為本質(zhì)是特定內(nèi)存區(qū)域的字符串拷貝。因此,在生成拷貝模式時(shí),需要根據(jù)當(dāng)前地址、可用數(shù)據(jù)搬移指令的地址對齊要求,對目標(biāo)機(jī)器的數(shù)據(jù)搬移指令集施以功能篩除。如果在模式生成過程中,目標(biāo)機(jī)器的硬件特性如地址對齊等,不能滿足當(dāng)前生成拷貝模式需要的相關(guān)條件,則當(dāng)前模式生成失效。具體功能篩除的步驟如下1、從可用搬移指令集Φ中獲取當(dāng)前搬移指令i ;2、判斷當(dāng)前地址是否滿足數(shù)據(jù)搬移指令i的地址對齊要求,若滿足,則轉(zhuǎn)向3,否則,篩除當(dāng)前指令i,轉(zhuǎn)向5 ;3、判斷當(dāng)前可用硬件資源是否滿足需要的硬件資源(如寄存器個數(shù)等),若滿足,則轉(zhuǎn)向4,否則篩除當(dāng)前指令i,轉(zhuǎn)向5 ;4、當(dāng)前搬移模式生成添加當(dāng)前搬移指令i,轉(zhuǎn)向5 ;5、當(dāng)前轉(zhuǎn)移指令i的功能篩選結(jié)束。 在根據(jù)某一特定拷貝要求生成拷貝模式時(shí),對可用搬移指令集完成功能篩選后,能夠明確得到滿足拷貝要求的所有拷貝模式構(gòu)成的集合Ψ。對于集合Ψ中的各元素Ak(η元組(i1; i2,…,in)),Ak的執(zhí)行性能取決于它的元素個數(shù)。當(dāng)拷貝模式的元素個數(shù)越少時(shí),匯編代碼的規(guī)模也越小,拷貝數(shù)據(jù)時(shí)處理器與內(nèi)存的交互次數(shù)越少。而且,對于一般的微處理器來說,單、多字節(jié)的數(shù)據(jù)搬移指令執(zhí)行代價(jià)上無異。因此,越精簡的拷貝模式越能有效利用指令集,充分發(fā)揮處理器的數(shù)據(jù)帶寬。因此,以拷貝模式中含有的元素個數(shù)為衡量標(biāo)準(zhǔn),對集合調(diào)用性能評估函數(shù),經(jīng)過相應(yīng)的濾除,得到最精簡的基本拷貝模式。在某一特定拷貝要求下,按上述步驟得到的拷貝模式集合是符合拷貝要求的全集,規(guī)模極大。基于庫函數(shù)的行為本質(zhì)可知,Ψ中至少含有一個元素,即單字節(jié)的數(shù)據(jù)搬移拷貝,即(Ui2,…,in)(其中i”i2,…,1均為指令分支的單字節(jié)數(shù)據(jù)搬移指令),雖然該元素非最優(yōu)解。關(guān)于性能篩除,作如下進(jìn)一步說明對于一般的微處理器來說,匯編代碼的執(zhí)行代價(jià)的指標(biāo)之一為指令的執(zhí)行周期數(shù),根據(jù)不同體系結(jié)構(gòu)可在硬件特性自定義文件中定義。關(guān)于所述的自定義文件,作如下說明如果該種方法是用C語言實(shí)現(xiàn),那么硬件特性自定義文件就可以是一個包含有目標(biāo)機(jī)器指令集等信息的一個.h文件,這個術(shù)語對于整個設(shè)計(jì)不是特別的重要。由于strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼的主體是處理器與內(nèi)存之間的數(shù)據(jù)交互,因此匯編代碼中的數(shù)據(jù)搬移指令的執(zhí)行代價(jià)在很大程度上決定了整個拷貝執(zhí)行片段的執(zhí)行代價(jià)。為了獲得性能較優(yōu)的拷貝執(zhí)行片段匯編代碼,在分解拷貝任務(wù),得到組合拷貝模式集合后,根據(jù)硬件特性自定義文件中的指令執(zhí)行代價(jià)信息,分別計(jì)算組合拷貝模式集合中各個組合拷貝模式的執(zhí)行代價(jià)總和,以指令執(zhí)行代價(jià)為衡量標(biāo)準(zhǔn),通過對組合拷貝模式集合進(jìn)行性能篩選,得到執(zhí)行代價(jià)最小的組合拷貝模式。通過對所述執(zhí)行代價(jià)最小的組合拷貝模式進(jìn)行腳本處理,最終,可得到具有針對性優(yōu)化的具體拷貝執(zhí)行片段。本發(fā)明實(shí)施例提出的程序生成優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼的方法,是基于目標(biāo)機(jī)器的可用數(shù)據(jù)搬移指令集,根據(jù)拷貝要求,結(jié)合數(shù)據(jù)挖掘思想,由程序生成符合拷貝要求、優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼。相比于高級語言編譯生成再優(yōu)化的標(biāo)準(zhǔn)庫函數(shù)匯編代碼,更能有效利用指令集,實(shí)際指令執(zhí)行數(shù)明顯減少。通過修改硬件特性自定義文件,使用工程化的方法可以快速高效地派生構(gòu)造出其他基于RISC的體系結(jié)構(gòu)的優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼,可移植性較好。本領(lǐng)域技術(shù)人員應(yīng)該進(jìn)一步意識到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。本領(lǐng)域技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本申請的范圍。結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。以上所述的具體實(shí)施方式
,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式
而已,并不用于限定本申請的保護(hù)范圍,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種由程序生成優(yōu)化的Strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼的方法,其特征在于 根據(jù)輸入?yún)?shù)中的源拷貝地址,獲取待拷貝字符串規(guī)模,所述待拷貝字符串規(guī)模與輸入?yún)?shù)中的目標(biāo)拷貝地址、源拷貝地址構(gòu)成拷貝要求; 根據(jù)目標(biāo)機(jī)器的硬件特性,確定待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息及規(guī)模; 根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的規(guī)模,構(gòu)造分支跳轉(zhuǎn)表,所述分支跳轉(zhuǎn)表由多條分支跳轉(zhuǎn)語句構(gòu)成,各條分支跳轉(zhuǎn)語句一一對應(yīng)于各個優(yōu)化的拷貝執(zhí)行片段; 根據(jù)所述分支跳轉(zhuǎn)表、待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,基于目標(biāo)機(jī)器邏輯運(yùn)算指令,對所述拷貝要求中的目標(biāo)拷貝地址、源拷貝地址、字符串規(guī)模進(jìn)行分支判斷,完成拷貝要求集到所述分支跳轉(zhuǎn)表的分支映射; 根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,生成滿足拷貝要求的拷貝模式集合; 根據(jù)所述目標(biāo)機(jī)器的硬件特性,對所述拷貝模式集合進(jìn)行性能篩選,得到具有最優(yōu)拷貝性能的拷貝模式,由此生成各個優(yōu)化的拷貝執(zhí)行片段。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于所述根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,生成滿足拷貝要求的拷貝模式集合步驟包括 根據(jù)所述待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,將字符串拷貝任務(wù)分解成頭部拷貝任務(wù)、循環(huán)拷貝任務(wù)和尾部拷貝任務(wù); 根據(jù)所述頭部拷貝任務(wù)、循環(huán)拷貝任務(wù)和尾部拷貝任務(wù),分別對目標(biāo)機(jī)器可用的數(shù)據(jù)搬移指令集分別施以基本拷貝模式生成算法,得到滿足所述頭部拷貝任務(wù)、循環(huán)拷貝任務(wù)和尾部拷貝任務(wù)的頭部拷貝模式集合、循環(huán)拷貝模式集合、尾部拷貝模式集合。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于所述基本拷貝模式生成算法通過以下步驟實(shí)現(xiàn) 遍歷目標(biāo)機(jī)器可用的數(shù)據(jù)搬移指令集; 判斷當(dāng)前地址是否滿足當(dāng)前數(shù)據(jù)搬移指令相應(yīng)的地址對齊要求,如果滿足,再判斷當(dāng)前能夠使用的硬件資源是否滿足需要的硬件資源,如果也滿足,則將當(dāng)前的數(shù)據(jù)搬移指令按序添加到當(dāng)前拷貝模式中,遍歷下一條數(shù)據(jù)搬移指令;否則,篩除當(dāng)前數(shù)據(jù)搬移指令,遍歷下一條數(shù)據(jù)搬移指令; 當(dāng)所述當(dāng)前拷貝模式生成完成后,對所述當(dāng)前拷貝模式進(jìn)行性能評估,如果當(dāng)前拷貝模式被濾除,則開始新一輪的拷貝模式生成;否則,將當(dāng)前拷貝模式添加到拷貝模式集合。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于對所述當(dāng)前拷貝模式進(jìn)行性能評估是根據(jù)拷貝模式中含有的元素個數(shù),對當(dāng)前拷貝模式進(jìn)行篩選。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于所述根據(jù)所述目標(biāo)機(jī)器的硬件特性,對所述拷貝模式集合進(jìn)行性能篩選,得到具有最優(yōu)拷貝性能的拷貝模式步驟包括 根據(jù)目標(biāo)機(jī)器的硬件特性自定義文件中的指令執(zhí)行代價(jià)信息,計(jì)算所述拷貝模式集合中各個拷貝模式的指令執(zhí)行代價(jià)總和,以指令執(zhí)行代價(jià)為性能衡量標(biāo)準(zhǔn),得到執(zhí)行代價(jià)最小的拷貝模式。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于所述待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息是指目標(biāo)拷貝地址的對齊模式、源拷貝地址的對齊模式、字符串規(guī)模。
全文摘要
本發(fā)明公開了一種優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼生成方法,該方法包括根據(jù)輸入?yún)?shù)中的源拷貝地址,獲取待拷貝字符串規(guī)模;根據(jù)目標(biāo)機(jī)器的硬件特性,確定待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息及規(guī)模;根據(jù)待生成的優(yōu)化的拷貝執(zhí)行片段的規(guī)模,構(gòu)造分支跳轉(zhuǎn)表;根據(jù)待生成的優(yōu)化的拷貝執(zhí)行片段的特征信息,生成滿足拷貝要求的拷貝模式集合;根據(jù)目標(biāo)機(jī)器的硬件特性,對拷貝模式集合進(jìn)行性能篩選,得到具有最優(yōu)拷貝性能的拷貝模式,由此生成各個優(yōu)化的拷貝執(zhí)行片段。本發(fā)明實(shí)現(xiàn)了由程序生成針對特定體系結(jié)構(gòu)的優(yōu)化的strcpy標(biāo)準(zhǔn)庫函數(shù)匯編代碼,可移植性好。
文檔編號G06F9/45GK103049302SQ20121058966
公開日2013年4月17日 申請日期2012年12月28日 優(yōu)先權(quán)日2012年12月28日
發(fā)明者朱浩, 應(yīng)歡, 王東輝, 洪纓 申請人:中國科學(xué)院聲學(xué)研究所