【社區發現/圖聚類算法】ppSCAN:Parallelizing Pruning-based Graph Structural Clustering
一、論文地址:
https://dl.acm.org/doi/10.1145/3225058.3225063
二、摘要:
SCAN算法是一種常見的圖結構聚類算法,它不僅可以在頂點之間找到集羣,還可以將頂點分類爲核心頂點、橋頂點和離羣點。但是,由於頂點之間的結構相似性需要大量的計算,這些算法存在效率問題。
基於剪枝的SCAN算法(即pSCAN算法)通過減少計算量來提高效率。然而,這種結構相似性計算仍然是性能瓶頸,特別是在有數十億條邊的大圖上。
因此本文提出了在多核cpu和Intel Xeon Phi處理器(KNL)上並行化基於剪枝的SCAN算法。具體來說,這篇文章的作者設計了基於多相位(multi-phase)頂點計算的並行算法ppSCAN,以避免冗餘計算,實現可擴展性。
此外,作者還提出了一種基於數據軸的向量集交算法(a pivot-based vectorized set intersection algorithm)來進行結構相似性計算。
實驗結果表明,就線程數量而言,ppSCAN在CPU和KNL上都是可擴展的。在18億個邊的圖friendster上,ppSCAN在KNL(64個超線程物理核心)上在65秒內完成。這種性能比單線程版本快100x-130x,在同一平臺上比法pSCAN快250x。
三、問題闡述:
現有的算法(指的是2017年)都不支持對大圖進行在線結構聚類。
爲了解決性能問題,作者提出了一種基於多相位頂點計算的並行算法。pSCAN算法由於存在數據和順序依賴性,不能直接對其進行並行化。相反,作者將SCAN的計算分解爲兩個步驟,即角色計算( role computing)和核心和非核心聚類(core and non-core clustering)。爲了應用修剪技術,作者進一步將每個步驟分成多個階段,並以無鎖的方式並行化每個階段。
作者將頂點計算捆綁到任務中,並使用基於頂點度的任務調度程序動態調度任務。調度器根據頂點角色和頂點度數的總和估計工作負載。當累計總數超過閾值時,就會提交任務,這有助於以可忽略的成本實現負載平衡。
爲了提高集交的相似度計算速度,提出了一種基於數據軸的集交矢量化算法。該算法減少了條件比較,並使用向量化指令。此外,該集交算法保持了pSCAN引入的提前終止的優化方法。
四、基礎算法:
SCAN算法:
pSCAN算法:
五、分析和討論:
5.1 性能瓶頸:
相似度計算是性能瓶頸。在pSCAN中,即使相似計算量有所降低,在代表情況下(ϵ= 0.2,µ= 5),相似性計算仍然是費時的。
5.2 並行化的挑戰:
研究pSCAN任務並行性的挑戰是由依賴關係和併發問題引起的。並且現實網絡中節點度數的傾斜給任務調度帶來了挑戰。此外,相似度計算的提前終止條件也使得數據並行性難以得到充分利用。
六、並行化算法:
爲了解耦pSCAN的依賴關係,作者將核心檢查和聚類分解爲以下兩大步驟:
(1)角色計算(核心頂點的檢查和合並);
(2)核心集羣和非核心集羣最終生成集羣。
此外,受相似謂詞剪枝技術的啓發,作者增加了一個預處理階段,在此階段,一些相似值和角色的確定不需要設置交集。
6.1 優化方法:
sd、ed依賴解耦:
(1)作者刪除了基於ed[u]的最大優先級隊列,因爲它會導致嚴重的同步。
(2)用每個頂點的局部變量替換sd和ed數組,以消除數據競爭。
頂點順序約束:
作者在覈心頂點檢測聚類中增加了約束u < v,以保證每個無向邊(u,v)的相似度值最多計算一次,核心頂點聚類最多使用一次。
線程安全的聚類:
(1)核心集羣操作採用wait-free union-find實現。
(2)對集羣id的初始化採用比較和交換操作。
(3)在非核心頂點聚類中採用管線式設計,通過重疊計算局部非核id和聚類id對並複製回全局對數組。
多階計算:
作者進一步將大步驟分解爲應用剪枝技術和避免來自併發的工作負載冗餘的階段。
(1)爲了應用相似值重用和最小最大修剪技術,作者將核心檢查分爲兩個階段:第一個階段只在u < v時進行相似度計算,第二個階段整合所有頂點的角色。
(2)爲了充分利用union-find剪枝技術,作者將核心聚類分爲兩個階段:第一個階段是沒有設置交叉點的核心聚類,第二個階段是產生設置交叉點的核心聚類。
任務調度:
作者將一組頂點計算捆綁到一個任務中,並根據任務中頂點的度數和當前角色動態地將它們提交到線程池中。