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

一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法

文檔序號(hào):6385144閱讀:592來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法
技術(shù)領(lǐng)域
本發(fā)明涉及標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成技術(shù),尤其涉及一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法。
背景技術(shù)
數(shù)字信號(hào)處理任務(wù)通常需要完成大量的數(shù)據(jù)計(jì)算,如數(shù)字信號(hào)處理中常用的 FIR (Finite Impulse Response,有限長(zhǎng)單位沖激響應(yīng))濾波器和 FFT (Fast Fourier Transformation,快速傅氏變換)算法,而數(shù)組的初始化工作一般由C標(biāo)準(zhǔn)中的memset標(biāo)準(zhǔn)庫(kù)函數(shù)完成。在Cll標(biāo)準(zhǔn)中,memset標(biāo)準(zhǔn)庫(kù)函數(shù)定義為將某一特定大小的內(nèi)存區(qū)域全部以特定單字節(jié)數(shù)據(jù)進(jìn)行填充。由于內(nèi)存的速度相對(duì)于微處理器來(lái)說(shuō)要慢得多,而對(duì)于面向數(shù)據(jù)密集型應(yīng)用的微處理器而言,用于數(shù)據(jù)初始化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)屬調(diào)用密集型,對(duì)其進(jìn)行優(yōu)化很有意義。一般地,對(duì)于具有不同硬件特性的微處理器而言,標(biāo)準(zhǔn)庫(kù)函數(shù)在高級(jí)語(yǔ)言層面上的實(shí)現(xiàn)是一致的。然而,正是因?yàn)檫@種一致性,高級(jí)語(yǔ)言層面上的標(biāo)準(zhǔn)庫(kù)函數(shù)很難做到針對(duì)特定目標(biāo)體系結(jié)構(gòu)的徹底優(yōu)化。從優(yōu)化的時(shí)機(jī)出發(fā),在匯編級(jí)對(duì)程序進(jìn)行優(yōu)化, 程序越底層,代碼越容易調(diào)度,更能有效利用指令集。因此,現(xiàn)代微處理器為了提高處理性能,很多標(biāo)準(zhǔn)庫(kù)函數(shù)都是以匯編的形式內(nèi)嵌靜態(tài)庫(kù)中。
上述所提及的memset標(biāo)準(zhǔn)庫(kù)函數(shù)所做的操作是把某一特定內(nèi)存塊全部以特定單字節(jié)數(shù)據(jù)進(jìn)行填充,其典型實(shí)現(xiàn)是單字節(jié)數(shù)據(jù)填充。這種算法實(shí)現(xiàn)簡(jiǎn)單,當(dāng)待填充的內(nèi)存塊規(guī)模較小時(shí),性能尚可。然而,當(dāng)微處理器的數(shù)據(jù)帶寬大于8比特,且待填充的內(nèi)存塊規(guī)模較大時(shí),這種單字節(jié)數(shù)據(jù)的填充方式遠(yuǎn)沒(méi)有發(fā)揮微處理器的數(shù)據(jù)帶寬,性能較低。在大多數(shù)平臺(tái)下,從內(nèi)存對(duì)齊邊界處開(kāi)始對(duì)其實(shí)現(xiàn)數(shù)據(jù)填充可以充分發(fā)揮微處理器的數(shù)據(jù)帶寬。
現(xiàn)有技術(shù)中的GCC(GNU Compiler Collection)編譯器在對(duì)memset標(biāo)準(zhǔn)庫(kù)函數(shù)實(shí)現(xiàn)優(yōu)化時(shí)正是利用了這一點(diǎn),將待填充的內(nèi)存塊規(guī)模按照目標(biāo)填充地址對(duì)齊與否分為三部分對(duì)齊邊界之前的內(nèi)存塊、對(duì)齊填充的內(nèi)存塊,對(duì)齊邊界之后的內(nèi)存塊。其中,目標(biāo)地址對(duì)齊的內(nèi)存塊采用多字節(jié)數(shù)據(jù)傳輸指令一次性填充多字節(jié)數(shù)據(jù),不對(duì)齊部分仍采用單字節(jié)數(shù)據(jù)傳輸指令完成填充。GCC編譯器對(duì)于memset標(biāo)準(zhǔn)庫(kù)函數(shù)的優(yōu)化在C語(yǔ)言級(jí)別上實(shí)現(xiàn)了相同的代碼,然而,在匯編級(jí)實(shí)現(xiàn)優(yōu)化需要針對(duì)不同的體系結(jié)構(gòu),結(jié)合各自的硬件特性分別實(shí)現(xiàn),可移植性較差。對(duì)于其他自主研發(fā)的微處理器,現(xiàn)有的對(duì)于標(biāo)準(zhǔn)庫(kù)函數(shù)匯編級(jí)的優(yōu)化, 大部分是根據(jù)目標(biāo)處理器的硬件特性,在由相應(yīng)編譯器編譯高級(jí)語(yǔ)言生成的匯編代碼基礎(chǔ)上,對(duì)其進(jìn)行手工優(yōu)化以獲得當(dāng)前微處理器上的較優(yōu)性能。然而,這種對(duì)于標(biāo)準(zhǔn)庫(kù)函數(shù)的優(yōu)化方法,是基于編譯器編譯高級(jí)語(yǔ)言得到的匯編代碼,冗余較多,優(yōu)化不夠徹底。發(fā)明內(nèi)容
本發(fā)明的目的是基于標(biāo)準(zhǔn)庫(kù)函數(shù)的行為本質(zhì),提供一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼的生成方法。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法,該方法包括根據(jù)目標(biāo)機(jī)器的硬件特性,確定待生成的優(yōu)化的填充執(zhí)行片段所具有的屬性特征及規(guī)模;根據(jù)上述待生成的優(yōu)化的填充執(zhí)行片段的規(guī)模,構(gòu)造集中跳轉(zhuǎn)表,該集中跳轉(zhuǎn)表由多條分支跳轉(zhuǎn)語(yǔ)句構(gòu)成,每條分支跳轉(zhuǎn)語(yǔ)句旨在將執(zhí)行路徑引向相應(yīng)的優(yōu)化的填充執(zhí)行片段;根據(jù)上述集中跳轉(zhuǎn)表,基于目標(biāo)機(jī)器可用的邏輯運(yùn)算指令,對(duì)輸入?yún)?shù)中的目標(biāo)填充地址和填充規(guī)模按照上述待生成的優(yōu)化的填充執(zhí)行片段的屬性特征進(jìn)行分支判斷,建立輸入?yún)?shù)集到集中跳轉(zhuǎn)表的映射關(guān)系;根據(jù)目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集、上述待生成的優(yōu)化的填充執(zhí)行片段所具有的屬性特征,即特定的填充要求信息,生成滿(mǎn)足填充要求的所有填充模式構(gòu)成的填充模式集合;根據(jù)目標(biāo)機(jī)器的硬件特性,對(duì)上述填充模式集合進(jìn)行性能篩選,得到具有最優(yōu)填充性能的填充模式,由此生成優(yōu)化的填充執(zhí)行片段。
本發(fā)明實(shí)施例基于標(biāo)準(zhǔn)庫(kù)函數(shù)的行為本質(zhì),設(shè)計(jì)了一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法,該方法生成的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼在執(zhí)行時(shí),能夠根據(jù)輸入?yún)?shù),即填充要求信息,實(shí)現(xiàn)具有針對(duì)性?xún)?yōu)化地?cái)?shù)據(jù)填充,且只需通過(guò)修改硬件特性自定義文件,可擴(kuò)展到其他基于RISC (Reduced Instruction Set Computer,精簡(jiǎn)指令集計(jì)算機(jī))的體系結(jié)構(gòu)上,可移植性較好。


通過(guò)以下結(jié)合附圖以舉例方式對(duì)本發(fā)明的實(shí)施方式進(jìn)行詳細(xì)描述后,本發(fā)明的其他特征、特點(diǎn)和優(yōu)點(diǎn)將會(huì)更加明顯。圖1為本發(fā)明實(shí)施例提供的一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法流程不意圖;圖2為本發(fā)明實(shí)施例優(yōu)化的填充執(zhí)行片段生成的框圖;圖3為本發(fā)明實(shí)施例填充數(shù)據(jù)的擴(kuò)展示意圖;圖4為本發(fā)明實(shí)施例數(shù)據(jù)填充任務(wù)的分解示意圖;圖5為本發(fā)明實(shí)施例基本填充模式生成時(shí)的功能篩除流程示意圖;圖6 (a)為本發(fā)明實(shí)施例數(shù)據(jù)規(guī)模為16的一種填充模式;圖6 (b)為本發(fā)明實(shí)施例數(shù)據(jù)規(guī)模為16的另一種填充模式。
具體實(shí)施例方式下面通過(guò)附圖和實(shí)施例,對(duì)本申請(qǐng)的技術(shù)方案做進(jìn)一步的詳細(xì)描述。數(shù)組的初始化工作通常由C標(biāo)準(zhǔn)中的memset標(biāo)準(zhǔn)庫(kù)函數(shù)完成。由于C語(yǔ)言中的memset標(biāo)準(zhǔn)庫(kù)函數(shù)出于兼容性考慮,在速度上落后于根據(jù)特定體系結(jié)構(gòu)的目標(biāo)機(jī)器寫(xiě)出來(lái)的匯編代碼。基于優(yōu)化理論基礎(chǔ),程序越底層,代碼越容易調(diào)度,更能有效利用指令集。而匯編代碼是編譯器結(jié)合目標(biāo)機(jī)器的硬件特性,將高級(jí)語(yǔ)言通過(guò)編譯優(yōu)化,代碼塊合并等操作后生成。因此,現(xiàn)代微處理器為了提高處理性能,很多標(biāo)準(zhǔn)庫(kù)函數(shù)都是以匯編的形式內(nèi)嵌靜態(tài)庫(kù)中。而標(biāo)準(zhǔn)庫(kù)函數(shù)的優(yōu)化不同于其他開(kāi)發(fā)程序的優(yōu)化標(biāo)準(zhǔn)庫(kù)函數(shù)的行為明確,可根據(jù)其行為描述直接生成優(yōu)化的代碼,而非在冗余代碼基礎(chǔ)上作修改使其性能較優(yōu)。在Cll 標(biāo)準(zhǔn)中,memset 標(biāo)準(zhǔn)庫(kù)函數(shù)原型為 void*memset (void*s, intc, size_t, η),其中輸入?yún)?shù)s、c和η分別對(duì)應(yīng)于目標(biāo)填充地址、特定填充數(shù)據(jù)和填充規(guī)模。memset標(biāo)準(zhǔn)庫(kù)函數(shù)本質(zhì)是將某一特定內(nèi)存區(qū)域以特定單字節(jié)數(shù)據(jù)填充,通常用于為新申請(qǐng)的內(nèi)存塊進(jìn)行初始化。其典型執(zhí)行是單字節(jié)的數(shù)據(jù)填充,然而這種算法在內(nèi)存塊較小時(shí)性能尚可,當(dāng)待填充的內(nèi)存塊較大時(shí),多次循環(huán)耗時(shí)代價(jià)大,性能極低。因此,如何實(shí)現(xiàn)多字節(jié)的填充是眾多memset標(biāo)準(zhǔn)庫(kù)函數(shù)優(yōu)化算法的設(shè)計(jì)重點(diǎn)?,F(xiàn)代微處理器的指令集都提供了字節(jié),半字、字尋址,支持多字節(jié)數(shù)據(jù)傳輸。為了充分發(fā)揮處理器的數(shù)據(jù)帶寬,在采用多字節(jié)數(shù)據(jù)傳輸指令對(duì)特定內(nèi)存塊實(shí)現(xiàn)數(shù)據(jù)填充時(shí),需要考慮目標(biāo)填充地址的對(duì)齊問(wèn)題。例如,4字節(jié)數(shù)據(jù)傳輸指令要求目標(biāo)填充地址必須為4字節(jié)對(duì)齊,否則不對(duì)齊的訪(fǎng)問(wèn)會(huì)觸發(fā)異常。因此,根據(jù)待填充內(nèi)存地址對(duì)齊與否,選取可用的數(shù)據(jù)傳輸指令,是生成優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼的關(guān)鍵所在。另外,考慮到待填充的數(shù)據(jù)在高速緩沖存儲(chǔ)器(Cache)中不命中時(shí),會(huì)影響函數(shù)執(zhí)行性能。因此,以Cache塊大小為填充規(guī)模的上界,每次只以Cache塊大小為循環(huán)填充單位,從降低Cache缺失率的角度上提高了 memset標(biāo)準(zhǔn)庫(kù)函數(shù)的執(zhí)行性能。綜上,優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)在執(zhí)行時(shí),根據(jù)輸入?yún)?shù),進(jìn)行分支判斷,依據(jù)判斷結(jié)果分別跳轉(zhuǎn)到具有針對(duì)性?xún)?yōu)化地填充執(zhí)行片段上。因此,優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)的匯編代碼需要從填充數(shù)據(jù)的擴(kuò)展部分、分支判斷部分和優(yōu)化的填充執(zhí)行片段部分這幾個(gè)角度由程序自動(dòng)生成。圖1為本發(fā)明實(shí)施例提供的一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法流程示意圖。本發(fā)明實(shí)施例提供的一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)的匯編代碼生成方法包括分支判斷部分和優(yōu)化的填充執(zhí)行片段部分。如圖1所示,本發(fā)明實(shí)施例包括步驟101-步驟105。步驟101至步驟103主要針對(duì)分支判斷部分的生成進(jìn)行描述。程序生成分支判斷部分時(shí),實(shí)際上是要生成從memset標(biāo)準(zhǔn)庫(kù)函數(shù)的輸入?yún)?shù)集,到各個(gè)優(yōu)化的填充執(zhí)行片段集的映射關(guān)系,即每一種具體的輸入?yún)?shù)都能夠有唯一的優(yōu)化的填充執(zhí)行片段與之對(duì)應(yīng)。而各個(gè)具體的優(yōu)化的填充執(zhí)行片段具有唯一屬性特征,即對(duì)齊模式(輸入?yún)?shù)中的目標(biāo)填充地址s決定了目標(biāo)填充地址的對(duì)齊模式,對(duì)齊模式?jīng)Q定了目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令的選擇),填充規(guī)模等信息。依據(jù)目標(biāo)機(jī)器的硬件特性,可得到目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令的對(duì)齊模式規(guī)模(如8B,4B對(duì)齊等),并以目標(biāo)機(jī)器的Cache塊大小為界將填充規(guī)模分類(lèi)(劃分成填充規(guī)模恰好各自等于O Cache塊大小)。因此,具體填充執(zhí)行片段集的規(guī)模為對(duì)齊模式規(guī)模X (Cache塊大小+1)。綜合上述對(duì)分支判斷部分生成的探究,分支判斷部分的生成步驟如下在步驟101,根據(jù)目標(biāo)機(jī)器的硬件特性,確定待生成的優(yōu)化的填充執(zhí)行片段所具有的屬性特征及規(guī)模。具體地,根據(jù)目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令的對(duì)齊模式和目標(biāo)機(jī)器的Cache塊大小,得到目標(biāo)填充地址的對(duì)齊模式和填充規(guī)模,由此確定待生成的優(yōu)化的填充執(zhí)行片段的規(guī)模。在步驟102,根據(jù)所述待生成的優(yōu)化的填充執(zhí)行片段的規(guī)模,構(gòu)造集中跳轉(zhuǎn)表,集中跳轉(zhuǎn)表由多條分支跳轉(zhuǎn)語(yǔ)句構(gòu)成。每條分支跳轉(zhuǎn)語(yǔ)句旨在將執(zhí)行路徑引向相應(yīng)的優(yōu)化的填充執(zhí)行片段。在步驟103,根據(jù)集中跳轉(zhuǎn)表,基于目標(biāo)機(jī)器可用的邏輯運(yùn)算指令,對(duì)輸入?yún)?shù)中的目標(biāo)填充地址和填充規(guī)模按照待生成的優(yōu)化的填充執(zhí)行片段的屬性特征進(jìn)行分支判斷,建立輸入?yún)?shù)集到集中跳轉(zhuǎn)表的映射關(guān)系,該映射關(guān)系是一對(duì)一或多對(duì)一。
需要說(shuō)明的是,在分支判斷部分生成之前,需要根據(jù)輸入?yún)?shù)中的特定填充數(shù)據(jù), 將特定單字節(jié)填充數(shù)據(jù)的位數(shù)擴(kuò)展至目標(biāo)機(jī)器的數(shù)據(jù)寄存器的最大位數(shù)。在Cll標(biāo)準(zhǔn)中, memset標(biāo)準(zhǔn)函數(shù)輸入?yún)?shù)中的填充數(shù)據(jù)類(lèi)型定義為整型,而在函數(shù)體中會(huì)將特定填充數(shù)據(jù)類(lèi)型強(qiáng)制轉(zhuǎn)換為無(wú)符號(hào)字符型,即memset標(biāo)準(zhǔn)函數(shù)在進(jìn)行特定內(nèi)存區(qū)域填充時(shí)是以Sbits 數(shù)據(jù)進(jìn)行重復(fù)性填充。然而,每次進(jìn)行單字節(jié)的數(shù)據(jù)填充遠(yuǎn)沒(méi)有發(fā)揮處理器的數(shù)據(jù)帶寬。對(duì)于一般支持多字節(jié)數(shù)據(jù)傳輸指令的現(xiàn)代微處理器而言,為了實(shí)現(xiàn)每次多字節(jié)的內(nèi)存填充, 需要根據(jù)目標(biāo)機(jī)器的硬件特性,將Sbits的填充數(shù)據(jù)進(jìn)行擴(kuò)展,至目標(biāo)機(jī)器的數(shù)據(jù)寄存器的最大位數(shù)。數(shù)據(jù)位數(shù)的擴(kuò)展可由多種方法實(shí)現(xiàn),例如移位、或、加法、乘法等操作。例如, 在數(shù)據(jù)寄存器最大位數(shù)為32位的硬件平臺(tái)上,其填充數(shù)據(jù)擴(kuò)展示意圖如圖3所示。
步驟104至步驟105主要針對(duì)優(yōu)化的填充執(zhí)行片段部分的生成進(jìn)行描述。
優(yōu)化的填充執(zhí)行片段部分是優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼實(shí)現(xiàn)數(shù)據(jù)填充的主體部分。當(dāng)優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)在執(zhí)行時(shí),該部分能夠根據(jù)目標(biāo)填充地址和填充規(guī)模,完成具有針對(duì)性?xún)?yōu)化地?cái)?shù)據(jù)填充。根據(jù)分支判斷部分中確定的待生成的優(yōu)化的填充執(zhí)行片段所具有的屬性特征,即特定的填充要求(目標(biāo)填充地址的對(duì)齊模式、填充規(guī)模),結(jié)合數(shù)據(jù)挖掘思想,生成滿(mǎn)足特定填充要求的所有填充模式構(gòu)成的填充模式集合?;谀繕?biāo)機(jī)器的硬件特性,通過(guò)執(zhí)行代價(jià)評(píng)估,對(duì)填充模式集合進(jìn)行性能篩選,得到具有最優(yōu)填充性能的填充模式,由此生成優(yōu)化的填充執(zhí)行片段。
在步驟104,根據(jù)目標(biāo)機(jī)器可用數(shù)據(jù)傳輸指令集、待生成的優(yōu)化的填充執(zhí)行片段的屬性特征,即具體的填充要求,生成滿(mǎn)足填充要求的填充模式集合。
具體地,如圖2和圖4所示,將填充規(guī)模為η的填充任務(wù)分解成頭部填充任務(wù)、循環(huán)填充任務(wù)和尾部填充任務(wù) ,構(gòu)成循環(huán)填充的形式。
在實(shí)際運(yùn)用中,當(dāng)待填充的內(nèi)存塊區(qū)域較大時(shí),若將整個(gè)填充規(guī)模全部展開(kāi)實(shí)現(xiàn)一一填充,不僅得到的填充模式集合規(guī)模極大,且各個(gè)填充模式尺寸也與填充規(guī)模成線(xiàn)性增長(zhǎng),導(dǎo)致各個(gè)具體的優(yōu)化的填充執(zhí)行片段的匯編代碼規(guī)模急劇。因此,在生成優(yōu)化的填充執(zhí)行片段的過(guò)程中,將填充規(guī)模為η的填充任務(wù)分解為頭部填充任務(wù),循環(huán)填充任務(wù),尾部填充任務(wù),構(gòu)成循環(huán)填充的形式。根據(jù)頭部填充任務(wù),循環(huán)填充任務(wù),尾部填充任務(wù),分別對(duì)目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集施以基本填充模式生成算法,分別得到頭部填充模式集合、循環(huán)填充模式集合、尾部填充模式集合,并分別將頭部填充模式集合、循環(huán)填充模式集合、尾部填充模式集合中的各個(gè)元素進(jìn)行有序組合后得到組合填充模式集合,其中的各個(gè)元素,即構(gòu)成了優(yōu)化的填充執(zhí)行片段匯編代碼的主體。
以下針對(duì)基本填充模式生成算法進(jìn)行描述
Memset標(biāo)準(zhǔn)庫(kù)函數(shù)的行為本質(zhì)為某一特定內(nèi)存區(qū)域的填充。根據(jù)填充要求,結(jié)合目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集及其相應(yīng)的地址對(duì)齊要求,可得到滿(mǎn)足填充要求的所有填充模式構(gòu)成的填充模式集合。
在線(xiàn)性空間中,作如下定義集合Γ為目標(biāo)機(jī)器支持的指令集,i為其中的某條具體數(shù)據(jù)傳輸指令(具備屬性bytes,代表該指令可傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)),則可定義集合Φ為目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集(Φ = Ki e Γ ) I1. behavior_attri = M0VE_DATA_T0_ MEM}),定義滿(mǎn)足填充要求的所有填充模式構(gòu)成的集合Ψ = Ki1, i2,…,in) I (i1; i2,…,in e Φ) Λ SumQ1. bytes, i2. bytes, .··, in. bytes) = SIZE}其中,SIZE 為填充要求中的填充規(guī)模,sum為常用求和函數(shù)。由于匯編代碼的實(shí)現(xiàn)依賴(lài)于目標(biāo)硬件平臺(tái),因此填充模式的生成與目標(biāo)機(jī)器的硬件特性密切相關(guān)。對(duì)于memset標(biāo)準(zhǔn)庫(kù)函數(shù)而言,其行為本質(zhì)是對(duì)特定內(nèi)存區(qū)域進(jìn)行特定單字節(jié)數(shù)據(jù)的填充。因此,在生成填充模式時(shí),需要根據(jù)數(shù)據(jù)傳輸指令的地址對(duì)齊要求,對(duì)目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集施以功能篩除。如果在模式生成過(guò)程中,當(dāng)前地址不能滿(mǎn)足當(dāng)前填充模式生成需要的相關(guān)條件,如數(shù)據(jù)傳輸指令相應(yīng)的地址對(duì)齊要求,則當(dāng)前模式生成失效。具體功能篩除實(shí)現(xiàn)如圖5所示,首先,遍歷目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集,視當(dāng)前數(shù)據(jù)傳輸指令為i ;其次,判斷當(dāng)前地址是否滿(mǎn)足當(dāng)前數(shù)據(jù)傳輸指令相應(yīng)的地址對(duì)齊要求,如果滿(mǎn)足,則將當(dāng)前的數(shù)據(jù)傳輸指令按序添加到當(dāng)前填充模式;否則,篩除當(dāng)前數(shù)據(jù)傳輸指令,遍歷下一條數(shù)據(jù)傳輸指令。當(dāng)前填充模式生成完成后,對(duì)其調(diào)用性能評(píng)估函數(shù),如果當(dāng)前填充模式被篩掉,則開(kāi)始新一輪的填充模式生成;否則,將當(dāng)前填充模式添加到填充模式集合。
·
在根據(jù)某一具體填充要求生成填充模式時(shí),基于memset函數(shù)的行為本質(zhì),在進(jìn)行功能篩除后,能夠明確得到滿(mǎn)足填充要求的所有填充模式構(gòu)成的集合Ψ。對(duì)于集合Ψ中的各元素Ak (η元組(i” i2,…,in)),Ak的執(zhí)行性能取決于它含有的元素個(gè)數(shù)。如在填充規(guī)模為16,其余填充要求相同的情況下,生成的兩種典型的填充模式如圖6 (a)和圖6 (b)所示圖6中(a)為典型的每次傳輸單字節(jié)的填充模式,圖6(b)為每次傳輸4字節(jié)的填充模式。對(duì)比二者可知,當(dāng)填充模式含有的元素個(gè)數(shù)越少時(shí),匯編代碼的規(guī)模也越小,填充數(shù)據(jù)時(shí)處理器與內(nèi)存的交互次數(shù)越少。而且,對(duì)于一般的微處理器來(lái)說(shuō),單、多字節(jié)的數(shù)據(jù)傳輸指令執(zhí)行代價(jià)上無(wú)異。因此,越精簡(jiǎn)的填充模式越能有效利用指令集,充分發(fā)揮處理器的數(shù)據(jù)帶寬。因此,以填充模式的元素個(gè)數(shù)為衡量標(biāo)準(zhǔn),對(duì)集合Ψ調(diào)用性能評(píng)估函數(shù),經(jīng)過(guò)濾除,得到最精簡(jiǎn)的填充模式填充模式。對(duì)于某一特定填充要求,其基本填充模式填充模式的生成步驟如下I、當(dāng)前填充模式生成入口,2、遍歷目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集Φ,視當(dāng)前傳輸指令為i,3、對(duì)指令i調(diào)用篩選函數(shù)施以功能篩選(如圖5所示),若當(dāng)前指令被篩選掉,則轉(zhuǎn)向2,否則,轉(zhuǎn)向4,4、將當(dāng)前指令i按序添加到當(dāng)前填充模式,并判斷當(dāng)前填充模式是否完成,若未完成,則轉(zhuǎn)向2,否則轉(zhuǎn)向5,5、對(duì)當(dāng)前填充模式調(diào)用性能評(píng)估函數(shù),若當(dāng)前填充模式被濾除,則開(kāi)始新一輪的填充模式生成,即轉(zhuǎn)向1,否則,轉(zhuǎn)向6,6、當(dāng)前填充要求下的填充模式集合添加當(dāng)前填充模式。在某一特定填充要求下,按上述步驟得到的填充模式集合Ψ是符合填充要求的全集,規(guī)模極大?;趲?kù)函數(shù)的行為本質(zhì)可知,Ψ中至少含有一個(gè)元素,即單字節(jié)的數(shù)據(jù)填充,S卩Q1, i2,…,in)(其中i2,…,1 均為指令集中的單字節(jié)數(shù)據(jù)傳輸指令),雖然該元素非最優(yōu)解。在步驟105,根據(jù)目標(biāo)機(jī)器的硬件特性,對(duì)填充模式集合進(jìn)行性能篩選,得到具有最優(yōu)填充性能的填充模式,由此生成優(yōu)化的填充執(zhí)行片段。
對(duì)于一般的微處理器而言,匯編代碼的執(zhí)行代價(jià)的指標(biāo)之一為指令的執(zhí)行周期數(shù),這一指標(biāo)與目標(biāo)機(jī)器的硬件特性密切相關(guān),可根據(jù)不同體系結(jié)構(gòu)在硬件特性自定義文件中定義。Memset標(biāo)準(zhǔn)庫(kù)函數(shù)的行為本質(zhì)為特定內(nèi)存區(qū)域中的數(shù)據(jù)填充,因此匯編代碼中的數(shù)據(jù)傳輸指令的執(zhí)行代價(jià)在很大程度上決定了整個(gè)填充執(zhí)行片段的執(zhí)行代價(jià)。根據(jù)目標(biāo)機(jī)器的硬件特性自定義文件中的指令執(zhí)行代價(jià)信息,計(jì)算組合填充模式集合中各個(gè)填充模式執(zhí)行代價(jià)總和,以指令執(zhí)行代價(jià)為衡量標(biāo)準(zhǔn),通過(guò)對(duì)組合填充模式集合進(jìn)行篩選,得到執(zhí)行代價(jià)最小的填充模式。由此生成具有針對(duì)性?xún)?yōu)化的具體填充執(zhí)行片段。
本發(fā)明實(shí)施例基于標(biāo)準(zhǔn)庫(kù)函數(shù)的行為本質(zhì),設(shè)計(jì)了一種由程序生成優(yōu)化的memset 標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法,該方法生成的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼在執(zhí)行時(shí),能夠根據(jù)輸入?yún)?shù),實(shí)現(xiàn)具有針對(duì)性?xún)?yōu)化地?cái)?shù)據(jù)填充,且只需通過(guò)修改硬件特性自定義文件,可擴(kuò)展到其他基于RISC (Reduced Instruction Set Computer,精簡(jiǎn)指令集計(jì)算機(jī))的體系結(jié)構(gòu)上,可移植性較好。
顯而易見(jiàn),在不偏離本發(fā)明的真實(shí)精神和范圍的前提下,在此描述的本發(fā)明可以有許多變化。因此,所有對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)顯而易見(jiàn)的改變,都應(yīng)包括在本權(quán)利要求書(shū)所涵蓋的范圍之內(nèi)。本發(fā)明所要求保護(hù)的范圍僅由所述的權(quán)利要求書(shū)進(jìn)行限定。
權(quán)利要求
1.一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法,其特征在于 根據(jù)目標(biāo)機(jī)器的硬件特性,確定待生成的優(yōu)化的填充執(zhí)行片段所具有的屬性特征及規(guī)模; 根據(jù)所述待生成的優(yōu)化的填充執(zhí)行片段的規(guī)模,構(gòu)造集中跳轉(zhuǎn)表,所述集中跳轉(zhuǎn)表由多條分支跳轉(zhuǎn)語(yǔ)句構(gòu)成,每條分支跳轉(zhuǎn)語(yǔ)句旨在將執(zhí)行路徑引向相應(yīng)的優(yōu)化的填充執(zhí)行片段; 根據(jù)所述集中跳轉(zhuǎn)表,基于目標(biāo)機(jī)器可用的邏輯運(yùn)算指令,對(duì)輸入?yún)?shù)中的目標(biāo)填充地址和填充規(guī)模按照所述待生成的優(yōu)化的填充執(zhí)行片段的屬性特征進(jìn)行分支判斷,建立輸入?yún)?shù)集到所述集中跳轉(zhuǎn)表的映射關(guān)系; 根據(jù)目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集、所述待生成的優(yōu)化的填充執(zhí)行片段的屬性特征,生成滿(mǎn)足填充要求的填充模式集合; 根據(jù)所述目標(biāo)機(jī)器的硬件特性,對(duì)所述填充模式集合進(jìn)行性能篩選,得到具有最優(yōu)填充性能的填充模式,由此生成優(yōu)化的填充執(zhí)行片段。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于所述根據(jù)所述待生成的優(yōu)化的填充執(zhí)行片段的屬性特征,生成滿(mǎn)足填充要求的填充模式集合步驟包括 根據(jù)所述待生成的優(yōu)化的填充執(zhí)行片段的屬性特征,將數(shù)據(jù)填充規(guī)模為η的填充任務(wù)分解成頭部填充任務(wù)、循環(huán)填充任務(wù)和尾部填充任務(wù); 根據(jù)所述頭部填充任務(wù)、循環(huán)填充任務(wù)和尾部填充任務(wù),分別對(duì)目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集分別施以基本填充模式生成算法,得到滿(mǎn)足所述頭部填充任務(wù)、循環(huán)填充任務(wù)和尾部填充任務(wù)的頭部填充模式集合、循環(huán)填充模式集合、尾部填充模式集合。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于所述基本填充模式生成算法通過(guò)以下步驟實(shí)現(xiàn) 遍歷目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集; 判斷當(dāng)前地址是否滿(mǎn)足當(dāng)前數(shù)據(jù)傳輸指令相應(yīng)的地址對(duì)齊要求,如果滿(mǎn)足,則將當(dāng)前的數(shù)據(jù)傳輸指令按序添加到當(dāng)前填充模式;否則,篩除當(dāng)前數(shù)據(jù)傳輸指令,遍歷下一條數(shù)據(jù)傳輸指令; 當(dāng)所述當(dāng)前填充模式生成完成后,對(duì)所述當(dāng)前填充模式進(jìn)行性能評(píng)估,如果當(dāng)前填充模式被濾除,則開(kāi)始新一輪的填充模式生成;否則,將當(dāng)前填充模式添加到填充模式集合。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于對(duì)所述當(dāng)前填充模式進(jìn)行性能評(píng)估是以當(dāng)前填充模式中的元素個(gè)數(shù)為衡量標(biāo)準(zhǔn),對(duì)當(dāng)前填充模式進(jìn)行篩選。
5.根據(jù)權(quán)利要求I所述的方法,其特征在于所述根據(jù)所述目標(biāo)機(jī)器的硬件特性,對(duì)所述填充模式集合進(jìn)行性能篩選,得到具有最優(yōu)填充性能的填充模式步驟包括 根據(jù)目標(biāo)機(jī)器的硬件特性自定義文件中的指令執(zhí)行代價(jià)信息,計(jì)算所述填充模式集合中各個(gè)填充模式的執(zhí)行代價(jià)總和,以指令執(zhí)行代價(jià)為衡量標(biāo)準(zhǔn),通過(guò)對(duì)所述填充模式集合進(jìn)行篩選,得到執(zhí)行代價(jià)最小的填充模式。
6.根據(jù)權(quán)利要求I所述的方法,其特征在于在所述構(gòu)造集中跳轉(zhuǎn)表步驟之前還包括 根據(jù)輸入?yún)?shù)中的特定單字節(jié)填充數(shù)據(jù),通過(guò)目標(biāo)機(jī)器支持的移位、邏輯或、加法和乘法中的一種或多種操作,將特定單字節(jié)填充數(shù)據(jù)的位數(shù)擴(kuò)展至目標(biāo)機(jī)器的數(shù)據(jù)寄存器的最大位數(shù)。
7.根據(jù)權(quán)利要求I所述的方法,其特征在于所述待生成的優(yōu)化的填充執(zhí)行片段所具有的屬性特征包括目標(biāo)填充地址的對(duì)齊模式和填充規(guī)模。
全文摘要
本發(fā)明公開(kāi)了一種優(yōu)化的memset標(biāo)準(zhǔn)庫(kù)函數(shù)匯編代碼生成方法,包括根據(jù)目標(biāo)機(jī)器的硬件特性,確定待生成的優(yōu)化的填充執(zhí)行片段所具有的屬性特征及規(guī)模;根據(jù)待生成的優(yōu)化的填充執(zhí)行片段的規(guī)模,構(gòu)造集中跳轉(zhuǎn)表;根據(jù)集中跳轉(zhuǎn)表,對(duì)輸入?yún)?shù)中的目標(biāo)填充地址和填充規(guī)模進(jìn)行分支判斷,建立輸入?yún)?shù)集到集中跳轉(zhuǎn)表的映射關(guān)系;根據(jù)目標(biāo)機(jī)器可用的數(shù)據(jù)傳輸指令集、待生成的優(yōu)化的填充執(zhí)行片段的屬性特征,生成滿(mǎn)足填充要求的填充模式集合;根據(jù)目標(biāo)機(jī)器的硬件特性,對(duì)填充模式集合進(jìn)行性能篩選,得到具有最優(yōu)填充性能的填充模式,由此生成優(yōu)化的填充執(zhí)行片段。本發(fā)明實(shí)現(xiàn)了優(yōu)化地?cái)?shù)據(jù)填充,提高了memset標(biāo)準(zhǔn)庫(kù)函數(shù)的數(shù)據(jù)填充性能,可移植性好。
文檔編號(hào)G06F9/45GK102981886SQ201210563969
公開(kāi)日2013年3月20日 申請(qǐng)日期2012年12月21日 優(yōu)先權(quán)日2012年12月21日
發(fā)明者朱浩, 應(yīng)歡, 王東輝, 洪纓 申請(qǐng)人:中國(guó)科學(xué)院聲學(xué)研究所
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
子洲县| 丰顺县| 名山县| 赫章县| 靖安县| 茂名市| 阳春市| 沙湾县| 荣昌县| 溧水县| 化州市| 香格里拉县| 甘肃省| 出国| 依兰县| 扬中市| 黄浦区| 璧山县| 芜湖市| 吉首市| 海兴县| 上思县| 石渠县| 信阳市| 尼勒克县| 通河县| 开封县| 沙田区| 宁南县| 兴安县| 南漳县| 鄂尔多斯市| 新平| 肇源县| 察隅县| 宁国市| 三都| 曲周县| 嘉鱼县| 金堂县| 吉首市|