平行計算模型

2021-09-24 15:44:02 字數 2198 閱讀 2710

平行計算指的在同一時刻存在多於乙個計算任務被執行。由於cpu主頻提高的上限,使用多核心處理器進行平行計算早已成為主流。gpu也是乙個多核心的處理器,但它的平行計算模型與多核的cpu有很大區別。我們有必要了解gpu的並計算模型。

對平行計算模式進行分類是了解cpu和gpu平行計算區別的有效方式。一種分類的方法是按照實現並行的層次分,即底層的並行或是高層的並行。主要可以分為以下4種:

位並行(bit-level parallelism)是一種相對較老的並行方式,它通過增加處理器的位元組長度來提高並行率。從4位的處理器到20世紀80年代末的32位的處理器,位並行技術在近二十 間沒有再向更高的並行程度發展。目前廣泛使用的32位和64位的處理器。

指令並行(instruction-level parallelism)是20世紀9 0年代中期之前關注的重點。現代cpu都 有乙個多級指令流水線。舉例來說,乙個五級指令流水線可以是:讀取、解碼、執行、訪問記憶體、寫入。如果流水線中的每級都可以同時執行,流水線中的各級就可以同時進行。這樣並不順次地執行不相關的指令起到了指令並行的效果。

資料並行(data parallelism)指多個不同的資料同時被相同的指令、指令集或者演算法處理。這與gpu的並行概念是相同的。當每個執行緒處理乙個資料所需的時間相等時,資料並行處理的速度是用單執行緒迴圈語句的速度的n_threads倍;當執行緒處理不同資料所需的時間不相等時,資料並行處理所需的時間由花費最長計算時間的執行緒決定。 值得一提的是,這裡的資料 並行模型與下面的另一種分類方式中的simd模型是完全相同的。

任務並行(task parallelism)是在多個不同的資料上執行不同的指令、指令集或者演算法。這與多核cpu的計算模型是相同的。乙個典型的任務並行例如如下:

begin

if cpu="a" then

do task "a" //任務並行(即mimd)

else if cpu="b" then

do task "b" //任務並行(即mimd)

end if

end

在所有的cpu中,當cpu「a」從第一句if語句裡讀到了true,他就會開始執行任務「a」;當cpu「b」從第二句讀到了true,他就會開始執行任務「b」。由於判斷if-else語句的速度非常快,跳轉的時間可以忽略,因此可以認為任務「a」和任務「b」是同時執行的。需要助興的是,從外部執行這段**時,為了給不同的資料分配不同的處理器,採用的是資料並行模型(simd),即每個資料都經由這段相同的**處理,只有在被加註的兩行體現了任務並行的效果。任務並行的模型和我們下面要介紹的mimd模型是完全相同的。

另一種流行的分類法是從資料流和指令的角度把計算模型分為4類,即費林分類法。

單指令單資料流(sisd)是非平行計算的模型。典型的例子就是單核的cpu,所有資料都被乙個處理器順次處理,某一時刻只能處理一種指令。

單指令多資料流(simd)是gpu的計算模型,與上述資料並行模型相同。

多指令單資料流(misd)指在同乙個資料流上執行不同的指令。流水線模型可以被認為一種misd。

多指令多資料流(mimd)是多核cpu的計算模型,與上述的任務並行模型相同。

在cuda中,程式在整體上完全不必遵循simd的要求,只需要那些必須在gpu上執行的部分區域性地符合simd模型。值得一提的是,cuda提出了simt(single instruction multiple treads)模型,按照費林分類法,simt也屬於simd的範疇,因為它也是在多個資料上執行相同的指令,但在程式實現的過程中,simt允許由使用者來分配執行緒,而平行計算也是以執行緒為單位的。cuda為每個執行緒指定了識別符號(編號)。在已知數量的資料上,simt模型可以指定自定義數目的執行緒,並根據執行緒識別符號設計執行緒與資料關聯的對映法則。

總結一下simd(包括simt)的兩大特點。也就是說,要使用gpu做平行計算,要保證並行演算法滿足一下兩點:

每個執行緒的任務互不相關。

每個執行緒執行相同的指令。

與之對應,具有一下特點的演算法能夠在gpu上達到最高的執行效率:

每個資料都需要經過相同的流程來處理。

資料之間沒有相干性。

資料量龐大。

平行計算模型

平行計算模型通常指從並行演算法 的設計和分析出發,將各種並行計算機 至少某一類並行計算機 的基本特徵抽象出來,形成乙個抽象的計算模型。從更廣的意義上說,平行計算模型為平行計算提供了硬體和軟體介面 在該介面的約定下,並行系統硬體設計者和軟體設計 者可以開發對並行性 的支援機制,從而提高系統的效能。有幾...

python平行計算 python平行計算

0.基礎並行 發 multiprocessing threading 1.concurrent 2.併發 asynico 3.ipython下的平行計算 使用ipyparallel庫的ipython提供了前所未有的能力,將科學python的探索能力與幾乎即時訪問多個計算核心相結合。系統可以直觀地與本...

xgboost平行計算

boosting不是一種序列的結構嗎?xgboost怎麼可以實現並行的?xgboost的並行不是tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的 第t次迭代的代價函式裡包含了前面t 1次迭代的 值 xgboost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的乙個步驟就是對...