Re: [討論] GPU加速Transistor層的模擬器
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日後有什麼進展歡迎分享給大家。
--
這就是我叫他自己算數學算算就好了XD 您人真好
這也是我昨天說的可以用上tensor core的方法
至於能多快....不知道 XD
感謝 細節我還要稍微多看再了解一下 但初步看起來
很類似先把結果算出來使用查表的方式去拿結果?
反正可以當成解法之一當可行作法參考
"自己算數學算算就好了" 我是不知道這回答在說啥
如果要這種回答 我也會說 自己算數學算算就好了
算一下要用多大ram去計算這種都不會我也不知道該說什
麼 什麼都不太懂 回應到是挺愛戰的
反正就算這麼跟你講 你也不一定知道這中間問題在那
你根本就沒心也不想好好理解為什麼gate-level 要這樣
做 簡單說就是個什麼都不想懂的伸手牌而已
大概你想人家把code 都送上讓你去嘴別人這樣?
需要用多大的RAM跟演算法有關係 你連用啥方法都沒說
想做gate-level東西 ram不會算 人家當你是來鬧的先
你想做這個東西連基本知識都沒有@[email protected]~
js那份project就迴圈在跑而已 也只是載入一些節點定義
所耗的記憶體根本不大 我是根本不知道你是要我算啥
呵呵呵呵呵 所以你還是不懂XD
就當我沒講 你加油 好棒!
作法可能不只一種 誰知道你是要算哪一種?
你連一個確定的命題或方式都沒說 是要算啥?
這篇回文的e大就懂得怎麼算了不是?
前面有說 細節我還要再稍微了解一下 但大概知道策略方向
要算好歹要知道是要算啥用啥大概方式才能評估
沒事,希望你能順利完成你的夢想順便造福大家
array cell的查找用gpu跑 不會有啥好處吧
真的tensor core的硬體也不是這樣搞的 = =a....
不是這樣搞沒錯啊....
查找可能沒有 用點數學運算可能有好處點
還要再插多蠻多層的 我也不能說太多 但方式有點像
step-function 的做法 不過做下去搞剛又沒啥好處就
是了 而且電路沒辦法scale
只做一個可能可以吧 啊災
另一個電路的層級要先分出來才知道怎樣讓tensor-core
跑就是了@[email protected]~ 這概念大概十年前就有人做了
為了讓原文主可以找到文章 免得說找不到 這類文章
UMICH下去找 找不找得到就看命了
人真的很好。
13
感謝你提供的網站 這提供非常多的訊息與實作的細節,也讓我有機會能更理解你的想法 我先稱它為virtual chip來做區別。 我看了FAQ與slide,裡面大致就回答這群作者能做到什麼程度, 我把我認為重要的條件列在下面:6
我有把你下面推文的兩個連結看了以確定我盡量能理解你的目的。 文中你提到transistor-level與邏輯閘層(gate-level)模擬, 這兩個用詞在你的語境下所代表的意思有點模糊, 我用我的理解以及上篇crossbar的觀點來定義一下: - transistor-level:19
首Po不想走冤枉路.... 雖然有找過資料 但找到的資料似乎是一些大學教授和硬體大廠的研界成果發表 論文也有 感覺有很高的技術門檻 門檻高就算了 主要是怕結果實際上也沒如同想像中好 想問看看有沒有已經走過這條路了 不知道通不通或是值不值得 模擬器最傳統的做法是cpu指令層的模擬 這種模擬方式好實作6
1. 你所描述的聽起來不是 transistor 層模擬,而是邏輯閘層次的模擬。Transistor 模 擬是指像 spice 那樣模擬時間 vs 電流之類的類比計算,就像用工具幫你做 smith 電子 學習題這樣。 2. 你內文裡面比較「cpu 指令層」, 「cycle-accurate」,「邏輯閘層」模擬,提到哪些 運算量比較大,哪些比較準,這些都是 ic 設計常識。一般公司的設計流程,在設計晶片
爆
Re: [情報] LBJ下一場對陣公牛狀態升級成Doubtful湖人好像更新狀態了 真的是GTD了 笑死 湖人也更新 LeBron James 的狀態為賽前決定(GTD)爆
[問題] 111科技部開獎中開始陸續有學門已更新系統狀態了 目前已知生科司-泌尿已開,有人知道其他學門狀態嗎 或是延攬死亡秘技到底還有沒有用呢 --29
[問題] Iherb運送狀態都沒有更新11/4下的單,訂單狀態只更新了兩次,然後就沒消息了,連到底到達台灣沒我都不確定, 有人遇過這種情況嗎?謝謝 (是順豐送的) --5
[問卦] 睡16小時睡不飽怎麼辦如題 本魯我這症狀持續好幾個月了 已經到了影響生活的程度 上班前兩個小時腦袋像融化了一樣 平常有在吃SSRI跟安眠藥4
[問題] 有遇過淘寶賣家發非官方合作的快遞嗎在淘寶買了個鞋子,賣家發貨用的是極兔快遞, 淘寶物流狀態顯示其他物流, 然後等待攬貨後就完全不更新, 想問一下,有買家遇過這樣的情形嗎? 我用的是官方空集,3
Re: [問卦] 八代I5+SSD筆電用起來很頓是哪裡出問題?你電腦用久了 CPU 跟 Memory 都會衰減 原本的匹配電路是設計在好得狀態的 衰減了之後訊號傳遞自然不會再完美的狀態 多次錯誤校正沒通過要重傳 自然會感覺有延遲1
[問題] 關於隱藏上線狀態想請問各位隱藏上線狀態時,有沒有遇過好友的上線狀態沒有即時更新的狀況? 這個問題只能重登解決嗎? 如果是這樣要一直重登有點麻煩... --- 籃球遊戲BasketPulse本週開始點燃第90賽季的戰火。 自上個賽季起,BasketPulse進行了一連串的遊戲更新, 除了變動最大的新比賽引擎導入之外,另一個重大更新就是球員狀態的部份。 BasketPulse的球員狀態共有分為五個等級: