安述倩 李文明 范志華 吳海彬 吳 萌 王 達(dá) 張 浩 唐志敏
(*計算機體系結(jié)構(gòu)國家重點實驗室(中國科學(xué)院計算技術(shù)研究所) 北京 100190)
(**中國科學(xué)院大學(xué) 北京 100049)
作為去中心化交易協(xié)議,區(qū)塊鏈已廣泛應(yīng)用于眾多領(lǐng)域,如數(shù)字貨幣、金融服務(wù)和物聯(lián)網(wǎng)(Internet of things,IoT)[1-4]等,成為研究熱點之一。最初基于區(qū)塊鏈技術(shù)的數(shù)字貨幣應(yīng)用,如比特幣采用的典型的安全哈希算法(secure Hash algorithm,SHA-256)對計算資源需求較大,對存儲容量和帶寬的需求較小,這使SHA-256算法在圖形處理器(graphics processing unit, GPU)上取得了優(yōu)異的效率。但是由于GPU的通用性設(shè)計,SHA-256并不能充分利用GPU上的各類計算資源,導(dǎo)致計算能效比并不理想[5]。另一方面,由于SHA-256算法固定,計算模式簡單,定制化的ASIC芯片較GPU可以實現(xiàn)更高的性能和能效比[6],成為了當(dāng)前數(shù)字貨幣領(lǐng)域的主要算力之一。但是ASIC芯片卻違背了比特幣設(shè)計的去中心化思想[7],為緩解這種沖突,研究人員提出了眾多新的數(shù)字貨幣應(yīng)用,如萊特幣(litecoin, LTC)[8]、以太坊(Ethereum)[9]、Dash幣[10]、Zcash[11]、Equihash算法[12]、Bytom[13]等,算法變得更加復(fù)雜,并且需要更大的存儲容量和更高的訪存帶寬。這些數(shù)字貨幣的發(fā)展方向是尋找反中心化算法以實現(xiàn)區(qū)塊鏈處理器的公平性,導(dǎo)致越來越多的區(qū)塊鏈算法增加了對存儲、內(nèi)存帶寬的需求,并降低了對計算資源的需求,這使中央處理器(central processing unit, CPU)、GPU甚至ASIC的效率越來越低。同時,區(qū)塊鏈算法迅速演變,而ASIC只能針對一類區(qū)塊鏈算法進(jìn)行加速,無法實現(xiàn)通用性的加速?;谝陨戏治觯枰业较鄬νㄓ玫奶幚砑軜?gòu),滿足高能效的區(qū)塊鏈算法處理。
近年來,近數(shù)據(jù)處理(near-data-processing,NDP)為需要大存儲容量和高存儲訪問帶寬的應(yīng)用提供了一種有效的解決方案。3D堆疊存儲技術(shù)提供了一種通過降低數(shù)據(jù)搬運成本來提高計算系統(tǒng)的性能和降低功耗的方法。此外,為了進(jìn)一步提高大規(guī)模并行執(zhí)行應(yīng)用程序的效率,數(shù)據(jù)流執(zhí)行模式已在許多處理器中得到廣泛應(yīng)用。數(shù)據(jù)流執(zhí)行模式具有天然的并行特征,并通過降低訪存來緩解“存儲墻”問題。
通過分析不同類型的區(qū)塊鏈應(yīng)用程序的特點以及3D堆疊存儲技術(shù)特征,本文提出了一種基于3D堆疊存儲器和數(shù)據(jù)流執(zhí)行模式的面向區(qū)塊鏈應(yīng)用處理的通用數(shù)據(jù)處理架構(gòu),NDP-Ledger。本文的主要貢獻(xiàn)包括:
(1)分析并對比了不同區(qū)塊鏈應(yīng)用程序的算法特征,并基于算法特征,提出了通用NDP加速器架構(gòu)設(shè)計NDP-Ledger。
(2)提出了基于3D堆疊存儲器的面向區(qū)塊鏈應(yīng)用的通用NDP加速架構(gòu)。
(3)設(shè)計并實現(xiàn)了粗粒度的數(shù)據(jù)流執(zhí)行模型,提高數(shù)據(jù)處理的并行度,高效地控制內(nèi)存以及陣列之間的數(shù)據(jù)流動。
(4)實驗結(jié)果表明,本文提出的通用加速處理架構(gòu)與通用多核CPU相比,性能提升了39.98倍;與通用GPU相比,性能提升了1.8倍。
近幾年,區(qū)塊鏈技術(shù)在學(xué)術(shù)界和工業(yè)界都獲得了極大的關(guān)注,基于區(qū)塊鏈協(xié)議的應(yīng)用越來越多地服務(wù)于國民經(jīng)濟(jì)的發(fā)展,包括金融服務(wù)、公證、智能合約、IoT以及數(shù)字貨幣。此類應(yīng)用對處理器的性能和功耗提出了更高的要求,低效的CPU無法滿足此類應(yīng)用的需求。因為具有更多的計算資源和更高的并行度,GPU一度成為繼CPU之后的首選區(qū)塊鏈處理架構(gòu)。為了追求更高的收益,針對一種或幾種區(qū)塊鏈應(yīng)用的專用ASIC加速器逐漸替代了GPU,例如針對比特幣設(shè)計的AvalonMiner[14]等。然而,由于新算法和新應(yīng)用的不斷涌現(xiàn),這些ASIC無法滿足不斷演化的算法需求,僅能支持一種或幾種算法的高效執(zhí)行。另外,越來越多的算法不適合在ASIC上進(jìn)行計算,這給ASIC設(shè)計帶來了更大的挑戰(zhàn)。
隨著3D封裝技術(shù)的發(fā)展,NDP為具有簡單計算模式和大存儲容量需求的應(yīng)用程序提供了新的高效解決方案。Kang等人[15]將計算單元、有限狀態(tài)機和其他控制邏輯集成到普通動態(tài)隨機存儲器(dynamic random access memory, DRAM)中構(gòu)成了3D堆疊內(nèi)存,用來加速用于DNA比對的Blast算法。Pugsley等人[16]使用了低能耗的指令內(nèi)核,例如Cortex A5,與混合內(nèi)存立方體(hybrid memory cube,HMC)一起實現(xiàn)了高能效的新一代數(shù)據(jù)中心(new data center, NDC)架構(gòu)。Nair等人[17]在HMC的邏輯層上實現(xiàn)了復(fù)雜的運算部件,用于加速科學(xué)計算應(yīng)用處理。Ahn等人[18]提出了一種稱為PEI(PIM-enabled instructions)的通用NDP體系結(jié)構(gòu),該體系結(jié)構(gòu)實現(xiàn)了一種可基于數(shù)據(jù)的位置實現(xiàn)內(nèi)存處理的機制。與之前的工作類似,Santos等人[19]在HMC的邏輯層中放置了可重構(gòu)處理單元,可以靈活處理不同類型的數(shù)據(jù)。文獻(xiàn)[20]利用現(xiàn)場可編程門陣列(field programmable gate array, FPGA)和粗粒度可重構(gòu)陣列(coarse-grained reconfigurable array,CGRA)的優(yōu)勢來實現(xiàn)高能效和高靈活性的NDP系統(tǒng)。同時,由于圖計算的大量離散存儲訪問的特征,研究人員提出了基于HMC的高效架構(gòu)用于圖計算處理[21-23]。在其他相關(guān)工作中,HMC用于字符串處理[24]和矩陣中的乘加運算[25],這些算法具有簡單的計算模式和海量的數(shù)據(jù)集。綜上所述,隨著3D堆疊技術(shù)的發(fā)展,NDP已成為解決內(nèi)存密集型應(yīng)用程序的最有前景的方法之一。
另一方面,隨著應(yīng)用程序(如人工智能(artificial intelligence, AI)、IoT和網(wǎng)絡(luò)服務(wù))所需要處理的數(shù)據(jù)量的不斷增長,數(shù)據(jù)流體系結(jié)構(gòu)展現(xiàn)出比傳統(tǒng)馮諾依曼體系結(jié)構(gòu)具有更好的執(zhí)行并行度和執(zhí)行性能。數(shù)據(jù)流體系結(jié)構(gòu)的優(yōu)點主要來自2個方面:首先是數(shù)據(jù)流執(zhí)行模式的天然并行性,一旦數(shù)據(jù)準(zhǔn)備好就觸發(fā)指令,無需考慮指令和數(shù)據(jù)的依賴性;第二是內(nèi)存訪問量的減少,相當(dāng)一部分?jǐn)?shù)據(jù)在片上流動,緩解了傳統(tǒng)馮諾依曼結(jié)構(gòu)中的“存儲墻”的問題。已有的諸多研究工作已經(jīng)證明了數(shù)據(jù)流體系結(jié)構(gòu)在許多應(yīng)用程序中的優(yōu)勢。例如,Wave Computing提出的數(shù)據(jù)流處理器(DPU)[26]實現(xiàn)了高性能處理AI應(yīng)用程序,NeuFlow處理器[27]是為視覺處理設(shè)計的數(shù)據(jù)流架構(gòu)。其他典型的數(shù)據(jù)流體系結(jié)構(gòu)包括TeraFlux[28]、Runnemede[29]、TRIPS[30]和WaveScalar[31],在特定應(yīng)用中,均體現(xiàn)出數(shù)據(jù)流結(jié)構(gòu)對于馮諾依曼體系結(jié)構(gòu)的巨大優(yōu)勢。
基于以上分析,本文探索了基于3D堆疊內(nèi)存和數(shù)據(jù)流控制機制的區(qū)塊鏈應(yīng)用通用加速結(jié)構(gòu)設(shè)計思路,以實現(xiàn)更為高效的區(qū)塊鏈通用處理架構(gòu)。
去中心化及不可篡改是區(qū)塊鏈的核心思想,分布式賬本是由不斷產(chǎn)生的區(qū)塊組成,這些區(qū)塊在整個區(qū)塊鏈網(wǎng)絡(luò)上共享給不同的組織,以確保分類賬的公平性、開放性和安全性。區(qū)塊鏈網(wǎng)絡(luò)中的每個節(jié)點都接收區(qū)塊頭,并在處理后返回計算結(jié)果。該過程由多種算法組成,用以證明工作已經(jīng)完成。隨著越來越多不同需求的逐漸演變,基于區(qū)塊鏈應(yīng)用的算法變得越來越復(fù)雜,算法的核心對于計算資源要求不高,但是越來越依賴于存儲器來減少ASIC對于去中心化思想的影響。在本節(jié)中,首先根據(jù)算法采用的核心思想總結(jié)不同算法的特征和具體的資源需求,然后根據(jù)不同的算法特征以及各種計算、存儲需求,分析適用于不同區(qū)塊鏈應(yīng)用程序的硬件架構(gòu)設(shè)計,并結(jié)合新興的存儲技術(shù),分析未來的結(jié)構(gòu)設(shè)計的可能性。
比特幣作為區(qū)塊鏈技術(shù)的第1個著名應(yīng)用,利用了加密算法SHA-256,該算法執(zhí)行定點模式的哈希運算,包括6個邏輯運算功能,如表1所示。在大多數(shù)的哈希算法中,移位、與、或、異或、非運算是最常見而且是主要的運算。這些操作很簡單,對計算資源的復(fù)雜性要求不高,但是需要重復(fù)執(zhí)行多次,這對于結(jié)構(gòu)復(fù)雜而功能強大的CPU及GPU來說是一種資源浪費。
表1 SHA-256算法的邏輯運算符和功能描述
在比特幣之后,研究人員提出了使用更復(fù)雜的哈希運算或不同哈希運算組合的數(shù)字貨幣。因此,更加復(fù)雜和需要更多軟硬件資源的工作量證明(proof of work, PoW)算法被提出,如Quark應(yīng)用了9種哈希函數(shù),包括BLAKE,BMW,GROESTL,JH,KECCAK和SKEIN等等。DASH結(jié)合了11種哈希加密算法,命名為X11。相應(yīng)地,X13和X15算法也隨之被提出。幾乎所有方法都基于現(xiàn)有的加密算法進(jìn)行了升級,這些算法強調(diào)簡單的邏輯運算而不是復(fù)雜的科學(xué)計算,這使得針對此類算法的ASIC的研發(fā)相對容易。
因為純哈希算法易于ASIC加速,這違背了區(qū)塊鏈去中心化的原則,因此,一些更平等的共識算法被逐漸提出。例如,Ethash是對Dagger-Hashimoto進(jìn)行優(yōu)化,該算法的執(zhí)行很大程度依賴存儲容量和訪存帶寬,其數(shù)據(jù)量的大小超過1 GB,并且每年增加7 GB,與內(nèi)存需求相比,對CPU的計算能力的需求并不是那么強烈。另一個典型的應(yīng)用是Zcash,它使用被稱為生日悖論的Equihash作為其共識算法。 Equihash是一種依賴于內(nèi)存的算法,每個線程至少需要1 GB的內(nèi)存容量。還有許多其他共識算法,所有這些算法都強調(diào)帶寬和內(nèi)存容量,而不是計算性能。 因此,針對這類應(yīng)用,NDP架構(gòu)具有很大的優(yōu)勢。
有些研究人員認(rèn)為ASIC僅支持哈希類運算,造成了資源浪費,因此并不認(rèn)可這種做法。使用現(xiàn)有的計算資源來處理區(qū)塊鏈應(yīng)用程序,同時進(jìn)行一些其他有效計算,這方面是有意義的。例如,tensority是基于張量計算模型的ASIC友好共識算法,其中矩陣和張量運算被引入到哈希過程中。因此,這些處理機還可以用于AI硬件加速服務(wù)、并行計算,并產(chǎn)生額外的社會效益。 另一個例子是Primecoin,它是世界上第1個以科學(xué)計算為設(shè)計目標(biāo)的共識算法。在Primecoin中,PoW不僅為網(wǎng)絡(luò)提供了安全性和生成區(qū)塊的功能,而且還生成了數(shù)學(xué)研究人員感興趣的特殊形式的質(zhì)數(shù)鏈。
以上為代表性的區(qū)塊鏈應(yīng)用程序。當(dāng)然,還有許多其他的區(qū)塊鏈應(yīng)用程序使用了復(fù)雜且有意義的共識算法,這些算法面向不同的應(yīng)用領(lǐng)域,都可以歸為上述類別。
大多數(shù)區(qū)塊鏈應(yīng)用程序的特點是邏輯操作簡單,內(nèi)存容量需求大和帶寬需求高。因此,要為區(qū)塊鏈應(yīng)用開發(fā)更加通用和高效的處理架構(gòu),應(yīng)該充分考慮并利用這些特征。隨著3D封裝技術(shù)的發(fā)展,3D堆疊存儲器技術(shù)已經(jīng)成熟。已有研究證明了3D堆疊存儲器[25-30]的優(yōu)勢,它通過減少數(shù)據(jù)搬運距離并提供高帶寬來提高計算機的性能。3D堆疊存儲器,如HMC已經(jīng)成為比傳統(tǒng)存儲器體系結(jié)構(gòu)更具吸引力的設(shè)計方案。本文以HMC為例,研究3D堆疊存儲器在區(qū)塊鏈應(yīng)用場景中的效果。
如圖1所示,在HMC中,邏輯層(logic die)和多層DRAM堆疊在芯片上,使用硅通孔(through silicon via,TSV)技術(shù)以進(jìn)行層間通信。典型的HMC由32個庫(vault)組成,每個庫在垂直方向上由幾個可以獨立訪問的堆疊隨機存取存儲(random access memory,RAM)塊組成,以此實現(xiàn)更短的存儲訪問距離和更高的內(nèi)存帶寬。與傳統(tǒng)的內(nèi)存系統(tǒng)相比,HMC具有更高的訪存性能和更低的能耗損失。邏輯層可以通過集成運算部件來就近處理存儲器中的數(shù)據(jù),添加了運算部件的HMC可以像ASIC一樣作為高能效的加速架構(gòu)。
圖1 HMC存儲結(jié)構(gòu)示意圖
本文提出了一種基于3D堆疊存儲器和數(shù)據(jù)流執(zhí)行模式的近數(shù)據(jù)處理架構(gòu)NDP- Ledger,以加速各種區(qū)塊鏈應(yīng)用程序的執(zhí)行。 本節(jié)將討論NDP- Ledger的結(jié)構(gòu)設(shè)計、編程模型和數(shù)據(jù)流控制機制。
NDP-Ledger的總體架構(gòu)如圖2所示。在主機端,設(shè)置了1個加速使能單元(acceleration enable unit,AEU)。AEU用于監(jiān)視主機處理器的行為并決定是否激活NDP-Ledger。用戶使用專門的編程接口來控制AEU。在收到啟動NDP-Ledger加速區(qū)塊鏈算法的CALL之后,CALL將繞過緩存直接發(fā)送到HMC控制器的NDP處理內(nèi)核,NDP處理器核解析指令并運行,指令執(zhí)行結(jié)束后,收集結(jié)果并處理,并將最終結(jié)果發(fā)送回主機端。在AEU未使能狀態(tài)下,傳統(tǒng)的內(nèi)存訪問系統(tǒng)仍可按其普通方式工作。當(dāng)選擇NDP-Ledger模式時,數(shù)據(jù)將直接在HMC中被處理。在數(shù)據(jù)一致性方面,為了保持高速緩存和HMC之間的數(shù)據(jù)一致性,2種方式可以選擇。第1個方法是當(dāng)命令從AEU發(fā)送到HMC控制器時,控制器需要廣播到所有緩存,無效掉HMC端需要由內(nèi)核處理的所有數(shù)據(jù)。第2個方法是高速緩存繞過策略,即需要由處理器核處理的數(shù)據(jù)應(yīng)標(biāo)記為非高速緩存存儲數(shù)據(jù)。在NDP-Ledger中,選擇第2種方法,即繞過緩存策略,以避免維護(hù)緩存一致性帶來開銷。圖2(b)顯示了NDP-Ledger的執(zhí)行模型。
圖2 NDP-Ledger 體系結(jié)構(gòu)圖
圖3顯示了NDP-Ledger的詳細(xì)加速架構(gòu)設(shè)計。如圖3(a)所示,在HMC的邏輯層中的每個vault控制器上實現(xiàn)加速處理單元陣列,由16個處理單元(process element,PE)組成。所有運算單元都由高速總線連接。如圖3(b)所示,PE之間由1個mesh結(jié)構(gòu)的片上網(wǎng)絡(luò)連接。4個PE由同一個路由器連接,并且可以在數(shù)據(jù)流執(zhí)行模型中作為1個工作組。共享路由器可提高PE組內(nèi)部的通信效率。圖3(c)展示了PE的結(jié)構(gòu),它由指令緩沖區(qū)、上下文操作數(shù)、流水線和路由器組成。本文采用粗粒度的數(shù)據(jù)流執(zhí)行模型,指令塊(而不是指令)作為最小的調(diào)度單元。粗粒度的數(shù)據(jù)流執(zhí)行模型可以簡化控制邏輯,并且流水線設(shè)計仍使用控制流執(zhí)行模型。圖3(d)展示了流水線的結(jié)構(gòu)。區(qū)塊鏈應(yīng)用程序中大部分的運算為簡單的邏輯運算,因此,PE中配置了2個邏輯單元(logic unit,LU)來增強邏輯運算能力,此外還包含1個算術(shù)單元,1個浮點單元和1個LD/ST單元。與傳統(tǒng)處理器流水線不同,在數(shù)據(jù)流執(zhí)行模式中,增加了FLOW單元來支持PE之間的數(shù)據(jù)流動。FLOW單元由特殊指令控制,用來將數(shù)據(jù)從操作數(shù)緩沖區(qū)復(fù)制到其他PE中。該指令在源代碼的編譯階段生成。數(shù)據(jù)流映射決定了指令塊和PE之間的映射關(guān)系。為了提高執(zhí)行的并行性,PE采用SIMD執(zhí)行模式。
圖3 NDP-Ledger加速架構(gòu)示意圖
在編程模型的設(shè)計上,實現(xiàn)了類似于CUDA的編程模型作為用戶調(diào)用運行內(nèi)核算法的NDP-Ledger加速器的接口。加速單元僅用于處理算法的內(nèi)核部分,而其他功能,如通過Internet與其他節(jié)點進(jìn)行通信等功能,在主處理器上執(zhí)行。
本文實現(xiàn)了粗粒度的數(shù)據(jù)流執(zhí)行模型,其中指令塊是最小的調(diào)度單元。指令塊通常包含多條指令,用于實現(xiàn)特定功能。比如for()、while() 或者公式等(例如比特幣應(yīng)用中的Maj()、Ch()、Σ0()、σ1()),其中一個或者多個的功能實現(xiàn)可以編寫在1個指令塊中,稱之為執(zhí)行塊(execution block,Exeblock)。
下面以比特幣為例來詳細(xì)說明Exeblock和映射機制的實現(xiàn)。如圖4所示,根據(jù)上面介紹的規(guī)則,將該算法編程為幾個Exeblock(白色上層框), 灰色底框顯示運行Exeblock的PE。右側(cè)部分顯示數(shù)據(jù)的流向。在當(dāng)前映射方式中,選擇邊緣PE加載數(shù)據(jù)并將數(shù)據(jù)搬運到它們的右側(cè)的PE中以進(jìn)行下一步計算。空閑PE可以處理另一個比特幣任務(wù),為了充分利用計算資源,多個任務(wù)可以同時映射到PE陣列上運行。
圖4 比特幣算法到PE陣列的映射方式以及數(shù)據(jù)流圖
在進(jìn)行Exeblock劃分時,按照圖5所示的方法,針對算法進(jìn)行解析。根據(jù)SHA-256的算法特點,首先將算法的執(zhí)行過程劃分為“報文預(yù)處理”、“加載Hash初值”、“Hash運算”等3大部分,針對每一部分,根據(jù)其所需要執(zhí)行的具體功能,按照指令數(shù)均衡的原則,劃分指令塊,并利用PE的任務(wù)級并行以及SIMD特性,挖掘算法的并行性;根據(jù)指令塊之間的數(shù)據(jù)依賴關(guān)系,實現(xiàn)算法的依賴關(guān)系圖,最終形成數(shù)據(jù)流圖。圖4是針對SHA-256算法的宏觀解析,具體到實際的指令塊,編譯器通過檢索實際的數(shù)據(jù)流依賴關(guān)系,會形成更加復(fù)雜的數(shù)據(jù)流圖。
圖5 SHA-256算法數(shù)據(jù)流圖解析過程
除了Exeblock的劃分,數(shù)據(jù)流執(zhí)行模式中最重要的映射機制,是將Exeblock放到指定PE上的策略,以往研究人員針對映射機制研究已經(jīng)有很多工作,如面向科學(xué)計算的映射算法[32]、考慮負(fù)載均衡的映射算法TBIM[33](topology-based instruction mapping) 等。TBIM算法如圖6所示,將Exeblock根據(jù)數(shù)據(jù)依賴關(guān)系形成數(shù)據(jù)流圖(dataflow graph),作為映射算法輸入之一,并且將PE陣列以及拓?fù)潢P(guān)系作為映射算法第2個輸入,通過衡量各個PE上定點浮點負(fù)載以及網(wǎng)絡(luò)傳輸代價的大小,逐個檢索各個指令塊的最佳映射位置,獲得最優(yōu)的映射結(jié)果。
圖6 TBIM算法[33]
在本文實現(xiàn)的粗粒度數(shù)據(jù)流模型中,最小調(diào)度單位是Exeblock,其中包含一行或幾行程序代碼,這些代碼可以實現(xiàn)用戶確定的一個或多個功能。一旦所有數(shù)據(jù)到達(dá),就可以觸發(fā)Exeblock執(zhí)行。如圖7所示,一個應(yīng)用程序可以分為幾個任務(wù),每個任務(wù)由幾個Exeblock組成??梢愿鶕?jù)數(shù)據(jù)量的大小和同時運行的任務(wù)數(shù)將Exeblock執(zhí)行流圖映射到內(nèi)部PE級別、PE陣列級別或跨PE陣列級別。在圖中,有2個要處理的應(yīng)用程序,每個應(yīng)用程序包含幾個任務(wù)。圖中顯示了只有1個PE陣列的可能映射結(jié)果。數(shù)據(jù)流圖映射可能跨PE陣列,多個PE陣列共同在一個應(yīng)用程序或任務(wù)上工作。數(shù)據(jù)流映射是在編程時確定的,并將配置信息發(fā)送到每個PE陣列的控制邏輯,如圖4所示。為了使數(shù)據(jù)流圖的Exeblock更有效地工作,本文開發(fā)了一種雙向ack機制來控制Exeblock之間的交互。每個Exeblock都有1個三位的狀態(tài)字,該狀態(tài)字指示與執(zhí)行塊相關(guān)的運行狀態(tài)。三位的狀態(tài)字用來控制上游和下游Exeblock的執(zhí)行,如圖8所示。Ack、active 和 done是3個控制信號,用于維持?jǐn)?shù)據(jù)流圖的執(zhí)行。Ack用于將自身節(jié)點的完成消息通知上游節(jié)點。Active負(fù)責(zé)啟動下游節(jié)點。Done信號標(biāo)記節(jié)點所有循環(huán)的結(jié)束。所有Exeblock均受HMC內(nèi)存中NDP內(nèi)核的控制。這樣的設(shè)計方案使得PE支持任務(wù)級并行,同時可以并行執(zhí)行一個任務(wù)的不同迭代。圖8展示了5個Exeblock的執(zhí)行示例。圖中標(biāo)記了控制步驟的詳細(xì)說明。每個Exeblock都有upstream、downstream、 enable三位狀態(tài)字,分別用于表示當(dāng)前節(jié)點需要回應(yīng)的上游個數(shù)、需要激活的下游個數(shù)以及是否已經(jīng)被控制部件激活。Exeblock可以執(zhí)行的條件是當(dāng)前被激活的節(jié)點需要發(fā)送ack和active的上下游節(jié)點數(shù)都為0,即在上次迭代執(zhí)行已經(jīng)結(jié)束的情況下,才可以進(jìn)入下一次執(zhí)行。圖中B0、B1為根節(jié)點,無父節(jié)點,B2、B3分別為其子節(jié)點,B3和B4為葉子節(jié)點。Enable主要用來控制根節(jié)點是否可以正常執(zhí)行,根節(jié)點收到控制核的激活信號后,處于可執(zhí)行狀態(tài),執(zhí)行結(jié)束后需要將enable歸0,避免在子節(jié)點當(dāng)前迭代未結(jié)束之前再次執(zhí)行;中間各子節(jié)點包括葉子節(jié)點,主要通過判斷upstream來確定是否可以正常執(zhí)行。運行過程中,中間節(jié)點的enable信號一直處于激活狀態(tài),后續(xù)的各次迭代收到上游節(jié)點的激活信息后進(jìn)行開始執(zhí)行??刂坪诵枰盏剿泄?jié)點發(fā)出的done信號之后,才會激活任務(wù)的下一次迭代,如圖8第9步所示,B0和B4同時在執(zhí)行任務(wù)的不同迭代,實現(xiàn)任務(wù)級并行。
圖7 PE陣列和PE單元上的映射示例圖
圖8 粗粒度數(shù)據(jù)流的控制機制示意圖
為了驗證NDP-Ledger的性能,對本文所提出的架構(gòu)進(jìn)行了模擬仿真,并將其與Intel CPU和NVIDIA GPU進(jìn)行了比較。
本實驗將CasHMC[34]集成到Gem5[35]中來模擬NDP-Ledger的架構(gòu)設(shè)計。Gem5是一個完整的系統(tǒng)模擬器。CasHMC是一個實現(xiàn)了HMC存儲的周期精確的模擬器。實驗中,采用了1個Cube,存儲空間大小為8 GB。每個Cube包含32個vaults,每個vault分為16個banks,其中32個vaults分別對應(yīng)32個PE 陣列結(jié)構(gòu)。本文在HMC內(nèi)存中添加了4個ARM1176作為多NDP處理器核來控制PE陣列,ARM1176用作加速器的MCU,它負(fù)責(zé)調(diào)度任務(wù)到加速器并與主機處理器進(jìn)行通信。為了提高并行計算能力,在實驗中,每個PE單元包含4組算術(shù)部件,并以SIMD方式執(zhí)行。本文使用CACTI對寄存器的功耗和面積、配置緩沖區(qū)以及其他部件進(jìn)行建模。使用通用服務(wù)器級Intel E5-2697 v3和高性能服務(wù)器加速卡NVIDIA TITAN XP作為對比平臺,詳細(xì)配置如表2所示。NDP-Ledger的功耗和面積參數(shù)為32 nm工藝下參數(shù)。
表2 CPU、GPU 和 NDP-Ledger 參數(shù)對比
HMC邏輯芯片的功耗和面積數(shù)據(jù)來源于Micron公司公布的數(shù)據(jù)[36]。四個NDP核心的總功率為0.5 W,HMC為90 W[16],每個PE陣列的總功率為0.8 W,32個PE陣列的總功率為25.6 W。NDP-Ledger的整體功率為116 W。NDP-Ledger的面積等于HMC控制邏輯部分的面積。從表中可以看出,NDP-Ledger的面積和功率都小于CPU和GPU。
本文選擇了具有代表性的區(qū)塊鏈應(yīng)用的算法作為基準(zhǔn)測試程序,如表3所示。算法中的主要操作步驟已在表中列出。這些運算主要與移位運算、邏輯運算和矩陣運算有關(guān)。費馬小定理是搜索素數(shù)Cunningham鏈的關(guān)鍵操作。
表3 基準(zhǔn)測試程序說明
在實驗中,通過編程來充分利用CPU和GPU的硬件資源。為了排除主機系統(tǒng)對CPU、GPU和NDP-Ledger的影響,僅使用這3個平臺執(zhí)行區(qū)塊鏈應(yīng)用程序的核心算法部分。
圖9顯示了CPU、GPU和NDP-Ledger的性能比較。結(jié)果表明,NDP-Ledger的平均運算速度是E5-2697 v3的39.98倍,是NVIDIA TITAN XP平均速度的1.8倍。最好的加速結(jié)果為Scrypt算法,因為該算法具有簡單的邏輯運算和訪存密集型的特點。
圖9 CPU、GPU和 NDP-Ledger性能對比圖
圖10顯示了3種結(jié)構(gòu)的能效對比。由于NDP-Ledger所擁有的熱設(shè)計功耗(thermal design power,TDP)比GPU少,因此在能效上取得了更好的結(jié)果。結(jié)果表明,NDP-Ledger和GPU相比,能效比是其3.9倍;和CPU相比,能效比是其49.97倍。
圖10 CPU、GPU和 NDP-Ledger 功效對比圖
在性能密度方面,NDP-Ledger由于其3D堆疊存儲技術(shù)減小了總面積,從而提高了單位面積的性能,如圖 11所示。集成PE陣列的邏輯層,其面積等于HMC本身面積。實驗結(jié)果表明,NDP-Ledger的單位面積計算密度是E5-2697 v3的60.11倍,是NVIDIA TITAN XP的2.81倍。
圖11 CPU、GPU和NDP-Ledger 性能密度對比圖
隨著區(qū)塊鏈技術(shù)的飛速發(fā)展,區(qū)塊鏈應(yīng)用越來越豐富,其核心算法對處理器的計算性能和存儲訪問性能要求不斷變化,目前缺乏可以高效處理區(qū)塊鏈應(yīng)用的通用結(jié)構(gòu)。針對這一現(xiàn)狀,本文提出了基于3D堆疊存儲的具有數(shù)據(jù)流執(zhí)行模式的通用NDP區(qū)塊鏈加速結(jié)構(gòu)設(shè)計,將PE陣列單元與3D堆疊存儲集成在一起,以提高性能密度并減少數(shù)據(jù)傳輸距離。實驗表明,本文提出的NDP-Ledger提高了區(qū)塊鏈應(yīng)用的處理性能和能效比。同時,提出了一種面向粗粒度數(shù)據(jù)流執(zhí)行模型的高效編程和控制行機制,提高了程序執(zhí)行的并發(fā)度,減少了存儲器訪問的需求。評估結(jié)果表明,NDP-Ledger處理性能是主流CPU的39.98倍,是主流GPU的1.8倍,驗證了本文提出的結(jié)構(gòu)的有效性。
本文提出的通用性加速結(jié)構(gòu)NDP-Ledger結(jié)合了3D堆棧存儲以及數(shù)據(jù)流執(zhí)行模型,下一步的研究工作需要針對這兩方面結(jié)合來進(jìn)行。針對數(shù)據(jù)流執(zhí)行模型的編譯技術(shù)研究,進(jìn)一步減少對存儲訪問的依賴;針對存儲層次結(jié)構(gòu)的優(yōu)化研究,進(jìn)一步提升存儲的效率。這兩方面對NDP-Ledger的結(jié)構(gòu)及性能提升有著重要影響,也是基于本文提出的結(jié)構(gòu)未來要開展的工作。