在本文中,我們將從三個(gè)方面介紹人工智能系統(tǒng)中使用的核心處理器體系結(jié)構(gòu)的最常見(jiàn)選擇:標(biāo)量、向量和空間。對(duì)于每種情況,我們都將對(duì)其性能特征和優(yōu)化算法的類型進(jìn)行一些概括。在后面的文章中,我們將更深入地討論它們是如何實(shí)現(xiàn)的,以及它們?cè)诓煌愋偷?a href="http://www.wenjunhu.com/tags/ai/" target="_blank">AI工作負(fù)載上的性能。
Flynn分類法
如果沒(méi)有相當(dāng)流行的“Flynn分類法”,任何對(duì)處理器架構(gòu)的闡述都是不完整的,因?yàn)槊ê艹R?jiàn)。它的初衷是描述一臺(tái)哈佛架構(gòu)計(jì)算機(jī)如何攝取指令和數(shù)據(jù)流,并且盡可能在這種情況下最有意義。盡管如此,現(xiàn)代處理器通常比其他處理器更接近于一種特性,因此我們經(jīng)常用這種方式來(lái)指代它們,但我們應(yīng)該注意,假設(shè)任何現(xiàn)代處理器都完全符合其中一種類型,那將是一個(gè)嚴(yán)重的過(guò)度簡(jiǎn)化。這里介紹的是一種比較開(kāi)放的稍微現(xiàn)代一些的分類法。
SISD:?jiǎn)沃噶顔螖?shù)據(jù)
最簡(jiǎn)單的CPU形式適合這一類。CPU的每個(gè)循環(huán)攝取指令和數(shù)據(jù)元素并處理它們以便修改全局狀態(tài)。這個(gè)概念是計(jì)算機(jī)科學(xué)的基礎(chǔ),因此大多數(shù)編程語(yǔ)言都編譯成一組針對(duì)這種架構(gòu)的指令。大多數(shù)現(xiàn)代CPU也模擬SISD操作,盡管軟件和硬件中可能會(huì)用到非常不同的概念。
SIMD:?jiǎn)沃噶疃鄶?shù)據(jù)
最簡(jiǎn)單的SIMD架構(gòu)是矢量處理器,類似于具有更寬數(shù)據(jù)類型的SISD架構(gòu),因此每條指令在多個(gè)連續(xù)數(shù)據(jù)元素上運(yùn)行。稍微復(fù)雜的是線程并行性,其中單個(gè)指令在多個(gè)線程狀態(tài)上操作,這是更通用的編程模型。
MISD:多指令單數(shù)據(jù)
對(duì)于什么是錯(cuò)誤處理程序沒(méi)有普遍的共識(shí),所以我在這里將不做限制??紤]一個(gè)架構(gòu),它能夠在單個(gè)數(shù)據(jù)輸入上以單個(gè)周期的順序執(zhí)行多個(gè)任意指令。這基本上需要從輸出到輸入進(jìn)行多路復(fù)用,而不存儲(chǔ)中間結(jié)果。稍后,我們將看到這種高級(jí)體系結(jié)構(gòu)的優(yōu)點(diǎn)。
MIMD:多指令多數(shù)據(jù)
我再次不設(shè)限地說(shuō),一個(gè)非常長(zhǎng)的指令字(VLIW)處理器最適合這個(gè)類別。這種處理器的目的是公開(kāi)一個(gè)更精確地適合處理器可用資源的編程模型。VLIW指令能夠同時(shí)向所有執(zhí)行單元發(fā)送數(shù)據(jù),這通過(guò)指令級(jí)并行(ILP)具有很大的性能優(yōu)勢(shì),但編譯器必須具有體系結(jié)構(gòu)感知能力并執(zhí)行所有調(diào)度優(yōu)化。一般來(lái)說(shuō),這被證實(shí)具有挑戰(zhàn)性。
標(biāo)量(CPUs):混合性能
現(xiàn)代CPU是一個(gè)非常復(fù)雜的系統(tǒng),旨在很好地完成各種任務(wù)。它的元素涵蓋了Flynn的每一類分類。您當(dāng)然可以將其編程為SISD機(jī)器,它將為您提供輸出,就好像程序是按照您給出的順序計(jì)算的一樣。但是,每個(gè)CISC指令通常被轉(zhuǎn)換為多個(gè)RISC指令鏈,以便在單個(gè)數(shù)據(jù)元素(MISD)上執(zhí)行。它還將查看您提供的所有指令和數(shù)據(jù),并將它們并行排列以便在許多不同的執(zhí)行單元(MIMD)上執(zhí)行數(shù)據(jù)。還有許多操作,例如在AVX指令集中,對(duì)許多并行對(duì)齊的數(shù)據(jù)元素(SIMD)執(zhí)行相同的計(jì)算。此外,由于多個(gè)內(nèi)核和多個(gè)線程并行運(yùn)行以在單個(gè)內(nèi)核上同時(shí)使用資源,因此可以實(shí)現(xiàn)Flynn分類法中的幾乎任何類型的并行性。
代碼優(yōu)化器
如果CPU要以簡(jiǎn)單的SISD模式運(yùn)行,從存儲(chǔ)器中一次一個(gè)地抓取每個(gè)指令和數(shù)據(jù)元素,那么不管頻率有多高,它都會(huì)非常慢。在現(xiàn)代處理器中,只有相對(duì)較小部分的管芯區(qū)域?qū)S糜趯?shí)際執(zhí)行算術(shù)和邏輯。其余部分專門用于預(yù)測(cè)程序接下來(lái)要做什么,并在不違反任何因果約束的情況下排列指令和數(shù)據(jù)以有效執(zhí)行。也許與CPU的性能和其他體系結(jié)構(gòu)相比,關(guān)系最密切的是對(duì)條件分支的處理。它不是等待解析一個(gè)分支,而是預(yù)測(cè)要朝哪個(gè)方向走,然后在出錯(cuò)時(shí)完全恢復(fù)處理器狀態(tài)。在硅片上蝕刻了數(shù)百個(gè)這樣的技巧,這些技巧在各種各樣的工作負(fù)載上進(jìn)行測(cè)試,在執(zhí)行高度復(fù)雜的任意代碼時(shí)提供極大的優(yōu)勢(shì)。
摩爾定律哲學(xué)
在我的第一份工作中,我被指派去集成一個(gè)非常昂貴的專用集成電路,這被認(rèn)為是實(shí)時(shí)解碼衛(wèi)星圖像所必需的。我注意到這個(gè)設(shè)計(jì)有幾年的歷史了,我做了一些計(jì)算,結(jié)果告訴我,我可以在英特爾處理器上擁有幾乎相同的計(jì)算能力。在ASIC可用之前,我用C語(yǔ)言編寫(xiě)了該算法,并在奔騰III CPU上演示了該系統(tǒng)。那時(shí)候,'Dennard Scaling'的速度如此之快,以至于在一小段時(shí)間內(nèi),通用處理器的性能提升超過(guò)了對(duì)專用處理器的需求。選擇通用處理器的最大優(yōu)勢(shì)可能是它易于編程,這使其成為算法開(kāi)發(fā)和系統(tǒng)集成的首選平臺(tái)。可以將算法優(yōu)化為更專業(yè)的處理器,但CPU已經(jīng)非常擅長(zhǎng)為您執(zhí)行此操作。在我的特殊情況下,第一版衛(wèi)星使用Reed-Solomon碼,但以后的設(shè)計(jì)還是考慮用Turbo碼。使用ASIC的下行鏈路站點(diǎn)必須更換整個(gè)系統(tǒng),我們的站點(diǎn)將使用簡(jiǎn)單的軟件更新和常規(guī)CPU升級(jí)。因此,您可以花時(shí)間優(yōu)化代碼,也可以將時(shí)間花在創(chuàng)新應(yīng)用程序上。摩爾定律的推論是,很快就會(huì)足夠快。
矢量(GPU和TPU):簡(jiǎn)單和平行
在許多方面,矢量處理器是最簡(jiǎn)單的現(xiàn)代體系結(jié)構(gòu):一個(gè)非常有限的計(jì)算單元,它在芯片上重復(fù)多次,以便在大量數(shù)據(jù)上執(zhí)行相同的操作。這些都是第一次普及的圖形,因此術(shù)語(yǔ)GPU。一般來(lái)說(shuō),GPU不具備CPU為優(yōu)化復(fù)雜的任意代碼所做的預(yù)測(cè)gymnastics功能,并且具體地具有僅限于支持某些類型的計(jì)算的有限指令集。GPU性能的大部分進(jìn)步都是通過(guò)密度,面積,頻率和內(nèi)存帶寬的基本技術(shù)擴(kuò)展實(shí)現(xiàn)的。
GPGPU
最近有一種趨勢(shì)是擴(kuò)展GPU指令集以支持通用計(jì)算。這些gp指令必須經(jīng)過(guò)調(diào)整才能在simd體系結(jié)構(gòu)上運(yùn)行,這就暴露了一些優(yōu)點(diǎn)和缺點(diǎn),具體取決于算法。許多被編程為在CPU上作為重復(fù)循環(huán)運(yùn)行的算法實(shí)際上只是在每個(gè)循環(huán)中對(duì)數(shù)組的每個(gè)相鄰數(shù)據(jù)元素執(zhí)行相同的操作。通過(guò)一些程序員的努力,它們可以很容易地并行化,有時(shí)在GPU上大規(guī)模地并行化。
值得注意的是。如果任何元素上有任何條件,那么所有分支都必須在所有元素上運(yùn)行。對(duì)于復(fù)雜代碼,這可能意味著計(jì)算時(shí)間相對(duì)于CPU呈指數(shù)增長(zhǎng)。GPU具有非常寬的內(nèi)存總線,可以提供出色的流數(shù)據(jù)性能,但是如果內(nèi)存訪問(wèn)與向量處理器元素不一致,那么每個(gè)數(shù)據(jù)元素都需要來(lái)自內(nèi)存總線的單獨(dú)請(qǐng)求,而CPU具有非常復(fù)雜的預(yù)測(cè)緩存機(jī)制,可以大大補(bǔ)償這一點(diǎn)。
內(nèi)存本身非常快的同時(shí)也非常小,并且依賴于PCIe總線上的數(shù)據(jù)訪問(wèn)傳輸。在一般情況下,GPGPU算法的開(kāi)發(fā)比CPU要困難得多。然而,這種挑戰(zhàn)在一定程度上是通過(guò)發(fā)現(xiàn)和優(yōu)化高效的并行算法來(lái)解決的,這些算法通過(guò)統(tǒng)一的執(zhí)行分支和對(duì)齊的內(nèi)存訪問(wèn)獲得相同的結(jié)果。通常,這些算法在原始操作方面效率較低,但在并行架構(gòu)中執(zhí)行速度更快。
AI操作
許多人工智能中流行的算法都是基于線性代數(shù)的,而參數(shù)矩陣的大規(guī)模擴(kuò)展使得該領(lǐng)域有了很大的進(jìn)步。GPU的并行性允許最基本的線性代數(shù)的大規(guī)模加速,因此它適合AI研究人員,只要它們保持在矩陣上密集線性代數(shù)的范圍內(nèi),矩陣足夠大以占據(jù)大部分處理元素,小到足以容納GPU的內(nèi)存。然而,這種加速是如此之快,以至于到今天為止,在這些限制下,在深入學(xué)習(xí)方面已經(jīng)取得了很大的進(jìn)展。
GPU中現(xiàn)代開(kāi)發(fā)的兩個(gè)主要推動(dòng)力是Tensor Processing Unit(TPU),它們?cè)谝粋€(gè)周期內(nèi)執(zhí)行全矩陣運(yùn)算,而多GPU互連則用于處理更大的網(wǎng)絡(luò)。我們?cè)趯S脠D形的硬件架構(gòu)和為AI設(shè)計(jì)的硬件之間經(jīng)歷了更大的分歧。
今天,我們?cè)趯S脠D形的硬件架構(gòu)和為AI設(shè)計(jì)的硬件之間遇到了更大的分歧。最簡(jiǎn)單的分歧是在精度上,AI正在開(kāi)發(fā)基于低精度浮點(diǎn)和整數(shù)運(yùn)算的技術(shù)。稍顯遲鈍的是圖形處理器用來(lái)實(shí)時(shí)呈現(xiàn)令人信服的復(fù)雜場(chǎng)景重現(xiàn)的快捷方式,通常使用非常專業(yè)的計(jì)算單元。因此,架構(gòu)之間的相似性以兩者的最高優(yōu)化級(jí)別結(jié)束。
Systolic Arrays
ASIC或FPGA可以為任何類型的計(jì)算體系結(jié)構(gòu)設(shè)計(jì),但是這里我們關(guān)注的是特定類型的體系結(jié)構(gòu),它與其他選擇有些不同,并且與人工智能相關(guān)。在諸如CPU或GPU的時(shí)鐘體系結(jié)構(gòu)中,每個(gè)時(shí)鐘周期從寄存器加載數(shù)據(jù)元素,將數(shù)據(jù)移動(dòng)到處理元件,等待操作完成,然后將結(jié)果存儲(chǔ)回寄存器以進(jìn)行下一個(gè)操作。在空間數(shù)據(jù)流中,操作在處理器上物理連接,以便一旦計(jì)算結(jié)果就執(zhí)行下一個(gè)操作,并且結(jié)果不存儲(chǔ)在寄存器中。當(dāng)在處理元素本地的寄存器中包含它們自己的狀態(tài)的中等復(fù)雜單元以這種方式鏈接在一起時(shí),我們將其稱為“Systolic Arrays”。
功耗、延遲和吞吐量
有一些直接的優(yōu)勢(shì)很容易實(shí)現(xiàn)。在基于寄存器的處理器中,功耗主要是由寄存器之間的數(shù)據(jù)存儲(chǔ)和傳輸造成的。其中唯一消耗的能量是處理元素,并將數(shù)據(jù)傳輸?shù)较乱浑A段。另一個(gè)主要優(yōu)點(diǎn)是元素之間的延遲,這不再局限于時(shí)鐘周期。在吞吐量方面也有一些潛在的優(yōu)勢(shì),因?yàn)閿?shù)據(jù)可以以最慢處理階段限制的速率被時(shí)鐘發(fā)送到Systolic Arrays中。數(shù)據(jù)以相同的速率在另一端輸出,其間存在一些延遲,從而建立數(shù)據(jù)流。與同步時(shí)鐘 - 執(zhí)行 - 存儲(chǔ)循環(huán)相比,這可以是更高能效和/或更快的數(shù)量級(jí),這取決于架構(gòu)的目標(biāo)。
數(shù)據(jù)流設(shè)計(jì)
如果說(shuō)CPU是最容易編程的,并且GPU提出了更大的挑戰(zhàn),那么FPGA需要非常大的努力和大量的技能,而ASIC則需要更大量的成本和工程投資。盡管如此,特定算法的好處仍然很大。
要想知道這有多大的優(yōu)勢(shì),可以考慮在現(xiàn)代硅工藝中驅(qū)動(dòng)另一個(gè)逆變器的“標(biāo)準(zhǔn)化延遲”以單皮秒為單位測(cè)量,而時(shí)鐘周期接近納秒。類似地,傳輸能量是電阻和電容的函數(shù),其可以根據(jù)互連的長(zhǎng)度來(lái)計(jì)算,并且處理元件之間的距離可以比到在時(shí)鐘周期之間保持?jǐn)?shù)據(jù)的寄存器的距離短幾個(gè)數(shù)量級(jí)。FPGA沒(méi)有太大的優(yōu)勢(shì),因?yàn)樵g存在額外的扇出,切換和傳輸延遲,但它提供了靈活性,可以通過(guò)一個(gè)芯片適應(yīng)多種數(shù)據(jù)流架構(gòu)。雖然可以實(shí)現(xiàn)任何類型的算法,但是復(fù)雜性存在限制,因?yàn)闂l件需要兩個(gè)分支的布局,這大大增加了面積并降低了利用效率。FPGA和ASICS還可以采用同步和收縮結(jié)構(gòu)的混合來(lái)優(yōu)化布局效率和速度之間的權(quán)衡。
數(shù)據(jù)流系統(tǒng)
用于AI實(shí)現(xiàn)的最常見(jiàn)的systolic array 類型是張量核心,它作為TPU或GPU的一部分集成到同步體系結(jié)構(gòu)中。還提出了許多不同類型的卷積核心。已經(jīng)在FPGA系統(tǒng)中實(shí)現(xiàn)了整個(gè)深度學(xué)習(xí)架構(gòu)(如ResNet-50)的完整數(shù)據(jù)流實(shí)現(xiàn),從而在延遲和功耗效率方面實(shí)現(xiàn)了最先進(jìn)的性能??啥ㄖ菩赃€允許任意位長(zhǎng)精度,這會(huì)減小布局大小和處理延遲,但必須仔細(xì)調(diào)整以適應(yīng)系統(tǒng)的統(tǒng)計(jì)性能要求。然而,主要的獨(dú)特功能是處理的實(shí)時(shí)性質(zhì)允許AI與實(shí)時(shí)系統(tǒng)中的其他信號(hào)處理組件集成。
結(jié)論
在為特定系統(tǒng)選擇AI處理器時(shí),了解每種算法在所用算法的上下文中的相對(duì)優(yōu)勢(shì)以及系統(tǒng)要求和性能目標(biāo)非常重要。在后面的章節(jié)中,我們將介紹一些注意事項(xiàng)和示例。我們將看到這些處理器體系結(jié)構(gòu)中的每一個(gè)在各種系統(tǒng)級(jí)考慮因素中都比其他處理器體系結(jié)構(gòu)更具優(yōu)勢(shì)。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7134瀏覽量
89500 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3052瀏覽量
74268 -
AI處理器
+關(guān)注
關(guān)注
0文章
92瀏覽量
9540
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論