Skip to main content

A Graph-based Program Representation for Data Flow Analysis and Compiler Optimizations

Project description

ProGraML: Program Graphs for Machine Learning

PyPI version PyPi Downloads License

An expressive, language-independent representation of programs.

Check the website for more information.

Introduction

ProGraML is a representation for programs as input to a machine learning model. The key features are:

  1. Simple: Everything is available through a pip install, no compilation required. Supports several programming languages (C, C++, LLVM-IR, XLA) and several graph formats (NetworkX, DGL, Graphviz, JSON) out of the box.

  2. Expressive: Captures every control, data, and call relation across entire programs. The representation is independent of the source language. Features and labels can be added at any granularity to support whole-program, per-instruction, or per-relation reasoning tasks.

  3. Fast: The core graph construction is implemented in C++ with a low overhead interface to Python. Every API method supports simple and efficient parallelization through an executor parameter.

To get stuck in and play around with our graph representation, visit:

Or if papers are more your ☕, have a read of ours:

Supported Programming Languages

The following programming languages and compiler IRs are supported out-of-the-box:

Language API Calls Supported Versions
C programl.from_cpp(), programl.from_clang() Up to ISO C 2017
C++ programl.from_cpp(), programl.from_clang() Up to 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

Is your favorite language not supported here? Submit a feature request!

Getting Started

Install the latest release of the Python package using:

pip install -U programl

The API is very simple, comprising graph creation ops, graph transform ops, and graph serialization ops. Here is a quick demo of each:

>>> 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])

For further details check out the API reference.

Contributing

Patches, bug reports, feature requests are welcome! Please use the issue tracker to file a bug report or question. If you would like to help out with the code, please read this document.

Citation

If you use ProGraML in any of your work, please cite this paper:

@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}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

programl-0.3.2-py3-none-manylinux2014_x86_64.whl (43.8 MB view details)

Uploaded Python 3

programl-0.3.2-py3-none-macosx_10_15_x86_64.whl (47.5 MB view details)

Uploaded Python 3 macOS 10.15+ x86-64

File details

Details for the file programl-0.3.2-py3-none-manylinux2014_x86_64.whl.

File metadata

  • Download URL: programl-0.3.2-py3-none-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 43.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for programl-0.3.2-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 79e88a4d87adb98bc6f860c6284910db3f962212e75493ba3768003c66ecb9a6
MD5 bbf75e734ad357d4f38d62e589b8cc85
BLAKE2b-256 442d9537ac3526bc51fcf82a580c1f1c936bc1fc3bba00062468bc8efc98d474

See more details on using hashes here.

File details

Details for the file programl-0.3.2-py3-none-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: programl-0.3.2-py3-none-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 47.5 MB
  • Tags: Python 3, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for programl-0.3.2-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 5479b1f592ceb4a8bfe9b6c75d4f12e89652ed00c198b2281159e134cfbffb5a
MD5 0e054c768b08321c172d9b4897251b55
BLAKE2b-256 e33792350c0811e146234b94f93de065e903238f6db80b614f00b0dc4503f890

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page