Re: [討論] GPU加速Transistor層的模擬器

看板Soft_Job (軟體人)作者 (彎曲屎殼郎)時間5年前 (2021/01/03 03:44), 編輯推噓13(130101)
留言114則, 9人參與, 5年前最新討論串4/5 (看更多)
感謝你提供的網站http://www.visual6502.org 這提供非常多的訊息與實作的細節,也讓我有機會能更理解你的想法 我先稱它為virtual chip來做區別。 我看了FAQ與slide,裡面大致就回答這群作者能做到什麼程度, 我把我認為重要的條件列在下面: - if it has only one or two metal layers and was made before about 1985 - Before ~1980, chip design was a very manual process - MOS 6502: there are "3510" trnsistors - The simulator is running an idealized "digital" circuit based on our model of the chip's network of transistors and wires. - It does not account for "analog" behavior (resistance, capacitance, leakage), has no propagation delays, and transistors switch on and off instantaneously. 綜上所述,我覺得你會混用transister-level與gate-level真的不能怪你 因為這真的是時空背景不同,但照歷史脈絡來看也能稍微理解為什麼 TSMC/UMC晶圓代工與EDA產業的興起了:因為製程發展與電晶體數量大增 那如果你要照這群作者的方法做逆向工程在現今的晶片可行嗎? 我覺得人眼要識別現今的polygon(網頁所用的詞)及連接,可能要有寫輪眼 不過我layout學得很差,也許真的有能人可以做到,但那個數量級太大了 這網頁有提到他們想要自動化但是失敗(How did automatic vectorization fail?) 所以我推論目前人必須很大程度參與到這逆向工程中。 對這我有個想法,這個project是在2010左右的成果,而CNN(卷積神經網路)在 ImageNet 2012比賽取得壓倒性的勝利,時至今日computer vision已經很成功了 也許在這部分,CNN可以做到很好,然後把比較難辨識的再交給人類來做 可是呢,這又會需要foundry廠的know how了,因為你需要訓練用的資料與標籤 所以你想繼續這條路,我給的建議是看看有沒有人在做半導體的computer vision。 我知道S家有在做P&R的那方面的,也許C家做更多 然後拿他們的模型來做逆向工程並請專家幫你做最後的驗證 之後的工作基本都可以用程式來解決了 至於有無法律問題就看看有沒有人在你寫程式時來查水表了XD 我寫到這,我大概也能理解為什麼沒人做virtual chip emulator了 如果chip簡單人類可能還可以做,但是現在的chip真的太大太複雜了 還有3D IC這種多一個維度的,加上公司求快。除非是要偷設計, 不然成本太高了太不經濟了。 希望能給你一些幫助。 ※ 引述《expiate (彎曲屎殼郎)》之銘言: : 我有把你下面推文的兩個連結看了以確定我盡量能理解你的目的。 : 文中你提到transistor-level與邏輯閘層(gate-level)模擬, : 這兩個用詞在你的語境下所代表的意思有點模糊, : 我用我的理解以及上篇crossbar的觀點來定義一下: : - transistor-level: : 我認為你指的是電晶體電路,也就是layout或是spice : 模擬用來跑電氣特性,像是增益,匹配或是SNR : 裡面的基本元素就是半導體的材料物理模型(非我專長請專家補充) : - gate-level: : 邏輯閘電路,我這邊理解的話就會指cell-based design : 裡面的電路表示會由boolean operator或是更複雜的像是 : AOI (And-Or-Inverter),基本上世界上的IC design house : 的design flow主要都是走這條。 : /*** 我假設你有unlimited resources,要多快有多快的CPU,GPU和memory ***/ : 然後我只就數位電路作為我的目標,類比電路我是覺得更難就不深入了 : 基本上transistor-level的模擬我覺得要行得通,必須半導體物理材料模型要準 : 以及RC (resistance capacitance) model要準。也就是內部電氣特性與外部 : routing的特性都要有準確的模型去計算才有可能實現。 : 如果你只是對於前幾代製程的產品,我猜也許會有已經很成熟及準確的模型可以使用 : 但我很懷疑是否有公開的資訊你可以拿到,因為基本上這都是foundry的know how。 : 也許學校有資源可以讓你接觸,或是真的有很老亦或教學的的模型供你使用 : 假設你有了,其實就是把transistor-level的電路用這些模型表示 : 然後把彼此的輸入/輸出 接好跑模擬即可。最後在針對電氣數值判斷0/1 : 這是我覺得最困難的部分,完成後就都是0/1世界了。 : Gate-level的模擬跟對應的library有很深的相依性,也就是foundary所提供。 : 而且所需的電氣特性都包含在每個cell裡的table,所以像是slack或是slew : 都可以快速查表得知。而EDA公司提供的sign-off product就是保證他們的驗證 : 結果跟foundry廠生產出來的晶片會是一樣的。 : 這就間接的指出其實可以透過gate-level模擬來實現你的目標。 : 然後這也是為什麼FPGA會作為驗證工具的原因。只要在FPGA功能驗證完成, : 剩下的就是跑flow然後tapeout,不用太擔心會不一樣。而且跟模擬比起來快太多了 : 你可以試試用VCS或是NCVerilog跑個一百萬cycle就可以感覺為什麼唯快不破了 : 通常IC design house在tapeout之前都可以估自己只能跑幾次模擬。 : 也就是說bug或是timing issue如果不能在這幾次模擬中解決就等著被X吧 : 以上是我覺得可以實現你目標的方法,如果真的能reverse回來的話。 : 下面是我覺得為什麼GPU無法幫助太多的理由。 : 就我所知,目前沒有EDA公司的產品裡有使用GPU做加速,也許有功能但可能賣不出去XD : 大部分都還是仰賴CPU及memory作為計算的主力。 : 這是因為GPU主要的計算典範是SIMD (Single Instruction Multiple Data)。 : 拿現今最流行的深度學習做例子,訓練的步驟很明確feedforward,backpropagation : 底下的計算主要都是矩陣運算,只是每次要做運算的data不一樣。 : 回過頭看gate-level電路模擬,如果把電路看成神經網路不也可以用GPU加速? : 嗯其實GPU加速電路模擬真的是很容易想到,cuda已經出來十幾年了,所以我想 : 肯定有人嘗試但是沒成功或是效果不如預期。這也是大家噴這麼凶的原因。 : 不過我覺得大家太嚴苛了,難得有人正經問問題其實可以多點耐心分享所學的。 : 所以問題就該是為什麼GPU不能像神經網路一樣很好地加速電路模擬? : 我個人思考的結果是:大部分的電路模擬不是線性的 : 我的思路是把combinational logic電路當作是神經網路, : 而暫存器就是神經網路的layer。我能用矩陣來表示combinational logic嗎? : 我覺得光是處理gate個數與gate該在矩陣哪個位置我就覺得不好處理 : 當然你可能有別的思路,可是本質上你還是會受限於GPU計算的本質: : 不擅長做複雜(heavy control dependency)的計算。 : 這也是我覺的目前EDA公司還是以cpu為主要算力的原因。 : 如果你有興趣,你可以試著朝high performance computing/parallel computing : 做更深入的理解。 : 最後,我只是拋磚引玉吸引炮火。 : 大家不要為難原po,我其實很欣賞這樣願意花時間苦幹的人了 : 所以歡迎大家來噴我吧!最好發戰文,大家一起學習! : 也期許原po日後有什麼進展歡迎分享給大家。 : ※ 引述《erspicu (.)》之銘言: : : 不想走冤枉路.... 雖然有找過資料 : : 但找到的資料似乎是一些大學教授和硬體大廠的研界成果發表 論文也有 : : 感覺有很高的技術門檻 門檻高就算了 主要是怕結果實際上也沒如同想像中好 : : 想問看看有沒有已經走過這條路了 不知道通不通或是值不值得 : : 模擬器最傳統的做法是cpu指令層的模擬 這種模擬方式好實作 : : 但正確度要拉高到一個水準 就需要很高代價 : : 尤其是cycle accurate的模擬問題 : : 要100%正確 就要層邏輯閘層去模擬運算結果 : : 但邏輯閘層運算量遠大於指令模擬 主要是因為邏輯閘層運算都是同時間平行的 : : 這種特性很適合GPU 如果像是紅白機MOS 6502的話邏輯閘數大概有4千5百多 : : 目前看到用一般cpu去計算邏輯閘模擬計算 非常多秒才能算出一張frame : : 用指令集模擬的方式 每一秒可以算出好幾百張frame 差異非常巨大 : : 不知道用gpu來模擬FPGA那種陣列 先不提有沒有商用價值 : : 效率能不能提升到實用價值 不知道有沒有人公司剛好有做過這研究 : : 之前移植專案做到一半 想研究一下改用GPU平行處理來處理邏輯閘模擬 : : 寫一寫 還沒到改寫的部分 還在JS PORTING到C#的階段就丟著 : : 如過是死路 就算了 : : PS.我的理想是靠GPU模擬一張FPGA 拆晶片用放大鏡把內部邏輯描繪出來 : : 然後燒到FPGA上 有一些骨灰迷是有在做這事情 : : 像這網站 http://www.visual6502.org : : 但目前還沒看到靠GPU模擬FPGA 把電路燒進去的 : : 現在還在移植 http://www.visual6502.org/JSSim/index.html 到C#版本 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.207.101.195 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1609616648.A.04A.html

01/03 04:28, 5年前 , 1F
其實用簡單數學算一下放下電路RAM大小就知道可行性了
01/03 04:28, 1F

01/03 10:22, 5年前 , 2F
分析得很透徹
01/03 10:22, 2F

01/03 11:34, 5年前 , 3F
這種拆磨晶片靠顯微鏡或是放大鏡看內部電路去描繪的事情
01/03 11:34, 3F

01/03 11:35, 5年前 , 4F
常理推斷只適合骨灰級的一些晶片 也不是我感興趣的事情
01/03 11:35, 4F

01/03 11:35, 5年前 , 5F
我目前在做的只是把這網站的專案從JS版移植到C#
01/03 11:35, 5F

01/03 11:36, 5年前 , 6F
內部邏輯閘.相連定義.接腳 他們都完全整理好了
01/03 11:36, 6F

01/03 11:37, 5年前 , 7F
可能是因為工作領域習慣性去預設的目的設想不同
01/03 11:37, 7F

01/03 11:38, 5年前 , 8F
即使我不只一次提及 只是一個在電腦上能夠更精確的紅白機
01/03 11:38, 8F

01/03 11:39, 5年前 , 9F
模擬器.. 還是有許多人會做發散式假設
01/03 11:39, 9F

01/03 11:44, 5年前 , 10F
js版的速度可以算到大概10"Hz" 非常慢
01/03 11:44, 10F

01/03 11:46, 5年前 , 11F
有人用C++改寫優化後到達10000Hz 但還是太慢實機是3.5Mhz
01/03 11:46, 11F

01/03 11:47, 5年前 , 12F
看CODE內容初步來看主要是FOR迴圈處理一些陣列資料
01/03 11:47, 12F

01/03 11:49, 5年前 , 13F
以前有用過GPU處理影像 有前後次序性相依關係的
01/03 11:49, 13F

01/03 11:52, 5年前 , 14F
都會出問題 如果沒有這層問題 基本上就是把FOR迴圈改用
01/03 11:52, 14F

01/03 11:52, 5年前 , 15F
parallel的方式去跑就有加速效果 但能不能拉到3.5Mhz
01/03 11:52, 15F

01/03 11:54, 5年前 , 16F
這我就不太清楚..
01/03 11:54, 16F

01/03 11:55, 5年前 , 17F
我想別人的推文你都沒看懂 你只是一直在講你的想法
01/03 11:55, 17F

01/03 11:55, 5年前 , 18F
是很不錯的想法 加油呦~~~~好棒棒捏~
01/03 11:55, 18F

01/03 11:56, 5年前 , 19F
你也只是拿別人的c++來優化 看來你也不一定知道問題
01/03 11:56, 19F

01/03 11:57, 5年前 , 20F
在那裡 另外gpu如果可以就這樣scale上去真的就是太
01/03 11:57, 20F

01/03 11:58, 5年前 , 21F
美好了 至於到底gate-level simulation 在解什麼我
01/03 11:58, 21F

01/03 11:59, 5年前 , 22F
猜你也不在意吧
01/03 11:59, 22F

01/03 11:59, 5年前 , 23F
可以避開前後相依次序性關係問題的話 多核就可以加速
01/03 11:59, 23F

01/03 12:00, 5年前 , 24F
...........你以為只有你知道 ?
01/03 12:00, 24F

01/03 12:01, 5年前 , 25F
你以為電路就不是要靠上一級輸入來做
01/03 12:01, 25F

01/03 12:01, 5年前 , 26F
然後這篇花很多篇幅在寫磨開晶片後的程式辨識 問題是
01/03 12:01, 26F

01/03 12:01, 5年前 , 27F
你天真以為業界沒人知道沒人想過 沒人試過?
01/03 12:01, 27F

01/03 12:01, 5年前 , 28F
這個就不是我要做的事情 人家晶片內部定義檔都整個都幫你
01/03 12:01, 28F

01/03 12:01, 5年前 , 29F
這篇沒有抓到原po的點,但是原po的推文也是...
01/03 12:01, 29F

01/03 12:02, 5年前 , 30F
輸出整理好好的了... 而且這種方式本來就只適合骨灰產品
01/03 12:02, 30F

01/03 12:02, 5年前 , 31F
也不是我寫得啊 文主只是也就....他肯定是懂得人
01/03 12:02, 31F

01/03 12:02, 5年前 , 32F
我第一個推文就告訴你了 你用數學算算就知道多快了
01/03 12:02, 32F

01/03 12:04, 5年前 , 33F
gate數可以推出data量&使用memory量 套上GPU硬體
01/03 12:04, 33F

01/03 12:05, 5年前 , 34F
能力 還有你要計算的東西 就算是完美的平行運算
01/03 12:05, 34F

01/03 12:07, 5年前 , 35F
你等於是一個原來的指令集 在一顆2GHz cpu上要跑2M
01/03 12:07, 35F

01/03 12:07, 5年前 , 36F
你只有1000cycles可以解
01/03 12:07, 36F

01/03 12:08, 5年前 , 37F
你說要做gate-level simulation 你可以自己看看有多
01/03 12:08, 37F

01/03 12:09, 5年前 , 38F
少層要做 (每一層最少要1cycle) gate->gate就是一層
01/03 12:09, 38F

01/03 12:10, 5年前 , 39F
其他的運算 搬資料的耗損什麼我就不說了
01/03 12:10, 39F
還有 35 則推文
01/03 12:52, 5年前 , 75F
不要說我沒啥建樹 你可以考慮看看用tensor core的方
01/03 12:52, 75F

01/03 12:53, 5年前 , 76F
解解看logic array 說不定可以呢 不過這個做法我沒
01/03 12:53, 76F

01/03 12:53, 5年前 , 77F
很仔細思考過 但我想這應該是少數還沒試過的方法
01/03 12:53, 77F

01/03 13:15, 5年前 , 78F
目前IC設計的流程是 C model(optional)-> RTL ->
01/03 13:15, 78F

01/03 13:15, 5年前 , 79F
Gate level . 轉換之間都會作等效檢查。 如果覺得g
01/03 13:15, 79F

01/03 13:15, 5年前 , 80F
atelevel 太慢,可以考慮 反向回RTL, 這樣估計可以
01/03 13:15, 80F

01/03 13:15, 5年前 , 81F
快2-3個數量級.
01/03 13:15, 81F

01/03 13:18, 5年前 , 82F
他就不要啊XD
01/03 13:18, 82F

01/03 13:30, 5年前 , 83F
對牛彈琴 浪費時間啊
01/03 13:30, 83F

01/03 13:38, 5年前 , 84F
一直都在說這顆骨灰級6502 哪來的c model RTL 不需要一
01/03 13:38, 84F

01/03 13:38, 5年前 , 85F
直擴大命題假設
01/03 13:38, 85F

01/03 13:45, 5年前 , 86F
已經有C++source的話也許可以先試試加OpenMP pragma看
01/03 13:45, 86F

01/03 13:45, 5年前 , 87F
能不能加速
01/03 13:45, 87F

01/03 13:49, 5年前 , 88F
專案移植完 會看看有沒有順序性相依關係,能處理掉的話再
01/03 13:49, 88F

01/03 13:49, 5年前 , 89F
看看怎麼做
01/03 13:49, 89F

01/03 13:50, 5年前 , 90F
能不能達到實機速度也無所謂 反正試試看
01/03 13:50, 90F

01/03 13:52, 5年前 , 91F
這顆已經是1975年的東西 3.4k邏輯閘數的老晶片了
01/03 13:52, 91F

01/03 13:56, 5年前 , 92F
openmp也有上限啦@_@~ 不過他原來說要放gpu啊
01/03 13:56, 92F

01/03 13:57, 5年前 , 93F
不然放3990X 寫得好的快個幾十倍可能還是有的
01/03 13:57, 93F

01/03 14:20, 5年前 , 94F
(Synopsys VCS) In heterogeneous environments where
01/03 14:20, 94F

01/03 14:20, 5年前 , 95F
a mix of processors, GPUs and hybrid architectures a
01/03 14:20, 95F

01/03 14:20, 5年前 , 96F
re available, Cheetah technology can speed-up simulat
01/03 14:20, 96F

01/03 14:20, 5年前 , 97F
ion by up to 5X on RTL and up to 30X on gate-level de
01/03 14:20, 97F

01/03 14:20, 5年前 , 98F
signs.
01/03 14:20, 98F

01/03 15:36, 5年前 , 99F
你所謂的更精確卻不用去考慮模型精確反而是加速部分?
01/03 15:36, 99F

01/03 15:37, 5年前 , 100F
所以你到底是要做加速還是要更精確的模擬啊?
01/03 15:37, 100F

01/03 15:38, 5年前 , 101F
用GPU要怎麼達到你所謂的更精確?我好像更不理解了
01/03 15:38, 101F

01/03 15:42, 5年前 , 102F
拿如果是加速,最早的FPGA不就是最好的解嗎?
01/03 15:42, 102F

01/03 15:42, 5年前 , 103F
gate cout才3000多,寫Verilog也很快啊
01/03 15:42, 103F

01/03 15:50, 5年前 , 104F
還是你就是要加速人家寫好的code而已?
01/03 15:50, 104F

01/03 16:14, 5年前 , 105F
他想在電腦上讓一群情懷黨模擬晶片打紅白機吧
01/03 16:14, 105F

01/03 16:26, 5年前 , 106F
所以問題應該就是該怎麼寫 cuda kernel來跑MOS 6502的循
01/03 16:26, 106F

01/03 16:26, 5年前 , 107F
序電路模擬,使其加速350倍對吧?
01/03 16:26, 107F

01/03 17:11, 5年前 , 108F
差不多是這意思而已
01/03 17:11, 108F

01/03 18:47, 5年前 , 109F
@GameGyu. 不管是S家的cheetah或C家的rocketsim, 用GPU
01/03 18:47, 109F

01/03 18:48, 5年前 , 110F
加速都只能跑特定設計, 無法大規模採用, 原因和我先前推
01/03 18:48, 110F

01/03 18:48, 5年前 , 111F
文的內容有關. 當然兩家都有想些新點子, 不過很難.
01/03 18:48, 111F

01/04 01:33, 5年前 , 112F
ex大 你得到他了 xd
01/04 01:33, 112F

01/05 18:10, 5年前 , 113F
GPU本來就很難做他原本功能以外的事啊
01/05 18:10, 113F

01/07 08:47, 5年前 , 114F
讓我想起當年被唬弄去用早期的gpgpu....(眼神死)
01/07 08:47, 114F
文章代碼(AID): #1VyCq81A (Soft_Job)
文章代碼(AID): #1VyCq81A (Soft_Job)