本文基于對并行模式的分層架構、數(shù)據(jù)局部性和控制流的抽象作谚,提出了Plasticine架構型型,從而為并行模式計算提供更好的靈活性和更低的能耗支持。原文: Plasticine: A Reconfigurable Architecture For Parallel Patterns
摘要
近年來犹菇,由于可重配架構有助于設計高能效加速器德迹,迅速得到普及。由于位級(bit-level)的可重配抽象揭芍,細粒度結構(如FPGA)傳統(tǒng)上存在著性能和能效低下的問題胳搞。細粒度和粗粒度架構(如CGRA)傳統(tǒng)上都需要低級編程,并忍受漫長的編譯時間。我們用Plasticine來解決這兩個挑戰(zhàn)肌毅,這是一個新的空間可重配架構筷转,旨在有效執(zhí)行由并行模式組成的應用程序。并行模式已經(jīng)從最近的并行編程研究中脫穎而出悬而,成為強大的高級抽象呜舒,可以優(yōu)雅捕捉數(shù)據(jù)位置、內存訪問模式和跨越廣泛的密集和稀疏應用的并行性笨奠。
首先袭蝗,我們通過觀察關鍵應用的并行模式特征,發(fā)現(xiàn)這些特征適合于硬件加速般婆,如分層并行到腥、數(shù)據(jù)局部性、內存訪問模式和控制流蔚袍,從而激發(fā)我們構思了Plasticine乡范。基于這些觀察啤咽,我們將Plasticine架構為模式計算單元(Pattern Compute Units) 和模式存儲單元(Pattern Memory Units) 的集合篓足。模式計算單元是可重配的SIMD功能單元的多級流水線,可以有效執(zhí)行嵌套模式闰蚕。模式存儲單元使用分組暫存器(banked scratchpad memories)和可配置的地址解碼器實現(xiàn)數(shù)據(jù)定位栈拖。多個片上地址生成器和scatter-gather引擎通過支持大量未完成的內存請求、內存合并和密集訪問的突發(fā)模式没陡,有效利用了DRAM帶寬涩哟。Plasticine基于28納米工藝實現(xiàn)的芯片面積為113 ,在1GHz時鐘下的最大功耗為49瓦盼玄。通過使用周期精確的模擬器贴彼,證明Plasticine在廣泛的密集和稀疏應用中比傳統(tǒng)的FPGA提供了高達76.9倍的每瓦性能改進。
1. 簡介
為了尋求更高的性能和能源效率埃儿,計算系統(tǒng)正越來越多的使用專門的加速器[7, 9-11, 19, 33, 44]器仗。加速器實現(xiàn)了定制的數(shù)據(jù)和控制路徑,以適應某一領域的應用童番,從而避免通用處理器中的大量靈活性開銷精钮。然而,由于設計和制造的一次性工程(NRE, non-recurring engineering)成本高剃斧,以及部署和迭代時間長轨香,以專用ASIC的形式進行專業(yè)化很昂貴,因此ASIC加速器只適合最普遍的應用幼东。
像FPGA這樣的可重配架構(reconfigurable architectures) 通過在靜態(tài)可編程網(wǎng)絡互連中提供靈活的邏輯塊來實現(xiàn)自定義數(shù)據(jù)路徑臂容,從而抵消高額的NRE制造成本科雳。通過FPGA,可以在位級(bit-level)定制數(shù)據(jù)通路脓杉,允許用戶對任意數(shù)字邏輯進行原型化糟秘,并利用架構支持任意精度的計算,這種靈活性已經(jīng)吸引了一些數(shù)據(jù)中心成功部署了基于FPGA的商業(yè)加速器[28, 29, 37]球散。然而尿赚,靈活性是以架構的低效為代價的。計算和網(wǎng)絡資源的位級(bit-level)可重配帶來了巨大的芯片面積和功耗開銷沛婴。例如吼畏,F(xiàn)PGA中超過60%的芯片面積和功耗是用在可編程網(wǎng)絡上[4, 5, 22, 35]。通過多個邏輯元件的長組合路徑限制了加速器設計可以運行的最大時鐘頻率嘁灯。低效率促使了粗粒度可重配架構(CGRA, Coarse-Grain Reconfigurable Architecture)的發(fā)展泻蚊,其字級(word-level)功能單元符合大多數(shù)加速器應用的計算需求。CGRAs提供密集的計算資源丑婿、電源效率以及比FPGA高一個數(shù)量級的時鐘頻率≌习現(xiàn)代商業(yè)FPGA架構奶镶,如英特爾的Arria 10和Stratix 10器件系列泞辐,已經(jīng)發(fā)展到包括越來越多的粗粒度塊煤辨,包括整數(shù)乘積器("DSP")、浮點單元诀拭、流水線互連和DRAM存儲控制器迁筛。然而,F(xiàn)PGA中的互連仍然是細粒度的耕挨,以使這些器件能夠發(fā)揮其作為任意數(shù)字邏輯原型驗證結構的最初目的细卧。
不幸的是筒占,F(xiàn)PGA和以前提出的CGRA都很難用贪庙。加速器設計通常造成低級編程模型和長編譯時間[3, 21, 22]。大多數(shù)CGRA和帶有粗粒度塊的FPGA中資源的異質性進一步增加了復雜度翰苫。簡化加速器開發(fā)的一個有希望的方法是用特定領域語言止邮,這些語言可以捕捉到高級別的并行模式,如map奏窑、reduce导披、filter和flatmap[38, 41]。并行模式已經(jīng)成功用于簡化并行編程和代碼生成良哲,適用于各種并行架構盛卡,包括多核芯片[27, 34, 40]和GPU[8, 23]。最近的工作表明筑凫,并行模式也可用于從高級語言中為FPGA生成優(yōu)化的加速器[15, 36]滑沧。在這項工作中,我們專注于開發(fā)粗粒度巍实、可重配的架構滓技,對并行模式有直接的架構支持,在面積棚潦、功耗和性能方面都很高效令漂,在編程和編譯的復雜性方面也很容易使用。
為此我們引入了Plasticine丸边,作為新的空間可重配加速器架構叠必,為高效執(zhí)行并行模式進行了優(yōu)化。Plasticine是由兩種粗粒度的可重配單元組成的二維陣列: 模式計算單元(PCU, Pattern Compute Unit) 和模式存儲單元(PMU, Pattern Memory Unit) 妹窖。每個PCU由一個可重配流水線組成纬朝,具有多級SIMD功能單元,并支持跨SIMD通道的轉移和簡化骄呼。PMU由一個分組暫存器(banked scratchpad memory )和專用尋址邏輯及地址解碼器組成共苛。這些單元通過流水線靜態(tài)混合互連(static hybrid interconnect) 相互通信,具有獨立的總線級(bus-level)和字級(word-level)數(shù)據(jù)蜓萄,以及位級(bit-level)控制網(wǎng)絡隅茎。Plasticine架構中的層次結構簡化了編譯器映射,提高了執(zhí)行效率嫉沽。編譯器可以將內循環(huán)計算映射到一個PCU上辟犀,這樣大多數(shù)操作數(shù)就可以直接在功能單元之間傳輸,而不需要使用scratchpad存儲器或PCU之間的通信绸硕。片上scratchpad存儲器可配置為支持流式和雙緩沖訪問堂竟,片外存儲控制器支持流式(突發(fā))模式和scatter/gather訪問。最后臣咖,片上控制邏輯可配置為支持嵌套模式跃捣。
我們用基于Scala的硬件定義語言Chisel[2]實現(xiàn)Plasticine,使用Synopsys Design Compiler綜合設計后得到面積估算夺蛇,通過模擬軌跡和PrimeTime得到功率數(shù)疚漆。使用VCS和DRAM-Sim2進行精確周期模擬,在線性代數(shù)刁赦、機器學習娶聘、數(shù)據(jù)分析和圖分析等領域大量密集、稀疏計算基準測試的基礎上對Plasticine架構進行詳細評估甚脉。
本文的其余部分組織如下: 第2節(jié)回顧并行模式中的關鍵概念及其硬件實現(xiàn)丸升。第3節(jié)介紹了Plasticine架構并探討了關鍵的設計權衡。第4節(jié)介紹了與FPGA相比牺氨,Plasticine的電源和性能效率狡耻。第5節(jié)討論相關工作墩剖。
2. 并行模式
2.1. 并行模式編程
并行模式是對傳統(tǒng)函數(shù)式編程的擴展,包括密集和稀疏數(shù)據(jù)集合上的可并行計算夷狰,以及相應的內存訪問模式岭皂。并行模式為常見計算任務提供了簡單、自動的程序并行化規(guī)則沼头,同時也通過更高層次的抽象來提升程序員的生產(chǎn)力爷绘。并行化帶來的性能優(yōu)勢,加上程序員生產(chǎn)力的提高进倍,使得并行模式在各種領域越來越受歡迎土至,包括機器學習、圖形處理和數(shù)據(jù)庫分析[38, 41]猾昆。以前的工作以及證明陶因,并行模式可以在函數(shù)式編程模型中應用,為CPU生成可與手工優(yōu)化代碼相媲美的多線程C++[40]以及為FPGA生成高效的加速器設計[1, 15, 36]毡庆。與FPGA和多核CPU一樣坑赡,在針對CGRA時,數(shù)據(jù)并行性的知識對于實現(xiàn)良好的性能至關重要么抗。這種隱含的知識使得并行模式成為驅動CGRA設計的自然編程模型毅否。
和以前并行模式的硬件生成工作一樣[15, 36],我們的編程模型基于并行模式Map蝇刀、FlatMap螟加、Fold和HashReduce,選擇這些模式是因為它們最適合硬件加速吞琐。表1介紹了每種模式的概念性例子捆探,顯示了同時在四個索引上進行的計算。每個模式都有一個或多個函數(shù)和一個描述該模式操作的數(shù)值范圍的索引域(index domain) 作為輸入站粟。每個模式都有一個輸出黍图,并能夠讀取任意數(shù)量的輸入集合。
Map使用函數(shù)f
為每個索引創(chuàng)建輸出元素奴烙,f
的每次執(zhí)行都被保證是獨立的助被。Map的輸出元素的數(shù)量與輸入迭代域的大小相同∏芯鳎基于f
讀取的集合數(shù)量和每次讀取的訪問模式揩环,Map可以獲取集合、標準元素級映射幅虑、壓縮包丰滑、窗口過濾器或其任何組合的行為。
FlatMap使用函數(shù)g
為每個索引產(chǎn)生任意數(shù)量的元素,其中函數(shù)的執(zhí)行也是獨立的貌亭。產(chǎn)生的元素被串聯(lián)成一個扁平輸出柬唯。有條件數(shù)據(jù)查詢(例如SQL中的WHERE认臊,Haskell或Scala中的filter)是FlatMap的特例圃庭,其中g
產(chǎn)生零個或一個元素。
Fold首先充當Map失晴,使用函數(shù)f
為每個索引生成單個元素剧腻,然后使用關聯(lián)組合函數(shù)r
對這些元素進行約簡。
HashReduce使用函數(shù)k
和v
分別為每個索引生成哈希鍵和值涂屁。具有相同對應鍵的值在執(zhí)行中被放到單個累加器中书在,使用同一個關聯(lián)的組合函數(shù)r
。HashReduce可以是密集型的拆又,即鍵的空間是提前知道的儒旬,所有累加器都可以靜態(tài)分配,也可以是稀疏型的帖族,即模式可以在運行時產(chǎn)生任意數(shù)量的鍵栈源。直方圖創(chuàng)建是一個常見的、簡單的HashReduce的例子竖般,其中key
函數(shù)給出了直方圖的堆甚垦,value
函數(shù)被定義為總是"1",而combine
函數(shù)是整數(shù)加涣雕。
圖1顯示了用明確的并行模式語法編寫無約束矩陣(untiled matrix)乘法的例子艰亮。在這種情況下,Map創(chuàng)建大小為M×P
的輸出矩陣挣郭,F(xiàn)old使用N個元素的點乘法產(chǎn)生這個矩陣的每個元素迄埃。Fold的map函數(shù)(f2
)訪問矩陣a和矩陣b中的元素,并將它們相乘兑障。Fold的組合函數(shù)(r
)定義了如何組合由f2
產(chǎn)生的任意元素侄非,在示例中使用求和。
圖2給出了基于Scala語言中使用并行模式的示例旺垒,在并行模式實例對應的集合上定義了中綴操作符彩库。注意,本例第3行的filter
創(chuàng)建了一個FlatMap先蒋,其索引域等于lineItems
集合的大小骇钦。第5行的hashReduce
創(chuàng)建了一個HashReduce,其索引域的大小為before
集合的大小竞漾。
2.2. 硬件實現(xiàn)需求
并行模式提供了一組簡潔的并行抽象窥翩,可以簡潔表達各種機器學習和數(shù)據(jù)分析算法[8,36,38,41]。通過創(chuàng)建專門支持這些模式的體系架構鳞仙,可以有效執(zhí)行這些算法寇蚊。這種并行模式體系架構需要幾個關鍵硬件特性,下面將逐一介紹棍好,表2進行了總結仗岸。
首先,所有四種模式都可以實現(xiàn)并行數(shù)據(jù)計算借笙,每個索引上的操作都完全獨立扒怖,一個流水線計算架構被構建成SIMD通道,利用數(shù)據(jù)并行性實現(xiàn)每周期多元素的吞吐量业稼。此外盗痒,除了無法在循環(huán)中維持依賴,表1中的函數(shù)f
低散、g
俯邓、k
和v
在其他方面不受限制,這意味著該架構的流水線計算必須是可編程的熔号,以便實現(xiàn)這些函數(shù)稽鞭。
其次,為了利用流水線SIMD通道提供的高吞吐量跨嘉,該架構必須能夠提供高片上內存帶寬川慌。在我們的編程模型中,函數(shù)中間值通常是具有靜態(tài)已知位寬的標量祠乃,這些標量值可以存儲在小型分布式流水線寄存器中梦重。
集合被用來在并行模式之間進行數(shù)據(jù)通信,對集合架構的支持取決于相關內存訪問模式亮瓷,并通過分析用于計算內存地址的函數(shù)來確定琴拧。為了簡單起見,我們將訪問模式分為靜態(tài)可預測線性函數(shù)模式或不可預測隨機訪問模式嘱支。此外蚓胸,我們將訪問要么標記為流式(即在靜態(tài)可確定的函數(shù)執(zhí)行數(shù)量中不發(fā)生數(shù)據(jù)重用),要么tiled(即可能發(fā)生重用)除师。我們使用領域知識和編譯器啟發(fā)式方法來確定隨機訪問是否可能表現(xiàn)出重用沛膳。以前的工作顯示了如何將并行模式平鋪(tile)從而使用靜態(tài)大小的重用窗口,并有可能提升數(shù)據(jù)的局部性[36]汛聚。
支持tiled訪問的集合可以被存儲在scratchpad中锹安。為了驅動SIMD計算,這些scratchpad存儲器應該盡可能支持多個并行地址流。在線性訪問情況下叹哭,地址流可以通過堆疊(banking)來創(chuàng)建忍宋。并發(fā)隨機讀取可以通過本地內存的復制來支持,而隨機寫入命令必須順序化并且盡量合并操作风罩。
雖然流訪問不可避免需要訪問主存糠排,但通過合并內存命令和線性訪問預取數(shù)據(jù),可以將主存讀寫成本降至最低超升,架構中的本地FIFO為這兩種優(yōu)化提供了備份存儲入宦。
本地存儲器使我們能夠利用應用程序的局部性,盡量減少對昂貴的主存儲器的加載或數(shù)量要求[32]廓俭。本地存儲器中的可重配支持增加了這些片上存儲器的可用帶寬云石,從而使計算得到更好的利用。在scratchpad存儲器中支持雙重緩沖研乒,一般稱為N-緩沖(N-buffering),可以實現(xiàn)不完全嵌套模式的粗粒度流水線執(zhí)行淋硝。
該架構還需要高效的內存控制器來填充本地內存并提交計算結果雹熬。與片上存儲器一樣,存儲控制器應該專門用于不同的訪問模式谣膳。線性訪問對應于DRAM突發(fā)命令竿报,而并行模式下的隨機讀寫分別對應于gather和scatter。
Fold和FlatMap也暗示了細粒度的跨SIMD通道通信继谚。Fold需要跨通道的簡化樹烈菌,而FlatMap中的拼接最好由有效的跨通道字合并(word coalescing)硬件來支持。
最后花履,所有并行模式都有一個或多個相關的循環(huán)索引芽世。這些索引可以在硬件中實現(xiàn)為并行、可編程的計數(shù)器鏈诡壁。由于并行模式可以任意嵌套济瓢,因此體系架構必須具有可編程控制邏輯,以確定每個模式何時允許執(zhí)行妹卿。
雖然已經(jīng)提出了許多粗粒度硬件加速器旺矾,但以前的工作所描述的單一加速器都不具備所有這些硬件特征。這意味著雖然這些加速器中的一部分可以成為并行模式的目標夺克,但沒有一個可以完全利用這些模式的特性來實現(xiàn)性能的最大化箕宙。傳統(tǒng)FPGA也可以被配置來實現(xiàn)這些模式,但正如我們在第4節(jié)中所展示的那樣铺纽,能效要差得多柬帕。我們將在第5節(jié)進一步討論相關工作。
3. Plasticine架構
Plasticine是一個由可重配模式計算單元(PCU) 和模式存儲單元(PMU) 組成的tiled結構,我們將其統(tǒng)稱為"單元"雕崩。單元與三種靜態(tài)互連進行通信: 字級標量(word-level scalar)魁索、多字級矢量(multiple-wordlevel vector)和位級控制互連(bit-level control interconnects)。Plasticine的單元陣列通過多個DDR通道與DRAM連接盼铁,每個通道都有相關的地址管理單元粗蔚,在多個地址流之間進行仲裁,并由緩沖器支持多個未完成的內存請求和地址聚合饶火,以盡量減少DRAM的訪問鹏控。每個Plasticine組件用于映射應用程序的特定部分: 本地地址計算在PMU中完成,DRAM地址計算發(fā)生在DRAM地址管理單元中肤寝,其余的數(shù)據(jù)計算發(fā)生在PCU中当辐。請注意,Plasticine架構是參數(shù)化的鲤看,我們將在第3.7節(jié)討論這些參數(shù)的取值缘揪。
3.1. 模式計算單元(Pattern Compute Unit)
PCU被設計為在應用程序中執(zhí)行內部單個并行模式。如圖3所示义桂,PCU數(shù)據(jù)路徑被組織為多階段找筝、可重配的SIMD管道。這種設計使每個PCU實現(xiàn)了高計算密度慷吊,并利用了跨通道的循環(huán)級并行和跨階段的流水線并行袖裕。
SIMD通道的每個階段由一個功能單元(FU, functional unit) 和相關流水線寄存器(PR, pipeline register)組成。功能單元執(zhí)行32位字級算術運算和二進制操作溉瓶,包括對浮點數(shù)和整數(shù)操作的支持急鳄。由于單個流水線階段的功能單元以SIMD方式操作,每個階段只需要一個配置寄存器堰酿,每個FU的結果都被寫入其相關的寄存器中疾宏。每個通道中的PR是跨流水線階段鏈在一起的,允許在同一通道內的階段之間傳播實時值胞锰。FU之間的跨道通信通過兩種類型的PCU內部網(wǎng)絡實現(xiàn): 一種是還原樹網(wǎng)絡灾锯,允許將多個通道的值還原成一個標量; 另一種是移位網(wǎng)絡,允許將PR作為跨階段滑動窗口從而在模版應用中復用嗅榕。這兩個網(wǎng)絡都在PR內使用專用寄存器顺饮,以盡量減少硬件開銷。
PCU使用三種輸入輸出(IO)作為全局互連接口: 標量(scalar)凌那、矢量(vector)和控制(control)兼雄。標量IO用于單字數(shù)據(jù)的通信,如Fold的結果等帽蝶。每個矢量IO允許在PCU中的每個通道上通信一個字赦肋,并用于諸如讀寫PMU中的scratchpad存儲器和在多個PCU之間的長管道上傳輸中間數(shù)據(jù)。每個矢量和標量輸入都使用一個小型FIFO進行緩沖。通過輸入端FIFO解耦數(shù)據(jù)生產(chǎn)者和消費者佃乘,并通過增強魯棒性減少輸入延遲從而簡化PCU間的控制邏輯囱井。控制IO用于通信控制信號趣避,如PCU執(zhí)行的開始或結束庞呕,或指示背壓。
一個可重配計數(shù)器鏈產(chǎn)生模式迭代指數(shù)和控制信號以協(xié)調執(zhí)行程帕。當控制塊啟用其中一個計數(shù)器時住练,PCU開始執(zhí)行。根據(jù)應用的控制和數(shù)據(jù)依賴性愁拭,控制塊可以被配置為結合來自本地FIFO和全局控制輸入的多個控制信號來觸發(fā)PCU的執(zhí)行讲逛。控制塊使用可重配組合邏輯和用于狀態(tài)機的可編程計數(shù)器來實現(xiàn)岭埠。
3.2. 模式存儲單元(Pattern Memory Unit)
圖4顯示了PMU架構鳖粟。每個PMU包含一個由程序員管理的scratchpad存儲器社裆,加上一個用于地址計算的可重配標量數(shù)據(jù)通路。如圖5所示向图,PMU被用來在整個Plasticine架構中分配片上存儲器泳秀。Plasticine對參與內存地址計算的操作和應用基礎的核心計算進行了區(qū)分。地址計算在PMU數(shù)據(jù)通路上進行榄攀,而核心計算則在PCU內進行侧馅。一些觀察結果促使采用了這種設計選擇:(i)地址計算涉及簡單的標量數(shù)學啊胶,這需要比PCU中的FU更簡單的ALU;(ii)對大多數(shù)片上訪問模式來說,使用多個通道進行地址計算通常并不必要;(iii)在PCU內執(zhí)行地址計算需要將地址從PCU路由到PMU,這占用了PCU階段和輸出鏈接法褥,并可能導致PCU利用率不足圆存。
scratchpad上有多個SRAM堆疊,與PCU通道的數(shù)量相匹配。scratchpad周圍的地址解碼邏輯可以被配置為在幾種堆疊模式下運行趁曼,以支持各種訪問模式。Strided banking模式支持密集數(shù)據(jù)結構上經(jīng)常出現(xiàn)的線性訪問模式棕洋。FIFO模式支持流式訪問挡闰。行緩沖(Line buffer) 模式支持類似于滑動窗口的訪問模式。復制(Duplication) 模式拍冠,即內容在所有存儲器中復制尿这,提供多個讀取地址通道,以支持并行的片上gather操作庆杜。
正如堆疊對于支持多個SIMD單元以維持計算吞吐量很重要射众,N-緩沖(N-buffering) 或廣義上的雙緩沖對于支持粗粒度管道也同樣重要。PMU scratchpad可以被配置成N-buffer晃财,并采用上述任何一種堆疊模式進行操作叨橱。N-buffer是通過將每個SRAM的地址空間劃分為N個不相連的區(qū)域來實現(xiàn)的。利用寫和讀的狀態(tài)信息断盛,在每個存儲器的本地地址上增加適當偏移量罗洗,以訪問正確的數(shù)據(jù)。
類似于PCU钢猛,一個可編程的計數(shù)器鏈和控制塊觸發(fā)PMU執(zhí)行伙菜。每個PMU通常包含來自生產(chǎn)者模式的寫地址計算邏輯,以及來自消費者模式的讀地址計算邏輯命迈。根據(jù)本地FIFO和外部控制輸入的狀態(tài)贩绕,可以配置控制塊,通過啟用適當?shù)挠嫈?shù)器來分別或者同時觸發(fā)寫地址計算和讀地址計算壶愤。
3.3. 互聯(lián)(Interconnect)
Plasticine支持通過三種方式實現(xiàn)PMU淑倾、PCU和外圍元件之間的通信: 標量、矢量和控制征椒。這些網(wǎng)絡在傳輸數(shù)據(jù)的粒度上有所不同: 標量網(wǎng)絡以字級粒度運行娇哆,矢量網(wǎng)絡以多字級粒度運行,而控制網(wǎng)絡以位級粒度運行勃救。所有三個網(wǎng)絡的拓撲結構都是相同的碍讨,如圖5所示。所有網(wǎng)絡都是靜態(tài)配置的剪芥。網(wǎng)絡交換機中的鏈接包括寄存器垄开,以避免長線延遲。
應用程序通常包含嵌套流水線税肪,其中外圍流水線層只需要計數(shù)器和一些可重配控制溉躲。此外榜田,由于外部流水線邏輯通常涉及某種程度的控制信號同步,因此是控制熱點锻梳,需要大量控制和標量輸入輸出箭券。為了有效處理外部流水線邏輯,標量和控制交換機共享同一個可重配控制塊和計數(shù)器疑枯。將控制邏輯納入交換機內辩块,可以減少對熱點的路由,以提高PCU利用率荆永。
3.4. 片外存儲訪問(Off-chip Memory Access)
Plasticine通過4個DDR內存通道訪問片外DRAM废亭,每個DRAM通道基于芯片兩側的若干個地址生成器(AG, address generator) 訪問,如圖5所示具钥。每個AG包含一個可重配標量數(shù)據(jù)路徑生成DRAM請求豆村,其架構與圖4所示的PMU數(shù)據(jù)路徑類似。此外骂删,每個AG包含F(xiàn)IFO緩沖從DRAM發(fā)出的指令掌动、數(shù)據(jù)和傳入的響應。多個AG連接到一個地址聚合單元(coalescing unit) 宁玫,地址聚合單元負責AG之間的仲裁并處理內存請求粗恢。
AG可以產(chǎn)生或密集(dense) 或稀疏(sparse) 的內存指令。密集請求用于批量傳輸連續(xù)的DRAM區(qū)域欧瘪,通常用于讀取或寫入數(shù)據(jù)塊眷射。密集請求被聚合單元轉換為多個DRAM突發(fā)請求。稀疏請求將地址流輸入聚合單元佛掖,聚合單元通過聚合緩存維護已發(fā)出的DRAM請求元數(shù)據(jù)凭迹,并合并屬于同一DRAM請求的稀疏地址,以盡量減少發(fā)出的DRAM請求數(shù)量苦囱。換句話說,稀疏內存的加載觸發(fā)了聚合單元的gather操作脾猛,而稀疏內存的存儲則觸發(fā)了scatter操作撕彤。
3.5. 控制流(Control Flow)
Plasticine使用分布式、分層的控制方案猛拴,盡量減少單元之間的同步羹铅,以適應網(wǎng)絡中有限的位數(shù)連接。我們支持從高級語言結構推斷出三種類型的控制器協(xié)議: (a) 順序(sequential) 執(zhí)行愉昆,(b) 粗粒度流水線(coarse-grained pipelining) 职员,和(c) 流式(streaming) (圖6)。這些控制方案對應于輸入程序中的外循環(huán)跛溉,并決定單個單元的執(zhí)行如何相對于其他單元進行調度焊切。單元被分組為 層次分明的控制器集扮授,同級控制器的控制方案基于其直屬父控制器的方案。
在順序執(zhí)行父控制器中专肪,任何時候都只有一個數(shù)據(jù)依賴的子節(jié)點處于活動狀態(tài)刹勃,這通常應用在有循環(huán)依賴的時候。我們通過令牌(token) 強制執(zhí)行數(shù)據(jù)依賴嚎尤,其實現(xiàn)是通過控制網(wǎng)絡路由的前饋脈沖信號荔仁。當父控制器被啟用時,一個令牌被發(fā)送給所有對其兄弟節(jié)點沒有數(shù)據(jù)依賴的頭部(head) 子程序芽死。在完成執(zhí)行后乏梁,每個子節(jié)點會將令牌傳遞給其輸出數(shù)據(jù)的消費者。每個控制器只有在所有依賴數(shù)據(jù)源的令牌被收集后才會被啟用关贵。來自最后一組控制器的令牌遇骑,其數(shù)據(jù)不被同級別的任何兄弟控制器所消耗,被送回給父控制器坪哄。父控制器將令牌收集起來质蕉,要么將令牌送回給頭部進行下一次迭代,要么在其所有迭代完成后在自己的層次結構中傳遞令牌翩肌。
在粗粒度流水線中模暗,子控制器以流水線方式執(zhí)行。為了允許并發(fā)念祭,父控制器向頭部發(fā)送N個令牌兑宇,其中N是關鍵路徑中的數(shù)據(jù)依賴子節(jié)點數(shù)量,從而允許所有子節(jié)點在穩(wěn)定狀態(tài)下處于活動狀態(tài)粱坤。為了允許生產(chǎn)者和消費者在不同的迭代中對相同數(shù)據(jù)進行處理隶糕,每個中間存儲器都有M個緩沖區(qū),其中M是在其數(shù)據(jù)依賴路徑上相應的生產(chǎn)者和消費者之間的距離站玄。為了防止生產(chǎn)者溢出下行緩沖區(qū)枚驻,每個子控制器通過使用點數(shù)(credit) 跟蹤可用的下行緩沖區(qū)大小來處理背壓。每個生產(chǎn)者在生產(chǎn)完父代"當前"迭代的所有數(shù)據(jù)后株旷,遞減其點數(shù)再登。同樣,消費者在消費完父代"當前"迭代的所有數(shù)據(jù)后晾剖,通過網(wǎng)絡送回一個點數(shù)锉矢。在粗粒度流水線方案中,當每個子節(jié)點至少有一個令牌和一個點數(shù)可用時齿尽,就會被啟用沽损。
最后,流式父控制器的子控制器以細粒度流水線方式執(zhí)行循头。這使得編譯器可以通過串聯(lián)多個單元形成一個大流水線來適應大型內部模式體绵估。在流式模式中炎疆,子節(jié)點通過FIFO進行通信。當某個控制器的所有讀FIFO都不為空壹士,且所有寫FIFO都不滿時磷雇,該控制器被啟用。FIFO在消費者控制器本地躏救,所以入隊以及非空信號是通過控制網(wǎng)絡從消費者發(fā)送到生產(chǎn)者的唯笙。
為了執(zhí)行這些控制協(xié)議,我們使用靜態(tài)可編程計數(shù)器盒使、狀態(tài)機和組合查詢表來實現(xiàn)專門的可重配控制塊崩掘,架構中的每個PCU、PMU少办、交換機和存儲控制器都有一個控制塊苞慢。一般來說,沒有任何子節(jié)點的控制器被映射到PCU英妓,而外部控制器被映射到交換機的控制邏輯挽放。由于外部控制器通常有許多子節(jié)點需要同步,這種映射為外部控制器提供了較高的通信基數(shù)蔓纠。Plasticine控制方案中的層次架構和分布式通信使編譯器能夠利用嵌套并行模式中的多層次并行性辑畦,而只需最小的位級可重配開銷。
3.6. 應用映射(Application Mapping)
我們從一個被表示為并行數(shù)據(jù)流流水線層次結構的應用開始腿倚,該應用是用一種基于并行模式的語言--Delite硬件定義語言(DHDL, Delite Hardware Definition Language)[20]編寫的纯出。之前的工作[36]顯示了以第2節(jié)所述的并行模式表達的應用程序如何能夠自動分解為DHDL中的流水線,這些流水線要么只包含其他流水線的外部控制器敷燎,要么是不包含其他控制器(只包含計算和存儲操作的數(shù)據(jù)流圖)的內部控制器暂筝。
為了將DHDL映射到Plasticine,我們首先基于用戶指定的或自動調整的并行化系數(shù)展開外部流水線硬贯。然后焕襟,基于展開的結果分配和安排虛擬PMU和PCU。這些虛擬單元是對Plasticine單元的抽象表示饭豹,有無限多的可用輸入胧洒、輸出、寄存器墨状、計算階段和計數(shù)器鏈。由于外部控制器不包含計算菲饼,只包含控制邏輯肾砂,它們被映射到虛擬PCU,沒有計算階段宏悦,只有控制邏輯和計數(shù)器鏈镐确。內部控制器中的計算是通過線性化數(shù)據(jù)流圖和將產(chǎn)生的操作列表映射到虛擬階段和寄存器來實現(xiàn)的包吝。每個本地存儲器映射到一個虛擬PMU,用于計算該存儲器讀寫地址的階段被復制到虛擬PMU上源葫。
然后诗越,通過劃分階段將每個虛擬單元映射為一組物理單元。虛擬PCU被劃分為多個PCU息堂,而PMU則成為一個具有零個或多個支持PCU的PMU嚷狞。雖然一般來說圖分區(qū)(graph partitioning )是NP-hard問題,但每個虛擬單元的計算階段往往遠少于200個荣堰,而且循環(huán)依賴性非常小床未。這意味著,帶有簡單啟發(fā)式的貪婪算法可以實現(xiàn)接近完美的物理單元分區(qū)振坚。在我們的分區(qū)算法中薇搁,使用一個成本指標計算物理階段的數(shù)量,每階段的活躍變量渡八,以及給定分區(qū)所需的標量和矢量輸入/輸出總線啃洋。請注意,由于我們從應用程序的完整數(shù)據(jù)流表示開始屎鳍,這些通信和計算成本總是可以靜態(tài)預測的宏娄。使用啟發(fā)式方法,編譯器會選擇一個建議分區(qū)哥艇,其中所有PCU和PMU在物理上都是可實現(xiàn)的绝编,并給定一些選定的Plasticine架構參數(shù)(PCU、PMU貌踏、階段十饥、流水線、總線等的數(shù)量)祖乳,并使ALU和本地內存利用率最大化逗堵。
在分區(qū)之后,按照第3.5節(jié)所述眷昆,生成與控制器層次結構相對應的控制邏輯蜒秤。然后,我們將虛擬硬件節(jié)點與物理硬件資源進行分層綁定亚斋,包括數(shù)據(jù)通路和控制通路的放置和路由作媚,SIMD單元的寄存器分配,包括將階段映射到物理ALU帅刊,并分配scratchpad和控制資源纸泡。Plasticine的分層性質使得每層映射的節(jié)點少于1000個,從而極大減少了搜索空間赖瞒。
給定配置和路由信息女揭,然后生成類似于匯編語言的Plasticine配置描述蚤假,用于為架構生成靜態(tài)配置"位流(bitstream)"。由于分層體系架構吧兔,以及計算單元之間的粗總線粒度磷仰,使得整個編譯過程只需幾分鐘就可以完成(或失敗),而生成FPGA配置則需要數(shù)小時境蔼。
3.7. 架構規(guī)模(Architecture Sizing)
目前為止,我們已經(jīng)介紹了由PCU调缨、PMU和網(wǎng)絡等組成的參數(shù)化架構〈辏現(xiàn)在我們介紹調整PCU和PMU參數(shù)的過程,以創(chuàng)建最終的Plasticine架構弦叶,我們將在第4節(jié)對其進行評估俊犯。表3總結了所考慮的架構參數(shù),每個參數(shù)的可能值伤哺,以及所選的最終值燕侠。為了提高應用路由性的概率,我們要求架構中的PMU和PCU是同質的立莉。
在選擇設計參數(shù)時绢彤,首先分析表4中所列基準測試的特點來剪裁空間。根據(jù)每個基準測試的性能模型蜓耻,確定所有基準測試的理想內部控制器的并行化系數(shù)在8到32之間茫舶。在Plasticine中,對應于具有8至32條SIMD通道的模式計算單元刹淌。我們選擇了具有16條通道的平衡架構饶氏。16個4字節(jié)矢量也方便與我們的主存儲器的64字節(jié)突發(fā)大小相匹配。對于PMU的scratchpad有勾,我們發(fā)現(xiàn)對于基準測試來說疹启,理想的tile大小最多為每組4000字。因此蔼卡,我們將PMU設置為有16個可配置的16KB內存皮仁,每個PMU總共有256KB。
接下來搜索剩余的架構空間,選擇每個PCU的級數(shù)贷祈、每級寄存器、輸入和輸出喝峦。在我們的編程模型中势誊,外部控制器的并行化在硬件上對應于內部控制器的復制。這意味著可以假設谣蠢,在特定應用中粟耻,外循環(huán)的并行化不會改變其理想的PCU參數(shù),而只是改變所需PCU數(shù)量眉踱。因此挤忙,我們用現(xiàn)實的并行化因素固定每個基準測試,并確定如何在最大限度提高有效計算能力的同時最小化總PCU面積谈喳。請注意册烈,必須允許改變所需PCU的數(shù)量,因為這些參數(shù)直接影響到虛擬PCU需要多少物理PCU婿禽∩蜕考慮到最小化PCU設計,我們可以在給定總芯片面積預算的條件下創(chuàng)建具有最大性能的Plasticine架構扭倾。
我們使用模型驅動的蠻力搜索來調整不同應用中的每個架構參數(shù)淀零。為了推動這一搜索,我們通過將基準測試歸一化的面積開銷作為有效PCU面積的成本指標膛壹。當調整某個參數(shù)時驾中,對其數(shù)值進行掃描,對于每個建議值模聋,掃過剩余空間肩民,找到可能的最小PCU面積()。然后撬槽,根據(jù)其最小值(
)將這些面積歸一化此改,并將每個可能的參數(shù)值的開銷報告為
。單個PCU面積被建模為其控制盒侄柔、FU共啃、流水線寄存器、輸入FIFO和輸出網(wǎng)絡的面積之和暂题。一組給定設計參數(shù)所需的PCU總數(shù)是使用第3.6節(jié)中概述的映射程序計算出來的移剪。
我們在研究中發(fā)現(xiàn),調優(yōu)過程中參數(shù)的排序對最終的架構設計影響不大薪者。為了簡單起見纵苛,我們基于一種可能的排序進行搜索,但任何排序出來的最終參數(shù)值都是一樣的。
我們首先檢查每個物理PCU的階段數(shù)所定義的空間攻人,所有其他參數(shù)都不受限制取试。圖7a顯示了在4到16級之間掃頻后的估計面積開銷。在這里怀吻,我們看到對于大多數(shù)基準測試來說瞬浓,每個PCU的理想級數(shù)是5或6。在這些基準測試中蓬坡,每個模式的計算量相當小猿棉,允許模式被映射到單個PCU上。在PCU內屑咳,至少需要5個階段來實現(xiàn)完整的跨通道還原樹萨赁。在BlackScholes中,核心計算流水線有大約80個階段兆龙,這已經(jīng)足夠長了杖爽,每個PCU的階段對平均FU利用率的影響很小。在TPCHQ6中详瑞,核心計算有16個階段掂林,這意味著額外開銷在8和16個階段(即使不包括計算)是最小的。我們選擇每個PCU的6個階段作為所有基準測試的平衡架構坝橡,這種選擇意味著像TPCHQ6這樣運算量相對較小泻帮、不被平均分割為6份的應用將不能充分利用PCU分區(qū),但這是在同質單元上進行分區(qū)的一個不可避免的結果计寇。
我們接下來確定每個FU的寄存器數(shù)量锣杂。我們再次掃過參數(shù)空間,將級數(shù)固定為6番宁,但對其他參數(shù)不作限制元莫。從圖7b中可以發(fā)現(xiàn)大多數(shù)應用的理想寄存器數(shù)量在4到6之間,直接對應于每個PCU流水線階段中任何給定點的最大活躍值數(shù)量蝶押。低于4個寄存器踱蠢,PCU就會受到給定時間內所能容納的活躍值數(shù)量的限制,從而導致不相干的分區(qū)棋电。在每個FU超過8個寄存器時茎截,相對于PCU的總面積,未使用寄存器的成本變得很明顯赶盔。因此我們選擇每個FU有6個寄存器企锌。
按照同樣的程序,我們確定標量輸入和輸出的數(shù)量于未。標量邏輯相對便宜撕攒,但是陡鹃,像寄存器一樣,缺乏可用的標量輸入或輸出會導致邏輯被分割到許多PCU中抖坪,未利用的邏輯會產(chǎn)生大量開銷萍鲸。因此吁断,我們在圖7(c,d)中看到怕膛,每個基準測試都有一些所需的最低數(shù)量的輸入和輸出,在這之后增加任何一個都沒有什么影響匪凉。我們選擇了6個標量輸入和5個標量輸出捌肴,因為這在所有基準測試中都能使面積開銷最小。
最后藕咏,我們以同樣的方式對每個PCU的矢量輸入和輸出進行調整状知。矢量與標量是分開調整的,因為兩者在PCU之間使用不同的互連路徑孽查,在PCU內部使用不同的寄存器饥悴。請注意,矢量輸入與輸入FIFO有關盲再,占了PCU面積的很大一部分西设。因此,我們希望盡可能減少矢量輸入答朋。然而贷揽,如圖7e所示,由于在PCU之間分割的限制梦碗,BlackScholes和GDA被限制為至少有3個矢量輸入禽绪。圖7f顯示,矢量輸出相對便宜洪规,對所需的設計面積影響很小印屁。因此,我們選擇每個PCU有3個矢量輸入和3個矢量輸出斩例。
我們還以類似方法選擇了表3給出的PMU參數(shù)雄人。請注意,PMU的矢量輸入和輸出的數(shù)量大致對應于緩存盤的讀念赶、寫和數(shù)據(jù)總線础钠。因為編譯器總是將內存讀取的結果映射到矢量總線,因此PMU目前從不使用標量輸出晶乔。
在這個調優(yōu)過程之后珍坊,有了一個調優(yōu)的PCU和PMU設計≌眨基于對每個基準測試的研究阵漏,我們選擇16×8個單元驻民,還試驗了多種比例的PMU和PCU。最終我們選擇1:1的PMU履怯、PCU比例回还。而較大比率(例如2:1的PMU、PCU比例)在某些基準測試上提高了單位利用率叹洲,但能效較低柠硕。
4. 評估
本節(jié)我們基于商用Stratix V FPGA評估Plasticine的性能和功耗效率,將Plasticine架構的運行時間和功耗與來自機器學習运提、數(shù)據(jù)分析和圖形處理領域的基準測試蝗柔、有效的FPGA實現(xiàn)進行比較。在成熟工具鏈的支持下民泵,F(xiàn)PGA被廣泛使用癣丧,使得我們有可能在真實硬件上獲得性能數(shù)據(jù)。
4.1. 基準測試(Benchmarks)
我們圍繞兩種架構的各種屬性開發(fā)了一組基準測試栈妆,比如密集數(shù)據(jù)處理和依賴性數(shù)據(jù)的內存訪問胁编。我們使用真實應用指導基準測試的設計,以確保Plasticine能夠做有用的工作鳞尔。表4提供了應用程序的簡要介紹嬉橙。
在密集應用中寥假,內積(inner product) 市框、外積(outer product) 和GEMM(單精度通用矩陣乘法, single precision general matrix multiplication)是基本的線性代數(shù)操作,是許多算法的核心昧旨。TPC-H Query 6提供了簡單的過濾還原功能拾给,展示了數(shù)據(jù)庫查詢功能。Black-Scholes是一種計算量很大的金融算法兔沃,具有極深的流水線蒋得。高斯判別分析(GDA, Gaussian Discriminant Analysis) 和隨機梯度下降(SGD, Stochastic Gradient Descent) 是常見的機器學習算法,涉及相對復雜的內存訪問乒疏,表現(xiàn)出許多并行化的選擇额衙。K-means聚類通過迭代計算k個最佳聚類中心點將一組輸入點分組。K-means使用密集的HashReduce計算下一次迭代的中心點怕吴。卷積神經(jīng)網(wǎng)絡(CNN, Convolutional Neural Network) 是用于圖像分類的重要機器學習內核窍侧。CNN涉及多層計算,其中每一層都涉及對輸入特征圖執(zhí)行若干個三維卷積操作转绷。
稀疏應用涉及對內存中依賴性數(shù)據(jù)的訪問和非確定性計算伟件。稀疏矩陣-密集向量(SMDV, Sparse matrix-dense vector) 乘法是許多稀疏迭代方法和優(yōu)化算法中使用的另一個基本線性代數(shù)內核。PageRank是一種流行的圖算法议经,涉及片外稀疏數(shù)據(jù)收集斧账,以迭代更新頁面排名谴返。廣度優(yōu)先搜索(BFS, BreadthFirst Search) 是另一種圖算法,執(zhí)行與數(shù)據(jù)相關的咧织、基于邊界的遍歷嗓袱,并使用數(shù)據(jù)散布來存儲每個節(jié)點的信息。
我們用Delite硬件定義語言(DHDL, Delite Hardware Definition Language)實現(xiàn)這些基準測試习绢,這是一種基于并行模式的專門語言渠抹,用于為空間架構(spatial architecture)編寫應用程序[20]。在DHDL中闪萄,應用程序被指定為可并行的數(shù)據(jù)流流水線的層次結構梧却。以前的工作[36]表明,DHDL可以從并行模式中自動生成败去,并可用于生成FPGA的高效硬件加速器設計[20]篮幢。
4.2. Plasticine設計
我們基于Chisel[2]使用表3所列選定參數(shù)實現(xiàn)Plasticine架構。該架構被組織成16×8的單元陣列为迈,PMU與PCU的比例為1:1,使用Synopsys設計編譯器(Synopsys Design Compiler)與28nm技術庫進行綜合缺菌。設計中的關鍵路徑已被優(yōu)化為1GHz時鐘頻率葫辐,芯片總面積的估算是在綜合之后得到的,通過帶有28nm庫的Synopsys內存編譯器(Synopsys Memory Compiler)獲得本地scratchpad和FIFO的尺寸伴郁。我們使用Synopsys PrimeTime和RTL跟蹤器對單個PCU耿战、PMU和AG的功率進行分析,整個芯片的靜態(tài)功率和所使用單元的動態(tài)功率都包括在總功率中焊傅。表5提供了Plasticine的組件面積細分剂陡,面積為112.77。最終的Plasticine架構具有12.3個單精度TFLOPS峰值浮點性能和16MB的總片上scratchpad容量狐胎。
使用Synopsys VCS和DRAMSim2[39]進行精確周期模擬,測量芯片外內存訪問時間握巢,得到了Plasticine的執(zhí)行時間晕鹊。我們配置DRAMSim2模擬具有4個DDR3-1600通道的內存系統(tǒng),給出51.2 GB/s的理論峰值帶寬暴浦。
通過修改DHDL編譯器溅话,使用第3.6節(jié)中介紹的過程為Plasticine生成靜態(tài)配置,每個基準測試被編譯為一個Plasticine配置歌焦,用于對模擬器編程飞几。Plasticine總運行時間在數(shù)據(jù)復制到加速器主內存后開始計算,當加速器執(zhí)行完成時結束(即在將數(shù)據(jù)復制回主機之前)独撇。
4.3. Plasticine設計開銷
我們首先研究Plasticine架構中設計決定的面積開銷屑墨。每個決定都被隔離開來躁锁,并根據(jù)一個理想化的架構進行評估。這些架構被歸一化绪钥,以便在1GHz的時鐘和固定的本地存儲器大小下灿里,確保每個基準測試的性能與它在最終的Plasticine架構上的性能相同。這些設計決定(表6的a-e列)允許每個基準測試有任意數(shù)量的PCU和PMU程腹,這樣做是為了解耦特定架構對具體決定和應用的影響匣吊。
我們首先評估了將一個應用劃分為粗粒度PCU和PMU的成本寸潦。在這里色鸳,我們將特定于基準ASIC設計的預計面積與具有異構(heterogeneous) PCU和PMU的理想Plasticine架構進行比較。對于給定基準见转,ASIC面積被估算為其計算和存儲資源的面積之和命雀。每個資源的面積都是用Synopsys DC來描述的。Plasticine架構具有第3節(jié)中描述的所有特征斩箫,包括配置邏輯吏砂、可配置的堆疊存儲器和可靜態(tài)配置的ALU。表6的a列顯示了這種異構架構的預計成本與特定基準芯片設計的預計面積的關系乘客。相對于ASIC設計狐血,可重配單元的面積開銷平均約為2.8倍。這是Plasticine的可重配性的基本開銷易核,主要集中在使內存控制器可配置和將計算邏輯從固定操作轉換為可重配FU匈织。
雖然使用異構單元是利用面積的理想選擇,但產(chǎn)生了一個難以解決的映射問題牡直,而且不能在不同應用中通用缀匕。在表6的b列中,顯示了從異構架構到仍然具有異構PCU但具有單一同構PMU設計的架構的成本碰逸。我們仍然允許這個PMU設計對每個基準來說是唯一的乡小,但是在基準測試中,根據(jù)程序需要的最大scratchpad來確定PMU的大小饵史。遷移到統(tǒng)一PMU的平均開銷是1.4倍劲件,對于內存大小急劇變化的應用程序,開銷特別大约急。例如零远,OuterProduct對大小為N的向量tile和大小為的輸出tile使用本地存儲器。在ASIC設計中厌蔽,關于目標應用的靜態(tài)知識允許將每個本地存儲器專門化為所需大小和芯片數(shù)量牵辣,從而節(jié)省大量SRAM面積。在Plasticine中奴饮,我們選擇了統(tǒng)一大小的存儲器單元纬向,從而簡化映射择浊,并提高特定應用可被路由的可能性。
c列顯示了進一步限制PCU的開銷逾条,使其也是同質的琢岩,但在不同基準上仍有差異。這里的開銷對于像PageRank這樣有大量順序循環(huán)的應用來說特別高师脂。所有模式的主體都被映射到PCU中担孔,但是由于每個PCU被固定為16個通道,順序循環(huán)中的大部分通道以及大部分面積都沒有被使用吃警,導致開銷高達8.4倍糕篇。同樣,像TPCHQ6這樣的計算流水線長度變化很大的應用酌心,往往對同質PCU內的階段利用不足拌消。
我們接下來展示在所有應用中選擇一組PMU參數(shù)后的面積開銷。如第3.7節(jié)所述安券,這將所有基準中的scratchpad的總大小設定為每個256KB墩崩。雖然這種本地內存容量對GEMM和OuterProduct[33]等應用的性能至關重要,但其他應用的本地內存要求要小得多侯勉。從d列可以看出泰鸡,這種未利用的SRAM容量的平均芯片面積開銷為1.2倍。
e列列出了使用第3.7節(jié)中得到的數(shù)值在不同應用中通用化PCU的結果壳鹤。在這里,我們看到剩余的開銷與同質化單元的成本相比是很小的饰迹,對于BlackScholes來說芳誓,平均只有5%,最高為15%啊鸭。這表明锹淌,不同應用中PCU需求的大部分變化已經(jīng)被單個應用中的各種循環(huán)所代表,這反過來又使跨應用的計算通用化變得相對便宜赠制。
綜上所述赂摆,我們估計,與具有相同性能的特定應用芯片設計相比钟些,我們的同質化烟号、通用化、基于單元的架構的平均面積開銷為3.9倍到42.8倍政恍。當然汪拥,這種開銷根據(jù)基準的本地內存和計算要求而有很大不同。雖然最終固定尺寸的Plasticine架構的PCU和PMU利用率(后來在表7中顯示)往往低于100%篙耗,但我們不認為這本身是面積開銷迫筑。相反宪赶,Plasticine架構被認為是一個"足夠大"的結構,可以用來實現(xiàn)e列中列出的理想架構脯燃,剩余的單元資源可以用門控時鐘優(yōu)化搂妻。
4.4. FPGA設計
我們接下來比較Plasticine與FPGA的性能和功率。我們使用DHDL編譯器來生成VHDL辕棚,然后使用Altera的綜合工具為FPGA生成位流欲主。我們在Altera 28nm Stratix V FPGA上運行每個合成的基準,通過PCIe與主機CPU控制器連接坟募。該FPGA有一個150 MHz的結構時鐘岛蚤,一個400 MHz的存儲器控制器時鐘,以及48 GB的專用片外DDR3-800 DRAM懈糯,有6個通道涤妒,峰值帶寬為37.5 GB/s。FPGA的執(zhí)行時間為運行20次的平均值赚哗。與Plasticine一樣她紫,計時在數(shù)據(jù)從主機拷貝到FPGA的專用DRAM完成后開始,在FPGA執(zhí)行完成后結束屿储。我們還使用Altera的PowerPlay工具在基準放置和布線后獲得了每個基準測試的FPGA功率估計贿讹。
4.5. Plasticine和FPGA比較
表7顯示了在我們的一系列基準測試中,相對于Stratix V FPGA的Plasticine的利用率够掠、功率民褂、性能和每瓦性能。表格顯示疯潭,與FPGA相比赊堪,Plasticine實現(xiàn)了更高的能源效率。表7顯示了每個基準測試在兩個平臺上的資源利用率竖哩,接下來我們將討論各個基準測試結果哭廉。
內積和TPC-H Query 6都分別實現(xiàn)了1.4倍的速度提升。這兩個基準測試都是內存帶寬約束相叁,大量數(shù)據(jù)從DRAM中通過數(shù)據(jù)通路流出來遵绰,而計算量較小。因此增淹,性能差異對應于各自平臺上可實現(xiàn)的主內存帶寬差異椿访。Plasticine上的功耗也與FPGA相當,大部分PCU和一半PMU都沒有使用虑润,因此觸發(fā)了功耗門控赎离。
外積也是有帶寬限制的,但有部分臨時局部性,因此可以從更大的tile尺寸中受益梁剔。FPGA受限于可以實例化的具有多端口的大型存儲器數(shù)量虽画,這反過來又限制了可利用的內循環(huán)并行性以及潛在的計算與DRAM通信之間的并行處理。對堆疊的荣病、有緩沖的scratchpad的本地支持使Plasticine能夠更好利用SIMD和流水線并行性码撰,從而實現(xiàn)6.7倍的速度提升。
Black-Scholes通過浮點操作流水線從DRAM中傳輸若干浮點陣列个盆。每次訪問DRAM時的大量浮點運算使其在大多數(shù)架構上受計算限制脖岛。雖然Black-Scholes的深度流水線性質使其成為FPGA加速的理想候選者,但FPGA在其主存儲器帶寬飽和之前就已經(jīng)耗盡了實例化計算資源的空間颊亮。另一方面柴梆,Plasticine具有更高的浮點單元容量。在Plasticine上的BlackScholes可以被充分并行化终惑,以至于受限于內存绍在。從表7中可以看到,使用65%的PCU雹有,Black-Scholes最大限度利用了DRAM帶寬偿渡,實現(xiàn)了5.1倍的加速。
GEMM和GDA是計算受限的质帅,具有充分的時間和空間局部性适揉。在Plasticine上,GEMM實現(xiàn)了33.0倍的速度提升煤惩,GDA也有類似表現(xiàn)嫉嘀,速度提高了40.0倍。Plasticine可以通過將更大的tile加載到堆疊scratchpad來利用更多的局部性盟庞,并通過將scratchpad配置為雙緩沖區(qū)來隱藏DRAM的通信延遲。在FPGA上汤善,創(chuàng)建堆疊的雙緩沖tile會在計算資源耗盡之前耗盡BRAM資源什猖,從而限制了計算吞吐量。在目前GEMM與Plasticine的映射中红淡,PCU通過在其數(shù)據(jù)路徑中連續(xù)執(zhí)行流水線內積不狮,對兩塊tile進行乘法。并行性是在PCU內部跨通道實現(xiàn)的在旱,在多個tile被并行處理的情況下摇零,跨PCU也是如此。通過并行處理更多的輸入tile桶蝎,可以實現(xiàn)更多的并行性驻仅。因此谅畅,在目前的方案中,GEMM的性能受限于AG的數(shù)量噪服,因為需要更多的AG來加載多個輸入tile毡泻。此外,由于每個PCU都執(zhí)行內積粘优,不屬于還原網(wǎng)絡的FU就沒有得到充分利用仇味。更加復雜的映射方案,以及對PCU內階段間FU通信的更多硬件支持雹顺,可以進一步提高計算利用率丹墨,從而提高性能[31]。
CNN是另一個計算密集型基準測試嬉愧,在這種情況下贩挣,Plasticine的性能優(yōu)于FPGA,提升達95.1倍英染。Plasticine的性能是由于更高的計算密度以及支持內核權重局部化和PMU部分結果局部化的能力揽惹。為了有效利用CNN中的滑動窗口重用,scratchpad被配置為行緩沖區(qū)四康,以避免不必要的DRAM重加載搪搏。每個PCU通過從一個PMU中讀取內核權重并產(chǎn)生輸出特征圖到另一個PMU中來執(zhí)行單一三維卷積。PCU中的FU之間的移位網(wǎng)絡使數(shù)據(jù)在滑動窗口中得到重用闪金,并在流水線寄存器中積累部分和疯溺,從而最大限度減少了scratchpad的讀寫。CNN目前被映射到Plasticine上哎垦,因此每個PCU需要2個PMU囱嫩,一個用于保存內核權重,另一個用于存儲輸出特征圖漏设。由于Plasticine被配置為1:1的PCU:PMU比例墨闲,使得PCU的利用率上限為49.0%,而PMU和AG的利用率卻達到了最大化郑口。使用更多的PMU共享進行更優(yōu)化的映射可以克服這個限制鸳碧。
LogReg是一個計算量很大的基準測試,它使用大tile來捕捉局部性犬性。并行性在外循環(huán)層面通過并行處理多個tile得到利用瞻离,在內循環(huán)層面則使用PCU內的SIMD通道。目前乒裆,編譯器只在單個PCU的SIMD通道內利用內循環(huán)的并行性套利,而不在多個PCU之間分割內循環(huán)。通過以比FPGA更快的時鐘速率并行處理更多的輸入tile,Plasticine實現(xiàn)了11.4倍的速度提升肉迫。
SGD和K-means具有有順外循環(huán)和可并行的內循環(huán)验辞。這些應用固有的順序性導致在Plasticine上的速度分別提高了6.7倍和6.1倍,這主要是由于Plasticine的時鐘頻率更高昂拂。然而受神,由于Plasticine只需要幾個PCU來利用有限的并行性,大部分未使用的資源可以通過功耗門控格侯,使每瓦性能分別提高39.8倍和12.3倍鼻听。
SMDV、PageRank和BFS在Plasticine上分別實現(xiàn)了8.3倍联四、14.2倍和7.3倍的速度提升撑碴。這些稀疏基準測試的性能受限于DDR隨機訪問DRAM的帶寬。SMDV和PageRank只執(zhí)行稀疏負載(gather)朝墩,而BFS在每次迭代中執(zhí)行gather和scatter醉拓,scatter和gather引擎是在FPGA上使用軟邏輯實現(xiàn)的。這些基準測試的外循環(huán)被并行化收苏,以產(chǎn)生多個并行的稀疏內存請求流亿卤,使得地址聚合后未處理的內存請求數(shù)量最大化÷拱裕基準測試中使用的FPGA平臺的隨機訪問DRAM帶寬是有限的排吴,所有通道都作為一個寬的DRAM通道以"ganged"模式運行。具有多個獨立DRAM通道的FPGA平臺在理論上可以比我們的FPGA基線在稀疏應用中表現(xiàn)得更好懦鼠。然而钻哩,scatter-gather單元仍然必須在軟邏輯中實現(xiàn)。scatter-gather單元需要大量本地存儲器肛冶,但是本地存儲器(BRAM)往往是FPGA上的關鍵資源街氢,從而限制了未完成的存儲器請求的數(shù)量和地址聚合的功效。此外睦袖,F(xiàn)PGA結構時鐘通常比DRAM時鐘慢珊肃,在利用隨機訪問帶寬方面造成了另一個瓶頸。像Plasticine中的聚合單元這樣的專用硬件允許以更有效的方式使用DRAM帶寬馅笙。
總之伦乔,Plasticine可以最大限度提高內積和TPC-H Q6等流式應用的DRAM帶寬利用率,并維持深度流水線數(shù)據(jù)通路的計算吞吐量延蟹,使Black-Scholes等應用受到內存約束评矩。Plasticine為GEMM叶堆、GDA阱飘、CNN、LogReg、SGD和K-means等應用提供PMU和PCU間網(wǎng)絡的數(shù)據(jù)局部化和通信模式沥匈。最后蔗喂,通過支持大量具有地址聚合功能的未決內存請求,DRAM帶寬被有效用于SMDV高帖、Pagerank和BFS中的scatter和gather操作缰儿。
5. 相關工作
表2介紹了高效執(zhí)行并行模式所需的關鍵體系架構特性,接下來我們討論與這些特性相關的重要工作散址。
可重配scratchpad: 先前提出的幾種可重配架構缺乏對可重配分布式scrachpad存儲器的支持乖阵。如果不能使用支持并行模式所需的不同存儲和緩沖策略重新配置片上內存系統(tǒng),內存就會成為許多工作負載的瓶頸预麸。
例如瞪浸,ADRES[25]、DySER[17]吏祸、Garp[6]和Tartan[26]將可重配架構與CPU緊密結合对蒲,通過與主機CPU共享高速緩存層訪問主內存。ADRES和DySER將可重配架構緊密整合到處理器流水線的執(zhí)行階段贡翘,因此依賴處理器的加載/存儲單元進行內存訪問蹈矮。ADRES由功能單元網(wǎng)絡、帶有寄存器文件的可重配組件和共享多端口寄存器文件組成鸣驱。DySER是一個可重配陣列泛鸟,具有靜態(tài)配置的互連遭商,旨在以流水線方式執(zhí)行最內層的循環(huán)體银锻。然而慢显,不支持帶有后沿(back-edge)或反饋路徑的數(shù)據(jù)流圖比庄,這使得執(zhí)行諸如Fold和嵌套并行模式成為挑戰(zhàn)鸭你。Garp由一個MIPS CPU核心和一個類似FPGA的協(xié)處理器組成鲫竞。協(xié)處理器的位級靜態(tài)互連產(chǎn)生了與傳統(tǒng)FPGA相同的重配置開銷叁怪,限制了計算密度蕊连。Piperench[16]由功能單元(FSU)的"stripes"流水線序列組成缎脾,每個stripe之間有一個字級crossbar祝闻,每個功能單元都有對應的寄存器文件,用來保存臨時結果遗菠。Tartan由一個RISC核心和一個異步联喘、粗粒度的可重配網(wǎng)絡(RF, reconfigurable fabric)組成。RF架構是分層的辙纬,最頂層有一個動態(tài)互連豁遭,內部有一個靜態(tài)互連,最內層的RF核心架構是按照Piperench[16]的模式設計的贺拣。
可重配數(shù)據(jù)通路: 具有可重配功能單元的架構的能耗較少蓖谢,不會產(chǎn)生傳統(tǒng)指令流水線的開銷(如指令獲取捂蕴、解碼和寄存器文件訪問),這些開銷約占CPU數(shù)據(jù)通路能耗的40%[18]闪幽,約占GPU總動態(tài)能耗的30%[24]啥辨。此外,在GPU中使用可重配數(shù)據(jù)通路代替?zhèn)鹘y(tǒng)指令流水線盯腌,可以減少約57%的能耗[43]溉知。Raw微處理器[42]是平鋪式架構(tiled architecture),每個tile由一個單發(fā)有序處理器(single-issue in-order processor)腕够、一個浮點單元级乍、一個數(shù)據(jù)緩存和一個軟件管理的指令緩存組成。tile使用流水線帚湘、字級靜態(tài)和動態(tài)網(wǎng)絡與最近的鄰居通信卡者。Plasticine不會產(chǎn)生上述動態(tài)網(wǎng)絡和通用處理器的開銷,基于硬件管理的緩存來代替可重配scratchpad客们,可以降低功耗和面積效率崇决,有利于通用性。
密集數(shù)據(jù)通路和層次化流水線: Plasticine的分層架構底挫,具有密集的流水線SIMD功能單元和分散的控制恒傻,能夠在PCU內處理大量數(shù)據(jù)通信,并有效利用應用程序中的粗粒度流水線并行性建邓。相反盈厘,在架構中缺乏對嵌套流水線分層支持的架構,基于全局互連交換大多數(shù)結果官边,從而使得互連成為帶寬沸手、功率或面積的瓶頸。例如注簿,RaPiD[12]是由ALU契吉、寄存器和存儲器組成的一維陣列,對靜態(tài)和動態(tài)控制有硬件支持诡渴。隨后一個名為Mosaic[13]的研究項目包括一個靜態(tài)混合互連捐晶,以及在多個互連配置之間切換的硬件支持。RaPiD的線性流水線強制執(zhí)行僵硬的控制流妄辩,從而難以利用嵌套的并行性惑灵。HRL[14]將粗粒度和細粒度的邏輯塊與混合靜態(tài)互連相結合,雖然集中式scratchpad可以實現(xiàn)一些片上緩沖眼耀,但該架構主要是為內存密集型應用設計的英支,幾乎沒有局部性和嵌套并行性。Triggered[30]是由靜態(tài)互連中的ALU和寄存器的粗粒度處理元件(PE, processing element)組成的架構哮伟。每個PE包含一個調度器和一個謂詞寄存器(predicate register)干花,通過觸發(fā)器和特定動作執(zhí)行數(shù)據(jù)流鸯屿。Plasticine中使用的控制流機制與Triggered指令有一些相似之處。雖然這種架構可以靈活利用嵌套的并行性和局部性把敢,但由于缺乏層次結構,增加了全局互連上的通信谅辣,可能會造成瓶頸修赞,并降低數(shù)據(jù)路徑的計算密度。
6. 結論
我們在本文中介紹了Plasticine桑阶,這是一種新型可重配架構柏副,用于有效執(zhí)行由并行模式組成的稀疏和密集應用程序。我們確定了處理稀疏和密集算法所需的關鍵計算模式蚣录,并介紹了粗粒度模式和內存計算單元割择,能夠以流水線化、矢量化的方式執(zhí)行并行模式萎河。這些單元在我們的編程模型中利用了分層并行性荔泳、局部性和內存訪問模式的信息。然后虐杯,我們基于設計空間探索指導Plasticine架構的設計玛歌,并創(chuàng)建了完整的軟硬件堆棧,將應用程序映射為中間表示擎椰,然后在Plasticine上執(zhí)行支子。實驗證明,在113的面積預算下达舒,與類似工藝技術的FPGA相比值朋,Plasticine的性能提高了95倍,每瓦性能提高了77倍巩搏。
致謝
感謝Tony Wu對本文的協(xié)助昨登,并感謝審稿人的建議。這項工作得到了DARPA合同Air Force FA8750-12-2-0335; 陸軍合同F(xiàn)A8750-14-2-0240和FA8750-12-20335; NSF資助CCF-1111943和IIS1247701的支持贯底。本文包含的觀點和結論是作者的觀點和結論篙骡,不代表DARPA或美國政府的官方政策或認可。
參考文獻
[1] Joshua Auerbach, David F. Bacon, Perry Cheng, and Rodric Rabbah. 2010. Lime: A Java-compatible and Synthesizable Language for Heterogeneous Architectures. In Proceedings of the ACM International Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA). 89–108. https://doi.org/10.1145/1869459.1869469
[2] Jonathan. Bachrach, Huy Vo, Brian Richards, Yunsup Lee, Andrew Waterman, Rimas Avizienis, John Wawrzynek, and Krste Asanovic. 2012. Chisel: Constructing hardware in a Scala embedded language. In Design Automation Conference (DAC), 2012 49th ACM/EDAC/IEEE. 1212–1221.
[3] David Bacon, Rodric Rabbah, and Sunil Shukla. 2013. FPGA Programming for the Masses. Queue 11, 2, Article 40 (Feb. 2013), 13 pages. https://doi.org/10.1145/2436696.2443836
[4] Ivo Bolsens. 2006. Programming Modern FPGAs, International Forum on Embedded Multiprocessor SoC, Keynote,. http://www.xilinx.com/univ/mpsoc2006keynote.pdf.
[5] Benton. Highsmith Calhoun, Joseph F. Ryan, Sudhanshu Khanna, Mateja Putic, and John Lach. 2010. Flexible Circuits and Architectures for Ultralow Power. Proc. IEEE 98, 2 (Feb 2010), 267–282. https://doi.org/10.1109/JPROC.2009.2037211
[6] Timothy J. Callahan, John R. Hauser, and John Wawrzynek. 2000. The Garp architecture and C compiler. Computer 33, 4 (Apr 2000), 62–69. https://doi.org/10.1109/2.839323
[7] Jared Casper and Kunle Olukotun. 2014. Hardware Acceleration of Database Operations. In Proceedings of the 2014 ACM/SIGDA International Symposium on Fieldprogrammable Gate Arrays (FPGA ’14). ACM, New York, NY, USA, 151–160. https://doi.org/10.1145/2554688.2554787
[8] Bryan Catanzaro, Michael Garland, and Kurt Keutzer. 2011. Copperhead: compiling an embedded data parallel language. In Proceedings of the 16th ACM symposium on Principles and practice of parallel programming (PPoPP). ACM, New York, NY, USA, 47–56. https://doi.org/10.1145/1941553.1941562
[9] Yunji Chen, Tao Luo, Shaoli Liu, Shijin Zhang, Liqiang He, Jia Wang, Ling Li, Tianshi Chen, Zhiwei Xu, Ninghui Sun, and Olivier Temam. 2014. DaDianNao: A MachineLearning Supercomputer. In 2014 47th Annual IEEE/ACM International Symposium on Microarchitecture. 609–622. https://doi.org/10.1109/MICRO.2014.58
[10] Yu-Hsin Chen, Tushar Krishna, Joel Emer, and Vivienne Sze. 2016. 14.5 Eyeriss: An energy-efficient reconfigurable accelerator for deep convolutional neural networks. In 2016 IEEE International Solid-State Circuits Conference (ISSCC). IEEE, 262–263.
[11] Eric S. Chung, John D. Davis, and Jaewon Lee. 2013. LINQits: Big Data on Little Clients. In Proceedings of the 40th Annual International Symposium on Computer Architecture (ISCA ’13). ACM, New York, NY, USA, 261–272. https://doi.org/10.1145/2485922.2485945
[12] Darren C. Cronquist, Chris Fisher, Miguel Figueroa, Paul Franklin, and Carl Ebeling. 1999. Architecture design of reconfigurable pipelined datapaths. In Advanced Research in VLSI, 1999. Proceedings. 20th Anniversary Conference on. 23–40. https://doi.org/10.1109/ARVLSI.1999.756035
[13] Brian Van Essen, Aaron Wood, Allan Carroll, Stephen Friedman, Robin Panda, Benjamin Ylvisaker, Carl Ebeling, and Scott Hauck. 2009. Static versus scheduled interconnect in Coarse-Grained Reconfigurable Arrays. In 2009 International Conference on Field Programmable Logic and Applications. 268–275. https://doi.org/10.1109/FPL.2009.5272293
[14] Mingyu Gao and Christos Kozyrakis. 2016. HRL: Efficient and flexible reconfigurable logic for near-data processing. In 2016 IEEE International Symposium on High Performance Computer Architecture (HPCA). 126–137. https://doi.org/10.1109/HPCA.2016.7446059
[15] Nithin George, HyoukJoong Lee, David Novo, Tiark Rompf, Kevin J. Brown, Arvind K. Sujeeth, Martin Odersky, Kunle Olukotun, and Paolo Ienne. 2014. Hardware system synthesis from Domain-Specific Languages. In Field Programmable Logic and Applications (FPL), 2014 24th International Conference on. 1–8. https://doi.org/10.1109/FPL.2014.6927454
[16] Seth Copen Goldstein, Herman Schmit, Matthew Moe, Mihai Budiu, Srihari Cadambi, R. Reed Taylor, and Ronald Laufer. 1999. PipeRench: A Co/Processor for Streaming Multimedia Acceleration. In Proceedings of the 26th Annual International Symposium on Computer Architecture (ISCA ’99). IEEE Computer Society, Washington, DC, USA, 28–39. https://doi.org/10.1145/300979.300982
[17] Venkatraman. Govindaraju, Chen-Han Ho, Tony Nowatzki, Jatin Chhugani, Nadathur Satish, Karthikeyan Sankaralingam, and Changkyu Kim. 2012. DySER: Unifying Functionality and Parallelism Specialization for Energy-Efficient Computing. IEEE Micro 32, 5 (Sept 2012), 38–51. https://doi.org/10.1109/MM.2012.51
[18] Rehan Hameed, Wajahat Qadeer, Megan Wachs, Omid Azizi, Alex Solomatnikov, Benjamin C. Lee, Stephen Richardson, Christos Kozyrakis, and Mark Horowitz. 2010. Understanding Sources of Inefficiency in General-purpose Chips. In Proceedings of the 37th Annual International Symposium on Computer Architecture (ISCA ’10). ACM, New York, NY, USA, 37–47. https://doi.org/10.1145/1815961.1815968
[19] Song Han, Xingyu Liu, Huizi Mao, Jing Pu, Ardavan Pedram, Mark A Horowitz, and William J Dally. 2016. EIE: efficient inference engine on compressed deep neural network. arXiv preprint arXiv:1602.01528 (2016).
[20] David Koeplinger, Raghu Prabhakar, Yaqi Zhang, Christina Delimitrou, Christos Kozyrakis, and Kunle Olukotun. 2016. Automatic Generation of Efficient Accelerators for Reconfigurable Hardware. In International Symposium in Computer Architecture.
[21] Ian Kuon and Jonathan Rose. 2007. Measuring the Gap Between FPGAs and ASICs. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems 26, 2 (Feb 2007), 203–215. https://doi.org/10.1109/TCAD.2006.884574
[22] Ian Kuon, Russell Tessier, and Jonathan Rose. 2008. FPGA Architecture: Survey and Challenges. Found. Trends Electron. Des. Autom. 2, 2 (Feb. 2008), 135–253. https://doi.org/10.1561/1000000005
[23] HyoukJoong Lee, Kevin J. Brown, Arvind K. Sujeeth, Tiark Rompf, and Kunle Olukotun. 2014. Locality-Aware Mapping of Nested Parallel Patterns on GPUs. In Proceedings of the 47th Annual IEEE/ACM International Symposium on Microarchitecture (IEEE Micro).
[24] Jingwen Leng, Tayler Hetherington, Ahmed ElTantawy, Syed Gilani, Nam Sung Kim, Tor M. Aamodt, and Vijay Janapa Reddi. 2013. GPUWattch: Enabling Energy Optimizations in GPGPUs. In Proceedings of the 40th Annual International Symposium on Computer Architecture (ISCA ’13). ACM, New York, NY, USA, 487–498. https://doi.org/10.1145/2485922.2485964
[25] Bingfeng Mei, Serge Vernalde, Diederik Verkest, Hugo De Man, and Rudy Lauwereins. 2003. ADRES: An Architecture with Tightly Coupled VLIW Processor and CoarseGrained Reconfigurable Matrix. Springer Berlin Heidelberg, Berlin, Heidelberg, 61–70. https://doi.org/10.1007/978-3-540-45234-8_7
[26] Mahim Mishra, Timothy J. Callahan, Tiberiu Chelcea, Girish Venkataramani, Seth C. Goldstein, and Mihai Budiu. 2006. Tartan: Evaluating Spatial Computation for Whole Program Execution. In Proceedings of the 12th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS XII). ACM, New York, NY, USA, 163–174. https://doi.org/10.1145/1168857.1168878
[27] M. Odersky. 2011. Scala. http://www.scala-lang.org. (2011).
[28] Jian Ouyang, Shiding Lin, Wei Qi, Yong Wang, Bo Yu, and Song Jiang. 2014. SDA: Software-Defined Accelerator for LargeScale DNN Systems (Hot Chips 26).
[29] Kalin Ovtcharov, Olatunji Ruwase, Joo-Young Kim, Jeremy Fowers, Karin Strauss, and Eric S. Chung. 2015. Accelerating Deep Convolutional Neural Networks Using Specialized Hardware. Technical Report. Microsoft Research. http://research-srv.microsoft.com/pubs/240715/CNN%20Whitepaper.pdf
[30] Angshuman Parashar, Michael Pellauer, Michael Adler, Bushra Ahsan, Neal Crago, Daniel Lustig, Vladimir Pavlov, Antonia Zhai, Mohit Gambhir, Aamer Jaleel, Randy Allmon, Rachid Rayess, Stephen Maresh, and Joel Emer. 2013. Triggered Instructions: A Control Paradigm for Spatially-programmed Architectures. In Proceedings of the 40th Annual International Symposium on Computer Architecture (ISCA ’13). ACM, New York, NY, USA, 142–153. https://doi.org/10.1145/2485922.2485935
[31] Ardavan Pedram, Andreas Gerstlauer, and Robert van de Geijn. 2012. On the Efficiency of Register File versus Broadcast Interconnect for Collective Communications in DataParallel Hardware Accelerators. In Proceedings of the 2012 IEEE 24th International
Symposium on Computer Architecture and High Performance Computing (SBAC-PAD). 19–26. https://doi.org/10.1109/SBAC-PAD.2012.35
[32] Ardavan Pedram, Stephen Richardson, Sameh Galal, Shahar Kvatinsky, and Mark Horowitz. 2017. Dark memory and accelerator-rich system optimization in the dark silicon era. IEEE Design & Test 34, 2 (2017), 39–50.
[33] Ardavan Pedram, Robert van de Geijn, and Andreas Gerstlauer. 2012. Codesign Tradeoffs for High-Performance, Low-Power Linear Algebra Architectures. IEEE Transactions on Computers, Special Issue on Power efficient computing 61, 12 (2012), 1724–1736.
[34] Simon Peyton Jones [editor], John Hughes [editor], Lennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Simon Fraser, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, Thomas Johnsson, Mark Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, and Philip Wadler. 1999. Haskell 98 — A Nonstrict, Purely Functional Language. Available from http://www.haskell.org/definition/.(feb 1999).
[35] Kara K. W. Poon, Steven J. E. Wilton, and Andy Yan. 2005. A Detailed Power Model for Field-programmable Gate Arrays. ACM Trans. Des. Autom. Electron. Syst. 10, 2 (April 2005), 279–302. https://doi.org/10.1145/1059876.1059881
[36] Raghu Prabhakar, David Koeplinger, Kevin J. Brown, HyoukJoong Lee, Christopher De Sa, Christos Kozyrakis, and Kunle Olukotun. 2016. Generating Configurable Hardware from Parallel Patterns. In Proceedings of the Twenty-First International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS ’16). ACM, New York, NY, USA, 651–665. https://doi.org/10.1145/2872362.2872415
[37] Andrew Putnam, Adrian M. Caulfield, Eric S. Chung, Derek Chiou, Kypros Constantinides, John Demme, Hadi Esmaeilzadeh, Jeremy Fowers, Gopi Prashanth Gopal, Jan Gray, Michael Haselman, Scott Hauck, Stephen Heil, Amir Hormati, Joo-Young Kim, Sitaram Lanka, James Larus, Eric Peterson, Simon Pope, Aaron Smith, Jason Thong, Phillip Yi Xiao, and Doug Burger. 2014. A Reconfigurable Fabric for Accelerating Large-scale Datacenter Services. In Proceeding of the 41st Annual International Symposium on Computer Architecuture (ISCA ’14). IEEE Press, Piscataway, NJ, USA, 13–24. http://dl.acm.org/citation.cfm?id=2665671.2665678
[38] Jonathan Ragan-Kelley, Connelly Barnes, Andrew Adams, Sylvain Paris, Frédo Durand, and Saman Amarasinghe. 2013. Halide: A Language and Compiler for Optimizing Parallelism, Locality, and Recomputation in Image Processing Pipelines. In Proceedings of the 34th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI ’13). ACM, New York, NY, USA, 519–530. https://doi.org/10.1145/2491956.2462176
[39] Paul Rosenfeld, Elliott Cooper-Balis, and Bruce Jacob. 2011. DRAMSim2: A Cycle Accurate Memory System Simulator. IEEE Computer Architecture Letters 10, 1 (Jan 2011), 16–19. https://doi.org/10.1109/L-CA.2011.4
[40] Arvind K. Sujeeth, Kevin J. Brown, HyoukJoong Lee, Tiark Rompf, Hassan Chafi, Martin Odersky, and Kunle Olukotun. 2014. Delite: A Compiler Architecture for Performance-Oriented Embedded Domain-Specific Languages. In TECS’14: ACM Transactions on Embedded Computing Systems.
[41] Arvind K. Sujeeth, Tiark Rompf, Kevin J. Brown, HyoukJoong Lee, Hassan Chafi, Victoria Popic, Michael Wu, Aleksander Prokopec, Vojin Jovanovic, Martin Odersky, and Kunle Olukotun. 2013. Composition and Reuse with Compiled Domain-Specific Languages. In European Conference on Object Oriented Programming (ECOOP).
[42] Michael Bedford Taylor, Jason Kim, Jason Miller, David Wentzlaff, Fae Ghodrat, Ben Greenwald, Henry Hoffman, Paul Johnson, Jae-Wook Lee, Walter Lee, Albert Ma, Arvind Saraf, Mark Seneski, Nathan Shnidman, Volker Strumpen, Matt Frank, Saman Amarasinghe, and Anant Agarwal. 2002. The Raw Microprocessor: A Computational Fabric for Software Circuits and General-Purpose Programs. IEEE Micro 22, 2 (March 2002), 25–35. https://doi.org/10.1109/MM.2002.997877
[43] Dani Voitsechov and Yoav Etsion. 2014. Single-graph Multiple Flows: Energy Efficient Design Alternative for GPGPUs. In Proceeding of the 41st Annual International Symposium on Computer Architecuture (ISCA ’14). IEEE Press, Piscataway, NJ, USA, 205–216. http://dl.acm.org/citation.cfm?id=2665671.2665703
[44] Lisa Wu, Andrea Lottarini, Timothy K. Paine, Martha A. Kim, and Kenneth A. Ross. 2014. Q100: The Architecture and Design of a Database Processing Unit. In Proceedings of the 19th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS ’14). ACM, New York, NY, USA, 255–268. https://doi.org/10.1145/2541940.2541961
你好丈甸,我是俞凡糯俗,在Motorola做過研發(fā),現(xiàn)在在Mavenir做技術工作睦擂,對通信得湘、網(wǎng)絡、后端架構顿仇、云原生淘正、DevOps摆马、CICD、區(qū)塊鏈鸿吆、AI等技術始終保持著濃厚的興趣囤采,平時喜歡閱讀、思考惩淳,相信持續(xù)學習蕉毯、終身成長,歡迎一起交流學習思犁。
微信公眾號:DeepNoMind