tiramisu

GitHub
958 137 较难 1 次阅读 1周前MIT开发框架语言模型
AI 解读 由 AI 自动生成,仅供参考

Tiramisu 是一款专为高性能计算设计的多面体编译器,旨在帮助开发者轻松编写既快速又具备高度可移植性的数据并行算法。在深度学习、图像处理、线性代数及机器学习等领域,算法往往需要在 CPU、GPU、FPGA 或分布式集群等多种硬件上高效运行,而手动针对不同架构优化代码不仅耗时且极易出错。Tiramisu 正是为了解决这一痛点而生,它允许用户将算法逻辑与具体的优化策略分离开来。

通过简洁的 C++ API,用户只需描述计算任务本身(即"Tiramisu 表达式”),随后即可灵活指定并行化、向量化等优化指令。其核心优势在于基于强大的“多面体模型”,能够自动探索并应用复杂的循环优化和数据布局变换,从而生成针对特定硬件极致优化的底层代码。目前,Tiramisu 已支持多核 X86 处理器、Nvidia GPU、Xilinx FPGA 以及基于 MPI 的分布式系统,并便于扩展至新架构。

这款工具特别适合从事高性能计算研究的科研人员、系统级软件工程师以及需要跨平台部署复杂算法的开发者。如果你希望在不牺牲性能的前提下提升代码的通用性,或者想深入探索编译器优化技术,Tiramisu 提供了一个强大而灵活的实验与生产平台。

使用场景

某高性能计算团队正在开发一套用于实时气象预测的三维热扩散模拟系统,需要在多核 CPU 和 GPU 集群上高效运行复杂的嵌套循环算法。

没有 tiramisu 时

  • 工程师必须手动为不同硬件(如 X86 CPU 与 Nvidia GPU)编写多套底层优化代码,维护成本极高且容易出错。
  • 调整循环分块大小或并行策略需要反复修改底层 C++/CUDA 代码,每次尝试新优化方案都耗时数天。
  • 难以充分利用多面体模型自动挖掘深层循环依赖关系,导致内存访问模式不佳,缓存命中率低。
  • 算法逻辑与性能优化代码高度耦合,一旦更换目标架构,整个计算核心几乎需要重写。
  • 缺乏统一接口来描述数据布局变换,团队在适配分布式 MPI 环境时经常遇到数据对齐难题。

使用 tiramisu 后

  • 只需通过简洁的 C++ API 定义一次算法逻辑,tiramisu 即可自动为多核 CPU、GPU 甚至 FPGA 生成对应的高效代码。
  • 开发者仅需调用 parallelizevectorize 等高级指令即可切换优化策略,无需触碰底层实现,迭代效率提升十倍。
  • 基于多面体编译技术,tiramisu 自动推导最优循环变换与数据重排,显著减少缓存缺失,大幅提升计算吞吐量。
  • 算法表达与具体架构解耦,同一份源码可无缝部署到从单机服务器到大规模 MPI 集群的不同环境中。
  • 内置对数据布局变换的原生支持,轻松处理复杂的数据分区与对齐问题,简化了分布式场景下的开发流程。

tiramisu 让科学家专注于算法本身,将繁琐的跨平台性能优化交给编译器自动完成,真正实现了“一次编写,处处高速运行”。

运行环境要求

操作系统
  • Linux (Ubuntu 18.04+)
  • macOS (13.0.1+)
GPU
  • 可选
  • 若需生成 CUDA 代码,需安装 NVIDIA CUDA Toolkit(具体版本未说明,示例中提及 LLVM 14 环境)
内存

未说明(编译 LLVM 耗时较长,建议充足内存)

依赖
notes该工具是一个编译器而非深度学习模型,主要用于生成高性能并行代码。支持多核 CPU、NVIDIA GPU、Xilinx FPGA 和分布式 MPI 环境。若使用脚本自动安装依赖(方法 3),编译 LLVM 可能需要数小时。如需使用 Python 绑定,需额外安装 Numpy。官方提供预编译的 VirtualBox 虚拟机镜像以供快速体验。
python3.8+
CMake >= 3.22
LLVM 14
Halide
ISL (Integer Set Library)
Autoconf
libtool
Ninja
OpenMPI (可选,用于分布式)
Pybind11 2.10.2 (可选,用于 Python 绑定)
Cython (可选,用于 Python 绑定)
tiramisu hero image

快速开始

MIT 许可

概述

Tiramisu 是一款用于表达快速且可移植的数据并行计算的编译器。它提供了一个简单的 C++ API,用于描述算法(称为“Tiramisu 表达式”)以及如何通过编译器对这些算法进行优化。Tiramisu 可广泛应用于线性代数与张量代数、深度学习、图像处理、模板计算和机器学习等领域。

Tiramisu 编译器基于多面体模型,因此能够表达大量的循环优化和数据布局变换。目前,它支持的目标平台包括:(1) 多核 x86 CPU;(2) NVIDIA GPU;(3) Xilinx FPGA(使用 Vivado HLS);以及 (4) 分布式机器(使用 MPI)。该编译器的设计旨在方便集成针对新架构的代码生成器。

示例

以下是使用 C++ API 指定的一个 Tiramisu 程序示例:

// 使用 Tiramisu 表达式的 C++ 代码。
#include "tiramisu/tiramisu.h"
using namespace tiramisu;

void generate_code()
{
    // 指定要创建的函数名称。
    tiramisu::init("foo");

    // 声明两个循环变量 i 和 j,满足 0<=i<100 且 0<=j<100。
    var i("i", 0, 100), j("j", 0, 100);

    // 声明一个 Tiramisu 表达式(算法),等价于以下 C 代码:
    // for (i=0; i<100; i++)
    //   for (j=0; j<100; j++)
    //     C(i,j) = 0;
    computation C({i,j}, 0);
    
    // 指定优化策略
    C.parallelize(i);
    C.vectorize(j, 4);
    
    buffer b_C("b_C", {100, 100}, p_int32, a_output);
    C.store_in(&b_C);

    // 生成代码
    C.codegen({&b_C}, "generated_code.o");
}

从源码构建 Tiramisu

本节将介绍如何从源码构建 Tiramisu。以下安装说明已在 Linux Ubuntu (18.04) 和 macOS (13.0.1) 上测试通过,但也应适用于其他版本的 Linux 和 macOS。

先决条件

必需
  1. CMake:版本 3.22 或更高。

  2. Autoconflibtool

  3. Ninja

可选
  1. OpenMPIOpenSSH:如果您希望生成并运行分布式代码(MPI)。

  2. CUDA 工具包:如果您希望生成并运行 CUDA 代码。

  3. Python 3.8 或更高版本:如果您希望使用 Python 绑定。(同时需要 Pybind 2.10.2、Cython 和 NumPy)。

构建方法

构建 Tiramisu 有三种方式:

  1. 通过 spack 安装,它会为你从源码编译所有依赖。
  2. 从源码编译,但使用系统包管理器来安装依赖。
  3. 完全从源码编译,并使用我们的安装脚本。

后两种方法的区别仅在于如何设置依赖项。

方法 1:通过 spack 构建

先安装 spack,然后运行:

spack install tiramisu

方法 2:从源码编译,但使用系统包管理器安装依赖

此方法分为两个步骤:

  1. 使用 Homebrew 或 Apt 安装依赖。
  2. 使用 CMake 构建 Tiramisu。
安装依赖
使用 Homebrew 安装依赖

如果你在 macOS 上并使用 Homebrew,可以运行以下命令来设置依赖:

brew install cmake
brew install llvm@14
brew install halide
brew install isl
brew link halide
brew link isl

如果这些命令提示你更新 PATH,请按照提示操作。例如,你可以通过以下命令找到 isl 的头文件和库目录:

brew info isl
ISL_INCLUDE_DIRECTORY=..
ISL_LIB_DIRECTORY=..
使用 Apt 安装依赖

如果你在 Ubuntu/Debian 上,可以使用 apt 来安装依赖:

wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 14 all
sudo apt-get install liblld-14-dev llvm-14-runtime
sudo apt-get install libllvm14 llvm-14-dev
sudo apt-get install llvm14-*
sudo apt-get install halide
sudo apt-get install libisl-dev

使用以下命令可以找到 isl 的头文件和库目录:

dpkg -L libisl-dev
ISL_INCLUDE_DIRECTORY=..
ISL_LIB_DIRECTORY=..
使用 CMake 构建 Tiramisu
  1. 获取 Tiramisu 源码:
git clone https://github.com/Tiramisu-Compiler/tiramisu.git
cd tiramisu
mkdir build
  1. 配置 configure.cmake 文件。特别需要选择是否使用 GPU 或 MPI 设置,是否启用 Python 绑定,以及是否启用自动调度器。你可能还需要添加其他选项来支持这些功能。

  2. 进行配置:

cmake . -B build -DISL_LIB_DIRECTORY=$ISL_LIB_DIRECTORY -DISL_INCLUDE_DIRECTORY=$ISL_INCLUDE_DIRECTORY -DPython3_EXECUTABLE=`which python3`

如果你想进行安装,可以添加 CMAKE_INSTALL_PREFIX。如果要安装 Python 绑定,还需添加 Tiramisu_INSTALL_PYTHONDIR,以指定 Python 包的安装路径。你需要将这些安装路径添加到相关的环境变量中,如 PYTHONPATHLD_LIBRARY_PATH

  1. 编译:
cmake --build build

如果需要安装,可以使用 cmake --install 命令。

方法 3:从源码编译,但使用我们的脚本安装依赖

此方法同样分为两个步骤:

  1. 使用我们的脚本安装依赖。
  2. 使用 CMake 构建 Tiramisu。
通过脚本安装依赖
  1. 获取 Tiramisu 源码:
git clone https://github.com/Tiramisu-Compiler/tiramisu.git
cd tiramisu
  1. 获取并安装 Tiramisu 的子模块(ISL、LLVM 和 Halide)。这一步可能需要几分钟到几小时不等,因为下载和编译 LLVM 需要较长时间。
./utils/scripts/install_submodules.sh <TIRAMISU_ROOT_DIR>
- 注意:请确保 `<TIRAMISU_ROOT_DIR>` 是绝对路径!
  1. 可选:编辑 configure.cmake 文件来配置 Tiramisu 的构建。只有当你需要生成 MPI 或 GPU 代码、运行 BLAS 基准测试,或者想要构建自动调度器模块时,才需要进行此步骤。configure.cmake 文件中的注释详细说明了每个变量的作用及如何设置。

    • 若要使用 GPU 后端,需将 USE_GPU 设置为 TRUE。如果在编译 Tiramisu 时未能自动找到 CUDA 库,系统会提示你提供 CUDA 库的路径。
    • 若要使用分布式后端,需将 USE_MPI 设置为 TRUE。如果未自动找到 MPI 库,则需要设置 MPI_INCLUDE_DIRMPI_LIB_DIRMPI_LIB_FLAGS 等变量。
    • 若要构建自动调度器模块,需将 USE_AUTO_SCHEDULER 设置为 TRUE
  2. 将 Halide 的 CMake 路径添加到 CMAKE_PREFIX_PATH

export CMAKE_PREFIX_PATH=<TIRAMISU_ROOT_DIR>/3rdParty/Halide/build/:$CMAKE_PREFIX_PATH
  1. 构建主 Tiramisu 库:
mkdir build
cd build
cmake ..
cmake --build .
  1. 如果你想构建自动调度器模块,在 configure.cmake 中将 USE_AUTO_SCHEDULER 设置为 TRUE,并在完成 Tiramisu 构建后执行:
make tiramisu_auto_scheduler

在虚拟机上使用旧版 Tiramisu

用户可以使用 Tiramisu 的 虚拟机磁盘镜像。该镜像是使用 VirtualBox (5.2.12) 创建的,其中已预编译好 Tiramisu,可以直接使用。编译时使用的指令与本 README 文件中的说明一致。

下载镜像后,解压并使用 VirtualBox 打开 TiramisuVM.vbox 文件。

虚拟机启动后,打开终端并进入 Tiramisu 目录:

cd /home/b/tiramisu/

如果提示输入用户名/密码:

用户名:b
密码:b

开始使用

运行测试

假设你在 build/ 目录下,运行所有测试:

make test

ctest

若只想运行单个测试(例如 test_01),可以执行:

ctest -R 01

这将编译并运行代码生成器和包装器。

要查看测试的详细输出,可以在 ctest 命令中添加 --verbose 选项。

版本历史

V0.22018/07/26
V0.12018/07/17

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|2周前
Agent开发框架图像

n8n

n8n 是一款面向技术团队的公平代码(fair-code)工作流自动化平台,旨在让用户在享受低代码快速构建便利的同时,保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点,帮助用户轻松连接 400 多种应用与服务,实现复杂业务流程的自动化。 n8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”:既可以通过直观的可视化界面拖拽节点搭建流程,也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外,n8n 原生集成了基于 LangChain 的 AI 能力,支持用户利用自有数据和模型构建智能体工作流。在部署方面,n8n 提供极高的自由度,支持完全自托管以保障数据隐私和控制权,也提供云端服务选项。凭借活跃的社区生态和数百个现成模板,n8n 让构建强大且可控的自动化系统变得简单高效。

184.7k|★★☆☆☆|今天
数据工具开发框架Agent

AutoGPT

AutoGPT 是一个旨在让每个人都能轻松使用和构建 AI 的强大平台,核心功能是帮助用户创建、部署和管理能够自动执行复杂任务的连续型 AI 智能体。它解决了传统 AI 应用中需要频繁人工干预、难以自动化长流程工作的痛点,让用户只需设定目标,AI 即可自主规划步骤、调用工具并持续运行直至完成任务。 无论是开发者、研究人员,还是希望提升工作效率的普通用户,都能从 AutoGPT 中受益。开发者可利用其低代码界面快速定制专属智能体;研究人员能基于开源架构探索多智能体协作机制;而非技术背景用户也可直接选用预置的智能体模板,立即投入实际工作场景。 AutoGPT 的技术亮点在于其模块化“积木式”工作流设计——用户通过连接功能块即可构建复杂逻辑,每个块负责单一动作,灵活且易于调试。同时,平台支持本地自托管与云端部署两种模式,兼顾数据隐私与使用便捷性。配合完善的文档和一键安装脚本,即使是初次接触的用户也能在几分钟内启动自己的第一个 AI 智能体。AutoGPT 正致力于降低 AI 应用门槛,让人人都能成为 AI 的创造者与受益者。

183.6k|★★★☆☆|今天
Agent语言模型插件

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

161.7k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

109.2k|★★☆☆☆|2天前
开发框架图像Agent