作者expiate (弯曲屎壳郎)
看板Soft_Job
标题Re: [讨论] GPU加速Transistor层的模拟器
时间Sun Jan 3 03:44:04 2021
感谢你提供的网站
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://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1609616648.A.04A.html
1F:→ mmonkeyboyy: 其实用简单数学算一下放下电路RAM大小就知道可行性了 01/03 04:28
2F:推 Neistpoint: 分析得很透彻 01/03 10:22
3F:→ erspicu: 这种拆磨晶片靠显微镜或是放大镜看内部电路去描绘的事情 01/03 11:34
4F:→ erspicu: 常理推断只适合骨灰级的一些晶片 也不是我感兴趣的事情 01/03 11:35
5F:→ erspicu: 我目前在做的只是把这网站的专案从JS版移植到C# 01/03 11:35
6F:→ erspicu: 内部逻辑闸.相连定义.接脚 他们都完全整理好了 01/03 11:36
7F:→ erspicu: 可能是因为工作领域习惯性去预设的目的设想不同 01/03 11:37
8F:→ erspicu: 即使我不只一次提及 只是一个在电脑上能够更精确的红白机 01/03 11:38
9F:→ erspicu: 模拟器.. 还是有许多人会做发散式假设 01/03 11:39
10F:→ erspicu: js版的速度可以算到大概10"Hz" 非常慢 01/03 11:44
11F:→ erspicu: 有人用C++改写优化後到达10000Hz 但还是太慢实机是3.5Mhz 01/03 11:46
12F:→ erspicu: 看CODE内容初步来看主要是FOR回圈处理一些阵列资料 01/03 11:47
13F:→ erspicu: 以前有用过GPU处理影像 有前後次序性相依关系的 01/03 11:49
14F:→ erspicu: 都会出问题 如果没有这层问题 基本上就是把FOR回圈改用 01/03 11:52
15F:→ erspicu: parallel的方式去跑就有加速效果 但能不能拉到3.5Mhz 01/03 11:52
16F:→ erspicu: 这我就不太清楚.. 01/03 11:54
17F:推 mmonkeyboyy: 我想别人的推文你都没看懂 你只是一直在讲你的想法 01/03 11:55
18F:→ mmonkeyboyy: 是很不错的想法 加油呦~~~~好棒棒捏~ 01/03 11:55
19F:→ mmonkeyboyy: 你也只是拿别人的c++来优化 看来你也不一定知道问题 01/03 11:56
20F:→ mmonkeyboyy: 在那里 另外gpu如果可以就这样scale上去真的就是太 01/03 11:57
21F:→ mmonkeyboyy: 美好了 至於到底gate-level simulation 在解什麽我 01/03 11:58
22F:→ mmonkeyboyy: 猜你也不在意吧 01/03 11:59
23F:→ erspicu: 可以避开前後相依次序性关系问题的话 多核就可以加速 01/03 11:59
24F:→ mmonkeyboyy: ...........你以为只有你知道 ? 01/03 12:00
25F:→ mmonkeyboyy: 你以为电路就不是要靠上一级输入来做 01/03 12:01
26F:→ erspicu: 然後这篇花很多篇幅在写磨开晶片後的程式辨识 问题是 01/03 12:01
27F:→ mmonkeyboyy: 你天真以为业界没人知道没人想过 没人试过? 01/03 12:01
28F:→ erspicu: 这个就不是我要做的事情 人家晶片内部定义档都整个都帮你 01/03 12:01
29F:→ Apache: 这篇没有抓到原po的点,但是原po的推文也是... 01/03 12:01
30F:→ erspicu: 输出整理好好的了... 而且这种方式本来就只适合骨灰产品 01/03 12:02
31F:→ mmonkeyboyy: 也不是我写得啊 文主只是也就....他肯定是懂得人 01/03 12:02
32F:→ mmonkeyboyy: 我第一个推文就告诉你了 你用数学算算就知道多快了 01/03 12:02
33F:→ mmonkeyboyy: gate数可以推出data量&使用memory量 套上GPU硬体 01/03 12:04
34F:→ mmonkeyboyy: 能力 还有你要计算的东西 就算是完美的平行运算 01/03 12:05
35F:→ mmonkeyboyy: 你等於是一个原来的指令集 在一颗2GHz cpu上要跑2M 01/03 12:07
36F:→ mmonkeyboyy: 你只有1000cycles可以解 01/03 12:07
37F:→ mmonkeyboyy: 你说要做gate-level simulation 你可以自己看看有多 01/03 12:08
38F:→ mmonkeyboyy: 少层要做 (每一层最少要1cycle) gate->gate就是一层 01/03 12:09
39F:→ mmonkeyboyy: 其他的运算 搬资料的耗损什麽我就不说了 01/03 12:10
40F:→ Apache: 他会说他只要变快就好 01/03 12:10
41F:→ Apache: 我觉得前面那篇不错 SIMD能加速的问题其实很少 01/03 12:11
42F:→ erspicu: 我是真的不知道该怎麽算 你要不要分享一下你的算法 01/03 12:11
43F:→ mmonkeyboyy: 我n年前就跟某厂在做这个事了 也没看我赚到钱还在这 01/03 12:12
44F:→ erspicu: 光靠单核C++ CODE可以到1万 实机350万 效率如果能改善到 01/03 12:12
45F:→ mmonkeyboyy: 就知道没用了啊XD 01/03 12:12
46F:→ erspicu: 350倍也就算及格了... 当然也可能根本到不了 01/03 12:13
47F:→ Apache: 还有而且code对架构非常敏感,还有开销跟同步问题 01/03 12:13
48F:→ mmonkeyboyy: 用ARM海快了点@_@~ 主要是你dataflow那个移出cache 01/03 12:14
49F:→ erspicu: 记忆体从主机板那边搬移到GPU的记忆体也是效能耗损拉 01/03 12:14
50F:→ erspicu: 所以我当初处理影相 虽然是比多核电脑快但略快一点点而已 01/03 12:14
51F:→ mmonkeyboyy: 那个对GPU太伤了@_@~ 成本太高 01/03 12:14
52F:→ erspicu: 实际上得考虑到各种耗损 介面速度等等因素 我是真的 01/03 12:15
53F:→ erspicu: 不知道该拿何种计算方式去做评估 01/03 12:15
54F:→ mmonkeyboyy: GPU内部记忆就不用搬泥 ? 搬啊 搬死啊 跳着搬才是 01/03 12:15
55F:→ mmonkeyboyy: 问题是吧 01/03 12:16
56F:→ mmonkeyboyy: 都不用算这些 你就算有多少层logic gate要计算就好 01/03 12:16
57F:→ erspicu: 不过骨灰级的东西 3.5Mhz 3.4千逻辑闸数 不是现代晶片 01/03 12:16
58F:→ Apache: 这样算明知故问吗= = 01/03 12:16
59F:→ Apache: 影像已经是GPU相对好解的问题了 其他通常更慢 01/03 12:17
60F:→ mmonkeyboyy: 所以我没有说没有机会啊 这是上古产品数字这麽少 01/03 12:18
61F:→ mmonkeyboyy: 硬塞GPU 采 greedy 方式逻辑用全放的可能可以哦@_@~ 01/03 12:20
62F:推 Apache: 你很坏 01/03 12:20
63F:→ mmonkeyboyy: 我换一个方式算给你看 这个种control dataflow型 01/03 12:21
64F:→ erspicu: 是说mmonkeyboyy能分享"我n年前就跟某厂在做这个事了" 01/03 12:21
65F:→ erspicu: 哪间公司做了啥相关GPU应用计画?结果失败 好奇想听听八卦 01/03 12:21
66F:→ mmonkeyboyy: 的运算 要加速350倍 ..... 就算是单核比350核也难 01/03 12:23
67F:→ mmonkeyboyy: 这没什麽八卦 你文章多看就有了 01/03 12:23
68F:→ mmonkeyboyy: 蛮多人在2010左右做过的 01/03 12:24
69F:→ mmonkeyboyy: 我猜你要能拿颗普通GPU到1MHz就是一个大成就了 01/03 12:26
70F:→ mmonkeyboyy: 我猜拿颗3990X可能还香点 尤其是 01/03 12:28
71F:→ erspicu: 2010年老板花了一笔钱养RD 结果全都失败收场满惨的 01/03 12:29
72F:→ mmonkeyboyy: 我不知道你是从何得来上述结论的 反正不是我说的 01/03 12:30
73F:→ erspicu: 因为如果我没记错当初相关宣传未来愿景等等说得满多 01/03 12:30
74F:推 mmonkeyboyy: 这我就不知道了 反正我现在没做EDA&GPU 没关我事 01/03 12:33
75F:推 mmonkeyboyy: 不要说我没啥建树 你可以考虑看看用tensor core的方 01/03 12:52
76F:→ mmonkeyboyy: 解解看logic array 说不定可以呢 不过这个做法我没 01/03 12:53
77F:→ mmonkeyboyy: 很仔细思考过 但我想这应该是少数还没试过的方法 01/03 12:53
78F:推 Neistpoint: 目前IC设计的流程是 C model(optional)-> RTL -> 01/03 13:15
79F:→ Neistpoint: Gate level . 转换之间都会作等效检查。 如果觉得g 01/03 13:15
80F:→ Neistpoint: atelevel 太慢,可以考虑 反向回RTL, 这样估计可以 01/03 13:15
81F:→ Neistpoint: 快2-3个数量级. 01/03 13:15
82F:推 mmonkeyboyy: 他就不要啊XD 01/03 13:18
83F:→ javatea: 对牛弹琴 浪费时间啊 01/03 13:30
84F:→ erspicu: 一直都在说这颗骨灰级6502 哪来的c model RTL 不需要一 01/03 13:38
85F:→ erspicu: 直扩大命题假设 01/03 13:38
86F:→ freef1y3: 已经有C++source的话也许可以先试试加OpenMP pragma看 01/03 13:45
87F:→ freef1y3: 能不能加速 01/03 13:45
88F:→ erspicu: 专案移植完 会看看有没有顺序性相依关系,能处理掉的话再 01/03 13:49
89F:→ erspicu: 看看怎麽做 01/03 13:49
90F:→ erspicu: 能不能达到实机速度也无所谓 反正试试看 01/03 13:50
91F:→ erspicu: 这颗已经是1975年的东西 3.4k逻辑闸数的老晶片了 01/03 13:52
92F:推 mmonkeyboyy: openmp也有上限啦@_@~ 不过他原来说要放gpu啊 01/03 13:56
93F:→ mmonkeyboyy: 不然放3990X 写得好的快个几十倍可能还是有的 01/03 13:57
94F:推 GameGyu: (Synopsys VCS) In heterogeneous environments where 01/03 14:20
95F:→ GameGyu: a mix of processors, GPUs and hybrid architectures a 01/03 14:20
96F:→ GameGyu: re available, Cheetah technology can speed-up simulat 01/03 14:20
97F:→ GameGyu: ion by up to 5X on RTL and up to 30X on gate-level de 01/03 14:20
98F:→ GameGyu: signs. 01/03 14:20
99F:→ expiate: 你所谓的更精确却不用去考虑模型精确反而是加速部分? 01/03 15:36
100F:→ expiate: 所以你到底是要做加速还是要更精确的模拟啊? 01/03 15:37
101F:→ expiate: 用GPU要怎麽达到你所谓的更精确?我好像更不理解了 01/03 15:38
102F:→ expiate: 拿如果是加速,最早的FPGA不就是最好的解吗? 01/03 15:42
103F:→ expiate: gate cout才3000多,写Verilog也很快啊 01/03 15:42
104F:→ expiate: 还是你就是要加速人家写好的code而已? 01/03 15:50
105F:推 Apache: 他想在电脑上让一群情怀党模拟晶片打红白机吧 01/03 16:14
106F:→ expiate: 所以问题应该就是该怎麽写 cuda kernel来跑MOS 6502的循 01/03 16:26
107F:→ expiate: 序电路模拟,使其加速350倍对吧? 01/03 16:26
108F:→ erspicu: 差不多是这意思而已 01/03 17:11
109F:推 SkyFluid: @GameGyu. 不管是S家的cheetah或C家的rocketsim, 用GPU 01/03 18:47
110F:→ SkyFluid: 加速都只能跑特定设计, 无法大规模采用, 原因和我先前推 01/03 18:48
111F:→ SkyFluid: 文的内容有关. 当然两家都有想些新点子, 不过很难. 01/03 18:48
112F:→ mmonkeyboyy: ex大 你得到他了 xd 01/04 01:33
113F:推 GameGyu: GPU本来就很难做他原本功能以外的事啊 01/05 18:10
114F:推 mmonkeyboyy: 让我想起当年被唬弄去用早期的gpgpu....(眼神死) 01/07 08:47