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

看板Soft_Job作者 (彎曲屎殼郎)時間5年前 (2021/01/04 04:30), 編輯推噓6(6021)
留言27則, 3人參與, 5年前最新討論串5/5 (看更多)
monkey大大說你只是想用GPU加速MOS 6502的電路模擬 我覺得就單你的例子是可行的,我分析如下: 你的電晶體數目不大,我們就用實際數目估計吧 - 3510 transistor - 在NmosFet.py裡有5個變數記錄狀態變化 所以整個chip的模擬需要3510x5=17550個狀態來表示chip在每個cycle裝態 我們取整數20K好了,然後每個狀態用1 byte來表示(int8_t or char) 然後我們需要兩個陣列分別代表目前chip的狀態與chip下一個狀態 所以總共是 20K*2 =40K byte = 40 KB int8_t cur_arr[40000]; int8_t next_arr[40000]; 每個cycle更新狀態就是按照電路接線與數個cur_arr[i]的值來計算next_arr[j] 算完整個next_arr,到下一個cycle把next_arr所有值複製到cur_arr 我假設對於這40K的狀態變數,你都有對應的表可以查,例如 if(cur_arr[0] = LOW && cur_arr[256] = HIGH && cur_arr[87] = LOW) next_arr[3] = HIGH; else next_arr[3] = LOW; 然好寫死在code裡,每次launch cuda kernel就根據array的index去查表更新狀態就可以 原理跟矩陣乘法用cuda kernel寫幾乎一模一樣。 麻煩的就是要把每個狀態怎麼更新的規則要了解 這思路很簡單很暴力,但是對於MOS 6502綽綽有餘,甚至你可以用變數控制cuda kernel 一次更新多少cycle來減少memory之間資料傳遞的時間 我假設你查表是用2個unordered_map<int8_t,string>,一個是查HIGH,另一個是查LOW 每個狀態有10個對應的相關狀態要查: 2*40000*(1+5*10+10) = 4880000 約 5MB 2: 兩個map 40000: 總共的狀態數 1: int8_t 5*10: worst情況會有十個表示四位數的字串加上inv,例如 1234_~2356_3333_.... ~: 表示這個狀態是LOW 10: 用來區別的字元(_),其實最多只會有九個 基本上不用擔心GPU memory裝不下,甚至你可以多算好幾個cycle的結果再一次回來 拿NV GPU 3080裡面的10GB memory,假設每次cycle更新需要10MB (好算而已) 你可以儲存1000個結果了,throughput上一定可以有顯著的改善 這次總該有回答到你的問題上了吧? ※ 引述《expiate (彎曲屎殼郎)》之銘言: : 感謝你提供的網站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日後有什麼進展歡迎分享給大家。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.207.101.195 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1609705809.A.6BF.html

01/04 04:32, 5年前 , 1F
這就是我叫他自己算數學算算就好了XD 您人真好
01/04 04:32, 1F

01/04 04:33, 5年前 , 2F
這也是我昨天說的可以用上tensor core的方法
01/04 04:33, 2F

01/04 04:34, 5年前 , 3F
至於能多快....不知道 XD
01/04 04:34, 3F

01/04 09:39, 5年前 , 4F
感謝 細節我還要稍微多看再了解一下 但初步看起來
01/04 09:39, 4F

01/04 09:39, 5年前 , 5F
很類似先把結果算出來使用查表的方式去拿結果?
01/04 09:39, 5F

01/04 09:41, 5年前 , 6F
反正可以當成解法之一當可行作法參考
01/04 09:41, 6F

01/04 09:43, 5年前 , 7F
"自己算數學算算就好了" 我是不知道這回答在說啥
01/04 09:43, 7F

01/04 09:44, 5年前 , 8F
如果要這種回答 我也會說 自己算數學算算就好了
01/04 09:44, 8F

01/04 10:00, 5年前 , 9F
算一下要用多大ram去計算這種都不會我也不知道該說什
01/04 10:00, 9F

01/04 10:01, 5年前 , 10F
麼 什麼都不太懂 回應到是挺愛戰的
01/04 10:01, 10F

01/04 10:01, 5年前 , 11F
反正就算這麼跟你講 你也不一定知道這中間問題在那
01/04 10:01, 11F

01/04 10:02, 5年前 , 12F
你根本就沒心也不想好好理解為什麼gate-level 要這樣
01/04 10:02, 12F

01/04 10:03, 5年前 , 13F
做 簡單說就是個什麼都不想懂的伸手牌而已
01/04 10:03, 13F

01/04 10:03, 5年前 , 14F
大概你想人家把code 都送上讓你去嘴別人這樣?
01/04 10:03, 14F

01/04 10:08, 5年前 , 15F
需要用多大的RAM跟演算法有關係 你連用啥方法都沒說
01/04 10:08, 15F

01/04 10:08, 5年前 , 16F
想做gate-level東西 ram不會算 人家當你是來鬧的先
01/04 10:08, 16F

01/04 10:08, 5年前 , 17F
你想做這個東西連基本知識都沒有@_@~
01/04 10:08, 17F

01/04 10:09, 5年前 , 18F
js那份project就迴圈在跑而已 也只是載入一些節點定義
01/04 10:09, 18F

01/04 10:10, 5年前 , 19F
所耗的記憶體根本不大 我是根本不知道你是要我算啥
01/04 10:10, 19F

01/04 10:11, 5年前 , 20F
呵呵呵呵呵 所以你還是不懂XD
01/04 10:11, 20F

01/04 10:12, 5年前 , 21F
就當我沒講 你加油 好棒!
01/04 10:12, 21F

01/04 10:12, 5年前 , 22F
作法可能不只一種 誰知道你是要算哪一種?
01/04 10:12, 22F

01/04 10:12, 5年前 , 23F
你連一個確定的命題或方式都沒說 是要算啥?
01/04 10:12, 23F

01/04 10:16, 5年前 , 24F
這篇回文的e大就懂得怎麼算了不是?
01/04 10:16, 24F

01/04 10:19, 5年前 , 25F
前面有說 細節我還要再稍微了解一下 但大概知道策略方向
01/04 10:19, 25F

01/04 10:19, 5年前 , 26F
要算好歹要知道是要算啥用啥大概方式才能評估
01/04 10:19, 26F

01/04 12:15, 5年前 , 27F
沒事,希望你能順利完成你的夢想順便造福大家
01/04 12:15, 27F
文章代碼(AID): #1VyYbHQ_ (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1VyYbHQ_ (Soft_Job)