Skip to main content

用于数据流分析和编译器优化的基于图形的程序表示

项目描述

ProGraML:机器学习的程序图

PyPI 版本 皮皮下载 执照

程序的富有表现力的、与语言无关的表示。

查看网站 了解更多信息。

介绍

ProGraML 是将程序表示为机器学习模型的输入。主要特点是:

  1. 简单:一切都可以通过 a 获得pip install,无需编译。开箱即用支持多种编程语言(C、C++、LLVM-IR、XLA)和多种图形格式(NetworkX、DGL、Graphviz、JSON)。

  2. 富有表现力:捕获整个程序中的每个控件、数据和调用关系。表示独立于源语言。可以以任何粒度添加特征和标签,以支持整个程序、每个指令或每个关系的推理任务。

  3. 快速:核心图构造是用 C++ 实现的,具有与 Python 的低开销接口。executor每个 API 方法都通过参数支持简单高效的并行化。

要陷入并使用我们的图形表示,请访问:

或者,如果论文更适合您的☕,请阅读我们的:

支持的编程语言

开箱即用支持以下编程语言和编译器 IR:

API 调用 支持的版本
C programl.from_cpp(), programl.from_clang() 高达 ISO C 2017
C++ programl.from_cpp(), programl.from_clang() 高达 ISO C++ 2020 DIS
LLVM-IR programl.from_llvm_ir() 3.8.0、6.0.0、10.0.0
XLA programl.from_xla_hlo_proto() 2.0.0

这里不支持您最喜欢的语言吗?提交功能请求

入门

使用以下命令安装最新版本的 Python 包:

pip install -U programl

API 非常简单,包括图创建操作、图转换操作和图序列化操作。这是每个的快速演示:

>>> import programl as pg

# Construct a program graph from C++:
>>> G = pg.from_cpp("""
... #include <iostream>
...
... int main(int argc, char** argv) {
...   std::cout << "Hello, world!" << std::endl;
...   return 0;
... }
... """)

# A program graph is a protocol buffer:
>>> type(G).__name__
'ProgramGraph'

# Convert the graph to NetworkX:
>>> pg.to_networkx(G)
<networkx.classes.multidigraph.MultiDiGraph at 0x7fbcf40a2fa0>

# Save the graph for later:
>>> pg.save_graphs('file.data', [G])

有关更多详细信息,请查看API 参考

贡献

欢迎补丁、错误报告、功能请求!请使用 问题跟踪器提交错误报告或问题。如果您想帮助编写代码,请阅读此文档

引文

如果您在任何工作中使用 ProGraML,请引用这篇论文

@inproceedings{cummins2021a,
  title={{ProGraML: A Graph-based Program Representation for Data Flow Analysis and Compiler Optimizations}},
  author={Cummins, Chris and Fisches, Zacharias and Ben-Nun, Tal and Hoefler, Torsten and O'Boyle, Michael and Leather, Hugh},
  booktitle = {Thirty-eighth International Conference on Machine Learning (ICML)},
  year={2021}
}

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置发行版

programl-0.3.2-py3-none-manylinux2014_x86_64.whl (43.8 MB 查看哈希

已上传 py3

programl-0.3.2-py3-none-macosx_10_15_x86_64.whl (47.5 MB 查看哈希

已上传 py3