一種基于gpu的異步圖數(shù)據(jù)處理系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于圖數(shù)據(jù)處理和高性能計(jì)算領(lǐng)域,更具體地,涉及一種基于GPU的異步圖數(shù)據(jù)處理系統(tǒng)。
【背景技術(shù)】
[0002]大規(guī)模的圖數(shù)據(jù)處理,被越來越多的應(yīng)用所涉及。傳統(tǒng)的單機(jī)圖處理系統(tǒng),對大規(guī)模的圖數(shù)據(jù)進(jìn)行劃分、之后依序?qū)?shù)據(jù)塊進(jìn)行處理,相比較于分布式系統(tǒng)編程的繁瑣,簡潔的單機(jī)系統(tǒng)得到了越來越多的關(guān)注。單機(jī)系統(tǒng)的關(guān)鍵,也就是解決由于圖數(shù)據(jù)劃分而帶來的磁盤訪問性能差、任務(wù)并發(fā)度低、設(shè)備內(nèi)存帶寬利用率低等問題,在學(xué)術(shù)界,針對此類問題已經(jīng)進(jìn)行了一些積極探索和嘗試。
[0003]GraphChi 系統(tǒng)采用了新設(shè)計(jì)的滑動(dòng)窗口 PSW(Parallel Sliding Window)算法,將磁盤數(shù)據(jù)分塊引入內(nèi)存進(jìn)行處理,流動(dòng)地順序訪問磁盤數(shù)據(jù),解決了由大量隨機(jī)磁盤訪問帶來的1開銷。但是這種數(shù)據(jù)劃分策略,將導(dǎo)致每次執(zhí)行的數(shù)據(jù)中存在有大量的數(shù)據(jù)訪問沖突,從而只會(huì)有很少的一部分進(jìn)行并行處理,執(zhí)行效率很低。
[0004]TurboGraph系統(tǒng),在GraphChi系統(tǒng)的基礎(chǔ)之上,嘗試解決任務(wù)并行度低下的問題,采用Pin-and-slide編程模型,將部分?jǐn)?shù)據(jù)固定在內(nèi)存中,加快訪問效率,同時(shí)覆蓋了一部分1過程和CPU處理過程,提高并行度。但此系統(tǒng)受到內(nèi)存容量限制,處理能力有限,很難高效地解決數(shù)據(jù)并發(fā)的問題。
[0005]隨著GPGPU技術(shù)的成熟,GPU被用來加速普通的計(jì)算任務(wù)成為一種趨勢。由于圖數(shù)據(jù)的頂點(diǎn)多、邊數(shù)多、數(shù)據(jù)依賴關(guān)系復(fù)雜等因素,多數(shù)的圖頂點(diǎn)處理任務(wù)十分適合使用GPU進(jìn)行加速。在這方面,學(xué)術(shù)界也已經(jīng)進(jìn)行了一些研宄工作。
[0006]Medusa系統(tǒng)是近期開源的一個(gè)GPU架構(gòu)的圖數(shù)據(jù)處理系統(tǒng),該系統(tǒng)設(shè)計(jì)了一套API接口,用戶可以方便地使用GPU來加速圖處理。但是該系統(tǒng)并沒有考慮數(shù)據(jù)劃分策略,更沒有嘗試解決GPU中任務(wù)并發(fā)度低的問題。
[0007]GraphLab系統(tǒng)引入鎖機(jī)制來解決數(shù)據(jù)訪問沖突和資源競爭等問題,但由于GPU自身結(jié)構(gòu)特性,引入鎖機(jī)制反而會(huì)帶來更大的開銷,很難用來解決并發(fā)問題。
【發(fā)明內(nèi)容】
[0008]針對當(dāng)前單機(jī)圖處理系統(tǒng)的數(shù)據(jù)劃分策略效率低下,圖頂點(diǎn)處理任務(wù)并發(fā)度差的情況,本發(fā)明提出了一種基于GPU的異步圖處理系統(tǒng),兼顧GPU設(shè)備內(nèi)存和主機(jī)內(nèi)存之間的數(shù)據(jù)交換開銷問題,采用基于混合圖著色算法的數(shù)據(jù)劃分策略,提高數(shù)據(jù)并發(fā)度,充分利用GPU強(qiáng)大的并行處理能力,大幅提升單機(jī)圖處理性能。
[0009]為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種基于GPU的異步圖處理系統(tǒng),包括數(shù)據(jù)預(yù)處理模塊、數(shù)據(jù)流管理模塊、異步執(zhí)行模塊和迭代處理模塊,其中:
[0010]所述數(shù)據(jù)預(yù)處理模塊,用于對原始圖數(shù)據(jù)進(jìn)行預(yù)處理,采用混合著色算法,將原始圖數(shù)據(jù)劃分為一定數(shù)目的子數(shù)據(jù),并保證每一個(gè)子數(shù)據(jù)中的頂點(diǎn)被分配得到的顏色相同,該模塊在CPU中執(zhí)行完成;
[0011]所述數(shù)據(jù)流管理模塊,用于管理CPU和GPU之間的數(shù)據(jù)交換,通過CUDA語言的支持,在CPU memory和GPU設(shè)備內(nèi)存進(jìn)行數(shù)據(jù)交換時(shí),采用數(shù)據(jù)預(yù)取、多管道數(shù)據(jù)拷貝的方式,利用PC1-E的帶寬,并減少數(shù)據(jù)交換開銷;
[0012]所述異步執(zhí)行模塊,用于對拷貝到GPU設(shè)備內(nèi)存中的數(shù)據(jù)進(jìn)行異步執(zhí)行,將數(shù)據(jù)通過PC1-E輸送到GPU設(shè)備內(nèi)存中,根據(jù)不同的算法需求,在保證數(shù)據(jù)一致性的同時(shí),由GPU對數(shù)據(jù)執(zhí)行更新函數(shù);
[0013]所述迭代處理模塊,用于根據(jù)圖算法迭代執(zhí)行的特征,在GPU執(zhí)行完成當(dāng)前輪次的更新任務(wù)后,判斷是否達(dá)到算法要求的收斂條件,如果達(dá)到,則終止所有的更新任務(wù);如果沒有達(dá)到收斂要求,則繼續(xù)由GPU對數(shù)據(jù)進(jìn)行異步處理。
[0014]在本發(fā)明的一個(gè)實(shí)施例中,所述數(shù)據(jù)預(yù)處理模塊采用的混合著色算法具體為:采用N種顏色對原始圖數(shù)據(jù)進(jìn)行著色,每個(gè)顏色包含的頂點(diǎn)數(shù)目分別為Pp P2, P3,…、Pn,根據(jù)卩,“ =1,2,3…η)值的大小,將最小的M種顏色混合在一起,從而形成(Ν-Μ+1)個(gè)著色單元,其中(N-M)個(gè)著色單元的所有頂點(diǎn)具有同一種顏色,另一個(gè)為混合著色單元。
[0015]在本發(fā)明的一個(gè)實(shí)施例中,所述數(shù)據(jù)預(yù)處理具體執(zhí)行過程為:根據(jù)混合著色算法的結(jié)果,將Ν-Μ+1個(gè)著色單元中的頂點(diǎn)分別劃分為獨(dú)立的Ν-Μ+1個(gè)數(shù)據(jù)塊,數(shù)據(jù)塊頂點(diǎn)所涉及的數(shù)據(jù)邊也整合在一個(gè)集合中;從而將原有圖數(shù)據(jù)劃分為Ν-Μ+1個(gè)具有獨(dú)立頂點(diǎn)和數(shù)據(jù)邊的子圖,其中N-M個(gè)子圖中,所有頂點(diǎn)均不會(huì)共享數(shù)據(jù)邊,另一個(gè)則為混合著色單元,不保證其中的部分頂點(diǎn)互相為鄰接點(diǎn)、共享數(shù)據(jù)邊。
[0016]在本發(fā)明的一個(gè)實(shí)施例中,所述數(shù)據(jù)流管理模塊包括數(shù)據(jù)預(yù)取模塊和多管道數(shù)據(jù)拷貝模塊,所述數(shù)據(jù)預(yù)取模塊用于在GPU kernel執(zhí)行更新任務(wù)時(shí),對數(shù)據(jù)進(jìn)行預(yù)取,提前準(zhǔn)備GPU kernel所需要的數(shù)據(jù),做到在kernel計(jì)算的同時(shí)進(jìn)行數(shù)據(jù)傳送;所述多管道數(shù)據(jù)拷貝模塊用于根據(jù)不同著色單元對數(shù)據(jù)的需求不同,采用CUDA Stream的方式,在多管道中同時(shí)對數(shù)據(jù)進(jìn)行拷貝,從而減少數(shù)據(jù)拷貝的開銷。
[0017]在本發(fā)明的一個(gè)實(shí)施例中,所述異步執(zhí)行模塊的異步執(zhí)行具體為:在執(zhí)行處理任務(wù)時(shí),各個(gè)頂點(diǎn)不需要進(jìn)行全局同步,直接將更新值推送給鄰接頂點(diǎn),或者由鄰接頂點(diǎn)主動(dòng)獲取最近的更新值,使得所有頂點(diǎn)都能夠在第一時(shí)間得到所需頂點(diǎn)和數(shù)據(jù)邊的最新值,從而保證每次更新都基于最新值,在保證計(jì)算過程中數(shù)據(jù)一致性的前提下,可以加快整個(gè)算法的收斂速度。
[0018]在本發(fā)明的一個(gè)實(shí)施例中,所述數(shù)據(jù)一致性是指在更新數(shù)據(jù)時(shí),保證其他任一頂點(diǎn)在本頂點(diǎn)獲取到的值是最新的、統(tǒng)一的,避免由于值的差異導(dǎo)致計(jì)算無法收斂、甚至計(jì)算結(jié)果錯(cuò)誤問題。
[0019]在本發(fā)明的一個(gè)實(shí)施例中,所述迭代處理模塊具體用于,在對圖算法進(jìn)行迭代處理的過程中,通過設(shè)置迭代閾值的方式,來監(jiān)測每次迭代過程是否達(dá)到算法的收斂條件,如果前后兩次迭代計(jì)算的結(jié)果差異超過了迭代閾值,則繼續(xù)進(jìn)行迭代計(jì)算;而如果前后兩次迭代計(jì)算的結(jié)果差異小于迭代閾值,則表明迭代計(jì)算已經(jīng)沒有必要繼續(xù)進(jìn)行下去,終止計(jì)算過程。
[0020]在本發(fā)明的一個(gè)實(shí)施例中,所述迭代處理模塊在監(jiān)測迭代過程是否達(dá)到算法收斂條件的策略,分為兩種:一是設(shè)定全局閾值,計(jì)算上一迭代輪次和當(dāng)前迭代輪次各個(gè)頂點(diǎn)值之間的差異,當(dāng)所有頂點(diǎn)的差異值均小于所設(shè)定的全局閾值時(shí),則認(rèn)為計(jì)算達(dá)到了收斂條件;二是設(shè)定閾值范圍,當(dāng)圖數(shù)據(jù)中有一定數(shù)量的頂點(diǎn)達(dá)到了閾值即認(rèn)為計(jì)算達(dá)到了收斂條件,而不一定保證所有的頂點(diǎn)都滿足了閾值要求。
[0021]與現(xiàn)有技術(shù)相比,本方法具有以下的有益效果:
[0022](I)優(yōu)化的數(shù)據(jù)劃分策略
[0023]基于混合圖著色算法的數(shù)據(jù)劃分策略,將大規(guī)模的圖數(shù)據(jù),分割成多個(gè)數(shù)據(jù)塊,每一次只針對其中的一個(gè)子塊進(jìn)行處理,可以有效解決了由于圖數(shù)據(jù)的規(guī)模過大、GPU內(nèi)存有限,而不能直接進(jìn)行處理的問題。同時(shí),被分割到同一數(shù)據(jù)塊中的圖頂點(diǎn),大多是不相鄰的弱關(guān)聯(lián)數(shù)據(jù),可以同時(shí)被并發(fā)執(zhí)行,大幅提高任務(wù)并發(fā)力度。
[0024](2)高效的任務(wù)執(zhí)行效率
[0025]GPU被用來加速需要高并發(fā)處理的那部分任務(wù)。采用本發(fā)明的策略,在每一個(gè)子數(shù)據(jù)塊中,大多數(shù)的圖頂點(diǎn)可以被直接并發(fā)執(zhí)行,GPU的高并發(fā)能力得到發(fā)揮,可以高效地完成數(shù)據(jù)處理任務(wù)。當(dāng)然,對于數(shù)據(jù)塊中存有的少量強(qiáng)關(guān)聯(lián)數(shù)據(jù),可以交給CPU進(jìn)行處理,這樣就實(shí)現(xiàn)了 CPU和GPU的協(xié)同工作,CPU負(fù)責(zé)順序執(zhí)行那些不易被并行執(zhí)行的數(shù)據(jù),GPU則負(fù)責(zé)執(zhí)行并發(fā)度高的那部分圖數(shù)據(jù),混合協(xié)作、高效地完成整個(gè)圖處理任務(wù)。
[0026](3)提高設(shè)備內(nèi)存帶寬利用率
[0027]本系統(tǒng)采用基于混合圖著色算法的數(shù)據(jù)劃分策略,在進(jìn)行數(shù)據(jù)劃分時(shí),不僅考慮到任務(wù)并發(fā)問題,還不得不將一些只有少量頂點(diǎn)的分塊合并到其他分塊中,以此來減少數(shù)據(jù)置換次數(shù),提高設(shè)備內(nèi)存帶寬利用率,避免由于數(shù)據(jù)劃分策略本身帶來的額外系統(tǒng)開銷。
[0028](4)加快算法的迭代收斂速度
[0029]本系統(tǒng)采用異步編程模型對圖算法進(jìn)行處理,由于此類算法本身具有迭代處理的特征,相比較于傳統(tǒng)的同步BSP模型中“計(jì)算-通信-等待”的三步處理過程,異步編程可以避免等待開銷,將最新的頂點(diǎn)值在計(jì)算完成的第一時(shí)間傳遞給鄰接點(diǎn),結(jié)合系統(tǒng)中迭代處理模塊,極大地加快算法的迭代收斂速度。
[0030](5)方便普通用戶使用的GPU系統(tǒng)框架
[0031]本系統(tǒng)基于混合圖著色算法的的數(shù)據(jù)劃分策略,采用異步編程模型,實(shí)現(xiàn)了一個(gè)CPU和GPU混合架構(gòu)的單機(jī)圖處理系統(tǒng),該系統(tǒng)將本著方便普通用戶使用的目標(biāo),在用戶只有少量GPU編程基礎(chǔ)和經(jīng)驗(yàn)的情況下,依然能夠滿足通過使用本系統(tǒng)框架,利用GPU來完成加速圖處理過程的目標(biāo)。
【附圖說明】
[0032]圖1是GPU異步圖數(shù)據(jù)處理方法執(zhí)行流程;
[0033]圖2是混合著色算法和預(yù)處理模塊執(zhí)行流程示意圖;
[0034]圖3是GPU異步處理的執(zhí)彳丁流程不意圖。
【具體實(shí)施方式】
[0035]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0036]本發(fā)明采用基于混合圖著色算法的數(shù)據(jù)劃分策略,解決了圖數(shù)據(jù)處理的數(shù)據(jù)訪問沖突和GPU高并發(fā)性能之間的矛盾問題,高效地利用GPU的并行計(jì)算優(yōu)勢來加速圖數(shù)據(jù)處理過程。如圖1所示,本發(fā)明基于GPU的異步圖處理方法執(zhí)行流程如下:
[0037](I)數(shù)據(jù)預(yù)處理模塊,用于對原始圖數(shù)據(jù)進(jìn)行預(yù)處理,采用混合著色算法,將原始圖數(shù)據(jù)劃分為一定數(shù)目的子數(shù)據(jù),并保證每一個(gè)子數(shù)據(jù)中的頂點(diǎn)被分配得到的顏色相同,該模塊在CPU中執(zhí)行完成;
[0038]其中所述數(shù)據(jù)預(yù)處理模塊采用的混合著色算法具體為:采用N種顏色對原始圖數(shù)據(jù)進(jìn)行著色,每個(gè)顏色包含的頂點(diǎn)數(shù)