570 likes | 748 Views
5-1. 平行和分散式演算法. 5-5. 機群和群集. 5-6. 網格運算與網格中間層. 並行處理程式設計模式. 5-2. 5-7. 小結. HPC 中間層與多機虛擬化. 5-3. 作業排程與管理. 5-4. 5.1 平行和分散式演算法.
E N D
5-1 • 平行和分散式演算法 5-5 • 機群和群集 5-6 • 網格運算與網格中間層 並行處理程式設計模式 5-2 5-7 • 小結 HPC中間層與多機虛擬化 5-3 作業排程與管理 5-4
5.1 平行和分散式演算法 • 演算法是求解問題的方法和步驟,而平行演算法(Parallel Algorithm或Concurrent Algorithm)是用多台處理機聯合求解問題的方法和步驟,其執行過程是將給定的問題首先分解成若干個儘量相互獨立的子問題,然後使用多台電腦同時求解它,最終求得原問題的解。分散式演算法(Distributed Algorithm)是平行演算法的一種。 • 如圖5-1所示展示了用電腦解決問題的串列和並行兩種方法。
常用的平行計算模型有共用儲存的模型,包括共用儲存的SIMD同步PRAM(Parallel Random Access Machine,如圖5-2所示)模型和共用儲存的MIMD非同步APRAM(Asynchronous Parallel Random Access Machine)模型。
平行演算法設計技術儘管理論上不是很成熟,帶有一定的技巧性,人們已經總結出一些基本的、帶有普適性的平行演算法設計技術:平行演算法設計技術儘管理論上不是很成熟,帶有一定的技巧性,人們已經總結出一些基本的、帶有普適性的平行演算法設計技術: • 劃分法(Partitioning, Decomposition)。 • 分治法(Divide-and-Conquer)。 • 管線法(Pipelining)。 • 隨機法(Randomization)。 • 迭代法(Iteration)。
此外還有平衡樹法(Balanced Tree)、倍增法(Doubling)和破對稱法(Symmetry Breaking)等。 • 不論是多線程(Thread)還是多程序(Process)程式設計,都需要用同步化(Synchronization)技術來解決Mutual Exclusion(Mutex)和鎖死(Dead Lock)問題。 • 在分散式事務處理(Transaction Processing)領域,還有Atomic Commit、Two-Phase Commit等重要概念和相關演算法等。
5.1.1Amdahl 和 Gustafson 定律 • Amdahl定律(Amdahl’s Law)是著名的Amdahl公司總裁Gene Amdahl於1967年提出來的,在平行計算中用來預測使用多處理系統來解決一個計算問題的最大加速(Speedup)理論值。它指出一個問題用多處理系統來求解的加速效果取決於這個問題本身是否可以被分解成多個可並行處理的任務及具體能分解成多少個獨立任務。如圖5-3所示。
歸納成公式,如果一個計算問題有P%的部分能夠被分解,用N個處理器的平行電腦能夠達到的加速效果是:歸納成公式,如果一個計算問題有P%的部分能夠被分解,用N個處理器的平行電腦能夠達到的加速效果是: • John Gustafson在1988年總結出,公式如下:
其中,S代表加速(Speedup)效果,p是處理器數量,a是一個問題不可並行化的佔比部分,a(n)代表把一個問題的不可並行化部分做n次計算,也就是說用一台p個處理器的並行機計算n(大批量)個同樣的問題,當n(批量)無限大的時候,不可並行部分的計算量佔比趨於忽略不計,S值和p值成正比,極端情況等於p。其中,S代表加速(Speedup)效果,p是處理器數量,a是一個問題不可並行化的佔比部分,a(n)代表把一個問題的不可並行化部分做n次計算,也就是說用一台p個處理器的並行機計算n(大批量)個同樣的問題,當n(批量)無限大的時候,不可並行部分的計算量佔比趨於忽略不計,S值和p值成正比,極端情況等於p。
5.2 並行處理程式設計模式 • 針對HPC系統架構透過適當的任務分解和程式設計實作才能有效地進行,主要有兩大類程式設計模式:Implicit和Explicit程式設計模式。 • 並行處理語言或API,提供給程式師相對應的程式設計工具。控制(Control)和資料,控制指的是同步程式執行的順序和流程,資料指的是資料的交換和共用方式。
SPMD(Single Program,Multiple Data)是最常用的並行處理程式設計模式。PVM(Parallel Virtual Machine)是第一個也是最成功的一個,後來在PVM基礎上建立了MPI(Message Passing Interface)標準,許多MPI系統的推出使MPI成為事實標準和業界主流技術。基於共用記憶體的OpenMP標準也在MPI成功經驗的基礎上推出。
依據Turing原理和Von Neumann體系的電腦程式設計一直是順序(Sequential)執行的。多機並行系統出現後,人們也希望依照這樣的方式設計應用程式,把並行化的工作交給電腦來自動處理,這就是應用程式自動並行化(Automatic Parallelization),於是出現了並行編譯系統(Parallelizing Compiler)。然而人們很快發現那樣做難度很高,有時幾乎不可能,這就是所謂的“並行的災難(The Perils of Parallel)”。
TOP 500大型超級電腦中幾乎只剩下Cluster和MPP兩種架構,這兩種架構其實歸結起來就是分散式記憶體這一種架構,程式設計模式基本上只剩下MPI/PVM這一種目前雲端運算領域備受歡迎的MapReduce演算法,Google宣稱其是探勘在多年前就成為非主流的函數程式設計(Functional Programming)理念和技術的基礎上發展而來的。
5.2.1Implicit 與 Explicit 程式模式 • 隱式並行(Implicit Parallelism)透過一個程式語言中的“指導語句(Constructs,Directives等)”,讓編譯器(Compiler)或解釋執行器(Interpreter)能夠自動地探勘計算程式。
Implicit模式的優點是降低了程式設計人員的工作難度,但缺點是並行化效果不盡人意。Implicit模式的優點是降低了程式設計人員的工作難度,但缺點是並行化效果不盡人意。 • 顯式(Explicit Parallelism)並行程式設計模式是透過對一個一般的串列程式語言添加專用的面向平行計算的指令語句(Primitives)的套裝軟體,提供一組API呼叫(Calls,Routines)函數庫,這些函數庫主要負責過程同步和資料交換等事務。
從實作和使用的複雜性而言,Implicit較難實作但相對易用,Explicit較容易實作但需要較高的程式設計能力才能有效使用,如圖5-7所示。從實作和使用的複雜性而言,Implicit較難實作但相對易用,Explicit較容易實作但需要較高的程式設計能力才能有效使用,如圖5-7所示。
OpenMP是一個基於共用記憶體的標準化並行程式設計規範,OpenMP中其實還有對Compiler的支援,因此相對於MPI、PVMl來說,OpenMP應該屬於一個Implicit和Explicit模式的混合體。OpenMP是一個基於共用記憶體的標準化並行程式設計規範,OpenMP中其實還有對Compiler的支援,因此相對於MPI、PVMl來說,OpenMP應該屬於一個Implicit和Explicit模式的混合體。
5.3HPC中間層軟體與多機虛擬化 • 中間層一般以一個通用平台的面目出現,直接面向使用者的應用程式在中間層基礎上做“二次開發”,中間層的採用相比“從頭開發”應用程式可以減少大量的工作量,同時穩定性、開放性、模組化等特性可以得到很大的提高。目前Java EE和 .NET已成為主流技術。
HPC中間層是因為現有OS和電腦語言在支援HPC計算時有很多不足【32】,比較知名的HPC中間層有PVM(Parallel Virtual Machine)、MPI(Message Passing Interface)、CCA(Common Component Architecture)等。
5.3.1PVM、MPI 與 MapReduce • 最重要和最流行的是MPI和PVM,它們能執行在所有的並行平台上,包括PVP、SMP、NUMA等系統,以及把它們作為節點使用的所有MPP和Cluster,二者早已經在Windows和各種UNIX平台上實作。
PVM具有很好的適應性、可擴充性、可攜性和易使用性等特點,儘管已經有越來越多的人開始使用MPI,但PVM仍然是並行處理最流行的軟體之一。PVM具有很好的適應性、可擴充性、可攜性和易使用性等特點,儘管已經有越來越多的人開始使用MPI,但PVM仍然是並行處理最流行的軟體之一。
PVM的中文直譯是“並行虛擬機器”,可以說它是前文提到的“多機虛擬化”的鼻祖,它的目標是把成千上萬的單機系統群集到一起當做一個超級電腦來使用。PVM的中文直譯是“並行虛擬機器”,可以說它是前文提到的“多機虛擬化”的鼻祖,它的目標是把成千上萬的單機系統群集到一起當做一個超級電腦來使用。 • MPI是在PVM工作基礎上的直接產物,於是業界提出了要統一定義一個標準的API的計畫,MPI應運而生。 • MPI的目標是提供一個實際可用的、可移植的、高效率的和靈活的訊息傳遞介面標準。
MPI只是一個標準,按這個標準有很多具體實作。MPI只是一個標準,按這個標準有很多具體實作。 • 在MPI和PVM中,最常用的函數無疑是“send()”和“recv()”,作為單個訊息的發送和接收語句,此外還有scatter()和gather()。
值得一提的是,PVM和MPI中的bcast()和reduce()函數,就是目前雲端運算中經常提到的MapReduce的一種早期實作方式,bcast()是把計算任務分解後發佈到N個節點(也叫slave)上,reduce()是把計算結果從N個節點發回到主節點(也叫master)。PVM和MPI提供了一種或多種MapReduce的實作方式和執行環境, MapReduce演算法包括多重迭代(Recursive Iteration),而MapReduce是一種專用於處理大量資料(Multi-PetaBytes)的專用系統。
5.4 作業排程與管理 • 作業排程(Job Scheduling,Workload Management)與管理也是HPC系統中的關鍵軟體之一。作業排程與管理也是實作多機虛擬化的關鍵手段之一,讓使用者感覺他們使用的是一台電腦,同時提高整個系統的易用性和便捷性。 • 圖5-11展示了一個典型的作業排程與管理系統的功能,執行於服務節點上的軟體負責整體系統的管理。
一個作業排程系統一般執行如下功能【5】:排隊(Queuing)、排程(Scheduling)、監測(Monitoring)、資源管理(Resource Management)和計費(Accounting)。 • 作業排程這個概念早已在電腦OS中使用。這些作業排程系統在HPC系統中可能用處不大,但在雲端運算商務應用系統中可能會發掘出應用價值。
PBS(Portable Batch System)、Condor、LSF(Load Sharing Facility)、Loadleveler是當今頗具代表性和影響力的幾種機群作業管理系統。 • Condor: IBM的Loadleveler產品就是與Livny教授合作在Condor程式碼基礎上發展而來的;Google的Hadoop系統也借鑒了Condor經驗,其主要開發人員就來自Condor團隊。
PBS:PBS最初由NASA的Ames研究中心開發,PBS獨立的排程模組允許系統管理員定義資源和每個作業可使用的數量,排程模組存有各個可用的排隊作業、執行作業和系統資源使用狀況等資訊。PBS:PBS最初由NASA的Ames研究中心開發,PBS獨立的排程模組允許系統管理員定義資源和每個作業可使用的數量,排程模組存有各個可用的排隊作業、執行作業和系統資源使用狀況等資訊。
LSF:多年來Platform Compuitng公司一直堅持做這個市場並不大但競爭很激烈的行業,從其強大的功能和廣泛使用的角度看,LSF是一個成熟的作業管理系統。LSF不僅用於科學計算,也用於企業的事務處理。 • Loadleveler:Loadleveler是IBM開發的產品,開發時的目標是和IBM SP2系列HPC系統(包括ASCI系列超級電腦)及POE、MPL等其他軟體配套。由於Loadleveler是基於Condor開發的,它也有Condor系統的大部分功能特性。
5.4.1Condor 與 Hadoop • 雲端運算中常被提及和使用的著名系統,Apache Hadoop與Condor有密切關聯【34】。
5.4.2 中斷點、遷移和 VMotion • Hypervisor單機虛擬化技術把異構(Heterogeneous)的OS節點轉換成同構(Homogeneous)節點的多機虛擬化技術,例如,Amazon EC2主要依賴Xen,Eucalyptus依賴KVM,提供同構的執行節點,即執行同一種OS的節點,以便簡化管理。在早期的HPC/Grid計算中,Checkpointing和Migration是很重要的技術,但異構節點之間的Checkpointing和移植難度很大,屬於長期研究課題。在現代的雲端運算系統中,透過虛擬化實作節點同構後,可以迴避這個難題。
5.5 機群和群集 • 機群和群集這兩個詞都翻譯自英文Cluster這同一個詞,Cluster在英文中的確有多重含義,最主要的是兩種: • 一種是COW(Cluster of Workstations)中的Cluster及超級計算TOP 500中的Cluster,這樣的Cluster透過多台電腦完成同一個工作,達到更高的效率,對HA(High Availability)和RAS(Reliablity,Availability,Servicability)。
另一種是指用在商用系統中的Cluster,或叫HA Cluster,是另一類技術打造的高可用性和高可靠性系統。 • 用機群和群集區分英文中容易引起歧義的Cluster這個詞,有許多人還不瞭解這兩個詞以及之間的區別。 • Cluster分為同構(Homogenous)與異構(Heterogenous)兩種,在同構系統中,所有的電腦都是同類,而在異構系統中,電腦可以是不同種類。
Cluster按功能和結構還可以分成以下幾類。 • 高可用性群集(HA Cluster)。 • 負載均衡群集(Load Balancing Cluster)。 • 高性能電腦群(HPC Cluster)。 • 網格運算(Grid Computing)。
5.5.1Beowulf、LVS 和 MOSIX • Beowulf機群(Cluster),得名於古英語著名史詩“Beowulf”,是一種高性能的平行電腦群結構,特點是使用廉價的PC。 • Beowulf是目前科學計算中流行的一類平行電腦。各個單元之間透過TCP/IP區域網路和MPI/PVM等的程式庫來分配計算任務和通信。
筆者認為,一個理想的機群應該提供SSI功能,一個理想的群集系統還應該在此基礎上提供HA功能。不論是機群還是群集都應該支援不同種類的節點,即節點彼此可以是同構或異構的,可用的節點有工作站、PC、SMP伺服器甚至超級電腦,節點的作業系統可以是多使用者、多工和多線程的各種系統,如圖5-20所示。筆者認為,一個理想的機群應該提供SSI功能,一個理想的群集系統還應該在此基礎上提供HA功能。不論是機群還是群集都應該支援不同種類的節點,即節點彼此可以是同構或異構的,可用的節點有工作站、PC、SMP伺服器甚至超級電腦,節點的作業系統可以是多使用者、多工和多線程的各種系統,如圖5-20所示。
LVS(Linux Virtual Server)就是一個常用的比Beowulf“機群”更具體,有實質內容的一個理想的“群集”系統。LVS的系統結構分為3個層次。 • 第一層是負載等化器。 • 第二層是提供實際服務的伺服器群。 • 第三層是儲存服務系統。
5.6網格運算與網格中間層 • 網格運算(Grid Computing)的定義:網格運算是一種分散式計算,它研究如何把一個需要非常巨大的計算能力才能解決的問題分成許多小的部分,然後把這些部分分配給許多電腦進行處理,最後把這些計算結果綜合起來得到最終結果。它和傳統HPC電腦群計算的區別是它的架構更加趨於鬆耦合、異構和跨地域分佈。
網格運算是HPC電腦群計算的直接延伸。網格運算的目的之一是支援相關行業的“科學計算商務化”。歐洲原子能研究中心(CERN)是這樣定義網格運算的:“網格運算就是透過網際網路來共用強大的計算能力和資料儲存能力”。網格運算的外部網格(External Grid)和內部網格(Internal Grid)的含義基本上就是目前雲端運算中提到的公有雲端(Public Cloud)和私有雲端(Private Cloud)。
網格運算的硬體技術和系統架構可以說和HPC電腦群是完全一樣的,其關鍵在於使用一組統稱為中間層(Middleware)的軟體技術。在網格運算中,中間層的範圍被擴大了很多,基本包含了前幾節介紹過的所有技術和軟體系統:HPC中間層、作業排程與管理、機群與群集技術等。網格運算的硬體技術和系統架構可以說和HPC電腦群是完全一樣的,其關鍵在於使用一組統稱為中間層(Middleware)的軟體技術。在網格運算中,中間層的範圍被擴大了很多,基本包含了前幾節介紹過的所有技術和軟體系統:HPC中間層、作業排程與管理、機群與群集技術等。
有人把網格中間層分為4個層面: • 底層中間層。 • 平行檔案系統中間層。 • 高層中間層。 • 網格中間層。
Globus是一個集機群和群集技術大成的系統,Condor是一個作業排程和整個Cluster的管理的軟體,因此網格中間層也是一個集大成的技術。Globus是一個集機群和群集技術大成的系統,Condor是一個作業排程和整個Cluster的管理的軟體,因此網格中間層也是一個集大成的技術。
5.6.1Globus Toolkit • Ian Foster等人一直強調【37】,網格運算是有一個真實需要解決的問題,是有實質內容的,不僅僅是一個理念,其目標是要“透過建立一個動態的、多機構的虛擬組織(Virtual Organization)來實作可協調的資源分享可解決實際問題”。