210 likes | 400 Views
2012/11/05. 支持多核心架構的虛擬機: 分離抽象與具體 的 並行 模型的差異 Virtual Machine Support for Many-Core Architectures: Decoupling Abstract from Concrete Concurrency Models. 指導教授 :周 哲 民 學 生 :陳 佑 銓 CAD Group Department of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C.
E N D
2012/11/05 支持多核心架構的虛擬機:分離抽象與具體的並行模型的差異Virtual Machine Support for Many-Core Architectures: Decoupling Abstract from Concrete Concurrency Models 指導教授 :周 哲 民 學 生 :陳 佑 銓 CAD Group Department of Electrical Engineering National Cheng Kung University Tainan, Taiwan, R.O.C
Outline • Motivation • VM Instruction Sets with Concurrency Support • Initial Experiments • RelatedWork • Summary and Future Work
Motivation(1/8) • 隨著多核心架構的到來,處理器特性的變異增加了許多種類,這種差異也增加高階語言虛擬機(VM)的需要,去表現其中的差異在所推出中的多核心架構之間的不同。 • 我們所關注的處理器為: • 具有多個核心 • 採用不均勻記憶體存取結構 • 明顯的核心間通信機制 • 對於軟件開發,虛擬機必須提供具體抽象層的硬體細節:如 • 核心數目 • 記憶體存取的特性
Motivation(2/8) • 我們研究的動機,在本節其餘部分,我們分析了具體的和抽象的並行模型在的虛擬機中所面臨的挑戰。 • 挑戰現代的處理器架構上的虛擬機 • 由於處理器廠商為了獲得更高的性能在可能時脈速度達到一個上限 • 以往的作法為 • 增加記憶體階層的複雜度 • 引入亂序執行指令 • 簡單的提高時脈速率 • 這些改變使得軟體不再是透明的了,並需要特殊的支援。 • 而本文所要研究的記憶體存取特性的改變、為了明確提升並行所增加需求的快取一致性的程式、在一些結構中推出明顯的內核間通信,這些都需要VM。
Motivation(3/8) • 單核心處理器 • 單核心的系統是最根本的具體的並行模型,不與其他處理器共享存取記憶體,在這樣的系統中,唯一的並發概念是由操作系統(OS)提供某種形式的搶占式執行緒排程。 • 現代的單核心架構通常使用的機制 • 亂序執行指令 • 向量指令(vector instructions) • 管線級數 • 然而,VM的實現,這些並行的形式並不用施加額外的複雜性。 • 為了獲得最佳性能,加深階層式快取(cache hierarchies)結構以獲得最佳的性能,但必須對數據進行重新佈局,以避免如快取抖動,且要支援啟發式預取。 • JIT(just-in-time)編譯器可以主動的使用這些特性 • 高速快取的line大小 • 啟發式預取 • 優化各種硬件架構的分支預測 • 解譯器可以調整
Motivation(4/8) • 此OS並行方面,VM定義了兩種模式 • 記憶體模式 • 當一個線程要寫入一個共享變數,可以看成另一個線程所讀完的。 • 這些保證互動(guarantees interact)以多種方式來讓JIT編譯器優化。 • 儲存臨時暫存器中的值 • 操作系統的線程重新排程 • 因為在執行線程之前可以重新排程,所以保證是必須強制執行的。 • 任務模式 • 使得程式語言的開發者可以使用並行 • 應該允許排程任務所預期使用到的過往數據 • 當任務在線程的形式或共享數據時均可有效地使用快取。 • 多核心處理器 • 第二種具體的並行模型是一個使用共享記憶體的方法多核心系統或多線程的硬體系統。為了有明顯的區別對於多核心處理器,我們將專注於均勻記憶體存取系統的架構(uniform memory access)(UMA),即多核心或多線程連接到一個單一的主記憶體系統,且階層式快取結構提供快取的一致性。
Motivation(5/8) • 其與單核心處理器主要的區別為增加了硬體的並行性與快取的一致性。 • 在這種情況下記憶體模式所提供保證更為重要。 • 通過引入快取一致性,可用的硬體機制恰當的利用變得更加複雜。 • 一個簡單讀操作的結合,利用檢查高速存取值是否發生了變化,如此效能可以提高,因為依靠快取一致性所需的成本,比一個需要去明確地同步化不同的核心的操作,導致可能不能被快取的記憶體操作還要少。 • 類似單核心系統,任務排程應該遵守資料相依。對於多核心的系統,排程應該是為精明的快取架構,即如何把核心共享快取和如何把快取連接階層式化,以避免快取抖動或更有效率的利用高速存取。
Motivation(6/8) • 眾核心處理器 • 不同於多核心處理器,眾核心處理器不能依賴於一個UMA架構,取而代之,這些處理器依靠不均勻記憶體存取(non-uniform memory access)(NUMA)架構,即所有核心去存取一個特定的記憶體位置的成本是可以不同的。 • 雖然眾核心處理器具有額外的複雜度,但也提供共享記憶體和一致性的快取的行為。 • 作者簡要地討論三種這一類的眾核心系統。 • Cell BE:已經廣泛使用在媒體系統, Cell BE的主要特徵之一是其異質性的方式與多個協同處理單元(synergistic processing elements) (SPE)去結合一個中央處理單元,去分載計算密集型任務。 SPE是很簡單的且不屬於階層式快取結構,並沒有亂序執行,甚至分支預測的特色。每一個SPE都有一個本地儲存區(local storage) ,但不能直接存取主記憶體。相反,當一個SPE要使用資料,必須先送要求到記憶體區塊,然後複製到本地儲存區,才可以使用。 • TILE64:Tilera所製造的處理器, TILE64是只用一種類型的核心同質的系統。每64個內核中都有一個小的快取,而且是互相連接與鄰近的內核(區塊tiles)通過一個具有5個獨立的特殊目的網絡,而形成一個網狀網絡。因此,存取記憶體的方式,是根據核心使用記憶體動態網絡(memory dynamic network)來傳輸要求至記憶體控制器和其返回的資料。此外,快取間的網絡允許存取其他內核的局部快取。
Motivation(7/8) • Larrabee: Intel的Larrabee提供了另一種可能的同質設計。與其他兩種設計相似,核心本身是簡單得多,他們使用的循序架構利用寬向量處理單元來擴展,因為它主要是作為一個圖形處理器。 • 每個核心都有自己的局部子集的L2快取,並通過一致的L2快取使用環形網絡存取主記憶體。 • 抽象並行模型面臨的問題 • 現今的抽象的並行模型通常被認為是不理想的,並進行了大量的研究,用不同的方法來改善這種情況。 • 因此,我們預計不斷努力去建構程式語言,來處理所固有的並行眾核心系統,可能會導致特定域的程式語言,將需要透過底層的虛擬機的支持。 VMs如Java虛擬機(JVM)和通用語言基礎結構(Common Language Infrastructure)(CLI)這些常見的多種程式語言執行平台變得越來越重要 • 實際上,不會有一個單一的模型來表達並行。因此,我們認為一個VM在它核心中要提供支援廣泛的並行模型。支持廣泛的模型可以簡化語言設計者去實現新的想法或在特定領域的解決方案。
Motivation(8/8) • 作者以角色模型為例(Actor) • 基於角色模型為基礎的並行模型,karmani等人調查了不同的語言和程式庫在JVM實現的上角色模型。他們發現,只有少數幾個才真正實現了一個保留的屬性模型,因此,角色模型從來沒有一個可參考的共同物件圖在任何狀態。 • 結論 • 所提出了具體的並行模型與實際的硬件架構有很大不同。最重要的特點是它們的階層式快取結構,記憶體存取架構,提供並行的型式,和用於核心之間的通信的裝置。 • 這些特性不僅影響到所有的VM的各種實現的細節,且會影響優化設計記憶體模型、任務模型和各種不同通信模型的具體並發模型。因此,虛擬機的並行抽象層必須能夠有效地實現在不同的具體並行模型之上。 • 為了實現這一目標,我們認為,虛擬機應該提供明確而全面的支援並行。明確地支援各種不同的抽象並行模型可以直接映射一致的模型。
VM Instruction Sets with Concurrency Support(1/4) • 我們去達到並行抽象層的計畫是利用並行操作來擴展虛擬機指令集。這樣的指令集,以這樣的方式實施將可分離在不同的層級上的並行模型,它們可以獨立變化。 • 圖。1形象化這個想法,呈現出三種不同的抽象的並行模型映射到的指令集,具有明確的並行支援實現在三種不同的具體的並行模型之上。
圖1:抽象的並行模型與具體的並行模型之間虛擬機指令集的抽象層。圖1:抽象的並行模型與具體的並行模型之間虛擬機指令集的抽象層。
VM Instruction Sets with Concurrency Support(2/4) • 使用並行的指令集取代使用程式庫中有兩個主要優點 • 這些指令可能直接由並行相關的語言結構來編譯,可避免VM上與語言和程式庫之間的相依。 • 這種選擇導致在虛擬機層級具有一個更大的優化潛力,例如,JIT編譯,有利於從指令集的得到精確語義。 • 因為不會是一個單一的指令集即匹配所有可能的要求,我們將在一個非常通用的一套要求的指令集中,研究設計權衡得出更具體的要求。 • 該方法將描述如何分離抽象的和具體的並行性。 • 語言的設計者將提供一項策略將抽象的並行模型映射到指令集。 • 虛擬機的設計者將能夠有效率的實現指令集在具體並行模型上。
VM Instruction Sets with Concurrency Support(3/4) • 結合抽象的並行模型的想法 • 研究的主要挑戰之一是對不同的抽象的並發模型要找到適當的組合。這種想法並不是去建立一個簡單的列舉不同模型的基元的指令集,而是一個詳細的組合。因此,要完全理解和定義,不同的模型之間的相互作用。 • 折衷的調查 • 模型組合(Model Combination):考慮在不同指令集層級去結合並行模型為不同的解決方案,並調查其優點和缺點。這將顯示關鍵細節,如不兼容和可能的並行度。 • 模型映射(Model Mammping):為一種策略,將虛擬並行模型映射到保存在具體的並行模型上的指令集中。在這裡必須考慮不同的記憶體模型、階層式快取結構和通信機制。 • 簡明與臃腫的指令集:(Condensed vs. Bloated Instruction Set):只有少數的指令應增加,以避免超過一個典型的字節碼指令集所限定的大小。然而,在實現一個抽象的並發模型上指令集,增加語義可以減少複雜度,也可以有利於有效地映射到一個具體的並發模型。這些利益衝突進行調查。
VM Instruction Sets with Concurrency Support(4/4) • 字節碼與高階語言表示(Bytecode vs. High-level Representation):目前,字節碼集是最常見的虛擬機指令集。對於眾核心架構中的通信中心,我們將探討高階語法是否減少執行工作的新指令和JIT編譯器。 • 指令集與標準程序庫(Instruction Set vs. Standard Library):一個策略用來決定哪些概念是有價值的指令集
Initial Experiments(1/4) • 對於我們的第一個基本的實驗中,我們使用SOM++3,一個非常簡單的虛擬機,實現一個似Smalltalk的語言。此虛擬機被設計為用於教學和快速原型的想法。 • 在我們的第一個實驗的情境下。我們的目標是增加引入一般影響的並行相關指令到虛擬機的字節碼指令集的影響。在我們的實驗中,我們選擇了把重點放在共享記憶體和非共享記憶體的並行性擺在首位。 DUPduplicate top element PUSH_* push locals, arguments, fields, blocks, constants, and globals onto stack POP remove top element POP_* pop top element to locals, arguments, and field variables SEND sig send a message identified by sig to the top element SUPER_SENDsend a message to the top element, use implementation of the parent class RETURN_LOCAL return from the current block of execution to its outer context RETURN_NON_LOCAL leave the currently executed method from an inner block HALTleave the interpreter loop Table 1: SOM++ bytecode
Initial Experiments(2/4) • 共享記憶體並行 • 我們的第一個實驗是添加基本共享記憶體並行指令到SOM++字節碼集。 • 選擇了只添加的五個基本指令 • 他們操作運算在堆疊最上面的元素。 對於SPAWN,最上面的元素必須是一個區塊,且在執行完後會到一個新的線程執行。其結果是,SPAWN推一個新的線程物件的到堆疊。而其他四種操作的堆疊頂部上為任意物件,其堆疊本身不會受到影響。 SPAWNspawn a new thread with the given block on top of the stack LOCK lock the lock of the top element UNLOCK unlock the lock of the top element WAIT wait on a notification on the top element NOTIFYnotify all threads waiting on the top element Tab.2所增加的五個指令
Initial Experiments(3/4) • 非共享記憶體並行 • 這個實驗的目的是為了適應在SOM++實現並行的角色不共享記憶體,但使用顯式消息傳遞通信。 • 在這個模型中,角色為物件的容器。其中的角色不是“主動物件”,但一些有規則物件的容器。所包含的物件被屏蔽不需要的並行修改,因為每個角色只有一個線程的控制。在角色中之間的信息交換使用傳入的每個角色的信息佇列中的。 • 通常的物件之間的消息發送可以是同步或非同步的 • 為了支持這台機器模型,指令集必須適應中列出的表.3。基本除了發送指令保持不變。對於消息發送給對象通過遠程指向器,調整SEND值。將消息發送到物件擁有的角色,並產生協同程序等待結果值。後返回的結果值的RETURN_REMOTE的字節碼。通常的非同步消息發送實現的SEND_ASYNC的字節碼和的協同程序可以明確地產生控制使用的YIELD字節碼。
Initial Experiments(4/4) • 選擇一個研究平台 • 從實驗中,總結了四點要求一個完全成熟的實驗環境,適合展示的指令集,支援廣泛的並行模型的優點: • VM要有可移植的平台,能夠在其中評估利益與否,從一個擴展的指令集到映射不同的具體並發模型中的。 • 應可視為抽象的並發模型,用彙編實施策略的虛擬機指令集的實現 • 虛擬機的指令集提供了空間(即未使用的字節碼指令)進行實驗。 • VM提供了一個簡單的適應JIT編譯器試驗與優化。 • Lua:雖然小,但可以明確的展示出它的功能, JIT編譯器的實現可以移植到眾核心的架構,而無需過大的努力因此,我們會考慮車輛的嵌入式虛擬機的背景下,以驗證我們的研究。 。 • RVM已經針對的TILE64處理器。因為它採用了眾核心架構,其特殊的核間通信設施,我們將使用我們的第一個實驗,將我們的想法,設置在眾核心系統。 • CacaoVM似乎是最小的和最廣泛移植的開源(open sources)JVM的JIT編譯器,但是,當涉及到性能的驗證時可能不被考慮。
Summary and Future Work • 我們提出分離抽象的和具體的並行模型,以應付即將到來的具可變性眾核心架構和不同的記憶體存取結構。我們認為這一步是必須能夠提供支持的多種語言和抽象的VM上的並行模型。此外,一個語義豐富的並行抽象層,能更有效地的將VM實現在各種不同的硬體平台上。 • 我們正在進行的研究目標是設計一個全面的方法,設計多個並行模型結合,提供這個抽象的虛擬機指令集。該方法將針對各種不同的設計折衷。我們的初步原型,使我們能夠改進我們的初步實驗環境的要求,為我們提供了必要的見解,是一個合適的平台上繼續進行我們的研究。