一、程式最佳化
- CPU程式最佳化
1.1 體系結構:CPU流水線技術、高速緩指令集、CPU超標量設計
1.2 並行技術:MPI、OpenMP、SIMD、彙編
1.3 演算法:演算法最佳化 - GPU程式最佳化
1.1 GPU的體系結構(計算核心、高頻寬、多級儲存)
1.2 GPU並行框架:CUDA、OpenCL、OpenACC
1.3 並行設計的演算法 - 程式最佳化核心
3.1 演算法並行可行性
3.2 編寫與體系結構相匹配的程式(並行效率、多級儲存、指令集最佳化)
二、CPU和GPU區別
- CPU核心數量少,GPU核心數量多。
- CPU是減低延遲設計導向,GPU是增加資料吞吐量設計導向。
- CPU適合IO密集型任務,GPU適合資料計算任務。
- CPU切換執行緒有上下文代價,GPU執行緒幾乎每個都有物理核心,執行緒切換零開銷。
三、所有的機器學習和深度學習模型最基礎的計算任務都是稀疏/稠密矩陣、集合基元。
四、稀疏矩陣向量乘問題(SpMV)
- 常見的稀疏矩陣儲存方法有 COO、CSR、DIA(適合對角矩陣),通常CSR儲存效率高些。
- CSR-SIMD最佳化,可變長的具有連續地址的非零元段,以段的形式對矩陣進行儲存。
五、演算法庫
- BLAS/LAPACK 是基礎的線性代數庫
- PETSc C語言實現主要用來求解偏微方程組