文献阅读(33)

  • 题目:Automatically Scheduling Halide Image Processing Pipelines
  • 时间:2016
  • 会议:SIGGRAPH
  • 研究机构:MIT

1 缩写 & 引用

2 abstract & introduction & prior work

本篇在之前Halide基础上,是说编程者要写高性能程序,需要费尽心思的写优化的schedule,这里提出了一个算法,扩展之前的边界分析,自动化产生优化的调度策略,就不需要人为写了
之前的研究方向有:

  • 自动化的tuning:很多是暴力搜索,需要实际跑到硬件上来测时间,费时间
  • 限制搜索空间:比如Darkroom,限制一些条件,变成整数线性规划问题
  • 多面体模型

3 representing and scheduling program

文献阅读(33)
一个Halide程序可以表示为无环有向图,边表示数据依赖,但即使有数据依赖,也没有规定前后计算的流程

3.1 scheduling for Producer-Consumer Locality

类似上一篇论文,这里还是举了3x3卷积的例子,给出了三种调度方式。第一种需要分配比较大的空间来存放中间结果,数据局部性最差;第二种压根不存放中间结果,这就会有冗余计算,虽然数据局部性最好;第三种用overlapped tiling的方式
文献阅读(33)

3.2 scheduling for input reuse

这个FPGA的数据复用还不一样,是面向CPU的,为了让数据还保留在cache里,这样重新读这个数据的时候就快得多;
对于一个矩阵乘法,如果这个矩阵很大的话,可能就不能都放到cache里,这就需要tiling了
文献阅读(33)

3.3 function bounds analysis

编译器动过interval analysis来确定循环的边界,确定中间数组的大小;这个边界在后面的自动调度算法中也需要
它从output函数开始,根据函数依赖链,在无环有向图中一步一步确定
如果这个边界不好自动判断,那就需要编程者显式声明

4 algorithm