稀疏矩陣運算 練習題 (Practice - Sparse Matrices and Basic Storage Formats (COO and CSR))


Question 1 - SpMV 與算術強度 [recall]

情境/題目:在迭代解線性系統時,最耗時的核心運算 SpMV 計算什麼?為何它在 CPU/GPU 上的 FLOPS 都遠低於峰值?

Question 2 - 為何不用反矩陣解稀疏系統 [recall]

情境/題目:解 A·X + Y = 0 時,為何對大型稀疏矩陣不採直接求反矩陣 (如 Gaussian elimination),而改用 iterative method?

Question 3 - COO 格式與 atomic 的必要性 [recall]

情境/題目:COO 用哪三個陣列儲存?SpMV/COO 的平行化單位是什麼,為何累加時必須用 atomicAdd

Question 4 - CSR 如何避開 atomic [recall]

情境/題目:CSR 用什麼陣列取代 COO 的 rowIdx?SpMV/CSR 為何不需要 atomic operations?

Question 5 - rowPtrs 的長度與末元素 [recall]

情境/題目:對 numRows 個 row 的 CSR 矩陣,rowPtrs 陣列長度是多少?最後一個元素 rowPtrs[numRows] 代表什麼、有何用途?

Question 6 - ELL 的兩步驟與索引公式 [recall]

情境/題目:從 CSR 出發,產生 ELL 格式需要哪兩個步驟?SpMV/ELL kernel 中存取第 t 次迭代、第 row 列元素的一維索引公式是什麼?

Question 7 - ELL 的 accessibility 與反推公式 [recall]

情境/題目:為何說 ELL 同時擁有 CSR 與 COO 兩者的 accessibility?已知一維索引 i,如何反推它的 row?

Question 8 - Hybrid ELL-COO 的動機 [recall]

情境/題目:純 ELL 在什麼情況下 padding 會爆量?Hybrid ELL-COO 用什麼手法緩解,同時解決哪兩個問題?

Question 9 - 把矩陣轉成 COO 與 CSR [application]

情境/題目:將下列稀疏矩陣分別表示成 COO 與 CSR (依 row-major、row 內依 colIdx 遞增)。

1 0 7 0
0 0 8 0
0 4 3 0
2 0 0 1

Question 10 - 各格式所需整數數量 [application]

情境/題目:一個整數稀疏矩陣有 m 列、n 行、z 個 nonzero。請寫出 COO、CSR、ELL、JDS 各需多少整數;若資訊不足,指出缺什麼。

Question 11 - COO→CSR 的平行轉換 [application]

情境/題目:要在 GPU 上把 COO 轉成 CSR,需要用到哪兩個基礎平行原語?各自負責產生什麼?

Question 12 - COO coalesced vs CSR strided [analysis]

情境/題目:同一個矩陣,為何 SpMV/COO 的矩陣存取是 coalesced,而 SpMV/CSR 卻是 strided (非 coalesced)?這對記憶體頻寬效率有何影響?

Question 13 - ELL、Hybrid、JDS 的取捨 [analysis]

情境/題目:ELL、Hybrid ELL-COO、JDS 三者在「control divergence」與「空間效率」上如何取捨?為何本章強調「沒有單一最優格式」?