早安。ACM A.M. Turing 獎是我們專業領域的最高榮譽。它旨在表彰那些顯著改變整個計算實踐的創新,通常被稱為「計算界的諾貝爾獎」。圖靈獎包含一百萬美元的現金獎勵。今年,我們都非常高興得知 SC 自己的 Jack Dongarra 榮獲圖靈獎,以表彰他在 HPC 領域的開創性工作。近 40 年來,Moore's law 為硬體性能帶來了指數級的增長。在此期間,雖然大多數軟體未能跟上這些硬體進步的步伐,但高性能數值軟體做到了。請與我們一起聆聽 Jack Dongarra 的演講,他是 2021 ACM A.M. Turing 獎得主,因其對數值演算法和函式庫的開創性貢獻,使高性能計算軟體能夠在過去四十多年裡跟上硬體指數級改進的步伐。
我認為我在這個領域有三個主要貢獻。第一個是開發數學軟體套件,特別是線性代數軟體。我們通常看到計算機在十年內會發生重大變化,而這些重大變化帶來了三個數量級的性能提升。每一次架構變化確實都需要重寫、重新設計、重新研究演算法的開發方式。這可能需要我們開發新的方法、新的演算法來有效利用該架構。一種看待它的方式,或許是比較粗糙的方式,就是硬體架構師將他們的計算機「扔」給我們,我們則必須設計、研究該硬體,試圖找出如何將我們的軟體和演算法與該硬體匹配的最佳方式。
我要說我貢獻的第二件事是開發 MPI (Message Passing Interface) 介面的能力。這是一個由社群開發的、事實上的標準,旨在提供一個機制,允許編寫可攜式程式。因此,我可以在一台機器上運行一個程式,然後輕鬆地將其移到另一台並行機器上,可能來自另一家供應商,並且該程式可以在那台機器上運行,而無需任何更改。
第三件事是性能評估和基準測試領域。當我在 Argonne National Laboratory 工作時,參與一個名為 LINPACK 的專案,我們正在編寫那個軟體套件,並且在該軟體的使用者手冊附錄中,我編寫了一個表格,測量了解決線性方程式系統的性能,矩陣大小為 100。
我在德國有一位同事,Hans Werner Meuer,他在 University of Manheim。他有一份根據理論峰值性能排名的最快計算機列表。於是 Hans 和我,以及 Erich Strohmayer,一起編製了這個包含 500 台最快計算機的列表,我們稱之為 TOP500。我想它是在 1993 年發布的。自那以後,它每年發布兩次,是一種衡量和觀察性能隨時間變化的有趣方式。它顯示了趨勢,顯示了事物如何演變,顯示了我們最快的計算機,也就是排名第一的計算機,一直到剛好進入榜單的機器。
不過 TOP500 列表很有趣,你知道嗎,1993 年最快的計算機是 Los Alamos National Laboratory 的一台計算機,那是一台名為 Thinking Machines 的機器,那台 Thinking Machines 計算機有一千個處理器。如今,我的筆記型電腦,我主要用來閱讀電子郵件的東西,都比那台用於核武器模擬的計算機更快。所以你可以看到在如此短的時間內發生的變化,展望未來,我們將看到同樣的重大進步。
Jack Dongarra 幫助創建的標準,例如 MPI、LINPACK 基準測試和 TOP500 超級計算機列表,支撐著從天氣預報到氣候變化,再到分析大規模物理實驗數據等計算任務。
我當時是一名研究生,在 Los Alamos National Laboratory 工作。那時候 CRAY-1 是 Los Alamos 擁有的超級計算機。事實上,我當時在那裡運行 LINPACK 基準測試,試圖捕捉那台計算機的速度。測試的一部分還包括檢查你是否得到了正確的答案,根據那個檢查,我得到了錯誤的答案。所以當然,我以為我的程式裡有一個 bug。接下來的幾天,我都在試圖理解我哪裡出了錯。
最後我鼓起勇氣去問一位硬體工程師,我說我在這裡得到了錯誤的結果,我想知道硬體是不是可能在這裡犯了錯誤。事實上,硬體在某個特定指數的計算中確實犯了一個錯誤,它給出了錯誤的結果。我認為這是一個重要的方面,你知道嗎,我們應該對我們在計算機上運行的解決方案有一定的感覺,以及這些解決方案與我們預期結果的匹配程度。如果沒有那種直覺,我想我們在發現新的解決問題方法,或者更快、更好、更準確的解決問題方法時,可能會遇到很多問題。
這是我認為驅動我進行研究的事情,關於開發新演算法以及最終在計算機上運行的軟體。
欲了解更多關於 2021 ACM A.M. Turing 獎得主 Jack Dongarra 的資訊,請參閱 2021 年 6 月號的 Communications of the ACM。SC22 很榮幸能舉辦官方的 ACM A.M. Turing 演講。
任何來過 SC 會議的人都知道,這個會議確實是獨一無二的。其展覽包括來自數十個研究機構和數百家商業企業的演示,代表了高性能基礎設施和服務的全面範圍。SC 也是獨一無二的,因為它匯聚了來自大學、公司、政府機構和研究組織的各類令人驚嘆的人們。今天在座的各位,我們許多在 HPC 領域工作的人,在自己的工作場所相對孤立。使用 HPC 的人可能只有寥寥數人。這意味著每年 SC 為我們提供了與 HPC 社群其他成員會面和學習的最大機會。
今天的圖靈演講,Cherry Culhane 和她的團隊邀請 Jack Dongarra 講述他的故事,因為這也是 HPC 的故事,也是 SC 的故事。從 1988 年的第一屆 SC 會議開始,Jack 就利用 SC 來獲得對他想法的反饋,啟動新的合作,並分享他令人驚嘆的成果。他的故事也顯示了個人透過尋找並與來自其他組織、其他領域甚至其他大洲的合作者建立夥伴關係,所能產生的非凡影響。
我代表 SC 領導團隊發言,希望聽到 Jack 的故事能給你們帶來新的想法,並鼓勵你們本週找到一些令人興奮的新合作。
請與我一起歡迎 Jack Dongarra 上 SC22 舞台。
[掌聲] [笑聲] [掌聲] [笑聲] [掌聲] [笑聲] 哦 [掌聲] 我沒想到會這樣 [笑聲] 哇,這是... 真是個介紹,哇,我從未有過。
歡迎,大家好,SC22!很高興來到這裡,和你們一起在 Dallas,而且是親自到場。你知道,這對我們來說真的是 HPC 的返鄉日 (homecoming),能親自來到這裡真是太好了。
我必須說,能成為 ACM Turing 獎的最新得主,是巨大的榮幸,而且過去許多人也曾獲此殊榮。我想特別感謝我的導師、同事、一代又一代的博士後、學生、朋友,以及我在 University of Tennessee 的員工,他們都朝著正確的方向推動,才讓我獲得這項殊榮。
我對我們創建的數值軟體函式庫、建立的標準以及部署的性能開發工具感到無比自豪。我認為這個獎項是電腦科學界對 HPC 在計算中的重要性,以及我們對電腦科學的集體貢獻的認可。所以,恭喜我們,讓這一切成為現實。
接下來,我想開始了。
我想講述一個關於我家的故事。我沒有告訴很多人這個故事,但我所有的祖父母以及我的父親都出生在 Sicily。我的祖父母來自 Sicily 中部的兩個小村莊,一個叫 Villa Rosa,另一個叫 Santa Catarina。我有機會去拜訪了那個地方,那些地方你知道,多山多石,這些非常非常小的城鎮、村莊給人一種隔絕感。我祖父在那裡的時候,實際上在一個硫磺礦工作。他們決定離開。我祖父 42 歲時帶著家人去了 Naples,登上了一艘船,駛向 Ellis Island。那是 1929 年。他口袋裡有 25 美元,充滿了對那裡生活的希望和夢想。我的父親當時 10 歲,這是他離開時的移民卡,這是他的體檢記錄,說他可以安全地進行旅程。
我的父母,他們受的教育非常基礎,事實上他們沒有完成高中,他們沒有上高中。他們確實理解教育、大學的重要性,他們確實理解努力工作和成為好榜樣。從小學到高中,我在數學和科學方面表現不錯,但在閱讀和拼寫方面我真的很掙扎。後來作為成人,我才知道我是閱讀障礙 (dyslexic)。
我想成為一名高中老師,我去了我長大的地方 Chicago 的一個地方,那是他們培養 Chicago 公立學校系統老師的地方。所以我的夢想是成為一名高中老師。大學的最後一個學期,我被鼓勵申請 Argonne National Laboratory 的一個職位。這是一個你會與科學家共度一個學期的職位,我被選中了這個專案。我想當時我在 Argonne 加入了大約 30 位其他大學生,在 Argonne 的數學和電腦科學部門工作,與 Brian Smith 合作開發數學軟體。那是我在那裡的一個轉變性的學期。我意識到我對那類事情,也就是開發軟體、數學軟體和線性代數有熱情。由於那次經歷,我從那時起一直留在 Argonne,直到 1989 年。
高性能計算的演進與軟體發展
從標量到向量計算機
我開始工作時的高性能系統是這兩台機器:一台 CDC 7600,那是一台記憶體非常有限的機器,64 千字節 (kilowatts) 的記憶體,它是 Seymour Cray 的設計,峰值性能為 36 MFLOPS。在 Argonne,我們擁有另一台主要的高性能機器,那是一台 IBM 370/195 系統。它有大約 4 MB 的記憶體,峰值性能為 55 MFLOPS。這些機器當然是標量 (scalar) 的,但它們具有高度的管線化 (pipelining) 和指令級並行性 (instruction level parallelism)。
這些機器對軟體、數學軟體、線性代數軟體有需求。線性代數領域的領導者是 Jim Wilkinson。Jim 是一位非常有趣的人物,他實際上與 Alan Turing 合作過,他在 London 郊外的 National Physical Laboratory 與 Alan 一起參與了 Pilot ACE 專案。Jim 實際上在 1970 年獲得了圖靈獎,表彰他對向後誤差分析 (backward error analysis) 的貢獻和見解。Jim 是領導者,他和 Christian Reinsch 出版了一本書,其中包含了線性代數領域最先進的演算法,主要用於解決特徵值問題 (eigenvalue problems)。
在 Argonne,我們有一個團隊成立,致力於將那些演算法用 Fortran 實現。這不僅僅是 Argonne 的努力,其他地方也在進行。正如你可以從這本書的作者看到的那樣,這本書叫做「求解特徵值問題的手冊」,它叫做 ICEPACK 指南。Brian Smith 是主要的架構師,但 Argonne 的其他人以及我的同事 Cleve Moler 也參與了那個專案。我在那個專案期間第一次見到 Cleve。
這個專案基本上是 Wilkinson 和他的同事們整理的 ALGOL 演算法的翻譯。他們將最先進的演算法翻譯成 Fortran。這就是我們的任務,並確保轉換後的 Fortran 程式是可攜式的 (portable),我們可以將它們從一種架構移植到另一種架構,而無需進行重大修改。這在今天看起來似乎是一件微不足道的事情,但在當時我們沒有 IEEE 算術標準。事實上,每個製造商都有自己進行計算的方式,自己的字長 (word size),這導致了許多問題,特別是當演算法需要迭代並收斂到特定精度時。但這就是任務。這是一個非常成功的專案,它非常忠實地將 ALGOL 翻譯成了 Fortran。如果你對 ALGOL 有所了解,ALGOL 是按行 (rows) 組織的,也就是說二維陣列是按行組織的,而翻譯是轉換成 Fortran 的,如果你對 Fortran 有所了解,Fortran 的組織方式恰恰相反,是按列 (columns) 組織的。但我們進行了忠實的翻譯,結果對從那些演算法中看到的性能產生了重大影響。
向量計算機與 BLAS
在 70 年代,向量計算機是主流。CRAY-1 當然是經典的向量計算機,它擁有 120 MFLOPS 的峰值性能。它有向量暫存器 (Vector registers),因此能夠將從記憶體中流出的向量儲存在這些暫存器中,可以將其視為一個快取 (cache)。它有八個這樣的向量暫存器,每個暫存器有 64 個元素,我們可以從中進行操作。當時有一台競爭對手機器叫做 CDC STAR 100,它也是向量架構,但在這種情況下,向量是從記憶體直接流入計算單元,結果又流回記憶體。因此沒有辦法儲存或快取這些向量,這對性能產生了巨大影響,儘管這兩台機器的峰值性能相似,但在上面運行程式時的實際性能突顯了 CRAY-1 系統中擁有向量暫存器的好處。
因此,軟體方面,硬體特性是向量。所以我們認為應該實施那些突顯向量操作的想法。當時有一個事實上的、基於社群的標準,由四個人提出:Chuck Lawson、Fred Krogh、David Kincaid,我漏掉了最後一位,是 Dick Hanson,謝謝 Cleve。他們提出了執行這些向量操作的標準。我立即用 Fortran 實現了它們,並使用了迴圈展開 (unrolling the loops) 的技術,這是一種我們認為編譯器可以做的標準技術,但在 1973 年,這是一件相當新穎的事情。這導致了我的第一篇出版物,關於在 Fortran 中展開迴圈,並且在許多系統上帶來了約 10% 到 20% 的性能提升。
LINPACK 專案的起源
這些想法正在不斷演變。我們想把在 ICEPACK 專案中獲得的所有概念以及實現可攜式程式設計的機會,轉移到另一件事上:求解線性方程式系統。特徵值問題是首先解決的問題之一,後續專案將處理線性方程式系統、最小平方法問題 (least squares problems) 和奇異值 (singular values)。這個專案將尊重 Fortran 的組織方式,使用剛剛建立的事實標準來實現這一目標。
這就是 LINPACK 專案的真正起源。很多人認為 LINPACK 是一個基準測試,但它實際上是一個用於求解線性方程式系統的軟體集合。它由 NSF 資助,涉及四個團隊:Argonne 的團隊由我貢獻,University of New Mexico 的團隊由 Cleve Moler 貢獻,University of Maryland 的團隊由 Pete Stewart 貢獻,University of California San Diego 的團隊由 Jim Bunch 貢獻。這是一張我們的照片,Jim Bunch 在最右邊,Pete Stewart、Cleve Moler,還有 1979 年的我,頭髮多一點。那是我的車,那是我的車,牌照是 LINTAC,我們拍的照片。
LINPACK 基準測試的誕生
所以,在這本使用者手冊的附錄中,我編寫了一個小表格。那個表格是求解一個大小為 100 的矩陣的方程式系統的結果,報告了 24 台機器上的性能,範圍從一台 CRAY-1 到一台 PDP-10 DEC PDP-10 計算機。這個表格是那個基準測試的記錄,如果你願意的話,是求解線性方程式系統的記錄。我記下了求解所需的時間,然後手寫的部分是每台機器的執行速率。位於 NCAR 的 CRAY 結果是最快的計算機,在求解那個線性方程式系統時達到了 14 MFLOPS。榜單底部的是一台位於 Yale 的 PDP 系統。
這就是 LINPACK 基準測試的真正起源。這是它的第一次排名。TOP500 在當時甚至還沒有被考慮到。但我維護了這個列表,這個列表從 24 台機器增加到 100 台機器,再到一千台機器,一度達到約 5000 台系統。那裡有許多許多機器,我們在觀察性能方面有很好的基礎。
快取系統與 BLAS Level 2/3
在 90 年代,我們遇到了「殺手級微處理器 (killer microbes)」的攻擊。我們有了基於快取 (cache) 的系統,共享記憶體 (shared memory) 機器,這些機器有一個可以被任何處理器存取的共享記憶體池。許多公司應運而生,製造這類系統,例如 MultiFlow、Alliant、Convex、Kendall Square 等等,都基於這種架構。
這是參與計算的一個令人興奮的時期,可以親手操作這些迷你超級計算機並進行實驗。但所有這些公司當然很快就消失了,無法維持業務,或衰落或退出。但在此期間,在軟體開發方面獲得了巨大的知識。因為機器有了快取,我們意識到需要提高操作的粒度 (granularity)。向量操作太簡單了。我們希望盡可能地利用快取。所以我們組織了一次社群活動,定義了我們稱之為 Level 2 和 Level 3 BLAS (Basic Linear Algebra Subprograms)。Level 2 BLAS 是矩陣-向量操作,Level 3 BLAS 是矩陣-矩陣操作。其思想是我們可以將部分數據儲存到快取中,並非常快速地存取矩陣的元素,性能將因此而增強,這是利用了快取的特性。
LAPACK 與 ScaLAPACK
我們決定組建一個專案來開發軟體。這個專案主要由 National Science Foundation 和 Department of Energy 資助,目的是將 LINPACK 中的想法和演算法與 ICEPACK 中的演算法和想法結合起來,在一個單獨的套件中使用這些 BLAS 子程式來構建基礎設施。這群人就是貢獻者,我和 Jim Demmel 是主要的架構師,一群人,包括來自 NAG 和其他大學的人,加入了這項努力來設計這個軟體。這就是 LAPACK 的故事,它如何利用這些更高層級的操作應運而生。
分散式記憶體系統與 MPI 標準
到了世紀之交,架構繼續演變。我們現在有了分散式記憶體 (distributed memory) 機器。我們有處理器,每個處理器都有自己的記憶體,為了在不同點之間通信或傳遞數據,我們必須採用訊息傳遞 (message passing) 模式來實現通信。許多公司基於這種架構而成立,例如 BBN、Myrinet、Meiko、Thinking Machines、Intel Mass、Parsytec、nCUBE 等等,都設計了基於這種策略的機器。
訊息傳遞的概念很流行,但我們沒有一個標準。每個製造商都有自己的訊息傳遞方式,每個團隊也有自己的方式。Argonne 的團隊有 P4,Tennessee 山區的人們有 PVM,Caltech 有一個團隊有自己的方式,德國有另一個團隊有他們的方式,Yale 的人也在做別的事情。所以確實需要一個標準,以便我們能夠開發有效的軟體,並且可以在不同機器之間可攜式,而無需對軟體進行重大重寫。這就是 MPI 的催化劑。
MPI 是一項社群努力,由大約 35 到 40 人發起。它匯聚了人們。我們遵循了 Ken Kennedy 制定的路線圖,使用了他為 HPF (High Performance Fortran) Forum 設計的範本。想法是每六週聚集那群人,連續三天,專注於開發一個標準,在一段時間結束時,我們會發布這個標準。我們決定一年半是合適的時間,所以這是一個目標。許多人做出了巨大的貢獻。Argonne 的 Bill Gropp 和 Rusty Lusk 決定在標準開發過程中同時進行實現。所以我們有辦法立即測試想法,這帶來了極好的反饋,使我們能夠進行修改,最終導致標準被實現並容易被許多團隊採用。我想這就是 mpich 的起源,通過 Bill 和 Rusty 的努力。
這是一個好故事,我們有了進行訊息傳遞的基礎,它再次基於社群的努力。我們決定將為共享記憶體設計的 LAPACK 軟體以及封裝在 Level 3 BLAS 中的非常簡單的並行處理,利用 MPI 重寫代碼,重構代碼以進行數據分發,最終實現一個可以在分散式記憶體機器上使用的實作。這就產生了 ScaLAPACK,它是 LAPACK 工作的分散式記憶體實作。因此,軟體設計再次受到硬體變化隨時間發生的需求的推動。
多核、加速器與新軟體模型
隨著事情的進展,我們看到架構再次發生變化,從簡單的訊息傳遞系統到具有多核 (multi-core)、迷你核 (mini-core) 以及使用加速器 (accelerators) 提升性能的混合架構 (hybrid architectures)。我們現在能夠以一種非常不同尋常的方式加速演算法的浮點性能,我們開始研究如何有效利用這種架構。
我們進行了兩個實驗性專案。我會說一個是基於使用迷你核的,那就是 PLASMA 套件,它利用了解決方程式系統和特徵值問題的迷你核特性。另一個套件叫做 MAGMA,它真正專注於加速器,並試圖表達那些可以利用當時許多系統上可用的加速器(GPU)的線性代數演算法。所以這些都是有生命力的實驗性專案。
我們現在看到許多許多處理器的機器。我們看到數以萬計甚至數十萬計處理器的機器,你知道,我們常用的程式設計方式,例如 fork-join、批量同步處理 (bulk synchronous processing),將無法應付這種程度的並行性。所以我們必須提出一種機制來克服這種 fork-join 並行處理,我們從電腦科學技術的工具箱中取出了工具,並決定研究利用有向無環圖 (directed acyclic graph, DAG)。圖中的節點代表計算任務,而弧代表這些任務之間的依賴關係,這些任務將由一個運行時系統 (runtime system) 以某種方式調度,使其能夠在更多處理器上有效運行。其想法是,如果我們能找到 DAG 中的關鍵路徑 (critical path),我們就能釋放我們所擁有的最大程度的並行性。
除了關注計算,操作也有需求。我們看到在許多演算法中,對不同的數據執行相同的操作。想像一下正在進行的數千次矩陣乘法。我們希望做的不是在一個迴圈中運行它,而是作為一個調用,它將調用那數千次矩陣乘法,或數千次奇異值分解,或數千次操作。這對今天許多機器學習演算法有巨大影響。
總而言之,我們可以從中學到的是,我們有這些標準,我們在 University of Tennessee 使用的運行時系統稱為 PARSEC,它類似於許多其他人在使用的系統,例如 Legion、法國的 StarPU 和 Barcelona 的 OmpSs 都是能夠管理運行時並處理有向無環圖並適當調度的系統。
近期架構變化與 SLATE
隨著架構在近期發生變化,我們看到了混合性質的架構。我們有了基於多核並使用多個 GPU 的系統,例如 Oak Ridge 的 Summit 計算機。它在一個節點上擁有兩個 IBM POWER9 處理器,每個有 22 個核心,並在那個節點上有六個 GPU,可以用來加速性能。關於這台機器有趣的是,你最好使用這些 GPU,因為大部分性能都來自 GPU。90%、97%、98% 的性能將通過使用 GPU 來實現。所以如果你有只使用 CPU 的東西,你將獲得非常差的整體性能。
我們看到許多今天的軟體正在開發一個叫做 SLATE 的套件,SLATE 是為百億億級計算 (exascale computing) 設計的,試圖將過去 50 年開發的所有概念和想法整合在一起,以實現高效且高精度計算,具有社群參與,包含最先進的演算法,能夠實現高性能,提高用戶生產力,同時具有可讀性和底層演算法的可靠性。這就是我們目前的狀況。
這個軟體旨在運行在這個高性能計算設備的金字塔上。底部可能是筆記型電腦,往上是區域中心,再往上是高性能機器本身。其想法是這個軟體可以在那個機器集合上運行,而無需用戶進行任何更改。軟體本身能夠適應底層架構,並從中提取最大量的性能。這就是 SLATE 軟體旨在實現的目標。
當前環境的挑戰:數據移動
今天的數值函式庫開發環境是高度並行的,使用分散式記憶體,採用 MPI 和 OpenMP 編程模型,它是異構的,使用商品化處理器和加速器。它利用了避免簡單迴圈級並行性的方法,並試圖專注於使用有向無環圖來進行計算。
需要指出的是,在這些機器上,通信是極其昂貴的。這些機器的浮點計算能力是過度配置的 (over provisioned),通信才是我們花費大部分時間的地方,這在設計演算法時必須考慮進去。我的同事 Jim Demmel 在這個詞組上幾乎獨攬了市場,提出了「通信迴避演算法 (communication avoiding algorithms)」,可以有效地處理這個問題。這確實反映了我們在程式設計這些機器方面的傳統觀念。
傳統觀念會說,如果我們有兩種演算法,我們要決定在機器上使用哪一種,其中一種演算法比另一種演算法進行更多的浮點算術運算,傳統觀念會說我們應該選擇浮點算術運算較少的演算法。但由於這些機器的浮點計算能力過度配置,我們真正為之付費的是通信,所以我們應該深入研究,而不僅僅是關注浮點操作,而應該關注這些方法中正在進行的通信類型。
我們必須意識到的另一件事是,你知道,我們通常考慮的是 64 位計算,但我們今天的機器能夠進行 32 位、16 位甚至 8 位浮點運算。我們應該尋找方法來利用這種性能提升,或許在計算中混合使用浮點算術。在線性代數領域已經有一些非常成功的案例,我們能夠利用這些並獲得顯著的性能提升。
性能評估與 TOP500 列表
我提到了 TOP500,以及 Horst Simon、Eric Strohmayer 和 Hans Werner Meuer。Horst Simon 在它剛發布後不久加入了團隊。你知道,我維護 LINPACK 基準測試很多年了,從 1978 年開始,我有了這個包含數千台機器的列表,用於求解方程式系統。Hans 和 Eric 有一個最快計算機的列表,他們根據理論峰值性能對這些機器進行排名。Hans 和 Eric 接觸我,說我們應該把我們的兩個列表合併,並稱之為 TOP500。這就是它的起源,大約發生在 1993 年。我們即將迎來 TOP500 的 30 週年。今晚這裡有一個 BOF 會更詳細地討論 TOP500。
這個列表每年更新兩次,一次在這裡(SC 會議),另一次在德國舉行的會議,今年將於五月或六月在 Hamburg 舉行。看待這個問題的方式是:我們將解決一個方程式系統,基本規則規定你必須使用帶有部分主元選擇的高斯消去法 (Gaussian elimination with partial pivoting),你必須進行 64 位計算,我們將觀察性能。通常,隨著問題規模的增加,性能會提升,直到達到某個漸近點。我們希望捕捉的是使用高斯消去法和 64 位浮點算術來求解方程式系統的漸近性能。這就是它的基礎。自從這個列表創建以來,我們所有的數字都基於這些基本規則,它提供了高性能計算隨時間發展的快照。
這是 Eric 今晚將要討論的內容,但我會讓你們稍微一窺我們準備了什麼。這個表格基本上是繪製了自 1993 年以來的高性能計算發展圖。所以我們正在觀察 LINPACK 基準測試的性能。圖中頂部紅色線是排名第一的機器,今天達到了 1.1 ExaFLOPS,那是 Oak Ridge 的 Frontier 系統。榜單底部排名第 500 的機器是 1.73 PetaFLOPS。這可以說是框定了高性能計算的範圍。我會說,如果你擁有一台超級計算機,它應該在這個範圍內。如果你不在其中,你可能就沒有一台超級計算機,這是一種看待問題的方式。
這個列表追溯到 1993 年,你可以看到那時發生了什麼。1993 年,最快的計算機是 60 GFLOPS,當時剛好進入榜單的機器是 422 MFLOPS。
看看 1993 年排名第一的機器, Thinking Machines,達到了 60 GFLOPS。你知道,我通常用於演示和查看電子郵件的筆記型電腦,我可以在上面運行這個基準測試。它是一台帶有 M2 處理器的 Apple Air。當我運行它時,我的筆記型電腦能達到 426 GFLOPS。這是一個驚人的成就!天啊,你知道嗎,這當然比 1994 年最快的機器還快,而我的筆記型電腦達到的這個數字,是 1993 年排名第一的系統,那是一台位於 University of Tsukuba 的基於 Hitachi 的系統。在很短的時間內發生了令人難以置信的變化,導致了這個結果。
TOP10 超級計算機列表
這是 TOP10 列表,Eric 將會更詳細地討論。這是最快的十台超級計算機。閱讀方式是:這台機器排名第一,是位於 Oak Ridge National Laboratory 的機器,它是 Department of Energy 的一個實驗室,由 Office of Science 運行,它是 Frontier 系統,由 HPE 集成,擁有一顆 AMD 處理器和一些 AMD GPU,並使用了 Cray Slingshot 互連。它擁有 770 萬個核心。如果你打算像它設計的那樣大規模使用這台機器,你必須管理這 770 萬個核心數量。基準測試的峰值性能是 1.1 ExaFLOPS,達到了理論峰值的 65%。所以理論峰值是用筆和紙計算出來的,對吧?你看看週期時間,你有多少處理器,潛在性能是多少,這就給出了理論峰值。這台機器在負載下消耗 21.1 兆瓦 (MW)。兆瓦是什麼?如果我在家裡一年使用一兆瓦,我將收到電力公司大約一百萬美元的電費單。所以一兆瓦年就是一百萬美元。2100 萬美元,至少在 Tennessee 是這樣,這就是成本,或許 Japan 的價格會有點高。
Fugaku 系統是下一個,也是一台非常大的機器,性能也非常高,但看看排名第一和排名第二之間的差異。你看到峰值的百分比和功耗,最後一欄代表了效率,如果你願意的話。所以你希望這裡的數字越高越好,以 GFLOPS/瓦特 為單位。52 是榜單上最高的數字之一,我想這台在這裡的更高一點,這台機器是位於 Finland 的 LUMI,它有點像 Frontier 系統的迷你版。
你可以看榜單往下,我在這裡用橙色標示了使用加速器的機器。在 TOP10 中,除了 Fugaku,它們都使用了加速器。所以 Fugaku 是一台擁有向量處理器的機器,我想這是榜單上唯一一台嚴格使用向量處理器的機器。你知道,這要歸功於它的架構,它達到了理論峰值的百分比非常高。
我們看到 United States 有五台機器,Japan 有一台,Finland 有一台,Italy 有一台,China 有兩台。中國的機器很有趣,這台處理器是 Sunway 系統使用的,他們自己的處理器,260 個核心。而 Tianhe-2A 這台機器使用了 Intel 的部件以及一個在中國設計的加速器。當然,未來 China 將難以獲得 Western 的技術用於他們的機器。這就是 TOP10 榜單。
Exaflop 是什麼?
Exaflop 是什麼?Flop 是加法或乘法,這是第一件事,我們這裡談論的是 64 位運算。一個 Exaflop 是一億億次浮點運算每秒,一億億。我幾週前做了一次演講,演講後我說了一億億,演講後我接受了報紙記者的採訪,我說一億億,他記下來了,第二天我看到報紙,上面出現的是 20 億。這不是 20 億,這是一億億次運算。你知道,這是非常非常大量的運算。
所以,想想一個 Exaflop,再想想地球上的每一個人,每個人每秒做一次運算,需要四年才能達到一個 Exaflop,而這台計算機一秒鐘就能做到。這就是我們今天在這些機器上擁有的令人難以置信的計算能力,簡直令人難以置信。
TOP500 分布與 ECP
這是 TOP500 的細分,今晚稍後會討論。我只是想快速地一瞥。China 擁有的超級計算機最多,在 500 台中有 162 台,而 United States 有 125 台,你可以在那個列表中看到其餘的細分。所以 China 擁有最多的超級計算機,China 也生產最多的超級計算機,他們在全球銷售量最大。主要的銷售商或者說是整合商,我想這樣說更準確,是 Lenovo、Sugon、Inspur、Huawei 和 NUDT (National University for Defense Technology)。
還有關於中國有兩台 Exascale 機器的傳言。他們還沒有提交結果,對吧?但我們有相當充分的證據表明這些機器存在。他們去年贏得了 Gordon Bell 獎,並展示了高性能。他們寫下了他們的架構,我們完全知道這些機器的樣子,有傳言說他們運行了基準測試,但他們沒有提交給我們。所以進入 TOP500 列表的方法是:運行基準測試,將基準測試的輸出通過電子郵件發送到 TOP500 網站,然後它會被註冊。從那時起,他們就沒有這樣做。所以問題是,為什麼他們沒有這樣做?為什麼他們沒有提交結果?我猜是出於地緣政治原因。他們不想進一步驚動 United States,比他們已經驚動的程度更多,並引發其他問題。
好的,在 States,我們有這個 Exascale Computing Program (ECP),它花費... 花費了四億美元,這是在七年內完成的。我們剛剛完成了這個專案的第六年,正在開始第七年。那麼四億美元你能得到什麼?你得到三台計算機。一台計算機已經在 Oak Ridge 建立,耗資六億美元。還有一台機器正在 Argonne 建立,可能還有... 抱歉,抱歉,抱歉,這太誘人了,抱歉。然後還有一台機器將進入 Livermore。
此外,我們還有四億美元的非經常性工程費用 (non-recurring engineering),以幫助修改架構,使其更好地融入我們的框架。ECP 專案中有 21 個應用程式被指定為目標,這才是 ECP 存在的真正原因,就是要執行這些應用程式。你知道,它們都與能源相關,都具有巨大影響,並有望推動科學發展。還有一個軟體堆棧 (software stack)。有 84 個專案是我們的成員參與的,這些專案將有助於應用程式在這些機器上有效運行。這就是 Exascale Computing Program。
數據移動的挑戰
你知道,今天我們在機器上觀察性能時,數據移動 (data movement) 是最大的殺手。這張圖是由 Tennessee 的 Mark Gates 整理的,它很有信息量。我們正在觀察不同的處理器,這裡顯示的是處理器的執行速率,即 FLOPS,除以可以從記憶體傳輸的字數。所以我們正在觀察浮點執行速率除以數據移動速率。我們正在觀察不同的處理器。在過去,我們有一些處理器,它們基本上是平衡的,一個 FLOPS 對應一個數據移動。這是它們的平衡方式,如果有人記得以前的 CRAY-1,你可以同時進行兩個浮點操作和三個數據移動。這張圖試圖對此有所了解。但隨著時間的推移,處理器改變了這種平衡。在接下來的 20 年裡,從這裡的開始,我們損失了一個數量級,也就是說,現在我們每進行一次數據移動,可以進行 10 次浮點操作。而最近,我們看到這個數字增長到每進行一次數據移動,可以進行 100 次浮點操作,甚至今天有些機器已經在 200 的範圍內。這說明了浮點和數據移動之間的巨大不平衡。我們擁有巨大的浮點能力,浮點是過度配置的,但我們沒有在我們的系統中非常有效地移動數據的機制。
LINPACK 基準測試的局限性
LINPACK 基準測試已經存在很長時間了,從 70 年代中期算起。你知道,它是一種衡量事物的方法,它有很多優點,易於理解,顯示趨勢,我們用它來做 TOP500。但是你知道,自 1979 年以來,架構發生了很大變化。LINPACK 的性能不再與我們在許多應用程式中看到的性能高度相關。而且你知道,LINPACK 基準測試實際上是進行密集矩陣計算,這並非許多應用程式正在做的事情。所以設計一個在 LINPACK 上獲得非常高分數的系統,在實際應用方面可能並非好事。
HPCG 基準測試
所以我們決定… 那麼這些機器是用來做什麼的呢?這些機器是用來做模擬的。在模擬領域有許多正在處理的問題,它們通常是在進行建模,建模圍繞著求解一個三維偏微分方程。對該微分方程進行離散化 (discretization),結果會得到一個稀疏矩陣 (sparse matrix)。所以這個矩陣不是密集的,它是稀疏的。你仍然需要解一個線性方程組,但它的特性完全不同。
結果是,或許我們需要另一個基準測試。這是一個由 University of Tennessee 的 Mike Roo 和 Peter Luszczek 幫助建立的基準測試。它叫做 HPCG。它運行一個共軛梯度 (conjugate gradient) 基準測試。數據結構是稀疏的,它模擬了一個三維偏微分方程。它有一個 27 點的模板 (stencil)。使用了一些預處理器 (preconditioner) 來幫助收斂,並且有點複雜了整個迭代策略。其想法是觀察我們在此獲得的性能,這或許更能反映實際性能。
這是 HPCG 基準測試的結果。再次,來參加今晚的 BOF,我們會談論更多關於這個。只是讓你們一瞥。排名第一的計算機是來自 Japan 的 Fugaku 系統,它達到了這個數字,這是它的 LINPACK 數字,如果你願意,叫做 HPL。這就是 HPCG 數字。這是一個數字,說明了峰值的百分比。這台機器達到了理論峰值性能的 3%。看看列表往下,我們看到,你知道,在峰值性能方面的回報非常少。你知道,我們這裡的機器,那些在 LINPACK 方面給我們排名第一的機器,達到了理論峰值性能的 0.8%。0.8%。所以想像一下擁有一輛時速 200 英里的賽車,卻只能從中獲得每小時兩英里的速度。你不會對那輛賽車感到非常滿意。所以,你知道,這是一個指標,表明在處理器硬體和對解決重要問題可能有用的演算法之間存在不平衡。很難有效地獲得我們所談論的執行速率。
結論與未來展望
我們快到結論了。你知道,硬體正在不斷變化,我們從標量機器到向量機器,再到分散式記憶體機器,再到加速器機器,再到混合精度 (mixed precision) 機器。你知道,從某種意義上說,已經發生了這三次計算機革命:高性能計算、我們今天所在的深度學習,以及邊緣計算和基於 AI 的系統。我覺得我們總是在追趕。架構變化了,演算法和軟體試圖追趕那個架構,追趕硬體。我腦海中有一個畫面:硬體開發人員把東西扔過籬笆,演算法人員和軟體開發人員就趕緊想辦法如何讓他們的問題有效地適應那台機器,有效地處理它。這大約需要 10 年,然後一台新的機器又被扔過籬笆,我們又重新開始這個循環。
演算法方面,「頂部還有很多空間 (Plenty of Room at the Top)」。我認為不久前有一篇很棒的論文,這是 Charles Leiserson 等人撰寫的,兩年前發表在 Science 雜誌上,標題是「Moore's Law 之後,電腦性能的頂部還有很多空間」。它談論了我剛剛絮絮叨叨講的許多事情。當然,這是對 Feynman 關於「底部還有很多空間 (Plenty of Room at the Bottom)」的經典演講的戲仿,Feynman 談論的是量子東西。
就此,我必須結束了。請允許我感謝... 我有太多人要感謝,無法一一親自感謝,所以這是一份幫助我達到今天成就的人員列表。非常感謝各位的關注,我很樂意回答您可能提出的任何問題。謝謝。
問答環節
主持人: Jack,做得非常棒,非常感謝你帶來如此啟發性的演講。我們還有時間回答觀眾的幾個問題,如果您親自到場,請到這邊走廊上的兩個麥克風之一。好的,在那邊。同時,我們也有一些通過應用程式提交問題的線上參與者。所以,我將先請 SC22 線上專案主席 Laurie Dieschen 開始,她將讀出獲得最高票數的遠端問題。Laurie 請說。
Laurie Dieschen: 謝謝 Cherry。Jack,得票最高的問題是:您預計未來幾年會看到什麼類型的架構?以及您在採用這些現有基準測試來維護 TOP500 列表方面看到哪些挑戰?
Jack Dongarra: 好的,那麼未來的架構會發生什麼?以及將產生什麼樣的軟體基礎設施來支持它?所以,今天我們有的機器是基於多核加上 GPU 的。我想,未來我們將看到這種趨勢擴展,不僅僅是多核和 GPU,還會添加其他加速器到那個集合中。所以,想像一下添加一個專門用於 AI 的加速器,或者想像一下添加一個做神經形態計算 (neuromorphic computing) 的加速器。我們可以向集合中添加加速器來幫助解決我們的問題,並且我們可以選擇使用... 也許量子計算是另一種加速器。我不認為量子計算將成為它自己的計算機,我認為它可能是一個加速器,我們可以將其添加到我們已有的加速器集合中,這樣特定的應用程式就可以利用這些組件來獲得高性能,或者使用者可以根據應用程式選擇他們在特定系統上使用的加速器組合。所以這是關於確保我們的硬體與預期在機器上運行的應用程式相匹配,並擁有正確的組合,這樣就更容易提取性能,更容易開發軟體。最終擁有這種混合架構。
觀眾: 我要祝賀你,這讓我想起了我的 CDC Cyber 和 Thinking Machines 經驗。謝謝你圖靈獎花束中的牡丹花。你提到了 65% 的峰值性能,你能否詳細說明那是什麼?我忘了,因為我只記得你為基準測試提到的 3% 到 6%。我正在嘗試從 DAG 進行低負載平衡的自組織靜態映射,試圖將 slingshot 和 dragonfly 的三跳減少到零到一跳,希望他們會嘗試使用靜態編譯來補充動態負載平衡和調度。所以我想知道,你認為我們什麼時候才能實現內存執行 (execution on memory)?
Jack Dongarra: 好的,我想你問了幾個問題,我會回答我能很好回答的問題,好嗎?你說了 65% 的性能,那是針對 Frontier 的,Frontier 達到了理論峰值的 65%。所以想像一個計算強度非常高的問題,矩陣乘法是基準測試的主要內容,而我們只提取了 65% 的性能。這說明了互連 (interconnect) 的問題,而 0.8% 的理論峰值更是凸顯了這一點。所以在機器中移動數據存在問題,具體問題在哪裡我還不太清楚,但它表示從那種架構中提取性能將會很困難。
觀眾: 0.8% 到 3% 的原因是不是並行度不夠?
Jack Dongarra: 不,不是並行度。是數據通信的問題,是與那種特定架構上的演算法相關的頻寬-延遲問題 (bandwidth-latency issues)。
主持人: 好的,下一個。
觀眾: 大家好,我是來自 University of Chicago 和 Argonne National Labs 的 Andrew Chien。首先,Jack,祝賀你,這是實至名歸的。在圖靈演講中,有一個機會可以稍微從前瞻性的角度看待問題,並指出你認為可能投資不足的領域,或者你希望在這些領域有更多研究正在進行,或者指出你認為對於社群來說特別重要的方向,無論是我們的努力還是資金投入,以確保繁榮的未來。所以我只是想提這個問題,給你一個機會,根據你的視角,談談你會推薦的一些事情。謝謝 Andrew,這是個好問題。
Jack Dongarra: 你知道,我一直在強調機器的不平衡。今天的機器是基於商品化處理器、商品化現成處理器 (commodity off-the-shelf processors) 從 AMD 或 Intel、商品化現成加速器、商品化現成互連來建造的。這些都是商品化的東西。我們沒有針對驅動它們的特定應用程式來設計我們的硬體。所以或許我們應該退一步,更仔細地研究架構應該如何與應用程式、與軟體互動,進行協同設計 (co-design)。我們經常談論協同設計,但現實是今天進行的協同設計非常少。從這些數字你可以看出,發生的協同設計非常少。或許一個更好的指標是 Japan 正在發生的事情,他們與架構師、硬體人員有更緊密的互動,設計出平衡更好的機器。
所以如果我要尋找前瞻性的研究專案,我會說也許我們應該啟動那些研究架構的專案,並讓架構更好地反映在應用程式中。本週三 Dan Reed 將主持一個小組討論,將詳細探討這個話題。所以如果你感興趣,請來參加小組討論。我忘了地點,但我肯定它列在手冊裡。但我會說,我們應該在硬體、應用程式和軟體之間取得更好的平衡,真正進行協同設計。啟動一些研究硬體的專案,你知道,在我讀書的時候,有一些大學正在開發架構,他們會組裝機器。Illinois 就是一個很好的例子,Stanford、MIT、CMU 等地都啟動並進行了研究架構的硬體專案。今天我們看到這種情況少了很多。也許我們應該考慮在那方面投資,也許從 Department of Energy 撥一些研究資金,用於這類工作。這就是我的看法。
主持人: 好的,下一個問題是,軟體和演算法正在適應你所描述的不同架構,問題是我們如何思考維護來源 (provenance) 和保證可重複結果?以及保證可重複結果?
Jack Dongarra: 好的,是的,這是一個重要的問題,它一直是一個重要的問題。今天談論這個問題更具時事性。你知道,我們需要方法來驗證我們得到的結果是有意義的。首先,我們需要驗證… 你知道,我之前講的那個關於 CRAY 機器和得到錯誤答案的故事,這是一個很好的例子。我們應該對答案是什麼樣子有一個感覺,這樣我們就不會只是接受計算機輸出的答案,然後轉向下一個事情。這是一點。另一點是,我們應該有機制,以便我們確實可以重現結果。有一個機制,能夠詳細描述演算法,以便其他人可以接手,將其移到另一台機器上運行,並得到相同的結果。我會說這應該是我們進行任何科學研究策略的一部分,能夠重現我們得到的結果,並以一種其他人可以輕鬆適應的方式進行。但我沒有一個神奇的銀彈來做到這一點。
主持人: 我們這邊還有一位。
觀眾: 他是我的一位同事,我總能見到他。你知道,我 76 年見你的時候,你頭髮很多。
Jack Dongarra: 我確實很多。
觀眾: 我從來不知道你那麼禿,因為你總是戴著帽子。
Jack Dongarra: 我不是總戴著,但... 好吧,是的,我現在沒有戴。
觀眾: 對,所以我和 John 認識很久了。我想我第一次見你是在從 Albuquerque 到 Los Alamos 的飛機上。
Jack Dongarra: 對,對,是的。
觀眾: 所以我的問題是,我們過去開過一些會議,我想是在 80 年代,那時大家認為我們永遠不可能達到... 我記得是 PetaFLOP。而現在我們已經達到了幾 ExaFLOP。所以我們當時錯過了什麼?我的意思是,當時最聰明的人都在那些會議上,我們錯過了什麼?
Jack Dongarra: 好的,發生了什麼事?我們是如何突破那個「不可能做到」的障礙的?我們是如何突破的?所以,我們經歷了一些架構上的變化,GPU 就是一個例子,它改變了格局,使事情在獲得性能方面更有效率。你知道,我回頭看,我想是 1987 年,我們達到了 TeraFLOP。 Sandia 的 ASCII Red 機器是 TeraFLOP。11 年後,我們藉由 Roadrunner 達到了 PetaFLOP。然後 14 年後,又達到了三個數量級的提升,藉由 Frontier 系統。所以這就是我們今天達到的 ExaFLOP。現在問題可能是,我們什麼時候會再次達到三個數量級的提升?ZettaFLOP?我們什麼時候會達到 ZettaFLOP?你知道,我會說,你應該來參加今晚的 BOF。所以,一個預測說,僅僅達到一個數量級,也就是 10 ExaFLOPS,還需要八年。預測是這樣說的。但來參加今晚的 BOF 吧,我們會揭露更多關於這方面的事情。
觀眾: 您好,Jack,我是 Elementary 的 Jesus。所以我的問題可能有點離題。我認為 HPC 是由許多具有巨大影響力的精彩應用程式推動的。但現在,我認為有許多高影響力的問題可能沒有被我們社群解決。例如,我們的社會在兩黨之間 polarized,我們在一週後舉行了選舉,但仍然在計票。而我們卻在談論每秒萬億次計算的機器。所以我不知道你對我們社群如何解決房間裡的大象 (big elephants in the room),這類問題有什麼看法?
Jack Dongarra: 哇。
主持人: 好的,我想我們時間到了。
Jack Dongarra: [笑聲]
主持人: 我們時間確實非常非常短了。而且這不是一個容易回答的問題。我建議我們線下討論這個問題,Jack。對於那些還有問題的人,你們知道他長什麼樣,他總是在會場裡或在會議中,所以抓住他,把你的問題交給他。謝謝 Jack,讓我們再次感謝並祝賀 Jack。
[掌聲]
主持人: 謝謝每一位參加這場鼓舞人心的圖靈演講,特別是我們的榮譽演講者,圖靈獎得主 Jack Dongarra。我現在邀請各位去享受你們在 SC22 的時光,在那裡你們將看到 HPC 加速的許多方式。
[掌聲]