Re: [讨论] GPU加速Transistor层的模拟器

楼主: expiate (夜露死苦)   2021-01-02 04:25:01
我有把你下面推文的两个连结看了以确定我尽量能理解你的目的。
文中你提到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#版本
作者: mmonkeyboyy (great)   2021-01-02 07:59:00
他其实想做的就是gate level functional simulation一般做完synthesis 再拿去的那一道啊.... 免费的话拿个什么iverilog都能跑的那个速度就慢到爆炸而已 跑跑小颗的还可以 大颗那个内存爆炸状态是要跑个鬼....更别提gpu本身架构也不太适合做要cache的计算@[email protected]~ 解数值的还可以做functional的不用一堆fpu (如果不解 timing)做模拟器要做全系统的的 这个连cycle-accurate的都算慢的@[email protected]~ 更别提更往下的 .... 有时gem5 qemu这种上层一点的跑个应用下去都可以等死了gate-level 讲的是说你synthesis 后有 and or等出现后再去跑 到不一定是要有tech filetransistor-level 就是nmos pmos 下去 有lib的这个其实有 gpu 加速了@[email protected]~ (没用过 不知效果)
作者: comaniac (coding cody)   2021-01-02 09:02:00
同意对于目前EDA tool 很少用GPU加速的分析。不过不要说GPU,目前CAD tool 连CPU 平行运算都不是用得很好了,距离用加速器还有很长一段路要走
作者: erspicu (.)   2021-01-02 12:55:00
Transistor和Gate level称呼有时候在网络上会被混用而我的概念的确是GATE LEVEL称呼比较正确http://www.visual6502.org/ 以这网站来说 标题是Visual Transistor-level Simulation of the 6502 CPU实际上我看它专案sources是gate-level关系的模拟程式里面有一些节点关系和连接关系的定义档以后如果用英文 我会用GATE-LEVEL称呼避免混淆
作者: Neistpoint (Neistpoint)   2021-01-02 13:53:00
Gate level simulation 的最小单位是cell library里的 逻辑闸,每个逻辑闸对应到一个或多个transistor. 所以 virtual transistor 这样的命名是没错的。
作者: freef1y3 ( )   2021-01-02 14:33:00
Gate level 如果连flip-flop都拆成gate了,那就算只是做functional 也是要考虑timing了吧?不然连shift register都没办法正确模拟
作者: MT6797 (Helio-X20)   2021-01-02 14:44:00
看了这篇才看懂原PO想做什么XD硬件运作关键是同步,他把同步解读为平行这就有问题了。
作者: mmonkeyboyy (great)   2021-01-02 15:02:00
FF自己就是一个gate (实做上可以当trigger 当内存更新资料的起终点 这有点cycle accurate的概念
作者: freef1y3 ( )   2021-01-02 15:14:00
原来如此 感谢回答
作者: Holysml   2021-01-02 22:42:00
关键是dig需要control多于数值运算;真要加速也是cpu farm
作者: SkyFluid (咸鱼饭X的现身)   2021-01-03 01:49:00
更新一点, EDA厂是有用gpu加速的,如cadence/rocketick但在实务上这个做法会有不少问题,所以并没有大规模采用.
作者: mmonkeyboyy (great)   2021-01-03 04:26:00
做spice的才有在商用 我朋友开的公司才刚浮出来了
作者: javatea (齁齁)   2021-01-03 13:19:00
你人真好, 台湾放假应该很多事情做啊 无聊才去回那种文

Links booklink

Contact Us: admin [ a t ] ucptt.com