近年來,某些涉及復雜、大規模數據處理的軟件領域的復雜程度越來越高。因此,現在在現代硬件上處理需要數小時,有時甚至數天或數周。處理各種模擬、能源分析、計算機輔助設計和計算機輔助制造 (CAD/CAM)、圖形渲染、生命科學、財務和數據轉換的軟件尤其如此。加速這些軟件包中的處理功能不僅可以提高用戶滿意度,而且可以在使用該軟件的組織中實現更高的準確性、更好的決策和更高效的工作程序。因此,軟件加速已成為這些領域軟件組織的重中之重。
一種明顯的軟件加速方法是投資于更強大的計算機硬件。隨著處理器技術的不斷改進,這種方法作為短期決策是有效的。然而,從長遠來看,它往往會失敗,因為處理需求也往往會持續增加,并且在許多情況下結果不符合應用要求。對于大規模部署的軟件,對強大服務器的投資可能非常昂貴。由于這些因素,軟件組織越來越多地尋求并行和分布式處理系統作為加速耗時的計算應用程序的經濟有效的方式。
并行計算選項
使用并行計算來加速高度復雜的計算過程并不是一個新概念。這種方法已經過測試和驗證,并且隨著最近價格實惠的多核和基于通用圖形處理單元 (GPGPU) 的技術的涌入,它現在比以往任何時候都更加重要。
然而,選擇正確的技術來加速耗時的計算過程遠非一個簡單的決定。實現并行或分布式系統的各種選項在最終的加速潛力以及直接開發成本和間接/長期成本(維護、基礎設施、能源等)方面存在很大差異。在考慮將現有代碼遷移到并行或分布式架構的平臺時尤其如此。與更好的替代方案相比,選擇不太理想的系統可能會導致直接和間接成本顯著增加。
選擇正確的并行或分布式架構的部分不確定性在于 耗時過程的多樣性,每個過程都涉及不同的要求和考慮。在為特定流程選擇加速方法時,重要的是要考慮所涉及場景的特征和限制。開發人員可以使用一些參數來表征高度計算的過程,然后選擇適當的加速方法。
CPU 密集型與 I/O 密集型進程
某些類型的應用程序(例如數據倉庫和企業資源規劃)以廣泛的數據訪問為特征,而其他類型的應用程序(例如模擬、渲染和地形分析)通常更加強調算法或受 CPU 限制的復雜性。如果要并行執行的應用程序部分是算法而不是數據密集型(也就是說,它們受 CPU 限制多于 I/O 限制),則在本地網絡上并行執行,或者在某些情況下超過應考慮廣域網 (WAN),因為它有效地利用了可用的硬件資源。對于數據綁定較多且涉及讀取和寫入大量數據的進程,所選擇的架構應解決預期的數據瓶頸,重點是高吞吐量磁盤和網絡系統。
高度隔離與環境相關的過程
此特性指的是要并行執行的進程與主機環境之間的交互級別——特別是要并行運行的應用程序的大小和復雜性(可執行文件、庫和二進制依賴項)、文件系統活動、以及訪問其他環境數據庫,例如注冊表和環境塊。一個高度隔離的應用程序涉及最少的此類交互;然而,依賴于運行時環境的應用程序通常需要并行計算體系結構來為相關計算機預先配置所需的全套軟件和數據文件,或者包括一個虛擬化組件來模擬每個計算節點上的運行環境。存在幾種并行計算環境中的虛擬化方法,
令人尷尬的并行與固有的串行過程(以及介于兩者之間的所有過程)
使構建并行計算架構的開發工作變得復雜的一個問題是應用程序是否適合“切片”成多個可并行運行的獨立可執行部分。一些遺留應用程序需要密集的代碼結構重構才能實現這一點。其他人需要很少或根本不需要工作來準備應用程序以進行并行執行。最常見的例子是批量順序數據處理,其中相同的過程一遍又一遍地執行,每次都使用不同的輸入集。此類示例有時被描述為“令人尷尬的并行”,以表明將它們轉換為并行執行模型的相對簡單性。另一方面,一些應用程序“本質上是串行的”,并不適合并行執行。有了這些應用程序,
高端與經濟高效的加速要求
商業并行計算平臺成本差異很大,高端系統比低端系統高幾個數量級。因此,通過遷移到并行計算環境來定義性能改進預期非常重要。根據定義,通過并行計算加速是一種收益遞減的舉措。在許多情況下,將執行時間減少 50% 到 70% 就足以使應用程序性能發生根本性的變化,而將其提高到 80% 到 90% 的額外價值并不值得投資。雖然低端和中端并行計算系統提供了合理的性能改進,但高端系統提供了 10% 到 20% 的額外加速,但其顯著的額外成本并不總是合理的。
舊版應用程序與新開發的應用程序
出于顯而易見的原因,轉換最初設計用于串行執行的遺留應用程序比設計用于并行執行的新應用程序要耗時和昂貴得多。大多數并行計算平臺都提供允許軟件開發人員修改應用程序代碼以利用該平臺的 API。一些 API 比其他 API 更復雜,建議開發人員具有這些 API 的先前經驗,以便與平臺有效集成。
通過并行計算實現軟件加速的方法
如前所述,商業并行計算平臺的定價在低端和高端產品之間存在很大差異。此外,高端系統需要相當復雜的適配和管理,軟件許可和專業服務的綜合成本使價格差異更大,高端系統的成本有時比簡單系統高幾個數量級。
此外,在將現有應用程序遷移到并行計算架構時,重要的是要考慮適應并行計算平臺(專業服務、編程和質量保證)所涉及的遷移成本。因此,建議選擇一種方法,該方法將提供最少的功能集以充分滿足軟件項目的需求,而無需投資于不必要的昂貴的高端系統。
以下概述檢查了當前的并行計算平臺類別,并解釋了每個類別與上一節中介紹的特征的關系。
使用多核和/或 GPGPU 進行本地并行化
近年來,隨著強大的多核 CPU 和 GPGPU 的引入,在單機內使用并行計算資源加速計算過程的潛力已顯著增長。雖然使用這些技術進行本地并行化的能力仍然受到硬件規格的限制,但在許多情況下,它們提供了一種具有成本效益的低端替代全面分布式系統。并行本地化還可以解決投資某些分布式計算技術所需的虛擬化技術的需要。使用多核和/或 GPGPU 的好處包括:
多核利用率:可以修改 CPU 綁定比 I/O 綁定更多的應用程序,以將不同的可執行部分作為單獨的進程并行運行。當今的現代操作系統 (OS) 可以識別多個 CPU 內核,并且可以自動管理并行進程并將每個進程發送到使用不同的內核運行,從而實現有效的并行化。在具有簡單并行分離潛力的應用中,這通常是一種成功的方法。這種方法的主要問題是硬件限制,因為每個系統中的內核數量是有限的,并且通常所有進程只共享一個磁盤驅動器。但是,可以使用 IncrediBuild-XGE(圖 1)之類的系統來避免這些問題,該系統允許并行使用多個內核的應用程序自動使用本地網絡中的所有可用內核。
GPGPU:這些組件正在迅速興起,成為使用 PC 和服務器中現有并行資源實現加速的另一種方式。GPU 最初設計用于與一般處理任務并行處理面向圖形的處理任務,現在可用于處理非圖形處理任務,硬件供應商針對具有多個強大 GPU 的系統來推廣這種方法。基于 GPU 的并行計算在線程級別執行(每個進程有多個并行線程,每個線程使用不同的 GPU)并涉及使用專用 API,例如 OpenCL 和 CUDA,這需要專業知識,有時還需要大量的開發工作。
圖 1:使用進程虛擬化將進程分配到本地網絡上的空閑資源。
內部(非通用)分布式計算實現
在涉及簡單并行化挑戰的場景中,其中目標應用程序高度孤立、令人尷尬地并行(或接近它),并且可以在不需要投資高端基礎設施的情況下獲得合理的加速結果,開發一個特定于應用程序的應用程序可能是可行的分布式計算實現。最簡單的示例將涉及在單獨的預定義服務器上并行運行應用程序的不同部分。目標應用程序的相對簡單性可能使創建專有系統所涉及的開發和維護成本與改編商業系統相當,甚至更便宜。
這種方法的另一個優點是在開發專有系統時實現了高度的靈活性。然而,對于除了最簡單的場景之外的幾乎任何場景,在內部開發并行計算實現可能會導致昂貴的持續維護工作和處理通用系統已經解決的問題的復雜性,例如錯誤處理、可用性、可伸縮性、動態資源分配、管理要求和報告。
計算集群
計算集群是一組專用于共享應用程序工作負載的服務器。集群中的服務器運行同構環境,包括最新版本的運行時環境(應用程序和二進制依賴項)和對 I/O 文件的共享訪問。擁有諸如計算集群之類的專用計算環境消除了對虛擬化的需求(參見上一節關于高度隔離與環境相關的進程),并提供了對計算集群的有效集中管理。這種方法的缺點是:
維護運行該軟件的昂貴服務器的專用場會產生額外成本,并且不會利用連接到網絡的現有硬件中未使用的計算能力。
集群通常專用于單個應用程序,不能支持多個應用程序。
將現有應用程序遷移到計算集群平臺通常涉及大量軟件開發以使應用程序適應使用集群 API。
基于集群的系統可以與高吞吐量存儲以及網絡硬件和軟件相結合,以優化具有高端性能要求的數據綁定應用程序的性能。
網格計算
網格計算在某種意義上類似于集群計算,它涉及一組致力于解決一個共同問題的計算機,但不同于集群計算,它允許在同一個網格中混合異構系統(不同的操作系統和硬件)。網格系統也不限制對單個應用程序的使用,并且能夠對連接到網格的系統進行更分布式的控制和管理。最后,就所涉及的節點數量而言,網格允許最大規模的分布式系統架構,大型系統有時會達到數千個互連節點。
一些網格系統不僅利用專用服務器的綜合計算能力,還允許 PC 和工作站在運行其他計算任務時為網格貢獻空閑的處理器周期。例如,使用 Microsoft Word 等文字處理工具編寫文檔的用戶可以同時將 80% 到 90% 的空閑處理能力貢獻給在網格上運行的計算任務。這種同時利用可以顯著提高網格的潛在計算能力;然而,為了實現這一點,在網格上運行的應用程序需要修改以使用網格系統的 API。應用程序對環境的依賴程度越高,應用程序代碼的更改就越廣泛,以允許其利用非專用機器上的可用計算能力。
網格計算系統通常是具有最全面的特性集和功能的分布式并行處理產品。因此,它們在所需的專業知識方面也往往相當復雜,無論是在開發工作(將現有代碼遷移到平臺 API)還是在持續的維護和管理工作中。因此,建議在考慮基于網格的方法時評估這些方面。
網格系統可以是商業的或開源的。開源系統成本較低,但往往會留下項目未涵蓋的開放端(調度、管理和物理實施方面),并且需要內部開發或與項目開發社區合作。因此,仔細評估完成開源系統中缺少的組件所涉及的總擁有成本非常重要。一些商業網格計算產品提供了更完整的功能集。
網格計算產品往往處于并行分布式系統價格范圍的最高端。與基于集群的系統一樣,基于網格的系統可以與高端產品相結合,以優化網絡和存儲瓶頸。
公共計算云
亞馬遜的 EC2 和微軟的 Azure 平臺等公共云是一種計算形式,在這種計算形式中,云用戶通過 Internet 從虛擬化計算場購買計算能力,而不是在存儲在組織位置的計算機上運行的私有云。支付模式靈活,允許用戶根據需求增減算力,只為隨時間使用的算力付費。這大大減少了對現場硬件和基礎設施進行長期投資的需要。公有云傳統上用于業務應用程序,強調負載平衡要求而不是加速計算過程,但公有云高性能計算系統越來越受歡迎。
公有云高性能計算的優勢包括:
靈活的按需付費許可
無需投資和維護專用硬件
不要求高端性能的應用的有效選擇
缺點包括:
隨著時間的推移,服務成本可能會很高
當敏感數據從組織的服務器傳輸到 Internet 時會引發安全問題
在某些情況下,通過 WAN 連接上傳和下載大量數據的延遲可能會造成性能瓶頸
需要維護虛擬系統映像或修改平臺 API 的代碼或兩者兼而有之,這可能非常耗時且需要專業知識
創建對公共云供應商和開放 Internet 連接可用性的依賴
應對異質性挑戰的新方法
在加速與計算環境交互的應用程序(讀/寫文件、二進制可執行文件、動態鏈接庫以及讀取注冊表和環境值)時,傳統分布式計算系統面臨挑戰。
一種方法是專門為分布式應用程序預裝所需的運行時環境和文件的計算集群。這可以滿足應用程序的要求,但需要對專用服務器進行投資,并且不能利用連接到網絡的現有 PC 和工作站中可用的計算能力。它還需要維護集群并確保它始終運行最新版本的運行時和數據環境。
虛擬化允許服務器通過每次加載不同的系統映像來按需更改運行時環境,從而提高可管理性并增加靈活性。但是,虛擬映像初始化形成了一個額外的瓶頸,并且與集群系統一樣,它不能有效地利用現有計算機上有時大量的空閑處理能力。
一些網格平臺提供的 API 在集成到應用程序代碼時允許使用遠程機器資源,而無需對這些機器進行大量預配置。在某些情況下,這有效地使非專用機器能夠連接到電網并貢獻它們的空閑處理能力。但是,這僅適用于某些場景,并且在大多數情況下需要對應用程序代碼進行大量修改。
通過像 IncrediBuild-XGE 這樣的平臺進行流程虛擬化是一種新的并行分布式計算方法,它通過將基于集群的系統的遷移和部署相對容易性與網格系統的計算強度和靈活性相結合來實現軟件加速。
使用進程虛擬化,啟動器機器發送進程以在連接到網絡的其他機器上并行執行。然后,這些進程將與當時在操作系統上運行的任何其他進程一起在這些機器上運行,但將在一個特殊的自包含虛擬環境中運行,該環境完全模擬啟動器的環境,包括已安裝的應用程序、文件系統、注冊表和環境。這些虛擬進程將僅使用遠程機器的空閑處理能力,以免干擾與網格活動無關的并發運行進程。資源協調模塊還確保隨時將進程分配給系統中最強和最可用的節點。
由于虛擬化是在進程級別執行的,因此無需為平臺編寫代碼并將特定于平臺的 API 集成到應用程序源代碼以將應用程序遷移到網格。相反,IncrediBuild-XGE 使用一個緊湊的 XML 定義文件,該文件指定哪些進程應該被外包給網格上的遠程計算機,哪些應該始終在啟動器上運行。與需要大量修改源代碼的系統相比,這使得網格啟用速度明顯加快。例如,轉換已經使用本地并行化(在單臺機器上并行 CPU 或內核中運行的進程)的應用程序通常需要不到一個小時的時間。由于不再需要維護虛擬映像庫或集群環境,因此也降低了持續維護成本。
最終結果是一個分布式處理應用程序加速平臺,可有效加速新舊應用程序,實現快速集成并降低維護成本。
審核編輯:郭婷
-
cpu
+關注
關注
68文章
10879瀏覽量
212184 -
計算機
+關注
關注
19文章
7519瀏覽量
88202 -
虛擬化
+關注
關注
1文章
374瀏覽量
29818
發布評論請先 登錄
相關推薦
評論