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.

论文阅读: CCF A 2021 PROGRAML:用于数据流分析和编译器优化的基于图的程序表示 (PMLR)的更多相关文章

  1. [论文阅读] RNN 在阿里DIEN中的应用

    [论文阅读] RNN 在阿里DIEN中的应用 0x00 摘要 本文基于阿里推荐DIEN代码,梳理了下RNN一些概念,以及TensorFlow中的部分源码.本博客旨在帮助小伙伴们详细了解每一步骤以及为什 ...

  2. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  3. 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

    今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...

  4. 【医学图像】3D Deep Leaky Noisy-or Network 论文阅读(转)

    文章来源:https://blog.csdn.net/u013058162/article/details/80470426 3D Deep Leaky Noisy-or Network 论文阅读 原 ...

  5. 论文阅读 | FCOS: Fully Convolutional One-Stage Object Detection

    论文阅读——FCOS: Fully Convolutional One-Stage Object Detection 概述 目前anchor-free大热,从DenseBoxes到CornerNet. ...

  6. 论文阅读 | FoveaBox: Beyond Anchor-based Object Detector

    论文阅读——FoveaBox: Beyond Anchor-based Object Detector 概述 这是一篇ArXiv 2019的文章,作者提出了一种新的anchor-free的目标检测框架 ...

  7. 论文阅读 | Region Proposal by Guided Anchoring

    论文阅读 | Region Proposal by Guided Anchoring 相关链接 论文地址:https://arxiv.org/abs/1901.03278 概述 众所周知,anchor ...

  8. 论文阅读:Face Recognition: From Traditional to Deep Learning Methods 《人脸识别综述:从传统方法到深度学习》

     论文阅读:Face Recognition: From Traditional to Deep Learning Methods  <人脸识别综述:从传统方法到深度学习>     一.引 ...

  9. 【论文阅读】Learning Dual Convolutional Neural Networks for Low-Level Vision

    论文阅读([CVPR2018]Jinshan Pan - Learning Dual Convolutional Neural Networks for Low-Level Vision) 本文针对低 ...

  10. 论文阅读笔记六十四: Architectures for deep neural network based acoustic models defined over windowed speech waveforms(INTERSPEECH 2015)

    论文原址:https://pdfs.semanticscholar.org/eeb7/c037e6685923c76cafc0a14c5e4b00bcf475.pdf 摘要 本文研究了利用深度神经网络 ...

随机推荐

  1. ASP-Net-Core-6设置运行环境-开发、测试、生产

    title: ASP.Net Core 6设置运行环境(开发.测试.生产) date: 2022-09-24 17:43:49 tags: - .NET 如果我们设置了好几种appsettings.j ...

  2. [Leetcode]寻找峰值

    题目 思路 如果常规解法不考虑时间复杂度,直接遍历即可得到峰值,时间复杂度为O(n),题目要求O(logn),因此我们需要使用二分法. 首先考虑题目要求:nums[-1]=nums[n]=-∞,因此在 ...

  3. 图文并茂学习记录--从零开始进行微信小程序开发+引入Vant Weapp组件

    新建项目 创建页面 让人崩溃的东西来了 经过研究,发现这个图标不可以放在二级,只能一级 项目初始化 引入VANT组件库 文档地址:https://youzan.github.io/vant-weapp ...

  4. Java自动装箱与拆箱

    装箱就是自动将基本数据类型转换为包装器类型(int-->Integer).调用方法:Integer的 valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本数据类型(Integer- ...

  5. Unity_UIWidgets - 组件Drawer

    Unity_UIWidgets - 组件Drawer 组件Drawer Drawer 构造 代码 效果 Drawer使用完毕 结语 图标Icon QQ 今日无推荐 组件Drawer 各位伙伴,周日愉快 ...

  6. Win10下yolov8 tensorrt模型加速部署【实战】

    Win10下yolov8 tensorrt模型加速部署[实战] TensorRT-Alpha基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10.linux,在20 ...

  7. vue学习笔记(二) ---- vue实例的生命周期

    vue实例的生命周期 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期函 ...

  8. FAQ os.system调用失效问题

    os.system调用失效问题 背景 有个学员反馈allure无法生成报告 # 示例代码 import pytest,os def test_os(): pass if __name__ == '__ ...

  9. 翻译《threejsfundamentals》离屏渲染+web-worker一篇

    Three.js OffscreenCanvas    OffscreenCanvas是一种相对较新的浏览器功能,目前仅在Chrome中可用,但显然也即将适用于其他浏览器. OffscreenCanv ...

  10. STM32F0_HAL初始化系列:FLASH写入

    //读 read_temp = *(__IO uint32_t*)value_address; //写 static void flash_write(uint32_t address, uint32 ...