一種雙調(diào)歸并排序調(diào)優(yōu)方法及裝置制造方法
【專利摘要】本發(fā)明涉及一種雙調(diào)歸并排序調(diào)優(yōu)方法及裝置。根據(jù)GPU和CPU的運算能力,分配待排序數(shù)據(jù)集;GPU和CPU對各自分配的待排序數(shù)據(jù)集進行排序;其中,排序過程中,當(dāng)GPU和CPU中的數(shù)據(jù)有無關(guān)性時,同時使用CPU和GPU分別排序,在兩部分?jǐn)?shù)據(jù)有相關(guān)性時,將數(shù)據(jù)匯集到GPU和CPU中的一個設(shè)備上排序。由此,可以更好的重疊計算、縮短雙調(diào)歸并排序的執(zhí)行時間,提高執(zhí)行效率。
【專利說明】—種雙調(diào)歸并排序調(diào)優(yōu)方法及裝置
[0001]本發(fā)明涉及排序調(diào)優(yōu)方法,尤其是一種雙調(diào)歸并排序調(diào)優(yōu)方法及裝置。
【背景技術(shù)】
[0002]雙調(diào)歸并排序算法能夠直接在待排序列的存儲空間進行數(shù)據(jù)交換,有效節(jié)省了內(nèi)存開銷。因此,雙調(diào)歸并排序網(wǎng)絡(luò)算法具有實際應(yīng)用價值。同時雙調(diào)歸并排序網(wǎng)絡(luò)算法中包含的雙調(diào)歸并算法可以用于歸并多個有序序列,具有實際應(yīng)用價值。
[0003]目前此類算法的實現(xiàn)或者是單獨利用CPU進行排序或者是單獨利用GPU進行排序,并未將待排數(shù)據(jù)集分割成兩部分分別交由CPU和GPU共同排序,因此,存在執(zhí)行效率低等問題。
【發(fā)明內(nèi)容】
[0004]為解決上述技術(shù)問題,本發(fā)明提出了一種雙調(diào)歸并排序調(diào)優(yōu)方法及裝置,可以更好的重疊計算、縮短雙調(diào)歸并排序的執(zhí)行時間,提高執(zhí)行效率。
[0005]在第一方面,本發(fā)明實施例提供了 一種雙調(diào)歸并排序調(diào)優(yōu)方法,所述方法包括:
[0006]根據(jù)GPU和CPU的運算能力,分配待排序數(shù)據(jù)集。
[0007]GPU和CPU對各自分配的待排序數(shù)據(jù)集進行排序。其中,排序過程中,當(dāng)GPU和CPU中的數(shù)據(jù)有無關(guān)性時,同時使用CPU和GPU分別排序,在兩部分?jǐn)?shù)據(jù)有相關(guān)性時,將數(shù)據(jù)匯集到GPU和CPU中的一個設(shè)備上排序。
[0008]在另一方面,本發(fā)明實施例提供了一種雙調(diào)歸并排序調(diào)優(yōu)裝置,所述裝置包括:
[0009]分配單元,用于根據(jù)GPU和CPU的運算能力,分配待排序數(shù)據(jù)集。
[0010]協(xié)調(diào)單元,用于GPU和CPU對各自分配的待排序數(shù)據(jù)集進行雙調(diào)歸并排序。其中,排序過程中,當(dāng)GPU和CPU中的數(shù)據(jù)有無關(guān)性時,同時使用CPU和GPU分別排序,在兩部分?jǐn)?shù)據(jù)有相關(guān)性時,將數(shù)據(jù)匯集到GPU和CPU中的一個設(shè)備上排序。
[0011]由此,可以更好的重疊計算、縮短雙調(diào)歸并排序的執(zhí)行時間,提高執(zhí)行效率。
【專利附圖】
【附圖說明】
[0012]圖1是本發(fā)明實施例提供的CPU和GPU混合架構(gòu)示意圖;
[0013]圖2是本發(fā)明實施例提供的雙調(diào)歸并排序調(diào)優(yōu)方法流程圖;
[0014]圖3是本發(fā)明實施例提供的雙調(diào)歸并排序調(diào)優(yōu)裝置示意圖;
[0015]圖4是本發(fā)明實施例提供的雙調(diào)歸并排序的負(fù)載分配示意圖;
[0016]圖5本發(fā)明實施例提供的雙調(diào)歸并排序的不同負(fù)載分配方法的優(yōu)劣比較圖。
【具體實施方式】
[0017]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖對本發(fā)明具體實施例作進一步的詳細(xì)描述。
[0018]混合構(gòu)架在一臺計算機系統(tǒng)中既有必須的CPU部件,又有用于特殊目的的計算加速部件,目前主流的計算加速部件是GPU,圖1是本發(fā)明實施例提供的CPU和GPU混合架構(gòu)不意圖,在混合架構(gòu) CPU (Central Processing Unit)和 GPU (Graphic Processing Unit)下同時使用CPU和GPU處理數(shù)據(jù),有效提高雙調(diào)歸并排序效率,實現(xiàn)本發(fā)明實施例提供的方法的程序存于內(nèi)存中,排序時,在CPU中排序的數(shù)據(jù)存在內(nèi)存中,在GPU中排序的數(shù)據(jù)存于GPU的全局存儲器global memory中,當(dāng)所有數(shù)據(jù)匯集到CPU上排序時,所有數(shù)據(jù)均存于內(nèi)存中,當(dāng)所有數(shù)據(jù)匯集到GPU上排序時,所有數(shù)據(jù)均存于GPU的全局存儲器中。
[0019]需要說明的是,本發(fā)明實施例中提供的方法及裝置適用于一個或多個CPU或/和一個或多個GPU。
[0020]需要說明的是,本發(fā)明實施例中涉及到的排序是指雙調(diào)歸并排序,但是本【技術(shù)領(lǐng)域】人員也可以用本發(fā)明提供的方法思路解決其他排序方法的調(diào)優(yōu)問題。
[0021]由于排序過程中,涉及到幾個重要概念,這里首先做下解釋:
[0022]無關(guān)性:是指雙調(diào)歸并排序時,當(dāng)CPU和GPU中的數(shù)據(jù)不需要相互交換數(shù)據(jù)即能完成所屬數(shù)據(jù)的比較交換操作時,則CPU和GPU中的數(shù)據(jù)具有無關(guān)性。
[0023]相關(guān)性:是指雙調(diào)歸并排序時,當(dāng)CPU和GPU為了完成所屬數(shù)據(jù)的比較交換操作需要相互交換數(shù)據(jù)時,則認(rèn)為CPU和GPU中的數(shù)據(jù)具有相關(guān)性。
[0024]步:是指所有的比較器執(zhí)行一次比較交換操作,稱為一步,步的編號從I開始,根據(jù)雙調(diào)歸并排序的特點可知,若待排數(shù)據(jù)個數(shù)為2n,n為正整數(shù),則經(jīng)過(n+l)*n/2步可完成排序。
[0025]歸并子集:雙調(diào)歸并排序是將2n個元素歸并為個211-1個2元素有序序列,2n_2個4元素有序序列……最終形成2_個2n元素有序序列,稱形成2n_p個2P元素有序序列的一系列步組成一個歸并子集,稱為第P個歸`并子集,由于雙調(diào)歸并排序算法的特性為:一個歸并子集中的每一步一定是將原先的某個數(shù)據(jù)集中的元素比較交換后對半剖分為2個不相關(guān)的數(shù)據(jù)集。因此,根據(jù)雙調(diào)歸并排序算法的特性可以推出,第P個歸并子集(概念參加上面實施例)中包含的步的編號:第P個歸并子集要求形成2n_p個2P元素有序序列,則是對2n_p+1個有序序列兩兩進行歸并,以此倒推,則起始具有2n-p+H個數(shù)據(jù)無關(guān)性子集,經(jīng)歷p步剖分后形成2n個數(shù)據(jù)無關(guān)性子集,即第p個歸并子集包含p步。經(jīng)推導(dǎo)可知第p個歸并子集包含第(p-1)*p/2+l步到第(p-l)*p/2+p步。從中可以看出,每個歸并子集中包含的排序步數(shù)與歸并子集的編號相同,且歸并子集的編號從I開始,若待排數(shù)據(jù)個數(shù)為2n,n為正整數(shù),則共有n個歸并子集。
[0026]本發(fā)明實施例中,根據(jù)GPU和CPU的運算能力,分配待排序數(shù)據(jù)集;GPU和CPU對各自分配的待排序數(shù)據(jù)集進行排序;其中,排序過程中,當(dāng)GPU和CPU中的數(shù)據(jù)有無關(guān)性時,同時使用CPU和GPU分別排序,在兩部分?jǐn)?shù)據(jù)有相關(guān)性時,將數(shù)據(jù)匯集到GPU和CPU中的一個設(shè)備上排序。由此,可以更好的重疊計算和數(shù)據(jù)操作延時、縮短雙調(diào)歸并排序的執(zhí)行時間,提聞執(zhí)行效率。
[0027]圖2是本發(fā)明實施例提供的雙調(diào)歸并排序調(diào)優(yōu)方法流程圖,圖2所示,該方法具體包括:
[0028]步驟201,調(diào)優(yōu)數(shù)據(jù)集生成。
[0029]具體地,在原有數(shù)據(jù)集的基礎(chǔ)上采用采樣的方式生成待排序數(shù)據(jù)集,可以節(jié)省調(diào)優(yōu)時間,且生成的待排序數(shù)據(jù)個數(shù)為2的整數(shù)次冪,以便后面的負(fù)載調(diào)優(yōu)。[0030]步驟202,根據(jù)GPU和CPU的運算能力,分配待排序數(shù)據(jù)集。
[0031]具體地,若待排數(shù)據(jù)個數(shù)為2n,n為正整數(shù),則根據(jù)不等式1/^+14/(1^1)〈1/^計算出正整數(shù)N,可以將k/(l+k)*2nf數(shù)據(jù)分配給低計算能力設(shè)備,或?qū)/2N+1*2n個數(shù)據(jù)分配給低計算能力設(shè)備,或?qū)/2N*2n個數(shù)據(jù)分配給低計算能力設(shè)備,其中k為CPU和GPU運算能力的比值,其余數(shù)據(jù)分配給高計算能力設(shè)備。三種數(shù)據(jù)分配方式的優(yōu)劣將在另一實施例中詳細(xì)分析。
[0032]需要說明的是,本【技術(shù)領(lǐng)域】人員也可以根據(jù)實際需要,根據(jù)其他指標(biāo)進行數(shù)據(jù)分配。
[0033]步驟203,GPU和CPU對各自分配的待排序數(shù)據(jù)集進行雙調(diào)歸并排序。其中,排序過程中,當(dāng)GPU和CPU中的數(shù)據(jù)有無關(guān)性時,同時使用CPU和GPU分別排序,在兩部分?jǐn)?shù)據(jù)有相關(guān)性時,將數(shù)據(jù)匯集到GPU和CPU中的一個設(shè)備上排序。
[0034]具體地,根據(jù)雙調(diào)歸并排序算法的特性,可以計算得出:第I步至第(n-N+l)*(n_N)/2 步,第(q+1) *q/2_n+N+l 步至第(q+l)*q/2 步,CPU 和 GPU 中的數(shù)據(jù)有無關(guān)性,可以將數(shù)據(jù)分配到CPU和GPU上分別排序,其他步驟中,CPU和GPU中的數(shù)據(jù)有相關(guān)性,則可以將數(shù)據(jù)匯集到一個設(shè)備上排序,優(yōu)選地,可以將數(shù)據(jù)匯集到一個計算能力大的設(shè)備上排序。其中,N根據(jù)不等式1/2N+1 < k/(k+l) < 1/^計算得出,且N為正整數(shù),k為CPU和GPU運算能力的比值。
[0035]需要說明的是CPU和GPU中的數(shù)據(jù)有無關(guān)性的確定方法可以用于確定GPU中工作組分配得到的數(shù)據(jù)間是否有相關(guān)性。
[0036]在一個例子中,當(dāng)在CPU中排序時,可以利用線程數(shù)調(diào)優(yōu)獲得的最優(yōu)線程數(shù)進行排序。所述線程數(shù)調(diào)優(yōu)具體為,當(dāng)線程數(shù)大于CPU物理處理單元數(shù)時,采用線程自動調(diào)優(yōu),即根據(jù)不同線程在CPU中的運行時間,選取運行時間較短的那些線程,線程數(shù)調(diào)優(yōu)范圍為[1, N1],其中Nt為最大物理處理單元數(shù);當(dāng)線程數(shù)小于CPU物理處理單元數(shù)時,采用線程親和調(diào)優(yōu),即從線程在物理處理單元上映射的所有組合中,選取執(zhí)行時間最短的組合,調(diào)優(yōu)范圍包括線程在物理處理單元上映射的所有組合。
[0037]當(dāng)在GPU中排序時,可以采用向量排序,也可以采用標(biāo)量排序。當(dāng)GPU標(biāo)量運算能力好時選擇標(biāo)量排序,當(dāng)GPU向量運算能力好時選擇向量排序。例如Nvidia GPU的標(biāo)量運算能夠很好的重疊計算和數(shù)據(jù)操作延時,當(dāng)數(shù)據(jù)集足夠大時算術(shù)單元利用率高,同時不產(chǎn)生Bank沖突。ATI GPU中算術(shù)單元數(shù)量多,標(biāo)量運算無法充分利用其資源,因此,可以使用opencl或類似語言中特定的API獲得GPU設(shè)備的生產(chǎn)廠商名,針對Nvidia的產(chǎn)品選擇標(biāo)量排序,針對AMD的產(chǎn)品選擇向量排序。
[0038]在一個例子中,在GPU中采用向量排序,并且利用向量長度調(diào)優(yōu)獲得的最優(yōu)向量長度或/和工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
[0039]需要說明的是,在GPU中采用向量排序時,也可以根據(jù)實際情況決定是否利用向量長度調(diào)優(yōu)獲得的最優(yōu)向量長度或/和工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
[0040]在另一個例子中,在GPU中利用標(biāo)量排序,并且利用工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
[0041]需要說明的是,在GPU中利用標(biāo)量排序時,也可以根據(jù)實際情況決定是否利用工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
[0042]所述向量長度調(diào)優(yōu)具體為,將一個大小為M的數(shù)據(jù)集分為M/K份,在GPU上排序生成M/K個長度為K的子序列,使用分析工具獲得排序過程的“算術(shù)單元利用率”和“Bank沖突造成的延時”,并計算“算術(shù)單元利用率”與“Bank沖突造成的延時”的比值,取比值最大時對應(yīng)的向量長度N作為最優(yōu)值,N的調(diào)優(yōu)范圍為{2N| I ≤ Ni},Ni為向量指令集支持的最大向量長度以2為底的向下取整對數(shù),K為一個工作組內(nèi)通過同步函數(shù)能夠同步的序列的長度。
[0043]所述工作組內(nèi)線程數(shù)調(diào)優(yōu)具體為,由于每個工作組內(nèi)的線程數(shù)影響GPU同步次數(shù),線程數(shù)越大則同步次數(shù)越少,同步次數(shù)越少越好,但是線程將共享工作組的資源,一般情況下一個或兩個工作組占用計算單元的資源,計算單元內(nèi)的寄存器、私有內(nèi)存和局部內(nèi)存資源是有限的,這些資源和計算單元緊耦合,延時低、速度快,當(dāng)使用了過量的寄存器或局部內(nèi)存時,將利用全局內(nèi)存作為寄存器或局部內(nèi)存使用,對于GPU而言,全局內(nèi)存一般就是顯存,其速度和延時要遠(yuǎn)遠(yuǎn)劣于真正的寄存器和局部內(nèi)存,這一點限制了線程數(shù)不能過大,因此,根據(jù)工作組的寄存器資源量j和單個線程消耗的寄存器資源量i確定一個工作組內(nèi)的線程數(shù)N,Mlog2 (j/i)],線程數(shù)N的調(diào)優(yōu)范圍為{2N|1≤N≤Nt},Nt為單個工作組能夠容納的最大線程數(shù)以2為底的向下取整對數(shù)。
[0044]需要說明的是,CPU中排序時,若CPU上運行的排序代碼是可以在GPU設(shè)備上運行的opencl等語言的代碼,所有的CPU視為一個設(shè)備,可以采用GPU中排序的優(yōu)化方法來優(yōu)化CPU中排序。
[0045]本發(fā)明實施例描述的為在混合架構(gòu)CPU和GPU下雙調(diào)歸并排序算法調(diào)優(yōu)方法的過程,從中可以看出,根據(jù)CPU與GPU的運算能力分配負(fù)載,并在排序過程中,數(shù)據(jù)不相關(guān)時,同時使用CPU和GPU分別排序,數(shù)據(jù)相關(guān)時,將數(shù)據(jù)匯集到一個計算能力大的設(shè)備上排序,可以充分利用CPU和GPU資源,可以重疊計算,提高排序速度;另外,對CPU的線程數(shù)調(diào)優(yōu),可以縮短排序時間J^GPU的向量長度調(diào)優(yōu)可以很好的重疊計算和數(shù)據(jù)操作延時J^GPU的工作組內(nèi)線程數(shù)調(diào)優(yōu)可以充分利用工作組資源而不影響運行速度。
[0046]上述實施例描述的為在混合架構(gòu)CPU和GPU下雙調(diào)歸并排序算法調(diào)優(yōu)方法的流程,下述實施例描述的在混合架構(gòu)CPU和GPU下雙調(diào)歸并排序算法調(diào)優(yōu)裝置的工作過程,圖3是本發(fā)明實施例提供的雙調(diào)歸并排序調(diào)優(yōu)裝置示意圖,如圖3所示,所述裝置包括:
[0047]生成單元301,用于調(diào)優(yōu)數(shù)據(jù)集生成。
[0048]具體地,在原有數(shù)據(jù)集的基礎(chǔ)上采用采樣的方式生成待排序數(shù)據(jù)集,可以節(jié)省調(diào)優(yōu)時間,且生成的待排序數(shù)據(jù)個數(shù)為2的整數(shù)次冪,以便后面的負(fù)載調(diào)優(yōu)。
[0049]分配單元302,用于根據(jù)GPU和CPU的運算能力,分配待排序數(shù)據(jù)集。
[0050]具體地,若待排數(shù)據(jù)個數(shù)為2n,n為正整數(shù),則根據(jù)不等式1/2N+1≤k/(k+l) ( 1/2N計算出正整數(shù)N,可以將k/ (1+k) *2n個數(shù)據(jù)分配給低計算能力設(shè)備,或/和將l/2N+1*2n個數(shù)據(jù)分配給低計算能力設(shè)備,或/和將l/2N*2n個數(shù)據(jù)分配給低計算能力設(shè)備,其中k為CPU和GPU運算能力的比值,其余數(shù)據(jù)分配給高計算能力設(shè)備。三種數(shù)據(jù)分配方式的優(yōu)劣將在另一實施例中詳細(xì)分析。
[0051]需要說明的是,本【技術(shù)領(lǐng)域】人員也可以根據(jù)實際需要,根據(jù)其他指標(biāo)進行數(shù)據(jù)分配。[0052]協(xié)調(diào)單元303,用于GPU和CPU對各自分配的待排序數(shù)據(jù)集進行雙調(diào)歸并排序。其中,排序過程中,當(dāng)GPU和CPU中的數(shù)據(jù)有無關(guān)性時,同時使用CPU和GPU分別排序,在兩部分?jǐn)?shù)據(jù)有相關(guān)性時,將數(shù)據(jù)匯集到GPU和CPU中的一個設(shè)備上排序。
[0053]具體地,根據(jù)雙調(diào)歸并排序算法的特性,可以計算得出:第I步至第(n-N+l)*(n_N)/2 步,第(q+1) *q/2_n+N+l 步至第(q+l)*q/2 步,CPU 和 GPU 中的數(shù)據(jù)有無關(guān)性,可以將數(shù)據(jù)分配到CPU和GPU上分別排序,其他步驟中,CPU和GPU中的數(shù)據(jù)有相關(guān)性,則將數(shù)據(jù)匯集到一個設(shè)備上排序?qū)?shù)據(jù)匯集到設(shè)備上排序,優(yōu)選地,可以將數(shù)據(jù)匯集到一個計算能力大的設(shè)備上排序。其中,N根據(jù)不等式l/2N+1<k/(k+l) <1/^計算得出,且N為正整數(shù),k為CPU和GPU運算能力的比值。
[0054]需要說明的是CPU和GPU中的數(shù)據(jù)有無關(guān)性的確定方法可以用于確定GPU中工作組分配得到的數(shù)據(jù)間是否有相關(guān)性。
[0055]在一個例子中,當(dāng)在CPU中排序時,可以利用線程數(shù)調(diào)優(yōu)獲得的最優(yōu)線程數(shù)進行排序。所述線程數(shù)調(diào)優(yōu)具體為,當(dāng)線程數(shù)大于CPU物理處理單元數(shù)時,采用線程自動調(diào)優(yōu),即根據(jù)不同線程在CPU中的運行時間,選取運行時間較短的那些線程,線程數(shù)調(diào)優(yōu)范圍為[I, Nt],其中Nt為最大物理處理單元數(shù);當(dāng)線程數(shù)小于CPU物理處理單元數(shù)時,采用線程親和調(diào)優(yōu),即從線程在物理處理單元上映射的所有組合中,選取執(zhí)行時間最短的組合,調(diào)優(yōu)范圍包括線程在物理處理單元上映射的所有組合。
[0056]當(dāng)在GPU中排序時,可以采用向量排序,也可以采用標(biāo)量排序。當(dāng)GPU標(biāo)量運算能力好時選擇標(biāo)量排序,當(dāng)GPU向量運算能力好時選擇向量排序。例如Nvidia GPU的標(biāo)量運算能夠很好的重疊計算和數(shù)據(jù)操作延時,當(dāng)數(shù)據(jù)集足夠大時算術(shù)單元利用率高,同時不產(chǎn)生Bank沖突。ATI GPU中算術(shù)單元數(shù)量多,標(biāo)量運算無法充分利用其資源,因此,可以使用opencl或類似語言中特定的API獲得GPU設(shè)備的生產(chǎn)廠商名,針對Nvidia的產(chǎn)品選擇標(biāo)量排序,針對AMD的產(chǎn)品選擇向量排序。
[0057]在一個例子中,在GPU中采用向量`排序,并且利用向量長度調(diào)優(yōu)獲得的最優(yōu)向量長度或/和工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
[0058]需要說明的是,在GPU中采用向量排序時,也可以根據(jù)實際情況決定是否利用向量長度調(diào)優(yōu)獲得的最優(yōu)向量長度或/和工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
[0059]在另一個例子中,在GPU中利用標(biāo)量排序,并且利用工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
[0060]需要說明的是,在GPU中利用標(biāo)量排序時,也可以根據(jù)實際情況決定是否利用工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
[0061]所述向量長度調(diào)優(yōu)具體為,將一個大小為M的數(shù)據(jù)集分為M/K份,在GPU上排序生成M/K個長度為K的子序列,使用分析工具獲得排序過程的“算術(shù)單元利用率”和“Bank沖突造成的延時”,并計算“算術(shù)單元利用率”與“Bank沖突造成的延時”的比值,取比值最大時對應(yīng)的向量長度N作為最優(yōu)值,N的調(diào)優(yōu)范圍為{2N| I ^ Ni},Ni為向量指令集支持的最大向量長度以2為底的向下取整對數(shù),K為一個工作組內(nèi)通過同步函數(shù)能夠同步的序列的長度。
[0062]所述工作組內(nèi)線程數(shù)調(diào)優(yōu)具體為,由于每個工作組內(nèi)的線程數(shù)影響GPU同步次數(shù),線程數(shù)越大則同步次數(shù)越少,同步次數(shù)越少越好,但是線程將共享工作組的資源,一般情況下一個或兩個工作組占用計算單元的資源,計算單元內(nèi)的寄存器、私有內(nèi)存和局部內(nèi)存資源是有限的,這些資源和計算單元緊耦合,延時低、速度快,當(dāng)使用了過量的寄存器或局部內(nèi)存時,將利用全局內(nèi)存作為寄存器或局部內(nèi)存使用,對于GPU而言,全局內(nèi)存一般就是顯存,其速度和延時要遠(yuǎn)遠(yuǎn)劣于真正的寄存器和局部內(nèi)存,這一點限制了線程數(shù)不能過大,因此,根據(jù)工作組的寄存器資源量j和單個線程消耗的寄存器資源量i確定一個工作組內(nèi)的線程數(shù)N,Mlog2 (j/i)],線程數(shù)N的調(diào)優(yōu)范圍為{2N|1≤N≤Nt},Nt為單個工作組能夠容納的最大線程數(shù)以2為底的向下取整對數(shù)。
[0063]需要說明的是,CPU中排序時,若CPU上運行的排序代碼是可以在GPU設(shè)備上運行的opencl等語言的代碼,所有的CPU視為一個設(shè)備,可以采用GPU中排序的優(yōu)化方法來優(yōu)化CPU中排序。
[0064]本發(fā)明實施例描述的為在混合架構(gòu)CPU和GPU下雙調(diào)歸并排序算法調(diào)優(yōu)裝置的工作過程,從中可以看出,根據(jù)CPU與GPU的運算能力分配負(fù)載,并在排序過程中,數(shù)據(jù)不相關(guān)時,同時使用CPU和GPU分別排序,數(shù)據(jù)相關(guān)時,將數(shù)據(jù)匯集到一個計算能力大的設(shè)備上排序,可以充分利用CPU和GPU資源,可以重疊計算,提高排序速度;另外,對CPU的線程數(shù)調(diào)優(yōu),可以縮短排序時間J^GPU的向量長度調(diào)優(yōu)可以很好的重疊計算和數(shù)據(jù)操作延時;對GPU的工作組內(nèi)線程數(shù)調(diào)優(yōu)可以充分利用工作組資源而不影響運行速度。
[0065]上述實施例描述的為在混合架構(gòu)CPU和GPU下雙調(diào)歸并排序算法調(diào)優(yōu)裝置的工作過程,下述實施例描述的為負(fù)載分配方法,即待排序數(shù)據(jù)的分配方法,圖4是本發(fā)明實施例提供的雙調(diào)歸并排序的負(fù)載分配示意圖。
[0066]首先對圖4中的元素做統(tǒng)一解釋:本發(fā)明實施例中的所有附圖,均可參照下述解釋:以CPU和GPU運算能力的比值k為0.6、以待排數(shù)據(jù)個數(shù)為16,即為24個為例,也可知此時有4個歸并子集;16條橫線表示有16個待排序數(shù)據(jù),帶箭頭的直線表示直線兩個端點所在的直線處對應(yīng)的數(shù)據(jù)進行數(shù)據(jù)交換,向上的箭頭表示將大的數(shù)據(jù)排在前面,向下的箭頭表示將大的數(shù)據(jù)排在后面;圖4上方的數(shù)字1-10表示排序的步數(shù)(后面的圖中不再標(biāo)出),例如數(shù)字2表示此處對應(yīng)的為排序過程中的第2步,點劃線形成的矩形框表示,框中的數(shù)據(jù)在CPU中排序,實線形成的框表示,框中的數(shù)據(jù)在GPU中排序,點劃線形成的框中有8個數(shù)據(jù),且點劃線框包括了第1-6步和第8-10步,則表示共將8個數(shù)據(jù)分配到CPU中排序,其他的8個數(shù)據(jù)在GPU中,且第1-6步和第8-10步,CPU和GPU同時排序,第7步,所有數(shù)據(jù)都在GPU中排序。
[0067]本發(fā)明實施例中的負(fù)載分配過程包括:負(fù)載分配及排序過程中數(shù)據(jù)無關(guān)性、相關(guān)性的確定,即為圖4中虛線a (負(fù)載數(shù)量分配線)及點劃線bib2 (數(shù)據(jù)無關(guān)性分隔線)的確定,排序數(shù)據(jù)數(shù)量不同,CPU和GPU運算能力的比值不同,數(shù)據(jù)無關(guān)性分隔線的條數(shù)和位置也不同。下面分別對負(fù)載數(shù)量分配線及數(shù)據(jù)無關(guān)性分隔線的確定做詳細(xì)闡述。
[0068]對于負(fù)載數(shù)量分配線,CPU和GPU各自分配數(shù)據(jù)個數(shù)可由上述實施例中的公式l/2N*2n確定(也可以采用其他公式),即將l/2N*2n (此處為8)個數(shù)據(jù)分配給CPU,將其它2n-l/2N*2n (此處為8個)個數(shù)據(jù)分配給GPU。排序過程中,若CPU和GPU同時排序,則CPU和GPU中的數(shù)據(jù)個數(shù)是固定不變的(此處CPU和GPU都有8個數(shù)據(jù))。根據(jù)上述過程可以確定負(fù)載個數(shù)分隔線a,如圖4所示。[0069]對于數(shù)據(jù)無關(guān)性分隔線,根據(jù)雙調(diào)歸并排序原理可計算出,對CPU和GPU各自分配數(shù)據(jù)后,若CPU和GPU分配得到的數(shù)據(jù)量均為偶數(shù),第一步操作中CPU和GPU不需要交換數(shù)據(jù),所以CPU和GPU分別對分配的數(shù)據(jù)進行排序,經(jīng)過(n-N+l)*(n-N)/2 (此處為6)步后,也就是第n-N個歸并子集(p=n-N)的最后一步,此時CPU中的數(shù)據(jù)和GPU中的數(shù)據(jù)出現(xiàn)了相關(guān)性,則下一步將所有數(shù)據(jù)匯集到一個計算能力大的設(shè)備GPU上排序。本發(fā)明實施例中,GPU的運算能力比CPU運算能力好,本【技術(shù)領(lǐng)域】人員可根據(jù)實際情況而定。那么,在后面的排序過程中,什么時候數(shù)據(jù)會出現(xiàn)無關(guān)性,什么時候出現(xiàn)相關(guān)性,下面將詳細(xì)闡述:以第q個歸并子集為例,且n-N+1 ^q^n,倒數(shù)(相對)第I步執(zhí)行前無關(guān)性序列含有的數(shù)據(jù)個數(shù)是2,倒數(shù)(相對)第S+1步執(zhí)行前無關(guān)性序列含有的數(shù)據(jù)個數(shù)為2s+1,即倒數(shù)(相對)第S+1步執(zhí)行后,無關(guān)性序列含有的數(shù)據(jù)個數(shù)為2s。設(shè)CPU中數(shù)據(jù)個數(shù)為2s,GPU中數(shù)據(jù)個數(shù)為2n-2s,因為每個序列中的數(shù)據(jù)個數(shù)為2s,因此這兩部分?jǐn)?shù)據(jù)不相關(guān),可以將數(shù)據(jù)分割開來分別在CPU和GPU上排序,并不出現(xiàn)設(shè)備間的數(shù)據(jù)交換。換算成全局的步數(shù)編號就是--第(q+l)*q/2_S+l步到第(q+l)*q/2步。而由前面的負(fù)載分配可知,CPU中分配的數(shù)據(jù)個數(shù)為2n_N,GPU中分配的數(shù)據(jù)個數(shù)為2n-2n_N,則可得到S和N的轉(zhuǎn)換關(guān)系S = n-N,則公式換算為:第(q+l)*q/2_n+N+l步到第(q+l)*q/2步可以將數(shù)據(jù)分割開來分別在CPU和GPU上排序,并不出現(xiàn)設(shè)備間的數(shù)據(jù)交換。將具體參數(shù)帶入公式可得:第8-10步,數(shù)據(jù)不相關(guān),則可將數(shù)據(jù)分割開來分別在CPU和GPU上排序。從而可以確定數(shù)據(jù)無關(guān)性分隔線bib2,如圖4所示。
[0070]在一個例子中,排序過程中,由于CPU和GPU間數(shù)據(jù)交換時開銷較大,當(dāng)在一段CPU和GPU上同時排序的步數(shù)較少時,可以將所有數(shù)據(jù)都匯集到計算能力大的處理器上排序,而不分開排序。
[0071]需要說明的時,確定負(fù)載數(shù)量分配線時,也可以采用上述實施例中的其它公式,當(dāng)采用其它公式時,后面公式的推導(dǎo)過程即數(shù)據(jù)無關(guān)性分隔線的確定過程與上述過程相同,此處不復(fù)贅述。
[0072]上述實施例描述的為負(fù)載分配方法及排序過程中出現(xiàn)數(shù)據(jù)無關(guān)性對應(yīng)的步數(shù)的確定過程,可以看出,通過將相關(guān)性數(shù)據(jù)操作分配到運算能力大的處理器上排序,將無關(guān)性數(shù)據(jù)操作分配到CPU和GPU上排序,可`以重疊計算、提高排序速度。
[0073]上述實施例描述的為CPU和GPU混合架構(gòu)的雙調(diào)歸并排序的負(fù)載分配過程,下述實施例描述的為按照不同系數(shù)分配負(fù)載的優(yōu)劣比較。圖5本發(fā)明實施例提供的雙調(diào)歸并排序的不同負(fù)載分配方法的優(yōu)劣比較圖。本實施例中的字母意義與前述實施例相同,在此不復(fù)贅述。如圖5所示:
[0074]第I種情況中,將k/(l+k)*2n (此處為6)個數(shù)據(jù)分配給CPU,其它10個數(shù)據(jù)分配給GPU,通過第I個圖可以看出,在整個排序過程中(共10步),CPU和GPU在第1、6、10步同時排序,其它步驟都是GPU獨自排序。
[0075]在一個例子中,雖然第6步CPU和GPU可以同時排序,由于這兩段同時排序的步驟少,可以簡化為第3和第6步GPU獨自排序。
[0076]計算CPU和GPU中分配數(shù)據(jù)個數(shù)與上述實施例方法一樣,在此不復(fù)贅述。
[0077]第2種情況中,將l/2N+1*2n (此處為4)個數(shù)據(jù)分配給CPU,其它12個數(shù)據(jù)分配給GPU,在整個排序過程中(共10步),CPU和GPU在第1-3、5-6步和第9_10步同時排序,其它步驟都是GPU獨自排序。[0078]在一個例子中,雖然在第5-6步CPU和GPU可以同時排序,由于這一段同時排序的步驟少,簡化為第5-6步GPU獨自排序。
[0079]計算CPU和GPU中分配數(shù)據(jù)個數(shù)與上述實施例方法一樣,在此不復(fù)贅述。
[0080]第3種情況中,將l/2N*2n(此處為8)個數(shù)據(jù)分配給CPU,其它8個數(shù)據(jù)分配給GPU,在整個排序過程中(共10步),CPU和GPU在第1-6步和第8-10步同時排序,其它步驟都是GI3U獨自排序。
[0081 ] 從上述三種負(fù)載分配方法可以看出,第3種方法中CPU參與排序的步數(shù)最多,可以最充分利用CPU資源,提高排序速度。本【技術(shù)領(lǐng)域】技術(shù)人員可以根據(jù)實際需要選擇用哪種方法分配負(fù)載,或者采用其它方法分配負(fù)載。
[0082]本發(fā)明實施例中,根據(jù)CPU和GPU運算能力的比值,對CPU和GPU進行負(fù)載分配,是CPU和GPU可以同時進行數(shù)據(jù)排序,從而可以重疊計算、提高排序速度。
[0083]顯而易見,在不偏離本發(fā)明的真實精神和范圍的前提下,在此描述的本發(fā)明可以有許多變化。因此,所有對于本領(lǐng)域技術(shù)人員來說顯而易見的改變,都應(yīng)包括在本權(quán)利要求書所涵蓋的范圍之內(nèi)。本發(fā)明所要求保護的范圍僅由所述的權(quán)利要求書進行限定。
【權(quán)利要求】
1.一種雙調(diào)歸并排序調(diào)優(yōu)方法,其特征在于,所述方法包括: 根據(jù)GPU和CPU的運算能力,分配待排序數(shù)據(jù)集; GPU和CPU對各自分配的待排序數(shù)據(jù)集進行雙調(diào)歸并排序;其中,排序過程中,當(dāng)GPU和CPU中的數(shù)據(jù)有無關(guān)性時,同時使用CPU和GPU分別排序,在兩部分?jǐn)?shù)據(jù)有相關(guān)性時,將數(shù)據(jù)匯集到GPU和CPU中的一個設(shè)備上排序。
2.如權(quán)利要求1所述的方法,其特征在于, 所述無關(guān)性是指,雙調(diào)歸并排序時,當(dāng)CPU和GPU中的數(shù)據(jù)不需要相互交換數(shù)據(jù)即能完成所屬數(shù)據(jù)的比較交換操作時,則CPU和GPU中的數(shù)據(jù)具有無關(guān)性; 所述相關(guān)性是指,雙調(diào)歸并排序時,當(dāng)CPU和GPU為了完成所屬數(shù)據(jù)的比較交換操作需要相互交換數(shù)據(jù)時,則CPU和GPU中的數(shù)據(jù)具有相關(guān)性。
3.如權(quán)利要求1所述的方法,其特征在于,CPU利用線程數(shù)調(diào)優(yōu)獲得的最優(yōu)線程數(shù)進行排序。
4.如權(quán)利要求1所述的方法,其特征在于,GPU和CPU利用向量排序,并且利用向量長度調(diào)優(yōu)獲得的最優(yōu)向量長度或/和工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
5.如權(quán)利要求1所述的方法,其特征在于,GPU和CPU利用標(biāo)量排序,并且利用工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
6.一種雙調(diào)歸并排序調(diào)優(yōu)裝置,其特征在于,所述裝置包括: 分配單元,用于根據(jù)GPU和CPU的運算能力,分配待排序數(shù)據(jù)集; 協(xié)調(diào)單元,用于GPU和CPU對各自分配的待排序數(shù)據(jù)集進行雙調(diào)歸并排序;其中,排序過程中,當(dāng)GPU和CPU中的數(shù)據(jù)有無關(guān)性時,同時使用CPU和GPU分別排序,在兩部分?jǐn)?shù)據(jù)有相關(guān)性時,將數(shù)據(jù)匯集到GPU和CPU中的一個設(shè)備上排序。
7.如權(quán)利要求6所述的裝置,其特征在于, 所述無關(guān)性是指,雙調(diào)歸并排序時,當(dāng)CPU和GPU中的數(shù)據(jù)不需要相互交換數(shù)據(jù)即能完成所屬數(shù)據(jù)的比較交換操作時,則CPU和GPU中的數(shù)據(jù)具有無關(guān)性; 所述相關(guān)性是指,雙調(diào)歸并排序時,CPU和GPU為了完成所屬數(shù)據(jù)的比較交換操作需要相互交換數(shù)據(jù),則CPU和GPU中的數(shù)據(jù)具有相關(guān)性。
8.如權(quán)利要求6所述的裝置,其特征在于,CPU利用線程數(shù)調(diào)優(yōu)獲得的最優(yōu)線程數(shù)進行排序。
9.如權(quán)利要求6所述的裝置,其特征在于,GPU和CPU中采用向量排序,并且利用向量長度調(diào)優(yōu)獲得的最優(yōu)向量長度或/和工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
10.如權(quán)利要求6所述的裝置,其特征在于,GPU和CPU中采用標(biāo)量排序,并且利用工作組內(nèi)線程數(shù)調(diào)優(yōu)獲得的工作組最優(yōu)線程數(shù)進行排序。
【文檔編號】G06F9/50GK103514042SQ201210204459
【公開日】2014年1月15日 申請日期:2012年6月18日 優(yōu)先權(quán)日:2012年6月18日
【發(fā)明者】遲學(xué)斌, 闞圣哲, 王玨, 聶寧明, 郎顯宇 申請人:中國科學(xué)院計算機網(wǎng)絡(luò)信息中心