並行算法的設計


並行算法的設計基礎

並行算法的定義和分類

  • 並行算法:一些可同時執行的諸進程的集合,這些進程互相作用和協調動作從而達到給定問題的求解。

並行算法分類

  • 數值計算與非數值計算
  • 同步算法和異步算法
  • 分布算法
  • 確定算法和隨機算法

並行算法的表達

描述語言

  • 可以使用類Algol、類Pascal等。
  • 在描述語言中引入並行語句。

並行算法的復雜性度量

串行算法的復雜性度量

  • 最壞情況下的復雜度(Worst-CASE Complexity)
  • 期望復雜度(Expected Complexity)

並行算法的復雜性度量

  • 運行時間t(n):包含計算時間和通信時間,分別用計算時間步和選路時間步作單位。n為問題實例的輸入規模。
  • 處理器數p(n)
  • 並行算法成本c(n):c(n)=t(n)p(n)
  • 總運算量W(n):並行算法求解問題時所完成的總的操作步數。

Brent定理

  令W(n)是某並行算法A在運行時間T(n)內所執行的運算量,則A使用p台處理器可在t(n)=O(W(n)/p+T(n))時間內執行完畢。

  • W(n)和c(n)密切相關
  • P=O(W(n)/T(n))時,W(n)和c(n)兩者是漸進一致的
  • 對於任意的p,c(n)>W(n)

並行算法中的同步和通訊

同步

  • 同步是在時間上強使各執行進程在某一點必須互相等待
  • 可用軟件、硬件和固件的方法來實現

通訊

  • 共享存儲多處理器使用:global read(X,Y)和global write(X,Y)
  • 分布存儲多計算機使用:send(X,i)和receive(Y,j)

並行計算模型

PRAM模型

PRAM(Parallel Random Access Machine)模型是多指令流多數據流(MIMD)並行機中的一種具有共享存儲的模型。

基本概念

  • 由Fortune和Wyllie於1978年提出,又稱SIMD-SM模型。有一個集中的共享存儲器和一個指令控制器,通過SM(流多處理器)的R/W交換數據,隱式同步計算。

結構圖

分類

(1)PRAM-CRCW並發度並發寫

  • CPRAM-CRCW(Common PRAM-CRCW):僅允許寫入相同數據
  • PPRAM-CRCW(Priority PRAM-CRCW):僅允許優先級最高的處理器寫入
  • APRAM-CRCW(Arbitrary PRAM-CRCW):允許任意處理器自由寫入

(2)PRAM-CREW並發讀互斥寫

(3)PRAM-EREW互斥讀互斥寫

計算能力比較

  • PRAM-CRCW是最強的計算模型,PRAM-EREW可logp倍模擬PRAM-CREW和PRAM-CRCW

優缺點

  •  適合並行算法表示和復雜性分析,易於使用,隱藏了並行機的通訊、同步等細節
  • 不適合MIMD並行機,忽略了SM的競爭、通訊延遲等因素。

異步APRAM模型

基本概念

  • 又稱分相(Phase)PRAM或MIMD-SM。每個處理器有其局部存儲器、局部時鍾、局部程序;無全局時鍾,各處理器異步執行;處理器通過SM進行通訊;處理器間依賴關系,需在並行程序中顯式地加入同步路障。

指令類型

  1. 全局讀
  2. 全局寫
  3. 局部操作
  4. 同步

計算過程

由同步障分開全局相組成

計算時間

  • 設局部操作位單位時間;全局讀/寫平均時間為d,d隨着處理器數目的增加而增加;同步路障時間為B=B(p)非降函數。
  • 滿足關系2≤d≤B≤p;B=B(n)=O(dlogp)或O(dlogp/logd)令tph為全局相內各處理器執行時間最長者,則APRAM上的計算時間為:T=∑tph+B×同步障次數

優缺點

  • 易編程和分析算法的復雜度。
  • 但與現實相差較遠,其上並行算法非常有限,也不適合MIMD-DM模型。

BSP模型

基本概念

  由Valiant(1990)提出的,“塊”同步模型,是一種異步MIMD-DM模型,支持消息傳遞系統,塊內異步並行,塊間顯式同步。

模型參數

  • p:處理器數(帶有存儲器)
  • l:同步障時間(Barrier synchronization time)
  • g:帶寬因子(time steps/packet)=1/bandwidth

計算過程

  由若干超級步組成,每個超級步計算模式為下圖:

優缺點

  • 強調了計算和通訊的分離,提供了一個編程環境,易於程序復雜性分析。
  • 但是需要顯式同步機制,限制至多h條消息的傳遞等。

logP模型

基本概念

  由Culler(1993)年提出的,是一種分布存儲的、點到點通訊的多處理機模型,其中通訊由一組參數描述,實行隱式同步。

模型參數

  • l:network latency
  • o:communication overhead
  • g:gap=1/bandwidth
  • P:#processors

注:l和g反映了通訊網絡的容量

優缺點

  • 捕捉了MPC的通訊瓶頸,隱藏了並行機的網絡拓撲、路由、協議,可以應用到共享存儲、消息傳遞、數據並行的編程模型中。
  • 但難以進行算法描述、設計和分析。

BSP vs. logP

  • BSP→logP:BSP塊同步→BSP子集同步→BSP進程對同步=logP
  • BSP可以常數因子模擬logP,logP可以對數因子模擬BSP
  • BSP=logP+Barriers-Overhead
  • BSP提供了更方便的程設環境,logP更好地利用了機器資源
  • BSP似乎更簡單、方便和符合結構化編程

並行算法的一般設計方法

串行算法的直接並行化

算法設計方法描述

方法描述

  • 發掘和利用現有串行算法中的並行性,直接將串行算法改造為並行算法。

評注

  • 由串行算法直接並行化的方法是並行算法設計的最常用方法之一
  • 不是所有的串行算法都可以直接並行化的
  • 一個好的串行算法並不能並行化為一個好的並行算法
  • 許多數值串行算法可以並行化為有效的數值並行算法

例:快排序算法的並行化

算法:PRAM-CRCW上的快排序二叉樹構造算法

輸入:序列(A1,...,An)和n個處理器

輸出:供排序用的一顆二叉排序數

從問題描述開始設計並行算法

方法描述

  • 從問題本身描述出發,不考慮相應的串行算法,設計一個全新的並行算法。

評注

  • 挖掘問題的固有特性與並行的關系
  • 設計全新的並行算法是一個挑戰性和創造性的工作
  • 利用串的周期性的PRAM-CRCW算法是一個很好的范例

借用已有的算法求解新問題

方法描述

  • 找出求解問題和某個已解決問題之間的聯系
  • 改造或利用已知算法應用到求解問題上

評注

  • 這是一項創造性的工作
  • 使用矩陣乘法算法求解所有點對間最短路徑是一個很好的范例

利用矩陣乘法求所有點對間最短路徑

計算原理

並行算法的基本設計技術

划分設計技術

  • 均勻划分技術
  • 方根划分技術
  • 對數划分技術
  • 功能划分技術

分治設計技術

並行分治設計步驟

  • 將輸入划分成若干個規模相等的子問題
  • 同時(並行地)遞歸求解這些子問題
  • 並行地歸並子問題的解,直至得到原問題的解

雙調歸並網絡

平衡數設計技術

設計思想

  • 以樹的葉節點為輸入,中間節點為處理節點,由葉向根或由根向葉逐層進行並行處理。

倍增設計技術

設計思想

  • 又稱指針跳躍(pointer jumping)技術,特別適合於處理鏈表或有向樹之類的數據結構
  • 當遞歸調用時,所要處理數據之間的距離逐步加倍,經過k步后即可完成距離為2k的所有數據的計算

流水線設計技術

設計思想

  • 將算法流程划分成p個前后銜接的任務片段,每個任務片段的輸出作為下一個任務片段的輸入
  • 所有任務片段按同樣的速率產生出結果

評注

  • 流水線技術是一種廣泛應用在並行處理中的技術
  • 脈動算法(Systolic algorithm)是其中一種流水線技術

並行算法的一般設計過程

PCAM設計方法學

設計並行算法的四個階段:

  • 划分(Partitioning):分解成小的任務,開拓並發性
  • 通訊(Communication):確定諸任務間的數據交換,監測划分的合理性
  • 組合(Agglomeration):依據任務的局部性,組合成更大的任務
  • 映射(Mapping):將每個任務分配到處理器上,提高算法的性能

PCAM設計過程

划分

划分的方法描述

  • 充分開拓算法的並發性和可擴展性
  • 先進行數據分解(稱域分解),再進行計算功能的分解(稱功能分解)
  • 使數據集和計算集互不相交
  • 划分階段忽略處理器數目和目標機器的體系結構
  • 能分為兩類划分:①域分解(domain decomposition);②功能分解(functional decomposition)

域分解

  • 划分的對象是數據,可以是算法的輸入數據、中間處理數據和輸出數據
  • 將數據分解成大致相等的小數據片
  • 划分時考慮數據上的相應操作
  • 如果一個任務需要別的任務中的數據,則會產生任務間的通訊

功能分解

  • 划分的對象是計算,將計算划分為不同的任務,其出發點不同於域分解
  • 划分后,研究不同任務所需的數據。如果這些數據不相交的,則划分是成功的;如果數據有相當的重疊,意味着要重新進行域分解和功能分解
  • 功能分解是一種更深層次的分解

划分依據

  • 划分是否具有靈活性?
  • 划分是否避免了冗余計算和存儲?
  • 划分任務尺寸是否大致相當?
  • 任務數與問題尺寸是否成比例?
  • 功能分解是一種更深層次的分解,是否合理?

通訊

通訊方法描述

  • 通訊是PCAM設計過程的重要階段
  • 划分產生的諸任務,一般不能完全獨立執行,需要在任務間進行數據交流;從而產生了通訊
  • 功能分解確定了諸任務之間的數據流
  • 諸任務是並發執行的,通訊則限制了這種並發性

四種通訊模式

  • 局部/全局通訊
  • 結構化/非結構化通訊
  • 靜態/動態通訊
  • 同步/異步通訊

通訊判據

  • 所有任務是否執行大致相當的通訊?
  • 是否盡可能的局部通訊?
  • 通訊操作是否能並行執行?
  • 同步任務的計算能否並行執行?

組合

方法描述

  • 組合是由抽象到具體的過程,是將組合的任務能在一類並行機上有效的執行
  • 合並小尺寸任務,減少任務數。如果任務數恰好等於處理器數,則也完成了映射過程
  • 通過增加任務的粒度和重復計算,可以減少通訊成本
  • 保持映射和擴展的靈活性,降低軟件工程成本

表面-容積效應

  • 通訊量與任務子集的表面成正比,計算量與任務子集的體積成正比
  • 增加重復計算有可能減少通訊量

重復計算

  • 重復計算減少通訊量,但增加了計算量,應保持恰當的平衡
  • 重復計算的目標應減少算法的總運算時間

組合判據

  • 增加粒度是否減少了通訊成本?
  • 重復計算是否已權衡了其得益?
  • 是否保持了靈活性和可擴展性?
  • 組合的任務數是否與問題尺寸成比例?
  • 是否保持了類似的計算和通訊?
  • 有沒有減少並行執行的機會?

映射

方法描述

  • 每個任務要映射到具體的處理器,定位到運行機器上
  • 任務數大於處理器數時,存在負載平衡和任務調度問題
  • 映射的目標:減少算法的執行時間(並行的任務→不同的處理器;任務之間存在高通訊的→同一處理器)
  • 映射實際是一種權衡,屬於NP完全問題

負載平衡算法

  • 靜態的:事先確定
  • 概率的:隨機確定
  • 動態的:執行期間動態負載
  • 基於域分解的:遞歸對剖;局部算法;概率方法;循環映射

任務調度算法

  • 任務放在集中的或分散的任務池中,使用任務調度算法將池中的任務分配給特定的處理器

映射判據

  • 采用集中式負載平衡方案,是否存在通訊瓶頸?
  • 采用動態負載平衡方案,調度策略的成本如何?

 

參考文獻

https://wenku.baidu.com/view/b183017a1ed9ad51f01df2d7.html?rec_flag=default&sxts=1542421861193

 https://wenku.baidu.com/view/17709aca3186bceb19e8bbd4.html?rec_flag=default&sxts=1542421875283

https://wenku.baidu.com/view/b994bbf6998fcc22bcd10dd7.html?rec_flag=default&sxts=1542421883056


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM