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)

相关推荐
咩咩啃树皮5 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
CS创新实验室7 小时前
量子计算机的操作系统:原理、实践与经典架构之对比
架构·操作系统·量子计算
人间凡尔赛8 小时前
WAIC 2026 落幕,AI Agent 开发已进入 Harness 架构时代
人工智能·架构
大耳朵-小飞象8 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技8 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
晏宁科技YaningAI9 小时前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
HLC++9 小时前
Linux的进程间通信
android·linux·服务器
剑之所向9 小时前
前后端分离架构
架构
延凡科技10 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
华清远见IT开放实验室10 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设