高性能計(jì)算:現(xiàn)代系統(tǒng)與應(yīng)用實(shí)踐
定 價:149 元
叢書名:高性能計(jì)算技術(shù)叢書
- 作者:(美) 托馬斯·斯特林, (美) 馬修·安德森, (美) 馬切伊·布羅多維茨著
- 出版時間:2020/3/1
- ISBN:9787111645795
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP38
- 頁碼:571
- 紙張:膠版紙
- 版次:1
- 開本:16K
本書由戈登·貝爾獎獲得者及其團(tuán)隊(duì)撰寫,為高性能計(jì)算的入門讀者構(gòu)建了多路徑的學(xué)習(xí)曲線,夯實(shí)基礎(chǔ)的同時注重培養(yǎng)實(shí)踐技能。書中首先介紹基礎(chǔ)知識,包括執(zhí)行模型、體系結(jié)構(gòu)、性能度量、商品集群等;接著講解吞吐量計(jì)算、共享內(nèi)存計(jì)算、消息傳遞計(jì)算和加速GPU計(jì)算,圍繞這些模型的概念、細(xì)節(jié)及編程實(shí)踐展開討論;然后引導(dǎo)讀者構(gòu)建重要的程序,涵蓋并行算法、庫、可視化及性能優(yōu)化等;最后,考慮真實(shí)系統(tǒng)環(huán)境,討論了操作系統(tǒng)、大容量存儲、文件系統(tǒng)及MapReduce算法等。
本書的目的
高性能計(jì)算(HPC)是一個多學(xué)科領(lǐng)域,結(jié)合了硬件技術(shù)和架構(gòu)、操作系統(tǒng)、編程工具、軟件以及最終用戶問題和算法。為了有能力參與HPC活動,需要一些必要的概念、知識和技能,通常需要在相關(guān)機(jī)構(gòu)進(jìn)行學(xué)習(xí),這些機(jī)構(gòu)擁有專家、設(shè)施和任務(wù)目標(biāo),但這樣的機(jī)構(gòu)并不太多。無論一個人的目標(biāo)是與特定的最終用戶領(lǐng)域(如科學(xué)、工程、醫(yī)學(xué)或商業(yè)應(yīng)用)相關(guān)聯(lián),還是專注于使超級計(jì)算有效地支持系統(tǒng)技術(shù)和方法,入門級從業(yè)者必須緊密結(jié)合廣泛的、清晰的且相互關(guān)聯(lián)和依存的領(lǐng)域,而且需要了解其協(xié)同作用才能領(lǐng)悟這些專業(yè)知識。學(xué)習(xí)材料可能很容易就找到十幾本書和手冊,但即使它們組合在一起,也無法提供充分體現(xiàn)整個領(lǐng)域的必要視角,無法成為指導(dǎo)學(xué)生獲得足夠?qū)I(yè)知識的有效途徑。
本書旨在彌合無數(shù)狹隘的焦點(diǎn)問題來源與跨越和互連各種學(xué)科(構(gòu)成HPC領(lǐng)域)的單一來源需求之間的差距。它是一本入門級讀物,需要最少的預(yù)備知識,提供了對這些領(lǐng)域及其相互影響(使超級計(jì)算成為一個跨學(xué)科領(lǐng)域)的完整理解。從實(shí)踐的角度來看,本書針對并行編程、調(diào)試、性能監(jiān)控、系統(tǒng)資源使用和工具以及結(jié)果可視化等有用的技術(shù)來培養(yǎng)讀者的特定技能。這些技能涉及的基礎(chǔ)概念相對而言變化較小,而關(guān)于硬件和軟件系統(tǒng)組件的詳細(xì)屬性的知識更有可能隨著時間的推移而發(fā)展。
本書支持單學(xué)期課程,以便初學(xué)者為超級計(jì)算中的各種角色做好準(zhǔn)備,實(shí)現(xiàn)他們所選擇的職業(yè)目標(biāo)。它適合致力于使用超級計(jì)算機(jī)來解決科學(xué)、工程或社會領(lǐng)域等應(yīng)用需求的未來的計(jì)算科學(xué)家。它為系統(tǒng)設(shè)計(jì)人員和工程師提供硬件和軟件的可能目標(biāo)功能的基本描述。對于希望研究超級計(jì)算本身的研究人員,作為傳統(tǒng)系統(tǒng)和實(shí)踐的介紹性演示,以及作為這個激動人心的探索領(lǐng)域面臨的挑戰(zhàn)的代表,本書也是一本基礎(chǔ)讀物。本書同樣適合那些為超級計(jì)算環(huán)境提供技術(shù)支持的人員,例如數(shù)據(jù)中心和系統(tǒng)管理員、操作員和管理人員。在提供給未來的專業(yè)人員時,本書可以以多種方式來使用。它可為超級計(jì)算提供基礎(chǔ)信息,為課堂教學(xué)提供一系列講座內(nèi)容。它使用大量示例來說明實(shí)際操作方法,所有這些都可以在并行計(jì)算機(jī)上執(zhí)行,以及在實(shí)踐時指導(dǎo)學(xué)生進(jìn)行練習(xí)。它通過易于學(xué)習(xí)的風(fēng)格明確了技能組合和訓(xùn)練方法。概念以詳細(xì)且易于理解的形式呈現(xiàn),以揭示方法背后的“原因”,并根據(jù)基本事實(shí)、相關(guān)因素和敏感性協(xié)助未來用戶進(jìn)行決策。最后,本書在同一上下文中統(tǒng)一了與多個子學(xué)科相關(guān)的許多事實(shí),這些子學(xué)科組合構(gòu)成了超級計(jì)算領(lǐng)域。
本書的組織結(jié)構(gòu)
本書可以滿足讀者最初的好奇心、興趣和參與HPC活動所需技能要求,通過學(xué)習(xí)本書,可以最終搭建起知識、能力和熟練程度之間的橋梁。對于追求各種潛在專業(yè)路徑的人來說,本書是一個起點(diǎn),其中這些路徑在先進(jìn)系統(tǒng)的性質(zhì)和用途方面具有共同的基礎(chǔ)。無論讀者是否最終能夠搭建硬件或軟件系統(tǒng),他們都能使用此類系統(tǒng)作為追求科學(xué)、工程、商業(yè)或安全等其他領(lǐng)域的關(guān)鍵工具來進(jìn)行研究,從而有助于設(shè)計(jì)和推動支持當(dāng)前HPC發(fā)展的未來方法,或管理、經(jīng)營和維護(hù)供其他用戶使用的HPC系統(tǒng)。本書的各個章節(jié)構(gòu)成了一個無縫的主題流,每個主題都可以從前導(dǎo)主題中受益,同時也為后續(xù)主題提供基礎(chǔ)。因此,本書按HPC使用的早期基本技能的順序講解主要主題,即使有可能過早涉及需要深入理解這些復(fù)雜系統(tǒng)及其使用才能掌握的基礎(chǔ)概念。必要時,書中會給出主題的介紹性描述,其中包含足夠的信息以幫助讀者了解其他相關(guān)的主題,但只在后面的章節(jié)中進(jìn)行更深入的回顧。通過學(xué)習(xí)多樣化的相互關(guān)聯(lián)的主題領(lǐng)域,讀者的理解力和能力可以逐步增強(qiáng)。
本書是關(guān)于計(jì)算性能的。對于當(dāng)前和下一代系統(tǒng),這意味著可以利用工作負(fù)載并行性來實(shí)現(xiàn)可擴(kuò)展性和管理數(shù)據(jù)的方法,從而實(shí)現(xiàn)操作效率。下面列出了4個主要的總體主題領(lǐng)域。
系統(tǒng)硬件架構(gòu)和支持技術(shù)。
編程模型、接口和方法。
系統(tǒng)軟件環(huán)境、支持和工具。
并行算法和分布式數(shù)據(jù)結(jié)構(gòu)。
基于邏輯流程,本書給出了一目了然的教學(xué)組織結(jié)構(gòu)。但HPC還有另一個方面:組織與協(xié)調(diào)并行性和數(shù)據(jù)管理的替代策略,以及有助于每個組件層的角色。
本書介紹了4種主要策略。
作業(yè)流并行性、吞吐量或容量計(jì)算。
順序進(jìn)程的通信或消息傳遞。
多線程共享內(nèi)存。
SIMD或圖形處理單元(GPU)加速。
從教學(xué)角度來看,作者希望傳達(dá)三種信息以促進(jìn)學(xué)習(xí)過程,并希望也能讓讀者得到享受;A(chǔ)層面是概念,建立對基本原則的理解以幫助學(xué)習(xí)HPC的形式和功能。接下來會介紹許多基本信息及文化(什么人、什么事情、什么時候),這些事實(shí)構(gòu)成了必要的知識集合,提供了該領(lǐng)域的框架。最后講授一些實(shí)踐技能。誠然,這三個層面彼此并不交叉。在每種情況下,本書都將案例的所有材料以這三種形式之一的方式來呈現(xiàn)。例如,標(biāo)題以“的基礎(chǔ)”結(jié)尾的章節(jié)(例如“OpenMP的基礎(chǔ)”)被精心設(shè)計(jì)為具有教程演示風(fēng)格的模塊,以便簡化學(xué)習(xí)。雖然概念和知識的混合是不可避免的,但是我們會單獨(dú)強(qiáng)調(diào)其中的一項(xiàng)。這種區(qū)別的重要性在于,雖然關(guān)于這個快速發(fā)展的領(lǐng)域的大部分知識將會改變,甚至在某些情況下已經(jīng)過時,但基本概念隨著時間的推移而保持不變,即使某些特定機(jī)器或語言的細(xì)節(jié)可能變得無關(guān)緊要,但這些知識也將幫助讀者加強(qiáng)對相關(guān)領(lǐng)域的長期理解。
本書首先根據(jù)4個獨(dú)立的并行計(jì)算模型來組織章節(jié),然后根據(jù)基本概念對每個模型展開討論,重點(diǎn)關(guān)注支持它們的系統(tǒng)體系結(jié)構(gòu)的相關(guān)知識,以及針對每類系統(tǒng)進(jìn)行編程的相關(guān)技能。在準(zhǔn)備本書內(nèi)容時,一些初始材料(包括介紹性章節(jié))構(gòu)成了本書的基本前提和背景。4個并行計(jì)算模型中的每一個都是根據(jù)概念、知識細(xì)節(jié)和編程技巧來描述的。雖然本書涵蓋了理解和編程HPC系統(tǒng)所需的大部分有用信息,但忽略了與環(huán)境和工具相關(guān)的一些交叉主題,這些主題也是系統(tǒng)完整上下文的一個重要甚至普遍的方面。但是,對這些主題的介紹超出了初學(xué)者學(xué)習(xí)的范圍。畢竟,本書目的是為讀者提供高效的工作能力,以便在專業(yè)工作場所利用超級計(jì)算機(jī)實(shí)現(xiàn)各種目的。因此,本書以有效的順序給出了許多重要且有用的工具和使用方法。最后,讀者可以清楚地了解HPC應(yīng)用的廣泛領(lǐng)域,并且在這個背景下選擇貼合本書的主題。這可以用來指導(dǎo)未來的計(jì)劃,以及根據(jù)讀者的最終職業(yè)目標(biāo)選擇更高級的課程。本書的總體結(jié)構(gòu)和流程總結(jié)如下。
Ⅰ.緒論和基本思想(第1~4章)
這些章節(jié)介紹基礎(chǔ)知識,主要包括:執(zhí)行模型,體系結(jié)構(gòu)的概念、性能和并行度量,以及并行計(jì)算系統(tǒng)(商品集群)的主流類型等。通過使用專門的基準(zhǔn)測試程序來提供運(yùn)行并行程序的初次實(shí)驗(yàn),這些基準(zhǔn)測試程序可以在不同的HPC系統(tǒng)之間進(jìn)行測量和比較。正是在這些章節(jié)中,我們首先為讀者營造了一種歷史感,幫助初學(xué)者了解對領(lǐng)域有貢獻(xiàn)的思想演變過程以及該領(lǐng)域的文化。
Ⅱ.針對作業(yè)流并行的吞吐量計(jì)算(第5章和第11章)
在利用并行計(jì)算機(jī)的最簡單方法中,廣泛使用的吞吐量計(jì)算(也稱為容量計(jì)算)足以滿足許多目標(biāo)和工作流?梢宰C明它是效率最高的,因?yàn)樗ǔ1憩F(xiàn)出最粗粒度的任務(wù)和最少的控制開銷。我們將介紹管理作業(yè)流工作負(fù)載時廣泛使用的中間件,如SLURM和PBS,包括獨(dú)立作業(yè)和相關(guān)集的管理等案例,例如參數(shù)掃描和蒙特卡羅模擬應(yīng)用程序。
Ⅲ.共享內(nèi)存的多線程計(jì)算(第6章和第7章)
用戶并行處理的主要模型之一是共享內(nèi)存上下文的任務(wù)(或線程)并行。所有用戶數(shù)據(jù)都可以由任何用戶線程直接訪問,并且順序一致性由硬件高速緩存一致性來保證。本書的這部分描述了這種并行執(zhí)行模型、共享內(nèi)存多處理器的特性以及OpenMP并行編程語言。
Ⅳ.消息傳遞計(jì)算(第8章)
對于可在單個應(yīng)用上使用100萬個或更多個處理器核的真正可擴(kuò)展并行計(jì)算而言,分布式內(nèi)存架構(gòu)和順序進(jìn)程執(zhí)行模型間的通信是主流方法。本書的這部分建立在一些主題的基礎(chǔ)之上,包括用于SMP的節(jié)點(diǎn),以及先前針對吞吐量計(jì)算描述的集群方法等,并添加了消息傳遞、聚合操作和全局同步的語義。這一章介紹了消息傳遞接口(MPI),這是最廣泛用于可擴(kuò)展科學(xué)和工程應(yīng)用的編程接口。
Ⅴ.加速GPU計(jì)算(第15章和第16章)
對于某些廣泛使用的數(shù)據(jù)流模式,專用核心的更高級結(jié)構(gòu)可以提供卓越的性能和能源效率。這種在最一般意義上被分類為“加速器”的子系統(tǒng)可以多次加速應(yīng)用程序,有時可以獲得超過一個數(shù)量級的加速。這些加速器也被稱為GPGPU,它們通常采用附加陣列處理器的形式,但在某些情況下集成在單插槽封裝甚至相同的芯片中。本書的這部分描述了GPU結(jié)構(gòu)、可用產(chǎn)品和編程,重點(diǎn)是編程接口OpenACC。
Ⅵ.構(gòu)建重要的程序(第9、10、12~14章)
至此,讀者要非常了解HPC的主要模式,了解主要編程接口的規(guī)則,并具有在這些框架內(nèi)使用基本并行函數(shù)的實(shí)踐經(jīng)驗(yàn)。但是對于更復(fù)雜、更尖端、更有用或者說更專業(yè)的超級計(jì)算程序來說,還需要許多其他方法和工具。本書的這部分會將HPC新手從初學(xué)者級別提升到有一定能力的學(xué)徒級別。這里介紹了幾個關(guān)鍵主題和技能,幫助學(xué)生掌握關(guān)于系統(tǒng)設(shè)計(jì)和應(yīng)用的必要能力。在這些技能之中,首要的是針對各種需求的各類并行算法。其中許多已經(jīng)在稱為“庫”的集合中提供了,如果使用得當(dāng),它們可以為應(yīng)用程序開發(fā)人員節(jié)省大量時間。要使程序從初稿發(fā)展到最終正確有效的形式,需要采用并行調(diào)試的組合方法,以通過操作監(jiān)控來確定答案的正確性和性能優(yōu)化。這里介紹了有關(guān)工具和方法,包括所需的詳細(xì)技能組合。最后,HPC運(yùn)行往往會在單次執(zhí)行中產(chǎn)生大量的數(shù)據(jù),多達(dá)太字節(jié)(terabyte,即1012字節(jié))或拍字節(jié)(petabyte,即1015字節(jié))。從大量數(shù)據(jù)集生成圖像甚至視頻的科學(xué)可視化,是我們了解計(jì)算的模擬結(jié)果的唯一實(shí)用方法。本部分提供了用于此目的的廣泛使用的工具示例,并對其基本技術(shù)進(jìn)行了說明,使讀者能掌握用法。
Ⅶ.使用真實(shí)系統(tǒng)(第11、17~20章)
HPC系統(tǒng)并不是在真空中運(yùn)行的,如果不與外界連接則沒有什么價值。在本書中,讀者可以看到系統(tǒng)環(huán)境的必要部分,這些章節(jié)對操作系統(tǒng)及其與外部世界的接口進(jìn)行了有針對性的全面描述。特別是在硬件和軟件級別描述了大容量存儲,它通過文件系統(tǒng)持久存儲大塊數(shù)據(jù)。作為使用文件系統(tǒng)的示例,我們詳細(xì)描述了MapReduce算法,它對于大數(shù)據(jù)問題非常流行。文件系統(tǒng)還可通過檢查點(diǎn)-重啟方法提高可靠性。在系統(tǒng)可能發(fā)生故障的情況下,該技術(shù)周期性地將應(yīng)用程序的中間數(shù)據(jù)狀態(tài)的快照存儲在大容量存儲器上。如果發(fā)生這種情況,應(yīng)用程序可以不必從頭開始重新啟動,而是在最后一個已知的良好檢查點(diǎn)重新啟動,從而節(jié)省了大量時間來獲得解決方案。
Ⅷ.下一步(第21章)
到了這里,讀者已經(jīng)學(xué)完了關(guān)于HPC的介紹性內(nèi)容,但是接下來去哪里?這些系統(tǒng)及其應(yīng)用領(lǐng)域還有很多,可以納入任何單獨(dú)的教科書中,本書已經(jīng)做了很好的鋪墊工作。學(xué)生可以清楚地了解前面的內(nèi)容,并根據(jù)個人的興趣或目標(biāo),明確下一步要了解哪些方面。這一章列出了超出本書范圍的HPC領(lǐng)域,并突出了與不同專業(yè)目標(biāo)相關(guān)的不同領(lǐng)域。但是接下來還有另一個方面:HPC領(lǐng)域會走向哪里?因?yàn)檫@一領(lǐng)域正在迅速變化,本章最后概述了HPC面臨的挑戰(zhàn)及推動它繼續(xù)發(fā)展的機(jī)遇。
目標(biāo)讀者
本書面向具有不同背景的廣大讀者,希望每個人都能夠成功地學(xué)習(xí)這些主題。具有C語言編程知識是最基本的先決條件,并且需要熟悉類UNIX操作系統(tǒng),而且能操作。但據(jù)了解,這些要求對某些人來說可能過于嚴(yán)格。因此,本書的附錄包括兩個教程。附錄A講解C編程語言,包含足夠多的細(xì)節(jié)知識。但它并不是計(jì)算機(jī)編程的入門讀物,因?yàn)槲覀冾A(yù)期讀者有使用Python、Java、Fortran或MATLAB等其他編程語言編寫程序的經(jīng)驗(yàn)。附錄B提供了完成本書中所有任務(wù)所需的用戶界面相關(guān)知識和技術(shù)。
本書可為廣泛的讀者群體提供服務(wù),包括(但不限于):
研究科學(xué)家。
科學(xué)、工程和社會領(lǐng)域的計(jì)算科學(xué)家。
HPC研究人員。
未來的工程師和HPC系統(tǒng)開發(fā)人員。
HPC系統(tǒng)管理員和數(shù)據(jù)中心經(jīng)理。
如何使用本書
本書旨在根據(jù)特定讀者的需求,提供多種不同的學(xué)習(xí)和講授方法。
要想一開始就對HPC有全面深入的了解,可以從頭到尾閱讀本書。本書章節(jié)的順序是經(jīng)過精心組織的,每章都建立在前幾章的基礎(chǔ)上,涉及相關(guān)的概念、知識和技能。文中的示例足以代表這些知識點(diǎn),以便讀者順利掌握。
另一方面,可以閱讀以“的基礎(chǔ)”為標(biāo)題的章節(jié),以將本書作為一本教程來學(xué)習(xí)。這些章節(jié)旨在以最少的背景和上下文信息培養(yǎng)讀者的技能。
通過選擇關(guān)鍵章節(jié)可以實(shí)現(xiàn)重點(diǎn)閱讀。本書呈現(xiàn)了4種并行計(jì)算模型:吞吐量、消息傳遞、共享內(nèi)存和基于加速器。但在某些情況下,讀者或教育工作者只需要了解其中一個,因此讀者可能只需要沉浸在所需章節(jié)的子集中。例如,課程可以使用OpenMP或MPI,但不需要同時使用兩者。對于基本的作業(yè)流并行,這兩者都可以跳過,而是專注于SLURM或PBS進(jìn)行吞吐量計(jì)算。