本發(fā)明涉及分布式計(jì)算技術(shù)領(lǐng)域,具體涉及一種數(shù)據(jù)處理方法和裝置。
背景技術(shù):
隨著大數(shù)據(jù)分析研究成為熱點(diǎn),近年在工業(yè)界基于MPI的分布式內(nèi)存計(jì)算平臺(tái)再次引起重視。
針對(duì)海量大數(shù)據(jù)的分析處理,現(xiàn)在流行的分布式計(jì)算平臺(tái)大體包含如下幾種:hadoop中MapReduce計(jì)算,spark,流式計(jì)算(storm為代表),基于mpi的內(nèi)存計(jì)算。但大多數(shù)這些平臺(tái)的硬件底層都采用CPU作為核心計(jì)算節(jié)點(diǎn)。采用底層都采用CPU計(jì)算節(jié)點(diǎn)的平臺(tái),可能產(chǎn)生由于CPU性能限制的問題導(dǎo)致運(yùn)算速度較慢的問題。
另外,一些專業(yè)領(lǐng)域最近也推出了一些專用平臺(tái),但采用的計(jì)算節(jié)點(diǎn)也是單一模式,在CPU(Central Processing Unit,中央處理器)、GPU(Graphic Processing Unit,圖形處理器)、FPGA(Field-Programmable Gate Array,現(xiàn)場(chǎng)可編程門陣列)、DSP(digital signal processor,數(shù)字信號(hào)處理器)中選擇其一,且只是在某一專業(yè)領(lǐng)域中發(fā)揮作用,對(duì)通用性、兼容性支持不足,一旦業(yè)務(wù)模式發(fā)生變化,這些專用計(jì)算平臺(tái)往往不能使用或不能發(fā)揮出優(yōu)勢(shì)。
總之,采用單一的計(jì)算單元,對(duì)于不同的計(jì)算需求,不能充分發(fā)揮性能優(yōu)勢(shì),還可能通用性、兼容性支持不足。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種數(shù)據(jù)處理裝置和相應(yīng)的一種數(shù)據(jù)處理方法。
依據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)處理方法,包括:
根據(jù)輸入數(shù)據(jù)的數(shù)據(jù)類型所對(duì)應(yīng)的向量模板的輸入接口,將輸入數(shù)據(jù)載入所述向量模板得到計(jì)算向量;
將處理邏輯中對(duì)應(yīng)所述計(jì)算向量拆分為各計(jì)算子向量;
獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合;
如果所述OP算子能夠拆分為各個(gè)子算子的組合,則將OP算子拆分為各個(gè)子算子的組合,并根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理;
根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的計(jì)算子向量中,循環(huán)進(jìn)入獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合以及選擇相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算的過程,直至計(jì)算結(jié)束。
優(yōu)選的,還包括:如果所述OP算子不能夠拆分為各個(gè)子算子的組合,根據(jù)所述OP算子的運(yùn)行特征,選擇適配OP算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
優(yōu)選的,根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理包括:
將所述OP算子對(duì)應(yīng)的計(jì)算子向量,按各子算子的個(gè)數(shù)拆解為相應(yīng)個(gè)數(shù)的分量,并將各分量輸入與子算子相應(yīng)的計(jì)算節(jié)點(diǎn)中以進(jìn)行處理。
優(yōu)選的,每個(gè)計(jì)算節(jié)點(diǎn)對(duì)計(jì)算子向量或者所述分量進(jìn)行處理包括:
調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用OP算子或者子算子對(duì)計(jì)算子向量或者所述分量進(jìn)行處理。
優(yōu)選的,還包括:預(yù)置各種類型的Map接口,所述Map接口用于規(guī)定在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源。
優(yōu)選的,所述根據(jù)OP算子或者子算子的運(yùn)行特征,選擇適配OP算子或各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn)包括:
根據(jù)所述OP算子或子算子的運(yùn)算類型,和/或采用所述OP算子或子算子計(jì)算所述計(jì)算子向量或所述分量所需要的數(shù)據(jù)規(guī)模,判斷適配OP算子或各子算子的處理器類型,并根據(jù)判斷結(jié)果選擇相應(yīng)計(jì)算節(jié)點(diǎn)。
優(yōu)選的,還包括:提供OP算子編輯接口;所述OP算子接口用于接收用戶根據(jù)子算子庫(kù)編輯的OP算子。
優(yōu)選的,還包括:提供子算子庫(kù)編輯接口;所述子算子庫(kù)編輯接口用于 接收用戶編輯的子算子。
優(yōu)選的,所述計(jì)算節(jié)點(diǎn)類型包括:
GPU類型計(jì)算節(jié)點(diǎn)、CPU類型計(jì)算節(jié)點(diǎn)、FPGA類型計(jì)算節(jié)點(diǎn)、DSP類型計(jì)算節(jié)點(diǎn)、ARM類型計(jì)算節(jié)點(diǎn)中至少兩個(gè)。
優(yōu)選的,在判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合之后,還包括:
根據(jù)各子算子和/或者OP算子的類型指定接口,直接確定相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
優(yōu)選的,還包括:
利用遍歷器遍歷各個(gè)輸出接口,逐個(gè)遍歷計(jì)算子向量的輸出接口,獲取所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果。
優(yōu)選的,還包括:各計(jì)算節(jié)點(diǎn)將計(jì)算過程日志輸出到全局向量中;
進(jìn)一步的,還包括:
提供全局向量查看接口,以接收用戶對(duì)計(jì)算過程的查看操作。
依據(jù)本發(fā)明的另一個(gè)方面,提供了一種數(shù)據(jù)處理裝置,包括:
模板向量處理模塊,適于根據(jù)輸入數(shù)據(jù)的數(shù)據(jù)類型所對(duì)應(yīng)的向量模板的輸入接口,將輸入數(shù)據(jù)載入所述向量模板得到計(jì)算向量;
計(jì)算向量分配模塊,適于將處理邏輯中對(duì)應(yīng)所述計(jì)算向量拆分為各計(jì)算子向量;
OP算子拆分模塊,適于獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合;
子算子計(jì)算選擇模塊,適于如果所述OP算子能夠拆分為各個(gè)子算子的組合,則將OP算子拆分為各個(gè)子算子的組合,并根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理;
循環(huán)計(jì)算模塊,適于根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的計(jì)算子向量中,轉(zhuǎn)入OP算子拆分模塊,進(jìn)行循環(huán)計(jì)算直至計(jì)算結(jié)束。
優(yōu)選的,還包括:
OP算子計(jì)算選擇模塊,適于如果所述OP算子不能夠拆分為各個(gè)子算子的組合,根據(jù)所述OP算子的運(yùn)行特征,選擇適配OP算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
優(yōu)選的,所述子算子計(jì)算選擇模塊包括:
拆解分配模塊,適于將所述OP算子對(duì)應(yīng)的計(jì)算子向量,按各子算子的個(gè)數(shù)拆解為相應(yīng)個(gè)數(shù)的分量,并將各分量輸入與子算子相應(yīng)的計(jì)算節(jié)點(diǎn)中以進(jìn)行處理。
優(yōu)選的,每個(gè)計(jì)算節(jié)點(diǎn)包括:
接口調(diào)用模塊,適于調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用OP算子或者子算子對(duì)計(jì)算子向量或者所述分量進(jìn)行處理。
優(yōu)選的,還包括:
接口預(yù)置模塊,適于預(yù)置各種類型的Map接口,所述Map接口用于規(guī)定在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源。
優(yōu)選的,所述子算子計(jì)算選擇模塊或者OP算子計(jì)算選擇模塊包括:
處理器類型判斷模塊,適于根據(jù)所述OP算子或子算子的運(yùn)算類型,和/或采用所述OP算子或子算子計(jì)算所述計(jì)算子向量或所述分量所需要的數(shù)據(jù)規(guī)模,判斷適配OP算子或各子算子的處理器類型,并根據(jù)判斷結(jié)果選擇相應(yīng)計(jì)算節(jié)點(diǎn)。
優(yōu)選的,還包括:
OP算子編輯模塊,適于提供OP算子編輯接口;所述OP算子接口用于接收用戶根據(jù)子算子庫(kù)編輯的OP算子。
優(yōu)選的,還包括:
子算子庫(kù)編輯模塊,適于提供子算子庫(kù)編輯接口;所述子算子庫(kù)編輯接口用于接收用戶編輯的子算子。
優(yōu)選的,所述計(jì)算節(jié)點(diǎn)類型包括:
GPU類型計(jì)算節(jié)點(diǎn)、CPU類型計(jì)算節(jié)點(diǎn)、FPGA類型計(jì)算節(jié)點(diǎn)、DSP 類型計(jì)算節(jié)點(diǎn)、ARM類型計(jì)算節(jié)點(diǎn)中至少兩個(gè)。
優(yōu)選的,還包括:
節(jié)點(diǎn)直接選擇模塊,適于在判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合之后,根據(jù)各子算子或者OP算子的類型指定接口,直接確定相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
優(yōu)選的,還包括:
結(jié)果輸出模塊,適于利用遍歷器遍歷各個(gè)輸出接口,逐個(gè)遍歷計(jì)算子向量的輸出接口,獲取所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果。
優(yōu)選的,還包括:
全局監(jiān)控模塊,適于各計(jì)算節(jié)點(diǎn)將計(jì)算過程日志輸出到全局向量中;
進(jìn)一步的,還包括:
過程查看模塊,適于提供全局向量查看接口,以接收用戶對(duì)計(jì)算過程的查看操作。
根據(jù)本發(fā)明的一種數(shù)據(jù)處理方法可以在分布式高性能異構(gòu)通用計(jì)算平臺(tái)的底層采用異構(gòu)的計(jì)算節(jié)點(diǎn),即可以采用多種處理器類型的計(jì)算節(jié)點(diǎn)混合構(gòu)建分布式的計(jì)算系統(tǒng),比如在整個(gè)計(jì)算系統(tǒng)中混合采用CPU處理器的計(jì)算節(jié)點(diǎn)、GPU處理器的計(jì)算節(jié)點(diǎn)等,然后對(duì)于用戶的輸入數(shù)據(jù),根據(jù)其類型采用預(yù)置的相應(yīng)類型的向量模板載入得到計(jì)算向量,而后在將計(jì)算向量拆分為計(jì)算子向量分配到各個(gè)計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算之前,先將用戶編輯的OP算子拆分為各個(gè)子算子的組合,判斷各個(gè)子算子在計(jì)算時(shí)更適配哪種處理器類型的計(jì)算節(jié)點(diǎn),也即采用哪種處理器類型的計(jì)算節(jié)點(diǎn)計(jì)算更快,然后再將數(shù)據(jù)發(fā)送至相應(yīng)計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算。此解決了現(xiàn)有的基于MPI的分布式通用計(jì)算平臺(tái)底層大部分采用單一處理器類型的計(jì)算節(jié)點(diǎn),無法利用不同處理器的性能優(yōu)點(diǎn)以提高計(jì)算速度,以及通用性弱的問題,取得了可以實(shí)現(xiàn)采用異構(gòu)方式實(shí)現(xiàn)計(jì)算平臺(tái),對(duì)于一個(gè)應(yīng)用的運(yùn)算中同時(shí)發(fā)揮CPU和GPU等不同類型的處理器的計(jì)算優(yōu)勢(shì),并行使用不同處理器類型的計(jì)算節(jié)點(diǎn),加快整體運(yùn)算速度,同時(shí)提高通用性、兼容性有益效果。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技 術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種數(shù)據(jù)處理方法的流程示意圖;
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種數(shù)據(jù)處理方法的流程示意圖;
圖2A示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種數(shù)據(jù)處理方法的執(zhí)行邏輯示意圖;
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖;
圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
本發(fā)明的核心思想之一在于:在實(shí)際應(yīng)用中,不同處理器具有不同方面的計(jì)算性能優(yōu)勢(shì),比如在浮點(diǎn)數(shù)運(yùn)算、數(shù)據(jù)并行計(jì)算、圖形圖像處理等數(shù)值運(yùn)算領(lǐng)域,GPU更具有優(yōu)勢(shì);而CPU的主頻更高、位寬更大,主要為串行指令而優(yōu)化。從并行的角度來看,現(xiàn)代的多核CPU針對(duì)指令集并行(ILP)和任務(wù)并行(TLP)更具有優(yōu)勢(shì),而GPU則對(duì)數(shù)據(jù)并行(DLP)更擅長(zhǎng)。那么本發(fā)明在基于MPI(全稱Message Passing Interface,是一個(gè)跨語言的通訊協(xié)議,支持點(diǎn)對(duì)點(diǎn)和廣播。它是一個(gè)信息傳遞應(yīng)用程序接口,包括協(xié)議和和語義說明)的分布式內(nèi)存計(jì)算平臺(tái)中,同時(shí)采用不同處理器類型的計(jì)算節(jié)點(diǎn),針對(duì)不同的應(yīng)用的輸入數(shù)據(jù),可以根據(jù)情況并行調(diào)用各種處理器類型的計(jì)算節(jié)點(diǎn)進(jìn)行運(yùn)算,充分利用不同處理器的優(yōu)勢(shì),使整個(gè)計(jì)算平臺(tái)的具備更 強(qiáng)的通用性和兼容性,并且能充分發(fā)揮不同處理器類型的計(jì)算節(jié)點(diǎn)的優(yōu)勢(shì)。
實(shí)施例一
參照?qǐng)D1,其示出了本發(fā)明一種數(shù)據(jù)處理方法的流程示意圖。具體可以包括:
步驟110,根據(jù)輸入數(shù)據(jù)的數(shù)據(jù)類型所對(duì)應(yīng)的向量模板的輸入接口,將輸入數(shù)據(jù)載入所述向量模板得到計(jì)算向量;
在本發(fā)明實(shí)施例中,預(yù)先按照數(shù)據(jù)的不同類型,設(shè)置的構(gòu)建各種類型的向量模板Vector。而后用戶可以根據(jù)自己需要選擇相應(yīng)的向量模板輸入數(shù)據(jù)。所述Vector包括:包括FixValueVector,SparseValueVector,SparseTextVector,VariableLenVector,Var,PVar,SparseMatrix等模板向量。其中,SparseValueVector表示數(shù)據(jù)稀疏的向量,對(duì)數(shù)據(jù)稀疏的輸入數(shù)據(jù)使用;FixValueVector表示數(shù)據(jù)稠密的向量,可對(duì)數(shù)據(jù)稠密的輸入數(shù)據(jù)使用;SparseTextVector表示字符串向量,可對(duì)字符串類型的輸入數(shù)據(jù)使用;VariableLenVector表示數(shù)據(jù)可變長(zhǎng)的向量,可對(duì)數(shù)據(jù)長(zhǎng)度可變的輸入數(shù)據(jù)使用;Var表示全局變量,可對(duì)在計(jì)算過程中全局使用的參數(shù)使用;PVar表示大數(shù)據(jù)量下的全局變量,可對(duì)在數(shù)據(jù)量較大的計(jì)算過程中全局使用的參數(shù)使用;SparseMatrix表示數(shù)據(jù)稀疏的矩陣,對(duì)以矩陣存在形式的輸入數(shù)據(jù)使用,可以理解為一種特殊的向量。
在本發(fā)明實(shí)施例中對(duì)于輸入數(shù)據(jù)key、value,直接以相應(yīng)的向量模板進(jìn)行裝載。
那么對(duì)于用戶設(shè)計(jì)的一個(gè)應(yīng)用,其可以將其輸入數(shù)據(jù)設(shè)計(jì)為采用相應(yīng)的向量模板載入。
在本發(fā)明實(shí)施例中,對(duì)于各個(gè)Vector,提供了數(shù)據(jù)輸入接口Emit。
在本發(fā)明實(shí)施例中,用戶可預(yù)先編輯處理邏輯,該處理邏輯既對(duì)輸入數(shù)據(jù)采用什么樣Vector載入,然后用什么OP算子計(jì)算輸入數(shù)據(jù)。還可定義輸入數(shù)據(jù)和全局變量。比如用戶采用稀疏類型的輸入數(shù)據(jù),并定義全局變量A,那么對(duì)于輸入數(shù)據(jù)可以調(diào)用SparseValueVector的Emit接口載入該輸入數(shù)據(jù),同時(shí)調(diào)用Var的Emit接口載入全局變量。
步驟120,將處理邏輯中對(duì)應(yīng)所述計(jì)算向量拆分為各計(jì)算子向量;
在基于MPI的分布式計(jì)算平臺(tái)中,輸入數(shù)據(jù)最終是要分散到多個(gè)計(jì)算節(jié)點(diǎn)中進(jìn)行計(jì)算的,即需要將輸入數(shù)據(jù)分為N塊,然后分散到相應(yīng)的N各計(jì)算節(jié)點(diǎn)中,由計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算。那么對(duì)應(yīng)輸入數(shù)據(jù)的計(jì)算向量,則需要將計(jì)算向量分為多個(gè)計(jì)算子向量。
在本發(fā)明實(shí)施例中,對(duì)于每種類型的向量模板,設(shè)置了將計(jì)算向量拆分為多少份計(jì)算子向量的個(gè)數(shù)。那么對(duì)于前述獲得的計(jì)算向量,則直接根據(jù)向量模板的規(guī)定的拆分個(gè)數(shù)N,將計(jì)算向量拆分為N個(gè)計(jì)算子向量。
當(dāng)然,對(duì)于全局變量的計(jì)算向量,所述拆分可以理解為復(fù)制,即將全局變量的向量復(fù)制為N份計(jì)算子向量。
步驟130,獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合;
OP算子可以理解為一種算法,即一種計(jì)算過程。而各OP算子存在一些通用的子過程,即一個(gè)OP算子可以在內(nèi)存計(jì)算層面進(jìn)一步劃分為多個(gè)子計(jì)算過程。在本發(fā)明實(shí)施例中,會(huì)預(yù)置子算子庫(kù),將各種OP算子通用的計(jì)算子過程,采用統(tǒng)一的方式進(jìn)行編譯存入子算子庫(kù)中??梢岳斫?,本發(fā)明在算法與具體的矩陣運(yùn)算之間進(jìn)一步封裝了一些通用的方法,讓其以API(Application Programming Interface,應(yīng)用程序編程接口)形式存在,進(jìn)一步為用戶提供方便,使其可以更便利的使用本發(fā)明的計(jì)算平臺(tái)。
在本發(fā)明實(shí)施例中,可以對(duì)C、C++等編程語言中的for、while、if等方法進(jìn)行封裝。
用戶在編輯OP算子時(shí)可以直接調(diào)用這些子算子進(jìn)行組合,當(dāng)然用戶在編輯OP算子時(shí),可以不采用或者不全采用子算子庫(kù)中的子算子。
優(yōu)選的,還包括:
步驟132,提供OP算子編輯接口;所述OP算子接口用于接收用戶根據(jù)子算子庫(kù)編輯的OP算子。
在本發(fā)明的計(jì)算平臺(tái)中,為用戶提供OP算子編輯接口,使用戶在編輯OP算子時(shí),可以直接通過OP算子編輯接口調(diào)用子算子庫(kù)中的子算子去編 輯OP算子。
在本發(fā)明實(shí)施例中,對(duì)于OP算子,可以根據(jù)子算子庫(kù)去匹配OP算子中采用的子算子,比如匹配是否采用了for方法,或者其他方法,如果匹配上,則確認(rèn)可以將所述OP算子能夠拆分為各個(gè)子算子的組合。當(dāng)然對(duì)于OP算子中未與子算子庫(kù)匹配上的子算子,則識(shí)別其為例外子算子。
步驟140,如果所述OP算子能夠拆分為各個(gè)子算子的組合,則將OP算子拆分為各個(gè)子算子的組合,并根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
在本發(fā)明實(shí)施例中對(duì)于OP算子的拆分可以有多種方式:
比如直接將OP算子簡(jiǎn)單的拆分為在子算子庫(kù)中各個(gè)子算子的組合。如果存在例外子算子,則拆分為各子算子+例外子算子的組合。比如子算子庫(kù)有子算子A、B、C。而OP算子的整個(gè)算法包括了A-B-D,那么可將OP算子拆分為A,B,D的組合。又比如對(duì)于OP中循環(huán)子算子,可以將循環(huán)子算子分為多個(gè)循環(huán)子算子,比如OP算子包括方法for(int i=0;i<10;i++),for方法在子算子庫(kù)中存在,匹配上后可以將上述方法for拆為5個(gè)方法for,如for(int i=0;i<2;i++),for(int i=2;i<4;i++),for(int i=4;i<6;i++),for(inti=6;i<8i++),for(int i=8;i<10;i++)。
在拆分后,即可判斷計(jì)算各個(gè)子算子時(shí)適配的效率最優(yōu)的處理器類型。
優(yōu)選的,根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理包括:
子步驟S142,將所述OP算子對(duì)應(yīng)的計(jì)算子向量,按各子算子的個(gè)數(shù)拆解為相應(yīng)個(gè)數(shù)的分量,并將各分量輸入與子算子相應(yīng)的計(jì)算節(jié)點(diǎn)中以進(jìn)行處理。
在本發(fā)明實(shí)施例中,對(duì)于OP算子,確認(rèn)其可以拆分為N個(gè)子算子后,由于每個(gè)子算子計(jì)算的數(shù)據(jù)是OP算子對(duì)應(yīng)的計(jì)算子向量中的一部分,則需要將該計(jì)算子向量進(jìn)一步拆分,拆分為N個(gè)分量分別給每個(gè)子算子進(jìn)行計(jì)算。
優(yōu)選的,所述根據(jù)子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的 相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn)包括:
子步驟S144,根據(jù)所述子算子的運(yùn)算類型,和/或采用所述或子算子計(jì)算所述計(jì)算子向量或所述分量所需要的數(shù)據(jù)規(guī)模,判斷適配各子算子的處理器類型,并根據(jù)判斷結(jié)果選擇相應(yīng)計(jì)算節(jié)點(diǎn)。
在本發(fā)明實(shí)施例中,根據(jù)子算子計(jì)算的數(shù)據(jù)規(guī)模和子算子的運(yùn)算類型,劃分到不同的處理器類型的計(jì)算節(jié)點(diǎn)上運(yùn)行。比如子算子進(jìn)行的是整形運(yùn)算,即子算子計(jì)算的數(shù)據(jù)類型為整形,且相應(yīng)的計(jì)算數(shù)據(jù)的數(shù)據(jù)規(guī)模小于閾值,則在CPU處理器效率更高,則選擇CPU類型的計(jì)算節(jié)點(diǎn);如果是整形運(yùn)算,且計(jì)算的數(shù)據(jù)規(guī)模大于等于閾值,則在GPU上運(yùn)算更快,則選擇GPU類型的計(jì)算節(jié)點(diǎn)。又比如,如果是浮點(diǎn)型運(yùn)算,即子算子計(jì)算的數(shù)據(jù)類型為浮點(diǎn)型,且運(yùn)算規(guī)模小于閾值,則GPU處理器效率更高,選擇GPU類型的計(jì)算節(jié)點(diǎn);如果是浮點(diǎn)型運(yùn)算,且運(yùn)算規(guī)模大于等于閾值,則在CPU處理器效率更高,則選擇CPU類型的計(jì)算節(jié)點(diǎn)。其中,所述閾值可以為計(jì)算需要的內(nèi)存大小,比如閾值為3G內(nèi)存需求。
優(yōu)選的,所述計(jì)算節(jié)點(diǎn)類型包括:
GPU類型計(jì)算節(jié)點(diǎn)、CPU類型計(jì)算節(jié)點(diǎn)、FPGA類型計(jì)算節(jié)點(diǎn)、DSP類型計(jì)算節(jié)點(diǎn)、ARM類型計(jì)算節(jié)點(diǎn)中至少兩個(gè)。
在本發(fā)明實(shí)施例中,上述計(jì)算平臺(tái)可以采用多種處理器類型的計(jì)算節(jié)點(diǎn),一般設(shè)置GPU類型計(jì)算節(jié)點(diǎn)+CPU類型計(jì)算節(jié)點(diǎn),當(dāng)然可以添加更多類型的計(jì)算節(jié)點(diǎn)。對(duì)于用戶的輸入數(shù)據(jù)和OP算子,可以選擇運(yùn)算效率最優(yōu)的節(jié)點(diǎn)進(jìn)行計(jì)算。
步驟150,根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的計(jì)算子向量中,進(jìn)入步驟130,如此循環(huán)直至計(jì)算結(jié)束。
在本發(fā)明實(shí)施例中,計(jì)算節(jié)點(diǎn)每次計(jì)算的計(jì)算結(jié)果,會(huì)根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的計(jì)算子向量中。那么對(duì)這些更新后的計(jì)算子向量會(huì)進(jìn)行下一論的計(jì)算,該計(jì)算過程重復(fù)步驟130到140的過程。
優(yōu)選的,還包括:
步驟152,如果所述OP算子不能夠拆分為各個(gè)子算子的組合,根據(jù)所述OP算子的運(yùn)行特征,選擇適配OP算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
即OP算子本身不能匹配到子算子庫(kù)任意的子算子,則可以把該OP算子進(jìn)行整體評(píng)判,以判斷調(diào)用該OP算子進(jìn)行計(jì)算效率最高的處理器。
步驟154,根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的計(jì)算子向量中,循環(huán)進(jìn)入獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合以及選擇相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算的過程,直至計(jì)算結(jié)束。
在本發(fā)明實(shí)施例中,計(jì)算節(jié)點(diǎn)每次計(jì)算的計(jì)算結(jié)果,會(huì)更新到計(jì)算子向量中。那么對(duì)這些更新后的計(jì)算子向量會(huì)進(jìn)行下一論的計(jì)算,該計(jì)算過程重復(fù)步驟130到152的過程。
優(yōu)選的,在判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合之后,還包括:
步驟156,根據(jù)各子算子和/或者OP算子的類型指定接口,直接確定相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
在本發(fā)明實(shí)施例中,用戶可在用戶邏輯中指定某些OP算子和/或者OP算子在哪個(gè)處理器類型的計(jì)算節(jié)點(diǎn)中進(jìn)行計(jì)算。那么對(duì)于確定的OP算子或者子算子,可以調(diào)用類型指定接口,直接確定所述OP算子或者子算子所需的處理器類型的計(jì)算節(jié)點(diǎn)。
優(yōu)選的,所述根據(jù)OP算子的運(yùn)行特征,選擇適配OP算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn)包括:
子步驟S158,根據(jù)所述OP算子的運(yùn)算類型,和/或采用所述OP算子計(jì)算所述計(jì)算子向量或所述分量所需要的數(shù)據(jù)規(guī)模,判斷適配OP算子或各子算子的處理器類型,并根據(jù)判斷結(jié)果選擇相應(yīng)計(jì)算節(jié)點(diǎn)。
在本發(fā)明實(shí)施例中,根據(jù)OP算子計(jì)算的數(shù)據(jù)規(guī)模和OP算子的運(yùn)算類型,劃分到不同的處理器類型的計(jì)算節(jié)點(diǎn)上運(yùn)行。比如OP算子進(jìn)行的是整形運(yùn)算,即OP算子計(jì)算的數(shù)據(jù)類型為整形,且相應(yīng)的計(jì)算數(shù)據(jù)的數(shù)據(jù)規(guī)模 小于閾值,則在CPU處理器效率更高,則選擇CPU類型的計(jì)算節(jié)點(diǎn);如果是整形運(yùn)算,且計(jì)算的數(shù)據(jù)規(guī)模大于等于閾值,則在GPU上運(yùn)算更快,則選擇GPU類型的計(jì)算節(jié)點(diǎn)。又比如,如果是浮點(diǎn)型運(yùn)算,即OP算子計(jì)算的數(shù)據(jù)類型為浮點(diǎn)型,且運(yùn)算規(guī)模小于閾值,則GPU處理器效率更高,選擇GPU類型的計(jì)算節(jié)點(diǎn);如果是浮點(diǎn)型運(yùn)算,且運(yùn)算規(guī)模大于等于閾值,則在CPU處理器效率更高,則選擇CPU類型的計(jì)算節(jié)點(diǎn)。其中,所述閾值可以為計(jì)算需要的內(nèi)存大小,比如閾值為3G內(nèi)存需求。
進(jìn)一步的,優(yōu)選的,還包括:
步驟170,利用遍歷器遍歷各個(gè)輸出接口,逐個(gè)遍歷計(jì)算子向量的輸出接口,獲取所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果。
在本發(fā)明實(shí)施例中對(duì)于計(jì)算子向量,控制節(jié)點(diǎn)可以調(diào)用計(jì)算子向量的輸出接口GetItr,然后利用遍歷器從各個(gè)計(jì)算節(jié)點(diǎn)的輸出接口,獲取所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果,然后可以將所述計(jì)算子向量中的內(nèi)容轉(zhuǎn)換用戶需求的格式進(jìn)行輸出,比如xml格式。
在本發(fā)明實(shí)施例中可以通過全局向量的GetItr接口獲取全局向量結(jié)果。
優(yōu)選的,每個(gè)計(jì)算節(jié)點(diǎn)對(duì)計(jì)算子向量或者所述分量進(jìn)行處理包括:
子步驟S172,調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用OP算子或者子算子對(duì)計(jì)算子向量或者所述分量進(jìn)行處理。
優(yōu)選的,還包括:
步驟180,預(yù)置各種類型的Map接口,所述Map接口用于規(guī)定在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源。
在本發(fā)明實(shí)施例中,可以預(yù)先設(shè)置各種類型的Map接口,對(duì)在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定進(jìn)行規(guī)定。
所述Map接口包括VectorMap,MatrixMap,GlobalMap,CrossMap,TaskMap,DirMap等Map接口。
其中,VectorMap定義為:對(duì)Vector的每行都調(diào)用map算子,每個(gè)結(jié)點(diǎn)只負(fù)責(zé)存儲(chǔ)在本機(jī)的行;
MatrixMap定義為:對(duì)Matrix的每個(gè)元素都調(diào)用map算子,每個(gè)結(jié)點(diǎn)只負(fù)責(zé)存儲(chǔ)在本機(jī)的元素;
GlobaMap定義為:每個(gè)結(jié)點(diǎn)都對(duì)全部數(shù)據(jù)調(diào)用map算子;
CrossMap定義為:每個(gè)結(jié)點(diǎn)和其它節(jié)點(diǎn)的所有數(shù)據(jù)調(diào)用map算子進(jìn)行交叉計(jì)算;
TaskMap定義為:每個(gè)結(jié)點(diǎn)起多個(gè)線程對(duì)本機(jī)數(shù)據(jù)調(diào)用map算子進(jìn)行計(jì)算;
DirMap定義為:每個(gè)結(jié)點(diǎn)起多個(gè)線程對(duì)指定目錄下的文件調(diào)用map算子進(jìn)行操作。
優(yōu)選的,還包括:
步驟182,各計(jì)算節(jié)點(diǎn)將計(jì)算過程日志輸出到全局向量中;
對(duì)于本發(fā)明實(shí)施例的各個(gè)計(jì)算節(jié)點(diǎn),為了便于用戶對(duì)計(jì)算過程的把控,本發(fā)明會(huì)將各個(gè)計(jì)算節(jié)點(diǎn)的計(jì)算過程日志寫入全局向量中??刂乒?jié)點(diǎn)再通過技術(shù)過程日志對(duì)數(shù)據(jù)進(jìn)行全局統(tǒng)計(jì)。
進(jìn)一步的,還包括:
步驟184,提供全局向量查看接口,用于接收用戶對(duì)計(jì)算過程的查看。
基于上述全局向量,本發(fā)明還提供了全局向量查看接口,方便用戶通過全局向量查看接口中計(jì)算過程,比如查看全局統(tǒng)計(jì)數(shù)據(jù),以確定整個(gè)算法是否結(jié)束。
根據(jù)本發(fā)明的一種數(shù)據(jù)處理方法可以在分布式高性能異構(gòu)通用計(jì)算平臺(tái)的底層采用異構(gòu)的計(jì)算節(jié)點(diǎn),即可以采用多種處理器類型的計(jì)算節(jié)點(diǎn)混合構(gòu)建分布式的計(jì)算系統(tǒng),比如在整個(gè)計(jì)算系統(tǒng)中混合采用CPU處理器的計(jì)算節(jié)點(diǎn)、GPU處理器的計(jì)算節(jié)點(diǎn)等,然后對(duì)于用戶的輸入數(shù)據(jù),根據(jù)其類型采用預(yù)置的相應(yīng)類型的向量模板載入得到計(jì)算向量,而后在將計(jì)算向量拆分為計(jì)算子向量分配到各個(gè)計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算之前,先將用戶編輯的OP算子拆分為各個(gè)子算子的組合,判斷各個(gè)子算子在計(jì)算時(shí)更適配哪種處理器類型的計(jì)算節(jié)點(diǎn),也即采用哪種處理器類型的計(jì)算節(jié)點(diǎn)計(jì)算更快,然后再將數(shù)據(jù)發(fā) 送至相應(yīng)計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算。此解決了現(xiàn)有的基于MPI的分布式通用計(jì)算平臺(tái)底層大部分采用單一處理器類型的計(jì)算節(jié)點(diǎn),無法利用不同處理器的性能優(yōu)點(diǎn)以提高計(jì)算速度,以及通用性弱的問題,取得了可以實(shí)現(xiàn)采用異構(gòu)方式實(shí)現(xiàn)計(jì)算平臺(tái),對(duì)于一個(gè)應(yīng)用的運(yùn)算中同時(shí)發(fā)揮CPU和GPU的優(yōu)勢(shì),并行使用不同處理器類型的計(jì)算節(jié)點(diǎn),加快整體運(yùn)算速度,同時(shí)提高通用性、兼容性有益效果。本發(fā)明實(shí)施例設(shè)計(jì)了一種異構(gòu)模式的分布式計(jì)算平臺(tái)的數(shù)據(jù)處理過程,對(duì)于普適性大數(shù)據(jù)的計(jì)算進(jìn)行了通用性拆解和數(shù)據(jù)流控制。對(duì)于并行計(jì)算中輸入輸出數(shù)據(jù)向量化、計(jì)算邏輯的回調(diào)、通信編程框架等進(jìn)行了抽象,可以充分發(fā)揮不同類型計(jì)算單元(包含但不限于CPU、GPU、FPGA、DSP、ARM等)的優(yōu)勢(shì)從而加速計(jì)算。
實(shí)施例二
參照?qǐng)D2,其示出了本發(fā)明一種數(shù)據(jù)處理方法的流程示意圖。具體可以包括:
步驟210,根據(jù)輸入數(shù)據(jù)的數(shù)據(jù)類型所對(duì)應(yīng)的向量模板的輸入接口,將輸入數(shù)據(jù)載入所述向量模板得到計(jì)算向量;
步驟212,將處理邏輯中對(duì)應(yīng)所述計(jì)算向量拆分為各計(jì)算子向量;
結(jié)合圖2A,對(duì)本發(fā)明實(shí)施例進(jìn)行描述,圖2A是本發(fā)明計(jì)算邏輯架構(gòu)模型。
在本發(fā)明實(shí)施例中用戶首先會(huì)在應(yīng)用代碼邏輯側(cè)編輯整個(gè)計(jì)算的用戶邏輯,并編譯輸入數(shù)據(jù)。所述用戶邏輯包括各個(gè)OP算子以及執(zhí)行順序,比如OP算子A—OP算子B-OP算子C。然后本發(fā)明實(shí)施例的計(jì)算平臺(tái)加載所述用戶邏輯,用戶邏輯會(huì)加載到Map中,并通過輸入接口Emit()讀入輸入數(shù)據(jù),進(jìn)入DVCE(設(shè)備底層)代碼邏輯。在讀入輸入數(shù)據(jù)之后,會(huì)根據(jù)用戶邏輯中指定的向量模板,載入所述輸入數(shù)據(jù)得到計(jì)算向量,然后回根據(jù)該向量模板規(guī)定的拆分規(guī)則,將計(jì)算向量拆分為N份計(jì)算子向量,中以便后續(xù)并行計(jì)算。如圖2A中,將輸入數(shù)據(jù)得到的計(jì)算向量拆分為VectorA、VectorB、VectorC。
在本發(fā)明實(shí)施例中,用戶可以通過Partitioner接口規(guī)定計(jì)算子向量數(shù)據(jù)如何分布。
步驟214,獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合;
然后根據(jù)去Map中獲取當(dāng)前需要執(zhí)行的OP算子,比如前述OP算子A,然后判斷對(duì)所述OP算子A,能否拆分為各個(gè)子算子的組合。
步驟216,如果所述OP算子能夠拆分為各個(gè)子算子的組合,則將OP算子拆分為各個(gè)子算子的組合,并根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn);
步驟218,將計(jì)算子向量拆分為分量輸入到各子算子對(duì)應(yīng)的計(jì)算節(jié)點(diǎn),調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用子算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用子算子對(duì)所述分量進(jìn)行處理;
如圖2A,對(duì)于左側(cè)的VectorA、VectorB、VectorC,在相應(yīng)的計(jì)算節(jié)點(diǎn)執(zhí)行使,通過Map接口調(diào)用算子進(jìn)行計(jì)算。
在本發(fā)明實(shí)施例中對(duì)于OP算子的拆分可以有多種方式:
比如直接將OP算子A簡(jiǎn)單的拆分為在子算子庫(kù)中各個(gè)子算子的組合。如果存在例外子算子,則拆分為各子算子+例外子算子的組合。比如子算子庫(kù)有子算子m、l、n。而OP算子的整個(gè)算法包括了m-l-n,那么可將OP算子拆分為m、l、n的組合。又比如對(duì)于OP中循環(huán)子算子,可以將循環(huán)子算子分為多個(gè)循環(huán)子算子,比如OP算子A包括方法for(int i=0;i<10;i++),for方法在子算子庫(kù)中存在,匹配上后可以將上述方法for拆為5個(gè)方法for,如for(int i=0;i<2;i++),for(int i=2;i<4;i++),for(int i=4;i<6;i++),for(inti=6;i<8i++),for(int i=8;i<10;i++)。
在拆分后,即可判斷計(jì)算各個(gè)子算子時(shí)適配的效率最優(yōu)的處理器類型。
優(yōu)選的,根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理包括:
子步驟S2181,將所述OP算子對(duì)應(yīng)的計(jì)算子向量,按各子算子的個(gè)數(shù)拆解為相應(yīng)個(gè)數(shù)的分量,并將各分量輸入與子算子相應(yīng)的計(jì)算節(jié)點(diǎn)中以進(jìn)行 處理。
在本發(fā)明實(shí)施例中,對(duì)于OP算子,確認(rèn)其可以拆分為N個(gè)子算子后,由于每個(gè)子算子計(jì)算的數(shù)據(jù)是OP算子對(duì)應(yīng)的計(jì)算子向量中的一部分,則需要將該計(jì)算子向量進(jìn)一步拆分,拆分為N個(gè)分量分別給每個(gè)子算子進(jìn)行計(jì)算。
優(yōu)選的,所述根據(jù)子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn)包括:
子步驟S2182,根據(jù)所述子算子的運(yùn)算類型,和/或采用所述或子算子計(jì)算所述計(jì)算子向量或所述分量所需要的數(shù)據(jù)規(guī)模,判斷適配各子算子的處理器類型,并根據(jù)判斷結(jié)果選擇相應(yīng)計(jì)算節(jié)點(diǎn)。
在本發(fā)明實(shí)施例中,根據(jù)子算子計(jì)算的數(shù)據(jù)規(guī)模和子算子的運(yùn)算類型,劃分到不同的處理器類型的計(jì)算節(jié)點(diǎn)上運(yùn)行。比如子算子進(jìn)行的是整形運(yùn)算,即子算子計(jì)算的數(shù)據(jù)類型為整形,且相應(yīng)的計(jì)算數(shù)據(jù)的數(shù)據(jù)規(guī)模小于閾值,則在CPU處理器效率更高,則選擇CPU類型的計(jì)算節(jié)點(diǎn);如果是整形運(yùn)算,且計(jì)算的數(shù)據(jù)規(guī)模大于等于閾值,則在GPU上運(yùn)算更快,則選擇GPU類型的計(jì)算節(jié)點(diǎn)。又比如,如果是浮點(diǎn)型運(yùn)算,即子算子計(jì)算的數(shù)據(jù)類型為浮點(diǎn)型,且運(yùn)算規(guī)模小于閾值,則GPU處理器效率更高,選擇GPU類型的計(jì)算節(jié)點(diǎn);如果是浮點(diǎn)型運(yùn)算,且運(yùn)算規(guī)模大于等于閾值,則在CPU處理器效率更高,則選擇CPU類型的計(jì)算節(jié)點(diǎn)。其中,所述閾值可以為計(jì)算需要的內(nèi)存大小,比如閾值為3G內(nèi)存需求。
優(yōu)選的,所述計(jì)算節(jié)點(diǎn)類型包括:
GPU類型計(jì)算節(jié)點(diǎn)、CPU類型計(jì)算節(jié)點(diǎn)、FPGA類型計(jì)算節(jié)點(diǎn)、DSP類型計(jì)算節(jié)點(diǎn)、ARM類型計(jì)算節(jié)點(diǎn)中至少兩個(gè)。
在本發(fā)明實(shí)施例中,上述計(jì)算平臺(tái)可以采用多種處理器類型的計(jì)算節(jié)點(diǎn),一般設(shè)置GPU類型計(jì)算節(jié)點(diǎn)+CPU類型計(jì)算節(jié)點(diǎn),當(dāng)然可以添加更多類型的計(jì)算節(jié)點(diǎn)。對(duì)于用戶的輸入數(shù)據(jù)和OP算子,可以選擇運(yùn)算效率最優(yōu)的節(jié)點(diǎn)進(jìn)行計(jì)算。
步驟220,根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的 計(jì)算子向量中,轉(zhuǎn)入步驟214;
在本發(fā)明實(shí)施例中,如果各計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果的數(shù)據(jù)類型沒變,則采用同樣的Vector存儲(chǔ)該輪的計(jì)算結(jié)果,得到圖2A右側(cè)的VectorA、VectorB、VectorC。如果數(shù)據(jù)類型變化,則Vector的類型會(huì)變化,采用相應(yīng)類型的向量模板裝載計(jì)算結(jié)果。
然后根據(jù)用戶邏輯中的執(zhí)行順序,對(duì)前一輪計(jì)算結(jié)果的Vector,再采用OP算子B進(jìn)行下一輪計(jì)算,即圖中右側(cè)的VectorA、VectorB、VectorC再次通過Map接口調(diào)用下一個(gè)執(zhí)行順序的OP算子進(jìn)行下一輪計(jì)算。如此循環(huán),直至結(jié)束。計(jì)算結(jié)束后,控制節(jié)點(diǎn)調(diào)用遍歷接口,然后通過調(diào)用各Vector的輸出接口Emit(),獲取計(jì)算結(jié)果。
在本發(fā)明實(shí)施例中,用戶可以通過operation接口規(guī)定了具體算法時(shí)如何對(duì)矩陣進(jìn)行操作,即前述Map接口。
在本發(fā)明實(shí)施例中,每個(gè)計(jì)算節(jié)點(diǎn)在算法計(jì)算結(jié)束后,采用Reducer接口對(duì)計(jì)算子向量中相同key的數(shù)據(jù)進(jìn)行計(jì)算,得到最終的輸出結(jié)果。
步驟222,如果所述OP算子不能夠拆分為各個(gè)子算子的組合,根據(jù)所述OP算子的運(yùn)行特征,選擇適配OP算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn);
步驟224,將計(jì)算子向量拆分到各子算子對(duì)應(yīng)的計(jì)算節(jié)點(diǎn),調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用OP算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用OP算子對(duì)計(jì)算子向量進(jìn)行處理;轉(zhuǎn)入步驟220;
步驟222-步驟223與步驟216-步驟218類似,在此不再詳述。
步驟226,利用遍歷器遍歷各個(gè)輸出接口,逐個(gè)遍歷計(jì)算子向量的輸出接口,獲取所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果。
對(duì)于步驟220中各個(gè)計(jì)算子向量,其是在各個(gè)計(jì)算節(jié)點(diǎn)中,本發(fā)明可以調(diào)用遍歷器,由遍歷器通過遍歷各個(gè)計(jì)算節(jié)點(diǎn)的計(jì)算子向量輸出接口,獲取計(jì)算結(jié)果。
優(yōu)選的,在判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合之后,還包括:
步驟156,根據(jù)各子算子和/或者OP算子的類型指定接口,直接確定相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
在本發(fā)明實(shí)施例中,用戶可在用戶邏輯中指定某些OP算子和/或者OP算子在哪個(gè)處理器類型的計(jì)算節(jié)點(diǎn)中進(jìn)行計(jì)算。那么對(duì)于確定的OP算子或者子算子,可以調(diào)用類型指定接口,直接確定所述OP算子或者子算子所需的處理器類型的計(jì)算節(jié)點(diǎn)。
在上述計(jì)算過程中,各個(gè)節(jié)點(diǎn)之間的通信通過MPI接口進(jìn)行通信。
根據(jù)本發(fā)明的一種數(shù)據(jù)處理方法可以在分布式高性能異構(gòu)通用計(jì)算平臺(tái)的底層采用異構(gòu)的計(jì)算節(jié)點(diǎn),即可以采用多種處理器類型的計(jì)算節(jié)點(diǎn)混合構(gòu)建分布式的計(jì)算系統(tǒng),比如在整個(gè)計(jì)算系統(tǒng)中混合采用CPU處理器的計(jì)算節(jié)點(diǎn)、GPU處理器的計(jì)算節(jié)點(diǎn)等,然后對(duì)于用戶的輸入數(shù)據(jù),根據(jù)其類型采用預(yù)置的相應(yīng)類型的向量模板載入得到計(jì)算向量,而后在將計(jì)算向量拆分為計(jì)算子向量分配到各個(gè)計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算之前,先將用戶編輯的OP算子拆分為各個(gè)子算子的組合,判斷各個(gè)子算子在計(jì)算時(shí)更適配哪種處理器類型的計(jì)算節(jié)點(diǎn),也即采用哪種處理器類型的計(jì)算節(jié)點(diǎn)計(jì)算更快,然后再將數(shù)據(jù)發(fā)送至相應(yīng)計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算。此解決了現(xiàn)有的基于MPI的分布式通用計(jì)算平臺(tái)底層大部分采用單一處理器類型的計(jì)算節(jié)點(diǎn),無法利用不同處理器的性能優(yōu)點(diǎn)以提高計(jì)算速度,以及通用性弱的問題,取得了可以實(shí)現(xiàn)采用異構(gòu)方式實(shí)現(xiàn)計(jì)算平臺(tái),對(duì)于一個(gè)應(yīng)用的運(yùn)算中同時(shí)發(fā)揮CPU和GPU的優(yōu)勢(shì),并行使用不同處理器類型的計(jì)算節(jié)點(diǎn),加快整體運(yùn)算速度,同時(shí)提高通用性、兼容性有益效果。
實(shí)施例三
參照?qǐng)D3,其示出了本發(fā)明一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。具體可以包括:
模板向量處理模塊310,適于根據(jù)輸入數(shù)據(jù)的數(shù)據(jù)類型所對(duì)應(yīng)的向量模板的輸入接口,將輸入數(shù)據(jù)載入所述向量模板得到計(jì)算向量;
計(jì)算向量分配模塊320,適于將處理邏輯中對(duì)應(yīng)所述計(jì)算向量拆分為各計(jì)算子向量;
OP算子拆分模塊330,適于獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合;
子算子計(jì)算選擇模塊340,適于如果所述OP算子能夠拆分為各個(gè)子算子的組合,則將OP算子拆分為各個(gè)子算子的組合,并根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理;
循環(huán)計(jì)算模塊350,適于根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的計(jì)算子向量中,轉(zhuǎn)入OP算子拆分模塊,進(jìn)行循環(huán)計(jì)算直至計(jì)算結(jié)束。
優(yōu)選的,還包括:
OP算子計(jì)算選擇模塊,適于如果所述OP算子不能夠拆分為各個(gè)子算子的組合,根據(jù)所述OP算子的運(yùn)行特征,選擇適配OP算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
優(yōu)選的,所述子算子計(jì)算選擇模塊包括:
拆解分配模塊,適于將所述OP算子對(duì)應(yīng)的計(jì)算子向量,按各子算子的個(gè)數(shù)拆解為相應(yīng)個(gè)數(shù)的分量,并將各分量輸入與子算子相應(yīng)的計(jì)算節(jié)點(diǎn)中以進(jìn)行處理。
優(yōu)選的,每個(gè)計(jì)算節(jié)點(diǎn)包括:
接口調(diào)用模塊,適于調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用OP算子或者子算子對(duì)計(jì)算子向量或者所述分量進(jìn)行處理。
優(yōu)選的,還包括:
接口預(yù)置模塊,適于預(yù)置各種類型的Map接口,所述Map接口用于規(guī)定在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源。
優(yōu)選的,所述子算子計(jì)算選擇模塊或者OP算子計(jì)算選擇模塊包括:
處理器類型判斷模塊,適于根據(jù)所述OP算子或子算子的運(yùn)算類型,和/或采用所述OP算子或子算子計(jì)算所述計(jì)算子向量或所述分量所需要的數(shù)據(jù) 規(guī)模,判斷適配OP算子或各子算子的處理器類型,并根據(jù)判斷結(jié)果選擇相應(yīng)計(jì)算節(jié)點(diǎn)。
優(yōu)選的,還包括:
OP算子編輯模塊,適于提供OP算子編輯接口;所述OP算子接口用于接收用戶根據(jù)子算子庫(kù)編輯的OP算子。
優(yōu)選的,還包括:
子算子庫(kù)編輯模塊,適于提供子算子庫(kù)編輯接口;所述子算子庫(kù)編輯接口用于接收用戶編輯的子算子。
優(yōu)選的,所述計(jì)算節(jié)點(diǎn)類型包括:
GPU類型計(jì)算節(jié)點(diǎn)、CPU類型計(jì)算節(jié)點(diǎn)、FPGA類型計(jì)算節(jié)點(diǎn)、DSP類型計(jì)算節(jié)點(diǎn)、ARM類型計(jì)算節(jié)點(diǎn)中至少兩個(gè)。
優(yōu)選的,還包括:
節(jié)點(diǎn)直接選擇模塊,適于在判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合之后,根據(jù)各子算子或者OP算子的類型指定接口,直接確定相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
優(yōu)選的,還包括:
結(jié)果輸出模塊,適于利用遍歷器遍歷各個(gè)輸出接口,逐個(gè)遍歷計(jì)算子向量的輸出接口,獲取所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果。
優(yōu)選的,還包括:
全局監(jiān)控模塊,適于各計(jì)算節(jié)點(diǎn)將計(jì)算過程日志輸出到全局向量中;
進(jìn)一步的,還包括:
過程查看模塊,適于提供全局向量查看接口,以接收用戶對(duì)計(jì)算過程的查看操作。
實(shí)施例四
參照?qǐng)D4,其示出了本發(fā)明一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。具體可以包括:
分配管理節(jié)點(diǎn)410、各個(gè)計(jì)算節(jié)點(diǎn)420;
所述分配管理節(jié)點(diǎn)410包括:
模板向量處理模塊411,適于根據(jù)輸入數(shù)據(jù)的數(shù)據(jù)類型所對(duì)應(yīng)的向量模板的輸入接口,將輸入數(shù)據(jù)載入所述向量模板得到計(jì)算向量;
計(jì)算向量分配模塊412,適于將處理邏輯中對(duì)應(yīng)所述計(jì)算向量拆分為各計(jì)算子向量;
OP算子拆分模塊413,適于獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合;
子算子計(jì)算選擇模塊414,適于如果所述OP算子能夠拆分為各個(gè)子算子的組合,則將OP算子拆分為各個(gè)子算子的組合,并根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn);
OP算子計(jì)算選擇模塊415,適于如果所述OP算子不能夠拆分為各個(gè)子算子的組合,根據(jù)所述OP算子的運(yùn)行特征,選擇適配OP算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn);
結(jié)果輸出模塊416,適于利用遍歷器遍歷各個(gè)輸出接口,逐個(gè)遍歷計(jì)算子向量的輸出接口,獲取所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果;
所述計(jì)算節(jié)點(diǎn)420包括:
第一接口調(diào)用模塊421,適于將計(jì)算子向量拆分為分量輸入到各子算子對(duì)應(yīng)的計(jì)算節(jié)點(diǎn),調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用子算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用子算子對(duì)所述分量進(jìn)行處理,轉(zhuǎn)入結(jié)果處理模塊423;
第二接口調(diào)用模塊422,適于將計(jì)算子向量拆分到各子算子對(duì)應(yīng)的計(jì)算節(jié)點(diǎn),調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用OP算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用OP算子對(duì)計(jì)算子向量進(jìn)行處理轉(zhuǎn)入結(jié)果處理模塊423。
結(jié)果處理模塊423,適于根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的計(jì)算子向量中,轉(zhuǎn)入OP算子拆分模塊413;
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固 有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使 用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的×××設(shè)備中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
本發(fā)明公開了A1、一種數(shù)據(jù)處理方法,包括:
根據(jù)輸入數(shù)據(jù)的數(shù)據(jù)類型所對(duì)應(yīng)的向量模板的輸入接口,將輸入數(shù)據(jù)載入所述向量模板得到計(jì)算向量;
將處理邏輯中對(duì)應(yīng)所述計(jì)算向量拆分為各計(jì)算子向量;
獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合;
如果所述OP算子能夠拆分為各個(gè)子算子的組合,則將OP算子拆分為各個(gè)子算子的組合,并根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理;
根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的計(jì)算子向量中,循環(huán)進(jìn)入獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合以及選擇相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算的過程,直至計(jì)算結(jié)束。
A2、如A1所述的方法,還包括:
如果所述OP算子不能夠拆分為各個(gè)子算子的組合,根據(jù)所述OP算子的運(yùn)行特征,選擇適配OP算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
A3、如A1所述的方法,根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理包括:
將所述OP算子對(duì)應(yīng)的計(jì)算子向量,按各子算子的個(gè)數(shù)拆解為相應(yīng)個(gè)數(shù)的分量,并將各分量輸入與子算子相應(yīng)的計(jì)算節(jié)點(diǎn)中以進(jìn)行處理。
A4、如A1或A2所述的方法,每個(gè)計(jì)算節(jié)點(diǎn)對(duì)計(jì)算子向量或者所述分量進(jìn)行處理包括:
調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用OP算子或者子算子對(duì)計(jì)算子向量或者所述分量進(jìn)行處理。
A5、如A4所述的方法,還包括:
預(yù)置各種類型的Map接口,所述Map接口用于規(guī)定在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源。
A6、如A1或A2、A3其中之一所述的方法,所述根據(jù)OP算子或者子算子的運(yùn)行特征,選擇適配OP算子或各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn)包括:
根據(jù)所述OP算子或子算子的運(yùn)算類型,和/或采用所述OP算子或子算子計(jì)算所述計(jì)算子向量或所述分量所需要的數(shù)據(jù)規(guī)模,判斷適配OP算子或各子算子的處理器類型,并根據(jù)判斷結(jié)果選擇相應(yīng)計(jì)算節(jié)點(diǎn)。
A7、如A1所述的方法,還包括:
提供OP算子編輯接口;所述OP算子接口用于接收用戶根據(jù)子算子庫(kù) 編輯的OP算子。
A8、如A1所述的方法,還包括:
提供子算子庫(kù)編輯接口;所述子算子庫(kù)編輯接口用于接收用戶編輯的子算子。
A9、如A1或A2所述的方法,所述計(jì)算節(jié)點(diǎn)類型包括:
GPU類型計(jì)算節(jié)點(diǎn)、CPU類型計(jì)算節(jié)點(diǎn)、FPGA類型計(jì)算節(jié)點(diǎn)、DSP類型計(jì)算節(jié)點(diǎn)、ARM類型計(jì)算節(jié)點(diǎn)中至少兩個(gè)。
A10、如A1或A2所述的方法,在判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合之后,還包括:
根據(jù)各子算子和/或者OP算子的類型指定接口,直接確定相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
A11、如A10所述的方法,還包括:
利用遍歷器遍歷各個(gè)輸出接口,逐個(gè)遍歷計(jì)算子向量的輸出接口,獲取所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果。
A12、如A1所述的方法,還包括:
各計(jì)算節(jié)點(diǎn)將計(jì)算過程日志輸出到全局向量中;
進(jìn)一步的,還包括:
提供全局向量查看接口,以接收用戶對(duì)計(jì)算過程的查看操作。
本發(fā)明還公開了B13、一種數(shù)據(jù)處理裝置,包括:
模板向量處理模塊,適于根據(jù)輸入數(shù)據(jù)的數(shù)據(jù)類型所對(duì)應(yīng)的向量模板的輸入接口,將輸入數(shù)據(jù)載入所述向量模板得到計(jì)算向量;
計(jì)算向量分配模塊,適于將處理邏輯中對(duì)應(yīng)所述計(jì)算向量拆分為各計(jì)算子向量;
OP算子拆分模塊,適于獲取當(dāng)前用于計(jì)算各個(gè)計(jì)算子向量的OP算子,根據(jù)預(yù)置的子算子庫(kù),判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合;
子算子計(jì)算選擇模塊,適于如果所述OP算子能夠拆分為各個(gè)子算子的組合,則將OP算子拆分為各個(gè)子算子的組合,并根據(jù)各子算子的運(yùn)行特征,選擇適配各子算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量 進(jìn)行處理;
循環(huán)計(jì)算模塊,適于根據(jù)計(jì)算結(jié)果的數(shù)據(jù)類型,將計(jì)算結(jié)果寫到相應(yīng)向量模板的計(jì)算子向量中,轉(zhuǎn)入OP算子拆分模塊,進(jìn)行循環(huán)計(jì)算直至計(jì)算結(jié)束。
B14、如B13所述的裝置,還包括:
OP算子計(jì)算選擇模塊,適于如果所述OP算子不能夠拆分為各個(gè)子算子的組合,根據(jù)所述OP算子的運(yùn)行特征,選擇適配OP算子的運(yùn)行特征的相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
B15、如B13所述的裝置,所述子算子計(jì)算選擇模塊包括:
拆解分配模塊,適于將所述OP算子對(duì)應(yīng)的計(jì)算子向量,按各子算子的個(gè)數(shù)拆解為相應(yīng)個(gè)數(shù)的分量,并將各分量輸入與子算子相應(yīng)的計(jì)算節(jié)點(diǎn)中以進(jìn)行處理。
B16、如B13或B14所述的裝置,每個(gè)計(jì)算節(jié)點(diǎn)包括:
接口調(diào)用模塊,適于調(diào)用預(yù)定的Map接口,按Map接口對(duì)在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源的規(guī)定,獲取數(shù)據(jù)以調(diào)用OP算子或者子算子對(duì)計(jì)算子向量或者所述分量進(jìn)行處理。
B17、如B13所述的裝置,還包括:
接口預(yù)置模塊,適于預(yù)置各種類型的Map接口,所述Map接口用于規(guī)定在調(diào)用OP算子或者子算子時(shí)依賴的數(shù)據(jù)來源。
B18、如B13、B14、B15其中之一所述的裝置,所述子算子計(jì)算選擇模塊或者OP算子計(jì)算選擇模塊包括:
處理器類型判斷模塊,適于根據(jù)所述OP算子或子算子的運(yùn)算類型,和/或采用所述OP算子或子算子計(jì)算所述計(jì)算子向量或所述分量所需要的數(shù)據(jù)規(guī)模,判斷適配OP算子或各子算子的處理器類型,并根據(jù)判斷結(jié)果選擇相應(yīng)計(jì)算節(jié)點(diǎn)。
B19、如B13所述的裝置,還包括:
OP算子編輯模塊,適于提供OP算子編輯接口;所述OP算子接口用于接收用戶根據(jù)子算子庫(kù)編輯的OP算子。
B20、如B13所述的裝置,還包括:
子算子庫(kù)編輯模塊,適于提供子算子庫(kù)編輯接口;所述子算子庫(kù)編輯接口用于接收用戶編輯的子算子。
B21、如B13或B14述的裝置,所述計(jì)算節(jié)點(diǎn)類型包括:
GPU類型計(jì)算節(jié)點(diǎn)、CPU類型計(jì)算節(jié)點(diǎn)、FPGA類型計(jì)算節(jié)點(diǎn)、DSP類型計(jì)算節(jié)點(diǎn)、ARM類型計(jì)算節(jié)點(diǎn)中至少兩個(gè)。
B22、如B13或B14所述的裝置,還包括:
節(jié)點(diǎn)直接選擇模塊,適于在判斷所述OP算子是否能夠拆分為各個(gè)子算子的組合之后,根據(jù)各子算子或者OP算子的類型指定接口,直接確定相應(yīng)處理器類型的計(jì)算節(jié)點(diǎn),對(duì)計(jì)算子向量進(jìn)行處理。
B23、如B13所述的裝置,還包括:
結(jié)果輸出模塊,適于利用遍歷器遍歷各個(gè)輸出接口,逐個(gè)遍歷計(jì)算子向量的輸出接口,獲取所有計(jì)算節(jié)點(diǎn)的計(jì)算結(jié)果。
B24、如B13所述的裝置,還包括:
全局監(jiān)控模塊,適于各計(jì)算節(jié)點(diǎn)將計(jì)算過程日志輸出到全局向量中;
進(jìn)一步的,還包括:過程查看模塊,適于提供全局向量查看接口,以接收用戶對(duì)計(jì)算過程的查看操作。