本發明專利技術公開了一種優化的memset標準庫函數匯編代碼生成方法,包括:根據目標機器的硬件特性,確定待生成的優化的填充執行片段所具有的屬性特征及規模;根據待生成的優化的填充執行片段的規模,構造集中跳轉表;根據集中跳轉表,對輸入參數中的目標填充地址和填充規模進行分支判斷,建立輸入參數集到集中跳轉表的映射關系;根據目標機器可用的數據傳輸指令集、待生成的優化的填充執行片段的屬性特征,生成滿足填充要求的填充模式集合;根據目標機器的硬件特性,對填充模式集合進行性能篩選,得到具有最優填充性能的填充模式,由此生成優化的填充執行片段。本發明專利技術實現了優化地數據填充,提高了memset標準庫函數的數據填充性能,可移植性好。
【技術實現步驟摘要】
本專利技術涉及標準庫函數匯編代碼生成技術,尤其涉及。
技術介紹
數字信號處理任務通常需要完成大量的數據計算,如數字信號處理中常用的 FIR (Finite Impulse Response,有限長單位沖激響應)濾波器和 FFT (Fast Fourier Transformation,快速傅氏變換)算法,而數組的初始化工作一般由C標準中的memset標準庫函數完成。在Cll標準中,memset標準庫函數定義為將某一特定大小的內存區域全部以特定單字節數據進行填充。由于內存的速度相對于微處理器來說要慢得多,而對于面向數據密集型應用的微處理器而言,用于數據初始化的memset標準庫函數屬調用密集型,對其進行優化很有意義。一般地,對于具有不同硬件特性的微處理器而言,標準庫函數在高級語言層面上的實現是一致的。然而,正是因為這種一致性,高級語言層面上的標準庫函數很難做到針對特定目標體系結構的徹底優化。從優化的時機出發,在匯編級對程序進行優化, 程序越底層,代碼越容易調度,更能有效利用指令集。因此,現代微處理器為了提高處理性能,很多標準庫函數都是以匯編的形式內嵌靜態庫中。上述所提及的memset標準庫函數所做的操作是把某一特定內存塊全部以特定單字節數據進行填充,其典型實現是單字節數據填充。這種算法實現簡單,當待填充的內存塊規模較小時,性能尚可。然而,當微處理器的數據帶寬大于8比特,且待填充的內存塊規模較大時,這種單字節數據的填充方式遠沒有發揮微處理器的數據帶寬,性能較低。在大多數平臺下,從內存對齊邊界處開始對其實現數據填充可以充分發揮微處理器的數據帶寬?,F有技術中的GCC(GNU Compiler Collection)編譯器在對memset標準庫函數實現優化時正是利用了這一點,將待填充的內存塊規模按照目標填充地址對齊與否分為三部分對齊邊界之前的內存塊、對齊填充的內存塊,對齊邊界之后的內存塊。其中,目標地址對齊的內存塊采用多字節數據傳輸指令一次性填充多字節數據,不對齊部分仍采用單字節數據傳輸指令完成填充。GCC編譯器對于memset標準庫函數的優化在C語言級別上實現了相同的代碼,然而,在匯編級實現優化需要針對不同的體系結構,結合各自的硬件特性分別實現,可移植性較差。對于其他自主研發的微處理器,現有的對于標準庫函數匯編級的優化, 大部分是根據目標處理器的硬件特性,在由相應編譯器編譯高級語言生成的匯編代碼基礎上,對其進行手工優化以獲得當前微處理器上的較優性能。然而,這種對于標準庫函數的優化方法,是基于編譯器編譯高級語言得到的匯編代碼,冗余較多,優化不夠徹底。
技術實現思路
本專利技術的目的是基于標準庫函數的行為本質,提供一種優化的memset標準庫函數匯編代碼的生成方法。為實現上述目的,本專利技術提供了,該方法包括根據目標機器的硬件特性,確定待生成的優化的填充執行片段所具有的屬性特征及規模;根據上述待生成的優化的填充執行片段的規模,構造集中跳轉表,該集中跳轉表由多條分支跳轉語句構成,每條分支跳轉語句旨在將執行路徑引向相應的優化的填充執行片段;根據上述集中跳轉表,基于目標機器可用的邏輯運算指令,對輸入參數中的目標填充地址和填充規模按照上述待生成的優化的填充執行片段的屬性特征進行分支判斷,建立輸入參數集到集中跳轉表的映射關系;根據目標機器可用的數據傳輸指令集、上述待生成的優化的填充執行片段所具有的屬性特征,即特定的填充要求信息,生成滿足填充要求的所有填充模式構成的填充模式集合;根據目標機器的硬件特性,對上述填充模式集合進行性能篩選,得到具有最優填充性能的填充模式,由此生成優化的填充執行片段。 本專利技術實施例基于標準庫函數的行為本質,設計了,該方法生成的memset標準庫函數匯編代碼在執行時,能夠根據輸入參數,即填充要求信息,實現具有針對性優化地數據填充,且只需通過修改硬件特性自定義文件,可擴展到其他基于RISC (Reduced Instruction Set Computer,精簡指令集計算機)的體系結構上,可移植性較好。附圖說明通過以下結合附圖以舉例方式對本專利技術的實施方式進行詳細描述后,本專利技術的其他特征、特點和優點將會更加明顯。圖1為本專利技術實施例提供的流程不意圖;圖2為本專利技術實施例優化的填充執行片段生成的框圖;圖3為本專利技術實施例填充數據的擴展示意圖;圖4為本專利技術實施例數據填充任務的分解示意圖;圖5為本專利技術實施例基本填充模式生成時的功能篩除流程示意圖;圖6 (a)為本專利技術實施例數據規模為16的一種填充模式;圖6 (b)為本專利技術實施例數據規模為16的另一種填充模式。具體實施例方式下面通過附圖和實施例,對本申請的技術方案做進一步的詳細描述。數組的初始化工作通常由C標準中的memset標準庫函數完成。由于C語言中的memset標準庫函數出于兼容性考慮,在速度上落后于根據特定體系結構的目標機器寫出來的匯編代碼?;趦灮碚摶A,程序越底層,代碼越容易調度,更能有效利用指令集。而匯編代碼是編譯器結合目標機器的硬件特性,將高級語言通過編譯優化,代碼塊合并等操作后生成。因此,現代微處理器為了提高處理性能,很多標準庫函數都是以匯編的形式內嵌靜態庫中。而標準庫函數的優化不同于其他開發程序的優化標準庫函數的行為明確,可根據其行為描述直接生成優化的代碼,而非在冗余代碼基礎上作修改使其性能較優。在Cll 標準中,memset 標準庫函數原型為 void*memset (void*s, intc, size_t, η),其中輸入參數s、c和η分別對應于目標填充地址、特定填充數據和填充規模。memset標準庫函數本質是將某一特定內存區域以特定單字節數據填充,通常用于為新申請的內存塊進行初始化。其典型執行是單字節的數據填充,然而這種算法在內存塊較小時性能尚可,當待填充的內存塊較大時,多次循環耗時代價大,性能極低。因此,如何實現多字節的填充是眾多memset標準庫函數優化算法的設計重點。現代微處理器的指令集都提供了字節,半字、字尋址,支持多字節數據傳輸。為了充分發揮處理器的數據帶寬,在采用多字節數據傳輸指令對特定內存塊實現數據填充時,需要考慮目標填充地址的對齊問題。例如,4字節數據傳輸指令要求目標填充地址必須為4字節對齊,否則不對齊的訪問會觸發異常。因此,根據待填充內存地址對齊與否,選取可用的數據傳輸指令,是生成優化的memset標準庫函數匯編代碼的關鍵所在。另外,考慮到待填充的數據在高速緩沖存儲器(Cache)中不命中時,會影響函數執行性能。因此,以Cache塊大小為填充規模的上界,每次只以Cache塊大小為循環填充單位,從降低Cache缺失率的角度上提高了 memset標準庫函數的執行性能。綜上,優化的memset標準庫函數在執行時,根據輸入參數,進行分支判斷,依據判斷結果分別跳轉到具有針對性優化地填充執行片段上。因此,優化的memset標準庫函數的匯編代碼需要從填充數據的擴展部分、分支判斷部分和優化的填充執行片段部分這幾個角度由程序自動生成。圖1為本專利技術實施例提供的流程示意圖。本專利技術實施例提供的一種優化的memset標準庫函數的匯編代碼生成方法包括分支判斷部分和優化的填充執行片段部分。如圖1所示,本專利技術實施例包括步驟101-步驟105。步驟101至本文檔來自技高網...
【技術保護點】
一種優化的memset標準庫函數匯編代碼生成方法,其特征在于:根據目標機器的硬件特性,確定待生成的優化的填充執行片段所具有的屬性特征及規模;根據所述待生成的優化的填充執行片段的規模,構造集中跳轉表,所述集中跳轉表由多條分支跳轉語句構成,每條分支跳轉語句旨在將執行路徑引向相應的優化的填充執行片段;根據所述集中跳轉表,基于目標機器可用的邏輯運算指令,對輸入參數中的目標填充地址和填充規模按照所述待生成的優化的填充執行片段的屬性特征進行分支判斷,建立輸入參數集到所述集中跳轉表的映射關系;根據目標機器可用的數據傳輸指令集、所述待生成的優化的填充執行片段的屬性特征,生成滿足填充要求的填充模式集合;根據所述目標機器的硬件特性,對所述填充模式集合進行性能篩選,得到具有最優填充性能的填充模式,由此生成優化的填充執行片段。
【技術特征摘要】
【專利技術屬性】
技術研發人員:朱浩,應歡,王東輝,洪纓,
申請(專利權)人:中國科學院聲學研究所,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。