exo-lang/exo

Public

Exocompilation for productive programming of hardware accelerators

exo-lang.dev

许可协议

MIT license

375 stars 32 forks

Branches Tags Activity

基础

安装 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.cexo_file.h。 默认情况下,这些文件将在名为 exo_file/ 的目录中创建。 你可以使用可选参数来自定义输出:

从源码构建 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 中。

如果您使用 Exo,请引用编译器和论文!