Exo:用于高效硬件加速器编程的 Exocompilation
exo-lang/exo
Public
Exocompilation for productive programming of hardware accelerators
许可协议
基础
安装 Exo
我们支持 Python 3.9 及以上版本。如果只是使用 Exo,可以使用 pip
安装:
$ pip install exo-lang
如果遇到 ModuleNotFoundError: No module named 'attrs'
,请通过 pip install --upgrade attrs
升级你的 attrs 模块。
编译 Exo
Exo 文件可以直接使用 Python 执行:
$ python exo_file.py
要生成 C 和头文件,请使用 exocc
命令:
$ exocc exo_file.py
运行该命令将生成两个文件:exo_file.c
和 exo_file.h
。 默认情况下,这些文件将在名为 exo_file/
的目录中创建。 你可以使用可选参数来自定义输出:
-o
参数允许您指定不同的目录名称。--stem
参数允许您为 C 文件和头文件指定自定义名称。
从源码构建 Exo
我们积极使用较新的 Python 3.x 功能。 如果您收到有关不受支持的功能的错误,请使用 Python 3.9 或 3.10。
像任何其他 Python 项目一样设置 Exo 以进行开发。 我们_强烈_建议您使用虚拟环境。
$ git clone git@github.com:exo-lang/exo.git
$ cd exo/
$ git submodule update --init --recursive
$ python -m venv ~/.venv/exo
$ source ~/.venv/exo/bin/activate
(exo) $ python -m pip install -U pip setuptools wheel
(exo) $ python -m pip install -r requirements.txt
(exo) $ pre-commit install
这将确保您检出子模块,并且运行 pre-commit 脚本(运行自动格式化程序,未来可能还有其他工具)。
最后,您可以构建并安装 Exo。
(exo) $ python -m build .
(exo) $ pip install dist/*.whl
PySMT
根据您的设置,正确运行 PySMT 可能很困难。 您需要独立安装一个求解器,例如 Z3 或 CVC4,即使这样,也可能很难让 PySMT 库正确找到该求解器。 我们已包含 z3-solver
软件包作为要求,希望可以避免此问题,但您也可以独立安装 z3(或您选择的求解器)。
测试注意事项
依赖
构建系统(必需)
Exo 测试工具生成 C 代码,因此需要使用未知的(即系统)编译器进行编译和链接。 为此,它会生成 CMake 构建文件并在后台调用 CMake。
因此,您必须安装 CMake 3.21 或更高版本。
默认情况下,CMake 将使用 Ninja 作为其后端,但是可以通过将环境变量 CMAKE_GENERATOR
设置为 Unix Makefiles
来覆盖此设置,以防您不想安装 Ninja。
SDE(可选)
为了在不支持 x86 特性的处理器(例如,AVX-512 或 AMX)上测试 x86 特性,我们依赖 Intel Software Development Emulator 作为可选依赖项。 依赖此功能的测试(主要是针对 AMX)会在 SDE_PATH
环境变量定义的路径或系统 PATH
中查找 sde64
,如果它不可用,则跳过这些测试。
运行测试
要运行测试,只需在项目根目录中键入
pytest
运行覆盖率测试
要运行带有覆盖率测试的 pytest,请执行
pytest --cov=./ --cov-report=html
然后,如果您想查看带注释的源文件,请打开 ./htmlcov/index.html
。
了解 Exo
查看 examples 目录以获取调度示例,并查看 documentation 目录以获取有关 Exo 的各种文档。
联系方式
如有任何疑问,请联系 exo@mit.edu 或 yuka@csail.mit.edu。
出版物
Exo 的主要贡献和想法发表在以下两篇论文中。 其设计原则和功能的要点总结在 Design.md 中。
- Exocompilation for Productive Programming of Hardware Accelerators Yuka Ikarashi*, Gilbert Louis Bernstein*, Alex Reinking, Hasan Genc, Jonathan Ragan-Kelley PLDI 2022 带有附录的完整版本可以在 这里 找到。
- Exo 2: Growing a Scheduling Language Yuka Ikarashi, Kevin Qian, Samir Droubi, Alex Reinking, Gilbert Bernstein, Jonathan Ragan-Kelley ASPLOS 2025 带有附录的完整版本可以在 这里 找到。
如果您使用 Exo,请引用编译器和论文!