並行算法的設計

並行算法的設計基礎

並行算法的定義和分類

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

並行算法分類

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

並行算法的表達

描述語言

  • 可使用類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))時間內執行完畢。html

  • 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模型,支持消息傳遞系統,塊內異步並行,塊間顯式同步。app

模型參數

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

計算過程

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

優缺點

  • 強調了計算和通信的分離,提供了一個編程環境,易於程序複雜性分析。
  • 可是須要顯式同步機制,限制至多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

相關文章
相關標籤/搜索