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)

相关推荐
Joren的学习记录2 小时前
【Linux运维进阶知识】Nginx负载均衡
linux·运维·nginx
用户2190326527352 小时前
Java后端必须的Docker 部署 Redis 集群完整指南
linux·后端
胡先生不姓胡2 小时前
如何获取跨系统调用的函数调用栈
linux
Jtti3 小时前
服务器防御SYN Flood攻击的方法
运维·服务器
2501_941982053 小时前
RPA 的跨平台部署与统一自动化策略
运维·自动化·rpa
b***25113 小时前
电池自动分选机:精密分选保障新能源产业质量核心
运维·自动化·制造
数数科技的数据干货3 小时前
游戏流失分析:一套经实战检验的「流程化操作指南」
大数据·运维·人工智能·游戏
腾讯云中间件3 小时前
腾讯云 RocketMQ 5.x:如何兼容 Remoting 全系列客户端
架构·消息队列·rocketmq
代码AI弗森3 小时前
构建超级个体:AI Agent核心架构与落地实践全景解析
人工智能·架构
蒟蒻要翻身4 小时前
在同一局域网内共享打印机设置指南
运维