本發(fā)明涉及標(biāo)簽傳播技術(shù),尤其涉及一種中央處理器(cpu,centralprocessingunit)-圖形處理器(gpu,graphicsprocessingunit)異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)方法、裝置。
背景技術(shù):
近年來,基于網(wǎng)絡(luò)的數(shù)據(jù)分析,引起了數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)應(yīng)用領(lǐng)域的研究興趣。許多基于圖的半監(jiān)督學(xué)習(xí)算法被提出。在這些算法中,一些頂點(diǎn)(已標(biāo)記數(shù)據(jù))用標(biāo)簽或激活值初始化,其他頂點(diǎn)(未標(biāo)記數(shù)據(jù))初始化為0,學(xué)習(xí)問題是分配標(biāo)簽/激活值到未標(biāo)記數(shù)據(jù)進(jìn)行分類或排序?;趫D的半監(jiān)督學(xué)習(xí)算法的共同特征是“聚類(cluster)假設(shè)”:一個(gè)網(wǎng)絡(luò)中相鄰的數(shù)據(jù)點(diǎn)應(yīng)該有相似的標(biāo)記,而網(wǎng)絡(luò)中相同全局cluster的數(shù)據(jù)點(diǎn)也應(yīng)該有相似的標(biāo)記。這些算法通常配置為網(wǎng)絡(luò)上標(biāo)簽傳播:相鄰頂點(diǎn)上的標(biāo)簽信息是迭代傳播的,在傳播過程中最終收斂于唯一的最小化二次判據(jù)的全局最優(yōu)解。基于此,標(biāo)簽傳播算法應(yīng)運(yùn)而生。標(biāo)簽傳播算法是一種有效且高效的技術(shù),利用網(wǎng)絡(luò)中局部和全局特征進(jìn)行半監(jiān)督學(xué)習(xí)。
基于互作用的網(wǎng)絡(luò)傳播(minprop,mutualinteraction-basednetworkpropagation)算法作為標(biāo)簽傳播算法的一種,是基于異構(gòu)網(wǎng)絡(luò)的標(biāo)簽傳播算法,通過在單個(gè)網(wǎng)絡(luò)內(nèi)部和多個(gè)網(wǎng)絡(luò)之間進(jìn)行標(biāo)簽傳播來挖掘網(wǎng)絡(luò)中的隱藏信息。該算法將所有網(wǎng)絡(luò)結(jié)點(diǎn)進(jìn)行建模,最終轉(zhuǎn)換成矩陣上的對(duì)應(yīng)頂點(diǎn),頂點(diǎn)包括已標(biāo)記頂點(diǎn)和未標(biāo)記頂點(diǎn),頂點(diǎn)間邊的權(quán)重表示頂點(diǎn)間的相似度。頂點(diǎn)的標(biāo)簽按照相似度傳播到其他的頂點(diǎn),相似度越大,則標(biāo)簽越容易傳播。通過標(biāo)簽傳播,每個(gè)頂點(diǎn)的標(biāo)簽值收斂于設(shè)定的閾值,達(dá)到學(xué)習(xí)未標(biāo)記頂點(diǎn)的標(biāo)簽信息的目的。
現(xiàn)有的minprop算法的計(jì)算一般都是借助matlab等工具完全利用cpu去完成計(jì)算的。通過數(shù)據(jù)建模,將一些社交、生物等網(wǎng)絡(luò)信息轉(zhuǎn)換成矩陣,經(jīng)過矩陣標(biāo)準(zhǔn)化等操作,最終由cpu完成整個(gè)矩陣運(yùn)算過程,產(chǎn)生最終結(jié)果。
minprop算法需要在大規(guī)模矩陣上面進(jìn)行求解,有大量的迭代次數(shù)。cpu的核心數(shù)量有限,完成這些迭代需要每個(gè)處理器核心逐個(gè)進(jìn)行計(jì)算操作。整個(gè)過程需要數(shù)天甚至數(shù)周時(shí)間才能完成計(jì)算,這對(duì)于工程人員和科技工作者是無法忍受的。
綜上所述,基于cpu計(jì)算模型的minprop算法實(shí)現(xiàn)主要面臨以下幾個(gè)問題:
1、算法迭代次數(shù)上億級(jí)別,cpu核心數(shù)有限;
2、cpu利用率低,空等系統(tǒng)輸入輸出(io,inputoutput)時(shí)間開銷巨大;
3、系統(tǒng)內(nèi)存有限,內(nèi)存數(shù)據(jù)置換頻繁;
4、分布式計(jì)算時(shí),需要提前拆分?jǐn)?shù)據(jù),規(guī)劃計(jì)算任務(wù),匯總計(jì)算結(jié)果;
5、計(jì)算時(shí)間長、斷電、系統(tǒng)故障等偶然因素一旦發(fā)生,整個(gè)過程需重新開始;
6、計(jì)算時(shí)間往往需要數(shù)周乃至數(shù)月時(shí)間,拖慢整個(gè)科研進(jìn)度。
技術(shù)實(shí)現(xiàn)要素:
為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種cpu-gpu異構(gòu)的標(biāo)簽傳播方法、裝置。
本發(fā)明實(shí)施例提供的cpu-gpu異構(gòu)的標(biāo)簽傳播方法,包括:
利用gpu標(biāo)準(zhǔn)化所有網(wǎng)絡(luò)矩陣;
利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第一收斂結(jié)果發(fā)送至所述gpu;
當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第二收斂結(jié)果發(fā)送至所述gpu;
當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,得到第三收斂結(jié)果;當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果。
本發(fā)明實(shí)施例中,所述利用gpu標(biāo)準(zhǔn)化所有網(wǎng)絡(luò)矩陣,包括:
將所述第一同構(gòu)網(wǎng)絡(luò)矩陣、所述第二同構(gòu)網(wǎng)絡(luò)矩陣以及所述異構(gòu)網(wǎng)絡(luò)矩陣,讀入至頁鎖定內(nèi)存中;
利用gpu對(duì)所述內(nèi)存中的第一同構(gòu)網(wǎng)絡(luò)矩陣、所述第二同構(gòu)網(wǎng)絡(luò)矩陣以及所述異構(gòu)網(wǎng)絡(luò)矩陣進(jìn)行標(biāo)準(zhǔn)化處理;
將所述內(nèi)存中的各個(gè)網(wǎng)絡(luò)矩陣替換為標(biāo)準(zhǔn)化處理后的結(jié)果。
本發(fā)明實(shí)施例中,所述利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第一收斂結(jié)果發(fā)送至所述gpu,包括:
利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第i次標(biāo)簽傳播,將所述第i次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,i≥2;
所述cpu計(jì)算所述第i次標(biāo)簽傳播向量以及第i-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第一預(yù)設(shè)閾值;當(dāng)所述差值小于等于第一預(yù)設(shè)閾值時(shí),所述cpu確定出所述第一收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第一預(yù)設(shè)閾值時(shí),所述cpu確定出所述第一收斂結(jié)果為所述標(biāo)簽傳播未收斂;
將所述第一收斂結(jié)果發(fā)送至所述gpu。
本發(fā)明實(shí)施例中,所述方法還包括:
當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu在所述第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第i+1次標(biāo)簽傳播,并將所述第i+1次標(biāo)簽傳播向量發(fā)送至所述cpu。
本發(fā)明實(shí)施例中,所述gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第二收斂結(jié)果發(fā)送至所述gpu,包括:
利用gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第j次標(biāo)簽傳播,將所述第j次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,j≥2;
所述cpu計(jì)算所述第j次標(biāo)簽傳播向量以及第j-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第二預(yù)設(shè)閾值;當(dāng)所述差值小于等于第二預(yù)設(shè)閾值時(shí),所述cpu確定出所述第二收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第二預(yù)設(shè)閾值時(shí),所述cpu確定出所述第二收斂結(jié)果為所述標(biāo)簽傳播未收斂;
將所述第二收斂結(jié)果發(fā)送至所述gpu。
本發(fā)明實(shí)施例中,所述方法還包括:
當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu在所述第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第j+1次標(biāo)簽傳播,并將所述第j+1次標(biāo)簽傳播向量發(fā)送至所述cpu。
本發(fā)明實(shí)施例中,所述gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,得到第三收斂結(jié)果;當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果,包括:
利用gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第k次標(biāo)簽傳播,將所述第k次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,k≥2;
所述cpu計(jì)算所述第k次標(biāo)簽傳播向量以及第k-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第三預(yù)設(shè)閾值;當(dāng)所述差值小于等于第三預(yù)設(shè)閾值時(shí),所述cpu確定出所述第三收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第三預(yù)設(shè)閾值時(shí),所述cpu確定出所述第三收斂結(jié)果為所述標(biāo)簽傳播未收斂;
當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果。
本發(fā)明實(shí)施例中,所述方法還包括:
當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu重新在所述第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播。
本發(fā)明實(shí)施例提供的cpu-gpu異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)裝置,包括:cpu、gpu;
標(biāo)準(zhǔn)化單元,用于利用gpu標(biāo)準(zhǔn)化所有網(wǎng)絡(luò)矩陣;
第一標(biāo)簽傳播單元,用于利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;
第一判斷單元,用于利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第一收斂結(jié)果發(fā)送至所述gpu;
第二標(biāo)簽傳播單元,用于當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;
第二判斷單元,用于利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第二收斂結(jié)果發(fā)送至所述gpu;
第三標(biāo)簽傳播單元,用于當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;
第三判斷單元,用于利用所述cpu判斷所述標(biāo)簽傳播是否收斂,得到第三收斂結(jié)果;
結(jié)果單元,用于當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果。
本發(fā)明實(shí)施例中,所述標(biāo)準(zhǔn)化單元包括:
讀取子單元,用于將所述第一同構(gòu)網(wǎng)絡(luò)矩陣、所述第二同構(gòu)網(wǎng)絡(luò)矩陣以及所述異構(gòu)網(wǎng)絡(luò)矩陣,讀入至頁鎖定內(nèi)存中;
處理子單元,用于利用gpu對(duì)所述內(nèi)存中的第一同構(gòu)網(wǎng)絡(luò)矩陣、所述第二同構(gòu)網(wǎng)絡(luò)矩陣以及所述異構(gòu)網(wǎng)絡(luò)矩陣進(jìn)行標(biāo)準(zhǔn)化處理;
替換子單元,用于將所述內(nèi)存中的各個(gè)網(wǎng)絡(luò)矩陣替換為標(biāo)準(zhǔn)化處理后的結(jié)果。
本發(fā)明實(shí)施例中,所述第一標(biāo)簽傳播單元,還用于利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第i次標(biāo)簽傳播,將所述第i次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,i≥2;
所述第一判斷單元,還用于利用所述cpu計(jì)算所述第i次標(biāo)簽傳播向量以 及第i-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第一預(yù)設(shè)閾值;當(dāng)所述差值小于等于第一預(yù)設(shè)閾值時(shí),所述cpu確定出所述第一收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第一預(yù)設(shè)閾值時(shí),所述cpu確定出所述第一收斂結(jié)果為所述標(biāo)簽傳播未收斂;將所述第一收斂結(jié)果發(fā)送至所述gpu。
本發(fā)明實(shí)施例中,所述第一標(biāo)簽傳播單元,還用于當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu在所述第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第i+1次標(biāo)簽傳播,并將所述第i+1次標(biāo)簽傳播向量發(fā)送至所述cpu。
本發(fā)明實(shí)施例中,所述第二標(biāo)簽傳播單元,還用于利用gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第j次標(biāo)簽傳播,將所述第j次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,j≥2;
所述第二判斷單元,還用于利用所述cpu計(jì)算所述第j次標(biāo)簽傳播向量以及第j-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第二預(yù)設(shè)閾值;當(dāng)所述差值小于等于第二預(yù)設(shè)閾值時(shí),所述cpu確定出所述第二收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第二預(yù)設(shè)閾值時(shí),所述cpu確定出所述第二收斂結(jié)果為所述標(biāo)簽傳播未收斂;將所述第二收斂結(jié)果發(fā)送至所述gpu。
本發(fā)明實(shí)施例中,所述第二標(biāo)簽傳播單元,還用于當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu在所述第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第j+1次標(biāo)簽傳播,并將所述第j+1次標(biāo)簽傳播向量發(fā)送至所述cpu。
本發(fā)明實(shí)施例中,所述第三標(biāo)簽傳播單元,還用于利用gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第k次標(biāo)簽傳播,將所述第k次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,k≥2;
所述第三判斷單元,還用于利用所述cpu計(jì)算所述第k次標(biāo)簽傳播向量以及第k-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第三預(yù)設(shè)閾值;當(dāng)所述差值小于等于第三預(yù)設(shè)閾值時(shí),所述cpu確定出所述第三收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第三預(yù)設(shè)閾值時(shí),所述cpu確定出所述第三收斂結(jié)果為所述標(biāo)簽傳播未收斂;當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果。
本發(fā)明實(shí)施例中,所述第一標(biāo)簽傳播單元,還用于當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu重新在所述第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播。
本發(fā)明實(shí)施例的技術(shù)方案中,利用gpu標(biāo)準(zhǔn)化所有網(wǎng)絡(luò)矩陣;利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第一收斂結(jié)果發(fā)送至所述gpu;當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第二收斂結(jié)果發(fā)送至所述gpu;當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,得到第三收斂結(jié)果;當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果??梢?,本發(fā)明實(shí)施例的標(biāo)簽傳播方法是基于cpu和gpu協(xié)同計(jì)算,在整個(gè)標(biāo)簽傳播實(shí)現(xiàn)過程中,cpu負(fù)責(zé)整個(gè)計(jì)算流程的控制,gpu負(fù)責(zé)完成矩陣的計(jì)算。解決了計(jì)算時(shí)間開銷大、cpu利用率低、內(nèi)存瓶頸、受偶然因素影響較大等缺點(diǎn)。
附圖說明
圖1為本發(fā)明實(shí)施例的cpu-gpu異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)方法的流程示意圖;
圖2為本發(fā)明實(shí)施例的cpu與gpu交互實(shí)現(xiàn)標(biāo)簽傳播的示意圖;
圖3為本發(fā)明實(shí)施例的cpu-gpu異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)裝置的結(jié)構(gòu)組成示意圖。
具體實(shí)施方式
為了能夠更加詳盡地了解本發(fā)明實(shí)施例的特點(diǎn)與技術(shù)內(nèi)容,下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例的實(shí)現(xiàn)進(jìn)行詳細(xì)闡述,所附附圖僅供參考說明之用,并非用來限定本發(fā)明實(shí)施例。
本發(fā)明實(shí)施例以標(biāo)簽傳播算法為minprop算法為例進(jìn)行解釋說明,下面對(duì)minprop算法進(jìn)行詳細(xì)描述。
為了處理復(fù)雜異構(gòu)網(wǎng)絡(luò)的標(biāo)簽傳播,根據(jù)其他同構(gòu)子網(wǎng)(屬于同構(gòu)網(wǎng)絡(luò))得到的當(dāng)前標(biāo)簽信息,minprop算法在每個(gè)獨(dú)立的同構(gòu)子網(wǎng)上執(zhí)行標(biāo)簽傳播,重復(fù)執(zhí)行標(biāo)簽傳播直到標(biāo)簽傳播收斂。minprop算法在第i個(gè)同構(gòu)子網(wǎng)上g(i)=(v(i),e(i))執(zhí)行標(biāo)簽傳播,i=1…k。每個(gè)同構(gòu)子網(wǎng)的標(biāo)簽傳播與在單個(gè)網(wǎng)絡(luò)上的標(biāo)簽傳播算法相同,為:
ft=(1-α)y+αsft-1(1)
此外,g(i)的頂點(diǎn)初始化是頂點(diǎn)初始化標(biāo)簽和其他同構(gòu)子網(wǎng)頂點(diǎn)的當(dāng)前標(biāo)簽的組合。通過g(i,j)=(v(i)uv(j),e(i,j))(1≤j≤k,i≠j)表示第i個(gè)同構(gòu)子網(wǎng)和其他同構(gòu)子網(wǎng)之間的異構(gòu)子網(wǎng),其他同構(gòu)子網(wǎng)的標(biāo)簽信息被收集作為相互交互。g(i)和其他同構(gòu)子網(wǎng)間的相互交互信息被收集為:
這里,所有同構(gòu)子網(wǎng)s(i)和異構(gòu)子網(wǎng)s(i,j)的標(biāo)準(zhǔn)化權(quán)圖是預(yù)先計(jì)算作為輸入的。minprop算法主體由三重循環(huán)構(gòu)成。外層的2至13行do-while循環(huán),用于檢查是否k個(gè)同構(gòu)子網(wǎng)的標(biāo)簽值已經(jīng)收斂。收斂被定義為,在一次迭代后變化值第二范式不大于閾值σ。第二外層4至12行for循環(huán)依次經(jīng)歷每個(gè)同構(gòu)子網(wǎng)。內(nèi)層7至10行是do-while循環(huán)。第6行,在g(i)的頂點(diǎn)中,初始標(biāo)簽y,初始為,初始標(biāo)簽值以及其他同構(gòu)子網(wǎng)的直接鄰居標(biāo)簽的和。第9行的傳播迭代步驟可以寫為
當(dāng)
計(jì)算同構(gòu)子網(wǎng)g(i)=(v(i),e(i))傳播的初始標(biāo)簽(第6行)的時(shí)間復(fù)雜度為o(|v(i)|∑j≠i|v(j)|)。運(yùn)行7至10行do-while內(nèi)循環(huán)間復(fù)雜度為o(ti|v(i)|2),其中ti是到達(dá)收斂的循環(huán)次數(shù)。這兩步將在每個(gè)同構(gòu)子網(wǎng)上重復(fù)執(zhí)行(4至12行),完 成每個(gè)同構(gòu)子網(wǎng)每一輪傳播的任務(wù)時(shí)間復(fù)雜度為o(|v(i)|∑j≠i|v(j)|+ti|v(i)|2)。一個(gè)更有效的但是不夠直觀的minprop算法實(shí)現(xiàn)可以預(yù)計(jì)算(i-αis(i))-1,這樣第7至10行只需要計(jì)算(1-αi)(i-αis(i))-1y,。設(shè)t為minprop算法到達(dá)收斂的總迭代次數(shù)。高效的實(shí)現(xiàn)minprop算法的時(shí)間復(fù)雜度為:
minprop算法的時(shí)間復(fù)雜度很大程度上與ti和t有關(guān),前者為每個(gè)同構(gòu)子網(wǎng)上傳播的收斂速度,后者為經(jīng)歷所有同構(gòu)子網(wǎng)需要的迭代次數(shù)。每個(gè)同構(gòu)子網(wǎng)上標(biāo)簽傳播的收斂速度與圖譜特性密切相關(guān)。實(shí)踐中,甚至大型網(wǎng)絡(luò)也可以在數(shù)十次迭代中收斂。同構(gòu)子網(wǎng)達(dá)到收斂的迭代次數(shù)可以用交替優(yōu)化理論估計(jì)。
下面再對(duì)本發(fā)明實(shí)施例的gpu進(jìn)行詳細(xì)描述。
gpu最初是用于在顯示器上渲染計(jì)算機(jī)圖形,其內(nèi)部具有大量的并行計(jì)算單元、更高的存儲(chǔ)帶寬,而且線程切換開銷小,采用了只讀式緩存,這些優(yōu)勢使gpu具有天然的計(jì)算優(yōu)勢,其計(jì)算能力以超越摩爾定律的速度增長,使其不再拘泥于傳統(tǒng)的圖形處理,開始輔助cpu完成圖形計(jì)算以外的運(yùn)算。人們開始在科學(xué)計(jì)算、工程、金融以及其他領(lǐng)域中越來越多地使用gpu。gpu由眾多晶體管組成,這些晶體管主要用于數(shù)據(jù)處理,并沒有用到數(shù)據(jù)緩存和流控制。因?yàn)檫@種結(jié)構(gòu)設(shè)計(jì)是專門為了高度并行化、計(jì)算密集型的操作。
gpu作為cpu的協(xié)處理器,每次執(zhí)行程序的時(shí)候可以開啟大量線程,并通過開啟大量線程來進(jìn)行并行計(jì)算,進(jìn)而可以隱藏訪問存儲(chǔ)器帶來的時(shí)間上的延遲。按照線程的訪問權(quán)限,gpu上的內(nèi)存可以分為3層。第一層是單個(gè)線程所擁有的內(nèi)存,包括寄存器和本地內(nèi)存。第二層是中間內(nèi)存,由出在相同線程塊的所有線程所共享,其中只包括共享內(nèi)存(sharedmemory)。第三層是任意網(wǎng)格中的所有線程都可以訪問的最外層內(nèi)存,包括全局內(nèi)存(globalmemory)、固定內(nèi)存(constantmemory和紋理內(nèi)存(texturememory)。
此外,統(tǒng)一計(jì)算設(shè)備架構(gòu)(cuda,computeunifieddevicearchitecture)是一種將gpu作為數(shù)據(jù)并行計(jì)算設(shè)備的軟硬件體系,包括硬件支持、程序語言擴(kuò)展、編譯器、調(diào)試器等整套開發(fā)工具鏈,它對(duì)矩陣數(shù)值計(jì)算、圖像視頻處理、機(jī)器學(xué)習(xí)、計(jì)算機(jī)可視化等問題都有良好的加速效果。cuda語言是基于c語言的擴(kuò)展,主要使用應(yīng)用程序編程接口(api,applicationprogramminginterface)調(diào)用底層功能進(jìn)行相關(guān)處理,因而可以使熟悉c、c++語言的編程人員能夠快速的運(yùn)用cuda開發(fā)計(jì)算程序。
綜上所述,minprop算法的主要計(jì)算密集點(diǎn)分為:矩陣向量乘,向量加和兩個(gè)向量最大差值等操作。具體包括如下步驟:
1)將同構(gòu)網(wǎng)絡(luò)矩陣p(m×m)、同構(gòu)網(wǎng)絡(luò)矩陣g(n×n)和異構(gòu)網(wǎng)絡(luò)矩陣a(m×n)讀入到頁鎖定內(nèi)存中,并計(jì)算出異構(gòu)網(wǎng)絡(luò)矩陣的轉(zhuǎn)置矩陣a(m×n)t。
2)對(duì)所有的同構(gòu)網(wǎng)絡(luò)矩陣和異構(gòu)網(wǎng)絡(luò)矩陣進(jìn)行標(biāo)準(zhǔn)化操作。
3)初始化標(biāo)簽傳播向量p和f,指定初始化標(biāo)簽傳播開始節(jié)點(diǎn)并指定最大傳播次數(shù)。
4)在同構(gòu)網(wǎng)絡(luò)矩陣p(m×m)上進(jìn)行標(biāo)簽傳播,直至相鄰兩次的標(biāo)簽傳播向量的差值達(dá)到預(yù)先設(shè)定的閾值,即標(biāo)簽傳播收斂。在同構(gòu)網(wǎng)絡(luò)矩陣g(n×n)上進(jìn)行標(biāo)簽傳播,直至相鄰兩次的標(biāo)簽傳播向量之間的差值達(dá)到預(yù)先設(shè)定的閾值,即標(biāo)簽傳播收斂。
5)在異構(gòu)網(wǎng)絡(luò)矩陣a(m×n)上進(jìn)行標(biāo)簽傳播,直至相鄰兩次的標(biāo)簽傳播向量的差值達(dá)到預(yù)先設(shè)定的閾值,即標(biāo)簽傳播收斂。
6)保存此時(shí)的標(biāo)簽傳播向量f,即為最終的標(biāo)簽傳播結(jié)果。
使用gnu的gcov、gprof和intel公司的vtune等分析工具對(duì)minprop算法的串行實(shí)現(xiàn)進(jìn)行深入剖析之后發(fā)現(xiàn),矩陣向量乘占用了整個(gè)程序執(zhí)行時(shí)間的99.9%。
本發(fā)明實(shí)施例把矩陣向量乘交給gpu去計(jì)算,cpu負(fù)責(zé)程序執(zhí)行流程的 控制。
圖1為本發(fā)明實(shí)施例的cpu-gpu異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)方法的流程示意圖,如圖1所示,所述cpu-gpu異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)方法包括以下步驟:
步驟101:利用gpu標(biāo)準(zhǔn)化所有網(wǎng)絡(luò)矩陣。
本發(fā)明實(shí)施例中,將所述第一同構(gòu)網(wǎng)絡(luò)矩陣、所述第二同構(gòu)網(wǎng)絡(luò)矩陣以及所述異構(gòu)網(wǎng)絡(luò)矩陣,讀入至頁鎖定內(nèi)存中;利用gpu對(duì)所述內(nèi)存中的第一同構(gòu)網(wǎng)絡(luò)矩陣、所述第二同構(gòu)網(wǎng)絡(luò)矩陣以及所述異構(gòu)網(wǎng)絡(luò)矩陣進(jìn)行標(biāo)準(zhǔn)化處理;將所述內(nèi)存中的各個(gè)網(wǎng)絡(luò)矩陣替換為標(biāo)準(zhǔn)化處理后的結(jié)果。
步驟102:利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第一收斂結(jié)果發(fā)送至所述gpu。
本發(fā)明實(shí)施例中,利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第i次標(biāo)簽傳播,將所述第i次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,i≥2;所述cpu計(jì)算所述第i次標(biāo)簽傳播向量以及第i-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第一預(yù)設(shè)閾值;當(dāng)所述差值小于等于第一預(yù)設(shè)閾值時(shí),所述cpu確定出所述第一收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第一預(yù)設(shè)閾值時(shí),所述cpu確定出所述第一收斂結(jié)果為所述標(biāo)簽傳播未收斂;將所述第一收斂結(jié)果發(fā)送至所述gpu。
步驟103:當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第二收斂結(jié)果發(fā)送至所述gpu。
承接上述步驟102,當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第二收斂結(jié)果發(fā)送至所述gpu。當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu在所述第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第i+1次標(biāo)簽傳播,并將所述第i+1次標(biāo)簽傳播向量發(fā)送至所述cpu。
本發(fā)明實(shí)施例中,利用gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第j次標(biāo)簽傳播,將所述第j次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,j≥2;所述cpu計(jì)算所述 第j次標(biāo)簽傳播向量以及第j-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第二預(yù)設(shè)閾值;當(dāng)所述差值小于等于第二預(yù)設(shè)閾值時(shí),所述cpu確定出所述第二收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第二預(yù)設(shè)閾值時(shí),所述cpu確定出所述第二收斂結(jié)果為所述標(biāo)簽傳播未收斂;將所述第二收斂結(jié)果發(fā)送至所述gpu。
步驟104:當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,得到第三收斂結(jié)果;當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果。
承接上述步驟103,當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;利用所述cpu判斷所述標(biāo)簽傳播是否收斂,得到第三收斂結(jié)果;當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果。當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu在所述第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第j+1次標(biāo)簽傳播,并將所述第j+1次標(biāo)簽傳播向量發(fā)送至所述cpu。
本發(fā)明實(shí)施例中,利用gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第k次標(biāo)簽傳播,將所述第k次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,k≥2;所述cpu計(jì)算所述第k次標(biāo)簽傳播向量以及第k-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第三預(yù)設(shè)閾值;當(dāng)所述差值小于等于第三預(yù)設(shè)閾值時(shí),所述cpu確定出所述第三收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第三預(yù)設(shè)閾值時(shí),所述cpu確定出所述第三收斂結(jié)果為所述標(biāo)簽傳播未收斂;當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果。當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu重新在所述第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播。
本發(fā)明實(shí)施例的標(biāo)簽傳播方法是基于cpu和gpu協(xié)同計(jì)算,在整個(gè)標(biāo)簽傳播實(shí)現(xiàn)過程中,cpu負(fù)責(zé)整個(gè)計(jì)算流程的控制,gpu負(fù)責(zé)完成矩陣的計(jì)算。解決了計(jì)算時(shí)間開銷大、cpu利用率低、內(nèi)存瓶頸、受偶然因素影響較大等缺 點(diǎn)。
參照?qǐng)D2,圖2為本發(fā)明實(shí)施例的cpu與gpu交互實(shí)現(xiàn)標(biāo)簽傳播的示意圖,如圖2所示:
首先,將矩陣p(m×m),矩陣g(n×n)和p-g聯(lián)合矩陣a(m×n)拷貝到頁鎖定內(nèi)存中。在對(duì)矩陣進(jìn)行標(biāo)準(zhǔn)化操作的時(shí)候,本發(fā)明實(shí)施例直接把操作交給gpu去計(jì)算,在標(biāo)準(zhǔn)化矩陣操作的時(shí)候,開啟與需要標(biāo)準(zhǔn)化的矩陣行數(shù)相同個(gè)數(shù)的資源塊(block),以及256個(gè)線程進(jìn)行計(jì)算。每一個(gè)block都有一個(gè)唯一標(biāo)識(shí)的id號(hào),通過這個(gè)id號(hào)可以控制不同的block和線程進(jìn)行計(jì)算。每一個(gè)block計(jì)算矩陣其中一行的所有元素標(biāo)準(zhǔn)化之后的結(jié)果,并替換掉原先矩陣?yán)锩鎸?duì)應(yīng)位置的元素。
在矩陣標(biāo)準(zhǔn)化和初始化查詢條件完成之后,首先在矩陣p(m×m)上進(jìn)行標(biāo)簽傳播,在傳播的同時(shí)進(jìn)行收斂判斷。這一過程主要的操作是矩陣向量乘、向量加法和計(jì)算兩個(gè)向量對(duì)應(yīng)元素最大差值。其中矩陣向量乘和向量加法分別通過cublas庫中提供的cublasdgemv()和cublasdaxpy()接口去實(shí)現(xiàn)。這兩個(gè)接口分別實(shí)現(xiàn)矩陣向量乘和矩陣加法。在求解兩個(gè)向量對(duì)應(yīng)元素的最大差值的時(shí)候,定義kernel函數(shù)max_of_two_vectors。開啟1個(gè)線程塊,256個(gè)線程。為每個(gè)線程分配一個(gè)共享內(nèi)存(sharedmemory),用來存儲(chǔ)兩個(gè)向量對(duì)應(yīng)元素的差值的絕對(duì)值,步長為256,這樣就得到了一個(gè)長度為256的雙精度浮點(diǎn)數(shù)組。每個(gè)線程計(jì)算完當(dāng)前對(duì)應(yīng)位置的兩個(gè)元素之后就會(huì)去計(jì)算從當(dāng)前位置算起往后256個(gè)步長的兩個(gè)向量的對(duì)應(yīng)元素的差值,如果比當(dāng)前共享內(nèi)存中的值大,則替換共享內(nèi)存中的差值。所有線程執(zhí)行完差值以后,線程數(shù)量折半,只使用128個(gè)線程去求解256個(gè)雙浮點(diǎn)類型數(shù)據(jù)長度的最大值??梢砸?號(hào)線程為例,負(fù)責(zé)共享內(nèi)存上的數(shù)組的第1個(gè)元素和第129個(gè)元素的大小的比較,如果129位置上的元素的值大于1位置上的元素,則替換1位置的元素。其他線程也是同樣的原理,kernel函數(shù)結(jié)束的時(shí)候把最大差值賦值給事先已經(jīng)在頁鎖定內(nèi)存上的變量。在一次標(biāo)簽傳播結(jié)束的時(shí)候,cpu去判斷這個(gè)最大差值是否達(dá)到事先設(shè) 定好的閾值,如果達(dá)到閾值,下一步到矩陣g(n×n)進(jìn)行標(biāo)簽傳播。如果沒有達(dá)到閾值,則在矩陣p(m×m)上繼續(xù)傳播,直至收斂。此時(shí)保存標(biāo)簽傳播向量。
緊接著在矩陣g(n×n)進(jìn)行標(biāo)簽傳播,其中的主要的操作是矩陣向量乘、向量加法和計(jì)算兩個(gè)向量對(duì)應(yīng)元素最大差值。各操作的實(shí)現(xiàn)原理跟在矩陣p(m×m)上的傳播原理是一樣的。
最后一步需要在p-g聯(lián)合矩陣a(m×n)上進(jìn)行傳播,其中的主要的操作是矩陣向量乘、向量加法和計(jì)算兩個(gè)向量對(duì)應(yīng)元素最大差值。各操作的實(shí)現(xiàn)原理跟在矩陣p(m×m)上的傳播原理是一樣的,在這里不再贅述。
當(dāng)所有網(wǎng)絡(luò)上的標(biāo)簽傳播向量都達(dá)到收斂時(shí),視為傳播結(jié)束,此時(shí)保存對(duì)應(yīng)的標(biāo)簽傳播向量,用作后續(xù)的分析。
本發(fā)明實(shí)施例的技術(shù)方案,充分分析了算法的計(jì)算密集型操作以及算法瓶頸,針對(duì)算法瓶頸,充分利用近年來并行計(jì)算能力日益強(qiáng)大的基于cuda編程模型的gpu,將算法中迭代次數(shù)較多、計(jì)算密集型操作重新設(shè)計(jì),一部分流程控制交給cpu去處理,計(jì)算密集型操作交給gpu去處理。其中,基于cpu-gpu異構(gòu)計(jì)算模型,相比傳統(tǒng)的基于cpu計(jì)算平臺(tái)的時(shí)間開銷急劇縮短。充分利用cpu核心數(shù)較少,但是邏輯判斷能力較強(qiáng)的特性,gpu邏輯判斷能力較弱,但是核心數(shù)較多,具有強(qiáng)大的并行計(jì)算能力的特性。方便無編程經(jīng)驗(yàn)的工程人員或者科研人員快速上手,只需搭建必要的較少的運(yùn)行環(huán)境,如cuda編譯環(huán)境,gcc編譯環(huán)境。易于擴(kuò)展?;诒旧暾?qǐng)?zhí)岢龅腸pu-gpu異構(gòu)編程模型,可以很方便的擴(kuò)展到多gpu模式。
圖3為本發(fā)明實(shí)施例的cpu-gpu異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)裝置的結(jié)構(gòu)組成示意圖,如圖3所示,所述裝置包括:cpu、gpu
標(biāo)準(zhǔn)化單元31,用于利用gpu標(biāo)準(zhǔn)化所有網(wǎng)絡(luò)矩陣;
第一標(biāo)簽傳播單元32,用于利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;
第一判斷單元33,用于利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第一收斂結(jié)果發(fā)送至所述gpu;
第二標(biāo)簽傳播單元34,用于當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;
第二判斷單元35,用于利用所述cpu判斷所述標(biāo)簽傳播是否收斂,將第二收斂結(jié)果發(fā)送至所述gpu;
第三標(biāo)簽傳播單元36,用于當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),所述gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播;
第三判斷單元37,用于利用所述cpu判斷所述標(biāo)簽傳播是否收斂,得到第三收斂結(jié)果;
結(jié)果單元38,用于當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果。
所述標(biāo)準(zhǔn)化單元31包括:
讀取子單元311,用于將所述第一同構(gòu)網(wǎng)絡(luò)矩陣、所述第二同構(gòu)網(wǎng)絡(luò)矩陣以及所述異構(gòu)網(wǎng)絡(luò)矩陣,讀入至頁鎖定內(nèi)存中;
處理子單元312,用于利用gpu對(duì)所述內(nèi)存中的第一同構(gòu)網(wǎng)絡(luò)矩陣、所述第二同構(gòu)網(wǎng)絡(luò)矩陣以及所述異構(gòu)網(wǎng)絡(luò)矩陣進(jìn)行標(biāo)準(zhǔn)化處理;
替換子單元313,用于將所述內(nèi)存中的各個(gè)網(wǎng)絡(luò)矩陣替換為標(biāo)準(zhǔn)化處理后的結(jié)果。
所述第一標(biāo)簽傳播單元32,還用于利用gpu在第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第i次標(biāo)簽傳播,將所述第i次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,i≥2;
所述第一判斷單元33,還用于利用所述cpu計(jì)算所述第i次標(biāo)簽傳播向量以及第i-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第一預(yù)設(shè)閾值;當(dāng)所述差值小于等于第一預(yù)設(shè)閾值時(shí),所述cpu確定出所述第一收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第一預(yù)設(shè)閾值時(shí),所述cpu確定出所述第一收斂結(jié)果為所述標(biāo)簽傳播未收斂;將所述第一收斂結(jié)果發(fā)送至所述gpu。
所述第一標(biāo)簽傳播單元32,還用于當(dāng)所述第一收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu在所述第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第i+1次標(biāo)簽傳播,并將所述第i+1次標(biāo)簽傳播向量發(fā)送至所述cpu。
所述第二標(biāo)簽傳播單元34,還用于利用gpu在第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第j次標(biāo)簽傳播,將所述第j次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,j≥2;
所述第二判斷單元35,還用于利用所述cpu計(jì)算所述第j次標(biāo)簽傳播向量以及第j-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第二預(yù)設(shè)閾值;當(dāng)所述差值小于等于第二預(yù)設(shè)閾值時(shí),所述cpu確定出所述第二收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第二預(yù)設(shè)閾值時(shí),所述cpu確定出所述第二收斂結(jié)果為所述標(biāo)簽傳播未收斂;將所述第二收斂結(jié)果發(fā)送至所述gpu。
所述第二標(biāo)簽傳播單元34,還用于當(dāng)所述第二收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu在所述第二同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第j+1次標(biāo)簽傳播,并將所述第j+1次標(biāo)簽傳播向量發(fā)送至所述cpu。
所述第三標(biāo)簽傳播單元36,還用于利用gpu在異構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行第k次標(biāo)簽傳播,將所述第k次標(biāo)簽傳播向量發(fā)送至所述cpu,其中,k≥2;
所述第三判斷單元37,還用于利用所述cpu計(jì)算所述第k次標(biāo)簽傳播向量以及第k-1次標(biāo)簽傳播向量的差值,并判斷所述差值是否小于等于第三預(yù)設(shè)閾值;當(dāng)所述差值小于等于第三預(yù)設(shè)閾值時(shí),所述cpu確定出所述第三收斂結(jié)果為所述標(biāo)簽傳播收斂;當(dāng)所述差值小于等于第三預(yù)設(shè)閾值時(shí),所述cpu確定出所述第三收斂結(jié)果為所述標(biāo)簽傳播未收斂;當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播收斂時(shí),將當(dāng)前的標(biāo)簽傳播向量作為標(biāo)簽傳播結(jié)果。
所述第一標(biāo)簽傳播單元32,還用于當(dāng)所述第三收斂結(jié)果表明所述標(biāo)簽傳播未收斂時(shí),所述gpu重新在所述第一同構(gòu)網(wǎng)絡(luò)矩陣上進(jìn)行標(biāo)簽傳播。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,圖3所示的cpu-gpu異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)裝置中的各單元及其子單元的實(shí)現(xiàn)功能可參照前述cpu-gpu異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)方法的相關(guān)描述而理解。圖3所示的cpu-gpu異構(gòu)的標(biāo)簽傳播實(shí)現(xiàn)裝置中 的各單元的功能可通過運(yùn)行于處理器上的程序而實(shí)現(xiàn),也可通過具體的邏輯電路而實(shí)現(xiàn)。
本發(fā)明實(shí)施例所記載的技術(shù)方案之間,在不沖突的情況下,可以任意組合。
在本發(fā)明所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的方法和智能設(shè)備,可以通過其它的方式實(shí)現(xiàn)。以上所描述的設(shè)備實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,如:多個(gè)單元或組件可以結(jié)合,或可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另外,所顯示或討論的各組成部分相互之間的耦合、或直接耦合、或通信連接可以是通過一些接口,設(shè)備或單元的間接耦合或通信連接,可以是電性的、機(jī)械的或其它形式的。
上述作為分離部件說明的單元可以是、或也可以不是物理上分開的,作為單元顯示的部件可以是、或也可以不是物理單元,即可以位于一個(gè)地方,也可以分布到多個(gè)網(wǎng)絡(luò)單元上;可以根據(jù)實(shí)際的需要選擇其中的部分或全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各實(shí)施例中的各功能單元可以全部集成在一個(gè)第二處理單元中,也可以是各單元分別單獨(dú)作為一個(gè)單元,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中;上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用硬件加軟件功能單元的形式實(shí)現(xiàn)。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。