1. 程式人生 > >CUDA(二)並行程式設計概述

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 

程式可能的加速比取決於可以被並行化的部分speedup=\frac{1}{1-P}

   如果沒有並行化P=0and the speedup=1(no speedup)

   如果全部可以並行化P=1and the speedup is infinite(in theory)

   如果50%則可以冰箱話, maximum speedup=2。

如果有N個處理器並行處理speedup=\frac{1}{\frac{P}{N}+S}

   P=並行部分,N=處理器數碼,and S=序列部分

  並行化的可擴充套件性極限