(?ω?)hiahiahia 標(biāo)題黨誰不會
早上刷手機(jī)剛好看到winnie姐姐轉(zhuǎn)發(fā)upmem的內(nèi)容,,對這個(gè)東西還算蠻熟,,中秋月圓,借機(jī)剛一波,。
in memory computing,,簡稱PIM。
首先需要明確一下near memory computing和in memory computing的定義,,這事我和業(yè)界灌水王onur mutlu吃飯還剛過一波,,結(jié)論是:真理掌握在英語表達(dá)能力范圍內(nèi)。
很多時(shí)候這是一個(gè)參照系問題,,如果嚴(yán)格要以in為前綴,,只有把memory cell本體對信號的模擬特性的變化用于計(jì)算才是真正的in,在cell旁邊加MAC都不能算,,這就很苛刻了,,業(yè)界除了AI有一些其他都只能算near。
實(shí)際上這某些時(shí)候是視角問題,,站在CPU的角度,,內(nèi)存條上的運(yùn)算都是in memory,哪管那么多,。如果按照DIE的緯度來看,,HBM包含了多層DRAM和一層logic,PIM通常會把計(jì)算邏輯放在logic層,,設(shè)計(jì)上也是near但從CPU角度看也是in memory,。UPMEM其實(shí)只是更進(jìn)一步,把邏輯直接放到了DRAM工藝上,,最靠近CELL ARRAY的位置,。算IN還是算NEAR呢,?
而我的定義是:只有將原本MEM器件的bandwidth具有展寬機(jī)制的才算in-memoy,。舉例說,在HBM2帶寬256GB,,在logic DIE做計(jì)算如果還是按照HBM原本接口結(jié)構(gòu)用到256GB帶寬,,那么還是near,如果打破了DRAM DIE原本結(jié)構(gòu)和接口,,引入更多TSV擴(kuò)大了帶寬,,那么這就是in-memory了。UPMEM把計(jì)算單元放到了DRAM 每個(gè)CHIP內(nèi),,比DIMM條原本DDR接口獲得了更大帶寬,,我的認(rèn)定是屬于in-memoy computing!
定義完成了,,講騙人<(`^?)>
事件任何技術(shù)都是有損益的,,業(yè)界的PIM看上去除了技術(shù)難度沒啥損失,,那這么好的東西為啥沒大量商用呢?
PIM最大的障礙是memory interleave,,所有PIM的議題,,如果在內(nèi)存交織上避而不談的,都?xì)w入騙子,,簡單直接,。
一個(gè)大SOC系統(tǒng),內(nèi)存都不是單一的,,以DDR4-3200為例,,一根DIMM條的帶寬是25GB,那么全芯片的總帶寬200GB是8個(gè)channel交織達(dá)成的,。這是為了保證最大帶寬效率,,以及系統(tǒng)在多核下的共享。以INTEL為例,,多個(gè)channel的地址是按照256B為粒度交織的,,即4KB的數(shù)據(jù)會拆分成16份,每個(gè)DDR channel得2份,,其中為了保證系統(tǒng)地址更加均勻,,交織還會引入更高位地址打亂,即16份中的第0份并不會固定在channel-0,。
所以,,每個(gè)DIMM只能拿到連續(xù)數(shù)據(jù)的一部分,并且對于交織算法的不感知,,DIMM甚至無法知道自己拿到了數(shù)據(jù)的什么部分,。
絕大多數(shù)的應(yīng)用,都會涉及到數(shù)據(jù)的連續(xù)性,,例如SORT,,是不能只對部分?jǐn)?shù)據(jù)進(jìn)行computing的。
所以,,市面上的PIM都有一個(gè)潛臺詞是去掉interleave,,但是為了表現(xiàn)PIM的先進(jìn)性,在性能比較時(shí),,PIM都是忽略interleave,,直接和一個(gè)巨大的無需交織的單個(gè)memory比較,而這樣的memory并不存在,。
如果系統(tǒng)去掉interleave,,DDR CHANNEL就需要按照核分組或者業(yè)務(wù)分組來分配channel,按照操作系統(tǒng)理論,,實(shí)際上需要引入額外的NUMA分層,,這個(gè)損失在某些業(yè)務(wù)下是很悲慘的,。所以,任何PIM的方案吹噓,,如果不敢直面interleave的問題,,堂堂正正講出來其性能收益大于去掉interleave的損傷,都是騙人的,。
綜述:在大型SOC系統(tǒng)中,,CPU是分布式的,memory也是分布式的,,總線互聯(lián)把兩者聯(lián)和在一起,,通常無法找到一個(gè)公共點(diǎn)能高效解決問題。
以UPMEM為例,,為了使能其功能,,就需要把某特定業(yè)務(wù)的數(shù)據(jù)放到一根DIMM,假設(shè)系統(tǒng)是8通道交織200GB,,先不考慮CACHE一致性的損傷(PIM加速的數(shù)據(jù)需要FLUSH到內(nèi)存),,那這個(gè)單一業(yè)務(wù)去交織后就只能得到1/8的25GB帶寬了,等價(jià)于使能PIM后至少需要獲得大于8倍帶寬的收益才是賺的,,算一算,,很難噢。當(dāng)然這樣比較也不是特別合適,,如果有8個(gè)同構(gòu),,size恰當(dāng),時(shí)間上并行度也很好業(yè)務(wù),,并不會帶寬受損,。
額外一說,UPMEM的方案是DIMM結(jié)構(gòu),,其DIMM上包含了8顆獨(dú)立的DRAM芯片,,每一顆都只有1/8的容量、帶寬和計(jì)算能力,,業(yè)務(wù)數(shù)據(jù)依舊可能分割放在了多課DRAM芯片內(nèi),。UPMEM亦需要額外的DRAM芯片間的通信才能完成一個(gè)完整的運(yùn)算,。