TVM 与 IREE 的调度算法对比(IREE更适合NPU)

TVM 与 IREE 的调度算法对比

文章目录

  • [TVM 与 IREE 的调度算法对比](#TVM 与 IREE 的调度算法对比)
  • [1. TVM 的调度算法体系(TVM, AutoTVM, AutoScheduler)](#1. TVM 的调度算法体系(TVM, AutoTVM, AutoScheduler))
    • [1.1 TVM 手写调度(TIR Schedule)](#1.1 TVM 手写调度(TIR Schedule))
      • [✔ Topological Scheduling(拓扑调度)](#✔ Topological Scheduling(拓扑调度))
      • [✔ Compute-Ahead / Inline / Fuse 调度(Heuristic)](#✔ Compute-Ahead / Inline / Fuse 调度(Heuristic))
    • [1.2 TVM AutoTVM(旧体系)](#1.2 TVM AutoTVM(旧体系))
      • [✔ Simulated Annealing(模拟退火)为主](#✔ Simulated Annealing(模拟退火)为主)
    • [1.3 TVM AutoScheduler(Ansor,新体系)](#1.3 TVM AutoScheduler(Ansor,新体系))
      • 核心算法包括:
      • [✔ Sketch Generation(启发式生成"草图")](#✔ Sketch Generation(启发式生成“草图”))
      • [✔ Evolutionary Search(遗传算法)](#✔ Evolutionary Search(遗传算法))
      • [✔ ML-based Cost Model(XGBoost → GNN)](#✔ ML-based Cost Model(XGBoost → GNN))
      • [✔ Locality-aware Tiling / Cache-aware Scheduling(启发式)](#✔ Locality-aware Tiling / Cache-aware Scheduling(启发式))
      • [TVM 自动调度小结](#TVM 自动调度小结)
  • [2. IREE 的调度算法体系](#2. IREE 的调度算法体系)
  • [2.1 Graph-level(MHLO/StableHLO → Linalg)](#2.1 Graph-level(MHLO/StableHLO → Linalg))
      • [✔ Topological Scheduling(拓扑调度)](#✔ Topological Scheduling(拓扑调度))
      • [✔ Pattern-based Fusion(模式驱动融合)](#✔ Pattern-based Fusion(模式驱动融合))
  • [2.2 Linalg-level(Kernel-level)](#2.2 Linalg-level(Kernel-level))
      • [✔ Tiling + Loop Promotion(启发式规则)](#✔ Tiling + Loop Promotion(启发式规则))
      • [✔ Linalg → Vector → LLVM 转换序列(固定 pass pipeline)](#✔ Linalg → Vector → LLVM 转换序列(固定 pass pipeline))
      • [✔ LLVM Machine Scheduler = List Scheduling + Critical Path Scheduling](#✔ LLVM Machine Scheduler = List Scheduling + Critical Path Scheduling)
  • [2.3 IREE GPU 后端(Vulkan / Metal)](#2.3 IREE GPU 后端(Vulkan / Metal))
      • [✔ Software Pipeline / Loop Peeling(规则)](#✔ Software Pipeline / Loop Peeling(规则))
      • [✔ Tile-based Workgroup Scheduling](#✔ Tile-based Workgroup Scheduling)
  • [IREE 总结表](#IREE 总结表)
  • 最终对比(浓缩版)

TVM = Graph IR + TIR + AutoScheduler
IREE = Graph IR(MLIR)+ Linalg / Tiling / Vectorization + LLVM Backend

它们的调度层次不同,因此调度算法体系也不一样。


1. TVM 的调度算法体系(TVM, AutoTVM, AutoScheduler)

TVM 的调度可以分成 手写 schedule(TIR)自动调度(AutoTVM/Ansor) 两类,各自使用不同的调度算法。


1.1 TVM 手写调度(TIR Schedule)

这是图级 → kernel-level 调度,不涉及自动搜索。

核心算法:

✔ Topological Scheduling(拓扑调度)

Relay Graph → TIR 时先进行拓扑排序,确保 operator 依赖有序。

✔ Compute-Ahead / Inline / Fuse 调度(Heuristic)

例如:

  • compute_at
  • compute_inline
  • fuse
  • reorder
  • tile
  • vectorize
  • unroll

这些不是自动算法,而是 DSL 主导的人类调度规则。


1.2 TVM AutoTVM(旧体系)

AutoTVM 是依靠 人工模板 + 搜索算法的系统:

✔ Simulated Annealing(模拟退火)为主

用于探索 schedule 的参数空间。

附带:

  • Random Search
  • Grid Search
  • XGBoost Cost Model(训练后指导退火过程)

AutoTVM 的搜索是 基于 cost model + 退火


1.3 TVM AutoScheduler(Ansor,新体系)

Ansor 是目前 TVM 的主要自动调度框架,算法更系统。

核心算法包括:

✔ Sketch Generation(启发式生成"草图")

这些草图通过:

  • 规则(tiling、split、unroll、vectorize)
  • 算法模板(卷积、matmul、dense)

不是搜索,是 启发式结构生成


✔ Evolutionary Search(遗传算法)

在草图空间内,用遗传算法搜索 schedule 参数:

  • Mutation
  • Crossover
  • Population-based Evolution

TVM 官方文档中明确指出:
Ansor 的主搜索算法为 Genetic Search(进化式搜索)


✔ ML-based Cost Model(XGBoost → GNN)

  • 测量 kernel
  • 回归预测 performance
  • 指导演化搜索方向

✔ Locality-aware Tiling / Cache-aware Scheduling(启发式)

适合 GPU/CPU/NPU 后端,和 schedule rules 内建。


TVM 自动调度小结

层级 TVM 使用的调度算法
Graph-level Topological Scheduling, Op Fusion
Kernel-level 手写 TIR schedule rules(人为规则)
AutoTVM Simulated Annealing + Cost Model
AutoScheduler(Ansor) Sketch + Evolutionary Search + ML Cost Model

2. IREE 的调度算法体系

IREE 基于 MLIR,所以调度逻辑非常工程化、层次清晰:

核心是:Linalg + Tiling + Vectorization + LLVM Pass Pipeline

IREE 的调度整体更偏 规则(rule-based) ,不像 TVM 那样大量搜索。

IREE 追求 predictable + compile-time 快速。


2.1 Graph-level(MHLO/StableHLO → Linalg)

✔ Topological Scheduling(拓扑调度)

所有 MLIR 图框架必备。

✔ Pattern-based Fusion(模式驱动融合)

IREE 通过 MLIR 的 pattern rewrite 做 operator fusion,比如:

  • elementwise fusion
  • producer-consumer fusion
  • tile-and-fuse

算法是 deterministic,无需搜索。


2.2 Linalg-level(Kernel-level)

这里是 IREE 调度的核心。IREE 的 kernel 调度依赖以下算法:

✔ Tiling + Loop Promotion(启发式规则)

IREE 主要使用 rule-based tiling:

  • tile size 由硬件配置 + 经验规则决定
  • promotion 将 tile 提升到 SRAM(支持 NPU / GPU 双后端)

并不是搜索,而是 硬件描述 + heuristic


✔ Linalg → Vector → LLVM 转换序列(固定 pass pipeline)

这本质上是一组转换规则:

  1. Tiling
  2. Fusion
  3. Vectorization
  4. Unrolling
  5. Bufferization
  6. LLVM Lowering
  7. Instruction Scheduling → LLVM 后端(List Scheduling / MachineScheduler)

LLVM 后端调度器最终负责具体的指令级调度:

✔ LLVM Machine Scheduler = List Scheduling + Critical Path Scheduling

IREE 直接依赖 LLVM 的经典调度算法。


2.3 IREE GPU 后端(Vulkan / Metal)

GPU 层调度包含:

✔ Software Pipeline / Loop Peeling(规则)

  • warp-level 分块
  • vector load/store
  • subgroup reduction

✔ Tile-based Workgroup Scheduling

固定 mapping,例如:

  • workgroup 分配 tile
  • local memory reuse

完全 rule-based,没有搜索。


IREE 总结表

层级 IREE 的调度算法
Graph-level Topological Sort + Pattern-based Fusion
Linalg-level Rule-based Tiling, Tile-and-Fuse, Vectorization
Bufferization Heuristic Allocation
LLVM Backend List Scheduling + Critical Path(LLVM 默认)
GPU Backend Rule-based tiling + pipeline

IREE 基本不做自动搜索,属于 规则驱动编译器


最终对比(浓缩版)

框架 调度思路 主算法
TVM Auto + Search Simulated Annealing, Evolutionary Search, ML Cost Model
IREE Rule-based + LLVM backend Pattern Fusion, Tiling Rules, LLVM List Scheduling
相关推荐
月挽清风25 分钟前
代码随想录第七天:
数据结构·c++·算法
小O的算法实验室27 分钟前
2026年AEI SCI1区TOP,基于改进 IRRT*-D* 算法的森林火灾救援场景下直升机轨迹规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
小郭团队1 小时前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发
充值修改昵称1 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
Deepoch2 小时前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
浅念-2 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
Hcoco_me2 小时前
大模型面试题84:是否了解 OpenAI 提出的Clip,它和SigLip有什么区别?为什么SigLip效果更好?
人工智能·算法·机器学习·chatgpt·机器人
BHXDML3 小时前
第九章:EM 算法
人工智能·算法·机器学习
却道天凉_好个秋4 小时前
目标检测算法与原理(三):PyTorch实现迁移学习
pytorch·算法·目标检测
无限进步_4 小时前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio