首先,2月7日是春節(jié)后第一個(gè)工作日,祝大家在新的一年里,技術(shù)進(jìn)步,事業(yè)高升!
國(guó)家發(fā)改委等四部門聯(lián)合發(fā)布《全國(guó)一體化大數(shù)據(jù)中心協(xié)同創(chuàng)新體系算力樞紐實(shí)施方案》,提出在京津冀、長(zhǎng)三角、粵港澳大灣區(qū)、成渝以及貴州、內(nèi)蒙古、甘肅、寧夏建設(shè)全國(guó)算力網(wǎng)絡(luò)國(guó)家樞紐節(jié)點(diǎn),啟動(dòng)實(shí)施“東數(shù)西算”工程,構(gòu)建國(guó)家算力網(wǎng)絡(luò)體系。
當(dāng)前,算力已成為全球戰(zhàn)略競(jìng)爭(zhēng)新焦點(diǎn),是國(guó)民經(jīng)濟(jì)發(fā)展的重要引擎,全球各國(guó)的算力水平與經(jīng)濟(jì)發(fā)展水平呈現(xiàn)顯著的正相關(guān)。在2020年全球算力中,美國(guó)占36%,中國(guó)占31%,歐洲和日本分別占11%及6%。近年來(lái),美國(guó)、歐洲、日本紛紛制定行動(dòng)計(jì)劃,不斷運(yùn)用算力助推經(jīng)濟(jì)增長(zhǎng)。
“數(shù)據(jù)、算法、算力”是數(shù)字經(jīng)濟(jì)時(shí)代核心的三個(gè)要素,其中算力是數(shù)字經(jīng)濟(jì)的物理承載。這,我們通過(guò)“預(yù)見·第四次算力革命”系列文章(共四篇),從微觀到宏觀,詳細(xì)分析跟性能和算力相關(guān)的各個(gè)因素以及主流的算力平臺(tái),盡可能的直面當(dāng)前算力提升面臨的諸多挑戰(zhàn)和困難,展望面向未來(lái)的算力發(fā)展趨勢(shì)。這四篇文章為:
預(yù)見·第四次算力革命(一):算力綜述;
預(yù)見·第四次算力革命(二):三大主流計(jì)算平臺(tái)CPU、GPU和DSA;
預(yù)見·第四次算力革命(三):面向未來(lái)十年的新一代計(jì)算架構(gòu);
預(yù)見·第四次算力革命(四):宏觀算力建設(shè)。
本文為第一篇,歡迎關(guān)注公眾號(hào),閱讀歷史以及后續(xù)精彩文章。
1 基礎(chǔ)知識(shí)
1.1 摩爾定律失效?
上世紀(jì)80/90年代,CPU性能狂飆,每18個(gè)月,CPU性能就會(huì)翻倍,這就是著名的摩爾定律。如今,CPU性能提升,每年只有不到3%,要想性能翻倍,需要20年??梢哉f(shuō),基于CPU的摩爾定律已經(jīng)失效,行業(yè)進(jìn)入了后摩爾時(shí)代。但是摩爾定律賦予行業(yè)的意義遠(yuǎn)不止這些。
數(shù)字經(jīng)濟(jì)時(shí)代來(lái)臨,各種各樣的應(yīng)用都需要強(qiáng)大的算力支撐。不管是從單個(gè)設(shè)備的角度,還是萬(wàn)千設(shè)備組成的宏觀算力的角度,都需要持續(xù)不斷的算力,來(lái)支撐數(shù)字經(jīng)濟(jì)的繁榮發(fā)展。可以說(shuō):用戶“需求”的驅(qū)動(dòng),需要摩爾定律繼續(xù)有效。
對(duì)消費(fèi)者來(lái)說(shuō),摩爾定律意味著當(dāng)前購(gòu)買的電子設(shè)備性能會(huì)比一年前有非常顯著的提升,摩爾定律是到了時(shí)間自然而然、輕輕松松就會(huì)發(fā)生的事情。而對(duì)行業(yè)從業(yè)者來(lái)說(shuō),摩爾定律是整個(gè)行業(yè)的KPI,代表了殘酷的競(jìng)爭(zhēng)法則:一個(gè)公司或產(chǎn)品,如果能達(dá)到或超過(guò)摩爾定律,就能夠生存;反過(guò)來(lái),如果達(dá)不到,就只能走向消亡。
站在算力的角度,摩爾定律一直在驅(qū)趕著行業(yè)中的你我:前進(jìn)!前進(jìn)!前進(jìn)!
1.2 馮·諾依曼架構(gòu)過(guò)時(shí)?
馮·諾依曼架構(gòu)模型是計(jì)算機(jī)系統(tǒng)的經(jīng)典模型,簡(jiǎn)單說(shuō),就是一個(gè)計(jì)算機(jī)系統(tǒng)包括輸入、處理和輸出三個(gè)部分。處理部分有控制單元、計(jì)算單元和數(shù)據(jù)暫存(內(nèi)存),處理部分的控制單元和計(jì)算單元組成大家通常理解的中央處理單元CPU。
根據(jù)馮·諾依曼架構(gòu),可以繪制出一個(gè)典型服務(wù)器的模型。一個(gè)服務(wù)器,由核心的處理邏輯、分層級(jí)的寄存器、緩存、內(nèi)存、本地外存四級(jí)的暫存存儲(chǔ)(云服務(wù)器本地存儲(chǔ)也是暫存,關(guān)鍵的數(shù)據(jù)必須存儲(chǔ)到遠(yuǎn)程存儲(chǔ)集群)、以及通過(guò)網(wǎng)絡(luò)的輸入/輸出三部分組成。
站在處理器中處理邏輯部分的角度,不管是從各級(jí)暫存還是從網(wǎng)絡(luò)I/O,都是數(shù)據(jù)的輸入/輸出。因此,計(jì)算模型就可以簡(jiǎn)單的分為兩部分:數(shù)據(jù)處理和數(shù)據(jù)輸入輸出。并且,系統(tǒng)的性能 = 最小值(數(shù)據(jù)處理能力,數(shù)據(jù)輸入/輸出能力)。
近些年來(lái),行業(yè)內(nèi)有一種說(shuō)法:馮·諾依曼架構(gòu)已經(jīng)過(guò)時(shí)。因此,需要打破馮·諾依曼架構(gòu),例如近年來(lái)非?;鸨拇嫠阋惑w化。但這些說(shuō)法,其實(shí)是對(duì)馮·諾依曼架構(gòu)的誤解。
馮·諾依曼架構(gòu)本身很簡(jiǎn)單,只是后來(lái),為了更大規(guī)模的計(jì)算,才逐漸形成了復(fù)雜的存儲(chǔ)分層結(jié)構(gòu)。計(jì)算和I/O之間的不匹配導(dǎo)致了復(fù)雜的存儲(chǔ)分層結(jié)構(gòu),而復(fù)雜的存儲(chǔ)分層結(jié)構(gòu)一方面增加了功耗,另一方面限制了性能的進(jìn)一步提升。
于是,架構(gòu)設(shè)計(jì)開始往回走,存算一體化反對(duì)的只是復(fù)雜的存儲(chǔ)分層結(jié)構(gòu),而不應(yīng)該是馮·諾依曼架構(gòu)。存算一體化,更加簡(jiǎn)單直接的解決I/O和計(jì)算處理性能匹配的問(wèn)題。但是,并沒(méi)有改變馮·諾依曼架構(gòu)的本質(zhì)。
2 與性能相關(guān)的三個(gè)因素
我們舉個(gè)形象的例子:
團(tuán)隊(duì)A的每個(gè)工人可以在單位時(shí)間里加工5個(gè)零件,團(tuán)隊(duì)B的每個(gè)工人在單位時(shí)間里可以加工8個(gè)零件。
團(tuán)隊(duì)A的單位時(shí)間是3分鐘,這意味著團(tuán)隊(duì)A一個(gè)小時(shí)可以有20個(gè)單位時(shí)間;團(tuán)隊(duì)B的單位時(shí)間是5分鐘,這意味著團(tuán)隊(duì)B一個(gè)小時(shí)擁有12個(gè)單位時(shí)間。
團(tuán)隊(duì)A有10個(gè)人,團(tuán)隊(duì)B有20個(gè)人。
這意味著:在一個(gè)小時(shí)里,團(tuán)隊(duì)A可以完成1000個(gè)零件的加工,而團(tuán)隊(duì)B則可以完成1920個(gè)零件的加工。
這里說(shuō)的性能,指的是單位處理器的性能。衡量一個(gè)處理器的性能,通常有三個(gè)因素:
“指令”復(fù)雜度,類比于例子中單位時(shí)間加工的零件數(shù)量,指的是單個(gè)指令中計(jì)算的密度。
運(yùn)行速度,即運(yùn)行頻率,類比于例子中一個(gè)小時(shí)的單位時(shí)間數(shù)量,指的是1秒鐘時(shí)鐘周期變化的數(shù)量。
并行度,則類比于例子中團(tuán)隊(duì)的成員數(shù)量,指的是多個(gè)并行的處理。
也可以簡(jiǎn)潔明了的用公式表示性能和三者的關(guān)系:
(單個(gè)處理器的)性能 = 指令的復(fù)雜度(單位計(jì)算密度) x 頻率 x 并行度
2.1 “指令”復(fù)雜度
CPU是硬件,基于CPU運(yùn)行的程序是軟件;GPU是硬件,基于GPU運(yùn)行的程序是軟件。那么CPU和GPU的差別在哪里?
CPU(不考慮協(xié)處理器)支持的指令稱為通用指令,包括整形計(jì)算類、浮點(diǎn)類、數(shù)據(jù)傳輸類、控制類等。
相比通用指令,一些復(fù)雜類指令(復(fù)雜類指令需要復(fù)雜的硬件邏輯來(lái)處理),則需要專用的硬件處理單元。比如SIMD(單指令流多數(shù)據(jù)流,Single Instruction Multiple Data)類和MIMD(多指令多數(shù)據(jù)流,Multiple Instruction Multiple Data)類指令,則可能是在GPU運(yùn)行。
對(duì)硬件加速單元(Accelerator,從設(shè)計(jì)架構(gòu)的角度也就是ASIC)來(lái)說(shuō),“指令”則是對(duì)算法的一次處理。例如DES算法設(shè)計(jì),其“指令”為一次64bits DES計(jì)算。CPU對(duì)DES的一次處理需要上百條指令,而在DES硬件加速器這里,只需要一條“指令”,可見DES硬件加速器“指令”的復(fù)雜度遠(yuǎn)大于CPU指令的復(fù)雜度。
指令是軟件和硬件的媒介,指令的復(fù)雜度(單位計(jì)算密度)決定了系統(tǒng)的軟硬件解耦程度。按照指令的復(fù)雜度,典型的處理器平臺(tái)大致分為CPU、協(xié)處理器、GPU、FPGA、DSA、ASIC。任務(wù)在CPU運(yùn)行,則定義為軟件運(yùn)行;任務(wù)在協(xié)處理器、GPU、FPGA、DSA或ASIC運(yùn)行,則定義為硬件加速運(yùn)行。
魚和熊掌不可兼得,指令復(fù)雜度和編程靈活性是兩個(gè)互反的特征:指令越簡(jiǎn)單,編程靈活性越高,因此我們才說(shuō)軟件有更高的靈活性;指令越復(fù)雜,性能越高,因此而受到的限制越多,只能用于特定場(chǎng)景的應(yīng)用,其軟件靈活性越差。
一個(gè)系統(tǒng),必然經(jīng)過(guò)前期快速迭代,后期逐漸穩(wěn)定的過(guò)程。因此,系統(tǒng)運(yùn)行的處理器平臺(tái)選擇也必然有如下的一些規(guī)律:
CPU通用軟件平臺(tái):當(dāng)一個(gè)新的應(yīng)用出現(xiàn)的時(shí)候,最早出現(xiàn)的一般是軟件實(shí)現(xiàn)。一來(lái)實(shí)現(xiàn)所需要的代價(jià)較少,可以快速實(shí)現(xiàn)想法;二來(lái)CPU所提供的靈活性,不考慮性能的情況下,使之幾乎可以處理任何場(chǎng)景的任務(wù)。
協(xié)處理器擴(kuò)展指令加速平臺(tái):隨著技術(shù)的演進(jìn),對(duì)性能提出了一些要求。這個(gè)時(shí)候,可以針對(duì)一些比較消耗CPU資源的程序進(jìn)行一定的編程和編譯優(yōu)化。
GPU向量及并行加速平臺(tái):更進(jìn)一步的,技術(shù)廣泛應(yīng)用,并且我們能從算法中尋找到更多的并行性。這個(gè)時(shí)候,我們就可以找一些專用的處理器,如GPU、DSP、NPU等,來(lái)處理。通過(guò)特定的并行優(yōu)化以及支持向量(SIMD)、多指令并行(MIMD/VLIW)等復(fù)雜指令編譯優(yōu)化的方式,深度的優(yōu)化性能。
FPGA硬件可編程加速平臺(tái):隨著技術(shù)越來(lái)越成熟,應(yīng)用的規(guī)模越來(lái)越大。也越來(lái)越消耗資源。這個(gè)時(shí)候,我們值得花費(fèi)更多的精力,提煉出復(fù)雜度非常高的算法(或者可以當(dāng)作一個(gè)非常復(fù)雜的“指令”)然后通過(guò)硬件邏輯實(shí)現(xiàn)。再通過(guò)FPGA硬件可編程的方式快速落地。
DSA/ASIC定制加速平臺(tái):再進(jìn)一步的,技術(shù)更加成熟穩(wěn)定,應(yīng)用規(guī)模足夠龐大,這個(gè)時(shí)候就非常有必要為此場(chǎng)景定制開發(fā)DSA/ASIC,來(lái)達(dá)到最優(yōu)的性能、最低的成本、最小的功耗。
需要注意的是,性能和靈活可編程能力是矛盾的兩面。當(dāng)我們通過(guò)定制硬件加速器的方式來(lái)獲得性能提升,同時(shí)也就意味著放棄了軟件應(yīng)有的靈活性。
特別是復(fù)雜場(chǎng)景,對(duì)靈活性的要求更甚于對(duì)性能的要求,這樣的場(chǎng)景需要花費(fèi)更大的代價(jià),實(shí)現(xiàn)靈活可編程能力的同時(shí),提供非常好的性能。
從軟件到硬件的一個(gè)經(jīng)典的例子就是比特幣,其激烈而快速的完成了從CPU到ASIC的過(guò)渡。比特幣使用的技術(shù)區(qū)塊鏈核心算法是SHA-256,它在各個(gè)平臺(tái)上的性能對(duì)比如下:
CPU:最開始的時(shí)候,大家使用CPU挖礦,一臺(tái)高端個(gè)人電腦,處理速度大概20MH/s(H/s, Hash per second);
GPU:后來(lái)有人用GPU加速挖礦,SHA-256可以繼續(xù)拆分成普通的算術(shù)邏輯運(yùn)算,而GPU具有超級(jí)多的算術(shù)邏輯運(yùn)算單元,一個(gè)高端顯卡的處理速度可以達(dá)到200MH/s;
FPGA:再后來(lái)出現(xiàn)了定制SHA-256算法硬件邏輯的FPGA加速卡來(lái)挖礦,精心設(shè)計(jì)的定制電路的FPGA,可以使運(yùn)算速度達(dá)到1GH/s;
ASIC:而比特大陸公司2015年發(fā)布的ASIC礦機(jī)芯片BM1385,其性能達(dá)到單顆芯片算力可達(dá)32.5GH/s。
2.2 運(yùn)行頻率
(a) 組合電路示例
(b) 數(shù)字電路中的關(guān)鍵路徑
圖 運(yùn)行頻率與電路邏輯的關(guān)系
頻率越高,計(jì)算速度越快。不考慮其他因素的制約,計(jì)算速度和頻率是正比的關(guān)系。而頻率受電路中的關(guān)鍵路徑(延遲最大路徑)約束,兩者呈反比關(guān)系:關(guān)鍵路徑越短,頻率則越高。如上圖所示,頻率受關(guān)鍵路徑制約,而關(guān)鍵路徑與兩個(gè)因素有關(guān):
一個(gè)是關(guān)鍵路徑所包含門的數(shù)量,即從前一級(jí)寄存器到后一級(jí)寄存器之間的最長(zhǎng)路徑所包含的邏輯門的數(shù)量;
另一個(gè)則是單個(gè)邏輯門的延遲時(shí)間,邏輯門的延遲時(shí)間跟半導(dǎo)體生產(chǎn)工藝相關(guān),一般情況下,工藝尺寸越小,單個(gè)邏輯門的延遲越小。
因此,要想優(yōu)化頻率,就是要優(yōu)化關(guān)鍵路徑:一個(gè)是優(yōu)化關(guān)鍵路徑的邏輯門的數(shù)量,另一個(gè)則是優(yōu)化單個(gè)邏輯門的延遲。當(dāng)邏輯門的延遲越小,或者兩級(jí)寄存器之間的邏輯門數(shù)量越少,則頻率越高,計(jì)算速度也就越快。
要想減少兩級(jí)寄存器間邏輯門的數(shù)量,則需要采用更多級(jí)的流水,這樣每一級(jí)流水所做的事情越少,所需要的邏輯門也就越少。
要想減小單個(gè)邏輯門的延遲,主要有如下辦法:
最立竿見影的就是采用更先進(jìn)的工藝,當(dāng)然了,更換工藝需要更多的資金和研發(fā)投入。
另一個(gè)辦法是提升工作電壓,提升電壓會(huì)降低邏輯門的延遲,但與此同時(shí)會(huì)提升功耗和發(fā)熱。發(fā)熱過(guò)高又會(huì)影響到邏輯門的延遲,產(chǎn)生的熱量如果不及時(shí)排出,甚至有可能燒壞整個(gè)電路。所以,通常是把電壓控制在一個(gè)均衡的區(qū)間。
還有一個(gè)辦法是做定制的門電路。通常,大家都選擇的是工藝廠商提供的標(biāo)準(zhǔn)庫(kù)。如果采用定制門電路,則會(huì)在相同工藝下相比別人有更好的性能。例如,在比特幣挖礦芯片行業(yè),在均采用當(dāng)時(shí)最先進(jìn)工藝的情況下,比特大陸采取全定制電路設(shè)計(jì),獲得相比別人更多的性能優(yōu)勢(shì),使其獲得比特幣挖礦的大部分市場(chǎng)。
2.3 并行度
并行的設(shè)計(jì)在硬件邏輯設(shè)計(jì)里非常常見。例如:
指令流水線:指令流水線是一種時(shí)間并行,在同時(shí)有多條指令處理流水線的不同階段,這樣相當(dāng)于有多條指令在并行處理。
指令多發(fā)射(Multiple Issue):一條流水線,從指令緩沖區(qū)一次發(fā)送到譯碼階段就有多條指令,然后在執(zhí)行階段也是多條指令并行。
超線程(Hyper-Thread):在一個(gè)處理器核內(nèi)部,多組不同的指令流處理,分時(shí)的共享處理器核內(nèi)部的各種硬件資源,達(dá)到更佳的資源利用率,提升整體性能。
多總線:例如,指令、數(shù)據(jù)總線分開,多數(shù)據(jù)總線等設(shè)計(jì),進(jìn)一步增加處理器的數(shù)據(jù)處理帶寬。
多核技術(shù):通過(guò)一些內(nèi)部互聯(lián)總線,把多個(gè)處理器核集成到一塊芯片內(nèi),以此來(lái)提升綜合性能。
多處理器芯片:受限于芯片工藝、功耗水平、設(shè)計(jì)架構(gòu),單芯片內(nèi)的多核互聯(lián)不能無(wú)限制增加下去,也可以通過(guò)一些芯片間互聯(lián)技術(shù),把多個(gè)CPU Socket連成一個(gè)NUMA系統(tǒng),當(dāng)前比較常見的是2-8個(gè)Socket互聯(lián)的架構(gòu)。
總線:對(duì)并行總線來(lái)說(shuō),增加數(shù)據(jù)線的寬度,對(duì)增加總線的帶寬是顯而易見的,并行總線一般用于芯片內(nèi)部邏輯通信;串行總線,例如PCIe,相比PCI并行總線,一方面可以快速提升頻率,還可以通過(guò)很多組串行線組合通信來(lái)提升傳輸性能,串行總線一般用于芯片間數(shù)據(jù)通信。
異構(gòu)計(jì)算單元:CPU和GPU、xPU以及各種硬件加速器組成異構(gòu)多處理單元共同協(xié)作完成工作任務(wù),CPU更多的是承擔(dān)控制和數(shù)據(jù)交互的角色。
多服務(wù)器集群:現(xiàn)在大型的互聯(lián)網(wǎng)系統(tǒng)需要成百上千的服務(wù)器,分為業(yè)務(wù)處理、網(wǎng)絡(luò)處理、存儲(chǔ)和數(shù)據(jù)庫(kù)處理等不同功能分工的服務(wù)器,共同組成一個(gè)性能強(qiáng)大并且運(yùn)行穩(wěn)定的系統(tǒng)對(duì)外提供服務(wù)。
通過(guò)不同方向、不同層次的并行技術(shù),都可以提升硬件系統(tǒng)的性能。我們把不同復(fù)雜度的單位處理都當(dāng)作了“指令”,那么,我們就可以通過(guò)IPC(Instruction per Cycle)來(lái)評(píng)價(jià)并行度。對(duì)一個(gè)CPU核來(lái)說(shuō),IPC代表的是每個(gè)周期執(zhí)行的指令數(shù);對(duì)一個(gè)硬件加速模塊來(lái)說(shuō),IPC則代表了一個(gè)周期所能進(jìn)行的單位處理的數(shù)量。
3 I/O和處理的性能匹配
3.1 優(yōu)化泛義的I/O,形成存儲(chǔ)分層結(jié)構(gòu)
如第一部分內(nèi)容的介紹,數(shù)據(jù)I/O的帶寬和數(shù)據(jù)處理的性能是相互配合的。當(dāng)兩者不匹配時(shí),兩者之間性能低的那個(gè)就代表了整個(gè)系統(tǒng)的性能(或者說(shuō),性能低的那個(gè)托了整個(gè)系統(tǒng)的后腿)。
如果計(jì)算處理的性能低于I/O性能,則通過(guò)提高指令復(fù)雜度、運(yùn)行頻率和并行度的方式提升處理的性能。
如果I/O性能低于計(jì)算處理的性能,則常見的提升I/O(這里的I/O是泛義的I/O,不僅僅是計(jì)算機(jī)架構(gòu)中的I/O設(shè)備)的方法有:
-
緩存Cache。內(nèi)存訪問(wèn)延遲無(wú)法匹配處理器流水線的處理能力的情況下,緩存Cache得以應(yīng)用,隨后還出現(xiàn)了多級(jí)Cache。
-
高速存儲(chǔ)。在存儲(chǔ)HDD不能滿足性能的情況下,切換到Sata SSD,再切換到NVMe SSD,以此來(lái)提高存儲(chǔ)I/O。
-
高性能網(wǎng)絡(luò)。不僅僅是因?yàn)樘幚硇阅艿奶嵘_€因?yàn)榉?wù)器集群的高可擴(kuò)展性,以及分布式存儲(chǔ)的廣泛使用,還有整個(gè)應(yīng)用逐漸微服務(wù)化,都使得東西向網(wǎng)絡(luò)流量(數(shù)據(jù)中心內(nèi)網(wǎng)流量)激增。因此,需要低延遲并且高吞吐量的網(wǎng)絡(luò)來(lái)處理網(wǎng)絡(luò)I/O。
在計(jì)算機(jī)體系結(jié)構(gòu)里,根據(jù)訪問(wèn)延遲和容量大小來(lái)對(duì)計(jì)算機(jī)存儲(chǔ)分層(Memory Hierarchy),利用程序局部性原理對(duì)存儲(chǔ)進(jìn)行性能優(yōu)化,既可以匹配處理器延遲又可以提供大容量存儲(chǔ)。
圖 計(jì)算機(jī)存儲(chǔ)分層結(jié)構(gòu)
如上圖所示,只考慮架構(gòu)層面不同存儲(chǔ)層次的功能和作用,可以把存儲(chǔ)結(jié)構(gòu)簡(jiǎn)單分為五個(gè)存儲(chǔ)級(jí)別:
處理器通用寄存器;
各級(jí)緩存;
內(nèi)存,ROM及系統(tǒng)RAM等;
本地外部存儲(chǔ);
遠(yuǎn)程外部存儲(chǔ)。
3.2 存儲(chǔ)分層結(jié)構(gòu)瓶頸,新的I/O優(yōu)化
物極必反!
因?yàn)閮?yōu)化I/O的性能,形成了存儲(chǔ)分層結(jié)構(gòu)。然而復(fù)雜的存儲(chǔ)分層已經(jīng)開始成為問(wèn)題的瓶頸,主要體現(xiàn)在功耗、延遲和訪問(wèn)帶寬,也就是我們常說(shuō)的“存儲(chǔ)墻”和“功耗墻”的問(wèn)題。
存儲(chǔ)分層結(jié)構(gòu)存在的一個(gè)關(guān)鍵原因是程序的局部性。然而,在大數(shù)據(jù)和人工智能時(shí)代,大通量計(jì)算的場(chǎng)景,再加上服務(wù)器多集群擴(kuò)展以及微服務(wù)等對(duì)計(jì)算的拆分,計(jì)算開始呈現(xiàn)“高數(shù)據(jù)量低計(jì)算量”的特點(diǎn),程序局部性逐漸失效。再加上各種數(shù)據(jù)處理引擎開始采用DSA甚至ASIC架構(gòu),計(jì)算量也在快速上升。這樣如何更好的提供I/O成為整個(gè)計(jì)算性能的瓶頸。
行業(yè)當(dāng)前大概有兩個(gè)方向的做法:
一個(gè)方向是往計(jì)算邏輯里放入更多的存儲(chǔ)單元。如增加片內(nèi)內(nèi)存,并且增加各級(jí)的訪問(wèn)帶寬,盡可能的減少層級(jí),以及盡可能不讓中間結(jié)果到下一級(jí)存儲(chǔ),盡可能的讓計(jì)算全速進(jìn)行。
另一個(gè)方法則更加極端,直接“反其道而行之”,在存儲(chǔ)體里放計(jì)算邏輯,這就是大家現(xiàn)在所說(shuō)的“存內(nèi)計(jì)算”。
總之,兩個(gè)方法都是盡可能的讓I/O和計(jì)算的性能更加匹配。
4 性能提升的各種方法
前面我們通過(guò)跟性能相關(guān)的四個(gè)因素(處理引擎性能的三個(gè)因素:指令復(fù)雜度、運(yùn)行頻率和并行度,以及I/O性能匹配)介紹了如何提升性能。接下來(lái),我們介紹一些主要的提升性能的方法。
4.1 工藝封裝的進(jìn)步
tsmc 5nm已經(jīng)量產(chǎn),3nm工藝已經(jīng)在路上,2nm、1nm也都在未來(lái)幾年的路線圖中。并且,tsmc已經(jīng)開始在攻關(guān)0.1nm工藝,半導(dǎo)體工藝即將進(jìn)入亞納米(埃米)時(shí)代。此外,在存儲(chǔ)領(lǐng)域,近些年來(lái)還興起了3D封裝技術(shù),使得集成電路從二維進(jìn)入三維。還有,芯粒(chiplet)機(jī)制的出現(xiàn),把多個(gè)芯片裸DIE集成到一起,從3D到4D,都進(jìn)一步增強(qiáng)了單位面積的晶體管集成度。工藝持續(xù)進(jìn)步、3D堆疊以及Chiplet多Die互聯(lián),使得芯片從2D->3D->4D。這些技術(shù)的進(jìn)步,意味著在芯片這個(gè)尺度,可以容納更多的晶體管,也意味著芯片的規(guī)模越來(lái)越大。
過(guò)去50年里,工藝進(jìn)步是推動(dòng)摩爾定律的主要因素。每隔兩年左右,單個(gè)晶體管變得更小、更快、功耗更低。在面積、功耗不變的硅片上,可以放下更多的晶體管。上圖是斯坦福大學(xué)的學(xué)者在2012年整理的CPU性能提升的示意圖,可以看到,在架構(gòu)不變,僅靠工藝進(jìn)步,其提升的性能依然是相當(dāng)?shù)目捎^??梢圆豢鋸埖恼f(shuō),工藝進(jìn)步才是摩爾定律持續(xù)發(fā)揮作用的“主力軍”。
總結(jié)一下,工藝進(jìn)步主要可以優(yōu)化三個(gè)因素:
工藝進(jìn)步不直接影響處理引擎架構(gòu),也就意味著沒(méi)法提升“指令”復(fù)雜度;
由于工藝進(jìn)步,單個(gè)晶體管的速度可以更快,這樣,可以立竿見影的提升頻率;
因?yàn)橘Y源足夠富余,可以通過(guò)并行多個(gè)處理引擎的方式實(shí)現(xiàn)更高并行性;
工藝進(jìn)步,可以內(nèi)部嵌入更多片內(nèi)存儲(chǔ)、通過(guò)多DIE互聯(lián)/封裝,進(jìn)一步優(yōu)化泛義I/O;或者通過(guò)3D和chiplet等方式實(shí)現(xiàn)更大的系統(tǒng)下的更高的交互性能。
4.2 存算一體化
隨著AI等高算力場(chǎng)景的爆發(fā),業(yè)界迫切需要新技術(shù)來(lái)解決算力的瓶頸。存算一體化芯片成為一種重要的選擇。阿里達(dá)摩院總結(jié)了存算一體的三種技術(shù)路線:
近存儲(chǔ)計(jì)算(Processing Near Memory):計(jì)算操作由位于存儲(chǔ)芯片外部的獨(dú)立計(jì)算芯片完成。
內(nèi)存儲(chǔ)計(jì)算(Processing In Memory):計(jì)算操作由位于存儲(chǔ)芯片內(nèi)部的獨(dú)立計(jì)算單元完成,存儲(chǔ)單元和計(jì)算單元相互獨(dú)立存在。
內(nèi)存執(zhí)行計(jì)算(Processing With Memory):存儲(chǔ)芯片內(nèi)部的存儲(chǔ)單元完成計(jì)算操作,存儲(chǔ)單元和計(jì)算單元完全融合,沒(méi)有一個(gè)獨(dú)立的計(jì)算單元。
站在架構(gòu)的視角,近內(nèi)存技術(shù)是一種優(yōu)化內(nèi)存訪問(wèn)性能的辦法,能夠通過(guò)工藝或封裝,提供數(shù)量級(jí)提升的內(nèi)存性能。能夠:提高內(nèi)存訪問(wèn)的性能,降低內(nèi)存訪問(wèn)的代價(jià),緩解由于數(shù)據(jù)搬運(yùn)產(chǎn)生的性能瓶頸。
AI、大數(shù)據(jù)處理等應(yīng)用,大數(shù)據(jù)量低計(jì)算量。這樣,AI-DSA類的芯片,都有一個(gè)大的特點(diǎn),內(nèi)部有非常大的片內(nèi)存儲(chǔ)(On-chip Memory)。而內(nèi)存儲(chǔ)計(jì)算則更加激進(jìn),直接是在存儲(chǔ)中放計(jì)算處理邏輯。不過(guò)在此刻,內(nèi)存和計(jì)算處理依然是分開的獨(dú)立模塊。
而內(nèi)存執(zhí)行計(jì)算,當(dāng)前主要是用于AI場(chǎng)景,可以認(rèn)為是一個(gè)偏ASIC的設(shè)計(jì)。通過(guò)模擬計(jì)算,把卷積計(jì)算和存儲(chǔ)體深度結(jié)合起來(lái)。由于模擬計(jì)算的精度有限,也由于較定制的設(shè)計(jì),這樣的內(nèi)存計(jì)算主要用于終端AI推理場(chǎng)景,或者說(shuō)對(duì)能效比非常敏感的小規(guī)模的嵌入式場(chǎng)景。
總結(jié)一下,存算一體化主要優(yōu)化的是I/O,主要是通過(guò)工藝和封裝的設(shè)計(jì)和調(diào)整,使得系統(tǒng)能夠更加輕量而高性能的進(jìn)行存儲(chǔ)訪問(wèn)。內(nèi)存執(zhí)行計(jì)算則相當(dāng)于定制芯片,可以算作是提高“指令”復(fù)雜度,不過(guò)這些要?dú)w屬到接下來(lái)要介紹的架構(gòu)的范疇。
4.3 架構(gòu)優(yōu)化和創(chuàng)新
工藝的進(jìn)步,給架構(gòu)師們提供了更多的資源和發(fā)揮的空間:
總線,從最簡(jiǎn)單的單總線到總線開關(guān),再到Ring環(huán)形總線,甚至Mesh網(wǎng)絡(luò),以及基于更加功能強(qiáng)大總線完成的集成越來(lái)越多復(fù)雜模塊的超大SOC。
CPU的流水線、多發(fā)射、多級(jí)Cache、多核,以及擴(kuò)展的各類協(xié)處理器;
GPU也從專門的圖形加速卡變成了GPGPU(后續(xù),GPU默認(rèn)為GPGPU),集成了數(shù)以千計(jì)的通用處理核心,成為并行計(jì)算的主力平臺(tái)。
近些年,興起了DSA的熱潮,進(jìn)入了體系結(jié)構(gòu)的“黃金年代”。DSA當(dāng)前的兩個(gè)重要特點(diǎn),一個(gè)是更加復(fù)雜的計(jì)算引擎,一個(gè)是更加龐大的片內(nèi)存儲(chǔ)。
工藝進(jìn)步提供了更多的晶體管資源,使得大家能夠更加自由的發(fā)揮架構(gòu)創(chuàng)新的價(jià)值。工藝發(fā)展和架構(gòu)創(chuàng)新相輔相成:工藝發(fā)展給架構(gòu)創(chuàng)新提供了更多的發(fā)揮空間,而架構(gòu)創(chuàng)新讓工藝的價(jià)值落地。
架構(gòu)創(chuàng)新是整個(gè)設(shè)計(jì)的主導(dǎo),架構(gòu)創(chuàng)新可以從所有四個(gè)方面全方位的優(yōu)化整體性能:
“指令”復(fù)雜度,處理引擎選擇CPU、GPU還是其他DSA/ASIC定制設(shè)計(jì),均可以提升指令復(fù)雜度;
通過(guò)更優(yōu)化的流水線,每個(gè)階段做的事情減少,在同等工藝下,依然可以提升頻率;
通過(guò)架構(gòu)上的優(yōu)化,實(shí)現(xiàn)在共享資源情況下的并行。比如Hyper-thread并行共享ALU/MAC等執(zhí)行單元,比如多核并行共享三級(jí)Cache和內(nèi)存。也包括充分利用資源實(shí)現(xiàn)的其他并行機(jī)制。
對(duì)I/O訪問(wèn)也需要更多的優(yōu)化。比如總線的非獨(dú)占、Outstanding,多總線,還有多通道內(nèi)存、NVMe以及高性能網(wǎng)絡(luò)等等。
5 宏觀的算力
5.1 實(shí)際總算力的定義
性能是微觀的概念,代表了單個(gè)個(gè)體的計(jì)算能力。而算力則是宏觀的概念,算力是很多個(gè)體的計(jì)算能力的總和。為了避免混淆,我們采用總算力的叫法。
在前面我們已經(jīng)介紹了單個(gè)個(gè)體的性能(在泛I/O不拖后腿的情況下):
(單個(gè)處理器的)性能 = 指令的復(fù)雜度(單位計(jì)算密度) x 頻率 x 并行度
那么總算力則和單個(gè)處理器的性能以及處理器的數(shù)量成正比:
總算力 = (單個(gè)處理器的)性能 x 處理器的數(shù)量
雖然總算力可以很高,但如果因?yàn)楦鞣矫娴脑?,其利用率不高,則也不夠好。因此:
實(shí)際總算力 = 總算力 x 利用率
= 指令的復(fù)雜度(單位計(jì)算密度) x 頻率 x 并行度 x 處理器的數(shù)量 x 利用率
5.2 處理器的數(shù)量,實(shí)現(xiàn)規(guī)?;?/h2>
總算力的概念非常的直觀,一方面是單顆芯片的算力要高,另一方面,芯片要被大規(guī)模采用。像CPU、GPU以及DPU這樣的大芯片,只有得到了大規(guī)模的采用,才能真正的發(fā)揮芯片的價(jià)值,在商業(yè)上才能做到真正的成功。反之,如果芯片沒(méi)有大規(guī)模落地,即使性能太好,一切都是浮云。
那如何做到芯片能夠規(guī)模化呢?這是一個(gè)非常復(fù)雜的問(wèn)題,涉及到很多方面的因素。如果只考慮核心的架構(gòu)設(shè)計(jì),則是需要在性能和靈活性這兩個(gè)矛盾的關(guān)鍵因素達(dá)到平衡甚至兼顧。CPU極度靈活,但性能瓶頸;ASIC性能極致,但靈活性差。如何設(shè)計(jì)一個(gè)均衡的算力平臺(tái),兼顧性能和靈活可編程能力,使得總算力盡可能最高,是一個(gè)非常巨大的挑戰(zhàn)。
5.3 算力的利用率,降低成本,普惠大眾
云計(jì)算沒(méi)有出現(xiàn)的時(shí)候,如果我們想部署一套互聯(lián)網(wǎng)系統(tǒng)給大家提供服務(wù),則需要自己購(gòu)買物理的服務(wù)器,然后租用運(yùn)營(yíng)商的機(jī)房。整個(gè)過(guò)程成本很高,而且彈性不足。不知道用戶會(huì)有多少,也不知道服務(wù)器應(yīng)該購(gòu)買多少量,應(yīng)該是10臺(tái)還是1000臺(tái)。買少了,用戶訪問(wèn)量快速上升,服務(wù)會(huì)掛掉;買多了,如果用不到,浪費(fèi)錢財(cái)資源閑置。超過(guò)一定數(shù)量,有可能就需要自己建機(jī)房,自己運(yùn)維硬件。整個(gè)業(yè)務(wù)模式很重。
后來(lái),云計(jì)算幫助用戶完成了基礎(chǔ)設(shè)施的建設(shè),用戶只需要按需購(gòu)買。一方面,不需要關(guān)心門檻高而且距離業(yè)務(wù)非常遠(yuǎn)的基礎(chǔ)設(shè)施建設(shè)。另一方面,實(shí)現(xiàn)完全的按需付費(fèi),快速而方面的擴(kuò)容或者縮容,可以非常明顯的降低運(yùn)維成本。
再后來(lái),云計(jì)算這種集中計(jì)算的架構(gòu)其性能挑戰(zhàn)越來(lái)越大,于是有了邊緣計(jì)算。類似于集中(云計(jì)算)和分布(邊緣計(jì)算)的關(guān)系,邊緣計(jì)算能夠相比云計(jì)算提供更低延遲的服務(wù),與此同時(shí),大幅度減輕云的壓力。不過(guò)邊緣計(jì)算也帶來(lái)了一些問(wèn)題,就是資源規(guī)模小,地域分散,而且運(yùn)行環(huán)境各異。如何充分利用分散到各處的邊緣計(jì)算資源,成為了需要重點(diǎn)解決的事情。
近些年來(lái),宏觀的一些技術(shù)趨勢(shì),比如云網(wǎng)融合、超云(云MSP實(shí)現(xiàn)跨云和混合云模式,我們定義為超云)以及國(guó)家“東數(shù)西算”戰(zhàn)略等等。本質(zhì)的,都是在通過(guò)各種各樣的手段,盡可能的提高算力的整體利用率,以此來(lái)降低算力的成本,讓算力變得更加唾手可得。
6 總結(jié)
把相關(guān)的若干因素再總結(jié)一下,要提高宏觀的實(shí)際總算力,就必須要:
提高指令的復(fù)雜度(單位計(jì)算密度)。新的DSA架構(gòu)創(chuàng)新,均衡的考慮不同的算力平臺(tái),以及通過(guò)異構(gòu)和超異構(gòu)計(jì)算,融合多種平臺(tái)一起協(xié)作,完成系統(tǒng)級(jí)計(jì)算。
提高運(yùn)行頻率。優(yōu)化設(shè)計(jì),選擇最優(yōu)的流水線級(jí)數(shù)以及工藝等的持續(xù)進(jìn)步,優(yōu)化系統(tǒng)的運(yùn)行頻率。
提高并行度。更高的擴(kuò)展性(Scalibility),更高性能的各層級(jí)的互聯(lián)總線,并行更多的處理引擎。
優(yōu)化I/O和處理的匹配度。通過(guò)工藝和封裝優(yōu)化,實(shí)現(xiàn)更加匹配的計(jì)算和I/O匹配。
實(shí)現(xiàn)處理器芯片的更大規(guī)模落地。均衡芯片的整體性能和靈活可編程能力,實(shí)現(xiàn)宏觀的總算力最大化。
進(jìn)一步優(yōu)化宏觀算力的利用率。算力上規(guī)模后,通過(guò)云計(jì)算、邊緣計(jì)算、超云、云網(wǎng)融合等手段,持續(xù)優(yōu)化算力的利用率,降低算力的成本。
簡(jiǎn)單一些的說(shuō),算力提升核心就兩個(gè)方面:
一個(gè)是增大規(guī)模(Scale out),通過(guò)擴(kuò)大算力基礎(chǔ)設(shè)施建設(shè),以及“東數(shù)西算”等方式,構(gòu)建更加規(guī)模龐大并且低能耗的現(xiàn)代化數(shù)據(jù)中心。
另一個(gè)是提升單個(gè)計(jì)算節(jié)點(diǎn)的性能(Scale up),構(gòu)建新一代的創(chuàng)新計(jì)算范式,要把算力再持續(xù)提升1-2個(gè)數(shù)量級(jí),并且能夠提供非常好的易用編程能力,來(lái)持續(xù)應(yīng)對(duì)未來(lái)10年的更加復(fù)雜系統(tǒng)的算力需求爆炸的挑戰(zhàn)。
參考文獻(xiàn):
https://www.stcn.com/xw/sd/202201/t20220118_4085409.html,數(shù)字基建大工程啟動(dòng),“西算”四大樞紐節(jié)點(diǎn)獲批
https://mp.weixin.qq.com/s/cWS4YeIlUEm1dexjgN8f-w,鄔賀銓院士:算力如何賦能未來(lái)世界?
https://mp.weixin.qq.com/s/_0_uwuCuKnMiuZM_jvYnaw, 性能提升10倍以上:阿里達(dá)摩院成功研發(fā)新型存算一體芯片
- CPU DB: Recording Microprocessor History, by Andrew Danowitz, Kyle Kelley, James Mao, John P. Stevenson, and Mark Horowitz, http://cpudb.stanford.edu/p55-danowitz.pdf