現在 Linux 集群在很多領域都已經變得非常流行了。隨著集群技術的出現以及開放源碼軟件日益得到采納,現在只需要傳統高性能機器的很少一部分成本就可以構建一台超級計算機了。
這兩篇系列文章簡要介紹采用 Linux 集群技術的高性能計算(HPC)的概念,展示如何構建集群並編寫並行程序。本文是兩篇系列文章中的第一篇,討論了集群的類型、用途、HPC 基礎、Linux 在 HPC 中的角色以及集群技術日益增長的原因。第 2 部分將介紹並行算法的知識,並介紹如何編寫並行程序、如何構建集群以及如何進行基准測試。
HPC 體系架構的類型
大部分 HPC 系統都使用了並行 的概念。有很多軟件平台都是面向 HPC 的,但是首先讓我們先來了解一下硬件的知識。
HPC 硬件可以分為 3 類:
對稱多處理器(SMP) 向量處理器 集群對稱多處理器(SMP)
SMP 是 HPC 采用的體系架構之一,其中有多個處理器會共享內存。(在集群中,這也稱為 大規模並行處理器(massively parallel processor,MPP),它們並不需要共享內存;稍後我們將更詳細介紹這方面的內容。)與 MPP 相比,SMP 通常成本更高,而且可伸縮性較差。
向量處理器
顧名思義,在向量處理器中,CPU 被優化以便很好地處理向量數組的運算。向量處理器系統的性能很高,在 20 世紀 80 年代到 90 年代早期一度在 HPC 體系架構中占有統治地位,但是最近幾年以來,集群變得更加流行了。
集群
集群是最近幾年中最為主要的一種 HPC 硬件:集群(cluster) 就是一組 MPP 的集合。集群中的處理器通常被稱為 節點,它具有自己的 CPU、內存、操作系統、I/O 子系統,並且可以與其他節點進行通信。目前有很多地方都使用常見的工作站運行 Linux 和其他開放源碼軟件來充當集群中的節點。
接下來您將看到這些 HPC 硬件之間的區別,但是首先讓我們從集群開始。
集群定義
術語“集群(cluster)”在不同的地方可能會意味著不同的意義。本文重點介紹以下三種類型的集群:
故障遷移集群 負載均衡集群 高性能集群故障遷移集群
最簡單的故障遷移集群有兩個節點:一個節點是活動的,另外一個節點是備用的,不過它會一直對活動節點進行監視。一旦活動節點出現故障,備用節點就會接管它的工作,這樣就能使得關鍵的系統能夠持續工作。
負載均衡集群
負載均衡集群通常會在非常繁忙的 Web 站點上采用,它們有多個節點來承擔相同站點的工作,每個獲取 Web 頁面的新請求都被動態路由到一個負載較低的節點上。
高性能集群
高性能集群用來運行那些對時間敏感的並行程序,它們對於科學社區來說具有特殊的意義。高性能集群通常會運行一些模擬程序和其他對 CPU 非常敏感的程序,這些程序在普通的硬件上運行需要花費大量的時間。
圖 1 解釋了一個基本的集群。本系列文章的第 2 部分將展示如何創建這種集群,並為其編寫程序。
圖 1. 基本的集群
網格計算 是一個更為廣泛的術語,通常用來代表利用松耦合系統之間的協作來實現面向服務的架構(SOA)。基於集群的 HPC 是網格計算的一個特例,其中節點之間都是緊耦合的。網格計算的一個成功的、眾所周知的項目是 SETI@home,即搜索外星智慧的項目,它使用了大約一百萬台家用 PC 在屏保時的空閒 CPU 周期來分析無線電天文望遠鏡的數據。另外一個類似的成功項目是 Folding@Home 項目,用來進行蛋白質的折疊計算。
高性能集群的常見用途
幾乎所有的產業界都需要快速的處理能力。隨著越來越便宜而且快速的計算機的出現,更多公司表現出了對利用這些技術優勢的興趣。人們對於計算處理能力的需求是沒有上限的;盡管處理能力在迅速提高,但是人們的需求仍然超出計算能力所能提供的范圍。
生命科學研究
蛋白質分子是非常復雜的鏈,實際上可以表示為無數個 3D 圖形。實際上,在將蛋白質放到某種溶液中時,它們會快速“折疊”成自己的自然狀態。不正確的折疊會導致很多疾病,例如 Alzheimer 病;因此,對於蛋白質折疊的研究非常重要。
科學家試圖理解蛋白質折疊的一種方式是通過在計算機上進行模擬。實際上,蛋白質的折疊進行得非常迅速(可能只需要 1 微秒),不過這個過程卻非常復雜,這個模擬在普通的計算機上可能需要運行 10 年。這個領域只不過是諸多業界領域中很小的一個,但是它卻需要非常強大的計算能力。
業界中其他領域包括制藥建模、虛擬外科手術訓練、環境和診斷虛擬化、完整的醫療記錄數據庫以及人類基因項目。
石油和天然氣勘探
震動圖中包含有大陸和洋底內部特性的詳細信息,對這些數據進行分析可以幫助我們探測石油和其他資源。即便對於一個很小的區域來說,也有數以 TB 計的數據需要重構;這種分析顯然需要大量的計算能力。這個領域對於計算能力的需求是如此旺盛,以至於超級計算機大部分都是在處理這種工作。
其他地理學方面的研究也需要類似的計算能力,例如用來預測地震的系統,用於安全性工作的多譜段衛星成像系統。
圖像呈現
在工程領域(例如航天引擎設計)操縱高分辨率的交互式圖像在性能和可伸縮性方面歷來都是一種挑戰,因為這要涉及大量的數據。基於集群的技術在這些領域已經取得了成功,它們將渲染屏幕的任務分割到集群中的各個節點上,在每個節點上都利用自己的圖形硬件來呈現自己這部分屏幕的圖像,並將這些像素信息傳送到一個主節點上,主節點對這些信息進行組合,最終形成一個完整的圖像。
這個領域中的例子目前才不過是冰山一角;更多的應用程序,包括天體物理模擬、氣象模擬、工程設計、金融建模、證券模擬以及電影特技,都需要豐富的計算資源。對於計算能力越來越多的需求我們就不再進行介紹了。
Linux 和集群如何改變了 HPC
在基於集群的計算技術出現之前,典型的超級計算機都是向量處理器,由於它們全部采用專用的硬件和軟件,因此成本通常會超過一百萬美元。
隨著 Linux 和其他免費的集群開放源碼軟件組件的出現和常用硬件處理能力的提高,這種情況現在已經發生了很大的變化。您可以利用少量的成本來構建功能強大的集群,並能夠根據需要來添加其他節點。
GNU/Linux 操作系統(Linux)已經在集群中得到了大量的采用。Linux 可以在很多硬件上運行,並且具有高質量的編譯器和其他軟件,例如並行文件系統和 MPI 實現在 Linux 上都是免費的。采用 Linux,用戶還可以針對自己的任務負載對內核進行定制。Linux 是構建 HPC 集群的一個非常好的平台。
理解硬件:向量機與集群
要理解 HPC 硬件,對向量計算和集群計算進行一下比較是非常有用的。二者是互相競爭的技術(地球模擬器 是一台向量超級計算機,目前仍然是最快的 10 台機器之一)。
從根本上來講,向量處理器和標量處理器都是基於時鐘周期來執行指令的;使它們產生區別的是向量處理器並行處理與向量有關的計算的能力(例如矩陣乘法),這在高性能計算中是非常常見的。為了展示這一點,假設您有兩個雙精度的數組 a 和 b,並且要創建第三個數組 x,比如 x[i]=a[i]+b[i]。
任何浮點操作,例如加法和乘法,都可以通過幾個步驟來實現:
進行指數調整 添加符號 對結果進行取整檢查等向量處理器通過使用 流水線(pipeline) 技術在內部對這些步驟進行並行處理。假設在一個浮點加法運算中有六個步驟(與 IEEE 算術硬件一樣),如圖 2 所示:
圖 2. IEEE 算術硬件中的六級流水線
現在 Linux 集群在很多領域都已經變得非常流行了。隨著集群技術的出現以及開放源碼軟件日益得到采納,現在只需要傳統高性能機器的很少一部分成本就可以構建一台超級計算機了。
這兩篇系列文章簡要介紹采用 Linux 集群技術的高性能計算(HPC)的概念,展示如何構建集群並編寫並行程序。本文是兩篇系列文章中的第一篇,討論了集群的類型、用途、HPC 基礎、Linux 在 HPC 中的角色以及集群技術日益增長的原因。第 2 部分將介紹並行算法的知識,並介紹如何編寫並行程序、如何構建集群以及如何進行基准測試。
HPC 體系架構的類型
大部分 HPC 系統都使用了並行 的概念。有很多軟件平台都是面向 HPC 的,但是首先讓我們先來了解一下硬件的知識。
HPC 硬件可以分為 3 類:
對稱多處理器(SMP) 向量處理器 集群對稱多處理器(SMP)
SMP 是 HPC 采用的體系架構之一,其中有多個處理器會共享內存。(在集群中,這也稱為 大規模並行處理器(massively parallel processor,MPP),它們並不需要共享內存;稍後我們將更詳細介紹這方面的內容。)與 MPP 相比,SMP 通常成本更高,而且可伸縮性較差。
向量處理器
顧名思義,在向量處理器中,CPU 被優化以便很好地處理向量數組的運算。向量處理器系統的性能很高,在 20 世紀 80 年代到 90 年代早期一度在 HPC 體系架構中占有統治地位,但是最近幾年以來,集群變得更加流行了。
集群
集群是最近幾年中最為主要的一種 HPC 硬件:集群(cluster) 就是一組 MPP 的集合。集群中的處理器通常被稱為 節點,它具有自己的 CPU、內存、操作系統、I/O 子系統,並且可以與其他節點進行通信。目前有很多地方都使用常見的工作站運行 Linux 和其他開放源碼軟件來充當集群中的節點。
接下來您將看到這些 HPC 硬件之間的區別,但是首先讓我們從集群開始。
集群定義
術語“集群(cluster)”在不同的地方可能會意味著不同的意義。本文重點介紹以下三種類型的集群:
故障遷移集群 負載均衡集群 高性能集群故障遷移集群
最簡單的故障遷移集群有兩個節點:一個節點是活動的,另外一個節點是備用的,不過它會一直對活動節點進行監視。一旦活動節點出現故障,備用節點就會接管它的工作,這樣就能使得關鍵的系統能夠持續工作。
負載均衡集群
負載均衡集群通常會在非常繁忙的 Web 站點上采用,它們有多個節點來承擔相同站點的工作,每個獲取 Web 頁面的新請求都被動態路由到一個負載較低的節點上。
高性能集群
高性能集群用來運行那些對時間敏感的並行程序,它們對於科學社區來說具有特殊的意義。高性能集群通常會運行一些模擬程序和其他對 CPU 非常敏感的程序,這些程序在普通的硬件上運行需要花費大量的時間。
圖 1 解釋了一個基本的集群。本系列文章的第 2 部分將展示如何創建這種集群,並為其編寫程序。
圖 1. 基本的集群
網格計算 是一個更為廣泛的術語,通常用來代表利用松耦合系統之間的協作來實現面向服務的架構(SOA)。基於集群的 HPC 是網格計算的一個特例,其中節點之間都是緊耦合的。網格計算的一個成功的、眾所周知的項目是 SETI@home,即搜索外星智慧的項目,它使用了大約一百萬台家用 PC 在屏保時的空閒 CPU 周期來分析無線電天文望遠鏡的數據。另外一個類似的成功項目是 Folding@Home 項目,用來進行蛋白質的折疊計算。
高性能集群的常見用途
幾乎所有的產業界都需要快速的處理能力。隨著越來越便宜而且快速的計算機的出現,更多公司表現出了對利用這些技術優勢的興趣。人們對於計算處理能力的需求是沒有上限的;盡管處理能力在迅速提高,但是人們的需求仍然超出計算能力所能提供的范圍。
生命科學研究
蛋白質分子是非常復雜的鏈,實際上可以表示為無數個 3D 圖形。實際上,在將蛋白質放到某種溶液中時,它們會快速“折疊”成自己的自然狀態。不正確的折疊會導致很多疾病,例如 Alzheimer 病;因此,對於蛋白質折疊的研究非常重要。
科學家試圖理解蛋白質折疊的一種方式是通過在計算機上進行模擬。實際上,蛋白質的折疊進行得非常迅速(可能只需要 1 微秒),不過這個過程卻非常復雜,這個模擬在普通的計算機上可能需要運行 10 年。這個領域只不過是諸多業界領域中很小的一個,但是它卻需要非常強大的計算能力。
業界中其他領域包括制藥建模、虛擬外科手術訓練、環境和診斷虛擬化、完整的醫療記錄數據庫以及人類基因項目。
石油和天然氣勘探
震動圖中包含有大陸和洋底內部特性的詳細信息,對這些數據進行分析可以幫助我們探測石油和其他資源。即便對於一個很小的區域來說,也有數以 TB 計的數據需要重構;這種分析顯然需要大量的計算能力。這個領域對於計算能力的需求是如此旺盛,以至於超級計算機大部分都是在處理這種工作。
其他地理學方面的研究也需要類似的計算能力,例如用來預測地震的系統,用於安全性工作的多譜段衛星成像系統。
圖像呈現
在工程領域(例如航天引擎設計)操縱高分辨率的交互式圖像在性能和可伸縮性方面歷來都是一種挑戰,因為這要涉及大量的數據。基於集群的技術在這些領域已經取得了成功,它們將渲染屏幕的任務分割到集群中的各個節點上,在每個節點上都利用自己的圖形硬件來呈現自己這部分屏幕的圖像,並將這些像素信息傳送到一個主節點上,主節點對這些信息進行組合,最終形成一個完整的圖像。
這個領域中的例子目前才不過是冰山一角;更多的應用程序,包括天體物理模擬、氣象模擬、工程設計、金融建模、證券模擬以及電影特技,都需要豐富的計算資源。對於計算能力越來越多的需求我們就不再進行介紹了。
Linux 和集群如何改變了 HPC
在基於集群的計算技術出現之前,典型的超級計算機都是向量處理器,由於它們全部采用專用的硬件和軟件,因此成本通常會超過一百萬美元。
隨著 Linux 和其他免費的集群開放源碼軟件組件的出現和常用硬件處理能力的提高,這種情況現在已經發生了很大的變化。您可以利用少量的成本來構建功能強大的集群,並能夠根據需要來添加其他節點。
GNU/Linux 操作系統(Linux)已經在集群中得到了大量的采用。Linux 可以在很多硬件上運行,並且具有高質量的編譯器和其他軟件,例如並行文件系統和 MPI 實現在 Linux 上都是免費的。采用 Linux,用戶還可以針對自己的任務負載對內核進行定制。Linux 是構建 HPC 集群的一個非常好的平台。
理解硬件:向量機與集群
要理解 HPC 硬件,對向量計算和集群計算進行一下比較是非常有用的。二者是互相競爭的技術(地球模擬器 是一台向量超級計算機,目前仍然是最快的 10 台機器之一)。
從根本上來講,向量處理器和標量處理器都是基於時鐘周期來執行指令的;使它們產生區別的是向量處理器並行處理與向量有關的計算的能力(例如矩陣乘法),這在高性能計算中是非常常見的。為了展示這一點,假設您有兩個雙精度的數組 a 和 b,並且要創建第三個數組 x,比如 x[i]=a[i]+b[i]。
任何浮點操作,例如加法和乘法,都可以通過幾個步驟來實現:
進行指數調整 添加符號 對結果進行取整檢查等向量處理器通過使用 流水線(pipeline) 技術在內部對這些步驟進行並行處理。假設在一個浮點加法運算中有六個步驟(與 IEEE 算術硬件一樣),如圖 2 所示:
圖 2. IEEE 算術硬件中的六級流水線
Linux 和集群如何改變了 HPC
在基於集群的計算技術出現之前,典型的超級計算機都是向量處理器,由於它們全部采用專用的硬件和軟件,因此成本通常會超過一百萬美元。
隨著 Linux 和其他免費的集群開放源碼軟件組件的出現和常用硬件處理能力的提高,這種情況現在已經發生了很大的變化。您可以利用少量的成本來構建功能強大的集群,並能夠根據需要來添加其他節點。
GNU/Linux 操作系統(Linux)已經在集群中得到了大量的采用。Linux 可以在很多硬件上運行,並且具有高質量的編譯器和其他軟件,例如並行文件系統和 MPI 實現在 Linux 上都是免費的。采用 Linux,用戶還可以針對自己的任務負載對內核進行定制。Linux 是構建 HPC 集群的一個非常好的平台。
理解硬件:向量機與集群
要理解 HPC 硬件,對向量計算和集群計算進行一下比較是非常有用的。二者是互相競爭的技術(地球模擬器 是一台向量超級計算機,目前仍然是最快的 10 台機器之一)。
從根本上來講,向量處理器和標量處理器都是基於時鐘周期來執行指令的;使它們產生區別的是向量處理器並行處理與向量有關的計算的能力(例如矩陣乘法),這在高性能計算中是非常常見的。為了展示這一點,假設您有兩個雙精度的數組 a 和 b,並且要創建第三個數組 x,比如 x[i]=a[i]+b[i]。
任何浮點操作,例如加法和乘法,都可以通過幾個步驟來實現:
進行指數調整 添加符號 對結果進行取整檢查等向量處理器通過使用 流水線(pipeline) 技術在內部對這些步驟進行並行處理。假設在一個浮點加法運算中有六個步驟(與 IEEE 算術硬件一樣),如圖 2 所示:
圖 2. IEEE 算術硬件中的六級流水線
任何浮點操作,例如加法和乘法,都可以通過幾個步驟來實現:
進行指數調整 添加符號 對結果進行取整檢查等向量處理器通過使用 流水線(pipeline) 技術在內部對這些步驟進行並行處理。假設在一個浮點加法運算中有六個步驟(與 IEEE 算術硬件一樣),如圖 2 所示:
圖 2. IEEE 算術硬件中的六級流水線