申威26010系列介紹(1) 硬體設計:體系結構與周邊
衛星放出去幾周我終於來填坑了!
之前強吹sw的一個回答騙了不少贊也被人撕臉,這次來正經講點東西吧。但願我科普的熱情消散之前可以把這一系列的坑填完本系列文章在我腦子壞掉之前不會開評論審核
系列前言
神威·太湖之光(Sunway Taihulight)超級計算機已經面世一年有餘,但由於其研發與使用的特殊性質,許多行業內或周邊人員也依然對它的設計特性和使用方法一知半解,遍地大佬的貴知乎上也常有人對其部分細節做出大膽卻錯誤的斷言。為了澄清一些錯誤認知,也讓更多的人對這一台已經拿下了三次TOP500榜首、可以預見的未來還會拿到幾次的龐然巨物有更為深入的認知,我決定以無錫中心的公開文檔為原料,基於我自身的使用經驗,講一講它的設計、使用、優點以及不足。
本系列稿件將從SW26010晶元的體系結構設計講起,分別介紹其幾個重要特性,展示其編程模型和軟體環境,並與同時代的各類硬體平台和它們的配套軟體環境一一作比較。
我將假設讀者具備計算機體系結構知識基礎,了解基本的指令級並行和數據級並行的方法,大致了解市面上常見的體系結構,並對OpenMP和CUDA有基本了解(我在對比編程模型時會以x86_64上的OpenMP和NVIDIA GPU上的CUDA作對照)。
因為本人的水平也極為有限,對於許多技術問題一知半解,還望各位大佬圍觀中讓我學習一下;對國內HPC發展不看好乃至持有偏見的,我希望能坐下來理性地討論,還請不要說一點好就炸毛。
以及本人對於SW26010的總體看法(認真不強吹):Sunway體系結構上整個一套下來對業界來說是一個可行的新的設計思路,目前唯一搭載了它的系統神威·太湖之光工程設計精妙到堪稱炫技,但配套的編程模型與軟體環境極度缺失,對使用者十分不友好。
本篇摘要
這一篇的大致內容是介紹SW26010的晶元設計,覆蓋了存儲模型、體系結構特性,並試圖澄清幾個關於這片晶元乃至神威·太湖之光系統的誤會與偏見。
晶元設計介紹
上圖就是單片SW26010的整體結構。每片上有四個核組,每個核組由8*8個從核(運算核心)和一個主核(運算控制核心)組成,主從核共享主存空間(DDR3)。
關於Cache,主核具備L1 Data Cache 32KB,L1 Instruction Cache 32KB,L2通用Cache 512KB;從核具備每核L1 Instruction Cache 16KB和整核組共享的L2 Instruction Cache 64KB,以及每個從核獨立的Scratchpad Memory 64KB(被稱為LDM)。關於Scratchpad Memory的特徵可以參考https://en.wikipedia.org/wiki/Scratchpad_memory。
而從核間的控制流和數據同步是不需要經過主存的。在從核的每行、每列上,可以執行帶mask(8位)的barrier(即同步該行/列內指定的幾個核),並且在每行、每列上也分別具備通過共享寄存器進行細粒度通信的能力(通過一個每行/列均具備的FIFO隊列,可以點對點或廣播)。
從核具備SIMD計算部件。
從核訪問主存可以通過DMA Engine直接完成,DMA Engine的操作是指令級的。
主核和從核間的同步必須通過主存完成。
主存由四路DDR3存儲控制器鏈接,訪存帶寬為136.51 GB/s;由於實際使用中通常以一個核組為單位,單一MPI進程的主存帶寬僅約34 GB/s。不過這個「僅約」是相對於眾核平台(比如GPU)而非同時代多核平台(比如x86系CPU)而言,實際上考慮一下它用的是DDR3這一點,這個帶寬已經可以說是很高了;堆通道數是這樣的。
工藝我不懂,公開文檔也沒說,就不提了。
晶元和體系結構設計大致就是這樣,如果有什麼缺漏還請指教。
關於晶元設計的一些常見誤解和疑問
似乎只有在國內才會聽到的「你們中國超算都是砌磚!」
從天河登榜TOP500,國內的各類社區中常常能看到「XXX就是在堆硬體」這樣的論斷。到了太湖之光當然也不能例外了。
這裡需要向業餘人士澄清的一個可能比較常見的誤會,正是「SW26010這款晶元是堆核心堆出來的性能」。
不是。
SW26010功耗很低,這就是這個回答背後的支撐了。
雖然一個晶元上有260核,但26010的晶元並不大;在太湖之光系統級的水冷之下,它的封裝還略小於32核的AMD Threadripper(沒錯我黑的就是你家農企);歸根結底,是因為它的單核心並不複雜。256個從核沒有複雜的多級Cache邏輯,獨立的緩存部件僅有一級,控制器也較為簡單(按照從DEC Alpha繼承來的技術鏈條這一常理可以想像,大概是兩發射左右的標準RISC風格亂序執行),DMA Engine基於簡單使用觀察分析可能是每行一個於是也只有八個,其餘的複雜部件只有四套。它的各個核心之間通過這些方式削減了獨立組件,儘可能共享部件,最影響功耗的數據Cache變成了SPM;這些思路,都體現出了「眾核」的設計理念。而MPE的性能雖然比單個CPE強出不少,但比起Intel的處理器,它甚至無法和Core M單核心基頻一戰。也許低配ARM才可以跟它同水平競技吧。
用和MIC相近的思路,它借著沒有歷史負擔這一優勢,甩開了多餘(但對程序員友好)的多級緩存,它才達到了碾壓性的功效比。
當然了,相應地它也甩掉了程序員可以閉著眼睛寫代碼這個優點;搞不懂它怎麼用的話,也許不至於像不懂CUDA的程序員寫卷積那麼慘,但至少也會落得個「wqnmlgb這什麼垃圾晶元」的下場。這一點我會在未來的內容中展開對比。
SW26010的設計是國際大廠玩剩下的?
可能是,可能不是。
說「可能是」是因為兩點:一,我們不知道Intel之流背著我們做了多少東西。數十年的技術積累,為Intel帶來的餘力是不可忽視的;它做的研究和試驗當中,也許只有一小部分走上了生產線,走到了公眾面前。也許他們也考慮過相似的設計,也許他們當中甚至也有人動過為MIC配上一兩個強核心的念頭,我們都不知道;但這些東西都沒有出現在他們的產品線中。二,不得不提的是,早在十多年前,就有一款來自IBM的架構設計,Cell Broadband Engine Architecture,有著相當多的特徵是今天SW26010與之重合的,集成在單片上並共享全局存儲的大小兩種核心,數量更多的小核心,最重要的Scratchpad Memory也早已在其上體現,但它現在已經壽終正寢,原因或許是並不突出的性能優勢和十分困難的編程。
而也說「不是」則是因為,一方面,與國際大廠們相對的,國內的研究並沒有受到市場的限制,自由發揮之下可以繞過許多顯而易見但大家都無法輕易拋棄的帶來損失的做法;另一方面,在和Cell的特性大量重合的對立面,它也有著顯而易見的不同點:八倍於Cell的從核數量、共用DMA Engine、比起Cell的EIB(Element Interconnect Bus)更為複雜和有效的網格式核間通信、支持亂序執行和分支預測的從核,這些特徵不僅僅是十年的時代演變帶來的,不可否認的也是研究者們精心設計的有效方案,這些特性使得在從核上的程序不需要關心調度、分支,可以專心於DMA和局存管理,從而大大提高了編程上的友好度(當然了,是相對於Cell而言,不是相對於x86系而言),同時也為不同的應用需求提供了高效利用硬體的途徑。
總體而言,這一晶元的架構設計放在當下足以稱之另闢蹊徑;有多少人真的買賬另說,看一看點點頭說個good還是很正常的反應。
那麼……這一晶元設計的問題?
- 訪存。DDR3,34GB/s帶寬,作為一個眾核平台,說真的有些過分了。當然了,與此相對應的單核組性能也比Tesla V100這種怪物低了許多,勉強算是平衡了一點。
- 單晶元算力。接著上一個話題,在並沒有太誇張的計算訪存比背後,和低帶寬的訪存相對應的,則是相對低的單核組計算能力。許是工藝限制,許是為了平衡弱小的訪存能力,無論如何,這一款晶元天生不適合小型系統使用。
- 編程。雖說和Cell比起來,亂序執行和分支預測的支持使得從核上的編程友好了許多,但SPM這一道天塹擺在這裡,它的存儲模型還是過於複雜了。對programmer完全不透明的存儲結構的存在成為了編程的最大阻礙,而在這之外還有太短的發展時間所帶來的生態環境缺失。
關於晶元本身我也就只說這麼多了,後面都會從coding的角度去體現這一晶元的種種特性。謝謝大家。
推薦閱讀: