array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 深究强化学习在谷歌芯片布局上的应用 - 爱码网

谷歌论文:Chip Placement with Deep Reinforcement Learning。

目录

电路板制作流程

芯片制作流程

芯片布局

布局宏(macros)

模型结构

Graph Embedding

预训练Policy Network

学习过程

布局标准单元(standard cells)

总结

电路板制作流程

在讲解芯片布局之前,我们先了解电路板的大致制作流程,这和芯片设计有一定类比性,可帮助建立概念。

深究强化学习在谷歌芯片布局上的应用
部分图片来自互联网

1,按照设计好的PCB板,对铜板进行热转印;腐蚀之后,保留需要的芯片、电阻等元件引脚及走线信息。
2,PCB布局就是排放电路图中各芯片、电阻电容等元件的位置。
3,PCB布线就是布置各元件之间的连线。

芯片制作流程

下图是intel cpu的制作流程:

深究强化学习在谷歌芯片布局上的应用
intel cpu

1,与电路板制作类似,不过是在晶圆上制作各种晶体管
2,光刻类似电路板制作的热转印,将事先设计好的芯片布局布线图案(掩膜),通过紫外线刻在晶圆上;被“卡脖子”的5nm光刻机指的就是这里。

芯片布局

《Chip Placement with Deep Reinforcement Learning》尝试通过深度强化学习的方法,解决芯片布局的问题,类比于电路板制作的PCB元件布局;注意只包括布局,不包括布线。

芯片布局包含两部分:
    一是标准单元(standard cells)的布局,如NAND(与非门)、NOR(或非门)、XOR(异或门)等逻辑门;
    二是宏(macros)的布局,触发器、算术逻辑单元、硬件暂存器等预定义逻辑模块。

宏的布局就是论文算法要解决的问题,标准单元的布局采用分组聚类(hMETIS)和力导引(force-directed)的传统方法。

深究强化学习在谷歌芯片布局上的应用
VLSI Cell Placement Techniques

布局宏(macros)

问题描述为给定芯片的netlist,将宏放置到128X128的晶圆画布(canvas)上,以使芯片的PPA(能耗、性能和面积)最小;netlist是一张图(Graph),描述电路图中各节点(宏或标准单元)的连接关系。

采用PPO:近端策略优化深度强化学习算法来建模宏布局。深究强化学习在谷歌芯片布局上的应用

模型学习的是某个宏具体摆放的位置,但注意放置宏的顺序不是模型学习的,而是由图的拓扑序确定的;同时优先放置较大的宏,以确保其充足空间。

深究强化学习在谷歌芯片布局上的应用
from internet

模型结构

深究强化学习在谷歌芯片布局上的应用
Chip Placement with DL

1,基于PPO结构,由Policy π(.|s) 和 state-value V(s)网络构成。
2,输入State包含所有宏的Graph Embedding、当前要放置的宏的Id、netlist metadata(比如连线、宏标准单元等数量等netlist基础信息)、Mask信息(表达不能被放置的Grid位置)。
3,Policy π(.|s)采用转置卷积(如下图一种升维方法),最终Actions动作空间输出为128X128X1,与画布大小一致,表达的是画布上每一个Grid。

深究强化学习在谷歌芯片布局上的应用

4,注意这个宏布局过程按照顺序逐个摆放,对于Policy π(.|s)来说,是一种无放回的采样;此处引入Mask作为Filter,Policy每次只能从Mask之外的Grids采样
5,Mask一方面包含已经布局的Grid,同时也包含不满足Density约束的Grid; Density约束为了防止布局过于稠密,引起重叠6,Policy采样采取的是贪心方法,每次选择概率最大的Grid,这个和PPO本身是有所区别。
7,即时Reward表征芯片PPA,当芯片布局完成,给出最终奖赏,其它步骤都是0。直接通过EDA Tool获得Reward,环境反馈时间比较长,这是强化学习在真实应用场景中的一个常见困难。
采用如下布线长度和布线阻塞进行近似:深究强化学习在谷歌芯片布局上的应用

 布线长度Wirelength通过HPWL方法进行估计。

Graph Embedding

Netlist Graph,通过GCN网络,同时输出Edge Embeddings和Node Embeddings。

深究强化学习在谷歌芯片布局上的应用
Chip Placement with DL

GCN是CNN在图结构上的应用,输入为node features 和 邻接矩阵,如本例中的Macro Features和Netlist adjacency。
架构如下:深究强化学习在谷歌芯片布局上的应用

类比于CNN中的Kernel,GCN Kernel中大小K表达距离目标节点的半径
如上,比如k=1,表达只考虑距离(阶)目标节点小于等于1的节点,也包括自身。

经过GCN网络之后,就能得到最后的节点特征向量即node embeddings,本例中网络参数更新方式为:深究强化学习在谷歌芯片布局上的应用

训练Graph Embedding的数据与即时Reward模型数据一致,应该也可以在训练Reward模型时一并更新Graph Embedding参数,或者fine-tuning方式。

预训练Policy Network

为了加速Policy Network的学习,设计了一个监督学习回归任务:数据来自EDA自动布局的10000个示例,输入包括基于Edge embeddings均值的Graph Embedding和Netlist Matadata Fc embedding;输出为reward值(布线长度及阻塞)。深究强化学习在谷歌芯片布局上的应用

将训练好的Reward回归模型参数更新到强化学习PPO Model,通过fine-tuning,能够加速训练学习。

学习过程

1,先准备布局数据,以便预训练Reward回归模型,预训练Graph Embedding。
2,结合拓扑序及宏大小,生成宏布局顺序
3,收集训练数据(s, a, r, s'),在每一个Episode布局结束,布局标准单元并估计即时Reward
4,训练深度强化学习模型PPO深究强化学习在谷歌芯片布局上的应用
5,重复3、4,直至模型收敛。

布局标准单元(standard cells)

在进行Reward估计时,其实是需要将这个芯片都布局好,通过强化学习的方式将宏摆放完成后,还需要对标准单元进行摆放。标准单元的摆放,分两步:

1,通过

的聚类方式,将基本单元分成若干簇,算法的优化目标就是簇之间尽量少的连线。

深究强化学习在谷歌芯片布局上的应用
hMETIS

2,簇之间采用力导引(force-directed)方法。深究强化学习在谷歌芯片布局上的应用

总结

深度强化学习PPO应用于芯片宏布局中,提高了芯片设计效率
谷歌论文展示了高超的工程实践技艺,通过Graph Embedding、预训练等深度学习策略,以及丰富的先验知识,使学习约束到有限的时间内,整套解决问题的方案非常值得借鉴。 

相关文章: