亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

基于指令集生成的大數(shù)據(jù)處理方法及裝置的制造方法

文檔序號:9249087閱讀:539來源:國知局
基于指令集生成的大數(shù)據(jù)處理方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及一種基于指令集生成的大數(shù)據(jù)處理方法及裝置。
【背景技術】
[0002]大數(shù)據(jù)處理主要是針對海量數(shù)據(jù)進行清洗、存儲、計算和分析等操作。由于數(shù)據(jù)由多種類型,例如Int、Long、Double、Char和VarChar,甚至是較為復雜的Numner。而且數(shù)據(jù)的運算也有多種,例如數(shù)學運算、邏輯運算、比較運算、類型轉換等。所以程序員在進行大數(shù)據(jù)處理程序的編寫工作時,一般會針對各種數(shù)據(jù)類型、各種運算編寫通用程序,以避免出現(xiàn)未知數(shù)據(jù)類型、未知運算或其他未知情況導致程序崩潰的問題發(fā)生,所以這種通用程序比較復雜繁瑣。
[0003]當利用這種通用程序進行某種特定的處理工作時,例如查詢、過濾、運算等,由于通用程序中包含很多與該特定處理工作無關的無用指令,所以數(shù)據(jù)處理的速度會比較慢。

【發(fā)明內(nèi)容】

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