跳转到主要内容

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)

initial closed loop-restructured branch-restructured

参考文献

许可证

版权所有(C) 2022, Anaconda, Inc. 保留所有权利。

在满足以下条件的情况下,允许重新分发和使用源代码和二进制代码,无论是否修改

源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。

二进制形式的重新分发必须在使用文档和/或其他与分发提供的材料中复制上述版权声明、本条件列表和以下免责声明。本软件由版权所有者和贡献者提供“按原样”以及任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性保证。在任何情况下,版权所有者或贡献者不应对任何直接、间接、偶然、特殊、示范性或后果性的损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)负责,无论此类损害是由于何种原因造成的,以及根据任何理论责任(合同、严格责任或侵权(包括疏忽或不计后果))。

项目详情


下载文件

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

源代码分发

numba_rvsdg-0.0.5.tar.gz (37.8 kB 查看哈希值)

上传时间 源代码

构建分发

numba_rvsdg-0.0.5-py3-none-any.whl (43.9 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面