存內(nèi)計(jì)算是一個(gè)由來已久的概念,其主要目的是為了解決內(nèi)存墻問題。這里首先談?wù)勈裁词莾?nèi)存墻。今天最常見的計(jì)算機(jī)架構(gòu)師馮諾依曼架構(gòu),而在馮諾伊曼架構(gòu)中,計(jì)算/處理單元與內(nèi)存是兩個(gè)完全分離的單元:計(jì)算/處理單元根據(jù)指令從內(nèi)存中讀取數(shù)據(jù),在計(jì)算/處理單元中完成計(jì)算/處理,并存回內(nèi)存。
馮諾伊曼架構(gòu)雖然經(jīng)典,但是也有內(nèi)存墻的問題。在過去幾十年中,處理器的運(yùn)行速度隨著摩爾定律高速提升,然而計(jì)算機(jī)中的主存儲(chǔ)器DRAM是基于電容充放電實(shí)現(xiàn)的高密度存儲(chǔ)方案,其性能(速度)取決于電容充放電速度以及DRAM與處理器之間的接口帶寬,總體來看其性能提升速度遠(yuǎn)遠(yuǎn)慢于處理器速度,目前DRAM的性能已經(jīng)成為了整體計(jì)算機(jī)性能的一個(gè)重要瓶頸,即所謂阻礙性能提升的“內(nèi)存墻”。
除了性能之外,內(nèi)存對(duì)于能效比的限制也成了傳統(tǒng)馮諾伊曼體系計(jì)算機(jī)的一個(gè)瓶頸,尤其是對(duì)于人工智能(神經(jīng)網(wǎng)絡(luò)模型)應(yīng)用來說。神經(jīng)網(wǎng)絡(luò)的特點(diǎn)就是計(jì)算量大,而且計(jì)算過程中涉及到的數(shù)據(jù)量也很大,使用傳統(tǒng)馮諾伊曼架構(gòu)會(huì)頻繁讀寫內(nèi)存。目前的DRAM一次讀寫32bit數(shù)據(jù)消耗的能量比起32bit數(shù)據(jù)計(jì)算消耗的能量要大兩到三個(gè)數(shù)量級(jí),因此成為了總體計(jì)算設(shè)備中的能效比瓶頸。
存內(nèi)計(jì)算就是為了解決內(nèi)存墻問題而提出的方案。如前所述,馮諾依曼架構(gòu)的計(jì)算機(jī)系統(tǒng)把存儲(chǔ)器和處理器分割成了兩個(gè)部分,而處理器頻繁訪問存儲(chǔ)器的開銷就形成了內(nèi)存墻。存內(nèi)計(jì)算的基本思路就是把計(jì)算和存儲(chǔ)合二為一,從而實(shí)現(xiàn)減少處理器訪問存儲(chǔ)器的頻率(因?yàn)橛?jì)算已經(jīng)在存儲(chǔ)器內(nèi)完成了大部分)。嚴(yán)格來說,存內(nèi)計(jì)算還可以分為兩種思路。第一種思路主要偏向于電路革新,其方法是通過電路革新讓存儲(chǔ)器本身就具有計(jì)算能力,例如在存儲(chǔ)器數(shù)據(jù)讀出的decoder等地方做改動(dòng)來實(shí)現(xiàn)計(jì)算等。這樣的改動(dòng)通常會(huì)針對(duì)SRAM或者M(jìn)RAM等存儲(chǔ)器,可以做到非常好的能效比提升,但是其計(jì)算精度往往較為受限(例如1-2bit),因此能夠支持的神經(jīng)網(wǎng)絡(luò)類型也比較有限。另一種思路是在存儲(chǔ)器內(nèi)部集成額外的計(jì)算單元,這種思路主要針對(duì)的是DRAM這樣主處理器訪問開銷很大的存儲(chǔ)器,它可以支持較為高精度的計(jì)算(例如浮點(diǎn)計(jì)算),但是限制在于DRAM工藝往往對(duì)于計(jì)算邏輯電路不是很友好,如何確保計(jì)算單元能集成到DRAM工藝?yán)锒覍?duì)存儲(chǔ)密度影響可控就是一個(gè)挑戰(zhàn)。
三星的存內(nèi)計(jì)算技術(shù)
今年早些時(shí)候,三星正式公布了其存內(nèi)處理(Processing In Memory,PIM)技術(shù),可謂是正式標(biāo)志著存內(nèi)計(jì)算技術(shù)進(jìn)入了主流。
三星目前PIM的第一個(gè)存儲(chǔ)器場(chǎng)景是HBM。根據(jù)三星的官網(wǎng)的內(nèi)容,該技術(shù)主要針對(duì)高性能計(jì)算人工智能相關(guān)場(chǎng)景,并且可以將整體計(jì)算的性能提升兩倍,而能量則可以節(jié)省70%。
官網(wǎng)上公布的數(shù)據(jù)背后的技術(shù)又是什么樣的呢?今年的ISSCC上,三星也發(fā)表了一篇針對(duì)HBM-PIM的論文《A 20nm 6GB Function-In-Memory DRAM, Based on HBM2 with a 1.2TFLOPS Programmable Computing Unit Using Bank-Level Parallelism, for Machine Learning Applications》,我們可以從中一探該技術(shù)的究竟。
根據(jù)該論文,HBM-PIM的存儲(chǔ)器設(shè)計(jì)與傳統(tǒng)HBM存儲(chǔ)器設(shè)計(jì)的主要區(qū)別在于HBM-PIM中集成了額外的可編程計(jì)算單元(如下圖),也即我們之前討論的第二種存內(nèi)計(jì)算的設(shè)計(jì)思路,把處理器集成到存儲(chǔ)器中從而將部分計(jì)算負(fù)載在存儲(chǔ)器中完成,這樣就能減少處理器需要訪問存儲(chǔ)器的頻率。
對(duì)于其具體的可編程計(jì)算單元,三星在論文中顯示它是一個(gè)以計(jì)算為主,且包含一些控制單元的迷你處理器。具體來說,在可編程計(jì)算單元中,包含了浮點(diǎn)數(shù)計(jì)算陣列,流水線解碼控制單元以及一個(gè)本地寄存器文件單元。其運(yùn)行方式為,主處理器為可編程計(jì)算單元提供一系列需要執(zhí)行的指令,而可編程計(jì)算單元?jiǎng)t直接從鄰近的DRAM中直接讀取相關(guān)數(shù)據(jù),在浮點(diǎn)數(shù)計(jì)算陣列中完成計(jì)算,并且根據(jù)指令進(jìn)一步把結(jié)果存儲(chǔ)到寄存器文件中,同時(shí)主控制器也可以根據(jù)需要把結(jié)果從寄存器文件中通過HBM接口讀出。在ISSCC的論文中,三星使用20nm DRAM工藝實(shí)現(xiàn)了該HBM-PIM存儲(chǔ)器,并且實(shí)現(xiàn)了1.2TOPS的浮點(diǎn)數(shù)算力。
HBM-PIM是三星引入PIM的第一步,三星官方資料暗示在HBM之外,三星還準(zhǔn)備將PIM技術(shù)應(yīng)用到桌面/移動(dòng)端(LPDDR)和顯卡(GDDR)存儲(chǔ)器上,可見三星對(duì)于PIM技術(shù)的前景是非常看好。