基于指令集生成的大數(shù)據(jù)處理方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于指令集生成的大數(shù)據(jù)處理方法及裝置。
【背景技術(shù)】
[0002]大數(shù)據(jù)處理主要是針對(duì)海量數(shù)據(jù)進(jìn)行清洗、存儲(chǔ)、計(jì)算和分析等操作。由于數(shù)據(jù)由多種類型,例如Int、Long、Double、Char和VarChar,甚至是較為復(fù)雜的Numner。而且數(shù)據(jù)的運(yùn)算也有多種,例如數(shù)學(xué)運(yùn)算、邏輯運(yùn)算、比較運(yùn)算、類型轉(zhuǎn)換等。所以程序員在進(jìn)行大數(shù)據(jù)處理程序的編寫工作時(shí),一般會(huì)針對(duì)各種數(shù)據(jù)類型、各種運(yùn)算編寫通用程序,以避免出現(xiàn)未知數(shù)據(jù)類型、未知運(yùn)算或其他未知情況導(dǎo)致程序崩潰的問題發(fā)生,所以這種通用程序比較復(fù)雜繁瑣。
[0003]當(dāng)利用這種通用程序進(jìn)行某種特定的處理工作時(shí),例如查詢、過濾、運(yùn)算等,由于通用程序中包含很多與該特定處理工作無關(guān)的無用指令,所以數(shù)據(jù)處理的速度會(huì)比較慢。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問題是:如何提高大數(shù)據(jù)處理的速度。
[0005]為解決上述技術(shù)問題,本發(fā)明提出了一種基于指令集生成的大數(shù)據(jù)處理方法,包括:
[0006]生成即時(shí)編譯函數(shù);
[0007]利用所述即時(shí)編譯函數(shù)對(duì)大數(shù)據(jù)進(jìn)行處理;
[0008]其中,所述生成即時(shí)編譯函數(shù)包括:
[0009]建立指令庫,所述指令庫內(nèi)存儲(chǔ)有多種中間表示指令;
[0010]根據(jù)用戶需求確定相應(yīng)的函數(shù)執(zhí)行流程;
[0011]根據(jù)所述函數(shù)執(zhí)行流程選取所述指令庫中與所述函數(shù)執(zhí)行流程匹配的中間表示指令,生成中間表示指令集;
[0012]將所述中間表示指令集生成所述即時(shí)編譯函數(shù)。
[0013]進(jìn)一步地,所述中間表示指令是封裝后存儲(chǔ)在所述指令庫中的。
[0014]進(jìn)一步地,所述確定相應(yīng)的函數(shù)執(zhí)行流程,包括:
[0015]根據(jù)用戶需求生成表達(dá)式樹;
[0016]遍歷所述表達(dá)式樹,獲取該表達(dá)式樹的屬性信息;
[0017]根據(jù)所述表達(dá)式樹及其所述屬性信息,確定所述函數(shù)執(zhí)行流程。
[0018]進(jìn)一步地,所述即時(shí)編譯函數(shù)是采用底層虛擬機(jī)即時(shí)編譯方法生成的。
[0019]進(jìn)一步地,在所述利用所述即時(shí)編譯函數(shù)對(duì)大數(shù)據(jù)進(jìn)行處理之前,還包括對(duì)所述即時(shí)編譯函數(shù)進(jìn)行自動(dòng)向量化處理,具體包括:
[0020]在所述利用所述即時(shí)編譯函數(shù)對(duì)大數(shù)據(jù)進(jìn)行處理之前,還包括自動(dòng)向量化處理,具體包括:
[0021]分析所述用戶需求的并行性;
[0022]根據(jù)所述并行性的分析結(jié)果在所述即時(shí)編譯函數(shù)中添加相應(yīng)的自動(dòng)向量化處理指令。
[0023]為解決上述技術(shù)問題,本發(fā)明還提出了一種基于指令集生成的大數(shù)據(jù)處理裝置,包括:
[0024]函數(shù)生成模塊,用于生成即時(shí)編譯函數(shù);
[0025]處理模塊,用于利用所述即時(shí)編譯函數(shù)對(duì)大數(shù)據(jù)進(jìn)行處理;
[0026]其中,所述即時(shí)編譯函數(shù)生成模塊包括:
[0027]指令庫建立子模塊,用于建立指令庫,所述指令庫內(nèi)存儲(chǔ)有多種中間表示指令;
[0028]流程確定子模塊,用于根據(jù)用戶需求確定相應(yīng)的函數(shù)執(zhí)行流程;
[0029]指令集生成子模塊,用于根據(jù)所述函數(shù)執(zhí)行流程選取所述指令庫中與所述函數(shù)執(zhí)行流程匹配的中間表示指令,生成中間表示指令集;
[0030]函數(shù)生成子模塊,用于將所述中間表示指令集生成所述即時(shí)編譯函數(shù)。
[0031 ] 進(jìn)一步地,所述中間表示指令是封裝后存儲(chǔ)在所述指令庫中的。
[0032]進(jìn)一步地,所述流程確定子模塊包括:
[0033]樹生成單元,用于根據(jù)用戶需求生成表達(dá)式樹;
[0034]屬性信息獲取單元,用于遍歷所述表達(dá)式樹,獲取該表達(dá)式樹的屬性信息;
[0035]函數(shù)執(zhí)行流程確定單元,用于根據(jù)所述表達(dá)式樹及其所述屬性信息,確定函數(shù)執(zhí)行流程。
[0036]進(jìn)一步地,所述即時(shí)編譯函數(shù)是采用底層虛擬機(jī)即時(shí)編譯方法生成的。
[0037]進(jìn)一步地,該裝置還包括向量化處理模塊,用于在所述利用所述即時(shí)編譯函數(shù)對(duì)大數(shù)據(jù)進(jìn)行處理之前,進(jìn)行自動(dòng)向量化處理;
[0038]并行性分析子模塊,用于分析所述用戶需求的并行性;
[0039]指令增加子模塊,用于根據(jù)所述并行性的分析結(jié)果在所述即時(shí)編譯函數(shù)中添加相應(yīng)的自動(dòng)向量化處理指令。
[0040]本發(fā)明的即時(shí)編譯函數(shù)是根據(jù)用戶需求進(jìn)行設(shè)計(jì)的,在指令庫中只選取了部分中間表示指令,用于生成中間表示指令集,進(jìn)而得到即時(shí)編譯函數(shù)。由于本發(fā)明的即時(shí)編譯函數(shù)中只包含了和本次處理工作有關(guān)的指令,相對(duì)于通用程序,大大減少了指令的數(shù)量,因而在利用該即時(shí)編譯函數(shù)進(jìn)行大數(shù)據(jù)處理時(shí),處理速度得到大大提高。
【附圖說明】
[0041]通過參考附圖會(huì)更加清楚的理解本發(fā)明的特征和優(yōu)點(diǎn),附圖是示意性的而不應(yīng)理解為對(duì)本發(fā)明進(jìn)行任何限制,在附圖中:
[0042]圖1示出了本發(fā)明一種基于指令集代碼生成的大數(shù)據(jù)處理方法的流程框圖。
[0043]圖2示出了本發(fā)明一種基于指令集代碼生成的大數(shù)據(jù)處理裝置的流程框圖。
【具體實(shí)施方式】
[0044]下面將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)描述。
[0045]如圖1所示,本發(fā)明提供一種基于指令集生成的大數(shù)據(jù)處理方法,該方法包括:
[0046]生成即時(shí)編譯函數(shù);
[0047]利用所述即時(shí)編譯函數(shù)對(duì)大數(shù)據(jù)進(jìn)行處理;
[0048]其中,所述生成即時(shí)編譯函數(shù)包括:
[0049]建立指令庫,所述指令庫內(nèi)存儲(chǔ)有多種中間表示指令;
[0050]根據(jù)用戶需求確定相應(yīng)的函數(shù)執(zhí)行流程;
[0051]根據(jù)所述函數(shù)執(zhí)行流程選取所述指令庫中與所述函數(shù)執(zhí)行流程匹配的中間表示指令,生成中間表示指令集;
[0052]將所述中間表示指令集生成所述即時(shí)編譯函數(shù)。
[0053]其中,中間表示指令中的“中間表示”英文為Intermediate Representat1n。中間表示指令類似于匯編語言,為能夠直接映射成機(jī)器碼的指令,簡稱IR指令。
[0054]針對(duì)可能的各種情況,中間表示指令的類型有:
[0055](I)各種數(shù)據(jù)類型的指針類型指令,IR語法里所有的數(shù)據(jù)類型都是指針類型;
[0056](2)類型轉(zhuǎn)換指令,這里的類型轉(zhuǎn)換主要是指數(shù)值類型之間的轉(zhuǎn)換;
[0057](3)變量聲明、加載、存儲(chǔ)指令,這里的變量聲明包括全局變量聲明、局部變量聲明,不論是全局的還是局部的,數(shù)據(jù)類型都是指針類型的,所以要用加載指令和存儲(chǔ)指令來進(jìn)行取值和賦值;
[0058](4)數(shù)據(jù)計(jì)算指令,包括+、_、*、/、&、|,IR語法區(qū)分類型運(yùn)算,例如,int類型的加法和double類型的加法使用不同的指令。
[0059](5)比較指令,包括〉、〈、〈=、> =、= =、!=;
[0060](6)邏輯運(yùn)算指令:or、and ;
[0061](7)標(biāo)準(zhǔn)庫調(diào)用指令,包括:memcmp、memcpy、memset、floor、ceil、round 等;
[0062](8)靜態(tài)庫調(diào)用指令;
[0063]IR雖然是一種優(yōu)化代碼,但是它的復(fù)雜性使程序員的編程以及維護(hù)相對(duì)困難,所以對(duì)一些比較復(fù)雜的功能模塊,本發(fā)明會(huì)用C++編寫,然后以靜態(tài)庫的方式供IR調(diào)用。另夕卜,還有第三方庫的調(diào)用指令,第三方庫以靜態(tài)庫的方式供IR調(diào)用,靜態(tài)庫調(diào)用的方式是本發(fā)明可以提供更多的服務(wù),產(chǎn)生更多種類的函數(shù),滿足更多的需求。
[0064](9)流程控制指令,例如,基本塊(BasicBlock)的產(chǎn)生以及跳轉(zhuǎn)指令,實(shí)現(xiàn)for循環(huán)的指令,實(shí)現(xiàn)if-else的指令等等。
[0065]上述根據(jù)所述函數(shù)執(zhí)行流程選取所述指令庫中的中間表示指令,生成中間表示指令集的過程,實(shí)際上是對(duì)指令庫中的中間表示指令進(jìn)行選取、整理和組裝的過程。
[0066]本發(fā)明的即時(shí)編譯函數(shù)是根據(jù)用戶需求進(jìn)行設(shè)計(jì)的,所以在指令庫中只選取了部分中間表示指令,用于生成中間表示指令集,進(jìn)而得到即時(shí)編譯函數(shù)。由于本發(fā)明的即時(shí)編譯函數(shù)中只包含了和本次處理工作有關(guān)的指令,相對(duì)于通用程序,大大減少了指令的數(shù)量。
[0067]例如,對(duì)于一個(gè)含有億行記錄的表,根據(jù)這個(gè)表的某一個(gè)或者某幾個(gè)字段進(jìn)行過濾,對(duì)于這樣的用戶需求產(chǎn)生一個(gè)即時(shí)編譯函數(shù),在掃描該表的每一行時(shí)這個(gè)即時(shí)編譯函數(shù)都要被調(diào)用,所以當(dāng)即時(shí)編譯函數(shù)的指令條數(shù)比較少時(shí),可以大大提高對(duì)大數(shù)據(jù)處理的速度。
[0068]本發(fā)明是針對(duì)某一特定的大數(shù)據(jù)處理工作而設(shè)計(jì)的,該特定的大數(shù)據(jù)處理工作可以為特定的查詢、特定的計(jì)算等工作。也可以理解為,本發(fā)明采用了定制策略,對(duì)不同的處理工作,定制出不同的即時(shí)編譯函數(shù),即為具體問題具體解決的靈活策略。
[0069]進(jìn)一步地,所述中間表示指令是封裝后存儲(chǔ)在所述指令庫中的。
[0070]這里,本發(fā)明對(duì)中間表示指令做進(jìn)一步限定,指令庫中的中間表示指令是以被封裝的功能模塊存在的,這樣便于理解中間表示指令的含義,提高程序員的工作效率。同時(shí),也提高了代碼的可維護(hù)性。
[0071]進(jìn)一步地,所述確定函數(shù)執(zhí)行流程,包括:
[0072]根據(jù)用戶需求生成表達(dá)式樹;
[0073]遍歷所述表達(dá)式樹,獲取該表達(dá)式樹的屬性信息;
[0074]根據(jù)所述表達(dá)式樹及其所述屬性信息,確定函數(shù)執(zhí)行流程。
[0075]這里,本發(fā)明提供了一種確定函數(shù)執(zhí)行流程的方法。
[0076]其中,所謂的用戶需求可以是查詢、過濾(例如,Cl>5即過濾出第一列大于5的數(shù)據(jù))、計(jì)算(例如,C1+C2,即計(jì)算第一列數(shù)據(jù)和第二列數(shù)據(jù)之和)或更復(fù)雜的表達(dá)式(例如,floor (Cl) +C2>100、casewhen),也可以是其他定制需求。
[0077]其中,所謂的屬性信息包括數(shù)據(jù)類型、數(shù)據(jù)索引等信息。
[0078]其中,所謂的函數(shù)執(zhí)行流程是指進(jìn)行哪種運(yùn)算、先做哪步后做哪步、條件成立時(shí)怎么做、條件不成時(shí)怎么做等等。
[0079]為了方便理解,下面舉例說明確定函數(shù)執(zhí)行流程的過程,應(yīng)當(dāng)可以理解,該實(shí)例并不是對(duì)上述技術(shù)方案的限定。
[0080]例如,用戶需要在大表中進(jìn)行一個(gè)過濾,過濾式為:C1+C2>C3。所謂的大表指的是數(shù)據(jù)量大和字段比較多的數(shù)據(jù)表。上述過濾式的含義即用戶需求是:選取出大表中第一列數(shù)據(jù)和第二列數(shù)據(jù)之和大于第三列數(shù)據(jù)的行。確定函數(shù)執(zhí)行流程的方法包括:生成表達(dá)式樹,遍歷該表達(dá)式樹,得到該樹的屬性信息:Cl、C2、C3均Int類型,索引分別為O、1、2。由