很多網(wǎng)絡相關的論文第一句通常是由于網(wǎng)卡buffer有限,所以xxxx,本文對buffer做了xxxx 但是為什么不直接在網(wǎng)卡上把Buffer變成內(nèi)存呢?然而人們又會走入另一個誤區(qū),大buffer會帶來大延遲,大延遲會帶來低吞吐。
同樣對比顯卡上的顯存,它出現(xiàn)了幾十年了,所以我們先來回顧一下顯存的發(fā)展史,如果顯存是一個buffer結(jié)構(gòu),也就不會誕生GPU、同樣也不會誕生CUDA了,然后就會非常清晰看到NetDAM賦予網(wǎng)卡內(nèi)存的價值,等同于再造一個CUDA,當然這一次nVidia不會像GPU那么幸運,DoCA也不會那么簡單的一統(tǒng)江湖,因為RDMA本身的生態(tài)會成為他們的絆腳石。
GPU和顯存的歷史
2D時代,固定流水線,顯存更多以buffer形態(tài)提供
早期的計算機通常是以紙帶的形式提供交互。陰極射線管(Cathode Ray Tube,CRT)的發(fā)明才帶來了早期的顯示器技術
1960~1970年有了一些實驗性質(zhì)的顯示器被發(fā)明出來,而真正的商用大概可以算到1971年的DataPoint 2200和1976年的Apple I,油管上有一段視頻[1]
可以看到這個時期的電腦還是沒有單獨的顯卡和顯存的概念的,而顯存本身的實現(xiàn)也只是一個移位寄存器的結(jié)構(gòu)。wiki上有這段歷史[2]的介紹.
真正的第一塊顯卡可能要從IBM1981年發(fā)布的PC說起,IBM做了一款叫做Monochrome Display Adapter[3]的設備,基于ISA總線,然后內(nèi)涵一個Motorola 6845的顯示控制器和一個4kB的內(nèi)存。顯示接口還是DB9接口
然后可以通過一個硬件實現(xiàn)的碼表(Code page 437)來實現(xiàn)數(shù)字信號到像素渲染的轉(zhuǎn)換過程,這塊卡還很有趣的支持了打印機輸出的功能,可以看到當時的I/O設計思維還是一個逐漸從紙質(zhì)介質(zhì)遷移到電子顯示的過程,只不過還是以字符為主,然后便是CRT顯示器分辨率逐漸提升,同時彩色顯像管技術的逐漸普及而帶來的I/O帶寬提升 2.png
當然伴隨著彩色顯示器的使用,VGA接口也誕生了,三原色的各自輸出信號配合VS、HS水平、垂直掃描同步信號可以非常簡單的去控制陰極射線管偏轉(zhuǎn)。而那時顯存的形態(tài)還是以Frame Buffer的形式存在的,通常前面還有一個SRAM配合DSP進行模擬輸出轉(zhuǎn)換的器件(RAMDAC,Random Access Memory Digital-to-Analog Converter).
顯示技術的進步也為彩色圖形化界面的操作系統(tǒng)誕生提供了必要條件,伴隨著1985年Windows 1.0系統(tǒng)的發(fā)布,1987年成立的Trident和1989年成立的S3逐漸成了2D顯卡的王者。而顯存本身也逐漸出現(xiàn)了技術的融合,從專有的雙端口DRAM結(jié)構(gòu)也逐漸的換成了同時期的內(nèi)存顆粒,例如EDO、到后期的SDRAM、DDR
3D時代,DirectX和OpenGL使得顯卡可編程了
1995年,3Dfx發(fā)布了第一塊Voodoo顯卡,算是將整個計算機圖形業(yè)帶入了3D時代:
這也是從傳統(tǒng)的Frame-Buffer Memory到了一個可以計算的像素內(nèi)存的轉(zhuǎn)變過程
軟硬件的融合也伴隨著Windows95的發(fā)布出現(xiàn)了DirectX以及后期的OpenGL這樣的2D、3D矢量圖形渲染的API接口。而那一年nVidia也發(fā)布頗為成功的Riva 128,以及后續(xù)逐漸登上王者寶座的TNT,那一年Intel也還生產(chǎn)一個叫i740的顯卡。只是一晃20多年過去了,2022年這場nVidia vs ATI(AMD) vs Intel的戰(zhàn)爭又悄然打響了。
而這個年代伴隨著更為靈活和可編程的像素著色引擎和頂點著色引擎,使得計算機3D圖形顯示能力快速增長,新的算法也層出不窮。
但是這個階段的圖像處理還是有很明顯的pipeline的特征:
GP-GPU年代,CUDA誕生
對于傳統(tǒng)的顯存操作,下面這本書有一段講的非常清楚:
面對內(nèi)存的一致性問題,一個架構(gòu)師必須要在這個時候針對實現(xiàn)者和用戶之間的沖突進行最優(yōu)的權(quán)衡。而這樣的權(quán)衡便是GP-GPU的誕生。顯卡內(nèi)出現(xiàn)了相應的指令集、ALU、Cache的架構(gòu):
而與之對應的CUDA也就順理成章的誕生了,潘多拉的墨盒就此打開。
DPU及NetDAM網(wǎng)卡內(nèi)存
回顧了整個GPU和顯存的發(fā)展史,從buffer到pipeline的處理再到靈活的基于CUDA的可編程,顯存的形態(tài)也伴隨著GPU架構(gòu)的變革產(chǎn)生了很多深遠的影響。再來看看DPU的場景,只是比顯卡可能更加復雜一些,因為GPU的誕生和數(shù)據(jù)密集性發(fā)生在終端,例如DisplayPort的帶寬遠高于現(xiàn)在很多PC的網(wǎng)絡帶寬。
而網(wǎng)絡的密集處理則最早發(fā)生于核心網(wǎng)上的網(wǎng)絡處理器(NP),網(wǎng)絡處理器也逐漸的經(jīng)歷了前述的進程,也曾因為I/O密集度的問題,采用過流水線的架構(gòu),并且深遠的影響到了現(xiàn)代。同樣也因為流水線架構(gòu)內(nèi)存訪問的困難出現(xiàn)的各種多核并行計算的NP。而這些NP玩家現(xiàn)在又逐漸入局到DPU的產(chǎn)業(yè)中。
而如今這個年代和1997年的GPU很像,固定的流水線處理,網(wǎng)卡上的內(nèi)存更多的是以Buffer只讀形態(tài)交付,可編程的難題依舊存在。而RDMA和當年的OpenGL更有幾分形似,缺少更多靈活的可編程性。DPU也亟待像GTX9800那樣使用ISA和ALU打開整個GP-GPU潘多拉魔盒的產(chǎn)品。
渣仰望nVidia這樣的大廠,但是并不是很看得起Mellanox,RDMA會如同當年的Glide 3D拖死3Dfx那樣給Mellanox帶來大量的麻煩,IB雖然非常賺錢但是生態(tài)并不好。有些時候生態(tài)的變革要拋棄自己的過往,平滑的走向新世界。
RDMA的API本質(zhì)上還是以內(nèi)存操作為中心,對于存內(nèi)計算等場景還缺少太多的支持 而后續(xù)雖然有DoCA,只是笑笑而已,ARM多核這樣的RTC系統(tǒng)對于網(wǎng)絡處理還是太重了,核太大并不是好事情,很多東西并不一定需要,而Tenstorrent則干的非常干凈:
這也是我們很多年前設計Cisco QuantumFlow處理器總結(jié)的經(jīng)驗
因此,把通用指令集引入網(wǎng)卡,在固化的pipeline和完全靈活的RTC之間尋求平衡,并且整合存內(nèi)計算的能力,例如帶有Samsung PIM-HBM的ASIC便成為DPU破局的關鍵。
NetDAM深遠的意義,如同當年的GTX8800+CUDA, 或許在它出生之年你并看不懂它,因為你還在RTC和Pipeline以及RDMA怎么處理的泥潭里糾纏。
但當你看完整個GPU、顯存的發(fā)展歷程,你就會明白我說的是對的了,唯一的選擇只是要么一起當壓路機,要不被后人慢慢碾壓。
Reference
[1]Apple I working Demo:
https://www.youtube.com/watch?v=4l8i_xOBTPg
[2]home computers by video hardware:
https://en.wikipedia.org/wiki/List_of_home_computers_by_video_hardware
[3]IBM Monochrome DIsplay Adapter:
https://en.wikipedia.org/wiki/IBM_Monochrome_Display_Adapter
原文鏈接:https://mp.weixin.qq.com/s/77P_enViPCetzKGy7DCx7Q