Numba兼容的RVSDG工具
项目描述
numba-rvsdg
Numba兼容的RVSDG(区域化值状态依赖图)工具。
关于
此存储库包含用于处理RVSDG(区域化值状态依赖图)的Numba兼容工具。RVSDG是一种中间表示(IR),适用于在Numba中对Python字节码进行规范化。
此存储库中的代码是2015年Bahmann中CFG重构算法的实现,具体为第4.1和4.2节:即“循环重构”和“分支重构”。这对于Numba来说很有趣,因为它们有助于清楚地识别Python字节码中的区域。
依赖关系
- Python 3.11
- graphviz
- pyyaml
您可以使用以下命令创建conda环境:
conda env create -n numba-rvsdg python=3.11 python-graphviz
conda activate numba-rvsdg
pip install pyyaml
在撰写本文时,由于默认情况下pyyaml
对Python 3.11不可用,因此必须使用pip
进行安装。
概览
此存储库包含以下文件
numba_rvsdg
├── __init__.py
├── core
│ ├── datastructures
│ │ ├── basic_block.py # BasicBlock implementation
│ │ ├── scfg.py # SCFG implementation, maps names to blocks
│ │ ├── byte_flow.py # ByteFlow implementation, SCFG + bytecode
│ │ ├── flow_info.py # Converts program to ByteFlow
│ ├── transformations.py # Algorithms
│ └── utils.py # Miscellaneous utilities
├── networkx_vendored
│ └── scc.py # Strongly Connected Componets (loop detection)
├── rendering
│ └── rendering.py # Graphivz based rendering of SCFGs
├── tests
│ ├── simulator.py # Simulator utility for running SCFGs
│ ├── test_byteflow.py # Testung ByteFlow and others
│ ├── test_fig3.py # Testing fig. 3 from Bahman2015
│ ├── test_fig4.py # Testing fig. 4 from Bahman2015
│ ├── test_simulate.py # Simulator based testing
│ └── test_transforms.py # Testing graph transformations
└── utils
example
以下将处理给定的示例函数并显示四个不同阶段。"初始"是CPython生成的未经处理的字节码。"关闭"是初始CFG的封闭变体。"循环重构"是循环重构后的版本,"分支重构"是包括关闭、循环重构和分支重构的最终形式。
# Example: for loop with branch and early exit
from numba_rvsdg.rendering.rendering import render_func
def foo(n):
c = 0
for i in range(n):
c += 1
if i == 100:
break
return c
render_func(foo)
参考文献
Reismann2020
-- https://arxiv.org/pdf/1912.05036.pdf -- 描述了RVSDGs的概念Bahmann2015
-- https://dl.acm.org/doi/pdf/10.1145/2693261 -- 描述了实现的变换算法
许可证
版权所有(C) 2022, Anaconda, Inc. 保留所有权利。
在满足以下条件的情况下,允许重新分发和使用源代码和二进制代码,无论是否修改
源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。
二进制形式的重新分发必须在使用文档和/或其他与分发提供的材料中复制上述版权声明、本条件列表和以下免责声明。本软件由版权所有者和贡献者提供“按原样”以及任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证。在任何情况下,版权所有者或贡献者不应对任何直接、间接、偶然、特殊、示范性或后果性的损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)负责,无论此类损害是由于何种原因造成的,以及根据任何理论责任(合同、严格责任或侵权(包括疏忽或不计后果))。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
numba_rvsdg-0.0.5.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 49f01cb55319802b523e0b7fbb0eb071fda86718bedea034b6cd1a9b308e1cb7 |
|
MD5 | 31f7b5a200c08820bc4d017929a7e448 |
|
BLAKE2b-256 | 1004f29ee7653c6926791ec32179bbc8342597a1a4921ce6892073c97bd8c906 |
numba_rvsdg-0.0.5-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 62359a2a275bad4daff50a05eaaa4c3341cfe81fe4c997e56e8c6d61d9b49a5b |
|
MD5 | ce2c36988a5742e89441d62cd9df960a |
|
BLAKE2b-256 | e2dcbfb3d7219698953454965f5dad0fa35e9264fe6df3f01af24a3d7bf95a31 |