圖走訪與廣度優先搜尋 練習題 (Practice - Graph Representations and Breadth-First Search)


Question 1 - 圖表示法與格式對應 [recall]

情境/題目:一個有 N 個 vertex 的有向圖若 fully connected,共有幾條邊?CSR、CSC、COO 三種稀疏格式各自最易取得什麼資訊,分別對應哪一種 BFS 平行化策略?

Question 2 - BFS level labeling 與跨層同步 [recall]

情境/題目:BFS 對每個 vertex 的 label(level/depth)代表什麼意義?為何平行 BFS 必須對每一層各 launch 一個 kernel?整體計算複雜度是多少?

Question 3 - Push kernel 與 idempotence [recall]

情境/題目:vertex-centric push(top-down)kernel 中,每個 thread 對應什麼、檢查條件與動作是什麼?為何這個 kernel 不需要 atomic operation?

Question 4 - Pull kernel 與提早 break [recall]

情境/題目:vertex-centric pull(bottom-up)kernel 使用哪種格式?thread 的檢查條件是什麼?為何找到一個符合的鄰居就能 break 早退,這對效能有何幫助?

Question 5 - Edge-centric 的優缺點 [recall]

情境/題目:edge-centric BFS 使用哪種格式?相對於 vertex-centric,它有哪兩個主要優點與兩個主要缺點?

Question 6 - Frontier 與 atomicCAS 的必要性 [recall]

情境/題目:使用 frontier 的 push kernel,每層 launch 多少個 thread?為何它必須改用 atomicCAS,而無 frontier 版可以直接寫入?BFS 的結束條件變成什麼?

Question 7 - Privatization 降低 atomic 競爭 [recall]

情境/題目:frontier 版的 push 中哪一個 atomic operation 競爭最嚴重?privatization 如何降低它的競爭?此手法又帶來什麼額外的記憶體存取好處?

Question 8 - Launch overhead 與 load balance 最佳化 [recall]

情境/題目:對於 frontier 很小的前幾層/末幾層,會遇到什麼開銷問題?解法為何?另外,celebrity vertex 造成的 load imbalance 有哪兩種解法?

Question 9 - 由邊集建構 CSR [application]

情境/題目:給定有向圖(5 個 vertex),邊集為 {0→1, 0→3, 1→2, 3→2, 3→4, 4→1}。寫出它的 CSR 表示(srcPtrsdst),每個 vertex 的鄰居清單須依 dst 遞增排序。

Question 10 - 計算各實作 launch / 工作的 thread 數 [application]

情境/題目:沿用 Q9 的圖,root = 0(level 0),BFS 結果為 L1={1,3}、L2={2,4}。在「從 level 1 標到 level 2」這一輪(currLevel = 2),push、pull、edge-centric 各 launch 幾個 thread?push 有幾個 thread 真正迭代鄰居?pull 有幾個 thread 迭代鄰居、幾個 thread 標記自己?edge-centric 有幾個 thread 可能 label 一個 vertex?

Question 11 - atomicCAS 的參數與成功判定 [application]

情境/題目:atomicCAS(addr, compare, val) 的三個參數與回傳值各是什麼?在 frontier kernel 中如何用它「一次原子完成檢查未訪問 + 標記」,並判斷自己是否為第一個訪問該鄰居的 thread?

Question 12 - Push vs Pull 取捨與 direction-optimized [analysis]

情境/題目:push 與 pull 都是 1 thread / vertex,但有兩個關鍵差異影響效能。請說明這兩個差異,並解釋為何 early level 偏好 push、late level 偏好 pull,以及 direction-optimized 的儲存需求與「push=scatter / pull=gather」的對應。

Question 13 - Edge-centric vs Vertex-centric 取捨 [analysis]

情境/題目:從「暴露的平行度」「load imbalance / divergence」「儲存成本」「能否跳過無關工作」四個維度,比較 edge-centric 與 vertex-centric 實作,並說明各自適合哪種圖。