veriGPU的设计思路,完整内容请参见 附件文档
为什么要致力于一些我们可能***无法真正实现的事情?
好吧,不确定它***无法建造。 如果我们真的创建了一个经过合理验证且可工作的 GPU 设计,那么就会有大量 VC 来将其流片。
但是,与此同时......有很多事情很难真正运行或极其昂贵,例如:
- 等离子体(例如在聚变反应堆中)
- 太空火箭
- 火星登陆器
- ...还有 VLSI ASIC,例如 GPU
在所有情况下,解决问题的主要方法之一是创建高质量的模拟。 对于聚变反应堆的等离子体来说,这是相当具有挑战性的,因为我们甚至无法“看到”真相。 光只是另一种粒子,它与等离子体相互作用。 最终我们只看到产生了多少能量,以及发射了一些粒子。 等离子体模拟用于测试有关正在发生的情况的各种假设,以对等离子体进行“逆向工程”。
就 GPU 而言,模拟相对简单。 CMOS 电路至少在单元级别具有相对确定性,并且有许多可用的高质量模拟器,例如 [iverilog](http://iverilog.icarus.com/) 和 [verilator](https:// www.veripool.org/verilator/)。 我们可以使用yosys(https://github.com/YosysHQ/yosys)来综合到门级单元,然后我们可以对其进行模拟。 我们可以在这些模拟器中运行 GPU,并根据自己的喜好进行调整。 想要一个只有 BF16 的 GPU 吗? 调整代码。 其实我无论如何都打算把它变成纯FP16,但这只是一个例子。 想要更改每个多处理器的核心数量,或者时钟频率和指令延迟之间的权衡? 调整一下代码:)
我认为,在无法真正“尝试”的情况下开展项目似乎是一项有用且有价值的技能。
(要做的事:我需要写一些关于如何快速陷入运行模拟的说明:))-->
为什么不在 FPGA 上进行目标/测试?
在我之前使用 OpenCL 的经验中,即 [DeepCL](https://github.com/hughperkins/DeepCL)、[cltorch](https://github.com/hughperkins/cltorch)、[coriander](https:// github.com/hughperkins/coriander),具有讽刺意味的是,我只能访问 NVIDIA® GPU 来运行它们 :P,我发现我所做的一切都以各种微妙的方式针对 NVIDIA® GPU 进行了优化,当我最终得到一个简短的说明时 使用 AMD® GPU 时,性能非常糟糕。 FPGA 和 ASIC 之间的差异相当大。 例如,FPGA 包含自己的内置路由架构、触发器的工作方式略有不同、复位工作方式也略有不同、FPGA 可以具有“初始”块,并且 FPGA 中的存储器布局也不同。 我觉得即使接触 FPGA 也会以各种微妙的方式“污染”设计,而且很难察觉。 用机器学习的术语来说,我觉得我们会“过度拟合”FPGA,并且无法正确推广到 ASIC。
所以,我认为模拟是前进的方向。 我们需要确保模拟尽可能可靠、准确和完整。