一種基于異構(gòu)系統(tǒng)的表連接優(yōu)化方法、cpu和加速器的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)領(lǐng)域,尤其涉及一種基于異構(gòu)系統(tǒng)的表連接優(yōu)化方法、CPU和加速器。
【背景技術(shù)】
[0002]隨著硬件技術(shù)的進(jìn)步,芯片上集成的晶體管數(shù)目會按照摩爾定律的趨勢進(jìn)一步發(fā)展。由于頻率墻和功耗墻的限制,處理器將加速從單核向多核,從多核向眾核發(fā)展。而圖形處理器(英文:Graphic Processing Unit,簡稱:GPU),眾核協(xié)處理器(英文:ManyIntegrated Core,簡稱;MIC)等加速器的不斷涌現(xiàn),使得異構(gòu)系統(tǒng)將成為今后高性能計算的主流。
[0003]其中,異構(gòu)系統(tǒng)是由多種不同指令集架構(gòu)(英文instruct1n SetArchitecture,簡稱:ISA)的處理器組成的計算機(jī)系統(tǒng),一般包括了中央處理器(英文:Central Processing Unit,簡稱:CPU)和各種加速器,如GPU、MIC以及現(xiàn)場可編程門陣列(英文:Field Programmable Gate Array,簡稱:FPGA)等。如圖1所示,為一種異構(gòu)系統(tǒng)的架構(gòu)示例圖,其中,CPU的型號為Intel Xeon E5-2699 v3,有18個核心,所支持的最大物理線程數(shù)為36,單核主頻為2.6吉赫茲(單位:GHz),單指令多數(shù)據(jù)流(英文=SingleInstruct1n Multiple Data,簡稱:SIMD)位寬為 256 位;加速器為型號為 Intel Xeon Phi7120X的MIC,有61個核心,所支持的最大物理線程數(shù)為244,單核主頻為1.24 GHz, SIMD位寬為512位;CPU通過帶寬為16吉字節(jié)每秒(單位:GB/s)的擴(kuò)展外設(shè)部件互連標(biāo)準(zhǔn)(英文:Peripheral Component Interconnect Express,簡稱:PC1-E)總線連接 MIC。
[0004]在主流的數(shù)據(jù)庫中,排序合并連接是最基本的連接方式之一。這種連接方式首先將待連接的多個表拆分成一系列的兩表連接對。例如,當(dāng)有A、B、C、D四個表時,則可以將A和B作為一個連接對,將C和D作為另一個連接對。又例如,當(dāng)有A、B、C三個表時,可以將A和B作為一個連接對,剩余的一個表C則暫時輪空。針對每個連接對,執(zhí)行以下操作:將連接對中的兩個表均分別按照連接屬性列進(jìn)行排序生成兩個排序表,再對兩個排序表進(jìn)行一次遍歷得到合并后的的一個表。然后,在合并得到的表以及上輪形成兩表連接對時可能輪空的表中再進(jìn)行兩兩組合,形成新的兩表連接對。重復(fù)上述操作,直至將待連接的多個表合并連接成最終的一個表。例如,當(dāng)有A、B、C、D四個表,將A和B作為一個連接對處理后得到表E,將C和D作為另一個連接對處理后得到表F,則可以將E和F作為新的連接對進(jìn)行排序合并,得到最終的表G。又例如,當(dāng)有A、B、C三個表,將A和B作為一個連接對處理后得到表D,則可以將C和D作為新的連接對進(jìn)行排序合并,得到最終的表E。
[0005]如圖2所示,為目前三種高效的排序合并連接算法的性能示意圖。其中,m-way是一種非統(tǒng)一內(nèi)存訪問(英文:Non Uniform Memory Access Architecture,簡稱:NUMA)敏感的多路歸并排序合并連接算法,m-pass是一種多趟歸并排序合并連接算法,mpsm是一種大規(guī)模并行排序合并連接算法。圖2中,橫軸表示并行度,用執(zhí)行的線程數(shù)來表示,縱軸表示吞吐量,用每秒排序的元組數(shù)表示。由圖2可見,隨著線程數(shù)的增加,三種排序合并連接算法的性能均在提升,尤其在執(zhí)行線程數(shù)達(dá)到64時,采用m-way算法時的峰值吞吐量可達(dá)到每秒處理315百萬條元組,可見排序合并連接算法的并行可擴(kuò)展性很好,適合于高并行的計算環(huán)境。
[0006]然而,現(xiàn)有的排序合并連接算法卻難以無縫移植到新型異構(gòu)系統(tǒng)下,不能很好地發(fā)揮異構(gòu)系統(tǒng)的硬件特點。原因如下:
[0007]異構(gòu)系統(tǒng)中的CPU和加速器有著不同的硬件特性,所支持的最大物理線程數(shù)和SIMD位寬均差異顯著,帶來的并行計算能力極不對稱。而現(xiàn)有的排序合并連接算法一般都基于計算能力對稱的系統(tǒng),異構(gòu)系統(tǒng)這種非對稱的并行計算能力使得現(xiàn)有的排序合并連接算法不能充分發(fā)揮異構(gòu)平臺的潛在性能。
【發(fā)明內(nèi)容】
[0008]本發(fā)明實施例提供一種基于異構(gòu)系統(tǒng)的表連接優(yōu)化方法、CPU和加速器,用以解決現(xiàn)有的排序合并連接算法難以無縫移植到新型異構(gòu)系統(tǒng)下,不能很好地發(fā)揮異構(gòu)系統(tǒng)的硬件特點的問題。
[0009]第一方面,本發(fā)明實施例提供了一種基于異構(gòu)系統(tǒng)的表連接優(yōu)化方法,包括:
[0010]CPU將當(dāng)前待連接的任意兩個表作為一個連接對;
[0011]所述CPU從所述連接對中提取第一個表的第一連接屬性列和第二個表的第二連接屬性列,其中,所述第一連接屬性列和第二連接屬性列用于連接所述第一個表和第二個表;
[0012]所述CPU將所述第一連接屬性列和第二連接屬性列發(fā)送到加速器進(jìn)行排序連接處理,以及接收所述加速器發(fā)送的對所述第一連接屬性列和第二連接屬性列進(jìn)行排序連接處理后得到的連接索引;
[0013]所述CPU根據(jù)所述連接索引對所述第一個表和第二個表進(jìn)行合并連接。
[0014]結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,從所述連接對中提取第一個表的第一連接屬性列和第二個表的第二連接屬性列,包括:
[0015]若連接屬性列的數(shù)據(jù)類型為整型,則直接從第一個表中提取第一連接屬性列,并從第二個表中提取第二連接屬性列;
[0016]若連接屬性列的數(shù)據(jù)類型為非整型,則通過字典編碼,將第一個表中和第二個表中的連接屬性列映射為數(shù)據(jù)類型為整型的序列,并提取映射后的序列。
[0017]結(jié)合第一方面,在第一方面的第二種可能的實現(xiàn)方式中,所述CPU將所述第一連接屬性列和第二連接屬性列發(fā)送到加速器進(jìn)行排序連接處理,包括:
[0018]所述CPU將所述第一連接屬性列和第二連接屬性列進(jìn)行壓縮處理;
[0019]所述CPU將壓縮處理后的所述第一連接屬性列和第二連接屬性列發(fā)送到加速器進(jìn)行排序連接處理。
[0020]結(jié)合第一方面,在第一方面的第三種可能的實現(xiàn)方式中,所述CPU接收所述加速器發(fā)送的連接索引,包括:
[0021]所述CPU接收所述加速器發(fā)送的第一局部連接索引和第二局部連接索引;
[0022]所述CPU根據(jù)所述連接索引對所述第一個表和第二個表進(jìn)行合并連接,包括:
[0023]所述CPU根據(jù)第一局部連接索引第i位上指示的數(shù)據(jù)項的行序,從所述第一個表中提取對應(yīng)的表項;以及
[0024]根據(jù)第二局部連接索引第i位上指示的數(shù)據(jù)項的行序,從所述第二個表中提取對應(yīng)的表項;并
[0025]把提取的兩個表項合并為一個表項;
[0026]其中,i分別等于1、2、3……n,n為第一局部連接索引和第二局部連接索引包含的總位數(shù)。
[0027]第二方面,本發(fā)明實施例提供了一種基于異構(gòu)系統(tǒng)的表連接優(yōu)化方法,包括:
[0028]加速器接收CPU發(fā)送的第一連接屬性列和第二連接屬性列,其中,第一連接屬性列和第二連接屬性列為CPU分別從當(dāng)前待連接的第一個表和第二個表中分別提取得到的;
[0029]所述加速器對所述第一連接屬性列和第二連接屬性列進(jìn)行排序連接處理,得到連接索引;
[0030]所述加速器將所述連接索引發(fā)送給所述CPU,以用于CPU根據(jù)所述連接索引對所述第一個表和第二個表進(jìn)行合并連接。
[0031]結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述加速器對所述第一連接屬性列和第二連接屬性列進(jìn)行排序連接處理,得到連接索引,包括:
[0032]所述加速器依次從所述第一連接屬性列提取每一個數(shù)據(jù)項對應(yīng)的值和行序,并將提取的每一個數(shù)據(jù)項對應(yīng)的值和行序作為二元數(shù)組進(jìn)行存儲,得到第一序列;
[0033]所述加速器依次從所述第二連接屬性列提取每一個數(shù)據(jù)項對應(yīng)的值和行序,并將提取的每一個數(shù)據(jù)項對應(yīng)的值和行序作為二元數(shù)組進(jìn)行存儲,得到第二序列;
[0034]所述加速器將所述第一序列和第二序列拼接成第三序列;
[0035]所述加速器對所述第三序列進(jìn)行排序,得到第四序列;
[0036]所述加速器對所述第四序列進(jìn)行連接處理,得到連接索引。
[0037]結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,所述加速器對所述第四序列進(jìn)行連接處理,得到連接索引,包括:
[0038]所述加速器將所述第四序列劃分為P個不相交的子序列,其中,所述P不大于所述加速器所支持的最大物理線程數(shù);
[0039]所述加速器開啟P個線程,每個線程負(fù)責(zé)一個子序列;
[0040]所述加速器使用每個線程對子序列作如下處理,并重復(fù)如下過程直至完成對子序列的處理:
[0041]每次從子序列中提取一個數(shù)據(jù)塊;
[0042]對提取的數(shù)據(jù)塊中包含的數(shù)據(jù)項進(jìn)行分組,將數(shù)據(jù)項的值相同的數(shù)據(jù)值歸為同一分組;
[0043]依次統(tǒng)計每個分組內(nèi)來自于所述第一連接屬性列和第二連接屬性列的數(shù)據(jù)項的個數(shù),分別記為LjP R i,其中Li表示第i分組內(nèi)來自所述第一連接屬性列的數(shù)據(jù)項的個數(shù),Ri表示第i分組內(nèi)來自所述第二連接屬性列的數(shù)據(jù)項的個數(shù);
[0044]若第i分組的LjP R i均不為零,則依次對第i分組的每一個數(shù)據(jù)項作如下處理:若該數(shù)據(jù)項來自于所述第一連接屬性列,則將該數(shù)據(jù)項的行序復(fù)制Ri份存儲到第一局部連接索引數(shù)組中,若該數(shù)據(jù)項來自于所述第二連接屬性列,則將該數(shù)據(jù)項的行序添加到臨時向量中;將所述臨時向量中存儲的一個或多個數(shù)據(jù)項的行序作為一個整體,復(fù)制Li份到第二局部連接索引數(shù)組中。
[0045]結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,所述加速器對所述第三序列進(jìn)行排序,包括:
[0046]所述加速器采用并行基數(shù)排序算法,對所述第三序列進(jìn)行排序。
[0047]結(jié)合第二方面的第二種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,所述加速器將所述第四序列劃分為P個不相交的子序列,包括:
[0048]所述加速器將所述第四序列劃分為等長的P個子序列;
[0049]所述加速器在每個子序列的頭部和尾部設(shè)置指針;
[0050]所述加速器調(diào)整每個子序列的頭部指針和尾部指針的位置,直至得到P個不相交的子序列;
[0051 ] 其中,子序列不相交表示所述P個子序列中的每一個子序列的頭部指針指向的數(shù)據(jù)項的值與相鄰的前一個子序列的尾部指針指向的數(shù)據(jù)項的值均不相等。
[0052]結(jié)合第二方面的第二種可能的實現(xiàn)方式,在第二方面