CUDA(二)並行程式設計概述
序列計算模式
常規軟體是序列的
設計運行於一箇中央處理器上(CPU)
通過離散的指令序列完成一個問題的解決
一條一條指令的執行
同時只有一條指令在執行
平行計算模式
平行計算是同時應用多個計算資源解決一個計算問題
涉及多個計算資源或處理器
問題被分解為多個離散的部分,可以同時處理(並行)
每個部分可以由一系列指令完成。
每個部分的指令在不同的處理器上執行
概念:
Flynn 矩陣
SISD single Instruction,Single Data |
SIMD Single Instruction, Multiple Data |
MISD Multiple Instruction, Single Data |
MIMD Multiple Instruction, Multiple Data |
常見名詞
Task(任務):可完整得到結果的程式,一個或者若干個程式碼段,相對獨立。
Parallel Task (並行任務):可用平行計算解決的一個任務。
Serial Execution(序列執行):一串
Parallel Execution(並行執行):
Shared Memory(共享儲存):
Distributed Memory(分散式儲存):
Communications(通訊):並行單元需要互動
Synchronization(同步):相同的執行順序,破壞了獨立性原則。導致效能下降
Granularity(粒度):任務劃分,每個任務大小
ObservedSpeedup(加速比):對比標誌程式並行程式的效能提升。同層次計算效能的比較。
Parallel Overhead(並行開銷):為了完成並行預算的開銷,通訊的開銷最大。
Scalability(可擴充套件性):核數增加後加速比是否為線性增加。
儲存器架構
Shared Memory
Distributed Memory
Hybrid Distributed-Shared Memory混合分散式共享儲存
並行程式設計模型
共享儲存模型Shared Memory Model:所有處理單元去共享儲存器取資料
執行緒模型Threads Model:開多個執行緒,執行緒切換,資料放置比較近
訊息傳遞模型 Message Passing Model:MPI獨立儲存單元,訊息模式傳遞
資料並行模型 Data Parallel Model:資料進行切分
具體例項
OpenMP
MPI
SPMD(Single Program Multiple Data):每一個程式碼段處理
MPMD(Multiple Program Multiple Data):多個任務同時處理
設計並行處理程式和系統
自動和手動並行:單一模式下自動模式很好了,負責模型需要手動並行。
理解問題和程式:理解要處理問題的特性,並行的部分在哪裡。
分塊分割:資料分塊和任務分割。
通訊:不同分塊分割槽之間資料互動,開銷比較大,可擴充套件性影響較大部分
同步:步調一致
資料依賴:
負載均衡:多個獨立人物之間負荷,是否均衡
粒度:任務細分大小
I/O:
成本:
效能分析和優化:
資料和任務的分割:
通訊和同步:
同步:broadcast scatter gather reduction
Amdahl's Law
程式可能的加速比取決於可以被並行化的部分
如果沒有並行化and the speedup=1(no speedup)
如果全部可以並行化and the speedup is infinite(in theory)
如果50%則可以冰箱話, maximum speedup=2。
如果有N個處理器並行處理
P=並行部分,N=處理器數碼,and S=序列部分
並行化的可擴充套件性極限