Top Banner
針針針針針針針針針針針針 針針針針 1 Dept. of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C 2012.12.05
31

針對開發細粒度平行性上的 架構支援

Jan 24, 2016

Download

Documents

Media

針對開發細粒度平行性上的 架構支援. 黃 翔 Dept. of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C 2012.12.05. 大綱. 摘要 引言 SLAM 實 作 任務堆疊 可竊取任務的緩衝器 通訊控制 網路 SLAM API 評估 總結及未來工作. 摘要. 近來的系統像是 Cilk ,它使用了傳統的語言像是 C ,但是當在寫程式時,支援一個大型函數型式 ( 無副作用 ) 的使用。 - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 針對開發細粒度平行性上的 架構支援

1

針對開發細粒度平行性上的架構支援

黃 翔 Dept. of Electrical Engineering

National Cheng Kung University

Tainan, Taiwan, R.O.C

2012.12.05

Page 2: 針對開發細粒度平行性上的 架構支援

2

大綱

摘要引言SLAM實作

任務堆疊 可竊取任務的緩衝器 通訊控制 網路

SLAM API評估總結及未來工作

Page 3: 針對開發細粒度平行性上的 架構支援

3

摘要

近來的系統像是 Cilk,它使用了傳統的語言像是 C,但是當在寫程式時,支援一個大型函數型式 (無副作用 )的使用。 在 Cilk運行時的一個重要部分是去讓一個系統平衡核的使用率。

在本文中,我們提出了 SLAM(Spreading Load with Active Messages),它是基於在函式語言的評估技術上的一個動態負載平衡的系統。 我們展示了與適當的硬體支援所一起提供的 SLAM,它明顯的勝過了 Cilk系統。

Page 4: 針對開發細粒度平行性上的 架構支援

4

1. 引言 (1/2)

可以使用多個核心去執行多個應用程式,但是為了達到更高的效能,在執行一個單一的應用程式時,必須去開發平行性。 然而,平行程式設計的困難是已知的。 多年來,這主要使用於科學上的應用程式,因為效能對於這些程式來說是最主要的。

許多平行性的複雜度來自於共用狀態的管理,以及來自於函式使得平行性能與相對應的減輕 (ease)所一起開發的缺乏。 函式允許平行程式的表達,這些平行的程式常常較許多科學上的程式更不規律而且較為動態,但這對於更多的一般性的應用程式來說是一個優點。

然而,這會導致較低粒度的平行性以及對於在謹慎的運行中資源管理上的需求。動態的負載平衡是 Cilk系統一個重要的部分,並且已經顯示出產生了在平行架構上有效率的使用。

Page 5: 針對開發細粒度平行性上的 架構支援

5

1. 引言 (2/2)

在本文中,我們所作的主要貢獻是 : 動態的負載平衡系統的實現,目的是使其工作在共用的記憶體

CMPs上。這系統提供一個簡單且基於在堆疊上的機制去評估平行的應用程式。這使用了在任務堆疊 (task stack)上的計算、同步以及通訊活動,這大大地簡化了它的實現。

對於在增加 SLAM負載平衡系統的效率上,適當的硬體支援使得這能夠開發細粒度的平行性在它需要的時候,而且在與粗粒度的應用程式一起工作時仍然是有利的,而在與 Cilk做比較時這顯示出較佳的延展性。

我們評估了 SLAM,它分別使用了模擬著多達 64顆核心且有著私有的和共有的 L2快取的 CMPs。

在平均上,我們的結果顯示出 SLAM較 Cilk好。

Page 6: 針對開發細粒度平行性上的 架構支援

6

2. SLAM(1/4)

SLAM是一個高動態的平行計算模型,它設計去在多個核心之間動態的分配工作量。 它利用了工作竊取 [5]以及懶散的任務創造 [21]去平衡分派至每個處理節點上的工作量。

在 SLAM中,每一個獨立的節點當作是一個任務。 一旦一個程式已經適當地使用多個獨立的節點所構成,程式設計者將詳細說明這裏面有哪些是可以在平行中執行。然後在 SLAM運行中的系統將自動地處理負載平衡以及同步的議題。

SLAM利用了分散的隊列去儲存多個要執行的任務。 一個隊列以一個任務堆疊 (TS)的形式連接至系統中的每一個核心。 一個 TS entry 的結構由 3個指標所組成,這些指標指向了以下的

元件 : 要執行的函數。要使用的參數。結果所需要的位址。

Page 7: 針對開發細粒度平行性上的 架構支援

7

2. SLAM(2/4)

為了去存取在每一時間必須要執行的任務,因此使用一個不同的指標,任務堆疊指標 (Task Stack Pointer)。 一旦完成了一個任務就更新 TSP去指向下一個要執行的任務,然後一直下去,直到完成計算。

這有兩種類型的任務要定義 : 可竊取的和不可竊取的。 可竊取的任務可以由自己的處理器執行或是由遠端的處理器給偷去。

不可竊取的任務必須由自己的處理器執行。這類型的任務包含了使用去完成同步以及負載平衡的任務。

所有的任務由自己的處理器 push到 TS上,並且 pop出來執行並進行在一個 LIFO的次序中。

對應至每一個任務的多個參數會儲存在主記憶體所維持的一個資料結構中,這稱作參數陣列。

一個簡單的例子說明 SLAM 如何工作,圖 1顯示 Nfib(5)在一個雙核的機器上的計算問題。

Page 8: 針對開發細粒度平行性上的 架構支援

8

2. SLAM(3/4) Am[n]是一個到參數陣列的第 n個元 件指標針對在處理器 m上。 Am[n].i是 Am[n] 元件的第 i個值。 & Am[n].i是 Am[n] 元件的第 i個值的記憶體位址。

&TSm.i是任務堆疊 m的第 i個 entry的記憶體位址。

三個指標分別是 : 左邊的指向要執行的函數。 中間的指向在參數陣列中的一個

entry。 右邊的指向在一些其他的 TS entry中的一個各別的區域。

後半部分是每個要回傳的值的位置。

Page 9: 針對開發細粒度平行性上的 架構支援

9

2. SLAM(4/4)

圖 1. Nfib(5)平行地計算在使用了 SLAM的雙核機器中。

Page 10: 針對開發細粒度平行性上的 架構支援

10

Void Nfib(int n){

if(n<2){

RET_VAL 1;

}else{

CONTINUATION(Add); overwrite Nfib with Add

PUSH(Nfib, n-1, &x, 1); push Nfib in the TS………………..(6)

PUSH(Nfib, n-2, &y, 1); ………………..(7)

}

NEXT_TASK; jump to the next task

}

Void Add(int x, int y){

RET_VAL x+y+1;

}

圖 4. 使用 SLAM實現的 Nfib函數。

Page 11: 針對開發細粒度平行性上的 架構支援

11

3. 實作 -任務堆疊 (1/3)

任務堆疊 (TS)儲存著要去執行的任務。每一條 entry 包含三個指標到 : 1) 要執行的函數 2) 由函數所使用的參數 3) 結果所期望的位址。

還有一個暫存器的行為像是任務堆疊指標 (TSP),它在每一時間指向要去執行的任務,並且根據處理器所完成的運算來作更新。

對於在從任務堆疊的資訊中分裂參數,主要的理由是為了允許簡單的 TS 操作最佳化以及去允許一個簡單的可快取堆疊的實現如下所述。

Page 12: 針對開發細粒度平行性上的 架構支援

12

3. 實作 -任務堆疊 (2/3)

1)任務堆疊快取 : 由於任務堆疊的操作在我們的模型中是重要的,我們提出在硬體上的支援來實現。

為了去提供一個不限大小的 TS,我們實現了一個快取的階層。 由於大多的存取是發生在 TS的頂端,存取的樣本是相當簡單且是可預測的。

附屬在每一個記憶體的第一層 TS快取使用了一個環狀的緩衝器來實現。 緩衝器由兩個指示出緩衝器頂部及底部的指標所存取。 這些指標維持在處理器內的暫存器中以及在每一時間所更新的每一個 entry 會 push 到 TS 或是從 TS pop 出來。

當 TS的空間用完時,多個最舊的 entry的一個區塊會複製到下一層,這一層會產生空間去儲存更多的任務。

在相對的意思上,當需要先前所驅逐的 entry時,會從在 TS快取階層中的位置帶上來。

Page 13: 針對開發細粒度平行性上的 架構支援

13

3. 實作 -任務堆疊 (3/3)

2)任務堆疊的快取錯失 : 執行一個應用程式的一個可能的情況是當一個遠端的處理器發出一個先前偷去的任務已完成的通知,而這任務的 TS entry 沒有出現在 L1 TS快取中。

為了改變函數的指標從 Steal到 Null,這 entry必須去存取。 附近 (local)存取到 TS的快取總是發生在堆疊的頂端,這只會導致偶爾的錯失。然而,一個遠端任務已完成的動作可能發生在堆疊中的任何地方。最遭的情況是這些存取可能造成在附近和遠離的 entry中間的 trashing。

在我們所提出的實現中,當所描述的情形發生時,控制會轉換至記憶體管理單元。

這會在一個地方覆寫一個 Null Task到適當的函數指標。在這方式中,這種 TS快取的錯失只會被當作一般的快取錯失處理。

Page 14: 針對開發細粒度平行性上的 架構支援

14

3. 實作 -可竊取任務的緩衝器 (1/2)

可竊取的任務會儲存在可竊取任務的緩衝器中 (Buffer of Stealable Tasks)。 這是一個環狀的緩衝器,當可竊取的任務由處理器產生的時候,會儲存在這緩衝器中。

這些任務會同時放置在 BST和 L1 TS 快取中。當 BST達到全滿時,之後可竊取的任務只會放到 L1 TS快取中,直到在 BST中的一些空間被釋出。

這使用兩個指標去決定在 BST中可用的空間,一個指向它的底端,一個指向頂端。 這些指標維持在處理器中的暫存器,並且當一個新的任務被

PUSH到 BST中或從 BST中 POP出來時會在每一時間作適當的更新。

可竊取的任務從 BST的頂端 POP出來,這些是由自己的處理器執行。

當一個任務被偷取時,這是從 BST的底部所取得。在這方式中,BST行為像是一個雙端隊列。

Page 15: 針對開發細粒度平行性上的 架構支援

15

3. 實作 -可竊取任務的緩衝器 (2/2)

除了任務的資訊外,在 BST中的每一個 entry 也儲存了對應到 TS 項目所包含的位址。 使用這位址是為了去維持 TS entry的紀錄,這紀錄了最初所放置的任務。

這資訊對於去設置對應到已完成的被偷取的任務的 Null任務指標來說是有用的。

BST允許去有效地服務多個遠端的請求,由於他讓可竊取的任務維持在處理器當前的區域上,甚至當那些任務從 L1 TS快取中被驅逐時。

Page 16: 針對開發細粒度平行性上的 架構支援

16

3. 實作 -通訊控制 (1/1)

通訊控制 (Communication Control)是一個控制器,他同步了所有與 SLAM相關任務的通訊。 它處理任務將要去的處理器所發出的請求或從遠端處理器來的任務,

連同被竊取任務的完成所相關的通知的產生和處理。每一時間 CC 從一個遠端的處理器得到一個請求,他檢查是

否在 BST中有一個任務是可用的。 在可以輸出一個任務的情形中, CC 從 BST中將它 pop出,並且將它送去給小偷。

在沒有可用的任務可以輸出的情形中, CC簡單地送出一個拒絕給小偷。

有了這個機制,當一個遠端的請求到達時,受害的處理器不必去保存任何的狀態;由於這沒有被中斷,因此沒有情境切換會表現出來。 如果處理器嘗試去存取它的 TS當正服務一個請求時,將會呈現出局部的裁決以至於處理器得到停滯,直到請求已經被服務,在這之後它可以安全地繼續進行。

這機制消除了在 TS中處理多個競爭環境的可能性。

Page 17: 針對開發細粒度平行性上的 架構支援

17

3. 實作 -網路 (1/1)

在所提出的實作中,在晶片上的處理器的內部連結會帶著SLAM的訊息如同在 [24]中所描述。

這些訊息可以被使用去呈現負載平衡的運算。訊息的內容可以是 : 給一個任務的一個請求。這是由一個小偷處理器在每一時間所產生,他執行一個偷取的任務。

一個回答給一個遠端的請求。這回答可以是一個任務或是一個拒絕。

一個被偷的任務完成的一個通知。當一個回傳的任務被執行時,這由一個小偷處理器所產生。

Page 18: 針對開發細粒度平行性上的 架構支援

18

3. 實作 (1/2)

圖 2. 一個 SLAM 節點的硬體組織。網路是共用給所有的節點。

Page 19: 針對開發細粒度平行性上的 架構支援

19

3. 實作 (2/2)

圖 3. 有著 SLAM硬體支援的 CMP的例子。

Page 20: 針對開發細粒度平行性上的 架構支援

20

4. SLAM API(1/2)

為了去取得 SLAM基礎架構的優勢,應用程式必須要有到TS的存取針對在一個有效率的任務評估上。 我們提供使用了一個 API的存取,這 API 暴露了多個 TS 操作的

指令在一個較高的層級。 為了去說明 TS是如何被操作,圖 4顯示出一個 Nfib(n)函數可能的實現。

多個 SLAM函數簡單地提供存取到 TS的硬體。

Page 21: 針對開發細粒度平行性上的 架構支援

21

4. SLAM API(2/2)Void Nfib(int n){

if(n<2){

RET_VAL 1;

}else{

CONTINUATION(Add); overwrite Nfib with Add

PUSH(Nfib, n-1, &x, 1); push Nfib in the TS………………..(6)

PUSH(Nfib, n-2, &y, 1); ………………..(7)

}

NEXT_TASK; jump to the next task

}

Void Add(int x, int y){

RET_VAL x+y+1;

}

圖 4. 使用 SLAM實現的 Nfib函數。

Page 22: 針對開發細粒度平行性上的 架構支援

22

5. 評估 (1/8)

在這已經評估了兩個 CMP的配置 : CMPs有著私有的 L1快取以及私有的 L2快取。

私有的 L2快取有較低的 命中時間,但較小的快取容量。

CMPs有著私有的 L1快取以及共有的 L2快取。

共有的 L2快取有較長的 命中時間,但較大的快取容量。

CMP的參數 ( 沒有 SLAM)列在表 2中。

SLAM硬體的參數列在表 3中。

Page 23: 針對開發細粒度平行性上的 架構支援

23

5. 評估 (2/8)

圖 5. SLAM 執行時間。這些值被正規化至對應到 Cilk應用程式的執行時間。越低越好。

Page 24: 針對開發細粒度平行性上的 架構支援

24

5. 評估 (3/8)

圖 5. SLAM 執行時間。這些值被正規化至對應到 Cilk應用程式的執行時間。越低越好。

Page 25: 針對開發細粒度平行性上的 架構支援

25

5. 評估 (4/8)

圖 6. SLAM 的加速相關於對應到連續的 C應用程式的執行時間。

Page 26: 針對開發細粒度平行性上的 架構支援

26

5. 評估 (5/8)

圖 6. SLAM 的加速相關於對應到連續的 C應用程式的執行時間。

Page 27: 針對開發細粒度平行性上的 架構支援

27

5. 評估 (6/8)

排序的應用程式顯示出較差的延展性,在Merge Sort中只有 2 倍多 ,而在 Quick Sort 只有 3 倍多。 在 Quick Sort 中,由於資料共用在高層級中,造成一個高一致性的流量。 在 Merge Sort中,大量並行的記憶體配置為限制效能的主因。

另一個顯示出延展性受限的應用程式是 Cholesky,較差的效能是因為較低的資料位置。

大部分的應用程式顯示出相對要好的延展性。 使用了 L2私用快取的最大值從 9.23(FFT Low)到 19.11(NQueens High),他們皆使用 32核心。

使用了 L2共用快取的最大加速從 16.66(FFT High)到 54.95(Heat)。 一般來說,平均上 SLAM優於 Cilk 28% (44% 如果 Nqueens的結果拿

走 ) 當使用了有著私有的 L2快取的 32核心的 CMPs。 針對在有著共用的 L2快取的,平均上 SLAM較 Cilk快 21% (31% 如果 Nqueens的結果拿走 )當使用了 32核心的 CMPs,以及較 Cilk快62%當使用了 64核心的 CMPs。

最大的差異在當使用了 32及 64核心時。 事實在於少數的 Cilk應用程式在 32核心時變慢了。 一般來說, SLAM 隨著核心數量而擴增。

Page 28: 針對開發細粒度平行性上的 架構支援

28

5. 評估 (7/8)

偷取 (steal)粒度 : 另一個評估的部分是去獲得偷取粒度的量測。 偷取粒度在這環境中,是一個處理器在它已經從受害者那偷取一個任務之後執行到它再次偷取之前的週期總和。

一般來說,一個偷取被認為是較多或較少有利的於依賴在所產生的偷取粒度上。 這越大,偷取越有利。 有利的偷取粒度導致較少的偷取,反過來說,造成較少的時間去表現出負載平衡的積極性。

Page 29: 針對開發細粒度平行性上的 架構支援

29

5. 評估 (8/8)

圖 7. SLAM 和 Cilk 平均侵占粒度分布針對再與不同的處理器個數一起評估的應用程式C 和 S 屬於 分別對應到 Cilk 和 SLAM的 bars。

Page 30: 針對開發細粒度平行性上的 架構支援

30

7. 總結及未來工作 (1/1)

本文已經提出了 SLAM,一個平行計算的模型,目的是要工作在共用的記憶體晶片多處理器上。

我們評估我們提出的系統,它使用了一組分開 -然後 - 佔領(divide-and-conquer)的應用程式在有著分散地私有及共有的L2快取的 CMPs中,並將我們的系統與 Cilk做比較。 我們的結果顯示出,對於標準程序的評估, SLAM平均上比 Cilk要好。 我們的結果也顯示出所產生的額外成本當創造多個任務在 SLAM中時是較低的。

當執行多個所產生的極細粒度的任務的應用程式時,這是主要的優勢。較大量的偷取粒度貢獻出一個較小且與負載平衡運算相關的額外成本,這得到一個較佳的整體效能。

未來工作牽涉到將 SLAM與其他硬體排程系統像是 Carbon一起做評估,為了去更加了解我們模型的能力。

在應用程式方面,這需要去實現一個與編譯器結合在一起的預先處理的系統,這編譯器支援去允許一個更自動化的產生平行的應用程式。

Page 31: 針對開發細粒度平行性上的 架構支援

31

Thanks for your listening.