文献阅读(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
一个Halide程序可以表示为无环有向图,边表示数据依赖,但即使有数据依赖,也没有规定前后计算的流程
3.1 scheduling for Producer-Consumer Locality
类似上一篇论文,这里还是举了3x3卷积的例子,给出了三种调度方式。第一种需要分配比较大的空间来存放中间结果,数据局部性最差;第二种压根不存放中间结果,这就会有冗余计算,虽然数据局部性最好;第三种用overlapped tiling的方式
3.2 scheduling for input reuse
这个FPGA的数据复用还不一样,是面向CPU的,为了让数据还保留在cache里,这样重新读这个数据的时候就快得多;
对于一个矩阵乘法,如果这个矩阵很大的话,可能就不能都放到cache里,这就需要tiling了
3.3 function bounds analysis
编译器动过interval analysis来确定循环的边界,确定中间数组的大小;这个边界在后面的自动调度算法中也需要
它从output函数开始,根据函数依赖链,在无环有向图中一步一步确定
如果这个边界不好自动判断,那就需要编程者显式声明