本發(fā)明涉及數(shù)據(jù)處理,特別是涉及一種多維度數(shù)據(jù)的處理方法、裝置、設(shè)備和介質(zhì)。
背景技術(shù):
1、隨著深度學(xué)習(xí)和人工智能技術(shù)的飛速進步,對于能夠執(zhí)行復(fù)雜計算任務(wù)的高性能計算能力的需求也急劇增加。在圖形處理器(graphics?processing?unit,gpu)的環(huán)境下,使用計算統(tǒng)一設(shè)備架構(gòu)(compute?unified?device?architecture,cuda)進行并行計算已成為提升計算速度的關(guān)鍵手段。
2、在深度學(xué)習(xí)中,張量(tensor)是基本的數(shù)據(jù)結(jié)構(gòu),其通過形狀(shape)、步長(strides)、維度(ndim)等屬性參數(shù)描述多維數(shù)組的布局。cuda算子在執(zhí)行時,經(jīng)常需要處理的數(shù)據(jù)在內(nèi)存中并不是連續(xù)存儲的,或者如果兩個張量的形狀不完全相同,由于它們的元素?zé)o法一一對應(yīng),直接進行元素級運算通常是不可能的。這意味著在進行計算時,計算機需要不斷地在不同的內(nèi)存位置之間跳轉(zhuǎn),并不能按序存取數(shù)據(jù),否則會造成越界錯誤。需要根據(jù)形狀、步長和維度等這些屬性參數(shù)計算出每個元素在內(nèi)存中的確切位置即索引,以實現(xiàn)數(shù)據(jù)的正確讀寫。傳統(tǒng)的索引計算方法往往面臨越界訪問、計算復(fù)雜度高以及難以并行化等問題,這些問題限制了整體性能的提升。
3、可見,如何高效、準(zhǔn)確的實現(xiàn)數(shù)據(jù)的存取和計算,是本領(lǐng)域技術(shù)人員需要解決的問題。
技術(shù)實現(xiàn)思路
1、本發(fā)明實施例的目的是提供一種多維度數(shù)據(jù)的處理方法、裝置、設(shè)備和介質(zhì),可以解決索引計算面臨的越界訪問、計算復(fù)雜度高以及難以并行化的問題。
2、為解決上述技術(shù)問題,本發(fā)明實施例提供一種多維度數(shù)據(jù)的處理方法,包括:
3、依據(jù)輸入的張量參數(shù)對模板進行實例化處理,以得到偏移量計算實例;其中,所述張量參數(shù)包括輸入數(shù)組和輸出數(shù)組各自對應(yīng)的形狀、步長、維度和數(shù)據(jù);
4、對所述偏移量計算實例進行初始化操作,以確定出每個輸入數(shù)組在每個輸出維度上的步長和形狀,并將每個輸入數(shù)組在每個輸出維度上的步長和形狀記錄在設(shè)定的存儲空間;
5、啟動所述偏移量計算實例對所述存儲空間中記錄的每個輸入數(shù)組在每個輸出維度上的步長和形狀進行索引計算,以得到所述輸出數(shù)組對應(yīng)的偏移量;
6、按照設(shè)定的運算規(guī)則對所述偏移量對應(yīng)的數(shù)據(jù)進行運算,以得到輸出結(jié)果。
7、一方面,啟動所述偏移量計算實例對所述存儲空間中記錄的每個輸入數(shù)組在每個輸出維度上的步長和形狀進行索引計算,以得到所述輸出數(shù)組對應(yīng)的偏移量包括:
8、初始化一個全零的偏移量寄存器;其中,所述偏移量寄存器用于存儲偏移量;
9、遍歷所述輸出數(shù)組的維度,從所述存儲空間中讀取當(dāng)前維度下的形狀和步長;
10、判斷當(dāng)前維度是否小于或等于最大維度值并且已遍歷完所述輸出數(shù)組的所有維度;
11、在當(dāng)前維度小于或等于最大維度值并且未遍歷完所述輸出數(shù)組的所有維度的情況下,利用所述偏移量計算實例內(nèi)置的取余函數(shù)對當(dāng)前索引對應(yīng)的形狀和步長進行取余操作,將得到的商值作為下一維度的索引,將余數(shù)與步長的乘積作為當(dāng)前維度對應(yīng)的偏移量;
12、將當(dāng)前維度對應(yīng)的偏移量存儲至所述偏移量寄存器;
13、將當(dāng)前維度加一作為最新的當(dāng)前維度,并將下一維度的索引作為最新的當(dāng)前索引,返回從所述存儲空間中讀取當(dāng)前維度下的形狀和步長的步驟;
14、直至當(dāng)前維度大于最大維度值或者遍歷完所述輸出數(shù)組的所有維度,則結(jié)束對所述輸出數(shù)組的維度的遍歷,并讀取所述偏移量寄存器中記錄的所有維度對應(yīng)的偏移量;
15、將所有維度對應(yīng)的偏移量的累加值作為輸出數(shù)組對應(yīng)的偏移量。
16、一方面,遍歷所述輸出數(shù)組的維度,從所述存儲空間中讀取當(dāng)前維度下的形狀和步長之后,還包括:
17、在所述輸入數(shù)組的維度大于或等于所述輸出數(shù)組的維度的情況下,對所述輸入數(shù)組的元素執(zhí)行復(fù)制操作以匹配所述輸出數(shù)組的維度。
18、一方面,利用所述偏移量計算實例內(nèi)置的取余函數(shù)對當(dāng)前索引對應(yīng)的形狀和步長進行取余操作包括:
19、利用所述偏移量計算實例包含的divmod函數(shù)對當(dāng)前索引對應(yīng)的形狀和步長進行取余操作。
20、一方面,在依據(jù)輸入的張量參數(shù)對模板進行實例化處理,以得到偏移量計算實例之前,還包括:
21、在所述模板中部署統(tǒng)一計算設(shè)備架構(gòu)的關(guān)鍵字,以使得數(shù)據(jù)在圖形處理器上執(zhí)行多次計算并且無需傳回中央處理器。
22、一方面,按照設(shè)定的運算規(guī)則對所述偏移量對應(yīng)的數(shù)據(jù)進行運算,以得到輸出結(jié)果包括:
23、調(diào)用指針?biāo)阈g(shù)計算公式對所述偏移量對應(yīng)的數(shù)據(jù)進行處理,以得到輸出結(jié)果;其中,所述指針?biāo)阈g(shù)計算公式如下:
24、;
25、其中,表示輸出結(jié)果,表示執(zhí)行函數(shù),表示運算規(guī)則對應(yīng)的函數(shù),表示所述偏移量對應(yīng)的數(shù)據(jù)的指針,表示所述偏移量。
26、一方面,在依據(jù)輸入的張量參數(shù)對模板進行實例化處理,以得到偏移量計算實例之后,還包括:
27、在獲取到配置調(diào)整指令的情況下,根據(jù)所述配置調(diào)整指令中攜帶的新的模板參數(shù)對所述偏移量計算實例包含的初始模板參數(shù)進行調(diào)整,以得到新的偏移量計算實例;其中,所述模板參數(shù)包括輸入數(shù)組的數(shù)量、索引的類型和/或步長類型。
28、本發(fā)明實施例還提供了一種多維度數(shù)據(jù)的處理裝置,包括實例化單元、初始化單元、索引計算單元和運算單元;
29、所述實例化單元,用于依據(jù)輸入的張量參數(shù)對模板進行實例化處理,以得到偏移量計算實例;其中,所述張量參數(shù)包括輸入數(shù)組和輸出數(shù)組各自對應(yīng)的形狀、步長、維度和數(shù)據(jù);
30、所述初始化單元,用于對所述偏移量計算實例進行初始化操作,以確定出每個輸入數(shù)組在每個輸出維度上的步長和形狀,并將每個輸入數(shù)組在每個輸出維度上的步長和形狀記錄在設(shè)定的存儲空間;
31、所述索引計算單元,用于啟動所述偏移量計算實例對所述存儲空間中記錄的每個輸入數(shù)組在每個輸出維度上的步長和形狀進行索引計算,以得到所述輸出數(shù)組對應(yīng)的偏移量;
32、所述運算單元,用于按照設(shè)定的運算規(guī)則對所述偏移量對應(yīng)的數(shù)據(jù)進行運算,以得到輸出結(jié)果。
33、一方面,所述索引計算單元包括初始化子單元、第一讀取子單元、判斷子單元、取余子單元、存儲子單元、加一子單元、作為子單元、第二讀取子單元和累加子單元;
34、所述初始化子單元,用于初始化一個全零的偏移量寄存器;其中,所述偏移量寄存器用于存儲偏移量;
35、所述第一讀取子單元,用于遍歷所述輸出數(shù)組的維度,從所述存儲空間中讀取當(dāng)前維度下的形狀和步長;
36、所述判斷子單元,用于判斷當(dāng)前維度是否小于或等于最大維度值并且已遍歷完所述輸出數(shù)組的所有維度;
37、所述取余子單元,用于在當(dāng)前維度小于或等于最大維度值并且未遍歷完所述輸出數(shù)組的所有維度的情況下,利用所述偏移量計算實例內(nèi)置的取余函數(shù)對當(dāng)前索引對應(yīng)的形狀和步長進行取余操作,將得到的商值作為下一維度的索引,將余數(shù)與步長的乘積作為當(dāng)前維度對應(yīng)的偏移量;
38、所述存儲子單元,用于將當(dāng)前維度對應(yīng)的偏移量存儲至所述偏移量寄存器;
39、所述加一子單元,用于將當(dāng)前維度加一作為最新的當(dāng)前維度;
40、所述作為子單元,用于將下一維度的索引作為最新的當(dāng)前索引,返回從所述存儲空間中讀取當(dāng)前維度下的形狀和步長的步驟;
41、所述第二讀取子單元,用于直至當(dāng)前維度大于最大維度值或者遍歷完所述輸出數(shù)組的所有維度,則結(jié)束對所述輸出數(shù)組的維度的遍歷,并讀取所述偏移量寄存器中記錄的所有維度對應(yīng)的偏移量;
42、所述累加子單元,用于將所有維度對應(yīng)的偏移量的累加值作為輸出數(shù)組對應(yīng)的偏移量。
43、一方面,還包括復(fù)制單元;
44、所述復(fù)制單元,用于遍歷所述輸出數(shù)組的維度,從所述存儲空間中讀取當(dāng)前維度下的形狀和步長之后,在所述輸入數(shù)組的維度大于或等于所述輸出數(shù)組的維度的情況下,對所述輸入數(shù)組的元素執(zhí)行復(fù)制操作以匹配所述輸出數(shù)組的維度。
45、一方面,所述取余子單元用于利用所述偏移量計算實例包含的divmod函數(shù)對當(dāng)前索引對應(yīng)的形狀和步長進行取余操作。
46、一方面,還包括部署單元;
47、所述部署單元,用于在依據(jù)輸入的張量參數(shù)對模板進行實例化處理,以得到偏移量計算實例之前,在所述模板中部署統(tǒng)一計算設(shè)備架構(gòu)的關(guān)鍵字,以使得數(shù)據(jù)在圖形處理器上執(zhí)行多次計算并且無需傳回中央處理器。
48、一方面,所述運算單元用于調(diào)用指針?biāo)阈g(shù)計算公式對所述偏移量對應(yīng)的數(shù)據(jù)進行處理,以得到輸出結(jié)果;其中,所述指針?biāo)阈g(shù)計算公式如下:
49、;
50、其中,表示輸出結(jié)果,表示執(zhí)行函數(shù),表示運算規(guī)則對應(yīng)的函數(shù),表示所述偏移量對應(yīng)的數(shù)據(jù)的指針,表示所述偏移量。
51、一方面,還包括調(diào)整單元;
52、所述調(diào)整單元,用于在依據(jù)輸入的張量參數(shù)對模板進行實例化處理,以得到偏移量計算實例之后,在獲取到配置調(diào)整指令的情況下,根據(jù)所述配置調(diào)整指令中攜帶的新的模板參數(shù)對所述偏移量計算實例包含的初始模板參數(shù)進行調(diào)整,以得到新的偏移量計算實例;其中,所述模板參數(shù)包括輸入數(shù)組的數(shù)量、索引的類型和/或步長類型。
53、本發(fā)明實施例還提供了一種多維度數(shù)據(jù)的處理設(shè)備,包括:
54、存儲器,用于存儲計算機程序;
55、處理器,用于執(zhí)行所述計算機程序以實現(xiàn)如上述多維度數(shù)據(jù)的處理方法的步驟。
56、本發(fā)明實施例還提供了一種計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)上存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)如上述多維度數(shù)據(jù)的處理方法的步驟。
57、本發(fā)明實施例還提供了一種計算機程序產(chǎn)品,包括計算機程序/指令,該計算機程序/指令被處理器執(zhí)行時實現(xiàn)上述多維度數(shù)據(jù)的處理方法的步驟。
58、由上述技術(shù)方案可以看出,依據(jù)輸入的張量參數(shù)對模板進行實例化處理,以得到偏移量計算實例;其中,張量參數(shù)包括輸入數(shù)組和輸出數(shù)組各自對應(yīng)的形狀、步長、維度和數(shù)據(jù)。為了避免在每次操作時重復(fù)傳遞并復(fù)制相同的數(shù)據(jù),可以對偏移量計算實例進行初始化操作,以確定出每個輸入數(shù)組在每個輸出維度上的步長和形狀,并將每個輸入數(shù)組在每個輸出維度上的步長和形狀記錄在設(shè)定的存儲空間。啟動偏移量計算實例對存儲空間中記錄的每個輸入數(shù)組在每個輸出維度上的步長和形狀進行索引計算,以得到輸出數(shù)組對應(yīng)的偏移量。按照設(shè)定的運算規(guī)則對偏移量對應(yīng)的數(shù)據(jù)進行運算,以得到輸出結(jié)果。本發(fā)明的有益效果在于,通過預(yù)計算每個輸入數(shù)組在每個輸出維度上的步長和形狀,可以減少不必要的內(nèi)存訪問,提高了內(nèi)存訪問效率。并且通過構(gòu)建偏移量計算實例簡化了索引計算過程,極大地減輕了圖形處理器上的計算負(fù)擔(dān)。整個實現(xiàn)過程無需進行復(fù)雜的索引計算和動態(tài)內(nèi)存訪問,而是直接利用計算得到的偏移量快速定位數(shù)據(jù),高效、準(zhǔn)確的實現(xiàn)數(shù)據(jù)的存取和計算。并且這種直接訪問模式顯著提高了并行處理的效率,使得大規(guī)模數(shù)據(jù)處理任務(wù)能夠更快地完成。