PTT評價

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

看板Soft_Job標題Re: [討論] GPU加速Transistor層的模擬器作者
expiate
(彎曲屎殼郎)
時間推噓 7 推:7 噓:0 →:33

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 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.207.101.195 (美國)
PTT 網址

mmonkeyboyy01/04 04:32這就是我叫他自己算數學算算就好了XD 您人真好

mmonkeyboyy01/04 04:33這也是我昨天說的可以用上tensor core的方法

mmonkeyboyy01/04 04:34至於能多快....不知道 XD

erspicu01/04 09:39感謝 細節我還要稍微多看再了解一下 但初步看起來

erspicu01/04 09:39很類似先把結果算出來使用查表的方式去拿結果?

erspicu01/04 09:41反正可以當成解法之一當可行作法參考

erspicu01/04 09:43"自己算數學算算就好了" 我是不知道這回答在說啥

erspicu01/04 09:44如果要這種回答 我也會說 自己算數學算算就好了

mmonkeyboyy01/04 10:00算一下要用多大ram去計算這種都不會我也不知道該說什

mmonkeyboyy01/04 10:01麼 什麼都不太懂 回應到是挺愛戰的

mmonkeyboyy01/04 10:01反正就算這麼跟你講 你也不一定知道這中間問題在那

mmonkeyboyy01/04 10:02你根本就沒心也不想好好理解為什麼gate-level 要這樣

mmonkeyboyy01/04 10:03做 簡單說就是個什麼都不想懂的伸手牌而已

mmonkeyboyy01/04 10:03大概你想人家把code 都送上讓你去嘴別人這樣?

erspicu01/04 10:08需要用多大的RAM跟演算法有關係 你連用啥方法都沒說

mmonkeyboyy01/04 10:08想做gate-level東西 ram不會算 人家當你是來鬧的先

mmonkeyboyy01/04 10:08你想做這個東西連基本知識都沒有@[email protected]~

erspicu01/04 10:09js那份project就迴圈在跑而已 也只是載入一些節點定義

erspicu01/04 10:10所耗的記憶體根本不大 我是根本不知道你是要我算啥

mmonkeyboyy01/04 10:11呵呵呵呵呵 所以你還是不懂XD

mmonkeyboyy01/04 10:12就當我沒講 你加油 好棒!

erspicu01/04 10:12作法可能不只一種 誰知道你是要算哪一種?

erspicu01/04 10:12你連一個確定的命題或方式都沒說 是要算啥?

mmonkeyboyy01/04 10:16這篇回文的e大就懂得怎麼算了不是?

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

erspicu01/04 10:19要算好歹要知道是要算啥用啥大概方式才能評估

expiate01/04 12:15沒事,希望你能順利完成你的夢想順便造福大家

javatea01/06 18:11array cell的查找用gpu跑 不會有啥好處吧

javatea01/06 18:14真的tensor core的硬體也不是這樣搞的 = =a....

mmonkeyboyy01/07 07:18不是這樣搞沒錯啊....

mmonkeyboyy01/07 07:19查找可能沒有 用點數學運算可能有好處點

mmonkeyboyy01/07 07:20還要再插多蠻多層的 我也不能說太多 但方式有點像

mmonkeyboyy01/07 07:20step-function 的做法 不過做下去搞剛又沒啥好處就

mmonkeyboyy01/07 07:21是了 而且電路沒辦法scale

mmonkeyboyy01/07 07:21只做一個可能可以吧 啊災

mmonkeyboyy01/07 07:22另一個電路的層級要先分出來才知道怎樣讓tensor-core

mmonkeyboyy01/07 07:24跑就是了@[email protected]~ 這概念大概十年前就有人做了

mmonkeyboyy01/07 07:25為了讓原文主可以找到文章 免得說找不到 這類文章

mmonkeyboyy01/07 07:25UMICH下去找 找不找得到就看命了

tomap4101701/15 11:32人真的很好。