PTT推薦

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

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

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

mmonkeyboyy01/03 04:28其實用簡單數學算一下放下電路RAM大小就知道可行性了

Neistpoint01/03 10:22分析得很透徹

erspicu01/03 11:34這種拆磨晶片靠顯微鏡或是放大鏡看內部電路去描繪的事情

erspicu01/03 11:35常理推斷只適合骨灰級的一些晶片 也不是我感興趣的事情

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

erspicu01/03 11:36內部邏輯閘.相連定義.接腳 他們都完全整理好了

erspicu01/03 11:37可能是因為工作領域習慣性去預設的目的設想不同

erspicu01/03 11:38即使我不只一次提及 只是一個在電腦上能夠更精確的紅白機

erspicu01/03 11:39模擬器.. 還是有許多人會做發散式假設

erspicu01/03 11:44js版的速度可以算到大概10"Hz" 非常慢

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

erspicu01/03 11:47看CODE內容初步來看主要是FOR迴圈處理一些陣列資料

erspicu01/03 11:49以前有用過GPU處理影像 有前後次序性相依關係的

erspicu01/03 11:52都會出問題 如果沒有這層問題 基本上就是把FOR迴圈改用

erspicu01/03 11:52parallel的方式去跑就有加速效果 但能不能拉到3.5Mhz

erspicu01/03 11:54這我就不太清楚..

mmonkeyboyy01/03 11:55我想別人的推文你都沒看懂 你只是一直在講你的想法

mmonkeyboyy01/03 11:55是很不錯的想法 加油呦~~~~好棒棒捏~

mmonkeyboyy01/03 11:56你也只是拿別人的c++來優化 看來你也不一定知道問題

mmonkeyboyy01/03 11:57在那裡 另外gpu如果可以就這樣scale上去真的就是太

mmonkeyboyy01/03 11:58美好了 至於到底gate-level simulation 在解什麼我

mmonkeyboyy01/03 11:59猜你也不在意吧

erspicu01/03 11:59可以避開前後相依次序性關係問題的話 多核就可以加速

mmonkeyboyy01/03 12:00...........你以為只有你知道 ?

mmonkeyboyy01/03 12:01你以為電路就不是要靠上一級輸入來做

erspicu01/03 12:01然後這篇花很多篇幅在寫磨開晶片後的程式辨識 問題是

mmonkeyboyy01/03 12:01你天真以為業界沒人知道沒人想過 沒人試過?

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

Apache01/03 12:01這篇沒有抓到原po的點,但是原po的推文也是...

erspicu01/03 12:02輸出整理好好的了... 而且這種方式本來就只適合骨灰產品

mmonkeyboyy01/03 12:02也不是我寫得啊 文主只是也就....他肯定是懂得人

mmonkeyboyy01/03 12:02我第一個推文就告訴你了 你用數學算算就知道多快了

mmonkeyboyy01/03 12:04gate數可以推出data量&使用memory量 套上GPU硬體

mmonkeyboyy01/03 12:05能力 還有你要計算的東西 就算是完美的平行運算

mmonkeyboyy01/03 12:07你等於是一個原來的指令集 在一顆2GHz cpu上要跑2M

mmonkeyboyy01/03 12:07你只有1000cycles可以解

mmonkeyboyy01/03 12:08你說要做gate-level simulation 你可以自己看看有多

mmonkeyboyy01/03 12:09少層要做 (每一層最少要1cycle) gate->gate就是一層

mmonkeyboyy01/03 12:10其他的運算 搬資料的耗損什麼我就不說了

Apache01/03 12:10他會說他只要變快就好

Apache01/03 12:11我覺得前面那篇不錯 SIMD能加速的問題其實很少

erspicu01/03 12:11我是真的不知道該怎麼算 你要不要分享一下你的算法

mmonkeyboyy01/03 12:12我n年前就跟某廠在做這個事了 也沒看我賺到錢還在這

erspicu01/03 12:12光靠單核C++ CODE可以到1萬 實機350萬 效率如果能改善到

mmonkeyboyy01/03 12:12就知道沒用了啊XD

erspicu01/03 12:13350倍也就算及格了... 當然也可能根本到不了

Apache01/03 12:13還有而且code對架構非常敏感,還有開銷跟同步問題

mmonkeyboyy01/03 12:14用ARM海快了點@[email protected]~ 主要是你dataflow那個移出cache

erspicu01/03 12:14記憶體從主機板那邊搬移到GPU的記憶體也是效能耗損拉

erspicu01/03 12:14所以我當初處理影相 雖然是比多核電腦快但略快一點點而已

mmonkeyboyy01/03 12:14那個對GPU太傷了@[email protected]~ 成本太高

erspicu01/03 12:15實際上得考慮到各種耗損 介面速度等等因素 我是真的

erspicu01/03 12:15不知道該拿何種計算方式去做評估

mmonkeyboyy01/03 12:15GPU內部記憶就不用搬泥 ? 搬啊 搬死啊 跳著搬才是

mmonkeyboyy01/03 12:16問題是吧

mmonkeyboyy01/03 12:16都不用算這些 你就算有多少層logic gate要計算就好

erspicu01/03 12:16不過骨灰級的東西 3.5Mhz 3.4千邏輯閘數 不是現代晶片

Apache01/03 12:16這樣算明知故問嗎= =

Apache01/03 12:17影像已經是GPU相對好解的問題了 其他通常更慢

mmonkeyboyy01/03 12:18所以我沒有說沒有機會啊 這是上古產品數字這麼少

mmonkeyboyy01/03 12:20硬塞GPU 採 greedy 方式邏輯用全放的可能可以哦@[email protected]~

Apache01/03 12:20你很壞

mmonkeyboyy01/03 12:21我換一個方式算給你看 這個種control dataflow型

erspicu01/03 12:21是說mmonkeyboyy能分享"我n年前就跟某廠在做這個事了"

erspicu01/03 12:21哪間公司做了啥相關GPU應用計畫?結果失敗 好奇想聽聽八卦

mmonkeyboyy01/03 12:23的運算 要加速350倍 ..... 就算是單核比350核也難

mmonkeyboyy01/03 12:23這沒什麼八卦 你文章多看就有了

mmonkeyboyy01/03 12:24蠻多人在2010左右做過的

mmonkeyboyy01/03 12:26我猜你要能拿顆普通GPU到1MHz就是一個大成就了

mmonkeyboyy01/03 12:28我猜拿顆3990X可能還香點 尤其是

erspicu01/03 12:292010年老闆花了一筆錢養RD 結果全都失敗收場滿慘的

mmonkeyboyy01/03 12:30我不知道你是從何得來上述結論的 反正不是我說的

erspicu01/03 12:30因為如果我沒記錯當初相關宣傳未來願景等等說得滿多

mmonkeyboyy01/03 12:33這我就不知道了 反正我現在沒做EDA&GPU 沒關我事

mmonkeyboyy01/03 12:52不要說我沒啥建樹 你可以考慮看看用tensor core的方

mmonkeyboyy01/03 12:53解解看logic array 說不定可以呢 不過這個做法我沒

mmonkeyboyy01/03 12:53很仔細思考過 但我想這應該是少數還沒試過的方法

Neistpoint01/03 13:15目前IC設計的流程是 C model(optional)-> RTL ->

Neistpoint01/03 13:15Gate level . 轉換之間都會作等效檢查。 如果覺得g

Neistpoint01/03 13:15atelevel 太慢,可以考慮 反向回RTL, 這樣估計可以

Neistpoint01/03 13:15快2-3個數量級.

mmonkeyboyy01/03 13:18他就不要啊XD

javatea01/03 13:30對牛彈琴 浪費時間啊

erspicu01/03 13:38一直都在說這顆骨灰級6502 哪來的c model RTL 不需要一

erspicu01/03 13:38直擴大命題假設

freef1y301/03 13:45已經有C++source的話也許可以先試試加OpenMP pragma看

freef1y301/03 13:45能不能加速

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

erspicu01/03 13:49看看怎麼做

erspicu01/03 13:50能不能達到實機速度也無所謂 反正試試看

erspicu01/03 13:52這顆已經是1975年的東西 3.4k邏輯閘數的老晶片了

mmonkeyboyy01/03 13:56openmp也有上限啦@[email protected]~ 不過他原來說要放gpu啊

mmonkeyboyy01/03 13:57不然放3990X 寫得好的快個幾十倍可能還是有的

GameGyu01/03 14:20(Synopsys VCS) In heterogeneous environments where

GameGyu01/03 14:20 a mix of processors, GPUs and hybrid architectures a

GameGyu01/03 14:20re available, Cheetah technology can speed-up simulat

GameGyu01/03 14:20ion by up to 5X on RTL and up to 30X on gate-level de

GameGyu01/03 14:20signs.

expiate01/03 15:36你所謂的更精確卻不用去考慮模型精確反而是加速部分?

expiate01/03 15:37所以你到底是要做加速還是要更精確的模擬啊?

expiate01/03 15:38用GPU要怎麼達到你所謂的更精確?我好像更不理解了

expiate01/03 15:42拿如果是加速,最早的FPGA不就是最好的解嗎?

expiate01/03 15:42gate cout才3000多,寫Verilog也很快啊

expiate01/03 15:50還是你就是要加速人家寫好的code而已?

Apache01/03 16:14他想在電腦上讓一群情懷黨模擬晶片打紅白機吧

expiate01/03 16:26所以問題應該就是該怎麼寫 cuda kernel來跑MOS 6502的循

expiate01/03 16:26序電路模擬,使其加速350倍對吧?

erspicu01/03 17:11差不多是這意思而已

SkyFluid01/03 18:47@GameGyu. 不管是S家的cheetah或C家的rocketsim, 用GPU

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

SkyFluid01/03 18:48文的內容有關. 當然兩家都有想些新點子, 不過很難.

mmonkeyboyy01/04 01:33ex大 你得到他了 xd

GameGyu01/05 18:10GPU本來就很難做他原本功能以外的事啊

mmonkeyboyy01/07 08:47讓我想起當年被唬弄去用早期的gpgpu....(眼神死)