一台超級計算是否需要安裝多套操作系統?

一個操作系統支持的CPU數量是有限的,比如Windows是4個吧,我不清楚linux是多少個。大量的CPU之間交換數據,需要大量時間,太多CPU會造成響應遲鈍?我想請問一下,真實情況是不是如此呢?


題主對超級計算機的理解可能有點偏差。現在的超級計算機,基本上都是多節點的架構,每一個節點都獨立地運行著操作系統(我用過的幾個中,基本上都是RHEL,只有一個是麒麟——天河2 [當然我們是花錢買省事了直接訂閱的 RH,用 CentOS 的其實也有,比如 TACC])。每節點一般是多少處理器(這裡指的是Socket,不是Core)呢?我不是很清楚,也沒做過統計,不過就我用過的幾台而言,都是兩顆。

節點與節點之間是要交換數據的,有時候交換量還很大,處理不好就會成為嚴重的瓶頸。所以一般在設計程序的時候就要從演算法上考慮,怎樣設計可以減少每個節點之間的數據交換。當然,人們為了提高交換效率也做了很多努力,比如:

更快的傳輸——Infiniband (IB)——你可以認為它是比乙太網(插路邊能買到的網線的那種)更高級的一種網路通信設備,速度快,延遲低。IB的FDR QSFP可以達到56Gbps,而通常的乙太網是1Gbps(當然高級些的有10Gbps,不過那個價錢也購買IB了吧),IB的延遲通常在 0.7ms 左右,乙太網要高得多。

減少CPU的傳輸負擔——RDMA——通信卡可以直接向內存寫數據,甚至直接向協處理器寫數據,CPU可以不必關係具體的數據傳輸流程從而完成更多的計算任務。這在帶有加速卡的計算機上尤為有用(以往需要處理器將數據複製到協處理器中)。

但是非常大量的數據傳輸還是會相當耗時(要考慮你的演算法是不是有問題了),可以採用非同步策略(或者MPI裡面非阻塞)——讓網卡慢慢接受著數據,我先干別的事,等你把所有的數據都集齊了,我再來處理。

至於題主問

一台超級計算是否需要安裝多套操作系統?

不需要。

太多CPU會造成響應遲鈍?

不會,多了我更高興。

真實情況是不是如此呢?

不是。從我們profiling過的程序來看,從來沒有因為CPU太多導致延遲增加(但是有可能因為演算法的問題使運算變慢——比如Gromacs)的。節點間的延遲問題通過非同步傳輸也通常能夠很好地解決。

--

Update:

補充一下

大量的CPU之間交換數據,需要大量時間,太多CPU會造成響應遲鈍

處理器之間在交換數據(讀寫內存)的時候可能會 stall,但是這不算響應遲鈍吧?Haswell 在訪問內存的時候 latency 是三十多個 cycles,還要再加上內存自己的 latency (~57ns). 但是處理器會預取數據到 cache 裡面,L1 的訪問只需要 4-5 個 cycles。

舉個更貼近大量 CPU 的例子,Xeon Phi KNC 有 60 個左右的核心,雖然主存用的是 GDDR5 但是訪存延遲仍然要 100+ cycles,L2 也需要 11 個 cycles. 為了避免跨核心數據交換造成的 stall,KNC 的 L2 Cache 是 Interconnected 的環形結構,同時,KNC 的四路超線程中,每一個 thread 都有單獨的 context,即使自己 stall 了,也不會影響到其它同核心的線程。當然,你也完全可以通過 prefetch 指令指示處理器從內存中預取數據,也可以通過 streaming store 指示處理器放心亂序。

--

再多說兩句吧,其實跨節點的稍大一些的數據訪問也不是不可以。昨天寫某個應用的時候有點偷懶,各節點計算完成以後的求和歸約我直接把它交給 MPI_Reduce了,500 多 MB 的雙精度浮點在 8 台機器上計算其實也就是一閃而過,所以只要不是在計算過程中這麼濫用數據交換問題也不大。


了解過某個單位的某個計算集群的某個方面的建設,末端計算單元大概有幾百到上千的樣子,因為保密原因架構圖是不能給我的,下圖是我憑記憶畫的,畫的不好,湊合看:

集群調度節點沒這麼少,實際場景好像是十幾個,每個下面有十個左右的計算單元。

有操作系統的地方:

1、主控板是一個獨立的操作系統,大概類似Unix這種系統,我沒有見過用Linux的主控板,可能是可靠性的問題,當然不排除別的地方有人在用Linux。管理員可以訪問主控板的終端,獲得系統整體負載。

2、存儲調度節點都有獨立的操作系統,可能是Linux或者嵌入式系統,負責控制存儲設備的數據輸入和輸出。

3、存儲設備上一般都是firmware之類的,也有用RTOS的,為的是管理方便,比如能實時查看存儲設備的狀態。

4、數據匯流排一般沒有操作系統,但聽說也有帶RTOS的,原因同上,數據匯流排有一些具體的標準,帶寬高的很嚇人。

5、計算集群調度節點也有獨立的操作系統,一般是Unix/Linux之類的,管理能力極強,我圖裡沒有畫出的是調度節點之間也有關聯,同時還能提供一部分對外的服務(比如用戶可以直接訪問這一節點),這一塊其實是技術的核心,但可惜我接觸不到具體的內容,只能大概畫畫。

6、計算單元里每個單元都是一個操作系統,這裡的花樣就多了,可以是Windows(沒錯,這個可以有),可以是Linux,也可以是各種RTOS,具體用什麼就看具體的數據業務,計算單元有些是互為冗餘的,一個掛了另一個還能繼續。

7、一個計算單元一般是1個CPU加上幾個計算設備(比如剛禁售的至強phi),計算能力非常強悍。

所以,在超級計算機上(我這個可能不算超級,規模還不算大),圖上畫的每個節點都有可能有一個操作系統。

CPU之間同步數據是很慢的,所以數據匯流排的設計是很麻煩的,超算與普通計算機的一個區別就是可以進行任務分割,盡量減少CPU之間的互訪,跨計算節點的訪問原則上要禁止,真要跨節點訪問,可能要走調度器控制,編程模型有些是MPI。

舉一個具體的例子:比如搞物理的教授想用蒙特卡洛方法做個模擬,先把計算拆分成若干個可並行的任務,占上十幾個到上百個計算節點,開始跑,跑完以後數據匯總,最後再輸出,演算法的設計必須要減少critical部分的代碼,否則性能下降的就太厲害了。

超算的基礎模型就是分層,每一層管轄的設備盡量不要太多,這樣就不會有特別大的負載集中於某個節點上,反正超算的結構跟我們平時用的PC差別是很大的。

最後,Windows能支持多少物理CPU不記得了,但我好像見過支持128個核的,所以4個物理U應該不是上限。Linux的最大核數好像是2048?還是多少來著,至少API有個上限,但實際上能不能跑這麼多就不知道了。反正超算平台上,不會讓一個父節點管理太多子節點,那樣效率會很低的。

這種大規模的架構,我也只能簡單介紹一下,能介紹詳細設計的人肯定不會上知乎,說多了都是國家機密了,具體到每一個節點,設計時候考慮的因素都太多了。

基本就是這樣的。


Linux從零幾年就開始支持4048 核心了, 而且CPU之間的通信雖然會一定程度上影響速度, 但是CPU之間的鏈路速度也是極快的, 比如HT(hypertransport, AMD的)和QPI技術。

其實希望有答主來介紹一下神秘的大規模ccNUMA架構, 比如Cray和SGI的機器。前幾年看到cray的機器號稱是硬體配置推到Windows的極限, 單台4T內存。


首先通常而言的超級計算機都是超級計算集群,題目本身就不成立了。下面所說的指的是單台計算機。

Windows支持的CPU數目絕對超過4個,很早就支持64個了,現今能到多少個沒關注。

CPU多了會有什麼問題。對於內存線的並發訪問確實是個問題。不過早就有了非對稱性的架構,每個CPU所訪問的內存是不一樣的,彼此間沒有衝突。Windows其實也早就支持Numa架構了。

比如以前我支持過某國電信的後台資料庫,採用Windows+SQL Server。伺服器像一個雙門冰箱,64個CPU分兩組裝在左右兩邊,各自使用一邊的內存。中間有根特殊的匯流排負責左右兩邊的通信。

另外如果要處理大量IO,也有可能造成影響。一種方案是不同的IO中斷綁定到固定的CPU上,比如4塊網卡可以分別綁定到4個CPU,而這4個CPU就主要用來處理中斷。這樣就不會由於中斷亂髮而頻繁打斷其他運行中的進程。

再有就是用戶程序內部的鎖的問題,同時運行的線程多了,有可能導致某些鎖的競爭陡增反而降低性能。這種一般就是用戶程序自己的問題了,需要用戶自己真對多CPU優化。有時候用戶程序使用的一些公用庫也可能在CPU過多的時候暴露某些鎖競爭的問題。

回到題目(單機的情況),答案是不需要。題主的擔憂是確實存在的,但是也是能夠解決的。


不是專業的,只是提供點我自己的認識吧。操作系統那個我沒法回答,說說我對CPU那個問題的個人感受。我實驗室有個小型伺服器,運行Linux ,有24個CUP核。實測發現,運行速度不是隨著參與運算的CPU的核數增加而線性增加的,但是總歸還是在增加的。原因就是CPU交換數據消耗的時間是不可忽略的。原因可能和計算有關。有的計算容易設計成並行計算,那麼就可以減少這種交換數據的影響。我做的是化學裡邊DFT計算,不太了解具體底層演算法,但是估計並行計算出現在每一個k點計算上,但是這種計算很快就需要匯總計算,而且需要頻繁匯總,所以可能在我的計算上這種CPU交換的影響會比較顯著?


推薦閱讀:

這方程要使用超級計算機算嗎?
如何評價谷歌的量子霸權計劃:宣稱有望明年底突破經典計算極限?
如何看待浙江大學超算隊在 ASC16 中遭遇不公平對待,隊伍不承認比賽成績?
地球上最強的25台超級計算機算,除了中國的還有哪些?
什麼是量子計算機?

TAG:操作系統 | Linux | 系統架構 | 超級計算機 |