System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本專利技術涉及數據科學和高性能計算領域,具體涉及一種基于numba的大規模實例符號模型誤差計算方法,該方法利用numba實現符號模型的快速誤差計算。
技術介紹
1、符號模型是一種用于表示符號操作的模型,常見形式為數學表達式和方程,廣泛應用于科研和工程中的數據描述與預測,包括回歸分析、運動控制、數理規律表示等。模型優化、模型比較時需要計算預測模型與真實數據或真實模型的誤差,當模型數量大、實例數據多時計算很慢,尤其在符號回歸、高科解釋性研究中十分耗時,嚴重影響計算效率。
2、隨著大數據技術和高性能計算的發展,學者們設計了各種同構并行和異構并行的符號模型誤差計算方法。符號模型的常用誤差包括和方差、均方誤差、均方根誤差、決定系數等,都包括單個實例誤差計算、誤差求和等步驟。同構并行方法創建多個線程,并行計算不同實例數據的誤差再進行求和,在cpu物理核心的數量和特性限制下,加速效果受限。異構并行方法將誤差計算及求和部署在單指令流多數據流架構的gpu上,與同構并行方法類似,但充分利用了gpu多核心優勢,加速效果顯著。目前的異構并行算法多利用基于c語言的opencl和cuda獲取gpu計算資源,對編碼能力要求較高,數據科學中廣泛使用python語言,目前有利用tensorflow庫向量化的方式對python語言環境下的誤差計算加速,將問題復雜化,并且并行粒度與計算流程并行化不足。
技術實現思路
1、本專利技術的目的是提供一種基于numba的大規模實例符號模型誤差計算方法,用以提高當前異
2、為了實現上述任務,本專利技術采用以下技術方案:
3、一種基于numba的大規模實例符號模型誤差計算方法,包括:
4、在numba環境下,將基于語法樹編碼的符號模型進行后續遍歷,得到序列化的逆波蘭式,然后根據對應關系將逆波蘭式表示為數組;然后將待進行計算的實例數據和數組形式的逆波蘭式從主機內存發送至gpu,分別存儲在全局內存和常量內存中;
5、申請二維的網格結構和二維的塊結構,基于線程在塊結構中的位置以及塊結構在網格中的位置,為每個線程進行數據索引的分配,為實例數據中的每條數據分配線程,在共享內存中為每個線程分配模擬棧;
6、對于數組形式的逆波蘭式,利用每條數據分配的線程將每條數據代入逆波蘭式分別進行數據誤差的計算;按順序對逆波蘭式中不同結點類型執行不同的棧操作,模擬棧的棧底數值即為逆波蘭式的輸出;基于該輸出和每條數據的實際輸出,得到數據誤差;
7、當所有線程的數據誤差均計算完畢后,進行兩次誤差歸并處理:第一次誤差歸并對每個塊結構中所有線程計算的數據誤差并行求和存儲于該塊結構的第一個模擬棧作為該塊結構的誤差和;第二次誤差歸先將每個塊結構的誤差和復制至已分配的全局內存,并進行逐步求和,得到最終誤差值并存儲于網格結構中第一個模擬棧的棧底,最后將誤差值發送至主機。
8、進一步地,所述對應關系為符號模型中節點類型與數組中常量數據的對應關系;節點類型包括加減乘除等運算符,常量數據為整數。
9、進一步地,全局內存、常量內存每個線程都可以訪問,共享內存僅同一個塊結構內的線程可以訪問。
10、進一步地,設置網格結構為(gd.x,gd.y),其中每一個塊結構為(bd.x,bd.y),某線程在該塊結構中的位置為(tid.x,tid.y),該塊在網格中的位置為(bid.x,bid.y),本專利技術為該線程分配的數據索引為:
11、id=(bid.y×gd.x+bid.x)×(bd.x×bd.y)+tid.y×bd.x+tid.x
12、其中,gd.x,gd.y為網格結構的x、y坐標位置,bd.x,bd.y為塊結構的x、y坐標位置,tid.x,tid.y為線程在塊結構中的x、y坐標位置,bid.x,bid.y為塊結構在網格結構中的x、y坐標位置;
13、在共享內存區為每個線程分配模擬棧,設逆波蘭式program長度為lmax,則模型棧的數組大小設為同時在本地內存區分配棧索引,在全局內存分配大小為的數組為第二次誤差歸并提供支持;n為實例數據中數據的數量。
14、進一步地,每個線程按照以下規則進行計算:
15、對于每條數據xi中的變量和常量值直接壓棧,對于一元操作符直接對棧頂元素計算,二元操作符將棧頂兩個元素作為輸入計算并覆蓋,棧底數據即為每條數據經過逆波蘭式的輸出,再計算該輸出與對應實際輸出yi的差值平方,即為均方根誤差。
16、進一步地,在第一次誤差歸并時,每個塊結構執行相同操作,根據塊結構內線程索引和步長控制線程對誤差求和,步長變化為最終每個塊的第一個線程對應的模擬棧的棧底為塊誤差和;其中k滿足
17、進一步地,在第二次誤差歸并,首先將每個塊結構的誤差和復制至已分配的全局內存,根據步長{2k,2k-1,…,1}逐步求和,最終總的誤差值并存儲于網格結構中第一個模擬棧的棧底。
18、一種計算設備,包括處理器、存儲器以及存儲在所述存儲器中的計算機程序;處理器執行計算機程序時,實現所述基于numba的大規模實例符號模型誤差計算方法。
19、一種計算機可讀存儲介質,所述介質中存儲有計算機程序;計算機程序被處理器執行時,實現所述基于numba的大規模實例符號模型誤差計算方法。
20、與現有技術相比,本專利技術具有以下技術特點:
21、1.本專利技術提供了基于numba庫的符號模型表示方法,利用模擬棧的輸出計算方法,為python環境下獲取nvidia?gpu的cuda資源提供了符號模型誤差計算范式,可以被廣泛用于各種領域的符號模型評估。
22、2.本專利技術構造了高并行粒度的大規模實例數據線程分配方式,兩次誤差歸并使得誤差計算全過程并行化,可用于其他異構符號模型誤差計算中,從而提高算法的整體效率。
本文檔來自技高網...【技術保護點】
1.一種基于Numba的大規模實例符號模型誤差計算方法,其特征在于,包括:
2.根據權利要求1所述的基于Numba的大規模實例符號模型誤差計算方法,其特征在于,所述對應關系為符號模型中節點類型與數組中常量數據的對應關系;節點類型包括加減乘除等運算符,常量數據為整數。
3.根據權利要求1所述的基于Numba的大規模實例符號模型誤差計算方法,其特征在于,全局內存、常量內存每個線程都可以訪問,共享內存僅同一個塊結構內的線程可以訪問。
4.根據權利要求1所述的基于Numba的大規模實例符號模型誤差計算方法,其特征在于,設置網格結構為(gD.x,gD.y),其中每一個塊結構為(bD.x,bD.y),某線程在該塊結構中的位置為(tId.x,tId.y),該塊在網格中的位置為(bId.x,bId.y),本專利技術為該線程分配的數據索引為:
5.根據權利要求1所述的基于Numba的大規模實例符號模型誤差計算方法,其特征在于,每個線程按照以下規則進行計算:
6.根據權利要求1所述的基于Numba的大規模實例符號模型誤差計算方法,其特征在于
7.根據權利要求1所述的基于Numba的大規模實例符號模型誤差計算方法,其特征在于,在第二次誤差歸并,首先將每個塊結構的誤差和復制至已分配的全局內存,根據步長{2k,2k-1,…,1}逐步求和,最終總的誤差值并存儲于網格結構中第一個模擬棧的棧底。
8.一種計算設備,包括處理器、存儲器以及存儲在所述存儲器中的計算機程序;其特征在于,處理器執行計算機程序時,實現根據權利要求1-7中任一項所述基于Numba的大規模實例符號模型誤差計算方法。
9.一種計算機可讀存儲介質,所述介質中存儲有計算機程序;其特征在于,計算機程序被處理器執行時,實現根據權利要求1-7中任一項所述基于Numba的大規模實例符號模型誤差計算方法。
...【技術特征摘要】
1.一種基于numba的大規模實例符號模型誤差計算方法,其特征在于,包括:
2.根據權利要求1所述的基于numba的大規模實例符號模型誤差計算方法,其特征在于,所述對應關系為符號模型中節點類型與數組中常量數據的對應關系;節點類型包括加減乘除等運算符,常量數據為整數。
3.根據權利要求1所述的基于numba的大規模實例符號模型誤差計算方法,其特征在于,全局內存、常量內存每個線程都可以訪問,共享內存僅同一個塊結構內的線程可以訪問。
4.根據權利要求1所述的基于numba的大規模實例符號模型誤差計算方法,其特征在于,設置網格結構為(gd.x,gd.y),其中每一個塊結構為(bd.x,bd.y),某線程在該塊結構中的位置為(tid.x,tid.y),該塊在網格中的位置為(bid.x,bid.y),本發明為該線程分配的數據索引為:
5.根據權利要求1所述的基于numba的大規模實例符號模型誤差計算方法,其特征在于,每個線程按照以下規則進行計算:
<...【專利技術屬性】
技術研發人員:蘇照兵,魯特剛,張成,熊濤,呂亞澤,吳永琪,秦鵬飛,林文琦,
申請(專利權)人:西北機電工程研究所,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。