论文阅读: CCF A 2021 PROGRAML:用于数据流分析和编译器优化的基于图的程序表示 (PMLR)
Motivation:
编译器实现是一项复杂而昂贵的活动。出于这个原因,人们对使用机器学习来自动化各种编译器任务产生了极大的兴趣,大多数工作都将注意力限制在选择编译器启发式或做出优化决策。现有的基于专家人工操作和基于机器学习的方法都不足以满足需求。(决策需要对程序及其行为进行推理。 专家决策通常依赖于数据流分析,工作量大,复杂且难以迁移;机器学习工作通常将程序的全部行为表示为一个固定长度、静态计算的特征向量。这类方法的明显弱点是,它们被添加的dead code所混淆,dead code改变了它们的特征向量,而不会改变程序的行为或对优化的响应。 这种学习算法无法学习它们自己对程序的抽象解释,因此无法解决这种情况。)所以需要一个程序表示,使机器学习算法能够通过开发自己的数据流分析来推理程序的执行。
Challenge:
- 输入的表示方式——如何把程序转换成图并尽可能多的涵盖数据流分析相关信息;
- 数据的处理方式——依赖关系等信息获取;
Contribution:
- 提出了一种可移植的、独立于语言的、由编译器IR派生的程序的图形表示——PROGRAML, 可以同时捕获指令和操作数之间的控制、数据和调用关系,以及它们的顺序和数据类型。 Programl是一个与编译器无关的设计,文章做了LLVM和XLA IRs下的实现。;
- 引入基准数据集DeepDataFlow(编译器分析任务,作为有监督的机器学习问题,多领域,多语言,共85亿个数据流分析分类标签);————这个后面可以去看一下,能不能用
- 模型选用Gated-Graph Neural Networks (GGNN) ,然后就是对比实验结果巴拉巴拉。。。
Methodllogy:
构图部分:
PROGRAML将程序转化为有向图,指令、变量、常量为节点。它们之间的关系为边,边被类型化以区分控件流、数据流和调用流。
图3b为full-flow graph,节点为指令,边为关系。——控制流部分
然后把常数和变量作为节点加入其中(图3c),产生数据流边(常量和变量与使用它们作为操作数的指令之间的关系和指令到产生的变量之间的关系)。——数据流部分
最后再插入调用边来表征调用函数的指令和被调用函数的入口指令之间的关系。——call-flow部分
生成的图是多个小图合成的一个大图。小图间由call边相连。
算法模型部分:
基于GGNN[1]改编;包括三个阶段:输入编码、消息传播和更新以及结果读出。
Experiment:
以sequential model 和graph model做baseline做对比实验。(基于Vocabulary Coverage, DDF-30: Testing on Limited Problem Size, DDF-60: Generalizing to Larger Problems和DDF: Scalability Challenges分析)
Reference:
[1] Li, Y., Zemel, R., Brockscmidt, M., and Tarlow, D. Gated Graph Sequence Neural Networks. arXiv:1511.05493,2015.
最新文章
- Using FreeMarker templates (FTL)- Tutorial
- php模式设计之 工厂模式
- 学习记录 java泛型资料
- 【剑指offer】Q18:树的子结构
- bw R/3端配置 (转)
- Tornado 中的 get() 或 post() 方法
- Java泛型中的extends和super关键字
- 关闭MyEclipse的Quick Update
- c语言中的 %u 什么意思啊?
- UVa 10827 - Maximum sum on a torus
- Java 三目运算符表达式的一些问题
- Python练习100则--部分概念的没有做
- Tihinkphp3.2整合最新版阿里大鱼进行短信验证码发送
- Git忽略远程已存在的文件
- 一个js小游戏----总结
- git 的 cat-file 的命令用法
- Javaweb——————sql常用思维导图
- GitHub上传本地文件
- UVA 11100 The Trip, 2007 (贪心)
- JavaScript --Window-对话框
热门文章
- CVE-2020-13933
- 数论专项复习(一)扩展欧几里得算法(exgcd)
- 可持久化并查集学习笔记 | 题解P3402 可持久化并查集
- ZXing CaptureActivity黑屏问题
- 读Java8函数式编程笔记06_Lambda表达式编写并发程序
- Backbone前端框架解读
- spring-in-action-初识反应式编程reactor
- WinNTSetup V5.3.0 Bata5 单文件版
- Cannot find module ‘xxx\node_modules\yorkie\bin\install.js‘
- C++_bind用法