less than 1 minute read

official notes (English)

笔记

  • 首先对上节课一些没有详细介绍的概念给出解释:
    • block: 用于计算单元.
    • axis:
      • [block_axis] = T.axis.[axis_type]([axis_range], [mapped_value])
      • 为什么要指定axis? A: 提供了额外信息, 可能对程序优化是有帮助的, 当然也可能是冗余的或者能被程序分析得到.
      • 指定维度是期望block内部是自洽的, 课程中提到如果axis维度和循环维度不一致会报错, 和我实测有些出入, 等待助教在discussion的解答.
      • axis.spatial: 输入输出中都包含的axis, 互相独立(可调换顺序).
      • axis.reduce: 只在输入中包含, 在输出中被reduce掉的axis.
      • Sugars: vi, vj, vk = T.axis.remap("SSR", [i, j, k])
    • 属性声明: global_symbol是函数名, tir.noalias表示buffer没有重名.
  • 以low-levelnumpy实现矩阵乘为例, 演示循环展开和算子合并, 对加速原理进行了一些解释:
    • 循环展开: L1 Cache会缓存周围一段, 连续访问会比较快.
    • 合并处用了两个新函数:
      • reverse_compute_at: 给定blockloop, 会把指定block移动至loop下.
      • decompose_reduction: 把指定的block拆分为init_blockupdate_block, init_block移动至指定的loop前.
  • 补充介绍了上节课最后剩的张量表达式(TE).

Tags:

Categories:

Updated:

Comments