VM / IREE 的调度器架构

TVM / IREE 的真实调度器架构

TVM 调度器架构图(TVM Relay → TIR → Target IR)

TVM 有两个调度路径:

  1. 手写 schedule(TIR)
  2. 自动调度(AutoTVM / AutoScheduler Ansor)

两条路径最终都生成 TIR → Lower → LLVM/CUDA/Metal。

TVM 编译全栈架构图(含调度)

复制代码
+-------------------------------------------------------------+
|                           Relay IR                          |
|   (High-level graph: Conv2D, MatMul, Add, etc.)             |
+-------------------------------------------------------------+
                 | Graph-level passes (Fuse / InferType)
                 v
+-------------------------------------------------------------+
|               Relay -> TIR Lowering (Op Strategy)           |
|   选择算子实现 + Compute DAG + Layout transform              |
+-------------------------------------------------------------+
                 |
           (进入调度阶段)
                 |
      +----------------------------------------+
      |                Schedule 层             |
      +----------------------------------------+
      | 手写 TIR schedule   | AutoTVM (SA)     |
      | (compute_at, tile)  | AutoScheduler    |
      |                     | (Sketch + GA)    |
      +----------------------------------------+
                 | TIR IR (Optimized Kernel IR)
                 v
+-------------------------------------------------------------+
|                  Lower TIR → TEIR → PrimFunc                |
+-------------------------------------------------------------+
                 |
                 v
+-------------------------------------------------------------+
|        Target Lowering (LLVM / CUDA / Metal / Hexagon)      |
+-------------------------------------------------------------+

TVM 调度层(Schedule Layer)细节图

复制代码
                 +---------------------------+
                 |         compute_dag       |
                 +---------------------------+
                                |
                 +---------------------------+
                 |  Schedule Search Space    |
                 | (tile/split/reorder...)   |
                 +---------------------------+
                                |
       +---------------------------------------------------+
       |                 两类调度路径                       |
       +----------------------+----------------------------+
       | 手写调度(TIR)      | Auto 调度(Ansor / AutoTVM) |
       +----------------------+----------------------------+
       | Rule-based:          | AutoTVM: SA + Cost Model   |
       |  compute_at           | AutoScheduler(Ansor):      |
       |  fuse                 |   - Sketch                 |
       |  vectorize            |   - Evolutionary Search    |
       |  unroll               |   - ML Cost Model          |
       +----------------------+----------------------------+
                                |
                          TIR PrimFunc

TVM 的调度核心就是:
在 TIR 层进行 kernel-level schedule,再把 PrimFunc 降到 target backend。


IREE 调度器架构图(StableHLO → Linalg → HAL → LLVM/VMVX/Vulkan)

IREE 的调度结构完全基于 MLIR,不依赖搜索。

它是 规则型(Rule-based)流水线。

IREE 编译全栈(含调度)架构图

复制代码
+--------------------------------------------------------------+
|               StableHLO / MHLO / TOSA (High-level)           |
+--------------------------------------------------------------+
                   | HLO passes (Fusion / Canonicalize)
                   v
+--------------------------------------------------------------+
|              Linalg on tensors (核心调度层)                  |
+--------------------------------------------------------------+
                   |
          +----------------------------------+
          |  Linalg -> Loop / Tiling passes  |
          +----------------------------------+
          |   - Tile and Fuse                |
          |   - Vectorize                    |
          |   - Unroll                       |
          |   - Bufferization                |
          +----------------------------------+
                   v
+--------------------------------------------------------------+
|             Flow/HAL IR (执行时资源描述)                    |
+--------------------------------------------------------------+
                   v
+--------------------------------------------------------------+
|        Backend Lowering (LLVM / VMVX / Vulkan / Metal)       |
+--------------------------------------------------------------+
                   |
         LLVM Backend Scheduling (List Scheduling)

IREE Linalg 调度层详细图

复制代码
+--------------------------------------------------------------+
|                Linalg-on-tensors IR                          |
+--------------------------------------------------------------+
                   |
                   v
+--------------------------------------------------------------+
|             Tiling Pipeline (Rule-based)                     |
+--------------------------------------------------------------+
|   - linalg-tile (决定 tile 大小)                             |
|   - tile-and-fuse(融合 producer-consumer)                 |
|   - vectorization(自动矢量化)                             |
|   - loop unroll                                              |
|   - bufferization(分配到 SRAM/stack)                      |
+--------------------------------------------------------------+
                   |
                   v
+--------------------------------------------------------------+
|               LLVM Dialect (LLVM IR)                         |
+--------------------------------------------------------------+
                   |
          LLVM MachineScheduler (List Scheduling)

重点:

IREE 的调度高度依赖 Linalg → Tiling Pipeline,没有搜索算法。


最关键对比:TVM vs IREE 调度节点

下图展示两者调度发生的具体位置差异:

复制代码
TVM:                                  IREE:
Relay                                 StableHLO
  |                                      |
  v                                      v
TIR (调度核心)                          Linalg (调度核心)
  |   - 手写 schedule                     |   - Tile-and-fuse
  |   - AutoTVM                           |   - Vectorization
  |   - AutoScheduler                     |   - Rule-based Tiling
  v                                      v
PrimFunc                               LLVM IR
  |                                      |
  v                                      v
Target (LLVM/CUDA)                     Target (LLVM/Vulkan)
  |
  v
LLVM MachineScheduler                 LLVM MachineScheduler

TVM 调度核心在 TIR
IREE 调度核心在 Linalg(MLIR Dialect)

相关推荐
Leinwin5 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382505 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇5 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7596 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
Thera7776 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
运维小欣6 小时前
智能体选型实战指南
运维·人工智能
yy55276 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
Web极客码7 小时前
深度解析 OpenClaw 2026.3.7 重磅更新:可插拔 ContextEngine 重塑智能体架构
架构
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ7 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
Maverick068 小时前
OceanBase 架构原理深入
架构·oceanbase