本發(fā)明涉及一種移植數(shù)學計算庫的方法、裝置和存儲介質,屬于計算機領域。
背景技術:
1、數(shù)學計算庫是支持科學計算、圖像處理、人工智能和其他高性能運算領域的基礎軟件組件。近年來,隨著硬件的發(fā)展,處理器架構逐漸朝向量化方向演進,現(xiàn)代處理器通常配備simd指令集,以提升在向量化計算中的性能表現(xiàn)。為充分利用硬件的并行計算能力,數(shù)學計算庫的開發(fā)與優(yōu)化重點逐漸轉向支持這些指令集,從而提高數(shù)據(jù)并行計算的效率。
2、sleef是一個開源的數(shù)學計算庫,專門用于通過simd指令集高效計算基本的數(shù)學函數(shù),如三角函數(shù)、指數(shù)函數(shù)、對數(shù)函數(shù)等。在國際主流處理器中,sleef被廣泛應用于各種高性能計算場景,sleef通過利用向量化計算和并行執(zhí)行,顯著提升了這些基礎數(shù)學運算的效率。
3、然而,國產處理器由于其獨特的指令集和架構設計,直接移植sleef庫往往面臨性能不足、適配困難的問題。特別是涉及處理器的simd指令集時,移植過程中不僅需要考慮代碼的正確性,還需要針對目標處理器的硬件架構進行深度優(yōu)化,以充分發(fā)揮處理器的并行計算能力。因此,移植與優(yōu)化sleef庫成了一個亟待解決的課題。對于國產處理器來說,開發(fā)一套專門適配其架構的sleef版本,能夠有效提升數(shù)學計算的性能,進而提高高性能計算及人工智能等應用場景的執(zhí)行效率。
4、目前,針對國產處理器的sleef庫移植存在以下幾個缺陷:
5、硬件架構差異:國產處理器的架構設計與x86、arm存在顯著差異,這些硬件差異使得sleef在移植至國產處理器時面臨適配困難,直接移植可能會導致計算性能下降,甚至可能出現(xiàn)兼容性問題。
6、simd指令集不支持:sleef庫的核心是通過simd指令集進行高效并行計算,但現(xiàn)有版本的sleef主要針對國際主流架構的simd擴展進行優(yōu)化。國產處理器的simd指令集在sleef中缺乏專門支持,導致運算性能無法充分發(fā)揮。
技術實現(xiàn)思路
1、本發(fā)明的目的在于克服現(xiàn)有技術中的不足,提供一種移植數(shù)學計算庫的方法、裝置和存儲介質,解決移植數(shù)學計算庫過程出錯影響該數(shù)學計算庫運算性能的問題。
2、為解決上述技術問題,本發(fā)明是采用下述技術方案實現(xiàn)的:
3、第一方面,本發(fā)明提供了一種移植數(shù)學計算庫的方法,包括:
4、s1:確定移植目標和被移植的數(shù)學計算庫,搭建移植所需的開發(fā)環(huán)境;所述移植目標為接收被移植數(shù)學計算庫的載體;
5、s2:對步驟s1中的數(shù)學計算庫的源碼進行分析;所述分析包括:分析數(shù)學計算庫源碼結構、數(shù)據(jù)計算庫指令集支持情況、數(shù)學計算庫編譯方法和測試用例。
6、s3:根據(jù)步驟s1中移植目標的架構特點和步驟s2的分析結果,對數(shù)學計算庫進行架構移植;
7、s4:根據(jù)步驟s1中移植目標的指令集特點,對數(shù)學計算庫進行優(yōu)化;數(shù)學計算庫優(yōu)化包括編譯優(yōu)化和代碼優(yōu)化,所述編譯優(yōu)化通過調整編譯約束降低編譯過程的出錯率,所述代碼優(yōu)化通過移植目標的指令集優(yōu)化數(shù)學計算庫;
8、s5:編譯修改后的數(shù)學計算庫源碼。
9、前述移植數(shù)學計算庫的方法,步驟s1中的移植目標為處理器,所述搭建移植所需的開發(fā)環(huán)境包括安裝移植所需的系統(tǒng)庫和開發(fā)庫,所述系統(tǒng)庫和開發(fā)庫包括編譯器、標準c庫和cmake工具。
10、前述移植數(shù)學計算庫的方法,在步驟s3中,所述架構移植包括在數(shù)學計算庫的源碼中進行以下步驟:
11、s31:設計處理器架構識別方法;
12、s32:編譯用于編譯器驗證與啟用指令集的代碼;
13、s33:進行處理器的頭文件配置并設置所需指令集的參數(shù);
14、s34:進行編譯條件配置用于開啟處理器的指令集。
15、前述移植數(shù)學計算庫的方法,當數(shù)學計算庫為sleef庫,處理器為申威處理器時,
16、步驟s31包括:在sleef庫源碼的配置文件configure.cmake文件中,通過cmake_system_processor變量對處理器架構進行檢測,當檢測到系統(tǒng)處理器為sw_64時,設置sleef_arch_sw64標志;
17、步驟s32包括:在sleef庫源碼的配置文件configure.cmake文件中,使用check_c_source_compiles命令編譯c代碼,確認申威平臺的編譯器是否支持被驗證的指令集;
18、步驟s33包括:分別在sleef庫源碼的libm和quad目錄下的配置文件cmakelists.txt文件中,定義申威處理器架構的頭文件sleef_header_list,并分別設置各個所需指令集的參數(shù);
19、步驟s34包括:在sleef庫源碼的arch目錄下的頭文件中,添加#if?defined(__sw_64__)編譯選項,開啟申威架構下的指令集。
20、前述移植數(shù)學計算庫的方法,在步驟s4中,所述編譯優(yōu)化通過調整編譯約束降低編譯過程的出錯率包括:在sleef庫源碼的配置文件configure.cmake文件中,添加-fno-strict-aliasing編譯選項。
21、前述移植數(shù)學計算庫的方法,在步驟s4中,所述編譯優(yōu)化還包括添加-d_simd_編譯選項用于申威處理器啟用支持的simd指令集。
22、前述移植數(shù)學計算庫的方法,在步驟s4中,所述代碼優(yōu)化通過移植目標的指令集優(yōu)化數(shù)學計算庫包括:添加申威平臺的simd指令集擴展函數(shù)庫avx2sw64.h到被移植的數(shù)學計算庫中,用于優(yōu)化被移植數(shù)學計算庫的運算處理能力。
23、前述移植數(shù)學計算庫的方法,步驟s5還包括得到測試用例的可執(zhí)行程序,當所述數(shù)學計算庫為sleef庫時,所述可執(zhí)行程序包括avx指令集和/或avx2指令集和/或avx2128指令集和/或sse2指令集和/或sse4指令集的可執(zhí)行程序。
24、第二方面,本發(fā)明提供一種移植數(shù)學計算庫的裝置,包括環(huán)境搭建模塊、分析模塊、架構移植模塊、優(yōu)化模塊和編譯模塊;
25、環(huán)境搭建模塊用于:確定移植目標和被移植的數(shù)學計算庫,搭建移植所需的開發(fā)環(huán)境;所述移植目標為接收被移植數(shù)學計算庫的載體;
26、分析模塊用于:對數(shù)學計算庫的源碼進行分析;所述分析包括:分析數(shù)學計算庫源碼結構、數(shù)據(jù)計算庫指令集支持情況、數(shù)學計算庫編譯方法和測試用例;
27、架構移植模塊用于:根據(jù)移植目標的架構特點和分析模塊的分析結果,對數(shù)學計算庫進行架構移植;
28、優(yōu)化模塊用于:根據(jù)移植目標的指令集特點,對數(shù)學計算庫進行優(yōu)化;數(shù)學計算庫優(yōu)化包括編譯優(yōu)化和代碼優(yōu)化,所述編譯優(yōu)化通過調整編譯約束降低編譯過程的出錯率,所述代碼優(yōu)化通過移植目標的指令集優(yōu)化數(shù)學計算庫;
29、編譯模塊用于:編譯修改后的數(shù)學計算庫源碼。
30、第三方面,本發(fā)明提供一種計算機可讀存儲介質,其上存儲有計算機程序,該程序被處理器執(zhí)行時實現(xiàn)第一方面任一項所述方法的步驟。
31、與現(xiàn)有技術相比,本發(fā)明所達到的有益效果:
32、本發(fā)明通過分析移植目標和被移植數(shù)學計算庫的特點,一方面調整編譯約束降低編譯過程的出錯率,提高計算結果的準確性和移植效率;另一方面通過移植目標的指令集優(yōu)化數(shù)學計算庫,結合移植目標的自身特點進一步提高被移植數(shù)學計算庫的運算能力,從而實現(xiàn)移植數(shù)學計算庫方法的優(yōu)化,解決移植數(shù)學計算庫影響該數(shù)學計算庫運算性能的問題。
33、當移植目標為處理器時,本發(fā)明通過分析數(shù)學計算庫源碼結構和處理器的架構特點,添加了架構檢測、指令集啟用及頭文件配置等步驟,使數(shù)學計算庫sleef庫能夠適應國產處理器的特性,從而實現(xiàn)其在國產處理器平臺上的順利移植,解決了數(shù)學計算庫與處理器架構之間的兼容性問題。
34、通過優(yōu)化數(shù)學計算庫的指令集,提升了國產處理器的數(shù)學運算性能。具體來說,啟用-d_simd_和-fno-strict-aliasing編譯選項,添加國產處理器自帶的simd擴展庫至數(shù)學計算庫sleef庫,修改相關代碼,降低編譯過程出錯率的同時提升了被移植的數(shù)學計算庫運算的并行化處理能力。
35、本發(fā)明移植數(shù)學計算庫的方法有效提高了國產處理器的數(shù)學計算性能,促進了國產處理器在高性能計算、人工智能等領域的廣泛應用。